From 85a1dcbab08bdab51c26c27fb8df95bc461617d4 Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Sat, 23 May 2020 12:49:54 +0200 Subject: [PATCH] Fix Koopa variant: always allow castlin with a non-stunned rook --- client/src/base_rules.js | 9 +++++++-- client/src/variants/Koopa.js | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/client/src/base_rules.js b/client/src/base_rules.js index 9ee506e5..acf6eff0 100644 --- a/client/src/base_rules.js +++ b/client/src/base_rules.js @@ -884,7 +884,7 @@ export const ChessRules = class ChessRules { } // "castleInCheck" arg to let some variants castle under check - getCastleMoves([x, y], castleInCheck) { + getCastleMoves([x, y], castleInCheck, castleWith) { const c = this.getColor(x, y); if (x != (c == "w" ? V.size.x - 1 : 0) || y != this.INIT_COL_KING[c]) return []; //x isn't first rank, or king has moved (shortcut) @@ -908,9 +908,14 @@ export const ChessRules = class ChessRules { // NOTE: in some variants this is not a rook const rookPos = this.castleFlags[c][castleSide]; - if (this.board[x][rookPos] == V.EMPTY || this.getColor(x, rookPos) != c) + if ( + this.board[x][rookPos] == V.EMPTY || + this.getColor(x, rookPos) != c || + (!!castleWith && !castleWith.includes(this.getPiece(x, rookPos))) + ) { // Rook is not here, or changed color (see Benedict) continue; + } // Nothing on the path of the king ? (and no checks) const castlingPiece = this.getPiece(x, rookPos); diff --git a/client/src/variants/Koopa.js b/client/src/variants/Koopa.js index dbce8421..27c147a9 100644 --- a/client/src/variants/Koopa.js +++ b/client/src/variants/Koopa.js @@ -205,6 +205,16 @@ export class KoopaRules extends ChessRules { return moves.concat(promoteAfterStun); } + getPotentialKingMoves(sq) { + return ( + this.getSlideNJumpMoves( + sq, + V.steps[V.ROOK].concat(V.steps[V.BISHOP]), + "oneStep" + ).concat(super.getCastleMoves(sq, true, ['r'])) + ); + } + filterValid(moves) { // Forbid kicking own king out const color = this.turn; -- 2.44.0