Passed pawns: consider enemy rooks or queens from behind
authorMarco Costalba <mcostalba@gmail.com>
Mon, 22 Dec 2008 11:10:15 +0000 (12:10 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 22 Dec 2008 11:10:15 +0000 (12:10 +0100)
Merged from Glaurung 2.2

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/evaluate.cpp

index cf164cda786d94260b1a5c5b7d0ac651cf9bc9c2..12329fcdceef82a7872aa2f43af3c8dfd1344e2f 100644 (file)
@@ -936,6 +936,13 @@ namespace {
           b2 = squares_in_front_of(us, s);
           b3 = b2 & ei.attacked_by(them);
           b4 = b2 & ei.attacked_by(us);
+
+          // If there is an enemy rook or queen attacking the pawn from behind,
+          // add all X-ray attacks by the rook or queen.
+          if(bit_is_set(ei.attacked_by(them,ROOK)|ei.attacked_by(them,QUEEN),s)
+             && squares_behind(us, s) & pos.rooks_and_queens(them))
+            b3 = b2;
+
           if((b2 & pos.pieces_of_color(them)) == EmptyBoardBB) {
             // There are no enemy pieces in the pawn's path!  Are any of the
             // squares in the pawn's path attacked by the enemy?