docs(phys L.2g): design spec for dynamic PhysicsState toggling (doors)
L.2d slice 1.5 ship identified the Holtburg doorway blocker as a closed
Door entity (Setup 0x020019FF) whose PhysicsState.Ethereal bit flips
when the player Uses the door. The L.2d shape-fidelity work doesn't
cover this — the door's collision shape is correct; what's missing is
honoring the *runtime* state change.
L.2g is the new sub-phase that handles it. Scope is narrow:
* Parse inbound GameMessageSetState (0xF74B).
* Plumb the new PhysicsState value into ShadowObjectRegistry's
cached per-entity state so the existing CollisionExemption.IsExempt
already-in-place short-circuit sees up-to-date bits.
* Verify the Holtburg inn-door scenario: walk in blocked, Use door,
walk through, auto-close blocks again after 30s.
* Confirm UpdateMotion (NonCombat, On/Off) drives non-creature
entities (door swing animation).
Why a new L.2 sub-letter (and not B.4 or Door-special-case): the wire
mechanism (SetState flipping Ethereal) is also how ACE handles activated
traps, opened chests, spell projectiles becoming ethereal. Generic
infrastructure with doors as the verification scenario; lane is the
informal sixth "dynamic state."
Roadmap state:
* L.2 plan-of-record adds the L.2g section after L.2f.
* Milestones doc M1 phase list extended `a-f` -> `a-g`.
* CLAUDE.md status pointer + "next phase candidates" list updated to
name L.2g slice 1 implementation as the natural next step.
Risk: low. Wire-byte width has a hex-dump fallback path in slice 1
(holtburger says 12 bytes, ACE writes 16, capture settles it). ETHEREAL
plumbing already exists; we feed it new data. No resolver changes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9206d1d4e0
commit
2c10dd4d67
4 changed files with 353 additions and 14 deletions
|
|
@ -228,6 +228,44 @@ client sees when observing acdream.
|
|||
- Require conformance notes in tests or research docs for every AC-specific
|
||||
algorithm ported under L.2.
|
||||
|
||||
### L.2g - Dynamic PhysicsState Toggling
|
||||
|
||||
Goal: server-driven post-spawn state changes (chiefly `ETHEREAL` flips) are
|
||||
honored by the local collision stack.
|
||||
|
||||
Triggered 2026-05-12 evening by the L.2d slice 1.5 trace: the Holtburg
|
||||
doorway blocker is a closed Door entity (Setup `0x020019FF`) whose
|
||||
`PhysicsState.Ethereal` bit flips when the player Uses the door. The L.2d
|
||||
shape-fidelity work doesn't cover this — the door's collision shape is
|
||||
already correct; what's missing is honoring the *runtime* state change.
|
||||
|
||||
Scope is intentionally narrow:
|
||||
|
||||
- Parse inbound `GameMessageSetState (opcode 0xF74B)`.
|
||||
- Plumb the new `PhysicsState` value into `ShadowObjectRegistry`'s cached
|
||||
per-entity state so the existing `CollisionExemption.IsExempt(...)` check
|
||||
sees the up-to-date bits.
|
||||
- Verify the Holtburg inn-door scenario: walk into doorway → blocked, Use
|
||||
door → door swings open AND player can walk through, auto-close after
|
||||
30s → door closes AND player is blocked again.
|
||||
- Confirm the existing `UpdateMotion` pipeline drives `(NonCombat, On/Off)`
|
||||
on non-creature entities (door swing animation). If not, one-line fix.
|
||||
|
||||
Excluded from L.2g scope (deferred):
|
||||
|
||||
- Door-specific UX polish: "door is locked" sound, creature-AI bump-open.
|
||||
- Any Door-specific class hierarchy — generic state-flip infrastructure
|
||||
is enough; doors are the verification scenario, not a privileged case.
|
||||
|
||||
Lane: informal sixth lane "dynamic state." The existing five-lane table
|
||||
treats per-entity state as static-after-spawn; L.2g makes it dynamic.
|
||||
|
||||
Full design spec:
|
||||
[docs/superpowers/specs/2026-05-12-l2g-dynamic-physicsstate-design.md](../superpowers/specs/2026-05-12-l2g-dynamic-physicsstate-design.md).
|
||||
|
||||
M1 critical path: this slice unblocks the *"open the inn door"* demo
|
||||
scenario.
|
||||
|
||||
## Named Retail Anchors
|
||||
|
||||
Primary source: `docs/research/named-retail/acclient_2013_pseudo_c.txt`.
|
||||
|
|
|
|||
|
|
@ -101,9 +101,13 @@ doorway. Open the inn door. Click an NPC and see selection feedback. Pick
|
|||
up an item from the ground.
|
||||
|
||||
**Phases to ship:**
|
||||
- **L.2 (all sub-lanes a–f)** — Movement & Collision Conformance. Currently
|
||||
active; L.2a slices 1+2+3 shipped 2026-05-12.
|
||||
- **B.4** — `Use` / `UseWithTarget` / `PickUp` outbound messages.
|
||||
- **L.2 (all sub-lanes a–g)** — Movement & Collision Conformance. Currently
|
||||
active; L.2a slices 1+2+3 + L.2d slice 1+1.5 shipped 2026-05-12. L.2g
|
||||
(dynamic PhysicsState toggling — doors) brainstormed + design-spec'd
|
||||
2026-05-12 evening, implementation next.
|
||||
- **B.4** — `Use` / `UseWithTarget` / `PickUp` outbound messages
|
||||
(shipped 2026-04-28; remains in M1 scope until L.2g completes the
|
||||
inbound-state half of the Use round-trip).
|
||||
|
||||
**Freeze on landing:**
|
||||
- L.2 zone (collision, cell ownership, transition parity, wire authority)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue