Add combatant side assignment for encounter difficulty
Combatants can now be assigned to party or enemy side via a toggle in the difficulty breakdown panel. Party-side NPCs subtract their XP from the encounter total, letting allied NPCs reduce difficulty. PCs default to party, non-PCs to enemy — users who don't use sides see no change. Side persists across reload and export/import. Closes #22 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -154,6 +154,47 @@ describe("loadEncounter", () => {
|
||||
expect(loaded?.combatants[0].cr).toBe("2");
|
||||
});
|
||||
|
||||
it("round-trip preserves combatant side field", () => {
|
||||
const result = createEncounter(
|
||||
[
|
||||
{
|
||||
id: combatantId("c-1"),
|
||||
name: "Allied Guard",
|
||||
cr: "2",
|
||||
side: "party",
|
||||
},
|
||||
{
|
||||
id: combatantId("c-2"),
|
||||
name: "Goblin",
|
||||
side: "enemy",
|
||||
},
|
||||
],
|
||||
0,
|
||||
1,
|
||||
);
|
||||
if (isDomainError(result)) throw new Error("unreachable");
|
||||
saveEncounter(result);
|
||||
const loaded = loadEncounter();
|
||||
|
||||
expect(loaded).not.toBeNull();
|
||||
expect(loaded?.combatants[0].side).toBe("party");
|
||||
expect(loaded?.combatants[1].side).toBe("enemy");
|
||||
});
|
||||
|
||||
it("round-trip preserves combatant without side field as undefined", () => {
|
||||
const result = createEncounter(
|
||||
[{ id: combatantId("c-1"), name: "Custom" }],
|
||||
0,
|
||||
1,
|
||||
);
|
||||
if (isDomainError(result)) throw new Error("unreachable");
|
||||
saveEncounter(result);
|
||||
const loaded = loadEncounter();
|
||||
|
||||
expect(loaded).not.toBeNull();
|
||||
expect(loaded?.combatants[0].side).toBeUndefined();
|
||||
});
|
||||
|
||||
it("saving after modifications persists the latest state", () => {
|
||||
const encounter = makeEncounter();
|
||||
saveEncounter(encounter);
|
||||
|
||||
Reference in New Issue
Block a user