What happened to these chain mail results? I tried a few tests and found that mail can be cut through by a material with higher SHEAR_* properties, but the mail doesn't fracture under impact. Mail does appear to let blunt attacks through with only some reduction in damage.
Hmm...sorry it seems I forgot to post those. I ran the simulations, and analyzed them, but the results never ended up here...
I modified Urist's uniarmor to convert it to chain mail:
[ITEM_ARMOR:ITEM_ARMOR_UNIPLATE]
[NAME:unimail:unimail]
[ARMORLEVEL:3]
[UBSTEP:1]
[LBSTEP:2] lower body now protected once
[SHAPED]
[LAYER:ARMOR]
[COVERAGE:100]
[LAYER_SIZE:20]
[LAYER_PERMIT:50]
[MATERIAL_SIZE:9]
[HARD]
[METAL]
[STRUCTURAL_ELASTICITY_CHAIN_ALL]
[ITEM_HELM:ITEM_HELM_UNIHELM]
[NAME:unichainhelm:unichainhelms]
[ARMORLEVEL:1]
[METAL_ARMOR_LEVELS]
[SHAPED]
[LAYER:ARMOR]
[COVERAGE:100]
[LAYER_SIZE:20] alter this to change "thickness"
[LAYER_PERMIT:20]
[MATERIAL_SIZE:2]
[HARD]
[METAL]
[BARRED]
[SCALED]
[LEATHER]
[SHAPED]
[STRUCTURAL_ELASTICITY_CHAIN_ALL]
[ITEM_SHOES:ITEM_SHOES_BOOTS_UNILOW]
[NAME:unichainboot:unichainboots]
[ARMORLEVEL:1]
[METAL_ARMOR_LEVELS]
[LAYER:OVER]
[COVERAGE:100]
[LAYER_SIZE:20] alter this to change "thickness"
[LAYER_PERMIT:15]
[MATERIAL_SIZE:1]
[METAL]
[LEATHER]
[HARD]
[STRUCTURAL_ELASTICITY_CHAIN_ALL]
[ITEM_GLOVES:ITEM_GLOVES_UNIGAUNTLETS]
[NAME:unichaingauntlet:unichaingauntlets]
[ARMORLEVEL:2]
[UPSTEP:1]
[SHAPED]
[LAYER:ARMOR]
[COVERAGE:100]
[LAYER_SIZE:20] alter this to change "thickness"
[LAYER_PERMIT:15]
[MATERIAL_SIZE:2]
[SCALED]
[BARRED]
[METAL]
[HARD]
[STRUCTURAL_ELASTICITY_CHAIN_ALL]
I then measured protection from copper bolts as a function of momentum (using targets with grand master armor user and shooters with great archer/marksdwarf). Here are the results with contact area 2:
and also with Contact Area 10
As you can see, all chainmail provides 100% protection at low bolt momentum, and then drops to 30% protection (corresponding to allowing only blunt damage through) at higher force. Here is a table summarizing the momentum needed for 65% armor penetration (the middle of the first drop)
Armor | Contact Area 2 | Contact Area 10 |
Adamantine | 58.938 | 128.592 |
Steel | 29.469 | 68.3145 |
Iron | 21.432 | 64.296 |
Bronze | 21.432 | 63.585 |
Copper | 20.0925 | 64.296 |
I also found that the conversion of damage to blunt does fail at crazy high momenta (something like 20000 for iron and 60000 for steel at contact area 2).
I can't even begin to propose any kind of relationship between the data and material properties. Iron, Bronze, and Copper all appear to be the same, steel is slightly better, and then adamantine protects up to roughly double the momentum stopped by steel. Also, it appears that the cutoff more than doubles when increasing contact area to 10, so that may not follow the same rounding procedure as before either. Also, the transition from 1 to 0.3 is much slower than for plate armor transitioning from 1 to zero.
For the very interested (perhaps Urist?) I also posted the full data set on
DFFD.
Given that the behavior is kind of strange vs contact area, I think it might be worth testing what happens if dwarves are wearing 3 layers of 15 thickness mail (which is possible in-game). I'll put it on the list...
If Urist happens to be reading this, I am working on implementing his script, but I ran into snag with making it work with my automatic testing. I need a way to wait until the macro has finished placing all the dwarves before running the quality changing script. Ideally it would be nice if there was a way to make a DFHack lua script loop until the number of dwarves reaches a given number, and then continue. Barring this, I could have it pipe the number of dwarves back to perl, and have perl to the wait loop. If neither will work, then I guess I am stuck just waiting a fixed amount of time and assuming that all dwarves will be placed. If I do this, I will definitely need my analysis of gamelog.txt to check and make sure bolts fired are the desired quality.
Edit - it appears make lua sleep is not OS portable, but is easy on linux (for me). Now I just have to count dorfs, which I think I can figure out...
Edit #2 - it's somewhat embarrassing how long it took me to figure out that "#" gives you the number of elements in a table in Lua. So it appears that #df.global.world.units.all should do the trick.
Edit #3 - it seems my mucking around with lua was kind of a waste of time, as I have no good way to start the macro and then send a command to DFHack without shifting focus away from Dwarf Fortress, which of course hangs the macro (and apparently also DFHack and dwarf fortress in a particularly nasty way if I then run the lua checking script). Oh well, I'll just wait a set time
.