X-Git-Url: http://winboard.nl/cgi-bin?p=capablanca.git;a=blobdiff_plain;f=lasker-2.2.3%2Fsrc%2Fgamedb.c;h=c0fa3b39fb30a7cebf998349d823114fcc21ea71;hp=0d1223fd050367d15567bbd6120c8c1362b884ae;hb=ec2e35ca3d96717de698ac0d946369634e1f91a6;hpb=e0c6e5ba79b1df3450fda89f9e7beacdc62103d1 diff --git a/lasker-2.2.3/src/gamedb.c b/lasker-2.2.3/src/gamedb.c index 0d1223f..c0fa3b3 100644 --- a/lasker-2.2.3/src/gamedb.c +++ b/lasker-2.2.3/src/gamedb.c @@ -167,12 +167,13 @@ int game_isblitz(int wt, int winc, int bt, int binc, return TYPE_KNIGHTMATE; if (!strcmp(cat, "capablanca")) return TYPE_CAPABLANCA; - if (board && board[0]) { + if (board && board[0] && strcmp(board, "0")) { if (!strcmp(cat, "wild")) return TYPE_WILD; if (strcmp(cat, "standard") || strcmp(board, "standard")) return TYPE_NONSTANDARD; } + return TYPE_WILD; } if ((wt == 0) || (bt == 0)) @@ -362,6 +363,10 @@ char *EndString(int g, int personal) sprintf(endstr, "%s bared", game_globals.garray[g].winner == WHITE ? blackguy : whiteguy); break; + case END_PERPETUAL: + sprintf(endstr, "%s perpetually checking", + game_globals.garray[g].winner == WHITE ? blackguy : whiteguy); + break; case END_RESIGN: sprintf(endstr, "%s resigned", game_globals.garray[g].winner == WHITE ? blackguy : whiteguy); @@ -442,6 +447,7 @@ const char *EndSym(int g) case END_FLAG: case END_ADJWIN: case END_BARE: + case END_PERPETUAL: return ((game_globals.garray[g].winner == WHITE) ? symbols[0] : symbols[1]); break; case END_AGREEDDRAW: @@ -588,6 +594,7 @@ char *movesToString(int g, int pgn) sprintf(tmp, "%d minutes, increment: %d seconds.\n\n", game_globals.garray[g].wInitTime / 600, game_globals.garray[g].wIncrement / 10); } strcat(gameString, tmp); + if(game_globals.garray[g].game_state.setup) { // [HGM] setup: print the initial position board char *q; struct game_state_t initial_gs; struct move_t ml[600]; int r, f; @@ -607,7 +614,7 @@ char *movesToString(int g, int pgn) for (f = 0; f < 2; f++) { for (r = 0; r < initial_gs.files; r++) initial_gs.ep_possible[f][r] = 0; - for (r = PAWN; r <= QUEEN; r++) + for (r = PAWN; r <= PIECES-1; r++) initial_gs.holding[f][r-PAWN] = 0; } FEN_to_board(game_globals.garray[g].FENstartPos ,&initial_gs); @@ -722,6 +729,19 @@ int CharToPiece(char c, char *variant) case 'v': return B_CENTAUR; } + } else if(!strcmp(variant, "spartan")) { + switch(c) { + case 'w': + return B_WARLORD; + case 'g': + return B_GENERAL; + case 'l': + return B_LIEUTENANT; + case 'c': + return B_CAPTAIN; + case 'h': + return B_HOPLITE; + } } } switch (c) { @@ -758,9 +778,15 @@ int CharToPiece(char c, char *variant) case 'q': return B_QUEEN; case 'E': + if(!strcmp(variant, "seirawan")) return W_ELEPHANT; return W_ELEPHANT; case 'e': + if(!strcmp(variant, "seirawan")) return B_ELEPHANT; return B_ELEPHANT; + case 'H': + return W_HAWK; + case 'h': + return B_HAWK; case 'K': return W_KING; case 'k': @@ -801,6 +827,7 @@ char PieceToChar(int piece) case W_CANNON: case W_MARSHALL: return 'C'; + case B_CAPTAIN: case B_CANNON: case B_MARSHALL: return 'c'; @@ -814,9 +841,11 @@ char PieceToChar(int piece) return 'Q'; case B_QUEEN: return 'q'; + case W_SELEPHANT: case W_ELEPHANT: case W_EMPRESS: return 'E'; + case B_SELEPHANT: case B_ELEPHANT: case B_EMPRESS: return 'e'; @@ -835,14 +864,18 @@ char PieceToChar(int piece) case W_WAZIR: case W_WOODY: return 'W'; + case B_WARLORD: case B_WAZIR: case B_WOODY: return 'w'; + case W_HAWK: case W_HORSE: case W_PRIESTESS: case W_NIGHTRIDER: return 'H'; + case B_HAWK: case B_HORSE: + case B_HOPLITE: case B_PRIESTESS: case B_NIGHTRIDER: return 'h'; @@ -858,6 +891,7 @@ char PieceToChar(int piece) case W_MASTODON: return 'G'; case B_GOLD: + case B_GENERAL: case B_MASTODON: return 'g'; case W_AMAZON: @@ -874,6 +908,7 @@ char PieceToChar(int piece) return 'k'; case W_LANCE: return 'L'; + case B_LIEUTENANT: case B_LANCE: return 'l'; default: @@ -1652,10 +1687,10 @@ void game_write_complete(int g, int isDraw, char *EndSymbol) sprintf(fname, "%s/player_data/%c/%s.%s", STATS_DIR, player_globals.parray[wp].login[0], player_globals.parray[wp].login, STATS_GAMES); - write_g_out(g, fname, 10, isDraw, EndSymbol, player_globals.parray[wp].name, &now); + write_g_out(g, fname, 40, isDraw, EndSymbol, player_globals.parray[wp].name, &now); sprintf(fname, "%s/player_data/%c/%s.%s", STATS_DIR, player_globals.parray[bp].login[0], player_globals.parray[bp].login, STATS_GAMES); - write_g_out(g, fname, 10, isDraw, EndSymbol, player_globals.parray[bp].name, &now); + write_g_out(g, fname, 40, isDraw, EndSymbol, player_globals.parray[bp].name, &now); if (isDraw) Result = -1; @@ -1705,7 +1740,7 @@ static int check_kings(struct game_state_t *gs) } } - if (blackking == 1 && whiteking == 1) return 0; /* Perfect! */ + if ((blackking == 1 || blackking == 2 && !strcmp(gs->variant, "spartan")) && whiteking == 1) return 0; /* Perfect! */ return -1; }