if ( pos.count<QUEEN>(strongSide)
|| pos.count<ROOK>(strongSide)
+ ||(pos.count<BISHOP>(strongSide) && pos.count<KNIGHT>(strongSide))
|| pos.bishop_pair(strongSide))
result += VALUE_KNOWN_WIN;
Square rsq = relative_square(strongSide, pos.list<ROOK>(strongSide)[0]);
Square psq = relative_square(strongSide, pos.list<PAWN>(weakSide)[0]);
- Square queeningSq = file_of(psq) | RANK_1;
+ Square queeningSq = make_square(file_of(psq), RANK_1);
Value result;
// If the stronger side's king is in front of the pawn, it's a win
if (wksq < psq && file_of(wksq) == file_of(psq))
- result = RookValueEg - Value(square_distance(wksq, psq));
+ result = RookValueEg - square_distance(wksq, psq);
// If the weaker side's king is too far from the pawn and the rook,
// it's a win.
else if ( square_distance(bksq, psq) >= 3 + (pos.side_to_move() == weakSide)
&& square_distance(bksq, rsq) >= 3)
- result = RookValueEg - Value(square_distance(wksq, psq));
+ result = RookValueEg - square_distance(wksq, psq);
// If the pawn is far advanced and supported by the defending king,
// the position is drawish
&& square_distance(bksq, psq) == 1
&& rank_of(wksq) >= RANK_4
&& square_distance(wksq, psq) > 2 + (pos.side_to_move() == strongSide))
- result = Value(80 - square_distance(wksq, psq) * 8);
+ result = Value(80) - 8 * square_distance(wksq, psq);
else
- result = Value(200)
- - Value(square_distance(wksq, psq + DELTA_S) * 8)
- + Value(square_distance(bksq, psq + DELTA_S) * 8)
- + Value(square_distance(psq, queeningSq) * 8);
+ result = Value(200) - 8 * ( square_distance(wksq, psq + DELTA_S)
+ - square_distance(bksq, psq + DELTA_S)
+ - square_distance(psq, queeningSq));
return strongSide == pos.side_to_move() ? result : -result;
}
&& !(pawns & ~file_bb(pawnFile)))
{
Square bishopSq = pos.list<BISHOP>(strongSide)[0];
- Square queeningSq = relative_square(strongSide, pawnFile | RANK_8);
+ Square queeningSq = relative_square(strongSide, make_square(pawnFile, RANK_8));
Square kingSq = pos.king_square(weakSide);
if ( opposite_colors(queeningSq, bishopSq)
File f = file_of(wpsq);
Rank r = rank_of(wpsq);
- Square queeningSq = f | RANK_8;
+ Square queeningSq = make_square(f, RANK_8);
int tempo = (pos.side_to_move() == strongSide);
// If the pawn is not too far advanced and the defending king defends the
if ( r == RANK_6
&& square_distance(bksq, queeningSq) <= 1
&& rank_of(wksq) + tempo <= RANK_6
- && (rank_of(brsq) == RANK_1 || (!tempo && abs(file_of(brsq) - f) >= 3)))
+ && (rank_of(brsq) == RANK_1 || (!tempo && dist(file_of(brsq), f) >= 3)))
return SCALE_FACTOR_DRAW;
if ( r >= RANK_6
{
if (file_of(bksq) == file_of(wpsq))
return ScaleFactor(10);
- if ( abs(file_of(bksq) - file_of(wpsq)) == 1
+ if ( dist(file_of(bksq), file_of(wpsq)) == 1
&& square_distance(wksq, bksq) > 2)
return ScaleFactor(24 - 2 * square_distance(wksq, bksq));
}
if (relative_rank(strongSide, psq1) > relative_rank(strongSide, psq2))
{
blockSq1 = psq1 + pawn_push(strongSide);
- blockSq2 = file_of(psq2) | rank_of(psq1);
+ blockSq2 = make_square(file_of(psq2), rank_of(psq1));
}
else
{
blockSq1 = psq2 + pawn_push(strongSide);
- blockSq2 = file_of(psq1) | rank_of(psq2);
+ blockSq2 = make_square(file_of(psq1), rank_of(psq2));
}
switch (file_distance(psq1, psq2))
&& opposite_colors(ksq, wbsq)
&& ( bbsq == blockSq2
|| (pos.attacks_from<BISHOP>(blockSq2) & pos.pieces(weakSide, BISHOP))
- || abs(r1 - r2) >= 2))
+ || dist(r1, r2) >= 2))
return SCALE_FACTOR_DRAW;
else if ( ksq == blockSq2