- // KingProtector[PieceType-2] contains a bonus according to distance from king
- const Score KingProtector[] = { S(-3, -5), S(-4, -3), S(-3, 0), S(-1, 1) };
-
- // Assorted bonuses and penalties used by evaluation
- const Score MinorBehindPawn = S( 16, 0);
- const Score BishopPawns = S( 8, 12);
- const Score RookOnPawn = S( 8, 24);
- const Score TrappedRook = S( 92, 0);
- const Score WeakQueen = S( 50, 10);
- const Score OtherCheck = S( 10, 10);
- const Score CloseEnemies = S( 7, 0);
- const Score PawnlessFlank = S( 20, 80);
- const Score ThreatByHangingPawn = S( 71, 61);
- const Score ThreatBySafePawn = S(182,175);
- const Score ThreatByRank = S( 16, 3);
- const Score Hanging = S( 48, 27);
- const Score ThreatByPawnPush = S( 38, 22);
- const Score HinderPassedPawn = S( 7, 0);
- const Score TrappedBishopA1H1 = S( 50, 50);
-
- #undef S
- #undef V
+ // Assorted bonuses and penalties
+ constexpr Score BishopPawns = S( 3, 8);
+ constexpr Score CloseEnemies = S( 7, 0);
+ constexpr Score CorneredBishop = S( 50, 50);
+ constexpr Score Hanging = S( 62, 34);
+ constexpr Score KingProtector = S( 6, 7);
+ constexpr Score KnightOnQueen = S( 20, 12);
+ constexpr Score LongDiagonalBishop = S( 44, 0);
+ constexpr Score MinorBehindPawn = S( 16, 0);
+ constexpr Score Overload = S( 12, 6);
+ constexpr Score PawnlessFlank = S( 18, 94);
+ constexpr Score RestrictedPiece = S( 7, 6);
+ constexpr Score RookOnPawn = S( 10, 28);
+ constexpr Score SliderOnQueen = S( 49, 21);
+ constexpr Score ThreatByKing = S( 21, 84);
+ constexpr Score ThreatByPawnPush = S( 48, 42);
+ constexpr Score ThreatByRank = S( 14, 3);
+ constexpr Score ThreatBySafePawn = S(169, 99);
+ constexpr Score TrappedRook = S( 98, 5);
+ constexpr Score WeakQueen = S( 51, 10);
+ constexpr Score WeakUnopposedPawn = S( 14, 20);
+
+#undef S
+
+ // Evaluation class computes and stores attacks tables and other working data
+ template<Tracing T>
+ class Evaluation {