From: Fabian Fichter Date: Sun, 10 Nov 2019 13:00:24 +0000 (+0100) Subject: Calculate pins by cannons X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=bcc0f655f0cc5e56a25b8f225584a283ad434b65;p=fairystockfish.git Calculate pins by cannons xiangqi LLR: 3.01 (-2.94,2.94) [0.00,10.00] Total: 868 W: 303 L: 218 D: 347 --- diff --git a/src/position.cpp b/src/position.cpp index 05f597f..1eed7d8 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -722,7 +722,7 @@ Bitboard Position::slider_blockers(Bitboard sliders, Square s, Bitboard& pinners { Bitboard b = sliders & (PseudoAttacks[~c][pt][s] ^ LeaperAttacks[~c][pt][s]) & pieces(c, pt); if (b) - snipers |= b & ~attacks_from(~c, pt, s); + snipers |= b & ~attacks_bb(~c, pt, s, pieces()); } Bitboard occupancy = pieces() ^ snipers; @@ -731,7 +731,7 @@ Bitboard Position::slider_blockers(Bitboard sliders, Square s, Bitboard& pinners Square sniperSq = pop_lsb(&snipers); Bitboard b = between_bb(s, sniperSq) & occupancy; - if (b && !more_than_one(b)) + if (b && (!more_than_one(b) || (type_of(piece_on(sniperSq)) == CANNON && popcount(b) == 2))) { blockers |= b; if (b & pieces(color_of(piece_on(s))))