Add Stealthbomb
[vchess.git] / client / src / variants / Bario.js
index 21965e1..3564e74 100644 (file)
@@ -35,7 +35,7 @@ export class BarioRules extends ChessRules {
     );
   }
 
-  hoverHighlight(x, y) {
+  hoverHighlight([x, y]) {
     const c = this.turn;
     return (
       this.movesCount <= 1 &&
@@ -73,7 +73,7 @@ export class BarioRules extends ChessRules {
       vanish: [
         new PiPo({ x: square[0], y: square[1], c: c, p: V.UNDEFINED })
       ],
-      start: { x: -1, y: -1 },
+      start: { x: -1, y: -1 }
     });
   }
 
@@ -262,7 +262,6 @@ export class BarioRules extends ChessRules {
     const color = this.turn;
     if (this.movesCount <= 1) {
       // Just put the king on the board
-      let moves = [];
       const firstRank = (color == 'w' ? 7 : 0);
       return [...Array(8)].map((x, j) => {
         return new Move({
@@ -293,9 +292,16 @@ export class BarioRules extends ChessRules {
   }
 
   filterValid(moves) {
+    if (this.movesCount <= 1) return moves;
     const color = this.turn;
     return moves.filter(m => {
-      if (m.vanish.length == 0) return true;
+      if (m.vanish.length == 0) {
+        // subTurn == 0: need to check if a move exists at subTurn == 1
+        this.play(m);
+        const res = this.filterValid(this.getAllPotentialMoves()).length > 0;
+        this.undo(m);
+        return res;
+      }
       const start = { x: m.vanish[0].x, y: m.vanish[0].y };
       const end = { x: m.appear[0].x, y: m.appear[0].y };
       if (start.x == end.x && start.y == end.y) {
@@ -330,9 +336,10 @@ export class BarioRules extends ChessRules {
       }
       return false;
     };
-    if (this.subTurn == 0) return true; //always one reserve for an undefined
-    if (!super.atLeastOneMove()) return atLeastOneReserveMove();
-    return true;
+    if (this.subTurn == 0) return atLeastOneReserveMove();
+    const canMoveSomething = super.atLeastOneMove();
+    if (this.subTurn == 2) return canMoveSomething;
+    return (canMoveSomething || atLeastOneReserveMove());
   }
 
   underCheck(color) {
@@ -519,7 +526,7 @@ export class BarioRules extends ChessRules {
       this.movesCount--;
       this.postUndo(move);
     };
-    if (this.movesCount <= 2) toPrevPlayer();
+    if (this.movesCount <= 2 && move.appear[0].p == V.KING) toPrevPlayer();
     else if (move.vanish.length == 0) {
       this.reserve[this.turn][move.start.p]++;
       this.subTurn = move.turn[1];