Files
story_builder/README.md
2026-06-30 09:10:05 +10:00

45 lines
1.8 KiB
Markdown

# RQ3 Story Tool
A solo web app for narrative-driven play using RuneQuest 3rd Edition rules with a custom fiction layer.
## Setup
```bash
npm install
```
The first time you run the app, the SQLite database is created automatically at `data/story-tool.db` from `db.js`'s schema.
### Importing the table files
`tables/*.md` are converted into the database once, then the database is authoritative (the `.md` files can be deleted afterward):
```bash
npm run import-tables
```
Re-running this command wipes and rebuilds the imported table tree, NPC-field detection, and the Norse Layer 1→2 table links - safe to re-run any time the `.md` files change.
## Run
```bash
npm start
```
Then open `http://localhost:3000`.
## Project layout
- `db.js` - SQLite schema and all query helpers (npcs, enemies, log, combat state, imported tables, spell mappings).
- `rq3.js` - the RuneQuest 3rd Edition rules engine. Pure functions only, no DB/HTTP dependencies.
- `server.js` - Express routes. All state changes go through `/api/*` and are logged.
- `lib/markdownTableParser.js` - parses the heading/table structure out of `tables/*.md`.
- `scripts/import-tables.js` - one-time markdown → SQLite conversion (see above).
- `public/` - the frontend (`index.html`, `app.js`, `style.css`). Plain JS, no framework, no rules logic - everything goes through the API.
## Notes
- The fiction layer (NPC names, encounter flavor text, custom spell names) lives entirely in the database (originally seeded from `tables/*.md`) and never touches the RQ3 rules engine in `rq3.js`.
- Spell name → mechanic mappings are managed via `/api/spell-mappings` rather than markdown, since the table content has already moved into the database.
- Closing the tab while there are unexported changes triggers an export reminder; data is also safely persisted in SQLite regardless.