From eca6bb833394a9a378dd209cefb2c1a5e721f2a9 Mon Sep 17 00:00:00 2001 From: H.G.Muller 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