Fix bug in Allmate2
[vchess.git] / client / src / variants / Allmate2.js
index 424ff61..259faa7 100644 (file)
@@ -61,11 +61,16 @@ export class Allmate2Rules extends ChessRules {
                 oppMoves = this.getPotentialQueenMoves([i, j]);
                 break;
               case V.KING:
-                oppMoves = this.getPotentialKingMoves([i, j]);
+                // Do not allow castling to escape from check
+                oppMoves = super.getSlideNJumpMoves(
+                  [i, j],
+                  V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
+                  "oneStep"
+                );
                 break;
             }
             for (let om of oppMoves) {
-              if (om.vanish.length == 2 && om.appear.length == 1)
+              if (om.vanish.length == 2)
                 // Skip captures: forbidden in this mode
                 continue;
               V.PlayOnBoard(this.board, om);
@@ -85,6 +90,7 @@ export class Allmate2Rules extends ChessRules {
           }
         }
       }
+      this.undo(m);
 
       // 3) Add mate-captures:
       Object.values(attacked).forEach(sq => {
@@ -95,8 +101,6 @@ export class Allmate2Rules extends ChessRules {
           p: this.getPiece(sq[0], sq[1])
         }));
       });
-
-      this.undo(m);
     });
 
     return moves;
@@ -207,8 +211,7 @@ export class Allmate2Rules extends ChessRules {
     if (kp[0] < 0)
       // King disappeared
       return color == "w" ? "0-1" : "1-0";
-    if (this.atLeastOneMove())
-      return "*";
+    if (this.atLeastOneMove()) return "*";
     // Kings still there, no moves:
     return "1/2";
   }