< INSERT HIGH-LEVEL OVERVIEW HERE - for now you can refer to the linked thread above >

New mechanics: Pulping

Pulping appears to work by evaluating the layers in a body part. If each layer meets any one of the following criteria then the body part is pulped:a) 100% bruised/burned/frostbite/melt/necrosis/blister/boil/freeze/condense (i.e. 10000+ in layer_effect_fraction)b) 250% dented (i.e. 25000+ in layer_dent_fraction)c) 100% cut (i.e. 10000+ in layer_cut_fraction) (cut in this case is synonymous with fracture)

Spines, skulls, and perhaps other body parts have the [PREVENTS_PARENT_COLLAPSE] token which prevents the parent body part (such as the head, upper body, or lower body) from being pulped until the sub-part is broken. It appears that only external body parts can be pulped, not internal organs. You will find that boneless body parts that don't contain a spine/skull part will pulp VERY easily (i.e. eyes/ears).

There does not appear to be any distinctions between the combat text descriptions of the pulping, beyond the messages being appropriate to the weapon used (edged, blunt, or creature body part).

As before, momentum = velocity * weight , so iron, copper, and silver end up with almost identical momentums (49). Wood has about 30% of the momentum of most metal bolts and much less cutting ability. These momentums are now on par with melee weapons and human body part attacks. The 0.34.11 "railgun" bolts/arrows had velocities around 1000 and momentum 1000 to 1600.

Comments and questions are welcome. Next, I will probably try to see if the momentum-based mechanics from 0.34.11 were changed with the combat/move speed update.

The momentums of melee weapons and creature attacks seem a bit higher, probably something to do with the new attack styles or attack timing. Melee might actually be powerful now compared to ranged attacks, a welcome change from 0.34.11.

Not 100% sure yet, but it looks like armor and defense are mostly the same as in 0.34.11.Needs a bit more research perhaps? The apparent code (seen as a disassembly) for material properties in combat doesn't appear to have changed from 0.34.11, aside from the known bug fixes.

The apparent code for the input data on the attacking weapon or body part is different. "Heavy" attacks have increased momentum (by how much, I am not sure), and "quick" attacks have decreased momentum. I am curious if the ATTACK_PREPARE_AND_RECOVER token has a direct effect on momentum - this would make the "velocity multiplier" portion of the ATTACK token semi-redundant?

Far be it from me to question your methods, but surely the table tilting of heavy/light/wild attacks screws with more values than just the recovery speeds. ...

I just found the momentum numbers, and monitoring them shows that:- Quick attacks hit with exactly 0.5x the momentum of a normal attack- Heavy attacks hit with exactly 1.5x the momentum of a normal attack- Wild attacks hit with exactly 1.5x the momentum of a normal attack- Precise attacks hit with the same momentum of a normal attack

Normal weapon use momentum numbers appear in line with 0.34.11, except that there appears to be an additional x2 multiplier on top of everything if the opponent is prone.

Typical momentum values:Noob (dabbling) average human slashing with a steel short sword: 67 (as in 0.34.11)Grand master average human slashing with a steel short sword: 134Grand master average human slashing a prone opponent with a steel short sword: 268 (in 0.34.11 it was 134!)Grand master average human heavy slashing a prone opponent with a steel short sword: 402Grand master size 80000 human heavy slashing a prone opponent with a steel short sword: 441

The 134 value is really just the 67 with some skill and situation bonuses piled on, so it is actually the upper limit for that person. An unskilled person puts out a range of values due to randomness, but the super skilled person appears to consistently put out 2x what they would do on average as a noob. So if you are playing a highly skilled character and want to do more damage, you are limited to getting stronger, getting fatter (really!), using heavy/wild attacks, or getting a better weapon. Infinite skill won't allow creatures to overcome their physical limits.

(My method is to attach a debugger to DF, use DFHack to find the address of something like the weapon raws, and then to set an access breakpoint there. The debugger lets me see the code in assembly language, which can be obtuse)

EDIT: contrary to my suspicions, there are no "inertial dampeners" or momentum shields on the head. If the brain is more protected, it appears to be mostly due to the increased skull relsize from 20 to 200.

...My informal experience with using enormous numbers also suggests that the wind-up doesn't really affect the end result. A super-slow punch is still just like any other punch.

EDIT2: Looks like you are correct. Changing [ATTACK_PREPARE_AND_RECOVER:3:3] to [ATTACK_PREPARE_AND_RECOVER:1:1] doesn't affect the momentum results, allowing you to attack more often at normal strength. No vanilla weapons are like this (all are at least 3:3). 1:1 weapons tend to be very overpowered as you can dodge/parry more often in addition to having more attacks.

