fix: preserve runestone bounty flag for legacy defeated bosses #67

Merged
naomi merged 1 commits from fix/boss-runestone-repeat-kill into main 2026-03-18 13:50:20 -07:00
2 changed files with 30 additions and 1 deletions
+4 -1
View File
@@ -215,7 +215,10 @@ const buildPostPrestigeState = (
const currentBoss = currentState.bosses.find((candidate) => { const currentBoss = currentState.bosses.find((candidate) => {
return candidate.id === freshBoss.id; return candidate.id === freshBoss.id;
}); });
if (currentBoss?.bountyRunestonesClaimed === true) { if (
currentBoss?.bountyRunestonesClaimed === true
|| currentBoss?.status === "defeated"
) {
return { ...freshBoss, bountyRunestonesClaimed: true }; return { ...freshBoss, bountyRunestonesClaimed: true };
} }
return freshBoss; return freshBoss;
+26
View File
@@ -319,6 +319,32 @@ describe("buildPostPrestigeState", () => {
expect(matchingBoss?.bountyRunestonesClaimed).toBe(true); expect(matchingBoss?.bountyRunestonesClaimed).toBe(true);
}); });
it("sets bountyRunestonesClaimed on bosses defeated before the flag was introduced", () => {
const legacyDefeatedBoss = {
bountyRunestones: 5,
crystalReward: 0,
currentHp: 0,
damagePerSecond: 10,
description: "A boss",
equipmentRewards: [] as string[],
essenceReward: 0,
goldReward: 100,
id: "troll_king",
maxHp: 100,
name: "Troll King",
prestigeRequirement: 0,
status: "defeated" as const,
upgradeRewards: [] as string[],
zoneId: "verdant_vale",
};
const state = makeMinimalState({ bosses: [ legacyDefeatedBoss ] as GameState["bosses"] });
const { prestigeState } = buildPostPrestigeState(state, "Tester");
const matchingBoss = prestigeState.bosses.find((boss) => {
return boss.id === "troll_king";
});
expect(matchingBoss?.bountyRunestonesClaimed).toBe(true);
});
it("accumulates completed quests into lifetime total", () => { it("accumulates completed quests into lifetime total", () => {
const quest = { const quest = {
id: "q_1", id: "q_1",