A reflected Lightning Blast ends the caster's turn on the spot (rev 28)

FAQ: 'If this gets FULLY REFLECTED, you lose the rest of your turn and
cannot draw cards (in addition to damage).' When the returned bolt
stuns its own caster mid-turn, their remaining actions end at once and
the end-of-turn draw comes up empty (new turn.drawForbidden flag); the
normal stun still costs them the next turn. The affected player sees
'Your own bolt has left you reeling' in place of the usual spent-turn
slip. Older revisions played on and stored games replay so.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0138A8CjeQRpvzKxuMfz1Bqc
This commit is contained in:
Eric Wagoner
2026-08-17 23:47:25 -04:00
co-authored by Claude Fable 5
parent 67157ad3a2
commit 1d7407cb20
5 changed files with 62 additions and 4 deletions
+13 -1
View File
@@ -167,6 +167,9 @@ export interface TurnState {
/** SLOW: "his attacks [reduce] to every other turn". */
attackForbidden: boolean;
actionsEnded: boolean;
/** A reflected LIGHTNING BLAST stuns mid-turn: no end-of-turn draw either
* (FAQ: "you lose the rest of your turn and can't draw cards"). */
drawForbidden?: boolean;
}
export interface CastStack {
@@ -845,6 +848,15 @@ const CARD_EFFECTS: Record<string, AttackEffect | NeutralEffect | CounterEffect>
if (ctx.damageDealt <= 0 || !ctx.defender.alive) return;
ctx.defender.lostTurns++;
ctx.events.push({ type: "stunned", player: ctx.defender.id, turnsLost: 1 });
// Stunned mid-own-turn (the bolt came back): FAQ — "If this gets FULLY
// REFLECTED, you lose the rest of your turn and can't draw cards (in
// addition to damage)." Rules rev 28; older games played on and replay so.
const st = ctx.state;
if ((st.config.deckRev ?? 1) >= 28 &&
st.players[st.turn.activeIndex]!.id === ctx.defender.id) {
st.turn.actionsEnded = true;
st.turn.drawForbidden = true;
}
},
},
powerthrust: { kind: "attack", requiresLos: true, baseDamage: (n) => 2 + (n ?? 0) },
@@ -5955,7 +5967,7 @@ function doEndTurn(prev: GameState, draw: number): CommandResult {
const events: GameEvent[] = [];
const room = handLimit(p) - p.hand.length;
const count = Math.min(draw, room);
const count = state.turn.drawForbidden ? 0 : Math.min(draw, room);
if (count > 0) {
const drawn: CardInstance[] = [];
let toDraw = count;