From 82620f45773509d6cb29f1df0f12bab1e3bbb63e Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 26 Nov 2018 23:50:53 +0100 Subject: [PATCH] Fix an issue where we would lose the history after Chess960-style castling, since we wrongly had it reset the 50-move rule. --- Position.pm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Position.pm b/Position.pm index 3e3e84f..3e39e46 100644 --- a/Position.pm +++ b/Position.pm @@ -275,8 +275,11 @@ sub make_move { $np->{'black_castle_k'} = undef; } - # 50-move rule. - if (lc($piece) eq 'p' || $dest_piece ne '-') { + # 50-move rule. Note that castle does not reset the counter, per FIDE rules. + my $castling = (lc($piece) eq 'k' && abs($from_col - $to_col) > 1) || # King moves two squares. + ($piece eq 'K' && $dest_piece eq 'R') || # Chess960-style king-takes-rook. + ($piece eq 'k' && $dest_piece eq 'r'); + if (!$castling && (lc($piece) eq 'p' || $dest_piece ne '-')) { $np->{'time_since_100move_rule_reset'} = 0; } else { $np->{'time_since_100move_rule_reset'} = $pos->{'time_since_100move_rule_reset'} + 1; -- 2.39.2