fix(animation): restore retail transition sign gates
Match the v11.4186 CSequence transition assembly and ACE cross-reference, including direction-specific pose gates and the strict physics epsilon boundary. Add conformance tests and correct the stale research interpretation. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
parent
c5ab99081c
commit
31a0889f08
4 changed files with 155 additions and 42 deletions
|
|
@ -1140,6 +1140,16 @@ still moves the frame even with nothing animating.
|
|||
|
||||
## 23. `CSequence::advance_to_next_animation` (line 301622, addr `0x005252b0`)
|
||||
|
||||
> **2026-07-19 assembly correction:** the cleaned pseudocode below lost four
|
||||
> branch predicates. Matching v11.4186 assembly and ACE agree: elapsed ≥ 0
|
||||
> subtracts the outgoing pose only for negative framerate and combines the
|
||||
> incoming pose only for positive framerate; elapsed < 0 subtracts only for
|
||||
> non-negative outgoing framerate and combines only for negative incoming
|
||||
> framerate. The nested physics gate is strict
|
||||
> `abs(framerate) > F_EPSILON`. Use
|
||||
> `r1-ace-sequence.md:70-86` and the production `CSequence` conformance tests,
|
||||
> not the unconditional-pose cleanup later in this section.
|
||||
|
||||
**Signature:** `advance_to_next_animation(CSequence const* this, double arg2,
|
||||
AnimSequenceNode const** arg3, double* arg4, Frame* arg5)` — `arg2` is
|
||||
the signed elapsed/rate value carried over from `update_internal`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue