1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-01 17:19:36 +00:00

Fix a condition in connected_moves()

When checking if the moving piece p1 in a previous
move m1 defends the destination square of a move m2
we have to use the occupancy with the from square of
m2 removed so to take in account the case in which
f2 will block an x-ray attack from p1.

For instance in this position:
r2k3r/p1pp1pb1/qn3np1/1N2P3/1p3P2/2B5/PPP3QP/R3K2R b KQ - 1 9

The move eXf6 is connected to the previous move Bc3 that
defends the destination square f6.

With this patch we have about 10% more moves detected as
'connected'. Anyhow the absolute number is very low, about
4000 more moves out of 6M nodes searched.

Another issue spotted by Hongzhi "Hawk Eye" Cheng ;-)

new bench: 5757373
This commit is contained in:
Marco Costalba 2012-11-02 17:04:51 +01:00
parent 94ecdef8ac
commit bbdf9e4737

View file

@ -1391,7 +1391,7 @@ split_point_start: // At split points actual search starts from here
// Case 4: The destination square for m2 is defended by the moving piece in m1 // Case 4: The destination square for m2 is defended by the moving piece in m1
p1 = pos.piece_on(t1); p1 = pos.piece_on(t1);
if (pos.attacks_from(p1, t1) & t2) if (pos.attacks_from(p1, t1, pos.pieces() ^ f2) & t2)
return true; return true;
// Case 5: Discovered check, checking piece is the piece moved in m1 // Case 5: Discovered check, checking piece is the piece moved in m1