From d3de5f94eedd7869d7966e2ad8f2a40f8541a595 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Sun, 2 Aug 2026 14:42:04 -0500 Subject: [PATCH] #87/#96: 'mechs die with lightly damaged armor' AUDITED -- no port bug; it's ammo cook-off Byte-level audit of the entire damage chain vs the binary, all links exact: zone stream reads (@0041df5c == engine DAMAGE.cpp), ctor normalization (@0049ce50; constants 1.0/1e-4/0.5; shipped cells uniform 1/armorPts), TakeDamage @0041e4e0, the BT override @0049c690 (vital/leg 1.0/0.5/0.0), CriticalHit @0049ccc4 (0.5 fraction, 1.0 cap, authored-percentage cap), cook-off chain (@004bc3fc per-salvo stamp / @004bd300 rounds x amount / @004ac274 divide across the bin's plugged zones). Measured kill route: 6 of 7 bench deaths were bay-fire detonations -- LRM15 bin 10 rounds x 50 = 500 into its ONE authored carrier zone (content: madcat bins single-zone; 15 of 22 zones vital) -> one application 0->1.0 -> instant death, armor bright everywhere else. Field logs confirm dominance (Rajel 12 bay-fire events, ConnMan 10). The mech that died conventionally ended 0.97/0.93/0.92/0.85 charred -- darkening accumulates fine when mechs live long enough. Levers: the #96 heat economy (arms the bay fires) and purge training (EJECT hold extinguishes -- wired, logged, manual-trained in the pod). Also corrected a wrong KB address: FUN_0041e4e0 was labeled '.DZM res compiler' in decomp-reference.md/rendering.md -- it is DamageZone:: TakeDamage (byte-matches DAMAGE.cpp:379); swept both files. Co-Authored-By: Claude Fable 5 --- context/combat-damage.md | 28 ++++++++++++++++++++++++++++ context/decomp-reference.md | 4 +++- context/rendering.md | 4 +++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/context/combat-damage.md b/context/combat-damage.md index c0938ce..1edf23c 100644 --- a/context/combat-damage.md +++ b/context/combat-damage.md @@ -324,6 +324,34 @@ per ER-M laser; [[decomp-reference]] §5). Flying projectiles (LRM/autocannon) a reconstruction (`BTPushProjectile` — the 2007 Entity is too small for the binary's raw integrator offsets). [T2] +## "Mechs die with lightly damaged armor" — AUDITED, no port bug: it's AMMO COOK-OFF (2026-08-02) [T1 chain, T2 measured] +Field complaint (night 9): mechs die while their panels read nearly pristine, so "the scaling +must be off". A byte-level audit of the ENTIRE damage chain found **every link faithful**: +zone stream reads (arcade base ctor `@0041df5c` == engine DAMAGE.cpp, incl. the JointedMover +skip-5 branch); the BT ctor normalization loop (`@0049ce50` constants 1.0/1e-4/0.5 — and in +SHIPPED CONTENT the raw cells are EXACTLY `1/armorPts` uniform across all 5 types, so the +normalize is a no-op); `TakeDamage @0041e4e0` formula+clamps; the override `@0049c690` +(redirect gate, vital/leg thresholds 1.0/0.5/0.0 `@0049c99c..a4`); `CriticalHit @0049ccc4` +(fraction 0.5 `@0049ce48`, cap 1.0 `@0049ce4c`, the per-subsystem `applieddamageLevel, 0.1f)`** (part_007.c:9133, vtable `PTR_LAB_004f1730`, diff --git a/context/rendering.md b/context/rendering.md index e12433e..98a26e0 100644 --- a/context/rendering.md +++ b/context/rendering.md @@ -335,7 +335,9 @@ the limb swap ("the actual enemy mech in external view is not showing darkened a - **`.DZM`** (`VIDEO\SKIN.DZM`, 40 shipped) lists, per damage zone, the materials that zone paints: `[dz_ltorso] material=avaskin:avat2_dz_ltorso_mtl`. One file per SKIN VARIANT — the `dzm`/`dzms`/`dzmt`/`dzmo`/`dzma`/`dzmb`/`dzmc`/`dzmd` key family (same suffix set as the - `destroyed`…`destroyedd` video variants); the res compiler is `FUN_0041e4e0`. + `destroyed`…`destroyedd` video variants); the res-compiler address is UNKNOWN (the old + `FUN_0041e4e0` citation was WRONG — that is `DamageZone::TakeDamage`; corrected 2026-08-02, + swept with [[decomp-reference]]). - Compiled into BTL4.RES and parsed by **MUNGA's own `DamageZone` stream ctor** into `materialTable`, keyed by `EntitySegment::SkeletonType` (`engine/MUNGA/DAMAGE.cpp:311-336`, `GetMaterialList(skl_type)`) — real engine source [T0]. **This data was loaded and unused in the