mirror of
https://github.com/tiyn/yeschess.git
synced 2025-10-20 14:51:21 +02:00
chess bugfix: en passant square creation
The en passant square is only important if it is target of an enemy pawn. If that is not the case it should not be set and shouldn't appear in the fen string either. Now it is checked if the en passant square is the target of an enemy pawn
This commit is contained in:
@@ -792,11 +792,14 @@ proc checkedMove*(chess: var Chess, move: Move): bool {.discardable.} =
|
||||
chess.uncheckedMove(start, dest)
|
||||
chess.toMove = Color(ord(chess.toMove)*(-1))
|
||||
if createEnPassant:
|
||||
chess.enPassantSquare = dest - (N * ord(color))
|
||||
if chess.board[dest + E] == BPawn * ord(color) or
|
||||
chess.board[dest + W] == BPawn * ord(color):
|
||||
chess.enPassantSquare = dest - (N * ord(color))
|
||||
if capturedEnPassant:
|
||||
chess.board[dest - (N * ord(color))] = 0
|
||||
if ((fieldToInd("h8") < dest and dest < fieldToInd("a8")) or (fieldToInd("h1") < dest and dest < fieldToInd("a1"))) and
|
||||
chess.board[dest] == WPawn * ord(color):
|
||||
if ((fieldToInd("h8") < dest and dest < fieldToInd("a8")) or
|
||||
(fieldToInd("h1") < dest and dest < fieldToInd("a1"))) and
|
||||
chess.board[dest] == WPawn * ord(color):
|
||||
chess.board[dest] = prom
|
||||
chess.previousBoard.add(chess.board)
|
||||
chess.halfMoveClock = chess.halfMoveClock + 1
|
||||
|
Reference in New Issue
Block a user