Files
vegvisir/TODO.md
T
stefwill c0ef70d7fe docs: add build spec, TODO, and encounter table sources
- 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)
2026-07-04 20:06:03 +10:00

6.8 KiB
Raw Blame History

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.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: 34 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 56)
  • 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)