- // Doubled pawn penalty by opposed flag and file
- const Score Doubled[2][FILE_NB] = {
- { S(13, 43), S(20, 48), S(23, 48), S(23, 48),
- S(23, 48), S(23, 48), S(20, 48), S(13, 43) },
- { S(13, 43), S(20, 48), S(23, 48), S(23, 48),
- S(23, 48), S(23, 48), S(20, 48), S(13, 43) }};
-
- // Isolated pawn penalty by opposed flag and file
- const Score Isolated[2][FILE_NB] = {
- { S(37, 45), S(54, 52), S(60, 52), S(60, 52),
- S(60, 52), S(60, 52), S(54, 52), S(37, 45) },
- { S(25, 30), S(36, 35), S(40, 35), S(40, 35),
- S(40, 35), S(40, 35), S(36, 35), S(25, 30) }};
-
- // Backward pawn penalty by opposed flag and file
- const Score Backward[2][FILE_NB] = {
- { S(30, 42), S(43, 46), S(49, 46), S(49, 46),
- S(49, 46), S(49, 46), S(43, 46), S(30, 42) },
- { S(20, 28), S(29, 31), S(33, 31), S(33, 31),
- S(33, 31), S(33, 31), S(29, 31), S(20, 28) }};
-
- // Pawn chain membership bonus by file
- const Score ChainMember[FILE_NB] = {
- S(11,-1), S(13,-1), S(13,-1), S(14,-1),
- S(14,-1), S(13,-1), S(13,-1), S(11,-1)
+ // Pawn penalties
+ constexpr Score Backward = S( 9, 22);
+ constexpr Score Doubled = S(13, 51);
+ constexpr Score DoubledEarly = S(20, 7);
+ constexpr Score Isolated = S( 3, 15);
+ constexpr Score WeakLever = S( 4, 58);
+ constexpr Score WeakUnopposed = S(13, 24);
+
+ // Bonus for blocked pawns at 5th or 6th rank
+ constexpr Score BlockedPawn[2] = { S(-17, -6), S(-9, 2) };
+
+ constexpr Score BlockedStorm[RANK_NB] = {
+ S(0, 0), S(0, 0), S(75, 78), S(-8, 16), S(-6, 10), S(-6, 6), S(0, 2)