diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..dab0058 --- /dev/null +++ b/TODO.md @@ -0,0 +1,30 @@ +# Elysium — Project TODO + +Backlog items that need content or implementation before the expansion branch can be fully shipped. + +--- + +## Expansion Content + +- [ ] **Daily challenges for Vampire Mode** — design and add vampire-specific daily challenge sets; hook into the existing daily challenge system +- [ ] **Daily challenges for Goddess Mode** — design and add goddess-specific daily challenge sets; hook into the existing daily challenge system +- [ ] **Companions for Vampire Mode** — design vampire-flavoured companions and add to companion data/panel +- [ ] **Companions for Goddess Mode** — design goddess-flavoured companions and add to companion data/panel +- [ ] **Story content for Vampire Mode** — write story chapters for the vampire expansion; create a `VampireStoryPanel` to replace the mortal placeholder on the Vampire Story tab +- [ ] **Story content for Goddess Mode** — write story chapters for the goddess expansion; create a `GoddessStoryPanel` to replace the mortal placeholder on the Goddess Story tab +- [ ] **Codex entries for Vampire Mode** — write vampire-specific codex entries; create a `VampireCodexPanel` to replace the mortal placeholder on the Vampire Codex tab +- [ ] **Codex entries for Goddess Mode** — write goddess-specific codex entries; create a `GoddessCodexPanel` to replace the mortal placeholder on the Goddess Codex tab + +--- + +## Known Issues (Open) + +See git.nhcarrigan.com/nhcarrigan/elysium/issues for the full list. +Notable open items: + +- #254 — Runestone per-prestige display does not match actual gain +- #255 — Achievements not triggering on milestone completion +- #256 — Exploration failure UX (consecutive failures, no feedback/pity) +- #257 — Quest completion not required for transcendence (design review) +- #258 — Crystal income post-transcendence feels insufficient +- #259 — Manual save can hang when triggered in rapid succession diff --git a/apps/web/src/components/game/gameLayout.tsx b/apps/web/src/components/game/gameLayout.tsx index f066a2a..7d1610a 100644 --- a/apps/web/src/components/game/gameLayout.tsx +++ b/apps/web/src/components/game/gameLayout.tsx @@ -90,29 +90,43 @@ type Tab = type GoddessTab = | "goddess-zones" - | "goddess-bosses" - | "goddess-quests" | "disciples" - | "goddess-equipment" | "goddess-upgrades" + | "goddess-quests" + | "goddess-bosses" + | "goddess-equipment" + | "goddess-exploration" + | "goddess-crafting" + | "daily" | "consecration" | "enlightenment" - | "goddess-crafting" - | "goddess-exploration" - | "goddess-achievements"; + | "companions" + | "character" + | "goddess-achievements" + | "goddess-story" + | "goddess-codex" + | "about" + | "debug"; type VampireTab = | "vampire-zones" - | "vampire-bosses" - | "vampire-quests" | "thralls" - | "vampire-equipment" | "vampire-upgrades" + | "vampire-quests" + | "vampire-bosses" + | "vampire-equipment" + | "vampire-exploration" + | "vampire-crafting" + | "daily" | "siring" | "vampire-awakening" - | "vampire-crafting" - | "vampire-exploration" - | "vampire-achievements"; + | "companions" + | "character" + | "vampire-achievements" + | "vampire-story" + | "vampire-codex" + | "about" + | "debug"; const baseTabs: Array<{ id: Tab; label: string }> = [ { id: "adventurers", label: "⚔️ Adventurers" }, @@ -138,30 +152,44 @@ const baseTabs: Array<{ id: Tab; label: string }> = [ const vampireTabs: Array<{ id: VampireTab; label: string }> = [ { id: "vampire-zones", label: "🗺️ Zones" }, - { id: "vampire-bosses", label: "🩸 Bosses" }, - { id: "vampire-quests", label: "📜 Quests" }, { id: "thralls", label: "🧟 Thralls" }, - { id: "vampire-equipment", label: "🦇 Equipment" }, { id: "vampire-upgrades", label: "⚔️ Upgrades" }, + { id: "vampire-quests", label: "📜 Quests" }, + { id: "vampire-bosses", label: "🩸 Bosses" }, + { id: "vampire-equipment", label: "🦇 Equipment" }, + { id: "vampire-exploration", label: "🌑 Exploration" }, + { id: "vampire-crafting", label: "⚗️ Crafting" }, + { id: "daily", label: "📅 Daily" }, { id: "siring", label: "🩸 Siring" }, { id: "vampire-awakening", label: "💀 Awakening" }, - { id: "vampire-crafting", label: "⚗️ Crafting" }, - { id: "vampire-exploration", label: "🌑 Exploration" }, + { id: "companions", label: "👥 Companions" }, + { id: "character", label: "📋 Character" }, { id: "vampire-achievements", label: "🏆 Achievements" }, + { id: "vampire-story", label: "📖 Story" }, + { id: "vampire-codex", label: "🗺️ Codex" }, + { id: "about", label: "ℹ️ About" }, + { id: "debug", label: "🔧 Debug" }, ]; const goddessTabs: Array<{ id: GoddessTab; label: string }> = [ { id: "goddess-zones", label: "🌟 Zones" }, - { id: "goddess-bosses", label: "👁️ Bosses" }, - { id: "goddess-quests", label: "📿 Quests" }, { id: "disciples", label: "🙏 Disciples" }, - { id: "goddess-equipment", label: "🔮 Equipment" }, { id: "goddess-upgrades", label: "✨ Upgrades" }, + { id: "goddess-quests", label: "📿 Quests" }, + { id: "goddess-bosses", label: "👁️ Bosses" }, + { id: "goddess-equipment", label: "🔮 Equipment" }, + { id: "goddess-exploration", label: "🌌 Exploration" }, + { id: "goddess-crafting", label: "⚗️ Crafting" }, + { id: "daily", label: "📅 Daily" }, { id: "consecration", label: "🕯️ Consecration" }, { id: "enlightenment", label: "💫 Enlightenment" }, - { id: "goddess-crafting", label: "⚗️ Crafting" }, - { id: "goddess-exploration", label: "🌌 Exploration" }, + { id: "companions", label: "👥 Companions" }, + { id: "character", label: "📋 Character" }, { id: "goddess-achievements", label: "🏆 Achievements" }, + { id: "goddess-story", label: "📖 Story" }, + { id: "goddess-codex", label: "🗺️ Codex" }, + { id: "about", label: "ℹ️ About" }, + { id: "debug", label: "🔧 Debug" }, ]; const modes: Array = [ "mortal", "goddess", "vampire" ]; @@ -488,6 +516,24 @@ const GameLayout = (): JSX.Element => { {activeMode === "goddess" && activeGoddessTab === "goddess-achievements" && } + {activeMode === "goddess" && activeGoddessTab === "daily" + && } + {activeMode === "goddess" && activeGoddessTab === "companions" + && } + {activeMode === "goddess" && activeGoddessTab === "character" + && } + {/* eslint-disable-next-line no-warning-comments -- Placeholder until expansion content is written */} + {/* TODO: replace with GoddessStoryPanel once story content is written */} + {activeMode === "goddess" && activeGoddessTab === "goddess-story" + && } + {/* eslint-disable-next-line no-warning-comments -- Placeholder until expansion content is written */} + {/* TODO: replace with GoddessCodexPanel once codex entries are written */} + {activeMode === "goddess" && activeGoddessTab === "goddess-codex" + && } + {activeMode === "goddess" && activeGoddessTab === "about" + && } + {activeMode === "goddess" && activeGoddessTab === "debug" + && } {activeMode === "vampire" && activeVampireTab === "vampire-zones" && @@ -532,6 +578,24 @@ const GameLayout = (): JSX.Element => { && activeVampireTab === "vampire-achievements" && } + {activeMode === "vampire" && activeVampireTab === "daily" + && } + {activeMode === "vampire" && activeVampireTab === "companions" + && } + {activeMode === "vampire" && activeVampireTab === "character" + && } + {/* eslint-disable-next-line no-warning-comments -- Placeholder until expansion content is written */} + {/* TODO: replace with VampireStoryPanel once story content is written */} + {activeMode === "vampire" && activeVampireTab === "vampire-story" + && } + {/* eslint-disable-next-line no-warning-comments -- Placeholder until expansion content is written */} + {/* TODO: replace with VampireCodexPanel once codex entries are written */} + {activeMode === "vampire" && activeVampireTab === "vampire-codex" + && } + {activeMode === "vampire" && activeVampireTab === "about" + && } + {activeMode === "vampire" && activeVampireTab === "debug" + && }