Fix bugs in Shogi Knight moves and promotions
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 11 Oct 2010 11:50:06 +0000 (13:50 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 11 Oct 2010 11:50:06 +0000 (13:50 +0200)
The legality check for Shogi Knight moves was improperly parenthesized,
and in the promotion code KNIGHT was used in stead of HONORABLEHORSE.

lasker-2.2.3/src/movecheck.c

index 1f6d69b..30ada65 100644 (file)
@@ -218,7 +218,7 @@ static int legal_honorablehorse_move(struct game_state_t * gs, int ff, int fr, i
 
   dx = ff - tf;
   dy = fr - tr;
-  if (dy == gs->onMove == WHITE ? 2 : -2) {
+  if (dy == (gs->onMove == WHITE ? -2 : 2)) {
     if (abs(dx) == 1)
       return 1;
   }
@@ -1510,7 +1510,7 @@ static int move_calculate(struct game_state_t * gs, struct move_t * mt, int prom
       switch(piecetype(piece)) {
         case PAWN:
         case LANCE:
-        case KNIGHT:
+        case HONORABLEHORSE:
         case SILVER:
           promote = GOLD; break;
         case BISHOP:
@@ -1521,7 +1521,7 @@ static int move_calculate(struct game_state_t * gs, struct move_t * mt, int prom
       }
     } else
       switch(piecetype(piece)) { // force mandatory promotions
-        case KNIGHT:
+        case HONORABLEHORSE:
           if(mt->toRank == 1 || mt->toRank == gs->files-2) promote = GOLD;
         case PAWN:
         case LANCE:
@@ -1628,7 +1628,7 @@ int in_check(struct game_state_t * gs)
   }\r
   for (InitPieceLoop(gs->board, &f, &r, gs->onMove);\r
        NextPieceLoop(gs->board, &f, &r, gs->onMove, gs->files, gs->ranks);) {\r
-    if (legal_move(gs, f, r, kf, kr)) {        /* In Check? */\r
+    if (legal_move(gs, f, r, kf, kr)) {        /* In Check? */
       return 1;\r
     }\r
   }\r