feat(missions): mission board — schema, deterministic generation, top-up + v6 backfill
New missions table (schema + DDL). Pure model in lib/game/missions.ts: DELIVER / EXPLORE / FIND contracts generated from missionRng(seed, turn), board always topped up to >=3 AVAILABLE after every action. save.ts wires SCHEMA_VERSION 5 -> 6 with a v6 backfill step and completion hooks inside jumpToSystem/explorePlanet (one atomic persist). Unit tests cover generation determinism, top-up idempotency, backfill, accept validation and per-type completion incl. reward accumulation.
This commit is contained in:
@@ -94,6 +94,20 @@ CREATE TABLE IF NOT EXISTS tech (
|
||||
UNIQUE (save_id, slug)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS missions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
save_id INTEGER NOT NULL REFERENCES saves(id),
|
||||
type TEXT NOT NULL, -- 'DELIVER' | 'EXPLORE' | 'FIND'
|
||||
description TEXT NOT NULL, -- human-readable objective, e.g. "Jump to Kepler Drift"
|
||||
target_system_id INTEGER, -- DELIVER only — destination system (NULL otherwise)
|
||||
condition_kind TEXT, -- FIND only — 'resource' | 'part' (NULL otherwise)
|
||||
progress_target INTEGER NOT NULL DEFAULT 1, -- EXPLORE: scans required; 1 for the others
|
||||
progress INTEGER NOT NULL DEFAULT 0, -- scans counted since acceptance; 0/1 for DELIVER/FIND
|
||||
reward_kind TEXT NOT NULL, -- 'resource' | 'part'
|
||||
reward_qty INTEGER NOT NULL DEFAULT 1,
|
||||
state TEXT NOT NULL DEFAULT 'AVAILABLE' -- 'AVAILABLE' | 'ACTIVE' | 'DONE'
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS events (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
save_id INTEGER NOT NULL REFERENCES saves(id),
|
||||
|
||||
Reference in New Issue
Block a user