add<KNSFKR>("KNSFKR");
add<KSFK>("KSFK");
add<KSFKF>("KSFKF");
+ add<KRKS>("KRKS");
add<KNPK>("KNPK");
add<KNPKB>("KNPKB");
}
+/// KR vs KS
+template<>
+Value Endgame<KRKS>::operator()(const Position& pos) const {
+
+ assert(verify_material(pos, strongSide, RookValueMg, 0));
+ assert(verify_material(pos, weakSide, SilverValueMg, 0));
+
+ Square winnerKSq = pos.square<KING>(strongSide);
+ Square loserKSq = pos.square<KING>(weakSide);
+
+ Value result = RookValueEg
+ - SilverValueEg
+ + PushToEdges[map_to_standard_board(pos, loserKSq)]
+ + PushClose[distance(winnerKSq, loserKSq)];
+
+ return strongSide == pos.side_to_move() ? result : -result;
+}
+
+
/// KB and one or more pawns vs K. It checks for draws with rook pawns and
/// a bishop of the wrong color. If such a draw is detected, SCALE_FACTOR_DRAW
/// is returned. If not, the return value is SCALE_FACTOR_NONE, i.e. no scaling