EXE = stockfish
-OBJS = bitboard.o pawns.o material.o endgame.o evaluate.o main.o \
+OBJS = application.o bitboard.o pawns.o material.o endgame.o evaluate.o main.o \
misc.o move.o movegen.o history.o movepick.o search.o piece.o \
position.o direction.o tt.o value.o uci.o ucioption.o \
mersenne.o book.o bitbase.o san.o benchmark.o
ei.egMobility += Sign[us] * EgBonus[Piece][mob];
// Bishop and Knight outposts
- if ( (Piece != BISHOP && Piece != KNIGHT) // compile time condition
- || !p.square_is_weak(s, them))
- return mob;
-
- // Initial bonus based on square
- Value v, bonus;
- v = bonus = OutpostBonus[Piece][relative_square(us, s)];
-
- // Increase bonus if supported by pawn, especially if the opponent has
- // no minor piece which can exchange the outpost piece
- if (v && (p.pawn_attacks(them, s) & p.pawns(us)))
+ if ( (Piece == BISHOP || Piece == KNIGHT) // compile time condition
+ && p.square_is_weak(s, them))
{
- bonus += v / 2;
- if ( p.piece_count(them, KNIGHT) == 0
- && (SquaresByColorBB[square_color(s)] & p.bishops(them)) == EmptyBoardBB)
- bonus += v;
+ // Initial bonus based on square
+ Value v, bonus;
+ v = bonus = OutpostBonus[Piece][relative_square(us, s)];
+
+ // Increase bonus if supported by pawn, especially if the opponent has
+ // no minor piece which can exchange the outpost piece
+ if (v && (p.pawn_attacks(them, s) & p.pawns(us)))
+ {
+ bonus += v / 2;
+ if ( p.piece_count(them, KNIGHT) == 0
+ && (SquaresByColorBB[square_color(s)] & p.bishops(them)) == EmptyBoardBB)
+ bonus += v;
+ }
+ ei.mgValue += Sign[us] * bonus;
+ ei.egValue += Sign[us] * bonus;
}
- ei.mgValue += Sign[us] * bonus;
- ei.egValue += Sign[us] * bonus;
return mob;
}
// Direct checks
b = target & ~dc;
- if (Piece == KING || !b)
- return mlist;
-
- Bitboard checkSqs = pos.piece_attacks<Piece>(ksq) & pos.empty_squares();
- if (!checkSqs)
- return mlist;
-
- while (b)
+ if (Piece != KING || b)
{
- Square from = pop_1st_bit(&b);
- if ( (Piece == QUEEN && !(QueenPseudoAttacks[from] & checkSqs))
- || (Piece == ROOK && !(RookPseudoAttacks[from] & checkSqs))
- || (Piece == BISHOP && !(BishopPseudoAttacks[from] & checkSqs)))
- continue;
+ Bitboard checkSqs = pos.piece_attacks<Piece>(ksq) & pos.empty_squares();
+ if (!checkSqs)
+ return mlist;
- Bitboard bb = pos.piece_attacks<Piece>(from) & checkSqs;
- SERIALIZE_MOVES(bb);
+ while (b)
+ {
+ Square from = pop_1st_bit(&b);
+ if ( (Piece == QUEEN && !(QueenPseudoAttacks[from] & checkSqs))
+ || (Piece == ROOK && !(RookPseudoAttacks[from] & checkSqs))
+ || (Piece == BISHOP && !(BishopPseudoAttacks[from] & checkSqs)))
+ continue;
+
+ Bitboard bb = pos.piece_attacks<Piece>(from) & checkSqs;
+ SERIALIZE_MOVES(bb);
+ }
}
return mlist;
}