Fix king tracking in Otage variant
authorBenjamin Auder <benjamin.auder@somewhere>
Thu, 4 Feb 2021 15:36:40 +0000 (16:36 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Thu, 4 Feb 2021 15:36:40 +0000 (16:36 +0100)
client/src/variants/Otage.js
client/src/variants/Pacosako.js

index 2a8891f..451059a 100644 (file)
@@ -704,8 +704,8 @@ export class OtageRules extends ChessRules {
     const lm = this.lastMoveEnd[L-1];
     const piece =
       !!lm
-        ? lm.p :
-        this.getPiece(move.vanish[0].x, move.vanish[0].y);
+        ? lm.p
+        this.getPiece(move.vanish[0].x, move.vanish[0].y);
     if (piece == V.KING)
       this.kingPos[c] = [move.appear[0].x, move.appear[0].y];
     this.updateCastleFlags(move, piece);
@@ -762,6 +762,13 @@ export class OtageRules extends ChessRules {
   postUndo(move) {
     if (this.getPiece(move.start.x, move.start.y) == V.KING)
       this.kingPos[this.turn] = [move.start.x, move.start.y];
+    else {
+      // Check if a king is being released: put it on releasing square
+      const L = this.lastMoveEnd.length;
+      const lm = this.lastMoveEnd[L-1];
+      if (!!lm && lm.p == V.KING)
+        this.kingPos[this.turn] = [move.start.x, move.start.y];
+    }
   }
 
   getCurrentScore() {
index 158abf2..0b27be4 100644 (file)
@@ -768,8 +768,8 @@ export class PacosakoRules extends ChessRules {
     // NOTE: lm.p != V.KING, always.
     const piece =
       !!lm
-        ? lm.p :
-        this.getPiece(move.vanish[0].x, move.vanish[0].y);
+        ? lm.p
+        this.getPiece(move.vanish[0].x, move.vanish[0].y);
     if (piece == V.KING)
       this.kingPos[c] = [move.appear[0].x, move.appear[0].y];
     this.updateCastleFlags(move, piece);