fix(animation): preserve wire motion on every spawn path

Replace the door-specific static-animation seed with one retail description-then-enter-world initializer shared by normal and reactive spawns. This preserves authoritative Dead and On/Off states, prevents replacement corpses from returning to Ready, and pins the lifecycle with Core and App tests.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-12 14:27:44 +02:00
parent 9b97102c67
commit 8be933fc94
9 changed files with 335 additions and 64 deletions

View file

@ -46,6 +46,39 @@ Copy this block when adding a new issue:
---
## #204 — Replacement corpses replay the death transition and stand back up
**Status:** DONE — 2026-07-12, user visually confirmed multiple corpses remain fallen
**Severity:** HIGH
**Component:** live entities / animation / CreateObject lifecycle
**Description:** A killed monster played its death animation correctly, but
when ACE replaced the victim object with its lootable corpse, the body visibly
returned to the standing pose and replayed the fall.
**Root cause:** Six-object live trace proved ACE sent every corpse CreateObject
with the correct `NonCombat + Dead` motion. A follow-up trace after the first
correction showed the replacement corpse nevertheless completed `Ready`: its
persistent Dead rest pose is static, so it bypassed the normal multi-frame
spawn branch and entered the broader #187 reactive branch. That branch had
been generalized from doors by its gate but still hard-coded Door On/Off from
`PhysicsState`; for a corpse those commands did not select a cycle, leaving the
motion-table default Ready and producing the hard upright pop.
**Resolution:** Both live-spawn branches now use one data-driven initializer.
It installs the motion-table default, applies the authoritative MovementData
stance/command, and then calls `MotionTableManager.HandleEnterWorld()` exactly
like retail's description-then-enter-world lifecycle. No corpse or door type
switch remains. App tests pin Dead and Door On/Off wire-state resolution; a
Core conformance test pins removal of the detached Ready→Dead link before the
first rendered tick.
**Research:** `docs/research/2026-07-12-death-and-auto-target-pseudocode.md`
**Acceptance:** Kill several monsters. Each falls once, is replaced by a
lootable corpse in the same fallen pose, and never visibly stands between the
victim deletion and corpse display.
## #203 — Unequipping armor freezes character and world animations — FIXED
**Status:** DONE — 2026-07-11 (this change)