Mad Dash doubles everything it promises (rules rev 12)
'Including NUMBER cards and other add-ons' now means it: a number riding the cast fuels the dash — (base + number) × 2 — and numbers or POWER RUN points played under it double as well. The 5BM4 five that vanished into a borrowed 'burns 0 life for speed' line gets its own madDash event and chronicle voice. Older games doubled only the base and replay so, pinned at deckRev 11. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
This commit is contained in:
co-authored by
Claude Fable 5
parent
6189b4935c
commit
12ece6065a
@@ -84,6 +84,49 @@ describe("expansion combat cards", () => {
|
||||
expect(state.players.find((p) => p.id === defender)!.life).toBe(16);
|
||||
});
|
||||
|
||||
it("mad dash doubles the base, the riding number, and later fuel (rev 12)", () => {
|
||||
let { state } = newGame();
|
||||
state = toRound2(state);
|
||||
const me = activePlayer(state).id;
|
||||
const md = giveCard(state, me, "mad-dash");
|
||||
giveCard(state, me, "exp1-number-5", "N5", 1);
|
||||
state = must(state, me, {
|
||||
type: "cast", instanceId: md.instanceId, numberInstanceIds: ["exp1-number-5#N5"],
|
||||
});
|
||||
expect(state.turn.movementAllowance).toBe(16); // (3 + 5) × 2
|
||||
// The rider was the turn's movement number: a bare second is refused.
|
||||
giveCard(state, me, "number-2", "N2", 0);
|
||||
expect(applyCommand(state, me, { type: "playNumberForMovement", instanceId: "number-2#N2" }).ok).toBe(false);
|
||||
// POWER RUN points double under the dash too.
|
||||
const pr = giveCard(state, me, "power-run", "PR", 2);
|
||||
state = must(state, me, { type: "cast", instanceId: pr.instanceId, params: { points: 2 } });
|
||||
expect(state.turn.movementAllowance).toBe(20); // 16 + 2×2
|
||||
});
|
||||
|
||||
it("a number played after a bare mad dash doubles as well (rev 12)", () => {
|
||||
let { state } = newGame();
|
||||
state = toRound2(state);
|
||||
const me = activePlayer(state).id;
|
||||
const md = giveCard(state, me, "mad-dash");
|
||||
state = must(state, me, { type: "cast", instanceId: md.instanceId });
|
||||
expect(state.turn.movementAllowance).toBe(6); // 3 × 2
|
||||
giveCard(state, me, "exp1-number-5", "N5", 0);
|
||||
state = must(state, me, { type: "playNumberForMovement", instanceId: "exp1-number-5#N5" });
|
||||
expect(state.turn.movementAllowance).toBe(16); // 6 + 5×2
|
||||
});
|
||||
|
||||
it("older decks double only the base and eat the rider (rev ≤11)", () => {
|
||||
let { state } = createGame({ playerIds: ["alice", "bob"], seed: 42, sets: ["basic", "expansion1"], deckRev: 11 });
|
||||
state = toRound2(state);
|
||||
const me = activePlayer(state).id;
|
||||
const md = giveCard(state, me, "mad-dash");
|
||||
giveCard(state, me, "exp1-number-5", "N5", 1);
|
||||
state = must(state, me, {
|
||||
type: "cast", instanceId: md.instanceId, numberInstanceIds: ["exp1-number-5#N5"],
|
||||
});
|
||||
expect(state.turn.movementAllowance).toBe(6); // 3 × 2, the five wasted
|
||||
});
|
||||
|
||||
it("mental swap trades entire hands", () => {
|
||||
let { state } = newGame();
|
||||
state = toRound2(state);
|
||||
|
||||
Reference in New Issue
Block a user