Fix a Chess.js issue when the king started on the c- or g-files.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 9 Feb 2018 18:12:20 +0000 (19:12 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 9 Feb 2018 18:12:20 +0000 (19:12 +0100)
www/js/chess.js

index 569d7c8..6d6623e 100644 (file)
@@ -968,11 +968,12 @@ var Chess = function(fen) {
   function make_move(move) {
     var us = turn;
     var them = swap_color(us);
   function make_move(move) {
     var us = turn;
     var them = swap_color(us);
-    var old_to = board[move.to];
     push(move);
 
     board[move.to] = board[move.from];
     push(move);
 
     board[move.to] = board[move.from];
-    board[move.from] = null;
+    if (move.from != move.to) {
+      board[move.from] = null;
+    }
 
     /* if ep capture, remove the captured pawn */
     if (move.flags & BITS.EP_CAPTURE) {
 
     /* if ep capture, remove the captured pawn */
     if (move.flags & BITS.EP_CAPTURE) {
@@ -996,13 +997,13 @@ var Chess = function(fen) {
       if (move.flags & BITS.KSIDE_CASTLE) {
         var castling_to = move.to - 1;
         var castling_from = move.rook_sq;
       if (move.flags & BITS.KSIDE_CASTLE) {
         var castling_to = move.to - 1;
         var castling_from = move.rook_sq;
-        board[castling_to] = old_to===null ? board[castling_from] : old_to;
+        board[castling_to] = board[castling_from];
         if(castling_from !== move.to)
           board[castling_from] = null;
       } else if (move.flags & BITS.QSIDE_CASTLE) {
         var castling_to = move.to + 1;
         var castling_from = move.rook_sq;
         if(castling_from !== move.to)
           board[castling_from] = null;
       } else if (move.flags & BITS.QSIDE_CASTLE) {
         var castling_to = move.to + 1;
         var castling_from = move.rook_sq;
-        board[castling_to] = old_to===null ? board[castling_from] : old_to;
+        board[castling_to] = board[castling_from];
         if(castling_from !== move.to)
           board[castling_from] = null;
       }
         if(castling_from !== move.to)
           board[castling_from] = null;
       }
@@ -1074,11 +1075,11 @@ var Chess = function(fen) {
     var us = turn;
     var them = swap_color(turn);
 
     var us = turn;
     var them = swap_color(turn);
 
-    var old_from = board[move.from];
-
-    board[move.from] = board[move.to];
-    board[move.from].type = move.piece;  // to undo any promotions
-    board[move.to] = null;
+    if (move.from != move.to) {
+      board[move.from] = board[move.to];
+      board[move.from].type = move.piece;  // to undo any promotions
+      board[move.to] = null;
+    }
 
     if (move.flags & BITS.CAPTURE) {
       board[move.to] = {type: move.captured, color: them};
 
     if (move.flags & BITS.CAPTURE) {
       board[move.to] = {type: move.captured, color: them};
@@ -1103,7 +1104,7 @@ var Chess = function(fen) {
         castling_from = move.to + 1;
       }
 
         castling_from = move.to + 1;
       }
 
-      board[castling_to] = old_from===null ? board[castling_from] : old_from;
+      board[castling_to] = board[castling_from];
       if(castling_from !== move.from)
         board[castling_from] = null;
     }
       if(castling_from !== move.from)
         board[castling_from] = null;
     }