feat(physics): R5-V4 behavioral slice — head stance dispatch (all mt) + #164 autonomy bit + mt-0 wire flags
Three unpack_movement parity items (facade deferred per the handoff's own optional clause — see r5-wiring-handoff §V4 status): 1. HEAD style-on-change (0x00524440 @00524502-0052452c): both GameWindow routing heads (remote + player) now dispatch DoMotion(style, ctor defaults) when the UM's stance differs from the interp's current style, BEFORE the movement-type routing — for EVERY type. Previously style applied only through the mt-0 funnel copy, so a chase/turn UM (mt 6-9) carrying a stance change started the move in the OLD stance (a monster charged in NonCombat posture until the next mt-0). The RetailObserverTraceConformanceTests exclusion note updated — the trace filter stays (head calls can't appear in a MoveToInterpretedState replay) but the production gap it pointed at is closed. 2. #164 (closes): the action-replay loop threads each action's autonomy into the dispatch params (Autonomous = the 0x1000 splice, raw 305982) — replayed actions enter the interpreted actions list with their real autonomy instead of ctor-default false. 3. mt-0 wire flags consumed (UpdateMotion parsed them since R4-V3): 0x1 StickToObject → CPhysicsObj::stick_to_object port (0x005127e0: resolve target, PartArray radii — 0 when shapeless, guid-as-is for acdream's flat entity table — → PositionManager.StickTo; unresolvable target → no stick), at BOTH case-0 tails in retail order (@00524583-0052458e: funnel apply → stick → longjump flag); 0x2 StandingLongJump → Motion.StandingLongJump, UNCONDITIONAL write (absent flag clears — retail @0052458e). ServerMotionState gains the StandingLongJump field. Conformance: ChaseArm_WithStanceChange_AppliesStanceBeforeTheChase (harness mirrors the routing-head dispatch) + Actions_ReplayCarriesAutonomyIntoTheInterpretedList. Suite 4041 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
530453067a
commit
f423884bd1
9 changed files with 213 additions and 20 deletions
|
|
@ -259,10 +259,16 @@ public static class CreateObject
|
|||
// InterpretedMotionState::UnPack (r4-moveto-decomp.md §2f
|
||||
// @0052455d: `if (header & 0x100) sticky_object_guid = read_dword()`
|
||||
// — bit 0x100 of the combined header word is motionFlags byte1&0x1).
|
||||
// Carried unconsumed until R5's PositionManager::StickTo body binds
|
||||
// it; parsing it here just keeps the buffer cursor honest past this
|
||||
// field (deliverable C — no behavior).
|
||||
uint? StickyObjectGuid = null)
|
||||
// R5-V4 consumes it: the GameWindow mt-0 tail routes it into
|
||||
// CPhysicsObj::stick_to_object's port (target PartArray radii →
|
||||
// PositionManager.StickTo — decomp 0x005127e0, call @00524589).
|
||||
uint? StickyObjectGuid = null,
|
||||
// R5-V4 (closes the "documented but NOT consumed" note in
|
||||
// UpdateMotion.cs): motionFlags & 0x2 — retail `unpack_movement`
|
||||
// case 0 writes it onto `motion_interpreter->standing_longjump`
|
||||
// UNCONDITIONALLY (@0052458e: absent flag CLEARS it). Consumed at
|
||||
// the GameWindow mt-0 tails (remote + player).
|
||||
bool StandingLongJump = false)
|
||||
{
|
||||
/// <summary>
|
||||
/// ACE/retail movement types 6 and 7 are server-controlled
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue