Fixes a regression I introduced in 59f53da. That revision retried the request
when the posture gate was not ready, which is worse than the drop it replaced:
benched, a crouch tapped at a walk QUEUED for 41 seconds (41 [duck] WAITING
lines) and would fire the instant the pilot stopped -- while duckState stayed
1, so the cockpit symbol read "crouched" for the whole time a STANDING mech
walked around. duckState is what the gauge strip draws; it has to tell the
truth.
Now: if the gate refuses, snap desired back to actual (duckState = duckActual)
and say so once, throttled.
This also confirms the authentic rule rather than assuming it. Benched, a
crouch pressed while driving gives posture=0 and no squat -- exactly Lynx:
"When a mech STOPS, crouch button lowers its stance." Immobilization while
crouched looks EMERGENT rather than gated: the leg channel parked in 'sqd'
produces no root motion to travel on, and the operator's read ("i think you
cant walk when you crouch") matches. No [skate] in the driving case either.
Also guards re-issue: while 'sqd'/'squ' is playing (legAnimationState 2 or 3)
the transition owns the channel, so want != actual no longer re-fires
SetLegAnimation every frame.
Benched both cases:
stopped duckState -> 1 (crouch) -> SQUAT -> holds -> -> 0 (rise) -> RISE
moving REFUSED (not stopped): posture=0 ... duckState 1 -> 0
0 squats, 0 queued waits
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NCJQkvq6G2JNrpVbA75tVZ