Rev 18: the democratic monster's claw outlives the first wizard
Its one-attack-per-round refreshed inside beginTurnFor when the turn index matched the roll-off winner's seat — and only the living begin turns, so once that wizard fell the claw never refreshed again: one attack, then a lifetime of harmless bumping. The refresh now lives at the true round boundary in the turn-advance loop, which passes dead seats without skipping the count. Earlier ledgers keep their gummed monster and replay so. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d89d995daf
commit
3b0aa01867
@@ -5505,8 +5505,9 @@ function beginTurnFor(state: GameState, events: GameEvent[], index: number): voi
|
||||
c.scorchedThisTurn = [];
|
||||
if (c.kind === "democratic-monster") {
|
||||
c.movementUsed = 0;
|
||||
// its single attack refreshes per ROUND: on the first player's turn
|
||||
if (index === state.turn.firstIndex) c.attackUsed = false;
|
||||
// Rev <18 refreshed the claw here — which never fires once the
|
||||
// first-rolled wizard is dead, since only the living begin turns.
|
||||
if ((state.config.deckRev ?? 1) < 18 && index === state.turn.firstIndex) c.attackUsed = false;
|
||||
} else if (c.controllerId === player.id) {
|
||||
c.movementUsed = 0;
|
||||
c.wallPassUsed = 0;
|
||||
@@ -5709,7 +5710,17 @@ function doEndTurn(prev: GameState, draw: number): CommandResult {
|
||||
let next = state.turn.activeIndex;
|
||||
for (;;) {
|
||||
next = (next + 1) % n;
|
||||
if (next === state.turn.firstIndex) state.turn.round++;
|
||||
if (next === state.turn.firstIndex) {
|
||||
state.turn.round++;
|
||||
// The democratic monster's one claw per round refreshes at the TRUE
|
||||
// round boundary — even when the first-rolled wizard is dead or
|
||||
// skipped and never begins a turn (rules rev 18).
|
||||
if ((state.config.deckRev ?? 1) >= 18) {
|
||||
for (const c of state.creatures) {
|
||||
if (c.kind === "democratic-monster") c.attackUsed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
const candidate = state.players[next]!;
|
||||
if (!candidate.alive) continue;
|
||||
if (candidate.lostTurns > 0) {
|
||||
|
||||
Reference in New Issue
Block a user