]> git.sesse.net Git - remoteglot/blobdiff - Position.pm
Yet more Chess960 castling fixes.
[remoteglot] / Position.pm
index 93bde53d334670e64a114f9881545ae37be8f987..3e3e84fd3f0282d55878f1a47ca3d215277c0000 100644 (file)
@@ -74,13 +74,13 @@ sub from_fen {
        if ($castling =~ /Q/) {
                $pos->{'white_castle_q'} = _col_num_to_letter(_find_piece_col($board->[7], 'R'));
        }
-       while ($castling =~ s/([A-H])//g) {
+       while ($castling =~ s/([A-H])//) {
                my $rook_col = lc($1);
-               my $king_col = _find_piece_col($board->[7], 'K');
-               if ($rook_col < $king_col) {
-                       $pos->{'white_castle_q'} = _col_num_to_letter($rook_col);
+               my $king_col = _col_num_to_letter(_find_piece_col($board->[7], 'K'));
+               if ($rook_col lt $king_col) {
+                       $pos->{'white_castle_q'} = $rook_col;
                } else {
-                       $pos->{'white_castle_k'} = _col_num_to_letter($rook_col);
+                       $pos->{'white_castle_k'} = $rook_col;
                }
        }
        if ($castling =~ /k/) {
@@ -89,13 +89,13 @@ sub from_fen {
        if ($castling =~ /q/) {
                $pos->{'black_castle_q'} = _col_num_to_letter(_find_piece_col($board->[0], 'r'));
        }
-       while ($castling =~ s/([a-h])//g) {
+       while ($castling =~ s/([a-h])//) {
                my $rook_col = $1;
-               my $king_col = _find_piece_col($board->[0], 'k');
-               if ($rook_col < $king_col) {
-                       $pos->{'black_castle_q'} = _col_num_to_letter($rook_col);
+               my $king_col = _col_num_to_letter(_find_piece_col($board->[0], 'k'));
+               if ($rook_col lt $king_col) {
+                       $pos->{'black_castle_q'} = $rook_col;
                } else {
-                       $pos->{'black_castle_k'} = _col_num_to_letter($rook_col);
+                       $pos->{'black_castle_k'} = $rook_col;
                }
        }
        $pos->{'time_since_100move_rule_reset'} = $halfmove_clock // 0;