Files
idlegame/docs/architecture.md
T
ginnoir c76265d648
CI / verify (push) Failing after 58s
CI / verify (pull_request) Failing after 41s
docs: document story engine and PR2 playable loop
2026-06-11 19:00:49 -05:00

65 lines
2.1 KiB
Markdown

# Architecture
Idlegame is split into four layers.
## Engine
`src/engine/` contains deterministic gameplay logic:
- `tickLoop.ts`: fixed-timestep accumulator. Large elapsed deltas, including
offline catch-up, drain through the same tick path as active play.
- `game.ts`: core game state, action queue, costs/unlocks on start, completion-driven
queue advancement (actions do not auto-repeat when the queue is empty).
- `save.ts`: versioned save schema, serialized export/import strings, and
offline elapsed calculation.
- `story.ts`: story graph traversal, triggers (boot, actionComplete,
minResources), choices, outcomes.
- `num.ts`: branded numeric boundary and human-readable formatting.
The engine must stay pure. It does not import React, Zustand, browser APIs,
storage, requestAnimationFrame, or Date scheduling.
## Content
`src/content/` contains authored definitions validated by Zod. M0 includes one
resource and one timed action. M1 expands this into real resources, actions,
story nodes, automation unlocks, and prestige definitions.
## State
`src/state/` owns environment coupling:
- persistence backend selection: IndexedDB via `idb-keyval`, with localStorage
fallback
- load-on-boot and autosave orchestration
- requestAnimationFrame loop and lifecycle hooks
- mapping engine state to view models
- Zustand store updates for React
- `storyOrchestration.ts`: evaluates triggers after boot/publish/action
completion; maps prefs to panel auto-open.
- Player prefs (`prefs.ts`) in localStorage — not in save v1.
## UI
`src/ui/` renders the view model and calls runtime commands. Components should
not implement gameplay rules. The M0 shell includes a resource readout, action
panel, progress bar, and event log.
## Verification
Run the full local gate before pushing:
```powershell
pnpm typecheck
pnpm lint
pnpm test:coverage
pnpm build
```
Rendered checks for the walking skeleton:
- app loads without framework overlay or console errors
- starting the timed action increments Gold after completion
- reload preserves saved state
- reopening after time away credits offline progress