From eca6bb833394a9a378dd209cefb2c1a5e721f2a9 Mon Sep 17 00:00:00 2001
From: H.G.Muller <hgm@hgm-xboard.(none)>
Date: Mon, 21 Mar 2016 23:44:29 +0100
Subject: [PATCH] Fix replay of multi-leg move

Replaying multi-leg moves made the moving piece reappear on the
from-square during continuation legs in WinBoard.
---
 backend.c |   24 ++++++++----------------
 1 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/backend.c b/backend.c
index 9b81c39..3eea34d 100644
--- a/backend.c
+++ b/backend.c
@@ -12097,21 +12097,17 @@ AutoPlayOneMove ()
 	    SetHighlights(-1, -1, toX, toY);
 	}
     } else {
-        int viaX = moveList[currentMove][5] - AAA;
-        int viaY = moveList[currentMove][6] - ONE;
         fromX = moveList[currentMove][0] - AAA;
         fromY = moveList[currentMove][1] - ONE;
 
         HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove); /* [AS] */
 
         if(moveList[currentMove][4] == ';') { // multi-leg
-            ChessSquare piece = boards[currentMove][viaY][viaX];
-	    AnimateMove(boards[currentMove], fromX, fromY, viaX, viaY);
-            boards[currentMove][viaY][viaX] = boards[currentMove][fromY][fromX];
-            AnimateMove(boards[currentMove], fromX=viaX, fromY=viaY, toX, toY);
-            boards[currentMove][viaY][viaX] = piece;
-        } else
+            killX = moveList[currentMove][5] - AAA;
+            killY = moveList[currentMove][6] - ONE;
+        }
 	AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
+	killX = killY = -1;
 
 	if (appData.highlightLastMove) {
 	    SetHighlights(fromX, fromY, toX, toY);
@@ -15868,19 +15864,15 @@ ForwardInner (int target)
 		SetHighlights(-1, -1, toX, toY);
 	    }
 	} else {
-            int viaX = moveList[target - 1][5] - AAA;
-            int viaY = moveList[target - 1][6] - ONE;
             fromX = moveList[target - 1][0] - AAA;
             fromY = moveList[target - 1][1] - ONE;
 	    if (target == currentMove + 1) {
 		if(moveList[target - 1][4] == ';') { // multi-leg
-		    ChessSquare piece = boards[currentMove][viaY][viaX];
-		    AnimateMove(boards[currentMove], fromX, fromY, viaX, viaY);
-		    boards[currentMove][viaY][viaX] = boards[currentMove][fromY][fromX];
-		    AnimateMove(boards[currentMove], viaX, viaY, toX, toY);
-		    boards[currentMove][viaY][viaX] = piece;
-		} else
+		    killX = moveList[target - 1][5] - AAA;
+		    killY = moveList[target - 1][6] - ONE;
+		}
 		AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
+		killX = killY = -1;
 	    }
 	    if (appData.highlightLastMove) {
 		SetHighlights(fromX, fromY, toX, toY);
-- 
1.7.0.4