Skip to content

[EPIC][W4] The Living Stage — combat enters and exits IN PLACE; the full explore→talk→fight→loot loop #1321

Description

@100yenadmin

Roadmap §4b/W4 (PR #1316). Depends: W1-W3; coordinate with S8 (demo assembly).

What

Combat becomes a MODE of the stage, not a separate screen: a fight starts from where everyone is standing and ends back at rest — plus day/night lighting live from the campaign clock.

Design (verified seams)

  • start_combat (server.py:4039) gains an additive param seeding combatant cells from stage_cell (absent ⇒ today's spawn behavior). end_combat (server.py:6976) writes survivors' cells back to stage_cell. Gates-read-gauges holds: combat READS stage at entry, WRITES only at exit.
  • Day/night: campaign clock × scene_grid.lighting (scene_grid.py:134) → additive surface lighting block; renderer re-tints (day plates exist, renderer: day-state plate selection (#1291) #1298 selection lands the engine-signal path via [engine] Surface campaign.time_of_day on /combat-surface (honest day/night signal) #1307).
  • Combat grid and scene grid MUST be the same grid (dimensions/cells) — verify at seed time or the gate below fails by construction.

EVAL — the NO-TELEPORT gate

Scripted full loop (explore→talk→fight→loot→move-on): combat entry cells == last rest cells; exit cells == combat end cells; no actor jumps. Text-tier byte-identity.

Risks tracked

Mid-combat cross_door/travel (refuse or resolve — decide in-sprint with a test either way); foes lacking spawn keys (fallback cells).

ADDENDA — takeover review (2026-07-03, architect-ratified)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions