fc4fc59a2b
Belt (canon: charges are the cost, the belt is the ammo): cards are CARD_TYPES indices consumed on play, next slides into the 2-slot hand; belt cap 8; HUD shows hand glyphs + upcoming-card ticks. Card pool grows to 4: SHOCKWAVE, HEATWAVE, DASH (impulse along held movement direction — aimable while frozen, no aim input), IGNITE (nearest-enemy heat spike past threshold). Rooms: spawn-budget waves (base 8 +4/room, 4 rooms/run); clear -> interstitial fork (CARD vs SCRAP +8) -> CARD opens a 3-option draft + scrap decline (+4) -> next room; final clear or mech destruction -> tally overlay (rooms/kills/scrap/chem) with relaunch on 1. Interstitial owns the pause while active; the hand yields input and time authority to it. Mech death now signals the run manager instead of hard-reloading. Chain semantics (same-tag surge / cross-tag chemistry trigger) deliberately deferred to M3. Smoke gate: belt consumption white-boxed in the card phase, _until moved to process_frame (physics awaits deadlock under pause), run phase covers clear->fork->draft->belt growth->room advance->tally. 3/3 green on nh3-dev headless 4.7.1.
85 lines
4.2 KiB
Markdown
85 lines
4.2 KiB
Markdown
# Persistent memory — urm03 (U R M03)
|
|
|
|
_Last updated: 2026-08-07_
|
|
|
|
> **Always check for `/tmp/m03-dev-handoff.md`** — if it exists and its
|
|
> `Written:` stamp is under an hour old, read it (it carries the in-flight
|
|
> handoff from the previous session), then delete it. Older than an hour:
|
|
> stale — delete it unread.
|
|
|
|
## Repo purpose
|
|
|
|
Implementation repo for **U R M03** (Godot 4.7.1): the strategy-forward
|
|
mech auto-battler rogue-lite. Design canon lives in the advisor repo (see
|
|
CLAUDE.md); this repo builds what canon ratifies. Current mission is the
|
|
greybox falsifier (ROADMAP.md v1) that tests the design's three core bets.
|
|
|
|
## Current state / in-flight
|
|
|
|
_As of 2026-08-07 (post-falsifier):_
|
|
|
|
- **Greybox build complete AND falsifier verdicts rendered** (ROADMAP
|
|
v1 target met through capability 6). Verdicts: bet 2 (card-freeze
|
|
rhythm) CONFIRMED; bet 1 (positioning) shaky → salvage-pickup loop
|
|
adopted and built; bet 3 (chemistry) inconclusive → in-card
|
|
randomness parked to belt stage.
|
|
- **Post-falsifier loop built**: charges generate on kills; kills drop
|
|
scrap pickups (magnet radius, fade); collected scrap gates card
|
|
levels 1→3 (thresholds + per-level radius/power scaling, HEAT L3
|
|
reaches one-cast threshold). Smoke gate green 4/4.
|
|
- Canon amendments landed in the advisor repo at `f12cb15`
|
|
(**local-only — that repo has NO git remote**): Freeze charge
|
|
ratified, kill-charges + salvage-gated levels decided, randomness
|
|
parked.
|
|
- Salvage loop playtested and KEPT (operator, 2026-08-07: "interesting
|
|
mechanic, let's keep it and move on"). Everything remains knobs; no
|
|
tuning pass done yet.
|
|
- M1 (greybox falsifier) done, untagged — v1.0 reserved for the
|
|
public RC (operator ruling 2026-08-07; internal milestones are 0.x).
|
|
- **M2 (run skeleton) BUILT 2026-08-07, operator playtest pending**:
|
|
belt (consume-on-play, draft refills), draft node (3 + scrap
|
|
decline), CARD-vs-SCRAP fork between rooms, spawn-budget rooms
|
|
(4/run), tally + relaunch, DASH + IGNITE greybox cards. Chain
|
|
semantics deliberately deferred to M3.
|
|
- Advisor repo remote WIRED 2026-08-07:
|
|
git@gitea.phasefinal.com:vh/game-design-advisor.git (private,
|
|
created via tea CLI with the vh token), main pushed — canon is
|
|
backed up.
|
|
|
|
## Recent decisions
|
|
|
|
- `[2026-08-06]` Greybox discipline: direct implementation + headless
|
|
smoke gate; contract/heid ceremony skipped — falsifier code's real
|
|
review is the operator playtest.
|
|
- `[2026-08-07]` Freeze charge meter adopted as the card-time variant
|
|
for playtest (banded ladder, A/B vs unlimited toggle on M); canon
|
|
ratification deferred pending playtest verdict — tracked at commit
|
|
`73f84e7` + advisor repo CONCEPT.md § Open questions #0.
|
|
→ `persistent-memory.d/2026-08-07-freeze-meter-variant.md`
|
|
- `[2026-08-07]` Detonations are symmetric — they damage enemies AND
|
|
the mech in radius: one grammar on both sides; heat play prices
|
|
standing close (`1976149`).
|
|
- `[2026-08-06]` Placeholder tag hues: KINETIC pale steel-blue, HEAT
|
|
orange — canon assigns no tag colors yet (naming/color pass parked
|
|
post-greybox).
|
|
- `[2026-08-07]` Falsifier verdicts + resulting design decisions live
|
|
in advisor-repo CONCEPT.md (§ loop stack amendments, decisions-log
|
|
rows, open-question #0 closure) at `f12cb15` — design rationale is
|
|
NOT duplicated here; that log owns it.
|
|
|
|
## Tried and abandoned
|
|
|
|
- `[2026-08-07]` `Engine.time_scale = 0` as the freeze — fake: physics
|
|
still steps with delta 0 on 4.7 (probed headless), so delta-independent
|
|
logic (heat thresholds, contact callbacks) kept firing while "frozen".
|
|
Freeze = `SceneTree.paused` + hand on `PROCESS_MODE_ALWAYS`;
|
|
`time_scale` only for dilation > 0 (`c340b7b`).
|
|
- `[2026-08-07]` Committing new scripts without their `.uid` sidecars —
|
|
the Mac editor generated its own untracked copies and the next
|
|
`git pull` refused to merge over them. Import headless before
|
|
committing so `.uid` files ride the same commit as their scripts.
|
|
- `[2026-08-07]` Spawning physics nodes (Area2D) directly inside a
|
|
physics signal flush (projectile `body_entered` → death → spawn) —
|
|
Godot blocks collision setup mid-flush. Spawn via
|
|
`add_child.call_deferred()` from any death/hit signal path.
|