Phase 1 README: roster data + seed overview

This commit is contained in:
2026-06-23 00:03:16 +10:00
parent fcf59e448f
commit e294f2a596
+53 -2
View File
@@ -1,3 +1,54 @@
# newbury-nights-ghost-data
# Newbury Nights — Ghost Roster (Phase 1 Data)
Phase 1 ghost-roster data + SQLite seed for the Newbury Nights AR ghost-hunting loop. Decoded roster (111 ghosts, 36 abilities), name-slug IDs, separate seed DB.
Standalone ghost-roster data + seed for the AR ghost-hunting loop. This is the
**data foundation** — no hunt logic yet. It builds a separate SQLite DB so it
doesn't touch the live app DB (the Free Hunt pool) until you choose to merge.
## Contents
| File | What it is |
|------|------------|
| `ghosts.json` | 111 ghosts: name, slug `id`, colour, rarity, pip stats, health/damage, `abilityId`, plus null placeholders for asset paths + AR stats |
| `abilities.json` | 36 abilities (17 Common + 19 Boss): charges, cooldown, effect |
| `locations.json` | AR-anchor stub (one generic plane). Extend with real sets in Phase 2/3 |
| `seed-ghosts.js` | `better-sqlite3` seed → builds `ghost-roster.db` |
| `verify.js` | Quick read-back / integrity check |
## Run
```bash
npm install better-sqlite3 # needs build-essential (already on hal-blackpearl)
node seed-ghosts.js # writes ./ghost-roster.db
node verify.js # prints counts + sample joins
```
Re-runnable — the seed drops and rebuilds the `roster_*` tables each time.
## Schema (roster_* tables, namespaced)
- `roster_ghosts` — one row per ghost. PK = name slug (`nagging-nathan`).
- `roster_abilities` — PK = ability slug. `roster_ghosts.ability_id` → FK.
- `roster_locations` — AR anchors (plane / image-target / qr).
- `roster_ghost_locations` — many-to-many spawn affinity (wired in Phase 3).
## Decoded mapping (source of truth)
- **Rarity** ← `GhostRarity` enum: Common=1, Rare=2, Epic=3, Legendary=4.
- **Colour** ← `GhostColor` enum: Red, Blue, Yellow — drives the colour-wheel lure.
- **Pips** ← `UISpeedPips` / `UIRangePips` / `UIChargePips` (int 05).
- **health_max / damage_max** ← Digital Game stats (from the roster wiki).
## Placeholders to fill later
Per-ghost fields left `null`, filled from asset/data-table exports:
- `faceSprite`, `fullbodySprite`, `webmPath`, `webpPath`**Phase 2** asset pipeline.
- `arHealth`, `hauntValue`, `isBoss` — from the **`ARGhostData` TextAsset** export.
- `locations[]` — from **`MetaGhostData.LocationsArray`**, set in Phase 3.
## Asset rights
Ghost assets/stats used under direct permission from the rights holder; app
delivery is original (web). LEGO and Hidden Side **logos are excluded**. Sets
used only as generic AR anchors/backdrops. See `PERMISSIONS.md` once the grant
doc is digitised. Not legal advice.