Release Healer Man 0.1.5

This commit is contained in:
phenom committed 2026-08-18 16:22:19 -04:00
1 parent f4c9cf356c
commit 55cfd43d66
62 files changed
+3030 -153

No files matched your search

+39
View File
@@ -75,6 +75,20 @@ describe("party combat runtime", () => {
expect(usePartyStore.getState().members.map((member) => member.nextActionAt)).toEqual(actionRevisions);
});
it("keeps living companions in the fight while the player waits for resurrection", () => {
registerEngagedMob();
for (const member of usePartyStore.getState().members) {
registerPartyRuntimePosition(member.id, [0, 0, 0]);
}
useCombatStore.getState().damagePlayer(useCombatStore.getState().maxHealth * 10);
const beforeMobHealth = useCombatStore.getState().mobs["pack:a"].health;
advanceDungeonPartyCombat(1_000);
expect(useCombatStore.getState().health).toBe(0);
expect(useCombatStore.getState().mobs["pack:a"].health).toBeLessThan(beforeMobHealth);
});
it("assigns the tank to a loose mob attacking the healer before one attacking DPS", () => {
const party = usePartyStore.getState();
const tank = party.members.find((member) => member.role === "tank")!;
@@ -177,6 +191,31 @@ describe("party combat runtime", () => {
expect(coolingDown.targetId).toBeNull();
});
it("uses an unlocked party resurrection instead of treating a defeated player as a heal target", () => {
usePartyStore.getState().initializeParty("resurrection-runtime", 80, 100, "damage");
const support = applyHealerSupport(usePartyStore.getState().members, 0, 100, 1_000);
expect(support).toMatchObject({
action: "resurrection",
targetId: "__player__",
playerHealing: 0,
});
expect(support.playerResurrectionPercent).toBeGreaterThan(0);
expect(support.presentation?.name.toLowerCase()).toMatch(/rebirth|redemption|resurrect|ancestral|revive/);
});
it("lets the party raise the player in place while combat remains active", () => {
useCombatStore.getState().initializeCharacter({ classId: "mage", level: 80 });
usePartyStore.getState().initializeParty("resurrection-runtime", 80, useCombatStore.getState().health, "damage");
useCombatStore.getState().damagePlayer(useCombatStore.getState().maxHealth * 10);
expect(useCombatStore.getState().health).toBe(0);
advanceDungeonPartyCombat(1_000);
expect(useCombatStore.getState().health).toBeGreaterThan(0);
expect(useCombatStore.getState().feedback?.message).toContain("Resurrected");
});
it("classifies ranged classes and elemental shaman into a stand-off range band", () => {
const ranged = [
{ classId: "hunter", specialization: "Marksmanship", role: "damage" },