From 26580d874deaea68cfb1b926549b1ee2720e9ec9 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Mon, 25 Jan 2021 19:17:14 +0100
Subject: [PATCH] Fix Spartan rules + better moves notation

---
 client/src/translations/rules/Spartan/en.pug |  4 ++--
 client/src/translations/rules/Spartan/es.pug |  6 ++++--
 client/src/translations/rules/Spartan/fr.pug |  4 ++--
 client/src/variants/Spartan.js               | 22 ++++++++++++++++++++
 4 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/client/src/translations/rules/Spartan/en.pug b/client/src/translations/rules/Spartan/en.pug
index 25205d15..6d64d3e4 100644
--- a/client/src/translations/rules/Spartan/en.pug
+++ b/client/src/translations/rules/Spartan/en.pug
@@ -39,9 +39,9 @@ ul
   li.
     Hoplite (Pawn) = Berolina pawn, with an extra option on its initial rank:
     it can jump over an obstacle for the 2-squares advance.
-  li Captain = Rook limited to 2 squares maximum.
+  li Captain = Rook limited to 2 squares maximum, but which can jump.
   li.
-    Lieutenant = Bishop limted to two squares maximum.
+    Lieutenant = Bishop limted to two squares maximum (potential jump).
     It can also move horizontally by one square, without capturing.
   li General = Rook + King
   li Warlord = Bishop + Knight
diff --git a/client/src/translations/rules/Spartan/es.pug b/client/src/translations/rules/Spartan/es.pug
index bb3b41da..a77b2f54 100644
--- a/client/src/translations/rules/Spartan/es.pug
+++ b/client/src/translations/rules/Spartan/es.pug
@@ -41,9 +41,11 @@ ul
     Hoplite (Peón) = peón Berolina, con una opción adicional de su
     fila inicial: puede saltar un obstáculo para
     el avance de dos casillas.
-  li Capitán = Torre limitada a dos casillas como máximo.
   li.
-    Teniente = Loco limitado a dos casillas como máximo.
+    Capitán = Torre limitada a dos casillas como máximo,
+    pero ella puede saltar.
+  li.
+    Teniente = Alfil limitado a dos casillas como máximo (salto potencial).
     También puede moverse horizontalmente un cuadrado, sin capturar.
   li General = Torre + Rey
   li Warlord = Alfil + Caballo
diff --git a/client/src/translations/rules/Spartan/fr.pug b/client/src/translations/rules/Spartan/fr.pug
index 399a1858..7cc2d150 100644
--- a/client/src/translations/rules/Spartan/fr.pug
+++ b/client/src/translations/rules/Spartan/fr.pug
@@ -41,9 +41,9 @@ ul
     Hoplite (Pion) = pion Berolina, avec une option supplémentaire depuis sa
     rangée initiale : il peut sauter par dessus un obstacle pour
     l'avancée de deux cases.
-  li Capitaine = Tour limitée à deux cases maximum.
+  li Capitaine = Tour limitée à deux cases maximum, mais elle peut sauter.
   li.
-    Lieutenant = Fou limité à deux cases maximum.
+    Lieutenant = Fou limité à deux cases maximum (saut potentiel).
     Il peut aussi se mouvoir horizontalement d'une case, sans capturer.
   li Général = Tour + Roi
   li Warlord = Fou + Cavalier
diff --git a/client/src/variants/Spartan.js b/client/src/variants/Spartan.js
index 5b0ccecb..3b4fc771 100644
--- a/client/src/variants/Spartan.js
+++ b/client/src/variants/Spartan.js
@@ -398,4 +398,26 @@ export class SpartanRules extends ChessRules {
     return 2;
   }
 
+  getNotation(move) {
+    const piece = this.getPiece(move.start.x, move.start.y);
+    if (piece == V.PAWN) {
+      // Pawn move
+      const finalSquare = V.CoordsToSquare(move.end);
+      let notation = "";
+      if (move.vanish.length == 2)
+        // Capture
+        notation = "Px" + finalSquare;
+      else {
+        // No capture: indicate the initial square for potential ambiguity
+        const startSquare = V.CoordsToSquare(move.start);
+        notation = startSquare + finalSquare;
+      }
+      if (move.appear[0].p != V.PAWN)
+        // Promotion
+        notation += "=" + move.appear[0].p.toUpperCase();
+      return notation;
+    }
+    return super.getNotation(move); //OK for all other pieces
+  }
+
 };
-- 
2.44.0