From: Benjamin Auder <benjamin.auder@somewhere>
Date: Sat, 27 Jun 2020 06:43:05 +0000 (+0200)
Subject: Monochrome: fixing attempt
X-Git-Url: https://git.auder.net/variants/current/doc/css/R.css?a=commitdiff_plain;h=f9ecc49933b5f541724b73856ba816722ea26c34;p=vchess.git

Monochrome: fixing attempt
---

diff --git a/client/src/translations/rules/Monochrome/en.pug b/client/src/translations/rules/Monochrome/en.pug
index 81175e1b..7a10d6d0 100644
--- a/client/src/translations/rules/Monochrome/en.pug
+++ b/client/src/translations/rules/Monochrome/en.pug
@@ -21,9 +21,9 @@ figure.diagram-container
   figcaption Before and after Rxd7
 
 p.
-  Kings have no royal status. There are no en-passant captures, and no castle.
-  "Zen" captures are possible too: if a piece A attacks a piece B
-  (in the usual way), then B can capture A.
+  Kings have no royal status, and move like orthodox queens.
+  Knights become knightriders: they can make any number of knight steps in a
+  direction. There are no en-passant captures, and no castle.
 
 h3 Source
 
diff --git a/client/src/translations/rules/Monochrome/es.pug b/client/src/translations/rules/Monochrome/es.pug
index f77fc215..526f7bb5 100644
--- a/client/src/translations/rules/Monochrome/es.pug
+++ b/client/src/translations/rules/Monochrome/es.pug
@@ -23,9 +23,10 @@ figure.diagram-container
   figcaption Antes y después de Rxd7
 
 p.
-  Los reyes no tienen estatus real. No hay capturas en passant ni enroque.
-  Las capturas "Zen" también son posibles: si una pieza A ataca a un
-  pieza B (en el sentido habitual), entonces B puede capturar a A.
+  Los reyes no tienen estatus real y se mueven como damas.
+  Los caballos se convierten en caballeros: mueven un número
+  arbitrario de casillas en una dirección dada.
+  No hay capturas en passant ni enroque.
 
 h3 Fuente
 
diff --git a/client/src/translations/rules/Monochrome/fr.pug b/client/src/translations/rules/Monochrome/fr.pug
index 7073855e..091d0361 100644
--- a/client/src/translations/rules/Monochrome/fr.pug
+++ b/client/src/translations/rules/Monochrome/fr.pug
@@ -23,9 +23,10 @@ figure.diagram-container
   figcaption Avant et après Rxd7
 
 p.
-  Les rois n'ont pas de statut royal. Il n'y a ni prise en passant ni roque.
-  Les captures "Zen" sont possible également : si une pièce A attaque une
-  pièce B (au sens usuel), alors B peut capturer A.
+  Les rois n'ont pas de statut royal, et se déplacent comme des dames.
+  Les cavaliers sont changés en chevaliers : ils se déplacent d'un nombre
+  arbitraire de cases dans une direction donnée.
+  Il n'y a ni prise en passant ni roque.
 
 h3 Source
 
diff --git a/client/src/variants/Monochrome.js b/client/src/variants/Monochrome.js
index 954a050f..8c74961b 100644
--- a/client/src/variants/Monochrome.js
+++ b/client/src/variants/Monochrome.js
@@ -47,79 +47,21 @@ export class MonochromeRules extends ChessRules {
     return ((x1 <= 3 && x2 >= 4) || (x1 >= 4 && x2 <= 3));
   }
 
-  // follow steps from x,y until something is met.
-  // if met piece is opponent and same movement (asA): eat it!
-  findCaptures_aux([x, y], asA) {
-    let moves = [];
-    const steps =
-      asA != V.PAWN
-        ? [V.QUEEN, V.KING].includes(asA)
-          ? V.steps[V.ROOK].concat(V.steps[V.BISHOP])
-          : V.steps[asA]
-        : this.turn == "w"
-          ? [
-            [-1, -1],
-            [-1, 1]
-          ]
-          : [
-            [1, -1],
-            [1, 1]
-          ];
-    const oneStep = [V.KNIGHT, V.PAWN, V.KING].includes(asA);
-    outerLoop: for (let loop = 0; loop < steps.length; loop++) {
-      const step = steps[loop];
-      let i = x + step[0];
-      let j = y + step[1];
-      while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
-        if (oneStep) continue outerLoop;
-        i += step[0];
-        j += step[1];
-      }
-      if (
-        V.OnBoard(i, j) &&
-        this.getPiece(i, j) == asA &&
-        this.canTake([i, j], [x, y])
-      ) {
-        // eat!
-        moves.push(this.getBasicMove([x, y], [i, j]));
-      }
-    }
-    return moves;
-  }
-
-  // Find possible captures from a square: look in every direction!
-  findCaptures(sq) {
-    let moves = [];
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.PAWN));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.ROOK));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.KNIGHT));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.BISHOP));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.QUEEN));
-    Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.KING));
-    return moves;
-  }
-
   // Trim all non-capturing moves
   static KeepCaptures(moves) {
     return moves.filter(m => m.vanish.length == 2);
   }
 
-  getPotentialMovesFrom(sq) {
-    const moves = super.getPotentialMovesFrom(sq);
-    const zenCaptures = this.findCaptures(sq);
-    // Remove duplicate captures in a lazy way (TODO: more efficient...)
-    let hashMoves = {};
-    moves.forEach(m => {
-      if (m.vanish.length == 2) {
-        const hash =
-          m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y;
-        hashMoves[hash] = true;
-      }
-    });
-    return moves.concat(zenCaptures.filter(m => {
-      const hash = m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y;
-      return !hashMoves[hash];
-    }));
+  getPotentialKnightMoves(sq) {
+    // Knight becomes knightrider:
+    return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT]);
+  }
+
+  getPotentialKingMoves(sq) {
+    // King become queen:
+    return (
+      this.getSlideNJumpMoves(sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]));
+    )
   }
 
   getAllPotentialMoves() {