Add a new variant in TODO
[vchess.git] / client / src / variants / Royalrace.js
index 1ae531d..6f64d24 100644 (file)
@@ -84,9 +84,11 @@ export const VariantRules = class RoyalraceRules extends ChessRules {
       "11/11/11/11/11/11/11/11/11/" +
       whiteFen.substr(5).split("").reverse().join("") +
       "1" +
-      blackFen.substr(5).split("").reverse().join("") +
+      blackFen.substr(5).split("").join("") +
       "/" +
-      whiteFen.substr(0,5) + "1" + blackFen.substr(0,5) +
+      whiteFen.substr(0,5) +
+      "1" +
+      blackFen.substr(0,5).split("").reverse().join("") +
       " w 0"
     );
   }
@@ -99,15 +101,16 @@ export const VariantRules = class RoyalraceRules extends ChessRules {
         return m.vanish.length == 1;
       });
 
-    // Captures
-    const shiftX = -1;
-    for (let shiftY of [-1, 1]) {
-      if (
-        V.OnBoard(x + shiftX, y + shiftY) &&
-        this.board[x + shiftX][y + shiftY] != V.EMPTY &&
-        this.canTake([x, y], [x + shiftX, y + shiftY])
-      ) {
-        moves.push(this.getBasicMove([x, y], [x + shiftX, y + shiftY]));
+    // Captures (in both directions)
+    for (let shiftX of [-1, 1]) {
+      for (let shiftY of [-1, 1]) {
+        if (
+          V.OnBoard(x + shiftX, y + shiftY) &&
+          this.board[x + shiftX][y + shiftY] != V.EMPTY &&
+          this.canTake([x, y], [x + shiftX, y + shiftY])
+        ) {
+          moves.push(this.getBasicMove([x, y], [x + shiftX, y + shiftY]));
+        }
       }
     }
 
@@ -175,7 +178,10 @@ export const VariantRules = class RoyalraceRules extends ChessRules {
     if (this.kingPos[color][0] == 0)
       // The opposing edge is reached!
       return color == "w" ? "1-0" : "0-1";
-    return "*";
+    if (this.atLeastOneMove())
+      return "*";
+    // Stalemate (will probably never happen)
+    return "1/2";
   }
 
   static get SEARCH_DEPTH() {