|  | @@ -160,8 +160,6 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
 | 
											
												
													
														|  |      let king = game.get_piece(KING, side);
 |  |      let king = game.get_piece(KING, side);
 | 
											
												
													
														|  |      let area = north_one(king)
 |  |      let area = north_one(king)
 | 
											
												
													
														|  |               | south_one(king)
 |  |               | south_one(king)
 | 
											
												
													
														|  | -             | east_one(king)
 |  | 
 | 
											
												
													
														|  | -             | west_one(king)
 |  | 
 | 
											
												
													
														|  |               | northeast_one(king)
 |  |               | northeast_one(king)
 | 
											
												
													
														|  |               | northwest_one(king)
 |  |               | northwest_one(king)
 | 
											
												
													
														|  |               | southwest_one(king)
 |  |               | southwest_one(king)
 | 
											
										
											
												
													
														|  | @@ -170,6 +168,8 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
 | 
											
												
													
														|  |      let guards = game.get_all_side(side) & area;
 |  |      let guards = game.get_all_side(side) & area;
 | 
											
												
													
														|  |      let attackers = game.get_all_side(!side) & area;
 |  |      let attackers = game.get_all_side(!side) & area;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    let backrow =  if king & (ROW_1 | ROW_8) != 0 { 50 } else { 0 };
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      let kneighbors = guards.count_ones() as PosValue * 5 - attackers.count_ones() as PosValue * 15;
 |  |      let kneighbors = guards.count_ones() as PosValue * 5 - attackers.count_ones() as PosValue * 15;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      let enemies = game.get_all_side(!side);
 |  |      let enemies = game.get_all_side(!side);
 | 
											
										
											
												
													
														|  | @@ -179,7 +179,7 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
 | 
											
												
													
														|  |      let dang_row_opponents = row_opponents & (ROW_1 | ROW_2 | ROW_7 | ROW_8);
 |  |      let dang_row_opponents = row_opponents & (ROW_1 | ROW_2 | ROW_7 | ROW_8);
 | 
											
												
													
														|  |      let danger_value = (dang_row_opponents.count_ones() * 50) as PosValue;
 |  |      let danger_value = (dang_row_opponents.count_ones() * 50) as PosValue;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    return kneighbors + danger_value;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    return kneighbors + danger_value + backrow;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  fn king_there(game: &Game, side: Side) -> PosValue {
 |  |  fn king_there(game: &Game, side: Side) -> PosValue {
 | 
											
										
											
												
													
														|  | @@ -226,11 +226,25 @@ pub fn game_lateness(game: &Game) -> i32 {
 | 
											
												
													
														|  |      return 0;
 |  |      return 0;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +fn rook_moves(game: &Game, side: Side) -> PosValue {
 | 
											
												
													
														|  | 
 |  | +    let rooks = game.rooks(side);
 | 
											
												
													
														|  | 
 |  | +    let rook_moves = count_sliding_move_bitboard(
 | 
											
												
													
														|  | 
 |  | +        game,
 | 
											
												
													
														|  | 
 |  | +        game.get_all_side(side),
 | 
											
												
													
														|  | 
 |  | +        game.get_all_side(!side),
 | 
											
												
													
														|  | 
 |  | +        rooks,
 | 
											
												
													
														|  | 
 |  | +        true, false,
 | 
											
												
													
														|  | 
 |  | +        false);
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +    return rook_moves as _;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  pub fn late_game_eval(game: &Game) -> PosValue {
 |  |  pub fn late_game_eval(game: &Game) -> PosValue {
 | 
											
												
													
														|  |      let pp = pawn_push_value(game, game.turn) - pawn_push_value(game, !game.turn);
 |  |      let pp = pawn_push_value(game, game.turn) - pawn_push_value(game, !game.turn);
 | 
											
												
													
														|  |      let bp = blocked_pawns(game, game.turn) - blocked_pawns(game, !game.turn);
 |  |      let bp = blocked_pawns(game, game.turn) - blocked_pawns(game, !game.turn);
 | 
											
												
													
														|  | 
 |  | +    let rook_moves = rook_moves(game, game.turn) - rook_moves(game, !game.turn);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    pp + bp
 |  | 
 | 
											
												
													
														|  | 
 |  | +    pp + bp + rook_moves * 3
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  pub fn pawn_push_value(game: &Game, side: Side) -> PosValue {
 |  |  pub fn pawn_push_value(game: &Game, side: Side) -> PosValue {
 |