Mega-Monster offers its choice
"Doubles the existing life-points OR movement rate" — the engine always took the OR's left side because the client never asked. With Mega-Monster selected, the hint bar now offers the choice (hit points lit by default), and the pick rides the cast as params.boost — its own field, freeing params.cardId for the name-a-card spells it belongs to. Both halves of the OR are pinned in the creature suite. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
4e365c168f
commit
fb2266b401
@@ -199,6 +199,8 @@ export interface CastParams {
|
||||
cardId?: string;
|
||||
points?: number;
|
||||
clockwise?: boolean;
|
||||
/** MEGA-MONSTER: which stat doubles. */
|
||||
boost?: "life" | "movement";
|
||||
}
|
||||
|
||||
export interface GameConfig {
|
||||
@@ -1465,7 +1467,7 @@ const CARD_EFFECTS: Record<string, AttackEffect | NeutralEffect | CounterEffect>
|
||||
if (!creature) return "no such monster";
|
||||
if (creature.kind === "shadow" || creature.kind === "alter-ego") return "that is no monster";
|
||||
if (!gameLos(state, caster.position, creature.position)) return "no line of sight";
|
||||
const boost = cmd.params?.cardId === "movement" ? "movement" : "life";
|
||||
const boost = cmd.params?.boost === "movement" ? "movement" : "life";
|
||||
if (boost === "movement") creature.movesPerTurn *= 2;
|
||||
else creature.maxDamage *= 2;
|
||||
events.push({ type: "monsterBoosted", creatureId: creature.id, boost });
|
||||
|
||||
@@ -205,6 +205,16 @@ describe("monsters", () => {
|
||||
});
|
||||
expect(state.creatures[0]!.maxDamage).toBe(8);
|
||||
|
||||
// "Doubles the existing life-points OR movement rate" — the other choice.
|
||||
const movesBefore = state.creatures[0]!.movesPerTurn;
|
||||
const mm2 = giveCard(state, me, "mega-monster", "MM2", 3);
|
||||
state = must(state, me, {
|
||||
type: "cast", instanceId: mm2.instanceId, target: { kind: "creature", creatureId: id },
|
||||
params: { boost: "movement" },
|
||||
});
|
||||
expect(state.creatures[0]!.movesPerTurn).toBe(movesBefore * 2);
|
||||
expect(state.creatures[0]!.maxDamage).toBe(8);
|
||||
|
||||
const dc = giveCard(state, me, "dispel-creation", "DC", 2);
|
||||
state = must(state, me, {
|
||||
type: "cast", instanceId: dc.instanceId, target: { kind: "cell", cell: state.creatures[0]!.position },
|
||||
|
||||
Reference in New Issue
Block a user