DRAFT 0.3
Art & productionProduction proposal

Technical architecture

Working design. New events, appearances, mechanics, and political details remain proposals. See canon ledger.

Keep game rules independent from scene nodes. A tactical command requests an action; the rule system validates and resolves it. The rendered sword swing consumes the emitted result and does not calculate damage. This lets the same battle logic drive prediction, AI, replays, and automated checks.

Module Owns Does not own
BattleState Units, surfaces, readiness, statuses, objectives, RNG state Camera or animations
RuleResolver Legal actions, forecast, effects, outcome events Input device logic
BattleView Terrain, sprites, overlays, effects Authoritative HP or turn order
CampaignState Days, provinces, roads, resources, armies, event queue Dialogue prose
CampaignResolver Travel, economy, orders, remote conflicts Interface rendering
NarrativeState Flags, promises, relationship events, story gates Duplicate economy calculations
Content Jobs, abilities, items, encounters, dialogue definitions Mutable save state

Use authored Godot Resources for definitions, with stable string IDs and validation. Use explicit versioned save data for mutable state; save IDs instead of duplicating every content definition. A save includes the campaign date, queued orders/events, unit status, relationship promises, active mission, and random-generator state. Use atomic save replacement and a recoverable previous save.

For maps, build a graph of walkable surfaces and legal edges; a single (x,y) tile address cannot represent a bridge over another route. AStar3D can assist with graph search, but movement costs, clearance, jumps, occupied cells, and unit permissions remain custom game rules. Godot AStar3D.

For AI, start with explainable utility scoring over legal actions: objective progress, expected damage, danger, rescue, and formation. Cache reachability per relevant state. Do not begin with machine learning or an LLM controlling shipped combat. Author major enemy behavior as readable tactical priorities.

Narrative uses a small node format with explicit requirements, effects, choices, and fallback routes. Keep localization keys separate from code. A mature external dialogue tool may replace the format after an integration spike, but the concept does not depend on an unverified plugin.

Suggested future repository structure:

game/
  project.godot
  src/{battle,campaign,narrative,ui}/
  scenes/{battle,world,camp}/
  content/{jobs,units,abilities,provinces,dialogue}/
  art/{characters,terrain,portraits,ui}/
  audio/
  tests/
tools/{asset_import,content_validation}/
docs/concept/

Use Git for code and text content; use Git LFS for large binary art sources once asset production starts. Keep source art, exported runtime assets, and generated candidates distinguishable. The browser prototype is versioned with this bible; it needs no package install to run or execute its rule tests.

Search the game bible

Search story, characters, mechanics, and all 47 concepts.