From 4c3031a52a1b95ad8002a3f055d4475130297a7b Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Sun, 25 Apr 2021 09:49:21 +0200
Subject: [PATCH] Fix Joker

---
 client/src/translations/rules/Joker/en.pug |  2 +-
 client/src/translations/rules/Joker/es.pug |  2 +-
 client/src/translations/rules/Joker/fr.pug |  3 ++-
 client/src/variants/Joker.js               | 27 ++++++++++++----------
 4 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/client/src/translations/rules/Joker/en.pug b/client/src/translations/rules/Joker/en.pug
index 1f102384..b7a05350 100644
--- a/client/src/translations/rules/Joker/en.pug
+++ b/client/src/translations/rules/Joker/en.pug
@@ -4,7 +4,7 @@ p.boxed
 p.
   A new piece appears, starting in front of the pawns.
   It moves like an Amazon: Queen + Knight, but doesn't capture.
-  Instead, it can swap its position with any piece.
+  Instead, it can swap its position with any piece except the king.
 
 figure.diagram-container
   .diagram
diff --git a/client/src/translations/rules/Joker/es.pug b/client/src/translations/rules/Joker/es.pug
index 7aaaf9fb..6c066212 100644
--- a/client/src/translations/rules/Joker/es.pug
+++ b/client/src/translations/rules/Joker/es.pug
@@ -4,7 +4,7 @@ p.boxed
 p.
   Aparece una nueva pieza, comenzando por delante de los peones.
   Se mueve como una Amazona: Dama + Caballo, pero no captura.
-  En cambio, puede cambiar su posición con cualquier pieza.
+  En cambio, puede cambiar su posición con cualquier pieza excepto el rey.
 
 figure.diagram-container
   .diagram
diff --git a/client/src/translations/rules/Joker/fr.pug b/client/src/translations/rules/Joker/fr.pug
index 853d7040..bb64c0b7 100644
--- a/client/src/translations/rules/Joker/fr.pug
+++ b/client/src/translations/rules/Joker/fr.pug
@@ -5,7 +5,8 @@ p.boxed
 p.
   Une nouvelle pièce fait son apparition, démarrant devant les pions.
   Elle se déplace comme une Amazone : Dame + Cavalier, mais ne capture pas.
-  Au lieu de ça, elle peut échanger sa position avec n'importe quelle pièce.
+  Au lieu de ça, elle peut échanger sa position avec n'importe quelle pièce
+  sauf le roi.
 
 figure.diagram-container
   .diagram
diff --git a/client/src/variants/Joker.js b/client/src/variants/Joker.js
index bc3a7f1b..a3cbdad5 100644
--- a/client/src/variants/Joker.js
+++ b/client/src/variants/Joker.js
@@ -58,18 +58,21 @@ export class JokerRules extends ChessRules {
         // Following test is OK because only one Joker on board at a time
         if (this.board[i][j] != V.EMPTY && this.getColor(i, j) == c) {
           const p = this.getPiece(i, j);
-          swapping.push(
-            new Move({
-              vanish: [
-                new PiPo({ x: x, y: y, c: c, p: V.JOKER }),
-                new PiPo({ x: i, y: j, c: c, p: p })
-              ],
-              appear: [
-                new PiPo({ x: i, y: j, c: c, p: V.JOKER }),
-                new PiPo({ x: x, y: y, c: c, p: p })
-              ]
-            })
-          );
+          const lastRank = (c == 'w' ? 0 : 7);
+          if (p != V.KING && (p != V.PAWN || x != lastRank)) {
+            swapping.push(
+              new Move({
+                vanish: [
+                  new PiPo({ x: x, y: y, c: c, p: V.JOKER }),
+                  new PiPo({ x: i, y: j, c: c, p: p })
+                ],
+                appear: [
+                  new PiPo({ x: i, y: j, c: c, p: V.JOKER }),
+                  new PiPo({ x: x, y: y, c: c, p: p })
+                ]
+              })
+            );
+          }
         }
       }
     }
-- 
2.44.0