Fix illegal drops
authorH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 18 Feb 2015 21:47:30 +0000 (22:47 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 7 May 2015 18:53:32 +0000 (20:53 +0200)
Even white was dropping black pieces on those!

backend.c

index 71a795c..d8b85a1 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5527,7 +5527,12 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
       case BlackASideCastleFR:
       /* End of code added by Tord */
       case IllegalMove:                /* bug or odd chess variant */
-       if(currentMoveString[1] == '@') goto drop; // illegal drop
+       if(currentMoveString[1] == '@') { // illegal drop
+         *fromX = *moveType == WhiteOnMove(moveNum) ?
+           (int) CharToPiece(ToUpper(currentMoveString[0])) :
+           (int) CharToPiece(ToLower(currentMoveString[0]));
+         goto drop;
+       }
         *fromX = currentMoveString[0] - AAA;
         *fromY = currentMoveString[1] - ONE;
         *toX = currentMoveString[2] - AAA;
@@ -5551,10 +5556,10 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
 
       case WhiteDrop:
       case BlackDrop:
-      drop:
        *fromX = *moveType == WhiteDrop ?
          (int) CharToPiece(ToUpper(currentMoveString[0])) :
          (int) CharToPiece(ToLower(currentMoveString[0]));
+      drop:
        *fromY = DROP_RANK;
         *toX = currentMoveString[2] - AAA;
         *toY = currentMoveString[3] - ONE;