Fix type-in of drop moves
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 16 Jan 2011 20:37:16 +0000 (21:37 +0100)
committerArun Persaud <arun@nubati.net>
Sat, 29 Jan 2011 02:15:59 +0000 (18:15 -0800)
Drop moves entered through the move type-in already come in the (piece,
DROP_RANK, x, y) format, rather than having a holdings from square. This
caused UserMoveEvent to consider them illegal when testing if the
piecewas of the side to move, and when this was fixed, to recognize
Knight drops as coming from between board and holdings (and thus
illegal).

backend.c

index 75fc9a1..26b7d80 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5985,6 +5985,7 @@ UserMoveEvent(fromX, fromY, toX, toY, promoChar)
       case BeginningOfGame:
       case AnalyzeMode:
       case Training:
+       if(fromY == DROP_RANK) break; // [HGM] drop moves (entered through move type-in) are automatically assigned to side-to-move
        if ((int) boards[currentMove][fromY][fromX] >= (int) BlackPawn &&
             (int) boards[currentMove][fromY][fromX] < (int) EmptySquare) {
            /* User is moving for Black */
@@ -6079,7 +6080,7 @@ UserMoveEvent(fromX, fromY, toX, toY, promoChar)
     pup = boards[currentMove][toY][toX];
 
     /* [HGM] If move started in holdings, it means a drop. Convert to standard form */
-    if( fromX == BOARD_LEFT-2 || fromX == BOARD_RGHT+1) { 
+    if( (fromX == BOARD_LEFT-2 || fromX == BOARD_RGHT+1) && fromY != DROP_RANK ) {
          if( pup != EmptySquare ) return;
          moveType = WhiteOnMove(currentMove) ? WhiteDrop : BlackDrop;
           if(appData.debugMode) fprintf(debugFP, "Drop move %d, curr=%d, x=%d,y=%d, p=%d\n",