X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fendgame.cpp;h=e0efd0e665271b75f2fc6bab5b824b97f843de89;hb=3835f49aa10af094642d94b1765183c8bffd561b;hp=abf27d52b66860eb39be3f6ce4d9137a2fe842ee;hpb=d4876dc96395f5592bfbc25b2eca2360db0655e6;p=stockfish diff --git a/src/endgame.cpp b/src/endgame.cpp index abf27d52..e0efd0e6 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -24,7 +24,6 @@ #include -#include "bitbase.h" #include "bitcount.h" #include "endgame.h" @@ -102,6 +101,7 @@ namespace { /// init_bitbases() is called during program initialization, and simply loads /// bitbases from disk into memory. At the moment, there is only the bitbase /// for KP vs K, but we may decide to add other bitbases later. +extern void generate_kpk_bitbase(uint8_t bitbase[]); void init_bitbases() { generate_kpk_bitbase(KPKBitbase); @@ -367,12 +367,12 @@ Value EvaluationFunction::apply(const Position& pos) const { /// king alone are always draw. template<> Value EvaluationFunction::apply(const Position&) const { - return VALUE_ZERO; + return VALUE_DRAW; } template<> Value EvaluationFunction::apply(const Position&) const { - return VALUE_ZERO; + return VALUE_DRAW; } /// KBPKScalingFunction scales endgames where the stronger side has king, @@ -699,11 +699,12 @@ ScaleFactor ScalingFunction::apply(const Position& pos) const { return SCALE_FACTOR_ZERO; else { - Bitboard ray = ray_bb(pawnSq, (strongerSide == WHITE)? SIGNED_DIR_N : SIGNED_DIR_S); - if (ray & pos.pieces(KING, weakerSide)) + Bitboard path = squares_in_front_of(strongerSide, pawnSq); + + if (path & pos.pieces(KING, weakerSide)) return SCALE_FACTOR_ZERO; - if ( (pos.attacks_from(weakerBishopSq) & ray) + if ( (pos.attacks_from(weakerBishopSq) & path) && square_distance(weakerBishopSq, pawnSq) >= 3) return SCALE_FACTOR_ZERO; }