fix(combat): escape occupied login positions
Port retail's radius-aware placement ring so a relogging player is seated beside creatures occupying the saved location, and register the local body in the shared resolved-shadow pipeline. Route new forward movement and jump through AbortAutomaticAttack so repeat combat cancels immediately on movement. Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
parent
e671b8a5c4
commit
00fe993f6f
11 changed files with 643 additions and 16 deletions
|
|
@ -46,6 +46,58 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #207 — Repeat attack continues after movement begins
|
||||
|
||||
**Status:** IN-PROGRESS — fix shipped 2026-07-12, pending live gate
|
||||
**Severity:** HIGH
|
||||
**Component:** combat / input
|
||||
|
||||
**Description:** With Repeat Attacks enabled, starting to move did not stop the
|
||||
attack loop, making combat difficult to disengage from.
|
||||
|
||||
**Root cause:** The attack controller had no port of
|
||||
`ClientCombatSystem::AbortAutomaticAttack`, and semantic movement input was
|
||||
never forwarded to combat as retail's `ACCmdInterp::HandleNewForwardMovement`
|
||||
does.
|
||||
|
||||
**Resolution:** Forward, backward, autorun, and jump press transitions now send
|
||||
the retail cancel-attack event, clear repeat mode, and hide an active combat
|
||||
power build. Turns and sidesteps remain independent, matching the retail
|
||||
command-list split. Controller tests prove movement sends one cancel and that a
|
||||
later AttackDone cannot launch another repeat.
|
||||
|
||||
**Research:** `docs/research/2026-07-12-login-placement-and-repeat-cancel-pseudocode.md`
|
||||
|
||||
**Acceptance:** Enable Repeat Attacks, start attacking, then press forward. The
|
||||
attack loop stops immediately and movement proceeds normally.
|
||||
|
||||
## #206 — Relogging into a monster leaves the player stuck
|
||||
|
||||
**Status:** IN-PROGRESS — fix shipped 2026-07-12, pending live gate
|
||||
**Severity:** HIGH
|
||||
**Component:** physics / login lifecycle
|
||||
|
||||
**Description:** If a monster moved onto the character's saved position while
|
||||
the user was logged out, logging back in placed both bodies together and the
|
||||
character could not escape.
|
||||
|
||||
**Root cause:** Login used the cell/floor-only `Resolve` snap and omitted retail
|
||||
`CTransition::find_placement_pos`, the radius-aware nearest-clear-position
|
||||
search. The local player was also omitted from the shadow registry, so remote
|
||||
creatures could not collide/de-overlap against it as retail physics objects do.
|
||||
|
||||
**Resolution:** The retail four-metre concentric compass-ring placement search
|
||||
is ported into Core and runs after login's existing AdjustPosition/floor snap.
|
||||
The local player now registers a normal multipart collision shadow, skips that
|
||||
shadow in its own transition, and republishes the resolved body position through
|
||||
the same shared synchronizer as remotes. A flat-world conformance test begins
|
||||
inside a monster and proves the selected position clears both bodies.
|
||||
|
||||
**Research:** `docs/research/2026-07-12-login-placement-and-repeat-cancel-pseudocode.md`
|
||||
|
||||
**Acceptance:** Log out beside a monster, let it occupy the saved position, and
|
||||
log back in. The character is seated at the nearest clear point and can move.
|
||||
|
||||
## #205 — Auto Target clears the toolbar and includes friendly creatures
|
||||
|
||||
**Status:** DONE — 2026-07-12, user confirmed the replacement target appears correctly
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue