Draft Capablanca chess + add TODO related to move transmission issues
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 16 Sep 2022 10:10:04 +0000 (12:10 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 16 Sep 2022 10:10:04 +0000 (12:10 +0200)
README.md
base_rules.js
variants/Absorption/class.js
variants/Capablanca/class.js [new file with mode: 0644]
variants/Capablanca/rules.html [new file with mode: 0644]
variants/Capablanca/style.css [new file with mode: 0644]

index d478093..15f6772 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# xogo.live
+# xogo.casa
 
 Simplified version of old vchess.club, to focus on the essential : the game.
 
index 162fad0..d609a56 100644 (file)
@@ -2640,6 +2640,7 @@ export default class ChessRules {
     let container = document.getElementById(this.containerId);
     if (document.hidden) {
       document.onvisibilitychange = () => {
+        // TODO here: page reload ?! (some issues if tab changed...)
         document.onvisibilitychange = undefined;
         checkDisplayThenAnimate(700);
       };
index 5f58c32..ea91a27 100644 (file)
@@ -23,7 +23,6 @@ export default class AbsorptionRules extends ChessRules {
 
   pieces(color, x, y) {
     let fusions = {
-      // amazon
       'a': {
         "class": "amazon",
         both: [
@@ -42,7 +41,6 @@ export default class AbsorptionRules extends ChessRules {
           }
         ]
       },
-      // empress
       'e': {
         "class": "empress",
         both: [
@@ -60,7 +58,6 @@ export default class AbsorptionRules extends ChessRules {
           }
         ]
       },
-      // princess
       's': {
         "class": "princess",
         both: [
diff --git a/variants/Capablanca/class.js b/variants/Capablanca/class.js
new file mode 100644 (file)
index 0000000..342429b
--- /dev/null
@@ -0,0 +1,69 @@
+import ChessRules from "/base_rules.js";
+
+export default class CapablancaRules extends ChessRules {
+
+  get pawnPromotions() {
+    return ['q', 'e', 's', 'r', 'n', 'b'];
+  }
+
+  pieces(color, x, y) {
+    let newPieces = {
+      'e': {
+        "class": "empress",
+        both: [
+          {
+            steps: [
+              [1, 0], [-1, 0], [0, 1], [0, -1]
+            ]
+          },
+          {
+            steps: [
+              [1, 2], [1, -2], [-1, 2], [-1, -2],
+              [2, 1], [-2, 1], [2, -1], [-2, -1]
+            ],
+            range: 1
+          }
+        ]
+      },
+      's': {
+        "class": "princess",
+        both: [
+          {
+            steps: [
+              [1, 1], [1, -1], [-1, 1], [-1, -1]
+            ]
+          },
+          {
+            steps: [
+              [1, 2], [1, -2], [-1, 2], [-1, -2],
+              [2, 1], [-2, 1], [2, -1], [-2, -1]
+            ],
+            range: 1
+          }
+        ]
+      }
+    };
+    return Object.assign(newPieces, super.pieces(color, x, y));
+  }
+
+  get size() {
+    return {x: 8, y: 10};
+  }
+
+  genRandInitBaseFen() {
+    const s = FenUtil.setupPieces(
+      ['r', 'n', 's', 'b', 'q', 'k', 'b', 'e', 'n', 'r'],
+      {
+        between: {p1: 'k', p2: 'r'},
+        diffCol: ['b'],
+        flags: ['r']
+      }
+    );
+    return {
+      fen: s.b.join("") + "/pppppppppp/91/91/91/91/PPPPPPPPPP/" +
+           s.w.join("").toUpperCase(),
+      o: {flags: s.flags}
+    };
+  }
+
+};
diff --git a/variants/Capablanca/rules.html b/variants/Capablanca/rules.html
new file mode 100644 (file)
index 0000000..0f29d53
--- /dev/null
@@ -0,0 +1,6 @@
+<p>
+  Chess on a larger board, with two extra pieces combining the
+  abilities of rook and knight (empress), or bishop and knight (princess)
+</p>
+
+<p class="author">Jose Raul Capablanca (1925).</p>
diff --git a/variants/Capablanca/style.css b/variants/Capablanca/style.css
new file mode 100644 (file)
index 0000000..10d9eac
--- /dev/null
@@ -0,0 +1,17 @@
+@import url("/base_pieces.css");
+
+piece.black.empress {
+  background-image: url('/pieces/black_empress.svg');
+}
+
+piece.black.princess {
+  background-image: url('/pieces/black_princess.svg');
+}
+
+piece.white.empress {
+  background-image: url('/pieces/white_empress.svg');
+}
+
+piece.white.princess {
+  background-image: url('/pieces/white_princess.svg');
+}