X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fbase_rules.js;h=acf6eff04b612c13ce1b84a2b4583ef48f9541de;hb=85a1dcbab08bdab51c26c27fb8df95bc461617d4;hp=ee13d5ebe87d8c900ecfab55df01e07ee30bec0c;hpb=0b8bd1214d662f6b1964f0807eda114ed1cac3c4;p=vchess.git diff --git a/client/src/base_rules.js b/client/src/base_rules.js index ee13d5eb..acf6eff0 100644 --- a/client/src/base_rules.js +++ b/client/src/base_rules.js @@ -158,7 +158,7 @@ export const ChessRules = class ChessRules { // 2) Check turn if (!fenParsed.turn || !V.IsGoodTurn(fenParsed.turn)) return false; // 3) Check moves count - if (!fenParsed.movesCount || !(parseInt(fenParsed.movesCount) >= 0)) + if (!fenParsed.movesCount || !(parseInt(fenParsed.movesCount, 10) >= 0)) return false; // 4) Check flags if (V.HasFlags && (!fenParsed.flags || !V.IsGoodFlags(fenParsed.flags))) @@ -185,7 +185,7 @@ export const ChessRules = class ChessRules { if (['K','k'].includes(row[i])) kings[row[i]]++; if (V.PIECES.includes(row[i].toLowerCase())) sumElts++; else { - const num = parseInt(row[i]); + const num = parseInt(row[i], 10); if (isNaN(num)) return false; sumElts += num; } @@ -232,7 +232,7 @@ export const ChessRules = class ChessRules { return { // NOTE: column is always one char => max 26 columns // row is counted from black side => subtraction - x: V.size.x - parseInt(sq.substr(1)), + x: V.size.x - parseInt(sq.substr(1), 10), y: sq[0].charCodeAt() - 97 }; } @@ -480,7 +480,7 @@ export const ChessRules = class ChessRules { let j = 0; for (let indexInRow = 0; indexInRow < rows[i].length; indexInRow++) { const character = rows[i][indexInRow]; - const num = parseInt(character); + const num = parseInt(character, 10); // If num is a number, just shift j: if (!isNaN(num)) j += num; // Else: something at position i,j @@ -512,7 +512,7 @@ export const ChessRules = class ChessRules { const fenParsed = V.ParseFen(fen); this.board = V.GetBoard(fenParsed.position); this.turn = fenParsed.turn; - this.movesCount = parseInt(fenParsed.movesCount); + this.movesCount = parseInt(fenParsed.movesCount, 10); this.setOtherVariables(fen); } @@ -536,7 +536,7 @@ export const ChessRules = class ChessRules { this.INIT_COL_KING["w"] = k; break; default: { - const num = parseInt(fenRows[i].charAt(j)); + const num = parseInt(fenRows[i].charAt(j), 10); if (!isNaN(num)) k += num - 1; } } @@ -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); @@ -1169,8 +1174,8 @@ export const ChessRules = class ChessRules { this.postPlay(move); } - updateCastleFlags(move, piece) { - const c = V.GetOppCol(this.turn); + updateCastleFlags(move, piece, color) { + const c = color || V.GetOppCol(this.turn); const firstRank = (c == "w" ? V.size.x - 1 : 0); // Update castling flags if rooks are moved const oppCol = this.turn;