return;
}
+ if(gs->drops != 2 || (gs->onMove == WHITE ? 0 : gs->ranks-1) != mt->fromRank) { // [HGM] always accept if backrank mover in Seirawan
if (piecetype(gs->board[mt->fromFile][mt->fromRank]) != PAWN) {
return;
}
if (mt->toRank < gs->ranks - gs->promoZone && mt->toRank >= gs->promoZone) {
return;
}
+ }
switch (tolower(s[1])) {
case 'f':
switch(piece) {
case ELEPHANT:
if(strstr(gs->variant, "super")) piece = EMPRESS; else
+ if(strstr(gs->variant, "seirawan"))piece = SELEPHANT; else
if(strstr(gs->variant, "great")) piece = MODERNELEPHANT; else
if(strstr(gs->variant, "courier")) piece = ALFIL2;
break;
if(strstr(gs->variant, "great")) piece = MINISTER;
break;
case HORSE:
+ if(strstr(gs->variant, "shogi")) piece = DRAGONHORSE; else
+ if(strstr(gs->variant, "seirawan")) piece = HAWK; else
if(strstr(gs->variant, "great")) piece = PRIESTESS;
- if(strstr(gs->variant, "shogi")) piece = DRAGONHORSE;
break;
case GOLD:
if(strstr(gs->variant, "great")) piece = MASTODON;
break;
case EMPRESS:
case ELEPHANT:
+ case SELEPHANT:
strcpy(mStr, "E");
break;
case ALFIL:
strcpy(mStr, "V");
break;
case HORSE:
+ case DRAGONHORSE:
+ case HAWK:
strcpy(mStr, "H");
break;
case HONORABLEHORSE:
case DRAGONKING:
strcpy(mStr, "D");
break;
- case DRAGONHORSE:
- strcpy(mStr, "H");
- break;
case LANCE:
strcpy(mStr, "L");
break;
sprintf(tmp, "%c%d", mt->toFile + 'a', mt->toRank + 1 - (gs->ranks > 9));
strcat(mStr, tmp);
- if ((piece == PAWN || gs->promoType == 3) && (mt->piecePromotionTo != NOPIECE)) {
+ if ((piece == PAWN || gs->promoType == 3 || gs->drops == 2) && (mt->piecePromotionTo != NOPIECE)) {
strcat(mStr, "="); /* = before promoting piece */
switch (piecetype(mt->piecePromotionTo)) {
case KNIGHT: