Two simplifications:
- Remove the initialisation to 0 of occupied, which is now unnecessary.
- Remove the initial check for nextVictim == KING
If nextVictim == KING, then PieceValue[MG][nextVictim] will be 0, so that
balance >= threshold is true. So see_ge() returns true anyway.
No functional change.
Bitboard occupied, stmAttackers;
balance = PieceValue[MG][piece_on(to)];
Bitboard occupied, stmAttackers;
balance = PieceValue[MG][piece_on(to)];
if (balance < threshold)
return false;
if (balance < threshold)
return false;
- if (nextVictim == KING)
- return true;
-
balance -= PieceValue[MG][nextVictim];
balance -= PieceValue[MG][nextVictim];
- if (balance >= threshold)
+ if (balance >= threshold) // Always true if nextVictim == KING
return true;
bool relativeStm = true; // True if the opponent is to move
return true;
bool relativeStm = true; // True if the opponent is to move
- occupied ^= pieces() ^ from ^ to;
+ occupied = pieces() ^ from ^ to;
// Find all attackers to the destination square, with the moving piece removed,
// but possibly an X-ray attacker added behind it.
// Find all attackers to the destination square, with the moving piece removed,
// but possibly an X-ray attacker added behind it.