fix(combat): match retail live attack feedback
Keep AttackDone control statuses out of chat, preserve dead motion across zero-velocity position updates, render the authored power meter from right to left, and retain the rotatable viewer offset during target tracking. Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
parent
33cc9aa16a
commit
5276a83087
16 changed files with 231 additions and 67 deletions
|
|
@ -5854,23 +5854,11 @@ public sealed class GameWindow : IDisposable
|
|||
if (update.Velocity is { } svel)
|
||||
{
|
||||
rmState.Body.Velocity = svel;
|
||||
// Only use the < 0.2 m/s stop signal when velocity was
|
||||
// explicitly provided (i.e. server sent HasVelocity + tiny
|
||||
// value = "I'm definitely stopped"). Absent velocity field
|
||||
// carries no stop information for our ACE.
|
||||
if (svel.LengthSquared() < 0.04f)
|
||||
{
|
||||
rmState.Motion.StopCompletely();
|
||||
if (_animatedEntities.TryGetValue(entity.Id, out var aeForStop)
|
||||
&& aeForStop.Sequencer is not null)
|
||||
{
|
||||
uint curStyle = aeForStop.Sequencer.CurrentStyle;
|
||||
uint readyCmd = (curStyle & 0xFF000000u) != 0
|
||||
? ((curStyle & 0xFF000000u) | 0x01000003u)
|
||||
: 0x41000003u;
|
||||
aeForStop.Sequencer.SetCycle(curStyle, readyCmd);
|
||||
}
|
||||
}
|
||||
// Position updates carry physics velocity only. Retail
|
||||
// CPhysicsObj::MoveOrTeleport never derives an animation
|
||||
// command from it; UpdateMotion owns the interpreted state.
|
||||
// In particular, a dead creature legitimately broadcasts
|
||||
// zero velocity while its Dead cycle must remain persistent.
|
||||
}
|
||||
else if (!IsPlayerGuid(update.Guid) && rmState.HasServerVelocity
|
||||
&& !snapSuppressedByStick && rmState.Airborne)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue