Fix capturing promotions in Absorption variant
[vchess.git] / client / src / variants / Absorption.js
index efa0103..b10f165 100644 (file)
@@ -80,6 +80,15 @@ export class AbsorptionRules extends ChessRules {
       default:
         moves = super.getPotentialMovesFrom(sq);
     }
+    // Filter out capturing promotions (except one),
+    // because they are all the same.
+    moves = moves.filter(m => {
+      return (
+        m.vanish.length == 1 ||
+        m.vanish[0].p != V.PAWN ||
+        [V.PAWN, V.QUEEN].includes(m.appear[0].p)
+      );
+    });
     moves.forEach(m => {
       if (m.vanish.length == 2) {
         // Augment pieces abilities in case of captures
@@ -124,6 +133,13 @@ export class AbsorptionRules extends ChessRules {
     );
   }
 
+  static get VALUES() {
+    return Object.assign(
+      { a: 12, e: 7, s: 5 },
+      ChessRules.VALUES
+    );
+  }
+
   getNotation(move) {
     let notation = super.getNotation(move);
     if (move.vanish[0].p != V.PAWN && move.appear[0].p != move.vanish[0].p)