Several small improvements + integrate options + first working draft of Cwda
[vchess.git] / client / src / variants / Suicide.js
index c81d355..3b3c03c 100644 (file)
@@ -3,11 +3,8 @@ import { ArrayFun } from "@/utils/array";
 import { shuffle } from "@/utils/alea";
 
 export class SuicideRules extends ChessRules {
-  static get HasFlags() {
-    return false;
-  }
 
-  static get HasCastle() {
+  static get HasFlags() {
     return false;
   }
 
@@ -32,8 +29,9 @@ export class SuicideRules extends ChessRules {
         if (V.PIECES.includes(lowerRi)) {
           pieces[row[i] == lowerRi ? "b" : "w"]++;
           sumElts++;
-        } else {
-          const num = parseInt(row[i]);
+        }
+        else {
+          const num = parseInt(row[i], 10);
           if (isNaN(num)) return false;
           sumElts += num;
         }
@@ -54,12 +52,11 @@ export class SuicideRules extends ChessRules {
   // Stop at the first capture found (if any)
   atLeastOneCapture() {
     const color = this.turn;
-    const oppCol = V.GetOppCol(color);
     for (let i = 0; i < V.size.x; i++) {
       for (let j = 0; j < V.size.y; j++) {
         if (
           this.board[i][j] != V.EMPTY &&
-          this.getColor(i, j) != oppCol &&
+          this.getColor(i, j) == color &&
           this.getPotentialMovesFrom([i, j]).some(m => m.vanish.length == 2)
         ) {
           return true;
@@ -138,13 +135,13 @@ export class SuicideRules extends ChessRules {
     return -super.evalPosition();
   }
 
-  static GenRandInitFen(randomness) {
-    if (randomness == 0)
+  static GenRandInitFen(options) {
+    if (options.randomness == 0)
       return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 -";
 
     let pieces = { w: new Array(8), b: new Array(8) };
     for (let c of ["w", "b"]) {
-      if (c == 'b' && randomness == 1) {
+      if (c == 'b' && options.randomness == 1) {
         pieces['b'] = pieces['w'];
         break;
       }
@@ -156,8 +153,10 @@ export class SuicideRules extends ChessRules {
       if (rem2 == positions[1] % 2) {
         // Fix bishops (on different colors)
         for (let i=2; i<8; i++) {
-          if (positions[i] % 2 != rem2)
+          if (positions[i] % 2 != rem2) {
             [positions[1], positions[i]] = [positions[i], positions[1]];
+            break;
+          }
         }
       }
       for (let i = 0; i < 8; i++) pieces[c][positions[i]] = composition[i];
@@ -170,4 +169,5 @@ export class SuicideRules extends ChessRules {
       " w 0 -"
     );
   }
+
 };