From ff3a8d16dc0aed16ff471834fe7af0253b50ead6 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Tue, 7 Apr 2020 01:03:52 +0200
Subject: [PATCH] Show score message in versus mode too. Fix Ambiguous chess
 for pawns promotions

---
 client/src/components/BaseGame.vue |  4 ++--
 client/src/variants/Ambiguous.js   | 13 +++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue
index 8cb1f68a..ae6c128f 100644
--- a/client/src/components/BaseGame.vue
+++ b/client/src/components/BaseGame.vue
@@ -501,9 +501,9 @@ export default {
             else this.lastMove.notation += "#";
           }
         }
-        if (score != "*" && this.mode == "analyze") {
+        if (score != "*" && ["analyze", "versus"].includes(this.mode)) {
           const message = getScoreMessage(score);
-          // Just show score on screen (allow undo)
+          // Show score on screen
           this.showEndgameMsg(score + " . " + this.st.tr[message]);
         }
         return score;
diff --git a/client/src/variants/Ambiguous.js b/client/src/variants/Ambiguous.js
index 29ab2ca6..88566e76 100644
--- a/client/src/variants/Ambiguous.js
+++ b/client/src/variants/Ambiguous.js
@@ -19,8 +19,21 @@ export class AmbiguousRules extends ChessRules {
     const oppCol = V.GetOppCol(color);
     if (this.subTurn == 2) {
       // Just play a normal move (which in fact only indicate a square)
+      let movesHash = {};
       return (
         super.getPotentialMovesFrom([x, y])
+        .filter(m => {
+          // Filter promotions: keep only one, since no choice now.
+          if (m.appear[0].p != m.vanish[0].p) {
+            const hash = V.CoordsToSquare(m.start) + V.CoordsToSquare(m.end);
+            if (!movesHash[hash]) {
+              movesHash[hash] = true;
+              return true;
+            }
+            return false;
+          }
+          return true;
+        })
         .map(m => {
           if (m.vanish.length == 1) m.appear[0].p = V.GOAL;
           else m.appear[0].p = V.TARGET_CODE[m.vanish[1].p];
-- 
2.44.0