constexpr Score BishopPawns = S( 3, 7);
constexpr Score CloseEnemies = S( 6, 0);
constexpr Score CorneredBishop = S( 50, 50);
- constexpr Score Hanging = S( 52, 30);
- constexpr Score HinderPassedPawn = S( 8, 0);
+ constexpr Score Hanging = S( 57, 32);
constexpr Score KingProtector = S( 6, 6);
constexpr Score KnightOnQueen = S( 21, 11);
- constexpr Score LongDiagonalBishop = S( 22, 0);
+ constexpr Score LongDiagonalBishop = S( 46, 0);
constexpr Score MinorBehindPawn = S( 16, 0);
constexpr Score Overload = S( 13, 6);
constexpr Score PawnlessFlank = S( 19, 84);
- constexpr Score RookOnPawn = S( 8, 24);
+ constexpr Score RookOnPawn = S( 10, 30);
constexpr Score SliderOnQueen = S( 42, 21);
constexpr Score ThreatByKing = S( 23, 76);
constexpr Score ThreatByPawnPush = S( 45, 40);
* (1 + popcount(blocked & CenterFiles));
// Bonus for bishop on a long diagonal which can "see" both center squares
- if (more_than_one(Center & (attacks_bb<BISHOP>(s, pos.pieces(PAWN)) | s)))
+ if (more_than_one(attacks_bb<BISHOP>(s, pos.pieces(PAWN)) & Center))
score += LongDiagonalBishop;
}
assert(!(pos.pieces(Them, PAWN) & forward_file_bb(Us, s + Up)));
- if (forward_file_bb(Us, s) & pos.pieces(Them))
- score -= HinderPassedPawn;
-
int r = relative_rank(Us, s);
int w = PassedDanger[r];
bonus += make_score(k * w, k * w);
}
- else if (pos.pieces(Us) & blockSq)
- bonus += make_score(w + r * 2, w + r * 2);
} // w != 0
// Scale down bonus for candidate passers which need more than one
+ 12 * outflanking
+ 16 * pawnsOnBothFlanks
+ 48 * !pos.non_pawn_material()
- -136 ;
+ -118 ;
// Now apply the bonus: note that we find the attacking side by extracting
// the sign of the endgame value, and that we carefully cap the bonus so
if ( pos.opposite_bishops()
&& pos.non_pawn_material(WHITE) == BishopValueMg
&& pos.non_pawn_material(BLACK) == BishopValueMg)
- sf = 31;
+ sf = 8 + 4 * pe->pawn_asymmetry();
else
sf = std::min(40 + (pos.opposite_bishops() ? 2 : 7) * pos.count<PAWN>(strongSide), sf);
+
}
return ScaleFactor(sf);