}
// Passed pawns will be properly scored in evaluation because we need
- // full attack info to evaluate them. Only the frontmost passed
- // pawn on each file is considered a true passed pawn.
- if (!(stoppers | doubled)) // FIXME this is just doubled by adjacent pawn
+ // full attack info to evaluate them.
+ if (!stoppers && !(ourPawns & forward_bb(Us, s)))
e->passedPawns[Us] |= s;
// Score this pawn
score += Lever[relative_rank(Us, s)];
}
- b = e->semiopenFiles[Us] ^ 0xFF;
- e->pawnSpan[Us] = b ? int(msb(b) - lsb(b)) : 0;
-
return score;
}
e->key = key;
e->score = evaluate<WHITE>(pos, e) - evaluate<BLACK>(pos, e);
e->asymmetry = popcount(e->semiopenFiles[WHITE] ^ e->semiopenFiles[BLACK]);
+ e->openFiles = popcount(e->semiopenFiles[WHITE] & e->semiopenFiles[BLACK]);
return e;
}