#include "direction.h"
#include "move.h"
#include "piece.h"
-#include "phase.h"
#include "square.h"
#include "value.h"
//// Types
////
-/// Castle rights, encoded as bit fields:
+/// Castle rights, encoded as bit fields
enum CastleRights {
NO_CASTLES = 0,
ALL_CASTLES = 15
};
+/// Game phase
+enum Phase {
+ PHASE_ENDGAME = 0,
+ PHASE_MIDGAME = 128
+};
+
/// The StateInfo struct stores information we need to restore a Position
/// object to its previous state when we retract a move. Whenever a move
template<PieceType Piece>
void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates);
- template<PieceType Piece, bool FindPinned>
- Bitboard hidden_checks(Color c, Square ksq, Bitboard& pinners) const;
+ template<bool FindPinned>
+ Bitboard hidden_checkers(Color c) const;
// Computing hash keys from scratch (for initialization and debugging)
Key compute_key() const;
inline Phase Position::game_phase() const {
- // The purpose of the Value(325) terms below is to make sure the difference
- // between MidgameLimit and EndgameLimit is a power of 2, which should make
- // the division at the end of the function a bit faster.
- static const Value MidgameLimit = 2 * QueenValueMidgame
- + 2 * RookValueMidgame
- + 6 * BishopValueMidgame
- + Value(325);
-
- static const Value EndgameLimit = 4 * RookValueMidgame - Value(325);
+ // Values modified by Joona Kiiski
+ static const Value MidgameLimit = Value(15713);
+ static const Value EndgameLimit = Value(4428);
Value npm = non_pawn_material(WHITE) + non_pawn_material(BLACK);