Use the usual and accepted passed pawn semantic
instead of a non-standard one and remove a FIXME.
STC (http://tests.stockfishchess.org/tests/view/
576401350ebc5972faa1608d):
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 29646 W: 5663 L: 5557 D: 18426
LTC (http://tests.stockfishchess.org/tests/view/
5764e4e90ebc5972faa160c3):
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 40224 W: 5578 L: 5484 D: 29162
bench:
7543902
Square s = pop_lsb(&b);
assert(pos.pawn_passed(Us, s));
+ assert(!(pos.pieces(PAWN) & forward_bb(Us, s)));
int r = relative_rank(Us, s) - RANK_2;
int rr = r * (r - 1);
}
// 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