BT410 notes: the master performance found whole -- 5.6KB @004a9b5c isolated from a Ghidra mis-merge, full call skeleton mapped
Not code -- evidence. The mech's master Performance was never decompiled because Ghidra sized the stream-builder's strcmp resolver at 6.6KB and swallowed everything behind it; the ctor's member-pointer constants prove @004a9b5c (master) and @004ab9d8 (replicant, hidden the same way inside @004ab430's range). One body, one ret, 1509 instructions, and its 111-call skeleton maps block-for-block onto our fragment-built Mech::Simulate -- validating the 5.3.90-104 arc -- while locating exactly what remains staged: the duck driver (three SetAnim/Mark/SetLevel arms), the status->mode limp promotion, the gyro rumble feed points, and twenty FUN_004a4c54 update-record dirty marks our empty ForceUpdate never makes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -72,10 +72,41 @@ per contact by `Mover::ProcessCollisionList`. The decomp
|
|||||||
|
|
||||||
## Still to decode
|
## Still to decode
|
||||||
|
|
||||||
* `FUN_004a9b5c` — the master performance. Ghidra never decompiled it
|
* `FUN_004a9b5c` — the master performance. **ISOLATED AND MAPPED
|
||||||
(objdump territory). Owns: the turn-in-place dispatcher (arms state 4 on
|
(2026-08-04):** one single 5,676-byte body @004a9b5c..@004ab168 (one
|
||||||
both channels in lockstep), the status→mode promotion, likely the
|
`ret`), hidden inside the manifest's mis-sized @004a9770 entry (that fn
|
||||||
`runSpeedMax` (+0x7a0) writer, the gyro rumble timer.
|
is really the stream-builder's 6.6KB name→SharedData strcmp resolver,
|
||||||
|
and Ghidra swallowed everything to @004ab188 behind it). Registration
|
||||||
|
proven from the ctor decomp: `(flags & 0xC) == 4` → replicant perf
|
||||||
|
@004ab9d8 (also hidden, inside @004ab430's claimed range); else master
|
||||||
|
@004a9b5c. Recipe: extract CODE bytes (va 0x1000 → file 0xe00),
|
||||||
|
`ndisasm -b 32 -o 0x4a9b5c`.
|
||||||
|
|
||||||
|
**The ordered call skeleton (111 calls)** — blocks in execution order,
|
||||||
|
matching our Simulate's structure and locating every staged gap:
|
||||||
|
1. controls/demand intake (mech.cpp helpers 0x4a4eab/0x4a4ee9/0x4a4f9e)
|
||||||
|
2. three cerr+SetLevel triplets — illegal-state alarm guards
|
||||||
|
3. **THE DUCK DRIVER**: three arms of {mech2 SetAnim 0x4a7fc4,
|
||||||
|
MarkUpdate ×2, AlarmIndicator::SetLevel} — duck down/hold/up
|
||||||
|
4. verify-guarded state read (mech4 accessors + Fail 0x40385c)
|
||||||
|
5. gyro feed a (vec pair → gyro_b 0x4b2de4, gyro_a 0x4b2d8c)
|
||||||
|
6. death arm: InDeathTransition 0x49fb54 → the 1.9KB mech2 advancer
|
||||||
|
0x4a71f4 under it (death-clip arming)
|
||||||
|
7. **status→mode LIMP PROMOTION** (0x4a5028 + SetAnim/Mark/SetLevel)
|
||||||
|
8. update-record block (0x421bac/0x40e5f0/0x4227e0/0x41db7c/0x422bac +
|
||||||
|
Point3D copies) — the dead-reckon/update writer
|
||||||
|
9. collision → gyro crunch (gyro feeds + alarms)
|
||||||
|
10. knockdown/bump arms (EntityID pair + two SetAnim/Mark/SetLevel arms)
|
||||||
|
11. IntegrateMotion @004ab1c8 + position dirty marks
|
||||||
|
12. pose/joint tail: gyro_d/gyro_c → **Torso::UpdateJoints @004b66b4** →
|
||||||
|
five StateIndicator::SetState publishes + four GetState reads
|
||||||
|
13. frame close (position latch)
|
||||||
|
|
||||||
|
**MarkUpdate = FUN_004a4c54 (×20!)** — the update-record dirty-mask OR
|
||||||
|
(death strips motion bits); our `ForceUpdate(int)` is an EMPTY STUB, so
|
||||||
|
none of these marks exist in our tree yet (MP replication feed).
|
||||||
|
Next sitting: instruction-level read of blocks 3 and 7 (the two STAGED
|
||||||
|
items), then the mark masks.
|
||||||
* `@004ab430` ReplicantPerformance (1432B) — the replicant-side interior.
|
* `@004ab430` ReplicantPerformance (1432B) — the replicant-side interior.
|
||||||
* `@004ab1c8` IntegrateMotion — decoded (see 5.3.95 notes) but only
|
* `@004ab1c8` IntegrateMotion — decoded (see 5.3.95 notes) but only
|
||||||
partially re-hosted: the local-velocity/orientation integration and the
|
partially re-hosted: the local-velocity/orientation integration and the
|
||||||
|
|||||||
Reference in New Issue
Block a user