Release Healer Man 0.1.19

This commit is contained in:
phenom committed 2026-09-06 11:06:03 -04:00
1 parent eaddad4134
commit d9bebb4e81
13 files changed
+343 -37

No files matched your search

+14 -7
View File
@@ -21,7 +21,7 @@ import { TALENT_NODES, talentNodesForTree } from "./talentCatalog";
import { EMPTY_ITEM_STATS } from "./itemStats";
import { abilitiesForClass, defaultActionBarForClass } from "./abilityCatalog";
import { defaultActionBindings } from "./actionBindings";
import { deriveCharacterStats } from "./wotlkStats";
import { deriveCharacterStats, MANA_POOL_MULTIPLIER } from "./wotlkStats";
import { subscribeCombatPresentation, type CombatPresentationEvent } from "./combatPresentation";
import { loadCanonicalBenchmarkBuilds } from "./benchmark/benchmarkBuilds";
@@ -83,7 +83,7 @@ describe("combat store", () => {
const first = useCombatStore.getState().castSlot(0, undefined, 1000);
expect(first).toMatchObject({ ok: true, abilityId: "mage-frostbolt", damage: 0 });
expect(useCombatStore.getState().mobs.ravager.health).toBe(100);
expect(startingResource).toBe(165);
expect(startingResource).toBe(165 * MANA_POOL_MULTIPLIER);
expect(useCombatStore.getState().resource).toBe(startingResource);
expect(useCombatStore.getState().activeCast).toMatchObject({ completesAt: 2500, mode: "cast" });
@@ -93,7 +93,9 @@ describe("combat store", () => {
expect(useCombatStore.getState().mobs.ravager.health).toBe(100);
useCombatStore.getState().tick(0.1, 2500);
expect(useCombatStore.getState().mobs.ravager.health).toBeLessThan(100);
expect(useCombatStore.getState().resource).toBe(startingResource - Math.round(startingResource * 0.14));
expect(useCombatStore.getState().resource).toBe(
startingResource - Math.round(startingResource / MANA_POOL_MULTIPLIER * 0.14),
);
expect(useCombatStore.getState().activeCast).toBeNull();
expect(useCombatStore.getState().mobs.ravager.engaged).toBe(true);
});
@@ -104,7 +106,10 @@ describe("combat store", () => {
const frostbolt = initial.abilities.find((ability) => ability.id === "mage-frostbolt");
expect(frostbolt).toBeDefined();
const [cost] = resolvedAbilityCosts(frostbolt!, initial.talentModifiers, initial);
expect(cost).toEqual({ resource: "mana", amount: Math.round(initial.maxResource * 0.14) });
expect(cost).toEqual({
resource: "mana",
amount: Math.round(initial.maxResource / MANA_POOL_MULTIPLIER * 0.14),
});
registerTarget("mana-target", [10, 0, 0]);
useCombatStore.setState({
@@ -208,8 +213,8 @@ describe("combat store", () => {
const chronomancerBase = deriveCharacterStats("chronomancer", 1, EMPTY_ITEM_STATS, "human");
useCombatStore.getState().initializeCharacter({ classId: "chronomancer", level: 1 });
expect(useCombatStore.getState()).toMatchObject({
resource: Math.round(chronomancerBase.mana * 1.12),
maxResource: Math.round(chronomancerBase.mana * 1.12),
resource: Math.round(chronomancerBase.mana / MANA_POOL_MULTIPLIER * 1.12) * MANA_POOL_MULTIPLIER,
maxResource: Math.round(chronomancerBase.mana / MANA_POOL_MULTIPLIER * 1.12) * MANA_POOL_MULTIPLIER,
});
useCombatStore.getState().initializeCharacter({ classId: "barbarian", level: 10 });
@@ -1065,7 +1070,9 @@ describe("combat store", () => {
expect(useCombatStore.getState().castSlot(0, undefined, 10_000).ok).toBe(true);
const boltCompletion = useCombatStore.getState().activeCast!.completesAt;
useCombatStore.getState().tick(0.1, boltCompletion);
expect(useCombatStore.getState().resource).toBe(startingMana - Math.round(startingMana * 0.1 * 0.85));
expect(useCombatStore.getState().resource).toBe(
startingMana - Math.round(startingMana / MANA_POOL_MULTIPLIER * 0.1 * 0.85),
);
});
it("routes a cast-time direct heal to the selected living party member", () => {