First off, Huge thanks to the great Toady One for for all the bug fixes and rebalancing ranged weapons. I plan to do detailed testing and update here, but for now some basic results.
I ran some quick tests of the frequency which bolts deflect off armor, or cause only nonserious wounds (bruises). For each test, I used 72 arena dwarf (I'll update with raws later) targets 2 tiles away from arena dwarf shooters, separated by fortifications. All dwaves had no skills, and were wearing helms, breastplates, greaves, gauntlets, high boots and chain mail shirts. In the following tables, columns are bolt material and rows are armor material.
Effectiveness of bolts vs. armored dwarves, 40.03 (identical to 34.11)
Deflection Frequency
| adamantine | steel | iron | bronze | copper | silver | bone | fake_wood |
adamantine | 0.901850 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.896346 | 0.910913 |
steel | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.372549 | 1.000000 |
iron | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
bronze | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
copper | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
Nonserious Frequency
| adamantine | steel | iron | bronze | copper | silver | bone | fake_wood |
adamantine | 0.917512 | 0.030702 | 0.068493 | 0.054726 | 0.042424 | 0.069767 | 0.912155 | 0.926058 |
steel | 0.000000 | 0.044335 | 0.046512 | 0.055838 | 0.037190 | 0.052632 | 0.622103 | 1.000000 |
iron | 0.000000 | 0.000000 | 0.066667 | 0.034483 | 0.043689 | 0.048913 | 0.038462 | 1.000000 |
bronze | 0.000000 | 0.000000 | 0.063218 | 0.025641 | 0.027397 | 0.042857 | 0.026882 | 1.000000 |
copper | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.075269 | 0.046948 | 0.031250 | 1.000000 |
Effectiveness of bolts vs. armored dwarves, 40.05
Deflection Frequency
| adamantine | steel | iron | bronze | copper | silver | bone | fake_wood |
adamantine | 0.900435 | 0.905960 | 0.905930 | 0.908506 | 0.906423 | 0.903659 | 1.000000 | 0.906030 |
steel | 0.000000 | 0.907206 | 0.897336 | 0.906998 | 0.909104 | 0.901708 | 0.902188 | 1.000000 |
iron | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.901222 | 1.000000 |
bronze | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.910138 | 1.000000 |
copper | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.899254 | 1.000000 |
Nonserious Frequency
| adamantine | steel | iron | bronze | copper | silver | bone | fake_wood |
adamantine | 0.984106 | 0.983229 | 0.980383 | 0.982630 | 0.980237 | 0.980134 | 1.000000 | 0.982343 |
steel | 0.000000 | 0.924362 | 0.912751 | 0.922099 | 0.923260 | 0.915643 | 0.981688 | 1.000000 |
iron | 0.000000 | 0.000000 | 0.048159 | 0.029570 | 0.053191 | 0.044568 | 0.978695 | 1.000000 |
bronze | 0.000000 | 0.000000 | 0.028424 | 0.038922 | 0.041475 | 0.026726 | 0.982506 | 1.000000 |
copper | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.041995 | 0.029474 | 0.978358 | 1.000000 |
As you can see, with the new updates bolts are deflected by steel and adamantine, and not by any other armors. There appear to be 100% deflections off the steel and adamantine plate armored portion of the dwarves, and not deflections off the chain armored parts (neck, facial features, upper arms).
Edit - It is worth noting that these changes are largely due to internal code modifications rather than changes to the raws. With these raws, there still would be no armor protection at all in 34.11. In other words, Toady has changed the code for ranged attacks significantly and careful analysis will be required to fully understand the changes.
Also, with the current raws, adamantine is significantly better than steel, as adamantine chain mail reduces nearly all hits to bruises, while steel chainmail does not (98% nonserious wounds for addy, vs 92% for steel).
Overall, I would say this is a vast improvement over 34.11. Adamantine is nearly impenetrable, and steel plate is also impenetrable, but steel-clad dwaves are still vulnerable in the areas not covered by plate armor.
It might be nice if the lower armors had a small chance to deflect bolts, and steel wasn't 100% effective, but I don't know if this is possible with the current system. In 34.11 it was if you set the contact area to 10, as the rounding used then made different thicknesses of plate armor have different effectiveness, but this may have actually been due to one of the rounding errors Toady fixed. I will run deflection vs. [SHOOT_FORCE] calculations today, and post results when they are available.
Also, I would greatly welcome comments or suggestions on what should test and how I should do it or results of other people's testing. If anyone would like to try my automated testing scripts I am more than happy to share them. DFFD doesn't seem to be working now, so I am open to other suggestions of where to place files, or can just email them to you if you send me a PM.
Edit - here are the raws for Arena Dwarves
[CREATURE:ARENA_DWARF]
[DESCRIPTION:A short, sturdy creature destined to die horribly.]
[NAME:arena dwarf:arena dwarves:arena dwarven]
[CASTE_NAME:arena dwarf:arena dwarves:arena dwarven]
[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:beards]
[BODY:HUMANOID:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:HUMANOID_JOINTS:THROAT:NECK:SPINE:BRAIN:SKULL:5FINGERS:5TOES:MOUTH:TONGUE:FACIAL_FEATURES:TEETH:RIBCAGE]
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]
[BODY_DETAIL_PLAN:HEAD_HAIR_TISSUE_LAYERS]
Eyebrows and eyelashes are manually added here.
[USE_TISSUE_TEMPLATE:EYEBROW:EYEBROW_TEMPLATE]
[TISSUE_LAYER:BY_CATEGORY:HEAD:EYEBROW:ABOVE:BY_CATEGORY:EYE]
[USE_TISSUE_TEMPLATE:EYELASH:EYELASH_TEMPLATE]
[TISSUE_LAYER:BY_CATEGORY:EYELID:EYELASH:FRONT]
And nails.
[USE_MATERIAL_TEMPLATE:NAIL:NAIL_TEMPLATE]
[USE_TISSUE_TEMPLATE:NAIL:NAIL_TEMPLATE]
[TISSUE_LAYER:BY_CATEGORY:FINGER:NAIL:FRONT]
[TISSUE_LAYER:BY_CATEGORY:TOE:NAIL:FRONT]
Set up some major arteries that couldn't be handled in the raw templates. The selection commands can be used to grab tissue layers to adjust their properties after they have been created.
[SELECT_TISSUE_LAYER:HEART:BY_CATEGORY:HEART]
[PLUS_TISSUE_LAYER:SKIN:BY_CATEGORY:THROAT]
[TL_MAJOR_ARTERIES]
Then back to some more body detail plans.
[BODY_DETAIL_PLAN:FACIAL_HAIR_TISSUES]
[BODY_DETAIL_PLAN:STANDARD_HEAD_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_HEAD_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_RIBCAGE_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_RELSIZES]
[RELSIZE:BY_CATEGORY:LIVER:300] Of course! Standard relative size for humanoids is 200.
Tendons and ligaments are currently very abstract, but adding these flags will let wounds occur that damage them. The number afterward is the healing rate. Lower is faster.
[USE_MATERIAL_TEMPLATE:SINEW:SINEW_TEMPLATE]
[TENDONS:LOCAL_CREATURE_MAT:SINEW:200]
[LIGAMENTS:LOCAL_CREATURE_MAT:SINEW:200]
This makes the creature susceptible to severed nerves when muscles are torn in limb, grasp and stance parts.
[HAS_NERVES]
This controls the bleeding behavior.
[USE_MATERIAL_TEMPLATE:BLOOD:BLOOD_TEMPLATE]
[BLOOD:LOCAL_CREATURE_MAT:BLOOD:LIQUID]
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:]
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.
[SET_BP_GROUP:BY_CATEGORY:EYE]
[BP_APPEARANCE_MODIFIER:CLOSE_SET:0:70:90:100:110:130:200]
[APP_MOD_NOUN:eyes:PLURAL]
[BP_APPEARANCE_MODIFIER:DEEP_SET:0:70:90:100:110:130:200]
[APP_MOD_NOUN:eyes:PLURAL]
[BP_APPEARANCE_MODIFIER:ROUND_VS_NARROW:0:70:90:100:110:130:200]
[APP_MOD_NOUN:eyes:PLURAL]
[BP_APPEARANCE_MODIFIER:LARGE_IRIS:25:70:90:100:110:130:200]
[APP_MOD_NOUN:eyes:PLURAL]
[APP_MOD_DESC_RANGE:30:60:90:110:150:190]
[SET_BP_GROUP:BY_CATEGORY:LIP]
[BP_APPEARANCE_MODIFIER:THICKNESS:50:70:90:100:110:130:200]
[APP_MOD_NOUN:lips:PLURAL]
[APP_MOD_DESC_RANGE:55:70:90:110:150:190]
[SET_BP_GROUP:BY_CATEGORY:NOSE]
[BP_APPEARANCE_MODIFIER:BROADNESS:25:70:90:100:110:130:200]
[APP_MOD_DESC_RANGE:30:60:90:110:150:190]
[BP_APPEARANCE_MODIFIER:LENGTH:25:70:90:100:110:130:200]
[APP_MOD_DESC_RANGE:30:60:90:110:150:190]
[BP_APPEARANCE_MODIFIER:UPTURNED:0:70:90:100:110:130:200]
[BP_APPEARANCE_MODIFIER:CONVEX:0:70:90:100:110:130:200]
[APP_MOD_NOUN:nose bridge:SINGULAR]
[SET_BP_GROUP:BY_CATEGORY:EAR]
[BP_APPEARANCE_MODIFIER:SPLAYED_OUT:0:70:90:100:110:130:200]
[APP_MOD_NOUN:ears:PLURAL]
[BP_APPEARANCE_MODIFIER:HANGING_LOBES:0:70:90:100:110:130:200]
[APP_MOD_NOUN:ears:PLURAL]
[BP_APPEARANCE_MODIFIER:BROADNESS:90:95:98:100:102:105:110]
[APP_MOD_IMPORTANCE:700]
[APP_MOD_NOUN:ears:PLURAL]
[APP_MOD_DESC_RANGE:91:94:98:102:106:109]
[BP_APPEARANCE_MODIFIER:HEIGHT:90:95:98:100:102:105:110]
[APP_MOD_IMPORTANCE:700]
[APP_MOD_NOUN:ears:PLURAL]
[APP_MOD_DESC_RANGE:91:94:98:102:106:109]
[SET_BP_GROUP:BY_CATEGORY:TOOTH]
[BP_APPEARANCE_MODIFIER:GAPS:0:70:90:100:110:130:200]
[APP_MOD_NOUN:teeth:PLURAL]
[BP_APPEARANCE_MODIFIER:LENGTH:100:100:100:100:100:100:100] for vampires
[APP_MOD_IMPORTANCE:1000]
[APP_MOD_NOUN:teeth:PLURAL]
[APP_MOD_DESC_RANGE:30:60:90:110:150:190]
[SET_BP_GROUP:BY_CATEGORY:SKULL]
[BP_APPEARANCE_MODIFIER:HIGH_CHEEKBONES:0:70:90:100:110:130:200]
[BP_APPEARANCE_MODIFIER:BROAD_CHIN:0:70:90:100:110:130:200]
[BP_APPEARANCE_MODIFIER:JUTTING_CHIN:0:70:90:100:110:130:200]
[BP_APPEARANCE_MODIFIER:SQUARE_CHIN:0:70:90:100:110:130:200]
[SET_BP_GROUP:BY_CATEGORY:THROAT]
[BP_APPEARANCE_MODIFIER:DEEP_VOICE:0:70:90:100:110:130:200]
[BP_APPEARANCE_MODIFIER:RASPY_VOICE:0:70:90:100:110:130:200]
[SET_BP_GROUP:BY_CATEGORY:HEAD]
[BP_APPEARANCE_MODIFIER:BROADNESS:90:95:98:100:102:105:110]
[APP_MOD_IMPORTANCE:700]
[APP_MOD_DESC_RANGE:91:94:98:102:106:109]
[BP_APPEARANCE_MODIFIER:HEIGHT:90:95:98:100:102:105:110]
[APP_MOD_IMPORTANCE:700]
[APP_MOD_DESC_RANGE:91:94:98:102:106:109]
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]