]> git.sesse.net Git - stockfish/blobdiff - src/pawns.cpp
Clean Up Castling in gives_check
[stockfish] / src / pawns.cpp
index d3d2ea0f744c531f10eb216a8c817fb6e5e28483..5d6770ed76eafb88bcd871a790f45c289a0b1e0a 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
-  Copyright (C) 2004-2020 The Stockfish developers (see AUTHORS file)
+  Copyright (C) 2004-2021 The Stockfish developers (see AUTHORS file)
 
   Stockfish is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -32,6 +32,7 @@ namespace {
   // Pawn penalties
   constexpr Score Backward      = S( 6, 23);
   constexpr Score Doubled       = S(13, 53);
+  constexpr Score DoubledEarly  = S(20, 10);
   constexpr Score Isolated      = S( 2, 15);
   constexpr Score WeakLever     = S( 5, 57);
   constexpr Score WeakUnopposed = S(16, 22);
@@ -86,6 +87,7 @@ namespace {
 
     constexpr Color     Them = ~Us;
     constexpr Direction Up   = pawn_push(Us);
+    constexpr Direction Down = -Up;
 
     Bitboard neighbours, stoppers, support, phalanx, opposed;
     Bitboard lever, leverPush, blocked;
@@ -123,6 +125,13 @@ namespace {
         phalanx    = neighbours & rank_bb(s);
         support    = neighbours & rank_bb(s - Up);
 
+        if (doubled)
+        {
+            // Additional doubled penalty if none of their pawns is fixed
+            if (!(ourPawns & shift<Down>(theirPawns | pawn_attacks_bb<Them>(theirPawns))))
+                score -= DoubledEarly;
+        }
+
         // A pawn is backward when it is behind all pawns of the same color on
         // the adjacent files and cannot safely advance.
         backward =  !(neighbours & forward_ranks_bb(Them, s + Up))