fix: runestone formula, prestige/transcendence rebalance, exploration fixes, and comprehensive balance audit #135

Merged
naomi merged 53 commits from fix/stones into main 2026-03-31 19:57:53 -07:00
2 changed files with 39 additions and 0 deletions
Showing only changes of commit 3735cff23f - Show all commits
+21
View File
@@ -53,6 +53,7 @@ import {
transcend as transcendApi,
} from "../api/client.js";
import { CODEX_ENTRIES } from "../data/codex.js";
import { EXPLORATION_AREAS } from "../data/explorations.js";
import { RECIPES } from "../data/recipes.js";
import {
RESOURCE_CAP,
@@ -116,6 +117,9 @@ const applyBossResult = (
}).
filter(Boolean),
);
const newlyUnlockedZoneIds = new Set(unlockedZones.map((z) => {
return z.id;
}));
const challengeUpdate
= previous.dailyChallenges === undefined
@@ -216,6 +220,23 @@ const applyBossResult = (
? { ...u, unlocked: true }
: u;
}),
...newlyUnlockedZoneIds.size === 0 || previous.exploration === undefined
? {}
: {
exploration: {
...previous.exploration,
areas: previous.exploration.areas.map((area) => {
const areaDefinition = EXPLORATION_AREAS.find((definition) => {
return definition.id === area.id;
});
return areaDefinition !== undefined
&& newlyUnlockedZoneIds.has(areaDefinition.zoneId)
&& area.status === "locked"
? { ...area, status: "available" as const }
: area;
}),
},
},
};
}
+18
View File
@@ -21,6 +21,7 @@ import {
getActiveCompanionBonus,
} from "@elysium/types";
import { EQUIPMENT_SETS } from "../data/equipmentSets.js";
import { EXPLORATION_AREAS } from "../data/explorations.js";
import { updateChallengeProgress } from "../utils/dailyChallenges.js";
/**
@@ -753,6 +754,23 @@ export const applyTick = (
...updatedDailyChallenges === undefined
? {}
: { dailyChallenges: updatedDailyChallenges },
...newlyUnlockedZoneIds.size === 0 || state.exploration === undefined
? {}
: {
exploration: {
...state.exploration,
areas: state.exploration.areas.map((area) => {
const areaDefinition = EXPLORATION_AREAS.find((definition) => {
return definition.id === area.id;
});
return areaDefinition !== undefined
&& newlyUnlockedZoneIds.has(areaDefinition.zoneId)
&& area.status === "locked"
? { ...area, status: "available" as const }
: area;
}),
},
},
adventurers: updatedAdventurers,
bosses: updatedBosses,
equipment: updatedEquipmentReference,