- // King attack and mobility
- int mob = evaluate_common(p, b, us, ei, RookAttackWeight,
- MidgameRookMobilityBonus, EndgameRookMobilityBonus);
-
- // Penalize rooks which are trapped inside a king which has lost the
- // right to castle:
- if(mob <= 6 && !ei.pi->file_is_half_open(us, f)) {
- Square ksq = p.king_square(us);
- if(square_file(ksq) >= FILE_E && square_file(s) > square_file(ksq) &&
- (pawn_rank(us, ksq) == RANK_1 || square_rank(ksq) == square_rank(s))) {
- // Is there a half-open file between the king and the edge of the
- // board?
- if(!(ei.pi->has_open_file_to_right(us, square_file(ksq)))) {
- ei.mgValue -= p.can_castle(us)?
- Sign[us] * ((TrappedRookPenalty - mob * 16) / 2) :
- Sign[us] * (TrappedRookPenalty - mob * 16);
- }
- }
- else if(square_file(ksq) <= FILE_D && square_file(s) < square_file(ksq)
- && (pawn_rank(us, ksq) == RANK_1 ||
- square_rank(ksq) == square_rank(s))) {
- // Is there a half-open file between the king and the edge of the
- // board?
- if(!(ei.pi->has_open_file_to_left(us, square_file(ksq)))) {
- ei.mgValue -= p.can_castle(us)?
- Sign[us] * ((TrappedRookPenalty - mob * 16) / 2) :
- Sign[us] * (TrappedRookPenalty - mob * 16);
- }
- }
+ if ( square_file(ksq) >= FILE_E
+ && square_file(s) > square_file(ksq)
+ && (relative_rank(us, ksq) == RANK_1 || square_rank(ksq) == square_rank(s)))
+ {
+ // Is there a half-open file between the king and the edge of the board?
+ if (!ei.pi->has_open_file_to_right(us, square_file(ksq)))
+ ei.mgValue -= p.can_castle(us)? Sign[us] * ((TrappedRookPenalty - mob * 16) / 2)
+ : Sign[us] * (TrappedRookPenalty - mob * 16);
+ }
+ else if ( square_file(ksq) <= FILE_D
+ && square_file(s) < square_file(ksq)
+ && (relative_rank(us, ksq) == RANK_1 || square_rank(ksq) == square_rank(s)))
+ {
+ // Is there a half-open file between the king and the edge of the board?
+ if (!ei.pi->has_open_file_to_left(us, square_file(ksq)))
+ ei.mgValue -= p.can_castle(us)? Sign[us] * ((TrappedRookPenalty - mob * 16) / 2)
+ : Sign[us] * (TrappedRookPenalty - mob * 16);