Fix bug in setting up w3 and w4 games
[capablanca.git] / lasker-2.2.3 / src / gamedb.c
index becb7a0..d084f81 100644 (file)
@@ -362,6 +362,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 +446,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:
@@ -723,6 +728,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) {
@@ -808,6 +826,7 @@ char PieceToChar(int piece)
   case W_CANNON:
   case W_MARSHALL:
     return 'C';
+  case B_CAPTAIN:
   case B_CANNON:
   case B_MARSHALL:
     return 'c';
@@ -844,6 +863,7 @@ char PieceToChar(int piece)
   case W_WAZIR:
   case W_WOODY:
     return 'W';
+  case B_WARLORD:
   case B_WAZIR:
   case B_WOODY:
     return 'w';
@@ -854,6 +874,7 @@ char PieceToChar(int piece)
     return 'H';
   case B_HAWK:
   case B_HORSE:
+  case B_HOPLITE:
   case B_PRIESTESS:
   case B_NIGHTRIDER:
     return 'h';
@@ -869,6 +890,7 @@ char PieceToChar(int piece)
   case W_MASTODON:
     return 'G';
   case B_GOLD:
+  case B_GENERAL:
   case B_MASTODON:
     return 'g';
   case W_AMAZON:
@@ -885,6 +907,7 @@ char PieceToChar(int piece)
     return 'k';
   case W_LANCE:
     return 'L';
+  case B_LIEUTENANT:
   case B_LANCE:
     return 'l';
   default:
@@ -1716,7 +1739,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;
 }