ei.attackedBy[Us][ALL_PIECES] = b | ei.attackedBy[Us][PAWN];
// Init our king safety tables only if we are going to use them
- if (pos.non_pawn_material(Them) >= QueenValueMg)
+ if (pos.non_pawn_material(Them) >= RookValueMg + KnightValueMg)
{
ei.kingRing[Us] = b;
if (relative_rank(Us, pos.square<KING>(Us)) == RANK_1)
Score score = ei.pe->king_safety<Us>(pos, ksq);
// Main king safety evaluation
- if (ei.kingAttackersCount[Them])
+ if (ei.kingAttackersCount[Them] > (1 - pos.count<QUEEN>(Them)))
{
// Find the attacked squares which are defended only by our king...
undefended = ei.attackedBy[Them][ALL_PIECES]
+ 201 * popcount(undefended)
+ 143 * (popcount(b) + !!pos.pinned_pieces(Us))
- 848 * !pos.count<QUEEN>(Them)
- - 28 * mg_value(score) / 25 - 5;
+ - 9 * mg_value(score) / 8
+ + 40;
// Analyse the safe enemy's checks which are possible on next move
safe = ~pos.pieces(Them);
// Transform the kingDanger units into a Score, and substract it from the evaluation
if (kingDanger > 0)
- score -= make_score(kingDanger * kingDanger / 4096, 0);
+ score -= make_score(kingDanger * kingDanger / 4096, kingDanger / 16);
}
// King tropism: firstly, find squares that opponent attacks in our king flank
<< " Imbalance | " << Term(IMBALANCE)
<< " Pawns | " << Term(PAWN)
<< " Knights | " << Term(KNIGHT)
- << " Bishop | " << Term(BISHOP)
+ << " Bishops | " << Term(BISHOP)
<< " Rooks | " << Term(ROOK)
<< " Queens | " << Term(QUEEN)
<< " Mobility | " << Term(MOBILITY)