diff --git a/apps/web/src/components/game/gameLayout.tsx b/apps/web/src/components/game/gameLayout.tsx index d18dfc8..6e3c95a 100644 --- a/apps/web/src/components/game/gameLayout.tsx +++ b/apps/web/src/components/game/gameLayout.tsx @@ -54,9 +54,13 @@ import { StoryToast } from "./storyToast.js"; import { TranscendencePanel } from "./transcendencePanel.js"; import { UpgradePanel } from "./upgradePanel.js"; import { VampireAchievementsPanel } from "./vampireAchievementsPanel.js"; +import { VampireAwakeningPanel } from "./vampireAwakeningPanel.js"; import { VampireBossPanel } from "./vampireBossPanel.js"; +import { VampireEquipmentPanel } from "./vampireEquipmentPanel.js"; import { VampireQuestsPanel } from "./vampireQuestsPanel.js"; +import { VampireSiringPanel } from "./vampireSiringPanel.js"; import { VampireThrallsPanel } from "./vampireThrallsPanel.js"; +import { VampireUpgradesPanel } from "./vampireUpgradesPanel.js"; import { VampireZonesPanel } from "./vampireZonesPanel.js"; type Mode = "mortal" | "goddess" | "vampire"; @@ -500,27 +504,19 @@ const GameLayout = (): JSX.Element => { } {activeMode === "vampire" && activeVampireTab === "vampire-equipment" - &&
{"🦇 Vampire Equipment coming soon..."}
-{"⚔️ Vampire Upgrades coming soon..."}
-{"🩸 Siring coming soon..."}
-{"💀 Vampire Awakening coming soon..."}
-{"Loading..."}
+{"The Vampire expansion is not yet unlocked."}
++ {"Awakening is the ultimate vampire reset. It wipes "} + {"everything"} + {" in the vampire realm — blood, sirings, thralls, and upgrades" + + " — but grants "} + {"Soul Shards"} + {", a permanent vampire currency that survives all future resets." + + " Soul Shards power upgrades that permanently amplify every vampire run."} +
++ + {"More sirings = more Soul Shards."} + {" Optimise your vampire run for maximum yield!"} + +
+ ++ {"Awakening count: "} + {awakeningCount} +
+ : null + } ++ {"Current Soul Shards: "} + {formatInteger(currentSoulShards)} +
++ {"Current siring count: "} + {siring.count} +
+ {hasDefeatedFinalBoss + ?+ {"Soul Shards on awakening: "} + + {"+"} + {formatInteger(soulShardsPreview)} + + {metaMultiplier > 1 + ? + {" (×"} + {metaMultiplier.toFixed(2)} + {" meta bonus applied)"} + + : null + } +
+ : null} ++ {"🔒 "} + {"Defeat the Eternal Darkness"} + {" to unlock Awakening."} +
++ {"The Eternal Darkness is the final boss of the Vampire realm."} +
++ {"You are ready to achieve Awakening. This action is "} + {"irreversible"} + {"."} +
+ + {awakeningError === null + ? null + :{awakeningError}
} + {result === null + ? null + :+ {"Awakening achieved! Earned "} + + {formatInteger(result.soulShardsEarned)} + {" Soul Shards"} + + {". This is Awakening "} + {result.count} + {". A new soul cycle begins."} +
+ } ++ {"Balance: "} + + {formatInteger(currentSoulShards)} + {" Soul Shards"} + +
++ {"Soul Shard upgrades are "} + {"permanent"} + {" — they survive all future sirings and awakenings."} +
+ + {upgradesByCategory.map(({ catId, label, upgrades }) => { + return ( +{upgrade.description}
++ {purchased + ? "✅ Purchased" + : `💠 ${formatInteger(upgrade.cost)} Soul Shards`} +
+{item.description}
+{bonusDescription(item)}
+ {item.setId === undefined + ? null + :{"Set: "}{item.setId}
} +{"Loading..."}
+{"The Vampire expansion is not yet unlocked."}
++ {"No equipment in this category yet."} +
+ : null} +{"Loading..."}
+{"The Vampire expansion is not yet unlocked."}
++ {"Siring is the vampire prestige layer. It resets your blood" + + " and vampire progress, but grants "} + {"Ichor"} + {" — a permanent vampire currency used to purchase powerful upgrades." + + " Each siring also permanently increases your blood/s multiplier."} +
+ ++ {"Siring count: "} + {siring.count} +
+ : null + } ++ {"Current Ichor: "} + {formatInteger(currentIchor)} +
++ {"Blood this run: "} + {formatNumber(totalBloodEarned)} + {" / "} + {formatNumber(threshold)} +
++ {progressPct} + {"% of threshold"} +
+ {isEligible + ?+ {"Ichor on siring: "} + + {"+"} + {formatInteger(ichorPreview)} + + {combinedIchorMultiplier > 1 + ? + {" (×"} + {combinedIchorMultiplier.toFixed(2)} + {" yield bonus applied)"} + + : null + } +
+ : null} ++ {"Next production multiplier: "} + + {"×"} + {nextMultiplier.toFixed(2)} + +
++ {"🔒 "} + {"Earn enough blood"} + {" to unlock siring."} +
++ {"You need "} + {formatNumber(threshold)} + {" total blood in the current run. You have "} + {formatNumber(totalBloodEarned)} + {"."} +
++ {"You are ready to sire. This action is "} + {"irreversible"} + {" within this vampire run."} +
+ + {siringError === null + ? null + :{siringError}
} + {result === null + ? null + :+ {"Sired! Earned "} + + {formatInteger(result.ichorEarned)} + {" Ichor"} + + {". This is Siring "} + {result.count} + {". A new bloodline cycle begins."} +
+ } ++ {"Balance: "} + + {formatInteger(currentIchor)} + {" Ichor"} + +
++ {"Ichor upgrades are "} + {"permanent"} + {" — they survive future sirings."} +
+ + {upgradesByCategory.map(({ categoryId, label, upgrades }) => { + return ( +{upgrade.description}
++ {purchased + ? "✅ Purchased" + : `💧 ${formatInteger(upgrade.ichorCost)} Ichor`} +
+{upgrade.description}
++ {`×${String(upgrade.multiplier)} (+${String(multiplierPct)}%)`} +
+{upgrade.description}
++ {`×${String(upgrade.multiplier)} (+${String(multiplierPct)}%)`} +
+ {upgrade.thrallId === undefined + ? null + :+ {"🧟 Thrall: "} + {upgrade.thrallId} +
+ } + +{"Not yet unlocked."}
+{"Loading..."}
+{"The Vampire expansion is not yet unlocked."}
+{"No vampire upgrades available yet."}
+ : null} +