A few fixes
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 15 Jan 2021 21:07:24 +0000 (22:07 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 15 Jan 2021 21:07:24 +0000 (22:07 +0100)
15 files changed:
client/src/translations/fr.js
client/src/translations/rules/Checkered1/en.pug
client/src/translations/rules/Checkered1/es.pug
client/src/translations/rules/Checkered1/fr.pug
client/src/translations/rules/Refusal/en.pug [new file with mode: 0644]
client/src/translations/rules/Refusal/es.pug [new file with mode: 0644]
client/src/translations/rules/Refusal/fr.pug [new file with mode: 0644]
client/src/variants/Ambiguous.js
client/src/variants/Ball.js
client/src/variants/Checkered1.js
client/src/variants/Checkered2.js
client/src/variants/Circular.js
client/src/variants/Diamond.js
client/src/variants/Football.js
client/src/variants/Suicide.js

index 5b70405..6484ba0 100644 (file)
@@ -298,7 +298,8 @@ export const translations = {
   "Squat last rank (v2)": "Occupez la dernière rangée (v2)",
   "Standard rules": "Règles usuelles",
   "Stun & kick pieces": "Étourdissez & frappez les pièces",
-  "Thai Chess": "Échecs thai",
+  "Thai Chess (v1)": "Échecs thai (v1)",
+  "Thai Chess (v2)": "Échecs thai (v2)",
   "The colorbound clobberers": "Les tabasseurs unicolores",
   "The end of the world": "La fin du monde",
   "Transform an essay": "Transformer un essai",
index 8ea482c..68d3968 100644 (file)
@@ -48,11 +48,8 @@ h3 Pawns
 ul
   li.
     Pawns can jump two squares only from their initial rank, and only once in
-    the game: a checkered pawn returning on the pawns' start rank cannot jump.
-    However:
-  li.
-    A pawn captured on its starting square (thus becoming "checkered") keeps
-    the right to advance two squares.
+    the game. A checkered pawn keeps this right if the starting pawn
+    did not use it.
   li.
     Checkered pawns cannot capture en passant, because while the pawn was
     "passing" they were of the same color.
index eb1b26f..403a20f 100644 (file)
@@ -45,13 +45,9 @@ h3 Peones
 
 ul
   li.
-    Los peones pueden avanzar solo dos espacios desde su fila
-    punto de partida, y solo una vez en el juego: un peón a cuadros
-    volver a una fila inicial no puede avanzar dos espacios.
-    Sin embargo:
-  li.
-    Un peón a cuadros de una captura en la fila inicial mantiene
-    el derecho a avanzar dos espacios.
+    Los peones pueden avanzar dos espacios solo desde su fila
+    punto de partida, y solo una vez en el juego. Un peón a cuadros
+    retiene este derecho si el peón inicial no lo ha usado.
   li.
     Los peones a cuadros no pueden capturar en passant, ya que mientras
     el peón contrario "pasó" estaban en el mismo campamento.
index 380f15c..9e848c3 100644 (file)
@@ -51,12 +51,8 @@ h3 Pions
 ul
   li.
     Les pions peuvent avancer de deux cases seulement depuis leur rangée
-    de départ, et ce une seule fois dans la partie : un pion échiqueté
-    revenant sur une rangée de départ ne peut pas avancer de deux cases.
-    Cependant :
-  li.
-    Un pion échiqueté issu d'une capture sur la rangée de départ garde
-    le droit d'avancer de deux cases.
+    de départ, et ce une seule fois dans la partie. Un pion échiqueté
+    conserve ce droit si le pion initial ne l'a pas utilisé.
   li.
     Les pions échiquetés ne peuvent capturer en passant, puisque pendant que
     le pion adverse "passait" ils étaient dans le même camp.
diff --git a/client/src/translations/rules/Refusal/en.pug b/client/src/translations/rules/Refusal/en.pug
new file mode 100644 (file)
index 0000000..3a33838
--- /dev/null
@@ -0,0 +1,2 @@
+p.boxed
+  | TODO
diff --git a/client/src/translations/rules/Refusal/es.pug b/client/src/translations/rules/Refusal/es.pug
new file mode 100644 (file)
index 0000000..3a33838
--- /dev/null
@@ -0,0 +1,2 @@
+p.boxed
+  | TODO
diff --git a/client/src/translations/rules/Refusal/fr.pug b/client/src/translations/rules/Refusal/fr.pug
new file mode 100644 (file)
index 0000000..3a33838
--- /dev/null
@@ -0,0 +1,2 @@
+p.boxed
+  | TODO
index 36824db..b478887 100644 (file)
@@ -250,8 +250,10 @@ export class AmbiguousRules 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];
index 5de871d..fb2172b 100644 (file)
@@ -205,8 +205,10 @@ export class BallRules extends ChessRules {
       if (rem2 == positions[1] % 2) {
         // Fix bishops (on different colors)
         for (let i=4; i<9; i++) {
-          if (positions[i] % 2 != rem2)
+          if (positions[i] % 2 != rem2) {
             [positions[1], positions[i]] = [positions[i], positions[1]];
+            break;
+          }
         }
       }
       rem2 = positions[2] % 2;
index 71f9b92..2451f9b 100644 (file)
@@ -504,9 +504,14 @@ export class Checkered1Rules extends ChessRules {
         this.kingPos[c][1] = move.appear[0].y;
       }
       super.updateCastleFlags(move, piece);
-      // Does this move turn off a 2-squares pawn flag?
-      if ([1, 6].includes(move.start.x) && move.vanish[0].p == V.PAWN)
+      if (
+        [1, 6].includes(move.start.x) &&
+        move.vanish[0].p == V.PAWN &&
+        Math.abs(move.end.x - move.start.x) == 2
+      ) {
+        // This move turns off a 2-squares pawn flag
         this.pawnFlags[move.start.x == 6 ? "w" : "b"][move.start.y] = false;
+      }
     }
     this.cmoves.push(this.getCmove(move));
   }
