Fix promotion in Ai-Wok
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 27 Dec 2013 19:06:21 +0000 (20:06 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 4 Jan 2014 11:49:08 +0000 (12:49 +0100)
When in a variant with fixed promotion, such as Makruk, the promotion
piece did not participate, this led to disappearence of the piece, and
an =. suffix in SAN. This is relevant for the Makruk variant Ai-Wok,
which replaces the Met by a much more powerful Ai-Wok, which could not
be represented by another XBoard piece type due to this problem.
Now we search through the pieceToCharTable until a valid piece is found,
which works when the Ai-Wok is represented by a SMIRF Archbishop symbol.

backend.c

index 8f796e7..b7c3246 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -6553,7 +6553,11 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
     // we either have a choice what to promote to, or (in Shogi) whether to promote
     if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
        gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN) {
     // we either have a choice what to promote to, or (in Shogi) whether to promote
     if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
        gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN) {
-       *promoChoice = PieceToChar(BlackFerz);  // no choice
+       ChessSquare p=BlackFerz;  // no choice
+       while(p < EmptySquare) {  //but make sure we use piece that exists
+           *promoChoice = PieceToChar(p++);
+           if(*promoChoice != '.') break;
+       }
        return FALSE;
     }
     // no sense asking what we must promote to if it is going to explode...
        return FALSE;
     }
     // no sense asking what we must promote to if it is going to explode...