Add Capablanca + Musketeer Chess
[vchess.git] / client / src / base_rules.js
index e91a43e..0a68127 100644 (file)
@@ -158,7 +158,7 @@ export const ChessRules = class ChessRules {
 
   // Turn "p" into "bp" (for board)
   static fen2board(f) {
-    return f.charCodeAt() <= 90 ? "w" + f.toLowerCase() : "b" + f;
+    return f.charCodeAt(0) <= 90 ? "w" + f.toLowerCase() : "b" + f;
   }
 
   // Check if FEN describes a board situation correctly
@@ -275,7 +275,7 @@ export const ChessRules = class ChessRules {
 
   // En-passant square, if any
   getEpSquare(moveOrSquare) {
-    if (!moveOrSquare) return undefined;
+    if (!moveOrSquare) return undefined; //TODO: necessary line?!
     if (typeof moveOrSquare === "string") {
       const square = moveOrSquare;
       if (square == "-") return undefined;
@@ -528,11 +528,11 @@ export const ChessRules = class ChessRules {
   }
 
   // Scan board for kings positions
+  // TODO: should be done from board, no need for the complete FEN
   scanKings(fen) {
     // Squares of white and black king:
     this.kingPos = { w: [-1, -1], b: [-1, -1] };
     const fenRows = V.ParseFen(fen).position.split("/");
-    const startRow = { 'w': V.size.x - 1, 'b': 0 };
     for (let i = 0; i < fenRows.length; i++) {
       let k = 0; //column index on board
       for (let j = 0; j < fenRows[i].length; j++) {
@@ -713,7 +713,7 @@ export const ChessRules = class ChessRules {
       let j = y + step[1];
       while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
         moves.push(this.getBasicMove([x, y], [i, j]));
-        if (oneStep) continue outerLoop;
+        if (!!oneStep) continue outerLoop;
         i += step[0];
         j += step[1];
       }
@@ -892,7 +892,6 @@ export const ChessRules = class ChessRules {
     // Castling ?
     const oppCol = V.GetOppCol(c);
     let moves = [];
-    let i = 0;
     // King, then rook:
     finalSquares = finalSquares || [ [2, 3], [V.size.y - 2, V.size.y - 3] ];
     const castlingKing = this.board[x][y].charAt(1);
@@ -919,7 +918,7 @@ export const ChessRules = class ChessRules {
       // Nothing on the path of the king ? (and no checks)
       const finDist = finalSquares[castleSide][0] - y;
       let step = finDist / Math.max(1, Math.abs(finDist));
-      i = y;
+      let i = y;
       do {
         if (
           (!castleInCheck && this.isAttacked([x, i], oppCol)) ||
@@ -1071,6 +1070,7 @@ export const ChessRules = class ChessRules {
       }
       if (
         V.OnBoard(rx, ry) &&
+        this.board[rx][ry] != V.EMPTY &&
         this.getPiece(rx, ry) == piece &&
         this.getColor(rx, ry) == color
       ) {
@@ -1172,6 +1172,7 @@ export const ChessRules = class ChessRules {
   }
 
   updateCastleFlags(move, piece, color) {
+    // TODO: check flags. If already off, no need to always re-evaluate
     const c = color || V.GetOppCol(this.turn);
     const firstRank = (c == "w" ? V.size.x - 1 : 0);
     // Update castling flags if rooks are moved