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

2.1 KiB

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:

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