generated from nhcarrigan/template
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
eec93e442b
|
@@ -0,0 +1,135 @@
|
|||||||
|
# Vampire Expansion — Implementation TODO
|
||||||
|
|
||||||
|
Branch: `feat/expansions`
|
||||||
|
|
||||||
|
Thematic currency names:
|
||||||
|
- Gold → **Blood**
|
||||||
|
- Essence → **Ichor**
|
||||||
|
- Crystals → **Soul Shards**
|
||||||
|
- Runestones → **Bloodstones**
|
||||||
|
- Echoes → **Whispers**
|
||||||
|
- Click action → **Hunt**
|
||||||
|
- Adventurers → **Thralls**
|
||||||
|
- Prestige → **Siring** (working name)
|
||||||
|
- Transcendence → **The Awakening** (working name)
|
||||||
|
- Apotheosis → **Eternal Sovereignty** (role ID: 1486144657023959180)
|
||||||
|
|
||||||
|
CDN prefix for all vampire art: `https://cdn.nhcarrigan.com/elysium/vampire/<folder>/<id>.jpg`
|
||||||
|
Local scratch dir (delete before committing): `img/vampire/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 1 — Types
|
||||||
|
|
||||||
|
- [ ] Add `VampireExpansionState` interface to `packages/types/src/interfaces/` mirroring full `GameState` structure (zones, bosses, quests, adventurers, upgrades, equipment, achievements, prestige, transcendence, apotheosis, exploration, resources, baseClickPower, lastTickAt, dailyChallenges, codex, autoQuest, autoBoss, autoAdventurer, companions, story)
|
||||||
|
- [ ] Add `ExpansionsState` interface: `{ vampire?: VampireExpansionState }`
|
||||||
|
- [ ] Add `expansions?: ExpansionsState` field to `GameState`
|
||||||
|
- [ ] Export new types from `packages/types/src/index.ts`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 2 — Data files (vampire content)
|
||||||
|
|
||||||
|
All data files go in `apps/api/src/data/vampire/`.
|
||||||
|
Same content scale as base game; use vampire theming throughout.
|
||||||
|
|
||||||
|
- [ ] `zones.ts` — 18 vampire-themed zones (crypts, blood forests, cursed castles, etc.)
|
||||||
|
- [ ] `bosses.ts` — 72 vampire-themed bosses (4 per zone)
|
||||||
|
- [ ] `quests.ts` — match base game quest count (~95); vampire-themed names/descriptions
|
||||||
|
- [ ] `adventurers.ts` — 32 thrall tiers with progressive stats
|
||||||
|
- [ ] `upgrades.ts` — match base game upgrade count (~57); vampire-themed
|
||||||
|
- [ ] `equipment.ts` — match base game equipment count (~53); vampire-themed sets
|
||||||
|
- [ ] `equipmentSets.ts` — vampire equipment sets
|
||||||
|
- [ ] `achievements.ts` — match base game count (~40); vampire-themed conditions
|
||||||
|
- [ ] `explorations.ts` — 72 areas across 18 vampire lore zones
|
||||||
|
- [ ] `materials.ts` — match base game material count (~54); vampire-themed
|
||||||
|
- [ ] `recipes.ts` — match base game recipe count (~36); vampire-themed
|
||||||
|
- [ ] `prestigeUpgrades.ts` — 25 "Siring" upgrades
|
||||||
|
- [ ] `transcendenceUpgrades.ts` — 15 "Awakening" upgrades
|
||||||
|
- [ ] `dailyChallenges.ts` — 10 vampire daily challenges
|
||||||
|
- [ ] `initialState.ts` — `initialVampireState()` function mirroring `initialGameState` structure
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 3 — Art generation & CDN upload
|
||||||
|
|
||||||
|
For each category below, generate images via Gemini API (`gemini-3-pro-image-preview`),
|
||||||
|
save locally to `img/vampire/<folder>/`, upload to R2, then delete local files.
|
||||||
|
|
||||||
|
Use soft-shaded anime style; vampire/gothic aesthetic; crimson/black/dark purple palette.
|
||||||
|
|
||||||
|
- [ ] Zone banners (18) → `img/vampire/zones/` → CDN `vampire/zones/`
|
||||||
|
- [ ] Boss portraits (72) → `img/vampire/bosses/` → CDN `vampire/bosses/`
|
||||||
|
- [ ] Quest banners (match count) → `img/vampire/quests/` → CDN `vampire/quests/`
|
||||||
|
- [ ] Adventurer/thrall portraits (32) → `img/vampire/adventurers/` → CDN `vampire/adventurers/`
|
||||||
|
- [ ] Equipment icons (match count) → `img/vampire/equipment/` → CDN `vampire/equipment/`
|
||||||
|
- [ ] Achievement icons (match count) → `img/vampire/achievements/` → CDN `vampire/achievements/`
|
||||||
|
- [ ] Exploration area art (72) → `img/vampire/explorations/` → CDN `vampire/explorations/`
|
||||||
|
- [ ] Material icons (match count) → `img/vampire/materials/` → CDN `vampire/materials/`
|
||||||
|
- [ ] Story chapter banners (match count) → `img/vampire/story-chapters/` → CDN `vampire/story-chapters/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 4 — API changes
|
||||||
|
|
||||||
|
- [ ] Add `inGuild` to Prisma `Player` model → update `initialGameState` if needed (already done in #134 — verify migration)
|
||||||
|
- [ ] Update Prisma schema: no DB changes needed (expansion state is inside the `GameState` JSON blob)
|
||||||
|
- [ ] Update `initialState.ts` to include `expansions: {}` in `initialGameState`
|
||||||
|
- [ ] Update `sync-new-content` debug route to inject/patch vampire expansion content when expansion is unlocked
|
||||||
|
- [ ] Add vampire-specific unlock trigger: when base-game apotheosis count ≥ 1, set `expansions.vampire` to `initialVampireState()` and `unlocked: true`
|
||||||
|
- [ ] Update the load endpoint to pass expansion state through to the client
|
||||||
|
- [ ] Ensure prestige/transcendence/apotheosis routes only reset state for their own expansion (base game routes must NOT touch `expansions.*`)
|
||||||
|
- [ ] Add vampire prestige, transcendence, and apotheosis routes (mirrors of base game routes, scoped to `expansions.vampire`)
|
||||||
|
- [ ] Grant `Eternal Sovereignty` role (ID: `1486144657023959180`) on vampire apotheosis
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 5 — Frontend changes
|
||||||
|
|
||||||
|
### Expansion switcher
|
||||||
|
- [ ] Add expansion toggle buttons below the Early Access warning in the sidebar
|
||||||
|
- [ ] Always render all expansion buttons; disable any where `unlocked !== true`
|
||||||
|
- [ ] Active expansion stored in React state (not game state); defaults to `"base"`
|
||||||
|
- [ ] Switching expansion updates which data the UI panels display
|
||||||
|
|
||||||
|
### Resource bar
|
||||||
|
- [ ] Show ALL currencies from ALL expansions as separate labelled lines
|
||||||
|
- [ ] Vampire currencies use distinct icons/colours (crimson tint for blood, etc.)
|
||||||
|
- [ ] The "expand" button label shows the gold-equivalent currency of the active expansion
|
||||||
|
|
||||||
|
### Thematic UI
|
||||||
|
- [ ] When vampire expansion is active, swap labels: gold → Blood, essence → Ichor, etc.
|
||||||
|
- [ ] Apply `.vampire-mode` CSS class to game container when vampire is active
|
||||||
|
- [ ] Vampire colour palette: deep crimsons (`#5C0A1A`), rich crimson (`#C41E3A`), blacks, desaturated purples
|
||||||
|
|
||||||
|
### Tick engine
|
||||||
|
- [ ] Update `apps/web/src/engine/tick.ts` to compute passive income for all unlocked expansions every tick (not just base game)
|
||||||
|
- [ ] Offline income calculation must also cover all expansions
|
||||||
|
|
||||||
|
### Profile
|
||||||
|
- [ ] Profile panel: tab stats by expansion (base game tab + one tab per unlocked expansion)
|
||||||
|
- [ ] Show correct thematic prestige/transcendence/apotheosis badge names per expansion
|
||||||
|
- [ ] Lifetime stats (gold earned, clicks, etc.) tracked separately per expansion
|
||||||
|
|
||||||
|
### About / How to Play
|
||||||
|
- [ ] Update `aboutPanel.tsx` `HOW_TO_PLAY` array to document the expansion system
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 6 — Tests & CI
|
||||||
|
|
||||||
|
- [ ] Unit tests for all new data files (at minimum, validate structure/required fields)
|
||||||
|
- [ ] Unit tests for `initialVampireState()`
|
||||||
|
- [ ] Tests for vampire unlock trigger route
|
||||||
|
- [ ] Tests for vampire prestige/transcendence/apotheosis routes
|
||||||
|
- [ ] Tests for updated tick engine (expansion income)
|
||||||
|
- [ ] Maintain 100% coverage on `apps/api` and `packages/types`
|
||||||
|
- [ ] Full pipeline: lint → build → test passing before PR
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 7 — Final
|
||||||
|
|
||||||
|
- [ ] Delete `img/vampire/` directory before committing
|
||||||
|
- [ ] Update `MEMORY.md` with new content counts
|
||||||
|
- [ ] Open PR → request review
|
||||||
Reference in New Issue
Block a user