#define V Value
#define S(mg, eg) make_score(mg, eg)
- // Isolated pawn penalty by opposed flag
- const Score Isolated[] = { S(27, 30), S(13, 18) };
+ // Isolated pawn penalty
+ const Score Isolated = S(13, 18);
- // Backward pawn penalty by opposed flag
- const Score Backward[] = { S(40, 26), S(24, 12) };
+ // Backward pawn penalty
+ const Score Backward = S(24, 12);
// Connected pawn bonus by opposed, phalanx, #support and rank
Score Connected[2][2][3][RANK_NB];
Bitboard ourPawns = pos.pieces( Us, PAWN);
Bitboard theirPawns = pos.pieces(Them, PAWN);
- e->passedPawns[Us] = e->pawnAttacksSpan[Us] = 0;
+ e->passedPawns[Us] = e->pawnAttacksSpan[Us] = e->weakUnopposed[Us] = 0;
e->semiopenFiles[Us] = 0xFF;
e->kingSquares[Us] = SQ_NONE;
e->pawnAttacks[Us] = shift<Right>(ourPawns) | shift<Left>(ourPawns);
score += Connected[opposed][!!phalanx][popcount(supported)][relative_rank(Us, s)];
else if (!neighbours)
- score -= Isolated[opposed];
+ score -= Isolated, e->weakUnopposed[Us] += !opposed;
else if (backward)
- score -= Backward[opposed];
+ score -= Backward, e->weakUnopposed[Us] += !opposed;
if (doubled && !supported)
score -= Doubled;