Release Healer Man 0.1.6
This commit is contained in:
1 parent
55cfd43d66
commit
b12fb84859
96 files changed
+10874
-609
No files matched your search
@@ -20,26 +20,59 @@ function effectsOfKind<K extends AbilityEffect["kind"]>(
|
||||
}
|
||||
|
||||
describe("WoW 3.3.5 executable effect mapping", () => {
|
||||
it("never reduces an imported DBC effect to generic utility", () => {
|
||||
it("gives every imported classic rank executable or explicit utility semantics", () => {
|
||||
const effects = Object.values(WOW335_ABILITIES_BY_CLASS)
|
||||
.flat()
|
||||
.flatMap((ability) => ability.ranks?.flatMap((rank) => rank.effects) ?? ability.effects);
|
||||
|
||||
expect(effects.length).toBeGreaterThan(1_000);
|
||||
expect(effects.some((effect) => effect.kind === "utility")).toBe(false);
|
||||
expect([
|
||||
...new Set(effectsOfKind(
|
||||
{ effects },
|
||||
"scripted",
|
||||
).map((effect) => effect.effectType)),
|
||||
].sort((left, right) => left - right)).toEqual([3, 77]);
|
||||
for (const effect of effectsOfKind(
|
||||
{ effects },
|
||||
"unsupported",
|
||||
)) {
|
||||
expect(effect.combat).toBe(false);
|
||||
expect(effect.reason).toMatch(/^Noncombat DBC effect \d+$/);
|
||||
expect(effectsOfKind({ effects }, "scripted")).toEqual([]);
|
||||
expect(effectsOfKind({ effects }, "unsupported")).toEqual([]);
|
||||
for (const effect of effectsOfKind({ effects }, "utility")) {
|
||||
expect(effect.action).toMatch(/^(?:create-item|open-lock|portal|weapon-enchant|pickpocket|farsight|class-script)$/);
|
||||
}
|
||||
|
||||
for (const ability of Object.values(WOW335_ABILITIES_BY_CLASS).flat()) {
|
||||
if (ability.passive) continue;
|
||||
for (const rank of ability.ranks ?? []) {
|
||||
expect(rank.effects.length, `${ability.name} rank ${rank.rank}`).toBeGreaterThan(0);
|
||||
expect(rank.effects.some((effect) => {
|
||||
if (["trigger-spell", "scripted", "unsupported"].includes(effect.kind)) return false;
|
||||
if (effect.kind !== "apply-aura") return true;
|
||||
return Boolean(
|
||||
effect.control
|
||||
|| effect.aura.modifiers?.length
|
||||
|| effect.aura.absorbs?.length
|
||||
|| effect.aura.procs?.length
|
||||
|| effect.aura.utilityTags?.length
|
||||
|| effect.aura.controlImmunities?.length
|
||||
|| effect.aura.reflectSpellChance
|
||||
|| effect.aura.redirectDamagePercent,
|
||||
);
|
||||
}), `${ability.name} rank ${rank.rank}`).toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it("does not promote triggered rank-zero child spells into player ranks", () => {
|
||||
expect(byId("wow335-warrior-execute").ranks?.map((rank) => rank.spellId)).not.toContain(20647);
|
||||
expect(byId("wow335-priest-divine-hymn").ranks?.map((rank) => rank.spellId)).toEqual([64843]);
|
||||
expect(byId("wow335-death-knight-death-coil").ranks?.map((rank) => rank.spellId)).not.toContain(47632);
|
||||
});
|
||||
|
||||
it("keeps percentage costs and form resources source-correct", () => {
|
||||
expect(byId("wow335-mage-frostbolt").cost).toMatchObject({ resource: "mana", amount: 14, percentage: true });
|
||||
expect(byId("wow335-druid-claw").cost).toMatchObject({ resource: "energy", amount: 45 });
|
||||
expect(byId("wow335-druid-maul").cost).toMatchObject({ resource: "rage", amount: 15 });
|
||||
});
|
||||
|
||||
it("provides mechanics for previously silent class scripts and hidden proc spells", () => {
|
||||
expect(effectsOfKind(byId("wow335-warrior-slam"), "damage")).not.toEqual([]);
|
||||
expect(effectsOfKind(byId("wow335-death-knight-death-grip"), "pull")).not.toEqual([]);
|
||||
expect(effectsOfKind(byId("wow335-shaman-windfury-weapon"), "apply-aura")[0]?.aura.procs).not.toEqual([]);
|
||||
expect(effectsOfKind(byId("wow335-shaman-lightning-shield"), "apply-aura")[0]?.aura.procs).toEqual(expect.arrayContaining([
|
||||
expect.objectContaining({ triggers: "damage-taken", charges: 3 }),
|
||||
]));
|
||||
});
|
||||
|
||||
it("creates source-named stat and avoidance auras", () => {
|
||||
@@ -77,6 +110,28 @@ describe("WoW 3.3.5 executable effect mapping", () => {
|
||||
expect(shield.effects.some((effect) => effect.kind === "shield")).toBe(false);
|
||||
});
|
||||
|
||||
it("maps Paladin emergency cooldowns to their source-backed mechanics", () => {
|
||||
const layOnHands = byId("wow335-paladin-lay-on-hands");
|
||||
expect(effectsOfKind(layOnHands, "heal")).toContainEqual(expect.objectContaining({
|
||||
coefficient: 0,
|
||||
percentMaxHealth: 1,
|
||||
}));
|
||||
|
||||
const handOfProtection = byId("wow335-paladin-hand-of-protection");
|
||||
const immunity = effectsOfKind(handOfProtection, "apply-aura")
|
||||
.find((effect) => effect.sourceAuraType === 39);
|
||||
expect(immunity?.aura).toMatchObject({
|
||||
durationMs: 6_000,
|
||||
modifiers: [{
|
||||
kind: "damage",
|
||||
direction: "taken",
|
||||
school: "physical",
|
||||
operation: "percent",
|
||||
value: -1,
|
||||
}],
|
||||
});
|
||||
});
|
||||
|
||||
it("keeps periodic damage and healing auras out of the generic HUD strip", () => {
|
||||
const pain = byId("wow335-priest-shadow-word-pain");
|
||||
const painAura = effectsOfKind(pain, "apply-aura")
|
||||
@@ -123,11 +178,11 @@ describe("WoW 3.3.5 executable effect mapping", () => {
|
||||
.find((effect) => effect.sourceAuraType === 42);
|
||||
expect(seal?.aura.procs).toEqual([
|
||||
expect.objectContaining({
|
||||
triggers: expect.arrayContaining(["hit"]),
|
||||
triggers: "hit",
|
||||
action: {
|
||||
kind: "custom",
|
||||
id: "wow335-trigger-spell",
|
||||
data: { spellId: 20170 },
|
||||
id: "classic-status",
|
||||
data: { status: "stun", durationMs: 2_000 },
|
||||
},
|
||||
}),
|
||||
]);
|
||||
|
||||
Reference in new issue
Block a user