- vegvisir-spec.md: full build spec (core flow, chargen subsystem, GM layer, world model, journey flow, data compilation pipeline) - TODO.md: spec broken into 8 sequential build phases - docs/: Norse-flavoured and general random encounter tables (authoring source for the compile step)
6.8 KiB
6.8 KiB
Vegvísir — TODO
Derived from vegvisir-spec.md. Phases are roughly sequential; content digitization (Phase 0) blocks coding on anything that consumes those tables.
Phase 0 — Content Digitization (blocks build)
Markdown tables authored in docs/, used once at compile time, then deleted. Reflavored to the Norse setting where content is Glorantha-specific; mechanical structure stays RQG-derived.
- Define markdown table structure/conventions (headers, column format) for all seed files — spec Open Question 1
- Flavour/encounter tables (
norse_encounter_tables.md,random-encounter-tables.mdexist — confirm format matches conventions once defined) - Ability Results Table
- Resistance Table
- Movement rates / travel rules tables
- NPC generation tables (six rolled fields, per existing narrative-app spec)
- Spirit Magic spell list (Stef digitizes Magic book before coding starts)
- Kinship/pantheon content (replaces Gloranthan cults) + per-Kinship Rune Magic spell lists
- Homeland regions (Stef's regions replacing Dragon Pass homelands, with characteristic/skill modifiers)
- Family History event tables (Stef's calendar/history, RQG year-by-year roll structure)
- Occupation table (reflavored names, RQG-derived modifiers/structure)
- Personality Trait pair list — confirm final opposed pairs and starting-score method (rolled vs. assigned) — spec Open Question 7
Phase 1 — Project Scaffolding & Data Compilation
- Project scaffolding (TypeScript app; decide runtime/UI framework, storage approach)
- One-time compile script: markdown → typed TS data files (
*.generated.ts, marked do-not-edit) - Compile all table categories: flavour tables, movement rates, NPC tables, Spirit Magic, Rune Magic, Occupation, Personality Trait pairs, Ability Results Table, Resistance Table
- Hand-written lookup/resolution modules importing generated data (table roll functions, movement rate lookup, Resistance Table lookup, Ability Results lookup) — kept separate from generated files
- Delete source markdown after compile; document re-compile workflow for future table changes
Phase 2 — Character Generator + Editable Sheet
RQG chargen sequence with setting substitutions. Distinct subsystem; GM layer reads from the sheet it produces.
- Chargen engine following RQG sequence:
- 1. Homeland (Stef's regions)
- 2. Family History (year-by-year event rolls, Stef's calendar)
- 3. Rune Affinities (tied into characteristic modifiers per RQG)
- 4. Characteristics (STR, CON, SIZ, INT, POW, DEX, CHA) + derived stats: MP, HP + hit locations, Healing Rate, Damage Bonus, Max ENC, Strike Rank, Skill Category Modifiers
- 5. Occupation (reflavored table)
- 6. Kinship (grants Common Rune Magic access + Rune point pool)
- 7. Personal Skill Bonuses
- 8. Other Information (gender, name, age, handedness, scars, family, tribe/settlement/clan, heirloom, reputation, movement)
- 9. Passions (directed %, e.g. Loyalty/Hate/Love)
- 10. Personality Traits (Pendragon-style opposed pairs, each pair scored to 20)
- Persistent, mutable character sheet — every roll user-editable/re-rollable after generation (not one-shot)
- Character persistence across sessions
Phase 3 — GM Layer (encounter resolution)
Deterministic RQG mechanics, reading from the active character sheet(s).
- Skill checks via Ability Results Table (pass/fail with degree of success, brief outcome)
- Opposed checks vs NPCs/environment via full Resistance Table
- Full combat resolution: strike ranks, hit locations, damage, round-by-round to an outcome
- Augmentation from Passions (boost/hinder per RQG rules)
- Personality Trait checks for ambiguous character behavior mid-resolution
- Spirit Magic casting during resolution (MP cost per RQG)
- Rune Magic casting (Rune points from Kinship pool)
- Reaction rolls
- (Out of scope v1, flag as future: Sorcery, Divine Intervention)
Phase 4 — Flavour Roller, Scene Types & Favourites
- Roll engine: 3–4 mixed-category options per roll (encounter / cultural detail / NPC quirk), tagged by scene type + danger level
- Manual-pick scene types: Combat/Danger, Social/NPC (Travel and Tavern/Settlement are driven by Phases 5–6)
- Pick-one-or-none flow → hand picked option to GM layer for resolution
- Favourites: save resolved results, persistent across sessions, grouped by scene type, danger tag carried through for filtering
- Favourites browser (viewable list, grouped by scene type)
- Export: downloadable markdown dump of favourites, grouped by scene type
Phase 5 — World Model
- Locations: name, type (Settlement / Wilderness Point / Dungeon / Landmark → maps to scene types), freeform features/tags
- Districts (settlement sub-locations): name, danger level (none/low/med/high), district-scoped NPC pool
- District encounter checks: manually triggered, chance weighted by danger level (defaults none 0% / low 15% / med 35% / high 60%, tunable in config)
- Paths: from/to, distance (km), mode of travel, danger level, terrain notes
- Travel time computation: distance ÷ RQG movement rate for mode (from compiled data, not hardcoded)
- Multi-leg routing through intermediate locations when no direct path exists (sum time across legs)
- NPCs scoped to location or district; both random draw and browsable list presentations
Phase 6 — Journey Flow
- Origin/destination/mode selection UI (mode changeable per leg)
- Route resolution + total travel time display
- Open-road legs: fixed cadence, one encounter roll per day of travel
- In-settlement: manual per-district checks (danger-weighted, from Phase 5)
- Triggered rolls surface mixed flavour options tagged by scene type (derived from location/path type) + danger level
- Resolution + save flow wired through GM layer and favourites as usual
Phase 7 — Narration Layer (optional, last)
- Ollama integration: mechanical result → prose paragraph via OpenAI-compatible endpoint (
localhost:11434), model name configurable - Plain templated-text fallback when Ollama unreachable or output unusable
- Keep all mechanical resolution deterministic — LLM narrates only
Open Questions (resolve before/during build)
- Markdown table structure for seed files, incl. new RQG-derived tables (Rune Magic, Occupation, Resistance Table, Ability Results Table)
- Homeland/Kinship/Occupation replacement content from Stef (alongside digitization)
- Personality Trait pair final set + starting-score generation method
Explicitly Out of Scope (v1)
- Fresh OCR/extraction from the physical book
- Chat-style generation / conversational interface
- Category selection separate from scene type
- Sorcery, Divine Intervention
- Glorantha as setting (RQG is mechanics source only)