feat: align expansion tab layouts with base game and add backlog TODO

- Add all shared tabs (daily, companions, character, about, debug) to
  both vampire and goddess mode tab bars and panel renderers
- Add placeholder vampire-story and vampire-codex panels with TODO
  comments pending expansion story/codex content
- Reorder both expansion tab arrays to mirror base game tab order
- Add TODO.md tracking expansion content backlog and known issues
  (#254–#259)
This commit is contained in:
2026-05-06 14:38:26 -07:00
committed by Naomi Carrigan
parent f4b800fbae
commit c6f4e27843
2 changed files with 116 additions and 22 deletions
+30
View File
@@ -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
+86 -22
View File
@@ -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<Mode> = [ "mortal", "goddess", "vampire" ];
@@ -488,6 +516,24 @@ const GameLayout = (): JSX.Element => {
{activeMode === "goddess"
&& activeGoddessTab === "goddess-achievements"
&& <GoddessAchievementsPanel />}
{activeMode === "goddess" && activeGoddessTab === "daily"
&& <DailyChallengePanel />}
{activeMode === "goddess" && activeGoddessTab === "companions"
&& <CompanionPanel />}
{activeMode === "goddess" && activeGoddessTab === "character"
&& <CharacterSheetPanel />}
{/* 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"
&& <StoryPanel />}
{/* 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"
&& <CodexPanel />}
{activeMode === "goddess" && activeGoddessTab === "about"
&& <AboutPanel />}
{activeMode === "goddess" && activeGoddessTab === "debug"
&& <DebugPanel />}
{activeMode === "vampire"
&& activeVampireTab === "vampire-zones"
&& <VampireZonesPanel />
@@ -532,6 +578,24 @@ const GameLayout = (): JSX.Element => {
&& activeVampireTab === "vampire-achievements"
&& <VampireAchievementsPanel />
}
{activeMode === "vampire" && activeVampireTab === "daily"
&& <DailyChallengePanel />}
{activeMode === "vampire" && activeVampireTab === "companions"
&& <CompanionPanel />}
{activeMode === "vampire" && activeVampireTab === "character"
&& <CharacterSheetPanel />}
{/* 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"
&& <StoryPanel />}
{/* 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"
&& <CodexPanel />}
{activeMode === "vampire" && activeVampireTab === "about"
&& <AboutPanel />}
{activeMode === "vampire" && activeVampireTab === "debug"
&& <DebugPanel />}
</div>
</main>
</div>