Be stricter about the en passent handling in FEN notation; unconfuses Rybka.
authorSteinar H. Gunderson <sesse@debian.org>
Sat, 16 Jun 2007 12:31:18 +0000 (14:31 +0200)
committerSteinar H. Gunderson <sesse@debian.org>
Sat, 16 Jun 2007 12:31:18 +0000 (14:31 +0200)
remoteglot.pl

index 330d47b..7bcbbdf 100644 (file)
@@ -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 .= " ";