From e45c98ec2e15626db02c98997ae9725635715990 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Fri, 27 Mar 2020 02:47:49 +0100
Subject: [PATCH] Fix and complete Apocalypse variant

---
 client/src/translations/en.js                 |  1 +
 client/src/translations/es.js                 |  1 +
 client/src/translations/fr.js                 |  1 +
 .../src/translations/rules/Apocalypse/en.pug  | 16 ++---
 .../src/translations/rules/Apocalypse/es.pug  | 69 ++++++++++++++++++-
 .../src/translations/rules/Apocalypse/fr.pug  | 68 +++++++++++++++++-
 client/src/variants/Apocalypse.js             |  3 +-
 server/db/populate.sql                        |  1 +
 8 files changed, 149 insertions(+), 11 deletions(-)

diff --git a/client/src/translations/en.js b/client/src/translations/en.js
index 13798874..ef503530 100644
--- a/client/src/translations/en.js
+++ b/client/src/translations/en.js
@@ -207,6 +207,7 @@ export const translations = {
   "Shoot pieces": "Shoot pieces",
   "Squares disappear": "Squares disappear",
   "Standard rules": "Standard rules",
+  "The end of the world": "The end of the world",
   "Transform an essay": "Transform an essay",
   "Two kings": "Two kings",
   "Two royal pieces": "Two royal pieces",
diff --git a/client/src/translations/es.js b/client/src/translations/es.js
index 72c68dd6..c5c32af3 100644
--- a/client/src/translations/es.js
+++ b/client/src/translations/es.js
@@ -207,6 +207,7 @@ export const translations = {
   "Shoot pieces": "Tirar de las piezas",
   "Squares disappear": "Las casillas desaparecen",
   "Standard rules": "Reglas estandar",
+  "The end of the world": "El fin del mundo",
   "Transform an essay": "Transformar un ensayo",
   "Two kings": "Dos reyes",
   "Two royal pieces": "Dos piezas reales",
diff --git a/client/src/translations/fr.js b/client/src/translations/fr.js
index e0da2f36..e2c5f236 100644
--- a/client/src/translations/fr.js
+++ b/client/src/translations/fr.js
@@ -207,6 +207,7 @@ export const translations = {
   "Shoot pieces": "Tirez sur les pièces",
   "Squares disappear": "Les cases disparaissent",
   "Standard rules": "Règles usuelles",
+  "The end of the world": "La fin du monde",
   "Transform an essay": "Transformer un essai",
   "Two kings": "Deux rois",
   "Two royal pieces": "Deux pièces royales",
diff --git a/client/src/translations/rules/Apocalypse/en.pug b/client/src/translations/rules/Apocalypse/en.pug
index eaeab80f..ecea6f0f 100644
--- a/client/src/translations/rules/Apocalypse/en.pug
+++ b/client/src/translations/rules/Apocalypse/en.pug
@@ -1,6 +1,6 @@
 p.boxed
   | Both players play a move "at the same time".
-  | The goal is to eliminate all pawns.
+  | The goal is to eliminate all enemy pawns.
 
 figure.diagram-container
   .diagram
@@ -12,9 +12,7 @@ p
   a(href="https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse")
     | Four Horsemen of the Apocalypse
   | &nbsp;mythology. Knights are horsemen, and pawns are footmen.
-  | The goal is to eliminate all enemy footmen,
-  | most likely with the help of your horsemen.
-  | If all footmen die, the other side wins.
+  | If all footmen of one color die, the other side wins.
 
 p.
   At each turn you can decide either to play safely an apparently valid move,
@@ -30,12 +28,12 @@ ul
     If both moves are illegal none are played.
     If one is illegal, the other is played.
   li.
-    If a capture was intended but the target moved, the move is still played
+    If a capture is intended but the target moved, the move is still played
     but doesn't capture anything.
   li.
     If both moves arrive on the same square: the illegal move prevails,
-    if the other was legal (higher risk => reward).
-    If both moves are legal or illegal, then a horseman wins over a footman.
+    if the other was legal (higher risk => reward): the other piece vanish.
+    If both moves are (il)legal, then a horseman wins over a footman.
     Finally, at same risk level and same piece type, both disappear.
 
 figure.diagram-container
@@ -43,7 +41,7 @@ figure.diagram-container
     | fen:npppn/p4/4P/P2pP/NPP1N:
   figcaption After 1.d1d2 e4e3 2.dxe3 exd2, pawns placements are inversed.
 
-h3 Pawn promotions
+h3 Promotions
 
 p.
   Pawns automatically promote in a knight, except if the player already
@@ -60,6 +58,8 @@ p.
   If however both footmen armies vanish at the same time, it's a draw.
   It can happen if the two last pawns decide to advance to the same square
   for example.
+  Finally, if both sides get the second penalty point at the same time
+  it's also a draw.
 
 h3 Source
 
diff --git a/client/src/translations/rules/Apocalypse/es.pug b/client/src/translations/rules/Apocalypse/es.pug
index 3a33838b..c320f5a1 100644
--- a/client/src/translations/rules/Apocalypse/es.pug
+++ b/client/src/translations/rules/Apocalypse/es.pug
@@ -1,2 +1,69 @@
 p.boxed
-  | TODO
+  | Ambos jugadores juegan "al mismo tiempo".
+  | El objetivo es eliminar todos los peones opuestos.
+
+figure.diagram-container
+  .diagram
+    | fen:npppn/p3p/5/P3P/NPPPN:
+  figcaption Posición inicial.
+
+p
+  | Esta variante está inspirada en el mito de los 
+  a(href="https://es.wikipedia.org/wiki/Jinetes_del_Apocalipsis")
+    | Cuatro Jinetes del Apocalipsis
+  | . Los protagonistas son, por lo tanto, los jinetes del apocalipsis, y sus
+  | lacayos simbolizados por peones. Si todos los lacayos de un color
+  | perecer, entonces el otro lado gana.
+
+p.
+  En cada turno tienes que decidir si jugar una jugada segura, que es
+  apariencia válida, o especule sobre el movimiento del oponente y elija
+  un movimiento válido condicionalmente en la elección adversa.
+  En este último caso tu jugada podría no ser legal: tendría un punto de
+  penalización. Dos puntos de penalización es equivalente a la pérdida
+  del juego. Por ejemplo en la posición inicial, 1.(c1)c2 es seguro,
+  mientras que 1.axb3 solo será válido si las negras juegan 1...Nb3.
+
+p Reglas de resolución:
+ul
+  li.
+    Si los dos movimientos son ilegales, ninguno se ejecuta.
+    Si solo uno de los dos es ilegal, se juega el otro.
+  li.
+    Si el objetivo de una captura (legal en el tablero) se ha movido,
+    el movimiento es todavía jugó pero no capturó nada.
+  li.
+    Si ambos movimientos golpean la misma casilla, entonces el movimiento
+    (inicialmente) ilegal prevalece si el otro era legal
+    (mayor riesgo => recompensa): la otra pieza desaparece.
+    Si ambas las jugadas son (il)legales, entonces el caballo gana
+    el peón. Finalmente, al mismo nivel de riesgo con dos piezas idénticas,
+    ambos desaparecen.
+
+figure.diagram-container
+  .diagram
+    | fen:npppn/p4/4P/P2pP/NPP1N:
+  figcaption.
+    Después de 1.d1d2 e4e3 2.dxe3 exd2, las posiciones de
+    los peones se invierten.
+
+h3 Promociones
+
+p.
+  Un peón se promociona automáticamente a un jinete, a menos que ya haya dos
+  de su color en el tablero de ajedrez. En este caso, el lacayo se redirige a
+  cualquier espacio libre que no esté en la última fila.
+  Incluso en este caso, una promoción puede parecer posible de antemano
+  de una captura de caballo. Es arriesgado pero jugable.
+
+h3 Fin de la partida
+
+p.
+  Como se mencionó anteriormente, perder todos tus peones conduce a la
+  derrota, así que en particular para promover su último peón perdido.
+  Este podría ser la única jugada legal.
+  Sin embargo, si los dos ejércitos de peones se aniquilan entre sí, entonces
+  el juego está tablas. Es posible si los dos últimos peones deciden
+  para avanzar en la misma plaza, por exemplo.
+  Finalmente, si ambas partes obtienen su segunda penalización al mismo
+  tiempo también es tablas.
diff --git a/client/src/translations/rules/Apocalypse/fr.pug b/client/src/translations/rules/Apocalypse/fr.pug
index 3a33838b..dd6961e7 100644
--- a/client/src/translations/rules/Apocalypse/fr.pug
+++ b/client/src/translations/rules/Apocalypse/fr.pug
@@ -1,2 +1,68 @@
 p.boxed
-  | TODO
+  | Les deux joueurs jouent "en même temps".
+  | L'objectif est d'éliminer tous les pions adverses.
+
+figure.diagram-container
+  .diagram
+    | fen:npppn/p3p/5/P3P/NPPPN:
+  figcaption Initial position.
+
+p
+  | Cette variante est inspirée du mythe des 
+  a(href="https://fr.wikipedia.org/wiki/Cavaliers_de_l%27Apocalypse")
+    | Quatre Cavaliers de l'Apocalypse
+  | . Les protagonstes sont donc les cavaliers de l'apocalypse, et leurs
+  | valets symbolisés par des pions. Si tous les valets d'une couleur
+  | périssent, alors l'autre camp a gagné.
+
+p.
+  À chaque tour vous devez décider soit de jouer un coup sûr, qui est en
+  apparence valide, soit spéculer sur le coup adverse et choisir un coup
+  valide conditionnellement au choix adverse. Dans ce dernier cas votre coup
+  pourrait ne pas être légal : vous auriez un point de pénalité. Deux points
+  de pénalité équivaut à la parte de la partie. Par exemple dans la position
+  initiale, 1.(c1)c2 est sûr tandis que 1.axb3 ne sera valide que si
+  les noirs jouent 1...Nb3.
+
+p Règles de résolution :
+ul
+  li.
+    Si les deux coups sont illégaux, aucun n'est exécuté.
+    Si un seul des deux est illégal, l'autre est joué.
+  li.
+    Si la cible d'une capture (légale sur l'échiquier) a bougé, le coup est
+    tout de même joué mais ne capture rien.
+  li.
+    Si les deux coups arrivent sur la même case, alors le coup (initialement)
+    illégal l'emporte si l'autre était légal
+    (risque plus élevé => récompense) : l'autre pièce disparaît.
+    Si les coups sont tous deux (il)légaux, alors le cavalier l'emporte sur
+    le pion. Enfin, au même niveau de risque avec deux pièce identiques,
+    les deux disparaissent.
+
+figure.diagram-container
+  .diagram
+    | fen:npppn/p4/4P/P2pP/NPP1N:
+  figcaption.
+    Après 1.d1d2 e4e3 2.dxe3 exd2, les positions des pions s'inversent.
+
+h3 Promotions
+
+p.
+  Un pion est automatiquement promu en cavalier, sauf s'il y en a déjà deux
+  de sa couleur sur l'échiquier. Dans ce cas le valet est redirigé sur
+  n'importe quelle case libre ne se trouvant pas sur la dernière rangée.
+  Même dans ce cas, une promotion peut paraître possible par anticipation
+  d'une capture de cavalier. C'est risqué mais jouable.
+
+h3 Fin de la partie
+
+p.
+  Comme indiqué précédemment, perdre tous ses pions mène à la défaite, donc
+  en particulier promouvoir son dernier pion perd.
+  Cela pourrait être le seul coup légal.
+  Si cependant les deux armées de pions s'annihilent mutuellement, alors
+  la partie est nulle. C'est possible si les deux derniers pions décident
+  d'avancer sur la même case.
+  Enfin, si les deux camps obtiennent leur seconde pénalité en même
+  temps c'est nul également.
diff --git a/client/src/variants/Apocalypse.js b/client/src/variants/Apocalypse.js
index b84fb5ba..031f22cc 100644
--- a/client/src/variants/Apocalypse.js
+++ b/client/src/variants/Apocalypse.js
@@ -146,7 +146,8 @@ export class ApocalypseRules extends ChessRules {
       start: this.whiteMove.start,
       end: this.whiteMove.end,
       appear: this.whiteMove.appear,
-      vanish: this.whiteMove.vanish
+      vanish: this.whiteMove.vanish,
+      illegal: this.whiteMove.illegal
     });
   }
 
diff --git a/server/db/populate.sql b/server/db/populate.sql
index 52c043cb..0575a986 100644
--- a/server/db/populate.sql
+++ b/server/db/populate.sql
@@ -7,6 +7,7 @@ insert or ignore into Variants (name,description) values
   ('Antiking1', 'Keep antiking in check (v1)'),
   ('Antiking2', 'Keep antiking in check (v2)'),
   ('Antimatter', 'Dangerous collisions'),
+  ('Apocalypse', 'The end of the world'),
   ('Arena', 'Middle battle'),
   ('Atomic', 'Explosive captures'),
   ('Ball', 'Score a goal'),
-- 
2.44.0