From eec93e442b2eaa76601c331d0a54c37f3f7de483 Mon Sep 17 00:00:00 2001 From: Hikari Date: Tue, 24 Mar 2026 19:51:59 -0700 Subject: [PATCH] chore: add vampire expansion implementation TODO --- TODO.md | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..49a7333 --- /dev/null +++ b/TODO.md @@ -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//.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//`, 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