author Steinar H. Gunderson Sat, 16 Jun 2007 12:31:18 +0000 (14:31 +0200) committer Steinar H. Gunderson Sat, 16 Jun 2007 12:31:18 +0000 (14:31 +0200)
 remoteglot.pl patch | blob | history

index 330d47b..7bcbbdf 100644 (file)
@@ -190,11 +190,28 @@ sub style12_to_fen {
# en passant
my \$ep = "-";
if (\$x != -1) {
-               \$ep = (qw(a b c d e f g h))[\$x];
+               my \$col = \$x;
+               my \$nep = (qw(a b c d e f g h))[\$col];
+
+               if (\$x 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 eq 'B') {
-                       \$ep .= "3";
+                       \$ep = \$nep if (\$col > 0 && substr(\$board, \$col-1, 1) eq 'p');
+                       \$ep = \$nep if (\$col < 7 && substr(\$board, \$col+1, 1) eq 'p');
} else {
-                       \$ep .= "6";
+                       \$ep = \$nep if (\$col > 0 && substr(\$board, \$col-1, 1) eq 'P');
+                       \$ep = \$nep if (\$col < 7 && substr(\$board, \$col+1, 1) eq 'P');
}
}
\$fen .= " ";