vitype=df.item_type[v.item:getType()]--print(vitype)-- why are all items printed??material=dfhack.matinfo.decode(v.item)matdata=material.material.strengthvmatname=material.material.state_name.Solid--print(vmatname, v.item.subtype.name) --WOULD ENABLE THIS BUT BUG ON QUIVERS, OTHER ITEMS W/O SUBTYPES!

vbpart=unit.body.body_plan.body_parts[v.body_part_id]--print(vbpart.name_singular[0].value)-- why are all items printed??

if vitype=="ARMOR" or vitype=="HELM" or vitype=="GLOVES" or vitype=="SHOES" or vitype=="PANTS" thenprint(vmatname, v.item.subtype.name)actvol=v.item:getVolume()v.item:calculateWeight()actweight=v.item.weight*1000+v.item.weight_fraction/1000vbca=actvol*matdata.yield.IMPACT/100/500/10vbcb=actvol*(matdata.fracture.IMPACT-matdata.yield.IMPACT)/100/500/10vbcc=actvol*(matdata.fracture.IMPACT-matdata.yield.IMPACT)/100/500/10deduct=vbca/10if matdata.strain_at_yield.IMPACT >= 50000 or v.item.subtype.props.flags.STRUCTURAL_ELASTICITY_WOVEN_THREAD==true or

tisdata=race.tissue[vv.tissue_id]layername = vv.layer_namematerial=dfhack.matinfo.decode(tisdata.mat_type,tisdata.mat_index)--tissue has a mat_state, could it name properlymatdata=material.material.strengthmodpartfraction= vv.part_fraction

vitype=df.item_type[v.item:getType()]--print(vitype)-- why are all items printed??material=dfhack.matinfo.decode(v.item)matdata=material.material.strengthvmatname=material.material.state_name.Solid--print(vmatname, v.item.subtype.name) --WOULD ENABLE THIS BUT BUG ON QUIVERS, OTHER ITEMS W/O SUBTYPES!

vbpart=unit.body.body_plan.body_parts[v.body_part_id]--print(vbpart.name_singular[0].value)-- why are all items printed??

if vitype=="ARMOR" or vitype=="HELM" or vitype=="GLOVES" or vitype=="SHOES" or vitype=="PANTS" thenprint(vmatname, v.item.subtype.name)actvol=v.item:getVolume()v.item:calculateWeight()actweight=v.item.weight*1000+v.item.weight_fraction/1000vbca=actvol*matdata.yield.IMPACT/100/500/10vbcb=actvol*(matdata.fracture.IMPACT-matdata.yield.IMPACT)/100/500/10vbcc=actvol*(matdata.fracture.IMPACT-matdata.yield.IMPACT)/100/500/10deduct=vbca/10if matdata.strain_at_yield.IMPACT >= 50000 or v.item.subtype.props.flags.STRUCTURAL_ELASTICITY_WOVEN_THREAD==true or

tisdata=race.tissue[vv.tissue_id]layername = vv.layer_namematerial=dfhack.matinfo.decode(tisdata.mat_type,tisdata.mat_index)--tissue has a mat_state, could it name properlymatdata=material.material.strengthmodpartfraction= vv.part_fraction

In the OP above I mention the pulping "rules". If we go for 100% bruised skin/fat/muscle and a 100% broken bone, we can pulp an arm in a single hit of about 50 momentum units (the example person only requires 44, I think). It looks like a solid punch from a noob could do this; however, humans generally can't pulp another human's arm in a single hit because the contact area of punches and kicks are less than the contact area of the arm. Unless your weapon is larger than the target body part, you can expect to have to hit something at least 3 times to pulp it.

Playing as a bronze colossus, I was easily able to pulp human body parts in single hits.

For other readers who want to know how to use lua scripts:1. You need to have DFHack with your DF game. Many mods incorporate it, or you could add it to an otherwise vanilla game.2. Go to the "\hack\scripts\" subfolder and create a file named "combat.lua" containing the above lua script. You can name the file differently, but that changes what you have to type in step 3.3. While playing DF, target a creature with the look cursor or unit viewing cursor, and type "combat" into the DFHack console.

You can also put it in raw/scripts/ if you want. It's slightly better there because if you keep all your custom scripts there then you won't have to worry about updating DFHack: you can just delete the old hack/ folder or copy over it. It also makes your saves more transferrable.