Skip to content

Write down what game this actually is, and correct the docs that disagreed - #198

Merged
0xward merged 1 commit into
mainfrom
claude/nullstate-onchain-text-q6g2a3
Jul 30, 2026
Merged

Write down what game this actually is, and correct the docs that disagreed#198
0xward merged 1 commit into
mainfrom
claude/nullstate-onchain-text-q6g2a3

Conversation

@0xward

@0xward 0xward commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Docs only — no code changes.

The owner's question was "why would anyone open this tomorrow?" The honest answer, read out of the code, is: nothing makes them. A raid is fun, the Vault pays once a week, and between those two there is no reason to return. Energy caps five runs a day, but a cap is a limiter, not a reason — you limit what people want more of, and once the week's Vault is claimed there is nothing they want more of.

The structural finding

A campaign that ends and a payout that repeats forever are two different genres, and the seam is exactly where players got stuck. campaignActIndex only ever increments (game.js:5244), so a cleared bunker is gone — while the world map draws a ✓ on it and implies you can go back. WorldMapHub.tsx:234 already admitted this in a comment.

docs/GAME-DESIGN.md (new)

The missing layer above every other doc in that folder: what the game is, what each existing system is for, and how the daily / weekly / seasonal loops are supposed to connect. Four owner decisions are recorded:

Decision
Campaign = tutorial, world map = the game LDOE model — the campaign unlocks a world you then raid forever
Paper & Golden Key reachable by effort, luck kept as a shortcut Vault Fragments; fixes the dead-end, unlucky weeks, and the empty day 2 in one mechanic, at zero cost
Raiding a cleared bunker costs 1 energy Grinding has a price — this is the natural transaction point, money in
Daily play pays progress; money stays weekly Consistent with the daily-drip cancellation in GROWTH-BLUEPRINT.md §1A

Every claim in the doc is tagged [TODAY] / [TARGET] / [CHANGE], with a rule that implementing a [TARGET] flips it in the same PR. A design doc that drifts from the code is worse than none — which is the exact failure being corrected here.

Two corrections to my own earlier reasoning, recorded in the doc:

  • Re-entering a cleared bunker needs no serialization at all. A farmed bunker should regenerate — that is why LDOE ships respawn timers. It is a new mount({ startMode }) value, not surgery. game.js:5442-5452 already accepts four modes.
  • The floor cache that works within a visit (G.floors, game.js:463) is already correct and must not be "fixed".

A real defect found while tracing this (§8)

getSaveSnapshot() (game.js:5581-5621) persists fourteen fields but not G.floors, and applyRestoredState() (game.js:305-343) does not restore it. Both verified line by line. So Save & Exit → Continue rebuilds the floor from scratch: different layout (dungeon.js uses bare Math.random(), no seed), monsters alive again, containers lootable again.

The weekly Paper and Golden Key are safe — guarded twice, by the saved run-caps and by the server's per-wallet-per-week cap. XP, ordinary items and Glitch Shards are not. Flagged as read-from-source, not reproduced in a running game.

Docs corrected

game-mechanics.md had drifted into claiming things the code never did:

Claimed Actually
Three classes — Knight, Rogue, Wizzard One, since v80 (assets.js:19-29)
6 bunkers × 3 floors 5 × 5 (CAMPAIGN, depth%5===0)
Rarity gated by bunker; 40/30/20/8/2 Not gated at all; true weights give ~59% / ~26% / ~11% / ~3.5% / ~0.6%
Container loot goes straight to inventory Taken from a two-panel window (TAKE / TAKE ALL)
"3-8 random items" 2-4 slots, some empty
Paper & Key "disappear after run ends" They persist — saved and carried between bunkers
"Return exactly where you left off" The one claim the Save & Exit defect makes false — now stated as the limitation it is
Stats "reset monthly" leaderboard/{addr} has no season partition; they are cumulative

The rarity table and the 6-bunker figure both traced back to game-config.ts blocks (bunkers, specialItems, loot, seasonRewards) that no source file reads — the engine is a static <script> and cannot import from lib/. Deleting them is queued in the build order; this PR documents the trap so nothing builds on them in the meantime.

index.md gains the link and loses the stale class line.

Verification

  • tsc --noEmit clean
  • npm run check:copy — no banned MiniPay copy
  • No source files touched

Generated by Claude Code

…greed

The owner's question was "why would anyone open this tomorrow", and the
honest answer read out of the code is: nothing makes them. A raid is fun,
the Vault pays once a week, and between those two there is no reason to
come back. Energy caps five runs a day, but a cap is a limiter, not a
reason — you limit what people want more of, and once the week's Vault is
claimed there is nothing they want more of.

Underneath that sits a structural mismatch. A campaign that ends and a
payout that repeats forever are two different genres, and the seam is
exactly where players got stuck: campaignActIndex only ever increments, so
a cleared bunker is gone, while the world map draws a ✓ on it and implies
you can go back. WorldMapHub already said so in a comment.

docs/GAME-DESIGN.md is the missing layer above every other doc here: what
the game is, what each existing system is FOR, and how the daily, weekly
and seasonal loops are supposed to connect. Four owner decisions are
recorded in it — campaign becomes the tutorial and the map becomes the
game; Paper and the Golden Key become reachable by effort with luck kept
as a shortcut; raiding a cleared bunker costs energy; daily play pays
progress while money stays weekly.

Two things it corrects in my own earlier reasoning. Re-entering a cleared
bunker needs no serialization at all — a farmed bunker should regenerate,
which is why LDOE ships respawn timers — so it is a new mount() startMode,
not surgery. And the floor cache that already works within a visit is
correct as it stands and must not be "fixed".

It also records a real defect found while tracing this: getSaveSnapshot()
persists fourteen fields but not G.floors, and applyRestoredState() does
not restore it, so Save & Exit rebuilds the floor from scratch — different
layout, monsters alive again, containers lootable again. The weekly Paper
and Golden Key are safe behind the server's per-wallet weekly cap.

The rest is correcting docs that had drifted into claiming things the code
never did. game-mechanics.md offered three character classes where the
engine has had exactly one since v80; described 6 bunkers of 3 floors
against the real 5 and 5; published a rarity table taken from a config
block nothing reads, where the true weights give ~59% common and ~0.6%
legendary; said container loot goes straight to the inventory when it is
taken from a two-panel window; and promised players they would "return
exactly where you left off", which is the one claim the Save & Exit defect
makes false. That last one is now stated as the limitation it is.
@vercel

vercel Bot commented Jul 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nullstate Ready Ready Preview Jul 30, 2026 4:16pm

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@0xward
0xward merged commit 1df4ca3 into main Jul 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant