Experimental loss on repetition for Shogi and Pandemonium. Simplify Crazyhouse, with...
[vchess.git] / client / src / base_rules.js
index 0549139..5cf1d97 100644 (file)
@@ -135,6 +135,14 @@ export const ChessRules = class ChessRules {
   static get LoseOnRepetition() {
     return false;
   }
+  // And in some others (Iceage), repetitions should be ignored:
+  static get IgnoreRepetition() {
+    return false;
+  }
+  loseOnRepetition() {
+    // In some variants, result depends on the position:
+    return V.LoseOnRepetition;
+  }
 
   // At some stages, some games could wait clicks only:
   onlyClick() {
@@ -442,8 +450,10 @@ export const ChessRules = class ChessRules {
       // if more than 9 consecutive free spaces, break the integer,
       // otherwise FEN parsing will fail.
       if (count <= 9) return count;
-      // Currently only boards of size up to 11 or 12:
-      return "9" + (count - 9);
+      // Most boards of size < 18:
+      if (count <= 18) return "9" + (count - 9);
+      // Except Gomoku:
+      return "99" + (count - 18);
     };
     let position = "";
     for (let i = 0; i < V.size.x; i++) {
@@ -1035,6 +1045,9 @@ export const ChessRules = class ChessRules {
 
   // Stop at the first move found
   // TODO: not really, it explores all moves from a square (one is enough).
+  // Possible fix: add extra arg "oneMove" to getPotentialMovesFrom,
+  // and then return only boolean true at first move found
+  // (in all getPotentialXXXMoves() ... for all variants ...)
   atLeastOneMove() {
     const color = this.turn;
     for (let i = 0; i < V.size.x; i++) {