fix(R4-V5): #160 remote run movetos in slow motion - remote interps had no weenie, so retail's run-rate chain never reached my_run_rate
User observation (acdream observing a retail player's server MoveTo): walk-distance approaches correct; run-distance plays the run cycle AND moves toward the target in slow motion. Root cause, raw-verified (apply_run_to_command 0x00527be0, raw 305062-305076): retail's rate chain is weenie ? (InqRunRate() ?: my_run_rate) : 1.0 Every placed retail object HAS a weenie; a REMOTE's weenie fails InqRunRate (no local skill data) and the chain lands on my_run_rate - the exact field retail's mt-6/7 unpack writes with the wire's MoveToRunRate (M13; observed 4.50). Our port had the branch verbatim but remote interps carried NO weenie at all, taking the else-1.0 branch retail reserves for weenie-less detached objects: observer-side run dispatches went out at speed 1.0, so the run cycle's pace AND get_state_velocity's chase speed both crawled. Walk was unaffected - walk speed is never rate-scaled (the discriminating symptom). Fix: RemoteWeenie (Core) - the minimal stand-in for retail's per-object ACCWeenieObject: InqRunRate fails (-> my_run_rate), InqJumpVelocity fails, IsThePlayer default false (also ends the fragile "null weenie counts as the player" reading of the A3 dual dispatch for remotes), IsCreature default true (doors carry it too; their force-asserted Contact keeps the creature ground-gate moot - documented on the class). RemoteMotion's interp now constructs with it. Tests: RemoteWeenieRunRateTests pins both branches against the raw - RemoteWeenie + MyRunRate=4.5 promotes WalkForward->RunForward @ 4.5; weenie-less keeps the verbatim degenerate 1.0. Full suite green: 3,963. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
ab35a78c1d
commit
41006e795a
3 changed files with 115 additions and 1 deletions
|
|
@ -610,7 +610,15 @@ public sealed class GameWindow : IDisposable
|
|||
// transition link (see PhysicsBody.InWorld).
|
||||
InWorld = true,
|
||||
};
|
||||
Motion = new AcDream.Core.Physics.MotionInterpreter(Body);
|
||||
Motion = new AcDream.Core.Physics.MotionInterpreter(Body)
|
||||
{
|
||||
// R4-V5 #160 fix: retail remotes carry a weenie whose
|
||||
// InqRunRate FAILS, landing apply_run_to_command on
|
||||
// my_run_rate (the M13 wire feed). A null weenie took the
|
||||
// degenerate 1.0 branch — observer-side run movetos played
|
||||
// and moved in slow motion. See RemoteWeenie.
|
||||
WeenieObj = new AcDream.Core.Physics.RemoteWeenie(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue