Start Absoption
[xogo.git] / base_rules.js
index 6efce02..53393df 100644 (file)
@@ -1102,7 +1102,8 @@ export default class ChessRules {
 
   // Is (x,y) on the chessboard?
   onBoard(x, y) {
-    return x >= 0 && x < this.size.x && y >= 0 && y < this.size.y;
+    return (x >= 0 && x < this.size.x &&
+            y >= 0 && y < this.size.y);
   }
 
   // Used in interface: 'side' arg == player color
@@ -1363,23 +1364,24 @@ export default class ChessRules {
     return moves;
   }
 
+  // NOTE: using special symbols to not interfere with variants' pieces codes
   static get CannibalKings() {
     return {
-      "s": "p",
-      "u": "r",
-      "o": "n",
-      "c": "b",
-      "t": "q"
+      "!": "p",
+      "#": "r",
+      "$": "n",
+      "%": "b",
+      "*": "q"
     };
   }
 
   static get CannibalKingCode() {
     return {
-      "p": "s",
-      "r": "u",
-      "n": "o",
-      "b": "c",
-      "q": "t",
+      "p": "!",
+      "r": "#",
+      "n": "$",
+      "b": "%",
+      "q": "*",
       "k": "k"
     };
   }
@@ -2189,7 +2191,9 @@ export default class ChessRules {
   playVisual(move, r) {
     move.vanish.forEach(v => {
       if (!this.enlightened || this.enlightened[v.x][v.y]) {
-        this.g_pieces[v.x][v.y].remove();
+        // TODO: next "if" shouldn't be required
+        if (this.g_pieces[v.x][v.y])
+          this.g_pieces[v.x][v.y].remove();
         this.g_pieces[v.x][v.y] = null;
       }
     });
@@ -2242,6 +2246,11 @@ export default class ChessRules {
     const dropMove = (typeof i1 == "string");
     const startArray = (dropMove ? this.r_pieces : this.g_pieces);
     let startPiece = startArray[i1][j1];
+    // TODO: next "if" shouldn't be required
+    if (!startPiece) {
+      callback();
+      return;
+    }
     let chessboard =
       document.getElementById(this.containerId).querySelector(".chessboard");
     const clonePiece = (