ei.kingAdjacentZoneAttacksCount[us] += count_1s_max_15(bb);
}
+ // Remove squares protected by enemy pawns
+ Bitboard bb = (b & ~ei.attackedBy[them][PAWN]);
+
// Mobility
- int mob = count_1s_max_15(b & ~p.pieces_of_color(us));
+ int mob = count_1s_max_15(bb & ~p.pieces_of_color(us));
ei.mgMobility += Sign[us] * mgBonus[mob];
ei.egMobility += Sign[us] * egBonus[mob];
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?