Things I have the answers to offhand:
This is handled in melee.cpp in melee_practice()
The short version is that each miss spreads practice evenly amoung the attack types the weapon is cabable of (pretty slow progress though); while each hit distributes practice based on the damage actually inflicted.
Thereās a little twist, in that the order in which practice happens depends on the weapon type, so when you attack with a spear, it does stab then bash, which means bash basically gets leftovers, since focus was already reduced by stabbing having its practice.
This is in missed_by() defined in ranged.cpp
rng(0, (8 - firing_skill) * 3) + rng(0, (9 - firearm_skill)) + rng(0, 12 - dex) + rng(0, 12 - per) + rng(0, arm_encumbrance * 2) + rng(0, eye_encumbrance * 4) + rng(0, ammo_dispersion) + rng(0, gun_dispersion) + rng(recoil / 4, recoil)
This is in ready_to_revive() in items.cpp (corpses are items)
Each turn, the chance to res is:
age_in_hours > 6 && one_in( (age_in_hours - ((corpse_burnt/corpse_volume) * 24)) / corpse_damage + 1)
In other words, no revival earlier than 6 hours regardless.
After that, burning scales back effective corpse age based on proportion of burnt-ness (once burnt == volume, the item is destroyed outright), and the age is divided by amount of damage (the scale is 0-5), so wacking a zombie corpse once doubles time to resurection.
There isnāt one, low health stat wonāt kill you, youāll just have chronic colds and such.