index 9c883f7..997c1c7 100644 (file)
@@ -351,8 +351,13 @@ export class Checkered2Rules extends ChessRules {
   postPlay(move) {
     super.postPlay(move);
     // Does this move turn off a 2-squares pawn flag?
-    if ([1, 6].includes(move.start.x) && move.vanish[0].p == V.PAWN)
+    if (
+      [1, 6].includes(move.start.x) &&
+      move.vanish[0].p == V.PAWN &&
+      Math.abs(move.end.x - move.start.x) == 2
+    ) {
       this.pawnFlags[move.start.x == 6 ? "w" : "b"][move.start.y] = false;
+    }
     this.cmoves.push(this.getCmove(move));
   }
 
index aa700bb..4775844 100644 (file)
@@ -56,8 +56,10 @@ export class CircularRules 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];
index 415a6aa..1aa9b0e 100644 (file)
@@ -28,8 +28,10 @@ export class DiamondRules 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];
index a663058..2410f0a 100644 (file)
@@ -108,7 +108,6 @@ export class FootballRules extends ChessRules {
     if (randomness == 0)
       return "rnbq1knbr/9/9/9/4a4/9/9/9/RNBQ1KNBR w 0";
 
-    // TODO: following is mostly copy-paste from Suicide variant
     let pieces = { w: new Array(8), b: new Array(8) };
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
@@ -119,12 +118,16 @@ export class FootballRules extends ChessRules {
       // Get random squares for every piece, totally freely
       let positions = shuffle(ArrayFun.range(8));
       const composition = ['b', 'b', 'r', 'r', 'n', 'n', 'k', 'q'];
-      const rem2 = positions[0] % 2;
-      if (rem2 == positions[1] % 2) {
-        // Fix bishops (on different colors)
+      // Fix bishops (on different colors)
+      const realOddity =
+        (pos) => { return (pos <= 3 ? pos % 2 : (pos + 1) % 2); };
+      const rem2 = realOddity(positions[0]);
+      if (rem2 == realOddity(positions[1])) {
         for (let i=2; i<8; i++) {
-          if (positions[i] % 2 != rem2)
+          if (realOddity(positions[i]) != rem2) {
             [positions[1], positions[i]] = [positions[i], positions[1]];
+            break;
+          }
         }
       }
       for (let i = 0; i < 8; i++) pieces[c][positions[i]] = composition[i];
index e71e3a2..13aaa6b 100644 (file)
@@ -153,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];