// Pawn penalties
constexpr Score Backward = S( 9, 24);
- constexpr Score BlockedStorm = S(82, 82);
constexpr Score Doubled = S(11, 56);
constexpr Score Isolated = S( 5, 15);
constexpr Score WeakLever = S( 0, 56);
constexpr Score WeakUnopposed = S(13, 27);
+ constexpr Score BlockedStorm[RANK_NB] = {S( 0, 0), S( 0, 0), S( 76, 78), S(-10, 15), S(-7, 10), S(-4, 6), S(-1, 2)};
+
// Connected pawn bonus
constexpr int Connected[RANK_NB] = { 0, 7, 8, 12, 29, 48, 86 };
constexpr Color Them = ~Us;
Bitboard b = pos.pieces(PAWN) & ~forward_ranks_bb(Them, ksq);
- Bitboard ourPawns = b & pos.pieces(Us);
- Bitboard theirPawns = b & pos.pieces(Them);
+ Bitboard ourPawns = b & pos.pieces(Us) & ~pawnAttacks[Them];
+ Bitboard theirPawns = b & pos.pieces(Them) & ~pawnAttacks[Us];
Score bonus = make_score(5, 5);
bonus += make_score(ShelterStrength[d][ourRank], 0);
if (ourRank && (ourRank == theirRank - 1))
- bonus -= BlockedStorm * int(theirRank == RANK_3);
+ bonus -= BlockedStorm[theirRank];
else
bonus -= make_score(UnblockedStorm[d][theirRank], 0);
}