[Edit - DISCLAIMER - it does not actually appear that there is any significant difference in the power of ranged weapons in 40.XX vs 34.11. I had heard rumors that they were, but so far all tests show them to be equal. If you have evidence of differences, I am VERY interested]
I heard some
rumors that ranged weapons are even more deadly in this version than the last, so I decided to do some testing, following the methods outlined
in this thread Here are some initial results, and I will try to update with more details as I complete more testing.
1) Initial results suggest there is no change the the protection armor offers against projectiles, as outlined on the wiki
here. For vanilla DF, this is somewhat irrelevant as plate armor offers absolutely no protection, but by adjusting the raws for [SHOOT_FORCE] of crossbows I found that the force required to pierce adamantium armor with copper bolts is unchanged since 34.11:
[Edit - in vanilla DF SHOOT_FORCE is 1000, which is over 10 times what can be blocked by even adamantine armor. The crazily high forces combined with tiny contact area render plate armor useless against projectiles in both 34.11 and 40.03]
As an aside, this deflection vs. force curve has an interesting kink in it. These results are for shooting at custom creatures with only an upper and lower body:
[CREATURE:ARENA_BLOB]
[DESCRIPTION:A blob of flesh destined to die horribly.]
[NAME:arena blob:arena blobs:arena blobby]
[CASTE_NAME:arena blob:arena blob:arena blobby]
[CREATURE_TILE:1][COLOR:7:0:0]
[CREATURE_SOLDIER_TILE:2]
Many of the following tags are actually caste-level tags (in this case, male and female), but because there are no differences between the castes for these tags in a dwarf, you can add them earlier. Any caste-level tag that occurs before castes are explicitly declared is saved up and placed on any caste that is declared later, unless the caste is explicitly derived from another caste.
[INTELLIGENT]
[TRANCES]
[BENIGN]
[NOPAIN]
[NOEXERT]
[CANOPENDOORS]
[PREFSTRING:squishiness]
[BODY:BASIC_2PARTBODY]
Next we use body detail plans (which have their own raw file) to streamline the addition of some of the common materials, tissues and their relationships with each other.
[BODY_DETAIL_PLAN:STANDARD_MATERIALS]
[BODY_DETAIL_PLAN:STANDARD_TISSUES]
[BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SKIN:FAT:MUSCLE:BONE:CARTILAGE]
****I don't think the rest of this matters, but I left it the same as regular dwarves***
These classes are used by syndromes (such as poison) as well as some restricted entity positions. You can name them whatever you want.
[CREATURE_CLASS:GENERAL_POISON]
Some tags to control the overall infection behavior.
[GETS_WOUND_INFECTIONS]
[GETS_INFECTIONS_FROM_ROT]
[USE_MATERIAL_TEMPLATE:PUS:PUS_TEMPLATE]
[PUS:LOCAL_CREATURE_MAT:PUS:LIQUID]
Attributes for dwarves are still described in terms of the median value below, but the actual game effects are altered according to the raw numbers. The numbers are different percentile values. 1000 is the human median for all attributes, so dwarven strength, for instance, has a higher median of 1250, although they suffer from their smaller size.
[PHYS_ATT_RANGE:STRENGTH:450:950:1150:1250:1350:1550:2250] +
[PHYS_ATT_RANGE:AGILITY:150:600:800:900:1000:1100:1500] -
[PHYS_ATT_RANGE:TOUGHNESS:450:950:1150:1250:1350:1550:2250] +
[MENT_ATT_RANGE:ANALYTICAL_ABILITY:450:950:1150:1250:1350:1550:2250] +
[MENT_ATT_RANGE:FOCUS:700:1200:1400:1500:1600:1800:2500] ++
[MENT_ATT_RANGE:CREATIVITY:450:950:1150:1250:1350:1550:2250] +
[MENT_ATT_RANGE:PATIENCE:450:950:1150:1250:1350:1550:2250] +
[MENT_ATT_RANGE:MEMORY:450:950:1150:1250:1350:1550:2250] +
[MENT_ATT_RANGE:SPATIAL_SENSE:700:1200:1400:1500:1600:1800:2500] ++
These tags establish the growth phases of the creature's life. The format is (BODY_SIZE|<year>|<day>|<average size>).
[BODY_SIZE:0:0:3000]
[BODY_SIZE:1:168:15000]
[BODY_SIZE:12:0:60000]
These body modifiers give individual dwarves different characteristics. In the case of HEIGHT, BROADNESS and LENGTH, the modifier is also a percentage change to the BODY_SIZE of the individual creature. The seven numbers afterward give a distribution of ranges. Each interval has an equal chance of occurring.
[BODY_APPEARANCE_MODIFIER:HEIGHT:100:100:100:100:100:100:100]
[APP_MOD_IMPORTANCE:500]
[BODY_APPEARANCE_MODIFIER:BROADNESS:100:100:100:100:100:100:100]
[APP_MOD_IMPORTANCE:500]
In order to set properties for body parts, first you select them. In this case, we select all body parts of category EYE, then we add a few modifiers to them.
These are as before.
[MAXAGE:150:170]
Attack definitions are formatted as follows:
Here, GENERAL_BABY_NAME is at the creature level, and BABYNAME is at the caste level. These names could be gender-specific but aren't right now.
[BABY:1]
[GENERAL_BABY_NAME:dwarven baby:dwarven babies]
[BABYNAME:dwarven baby:dwarven babies]
[CHILD:12]
[GENERAL_CHILD_NAME:dwarven child:dwarven children]
[CHILDNAME:dwarven child:dwarven children]
[EQUIPS]
[CAVE_ADAPT]
[DIURNAL]
This is the new format for making specific unit names for a creature. Any unit token can be used. If you want to add a caste-specific profession name, use CASTE_PROFESSION_NAME instead, once the caste has been declared.
[PROFESSION_NAME:CRAFTSMAN:craftsdwarf:craftsdwarves]
[PROFESSION_NAME:FISHERMAN:fisherdwarf:fisherdwarves]
[PROFESSION_NAME:HAMMERMAN:hammerdwarf:hammerdwarves]
[PROFESSION_NAME:SPEARMAN:speardwarf:speardwarves]
[PROFESSION_NAME:CROSSBOWMAN:marksdwarf:marksdwarves]
[PROFESSION_NAME:AXEMAN:axedwarf:axedwarves]
[PROFESSION_NAME:SWORDSMAN:swordsdwarf:swordsdwarves]
[PROFESSION_NAME:MACEMAN:macedwarf:macedwarves]
[PROFESSION_NAME:PIKEMAN:pikedwarf:pikedwarves]
[PROFESSION_NAME:BOWMAN:bowdwarf:bowdwarves]
[PROFESSION_NAME:MASTER_CROSSBOWMAN:Elite Marksdwarf:Elite Marksdwarves]
[PROFESSION_NAME:MASTER_BOWMAN:Elite Bowdwarf:Elite Bowdwarves]
[SPEECH:dwarf.txt]
[HOMEOTHERM:10067]
[ALCOHOL_DEPENDENT]
[SWIMS_LEARNED][SWIM_SPEED:2500]
[PERSONALITY:IMMODERATION:0:55:100]
[PERSONALITY:VULNERABILITY:0:45:100]
[PERSONALITY:STRAIGHTFORWARDNESS:0:55:100]
[MANNERISM_FINGERS:finger:fingers]
[MANNERISM_NOSE:nose]
[MANNERISM_EAR:ear]
[MANNERISM_HEAD:head]
[MANNERISM_EYES:eyes]
[MANNERISM_MOUTH:mouth]
[MANNERISM_HAIR:hair]
[MANNERISM_KNUCKLES:knuckles]
[MANNERISM_LIPS:lips]
[MANNERISM_CHEEK:cheek]
[MANNERISM_NAILS:nails]
[MANNERISM_FEET:feet]
[MANNERISM_ARMS:arms]
[MANNERISM_HANDS:hands]
[MANNERISM_TONGUE:tongue]
[MANNERISM_LEG:leg]
[MANNERISM_LAUGH]
[MANNERISM_SMILE]
[MANNERISM_WALK]
[MANNERISM_SIT]
[MANNERISM_BREATH]
[MANNERISM_POSTURE]
[MANNERISM_STRETCH]
[MANNERISM_EYELIDS]
[SPOUSE_CONVERSION_TARGET]
Now we'll declare the specific castes.
[CASTE:FEMALE]
The gender tag lets it know how breeding works.
[FEMALE]
[MULTIPLE_LITTER_RARE]
To add beards, put square brackets around the following:
BODY_DETAIL_PLAN:FACIAL_HAIR_TISSUE_LAYERS
[CASTE:MALE]
[MALE]
[BODY_DETAIL_PLAN:FACIAL_HAIR_TISSUE_LAYERS]
This command lets you select all of the castes again.
[SELECT_CASTE:ALL]
[SKILL_RATES:1:8:8:16]
Now we'll select all of the hair tissue layers we can find so that we can add colorations to them. Even if the castes have different tissue layers, it'll find the layers and establish modifiers for each of the castes properly.
[SET_TL_GROUP:BY_CATEGORY:HEAD:HAIR]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:CHEEK_WHISKERS]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:CHIN_WHISKERS]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:MOUSTACHE]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:SIDEBURNS]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:EYEBROW]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:EYELASH]
A color modifier takes a list of color patterns (every color is associated to a monotone color pattern of its color, so you can also use color tokens) and frequencies.
[TL_COLOR_MODIFIER:AMBER:1:AUBURN:1:BLACK:1:BROWN:1:BUFF:1:BURNT_SIENNA:1:BURNT_UMBER:1:CHARCOAL:1:CHESTNUT:1:CHOCOLATE:1:CINNAMON:1:COPPER:1:DARK_BROWN:1:DARK_CHESTNUT:1:DARK_TAN:1:ECRU:1:FLAX:1:GOLD:1:GOLDEN_YELLOW:1:GOLDENROD:1:LIGHT_BROWN:1:MAHOGANY:1:OCHRE:1:PALE_BROWN:1:PALE_CHESTNUT:1:PUMPKIN:1:RAW_UMBER:1:RUSSET:1:SAFFRON:1:SEPIA:1:TAN:1:TAUPE_DARK:1:TAUPE_GRAY:1:TAUPE_MEDIUM:1:TAUPE_PALE:1:TAUPE_SANDY:1]
[TLCM_NOUN:hair:SINGULAR]
[TL_COLOR_MODIFIER:GRAY:1]
This gives the start and finish time in <year>|<days> for the color change to occur
[TLCM_NOUN:hair:SINGULAR]
[TLCM_TIMING:ROOT:80:0:130:0]
[TL_COLOR_MODIFIER:WHITE:1]
[TLCM_NOUN:hair:SINGULAR]
[TLCM_TIMING:ROOT:130:0:150:0]
Now we'll select the eyebrows and eyelashes and give them variable lengths.
[SET_TL_GROUP:BY_CATEGORY:HEAD:EYEBROW]
[TISSUE_LAYER_APPEARANCE_MODIFIER:LENGTH:50:80:90:100:110:120:150]
[APP_MOD_NOUN:eyebrows:PLURAL]
[APP_MOD_DESC_RANGE:55:70:90:110:130:145]
[TISSUE_LAYER_APPEARANCE_MODIFIER:DENSE:50:80:90:100:110:120:150]
[APP_MOD_NOUN:eyebrows:PLURAL]
[APP_MOD_DESC_RANGE:55:70:90:110:130:145]
[TISSUE_LAYER_APPEARANCE_MODIFIER:HIGH_POSITION:0:70:90:100:110:130:200]
[APP_MOD_NOUN:eyebrows:PLURAL]
[SET_TL_GROUP:BY_CATEGORY:HEAD:EYELASH]
[TISSUE_LAYER_APPEARANCE_MODIFIER:LENGTH:50:80:90:100:110:120:150]
[APP_MOD_NOUN:eyelashes:PLURAL]
[APP_MOD_DESC_RANGE:55:70:90:110:130:145]
All of the other hair is selected and started at length zero. It's fine to group them all together like this -- the creature can still accomodate different lengths once hair cutting/styling goes in. I used one modifier here because the growth rates and starting length are all the same.
[SET_TL_GROUP:BY_CATEGORY:HEAD:HAIR]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:CHEEK_WHISKERS]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:CHIN_WHISKERS]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:MOUSTACHE]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:SIDEBURNS]
[TISSUE_LAYER_APPEARANCE_MODIFIER:LENGTH:0:0:0:0:0:0:0]
[APP_MOD_NOUN:hair:SINGULAR]
Here we set the growth rate. This will change the modifier (LENGTH) by 1 each day up to a maximum of 1000 from the start of the dwarf's life (early beards!) for as long as the dwarf is alive. The format is (APP_MOD_RATE|<rate>|<scale>|<min>|<max>|<start year>|<start day>|<end year>|<end day>) where the final two tokens can be replaced by NO_END if the growth is to continue indefinitely.
[APP_MOD_RATE:1:DAILY:0:1000:0:0:NO_END]
[APP_MOD_DESC_RANGE:10:25:75:125:200:300]
[TISSUE_LAYER_APPEARANCE_MODIFIER:CURLY:0:70:90:100:110:130:200]
[APP_MOD_NOUN:hair:SINGULAR]
[TISSUE_LAYER_APPEARANCE_MODIFIER:GREASY:0:70:90:100:110:130:200]
[APP_MOD_NOUN:hair:SINGULAR]
[TISSUE_LAYER_APPEARANCE_MODIFIER:DENSE:50:80:90:100:110:120:150]
[APP_MOD_NOUN:hair:SINGULAR]
[APP_MOD_DESC_RANGE:55:70:90:110:130:145]
[SET_TL_GROUP:BY_CATEGORY:HEAD:HAIR]
[TISSUE_STYLE_UNIT:HAIR:STANDARD_HAIR_SHAPINGS]
[TSU_NOUN:hair:SINGULAR]
[SET_TL_GROUP:BY_CATEGORY:HEAD:CHEEK_WHISKERS]
[PLUS_TL_GROUP:BY_CATEGORY:HEAD:CHIN_WHISKERS]
[TISSUE_STYLE_UNIT:BEARD:STANDARD_BEARD_SHAPINGS]
[TSU_NOUN:beard:SINGULAR]
[SET_TL_GROUP:BY_CATEGORY:HEAD:MOUSTACHE]
[TISSUE_STYLE_UNIT:MOUSTACHE:STANDARD_MOUSTACHE_SHAPINGS]
[TSU_NOUN:moustache:SINGULAR]
[SET_TL_GROUP:BY_CATEGORY:HEAD:SIDEBURNS]
[TISSUE_STYLE_UNIT:SIDEBURNS:STANDARD_SIDEBURNS_SHAPINGS]
[TSU_NOUN:sideburns:PLURAL]
Here we handle nail length.
*** need a new style to keep these short and need to make the entity def say to keep them short
SET_TL_GROUP:BY_CATEGORY:FINGER:NAIL]
PLUS_TL_GROUP:BY_CATEGORY:TOE:NAIL]
TISSUE_LAYER_APPEARANCE_MODIFIER:LENGTH:100:100:100:100:100:100:100]
APP_MOD_RATE:1:DAILY:0:1000:0:0:NO_END]
APP_MOD_NOUN:nails:PLURAL]
Here all of the skin is selected and various colors are listed.
[SET_TL_GROUP:BY_CATEGORY:ALL:SKIN]
[TL_COLOR_MODIFIER:BROWN:1:BURNT_UMBER:1:CINNAMON:1:COPPER:1:DARK_BROWN:1:DARK_PEACH:1:DARK_TAN:1:ECRU:1:PALE_BROWN:1:PALE_CHESTNUT:1:PALE_PINK:1:PEACH:1:PINK:1:RAW_UMBER:1:SEPIA:1:TAN:1:TAUPE_PALE:1:TAUPE_SANDY:1]
[TLCM_NOUN:skin:SINGULAR]
[TISSUE_LAYER_APPEARANCE_MODIFIER:WRINKLY:0:0:0:0:0:0:0]
[APP_MOD_RATE:1:YEARLY:0:100:60:0:NO_END]
[APP_MOD_NOUN:skin:SINGULAR]
[APP_MOD_DESC_RANGE:0:0:0:1:25:50]
Now we do the eyes, using the somewhat clunky eye color patterns.
[SET_TL_GROUP:BY_CATEGORY:EYE:EYE]
[TL_COLOR_MODIFIER:IRIS_EYE_AMETHYST:1:IRIS_EYE_AQUAMARINE:1:IRIS_EYE_BRASS:1:IRIS_EYE_BRONZE:1:IRIS_EYE_COBALT:1:IRIS_EYE_COPPER:1:IRIS_EYE_EMERALD:1:IRIS_EYE_GOLD:1:IRIS_EYE_HELIOTROPE:1:IRIS_EYE_JADE:1:IRIS_EYE_OCHRE:1:IRIS_EYE_RAW_UMBER:1:IRIS_EYE_RUST:1:IRIS_EYE_SILVER:1:IRIS_EYE_SLATE_GRAY:1:IRIS_EYE_TURQUOISE:1]
[TLCM_NOUN:eyes:PLURAL]
and for some reason deflections occur off the upper body at a higher force than the lower body, as illustrated by repeating the experiment with the breastplate removed and the blobs wearing only greaves:
I thought maybe this was because greaves have different layer thickness than breastplates, so I copied all the properies of breastplates to greaves and repeated, but obtained the same result (the "uniform" dataset), so I am puzzled as to what is causing the difference. Anyhow, back to the main point.
2) The rate of fire for crossbows and bows seems to be
much higher in this version than the last one. As far as I can tell, ranged weapons fire as the same speed as melee attacks in 40.03, while they were much slower in 34.11. I have not quantified this yet, but significantly increasing the rate of fire definitely would make ranged weapons (even more) deadly.
[Edit - my initial testing does NOT show a significant difference in fire rate between 40.03 and 34.11. It appears that melee attacks are roughly twice as fast as ranged attacks in both versions, but this is very hard to quantify as melee attacks by the AI are quite variable. In any case, it's not a major difference].
3) Ranged weapons can now completely destroy body parts using the pulping mechanics (at least I assume this is what's going on). In my tests, I found that body parts could be "mostly cut away" or "cloven asunder", which both are fatal to Arena Blobs. This caused the majority of Blob targets to be killed in tests where deflection was not 100%, while no blobs were killed at any forces tested (up to F=128) in 34.11. It is not clear how this would impact the deadliness of bolts under vanilla conditions, as I believe these mechanics require the same part to be stuck multiple times, and most living creatures will give in to pain/bleed to death before a single body part is struck repeatedly. However maybe at high force a single bolt hit can now cleave body parts? This will be my next line of investigation.
Anyhow, I would like to do a lot more testing of this, but my time is somewhat limited as I have a 1 month old baby (who currently wants to be fed). If anyone else is interested in pursuing this, I have a library of perl scripts and DF macros that I use for running automated large scale testing in the arena, which I would be happy to share. They are set up to run on Linux, but it should be relatively easy to convert them to Windows if needed.