X-Git-Url: http://winboard.nl/cgi-bin?p=capablanca.git;a=blobdiff_plain;f=lasker-2.2.3%2Fsrc%2Falgcheck.c;h=1c1ff75585e17431c7e6f3184d87475a47b38917;hp=aa7d5af20234175f5e72457413e08fda8c3ca4e7;hb=3f31178e2168d0dc5ca0db4e245c63c25bb7ed1d;hpb=69a0eda50b3ac7f58081d2fb3f72125d7a19acb1 diff --git a/lasker-2.2.3/src/algcheck.c b/lasker-2.2.3/src/algcheck.c index aa7d5af..1c1ff75 100644 --- a/lasker-2.2.3/src/algcheck.c +++ b/lasker-2.2.3/src/algcheck.c @@ -247,12 +247,14 @@ static void add_promotion(struct game_state_t *gs, const char *mstr, struct move 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': @@ -338,6 +340,7 @@ int alg_parse_move(char *mstr, struct game_state_t * gs, struct move_t * mt) 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; @@ -368,8 +371,9 @@ int alg_parse_move(char *mstr, struct game_state_t * gs, struct move_t * mt) 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; @@ -571,6 +575,7 @@ char *alg_unparse(struct game_state_t * gs, struct move_t * mt) break; case EMPRESS: case ELEPHANT: + case SELEPHANT: strcpy(mStr, "E"); break; case ALFIL: @@ -590,6 +595,8 @@ char *alg_unparse(struct game_state_t * gs, struct move_t * mt) strcpy(mStr, "V"); break; case HORSE: + case DRAGONHORSE: + case HAWK: strcpy(mStr, "H"); break; case HONORABLEHORSE: @@ -598,9 +605,6 @@ char *alg_unparse(struct game_state_t * gs, struct move_t * mt) case DRAGONKING: strcpy(mStr, "D"); break; - case DRAGONHORSE: - strcpy(mStr, "H"); - break; case LANCE: strcpy(mStr, "L"); break; @@ -687,7 +691,7 @@ char *alg_unparse(struct game_state_t * gs, struct move_t * mt) 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: