/// must be passed as a parameter.
struct StateInfo {
- Bitboard pinners[2], pinned[2], dcCandidates[2], checkersBB;
Key key, pawnKey, materialKey;
int castleRights, rule50;
Square epSquare;
Value mgValue, egValue;
+
PieceType capture;
- StateInfo* previous;
+ Bitboard checkersBB;
Move lastMove;
+ StateInfo* previous;
};
// Properties of moves
bool pl_move_is_legal(Move m) const;
+ bool pl_move_is_legal(Move m, Bitboard pinned) const;
bool move_is_check(Move m) const;
+ bool move_is_check(Move m, Bitboard dcCandidates) const;
bool move_is_capture(Move m) const;
bool move_is_deep_pawn_push(Move m) const;
bool move_is_pawn_push_to_7th(Move m) const;
bool square_is_weak(Square s, Color c) const;
// Doing and undoing moves
+ void setStartState(const StateInfo& st);
void do_move(Move m, StateInfo& st);
+ void do_move(Move m, StateInfo& st, Bitboard dcCandidates);
void undo_move(Move m);
void do_null_move(StateInfo& st);
void undo_null_move();
static void init_piece_square_tables();
private:
+
// Initialization helper functions (used while setting up a position)
void clear();
void put_piece(Piece p, Square s);
void allow_ooo(Color c);
// Helper functions for doing and undoing moves
- void init_new_state(StateInfo& newSt);
void do_capture_move(Move m, PieceType capture, Color them, Square to);
void do_castle_move(Move m);
void do_promotion_move(Move m);
void undo_promotion_move(Move m);
void undo_ep_move(Move m);
void find_checkers();
- void find_pinned();
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;
return StepAttackBB[KING][s];
}
-inline Bitboard Position::pinned_pieces(Color c) const {
- return st->pinned[c];
-}
-
-inline Bitboard Position::pinned_pieces(Color c, Bitboard& p) const {
- p = st->pinners[c];
- return st->pinned[c];
-}
-
-inline Bitboard Position::discovered_check_candidates(Color c) const {
- return st->dcCandidates[c];
-}
-
inline Bitboard Position::checkers() const {
return st->checkersBB;
}
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);