Files
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

109 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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: 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)