From 7b293fd83e51f0253230381796e24224f314506b Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 16 Jun 2007 14:31:18 +0200 Subject: [PATCH] Be stricter about the en passent handling in FEN notation; unconfuses Rybka. --- remoteglot.pl | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/remoteglot.pl b/remoteglot.pl index 330d47b..7bcbbdf 100644 --- a/remoteglot.pl +++ b/remoteglot.pl @@ -190,11 +190,28 @@ sub style12_to_fen { # en passant my $ep = "-"; if ($x[10] != -1) { - $ep = (qw(a b c d e f g h))[$x[10]]; + my $col = $x[10]; + my $nep = (qw(a b c d e f g h))[$col]; + + if ($x[9] eq 'B') { + $nep .= "3"; + } else { + $nep .= "6"; + } + + # + # Showing the en passant square when actually no capture can be made + # seems to confuse at least Rybka. Thus, check if there's actually + # a pawn of the opposite side that can do the en passant move, and if + # not, just lie -- it doesn't matter anyway. I'm unsure what's the + # "right" thing as per the standard, though. + # if ($x[9] eq 'B') { - $ep .= "3"; + $ep = $nep if ($col > 0 && substr($board[4], $col-1, 1) eq 'p'); + $ep = $nep if ($col < 7 && substr($board[4], $col+1, 1) eq 'p'); } else { - $ep .= "6"; + $ep = $nep if ($col > 0 && substr($board[3], $col-1, 1) eq 'P'); + $ep = $nep if ($col < 7 && substr($board[3], $col+1, 1) eq 'P'); } } $fen .= " "; -- 2.39.2