From bd8dcc6077ab449023d5435b0dfc84ec6da0f06e Mon Sep 17 00:00:00 2001 From: Jesse McDonald Date: Sat, 14 Mar 2020 17:21:43 -0500 Subject: [PATCH] fix implementation of en passant to match official rules --- js/chess.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/js/chess.js b/js/chess.js index 5e6881a..dec8dd5 100644 --- a/js/chess.js +++ b/js/chess.js @@ -253,7 +253,8 @@ function movePiece(priorBoard, side, from, to){ var other = otherSide(side); var type = boardGet(priorBoard, from, side); var took = boardGet(priorBoard, to, other); - var replaced = boardGet(priorBoard, to, side); + var replacedFrom = to; + var replaced = boardGet(priorBoard, replacedFrom, side); var alongside = boardGet(priorBoard, from, other); var actuallyFrom = (from === 'phantom') ? priorBoard.phantom.from : from; @@ -306,7 +307,7 @@ function movePiece(priorBoard, side, from, to){ board.move.promotion = 'q'; /* TODO: allow other choices */ alongside = 'q'; } - if (type === 'p' && alongside === ' ' && to[0] !== actuallyFrom[0]) { + if (type === 'p' && alongside === ' ' && replaced === ' ' && to[0] !== actuallyFrom[0]) { var otherBoard = priorBoard; while (otherBoard && otherBoard.move && otherBoard.move.side[0] === side[0]) { otherBoard = otherBoard.prior; @@ -319,6 +320,9 @@ function movePiece(priorBoard, side, from, to){ board.move.en_passant = true; alongside = 'p'; boardPut(board, move.to, other, ' '); + replacedFrom = move.to; + replaced = boardGet(board, replacedFrom, side); + boardPut(board, replacedFrom, side, ' '); } } } @@ -340,7 +344,7 @@ function movePiece(priorBoard, side, from, to){ if (replaced === ' ') { board.player = otherSide(board.player); } else { - board.phantom = { from: to, type: replaced + side[0] }; + board.phantom = { from: replacedFrom, type: replaced + side[0] }; } return board;