[Otage] fix black pawn promoting with white pawn in hostage
authorBenjamin Auder <benjamin.auder@somewhere>
Wed, 20 Jan 2021 17:45:35 +0000 (18:45 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Wed, 20 Jan 2021 17:45:35 +0000 (18:45 +0100)
client/src/variants/Otage.js

index 6c2b1ec..9eb900a 100644 (file)
@@ -255,7 +255,14 @@ export class OtageRules extends ChessRules {
       // Transformation computed without taking union into account
       const up = this.getUnionPieces(initColor, initPiece);
       let args = [tr.p, up[oppCol]];
       // Transformation computed without taking union into account
       const up = this.getUnionPieces(initColor, initPiece);
       let args = [tr.p, up[oppCol]];
-      if (['a', 'v'].includes(initColor)) args = args.reverse();
+      if (
+        ['a', 'v'].includes(initColor) ||
+        // HACK: "ba" piece = two pawns, black controling.
+        // If promoting, must artificially imagine color was 'a':
+        (initPiece == 'a' && initColor == 'b')
+      ) {
+        args = args.reverse();
+      }
       const capturer = (['a', 'b'].includes(initColor) ? 'b' : 'w');
       const cp = this.getUnionCode(args[0], args[1], capturer);
       tr.c = cp.c;
       const capturer = (['a', 'b'].includes(initColor) ? 'b' : 'w');
       const cp = this.getUnionCode(args[0], args[1], capturer);
       tr.c = cp.c;