const Score OtherCheck = S(10, 10);
const Score ThreatByHangingPawn = S(71, 61);
const Score LooseEnemies = S( 0, 25);
+ const Score WeakQueen = S(35, 0);
const Score Hanging = S(48, 27);
const Score ThreatByPawnPush = S(38, 22);
const Score Unstoppable = S( 0, 20);
// Penalties for enemy's safe checks
const int QueenContactCheck = 89;
- const int QueenCheck = 52;
- const int RookCheck = 45;
- const int BishopCheck = 5;
- const int KnightCheck = 17;
+ const int QueenCheck = 62;
+ const int RookCheck = 57;
+ const int BishopCheck = 48;
+ const int KnightCheck = 78;
// eval_init() initializes king and attack bitboards for a given color
// the pawn shelter (current 'score' value).
attackUnits = std::min(72, ei.kingAttackersCount[Them] * ei.kingAttackersWeight[Them])
+ 9 * ei.kingAdjacentZoneAttacksCount[Them]
- + 27 * popcount(undefended)
- + 11 * (popcount(b) + !!ei.pinnedPieces[Us])
+ + 21 * popcount(undefended)
+ + 12 * (popcount(b) + !!ei.pinnedPieces[Us])
- 64 * !pos.count<QUEEN>(Them)
- mg_value(score) / 8;
& ~(ei.attackedBy[Us][ALL_PIECES] | ei.attackedBy[Them][ALL_PIECES]))
score += LooseEnemies;
+ // Bonus for pin or discovered attack on the opponent queen
+ if ( pos.count<QUEEN>(Them) == 1
+ && pos.slider_blockers(pos.pieces(),
+ pos.pieces(Us, ROOK, BISHOP),
+ pos.square<QUEEN>(Them)))
+ score += WeakQueen;
+
// Non-pawn enemies attacked by a pawn
weak = (pos.pieces(Them) ^ pos.pieces(Them, PAWN)) & ei.attackedBy[Us][PAWN];