- // Do not include in mobility squares protected by enemy pawns or occupied by our pieces
- const Bitboard mobilityArea = ~(ei.attackedBy[Them][PAWN] | pos.pieces(Us, PAWN, KING));
-
- Score score = evaluate_pieces<KNIGHT, Us, Trace>(pos, ei, mobility, mobilityArea)
- + evaluate_pieces<BISHOP, Us, Trace>(pos, ei, mobility, mobilityArea)
- + evaluate_pieces<ROOK, Us, Trace>(pos, ei, mobility, mobilityArea)
- + evaluate_pieces<QUEEN, Us, Trace>(pos, ei, mobility, mobilityArea);
-
- // Sum up all attacked squares (updated in evaluate_pieces)
- ei.attackedBy[Us][ALL_PIECES] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
- | ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
- | ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING];
- if (Trace)
- Tracing::terms[Us][Tracing::MOBILITY] = apply_weight(mobility[Us], Weights[Mobility]);
-
- return score;
+ return score - evaluate_pieces<NextPt, Them, Trace>(pos, ei, mobility, mobilityArea);