X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fpawns.cpp;h=d2ef33e61e499cef4a466d91a1d076de7d36830d;hp=56f5d7239594b391e13ddd6b3edd80432632297f;hb=82f7d507eaf83e27a33bf0b433be08d23320b6fe;hpb=759b3c79cf94d101163f646b1eb2a9f9c64293ab diff --git a/src/pawns.cpp b/src/pawns.cpp index 56f5d723..d2ef33e6 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -68,10 +68,10 @@ namespace { { V( 1), V( 64), V( 143), V(26), V(13) }, { V( 1), V( 47), V( 110), V(44), V(24) }, { V( 0), V( 72), V( 127), V(50), V(31) } }, - { { V( 0), V( 0), V( 79), V(23), V( 1) }, // BlockedByPawn - { V( 0), V( 0), V( 148), V(27), V( 2) }, - { V( 0), V( 0), V( 161), V(16), V( 1) }, - { V( 0), V( 0), V( 171), V(22), V(15) } }, + { { V( 0), V( 0), V( 19), V(23), V( 1) }, // BlockedByPawn + { V( 0), V( 0), V( 88), V(27), V( 2) }, + { V( 0), V( 0), V( 101), V(16), V( 1) }, + { V( 0), V( 0), V( 111), V(22), V(15) } }, { { V(22), V( 45), V( 104), V(62), V( 6) }, // Unblocked { V(31), V( 30), V( 99), V(39), V(19) }, { V(23), V( 29), V( 96), V(41), V(15) }, @@ -151,7 +151,7 @@ namespace { // not attacked more times than defended. if ( !(stoppers ^ lever ^ leverPush) && !(ourPawns & forward_file_bb(Us, s)) - && popcount(supported) >= popcount(lever) + && popcount(supported) >= popcount(lever) - 1 && popcount(phalanx) >= popcount(leverPush)) e->passedPawns[Us] |= s; @@ -236,24 +236,17 @@ Entry* probe(const Position& pos) { template Value Entry::shelter_storm(const Position& pos, Square ksq) { - constexpr Color Them = (Us == WHITE ? BLACK : WHITE); - constexpr Bitboard ShelterMask = - Us == WHITE ? make_bitboard(SQ_A2, SQ_B3, SQ_C2, SQ_F2, SQ_G3, SQ_H2) - : make_bitboard(SQ_A7, SQ_B6, SQ_C7, SQ_F7, SQ_G6, SQ_H7); - constexpr Bitboard StormMask = - Us == WHITE ? make_bitboard(SQ_A3, SQ_C3, SQ_F3, SQ_H3) - : make_bitboard(SQ_A6, SQ_C6, SQ_F6, SQ_H6); + constexpr Color Them = (Us == WHITE ? BLACK : WHITE); + constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH); enum { BlockedByKing, Unopposed, BlockedByPawn, Unblocked }; - File center = std::max(FILE_B, std::min(FILE_G, file_of(ksq))); - Bitboard b = pos.pieces(PAWN) - & (forward_ranks_bb(Us, ksq) | rank_bb(ksq)) - & (adjacent_files_bb(center) | file_bb(center)); + Bitboard b = pos.pieces(PAWN) & (forward_ranks_bb(Us, ksq) | rank_bb(ksq)); Bitboard ourPawns = b & pos.pieces(Us); Bitboard theirPawns = b & pos.pieces(Them); Value safety = MaxSafetyBonus; + File center = std::max(FILE_B, std::min(FILE_G, file_of(ksq))); for (File f = File(center - 1); f <= File(center + 1); ++f) { b = ourPawns & file_bb(f); @@ -265,15 +258,12 @@ Value Entry::shelter_storm(const Position& pos, Square ksq) { int d = std::min(f, ~f); safety -= ShelterWeakness[f == file_of(ksq)][d][rkUs] + StormDanger - [f == file_of(ksq) && rkThem == relative_rank(Us, ksq) + 1 ? BlockedByKing : - rkUs == RANK_1 ? Unopposed : - rkThem == rkUs + 1 ? BlockedByPawn : Unblocked] + [(shift(b) & ksq) ? BlockedByKing : + rkUs == RANK_1 ? Unopposed : + rkThem == (rkUs + 1) ? BlockedByPawn : Unblocked] [d][rkThem]; } - if (popcount((ourPawns & ShelterMask) | (theirPawns & StormMask)) == 5) - safety += Value(300); - return safety; }