Issue #3 (b)+(c): weapon damage reaches cultural icons -> full trkdead explosion + authored burn fire
(b) The 'tiny explosion' on the ram kill is AUTHORED: crunch res 31 = 'stephit'
(one video object, effect 1008 = ddam5 damage smoke) -- a step/ram squash is
small by design. The FULL explosion res 32 = 'trkdead' = psfx 15 dtrkboom
(fiery omni burst) + psfx 16 dtrkburn (the burning-wreck fire), reached by
WEAPON kills -- which the 1995 binary dispatches [T1]:
- MechWeapon::SendDamageMessage @004b9728 (part_013.c:6765) gates only
"target NOT derived from Mech@0x50bdb4 OR aimed zone set": a non-Mech
boresight target takes the zone=-1 damage UNCONDITIONALLY;
- Missile contact @004be078 dispatches at the struck solid's OWNER entity
with no class test at all.
Port wiring: Mech::WorldStructurePick returns the struck solid's owning entity
(BoxedSolid::GetOwningSimulation; TERRAIN.cpp:107/246 build every static solid
with its Terrain/CulturalIcon/Door entity as owner); the mech4 pick block
designates IT instead of the gBTTerrainEntity sentinel (sentinel = fallback);
the projectile contact path grew the non-mech damage-zoned else-branch
(@004be078 mirror, direct Dispatch). Plain terrain ignores the damage
(ENTITY.cpp:885 zone==-1 guard); an icon's handler maps -1 -> 0 and dies.
Truck armor is WeaponDamagePoints=1 (TRK.DMG): one laser = one dead truck.
(c) The burning fire is dtrkburn.pfx, authored INTO the death package (every
icon family carries 1016: trkdead/bigdead/meddead/msldead/twrdead). There is
NO looping BurningState fire in the binary: the damage-zone effect watcher
ctor @0042a984 has exactly one call site (the Mech ctor, part_012.c:10405), so
icon ExplosionTables are inert, and CulturalIcon has no Performance.
Documented as authentic -- nothing invented.
Verified live (BT_SHOT pixel capture): 26 laser kills, [cult] TakeDamage
type=3 -> DYING res=32 -> DPLIndependantEffect 1015+1016 at the icon origin;
frames show the orange dtrkboom fireball, dtrkburn flames on the fresh wreck,
and the rubble aftermath; ram harness re-run still fires crunch res 31.
Diags: BT_FIRE_AT_ICON (designate nearest ahead icon; live-icon census in
CULTURAL.cpp), BT_FX_TEST="1015,1016".
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
9fff079df4
commit
6f6a39b8c9
+31
-5
@@ -278,11 +278,37 @@ draw states WITHOUT the black-texel keying (which would hole the near-black char
|
||||
Side benefit: tree9 (GRASS tree/leaf cards) + bdet9 (trans-rail lattice) get their authored
|
||||
cutouts too. Post-death shot: irregular char splat, dark brown (71,44,34) lifting to
|
||||
near-terrain tan (115,100,91 vs terrain 131,119,108), no rectangle; pre-death frames
|
||||
unregressed (vehicles stay lit/diffuse — the `hasNormals` gate is untouched). [T2] ⚠ STILL OPEN
|
||||
(#3): (b) the death Explosion (psfx 1008 ddam5) not visually confirmed;
|
||||
(c) the authored BurningState fire visual unreconstructed. For (b): the ram fires the
|
||||
CRUNCH explosion res 31 (small, human-seen); res 32 is the icon's non-crunch explosion —
|
||||
check which the weapon-kill path should fire + psfx scale vs period footage. LESSON: `[cultvis]` log lines verify
|
||||
unregressed (vehicles stay lit/diffuse — the `hasNormals` gate is untouched). [T2]
|
||||
**(b)+(c) CLOSED (2026-07-19, pixel-verified, awaiting human confirm).** The icon death
|
||||
EXPLOSION packages are authored per KILL TYPE [T1, BTL4.RES byte-dump]: the CRUNCH
|
||||
res 31 = `stephit` (ONE video object, effect **1008** = ddam5 damage smoke) — the ram/step
|
||||
squash is SMALL **BY DESIGN**; the full res 32 = `trkdead` = **1015 dtrkboom.pfx** (fiery
|
||||
omni burst: vel 150, rad 3.5 exp 10, orange 2.0/0.7/0.2→1.0/0.3/0, ~1.5s) + **1016
|
||||
dtrkburn.pfx** (the BURNING-WRECK FIRE: 30 rising fire-card particles over a 5s emission,
|
||||
4±1s each ≈ a ~9s fire at the wreck). The whole icon family shares the pattern:
|
||||
bigdead=[1017 dbigboom,1016], meddead=[1018,1016], msldead/twrdead=[1017,1016],
|
||||
smldead=[1020,1022,1021]. **Item (c) verdict: the burning fire is the dtrkburn ONE-SHOT
|
||||
authored INTO the death package** — there is NO looping BurningState fire: the
|
||||
damage-zone effect watcher ctor @0042a984 has exactly ONE call site binary-wide (the
|
||||
Mech ctor, part_012.c:10405), so icon ExplosionTables are inert, and CulturalIcon has no
|
||||
Performance (AlwaysExecute is replication flush). Documented as authentic. **Item (b):
|
||||
the res-32 path is reached by WEAPON kills, which the binary DOES dispatch [T1]:**
|
||||
`MechWeapon::SendDamageMessage` @004b9728 (part_013.c:6765) gates only "target NOT
|
||||
derived from Mech@0x50bdb4 OR aimed zone set" — a non-Mech target under the boresight is
|
||||
damaged UNCONDITIONALLY (zone −1; the icon handler maps −1→0) — and the Missile contact
|
||||
branch @004be078 dispatches a zone=−1 TakeDamageMessage at the struck solid's OWNER with
|
||||
no class test at all. The port never delivered this because the structure pick designated
|
||||
the `gBTTerrainEntity` SENTINEL; now `Mech::WorldStructurePick` returns the struck
|
||||
solid's owning entity (`BoxedSolid::GetOwningSimulation` — every static solid is built
|
||||
with its Terrain/CulturalIcon/Door entity as owner, TERRAIN.cpp:107/246) and mech4.cpp
|
||||
designates IT (mech.cpp `WorldStructurePick`, mech4.cpp pick block + projectile contact
|
||||
else-branch). Truck armor is `WeaponDamagePoints=1` (TRK.DMG) — one laser kills it.
|
||||
Verified live: 26 laser kills `[cult] TakeDamage type=3` → `DYING … res=32` →
|
||||
`DPLIndependantEffect 1015+1016` at the icon origin → BT_SHOT frames show the orange
|
||||
dtrkboom fireball, dtrkburn flames on the fresh wreck, and the rubble aftermath; ram
|
||||
harness re-run still fires res 31 (crunch unregressed). All 24 psfx slots (incl. 15/16)
|
||||
load from the BTDPL.INI pages. Diag: `BT_FIRE_AT_ICON` (designate nearest ahead icon),
|
||||
`BT_FX_TEST="1015,1016"`. LESSON: `[cultvis]` log lines verify
|
||||
the STATE MACHINE, not pixels — only a screen check (BT_SHOT / human) verifies rendering.
|
||||
Diags: `BT_CULT_LOG` (census/damage/death + `[cultvis]` + `[cultobj]` per-object file/type/op
|
||||
flags). MP: replicants transition via `ReadUpdateRecord` → same SetState watcher path (untested
|
||||
|
||||
Reference in New Issue
Block a user