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:
Erik 2026-07-11 21:10:01 +02:00
parent 33cc9aa16a
commit 5276a83087
16 changed files with 231 additions and 67 deletions

View file

@ -36,6 +36,10 @@ CameraSet.TrackTarget(targetId):
SetTargetForOffset(viewerOffset), while targeting:
camera.targetStatus = LOOK_AT_OBJECT | LOOK_AT_PIVOT
CameraSet.Rotate(angle), including while targeting:
viewerOffset.xy = rotate(viewerOffset.xy, angle)
SetTargetForOffset(viewerOffset)
```
## Per-frame pose
@ -60,14 +64,17 @@ damp current viewer toward (desiredEye, desiredForward)
The target therefore changes the direction of the boom around the player; it
does not replace the player as the boom's pivot. `LOOK_AT_PIVOT` keeps the
player centered while the target-facing boom keeps the combat target in view.
The viewer offset remains independently rotatable: manual camera orbit rotates
that offset inside the target-facing frame rather than being discarded or
snapped back to zero.
## Port mapping
- `GameWindow.GetCombatCameraTargetPoint` applies the option/mode/valid-target
gates and transforms the target-local 0.5 metre Z offset.
- `RetailChaseCamera.ComputeTrackedHeading` ports the pivot-to-target direction.
- Existing `RetailChaseCamera` boom construction and damping consume that
heading unchanged.
- `RetailChaseCamera.ComputeDesiredPose` ports the heading-frame transform and
preserves the viewer-offset yaw while tracking.
- The diagnostic legacy `ChaseCamera` remains intentionally non-retail under
existing divergence row TS-19; the production retail camera owns this behavior.