# Vegvísir — TODO Derived from [vegvisir-spec.md](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 - [x] Flavour/encounter tables (`norse_encounter_tables.md`, `random-encounter-tables.md` exist — 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)