X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fbase_rules.js;h=acf6eff04b612c13ce1b84a2b4583ef48f9541de;hp=9ee506e50c312ef56c738bf2091a2513b5930c9b;hb=85a1dcbab08bdab51c26c27fb8df95bc461617d4;hpb=675b8e7741527a3d625633762e7836e8bcdcb6b4 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);