76 lines
2.7 KiB
TypeScript
76 lines
2.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
ROM_COA_DRUID_ADVANCED_REBIRTH_ID,
|
|
ROM_COA_DRUID_AMULET_OF_LIGHT_ITEM_ID,
|
|
ROM_COA_DRUID_GOLDEN_AMULET_ITEM_ID,
|
|
ROM_COA_DRUID_REBIRTH_ID,
|
|
ROM_COA_DRUID_SPIRIT_GUIDANCE_ID,
|
|
ROM_COA_DRUID_SUPREME_REBIRTH_ID,
|
|
romCoaDruidRebirthDebtRule,
|
|
romCoaSpiritGuidanceFactionOutcome,
|
|
} from "./romDruidCurrentCoaMechanics";
|
|
|
|
describe("current CoA Druid faction-conversion and Rebirth rules", () => {
|
|
it("keeps Spirit Guidance's player-target restriction explicit", () => {
|
|
expect(ROM_COA_DRUID_SPIRIT_GUIDANCE_ID).toBe(493536);
|
|
expect(romCoaSpiritGuidanceFactionOutcome({
|
|
targetKind: "player",
|
|
casterReputation: 10,
|
|
})).toBe("player-target-prohibited");
|
|
});
|
|
|
|
it("converts an NPC only when caster reputation is nonnegative", () => {
|
|
expect(romCoaSpiritGuidanceFactionOutcome({
|
|
targetKind: "npc",
|
|
casterReputation: 0,
|
|
})).toBe("becomes-friendly");
|
|
expect(romCoaSpiritGuidanceFactionOutcome({
|
|
targetKind: "npc",
|
|
casterReputation: -1,
|
|
})).toBe("remains-hostile");
|
|
});
|
|
|
|
it("does not guess the conversion result when reputation is unavailable", () => {
|
|
expect(romCoaSpiritGuidanceFactionOutcome({
|
|
targetKind: "npc",
|
|
casterReputation: null,
|
|
})).toBe("unknown-reputation");
|
|
expect(romCoaSpiritGuidanceFactionOutcome({
|
|
targetKind: "npc",
|
|
casterReputation: Number.NaN,
|
|
})).toBe("unknown-reputation");
|
|
});
|
|
|
|
it("reports basic Rebirth's 30% baseline and leaves its extra amulet bonus unquantified", () => {
|
|
expect(romCoaDruidRebirthDebtRule(ROM_COA_DRUID_REBIRTH_ID)).toEqual({
|
|
debtReductionPercent: 30,
|
|
itemRule: {
|
|
kind: "optional-unquantified-bonus",
|
|
itemIds: [ROM_COA_DRUID_GOLDEN_AMULET_ITEM_ID, ROM_COA_DRUID_AMULET_OF_LIGHT_ITEM_ID],
|
|
},
|
|
extraDebtReductionPercent: null,
|
|
});
|
|
});
|
|
|
|
it("maps Advanced Rebirth to 45% with its required Amulet of Light", () => {
|
|
expect(romCoaDruidRebirthDebtRule(ROM_COA_DRUID_ADVANCED_REBIRTH_ID)).toEqual({
|
|
debtReductionPercent: 45,
|
|
itemRule: { kind: "required", itemId: ROM_COA_DRUID_AMULET_OF_LIGHT_ITEM_ID },
|
|
extraDebtReductionPercent: 0,
|
|
});
|
|
});
|
|
|
|
it("maps Supreme Rebirth to 75% with its required Golden Amulet", () => {
|
|
expect(romCoaDruidRebirthDebtRule(ROM_COA_DRUID_SUPREME_REBIRTH_ID)).toEqual({
|
|
debtReductionPercent: 75,
|
|
itemRule: { kind: "required", itemId: ROM_COA_DRUID_GOLDEN_AMULET_ITEM_ID },
|
|
extraDebtReductionPercent: 0,
|
|
});
|
|
});
|
|
|
|
it("does not map unrelated or unknown spell IDs", () => {
|
|
expect(romCoaDruidRebirthDebtRule(493538)).toBeNull();
|
|
expect(romCoaDruidRebirthDebtRule(0)).toBeNull();
|
|
});
|
|
});
|