Range
A projectile's range is calculated in battle_projectile_calcs
at 0x0061E8EF
.
It depends only the ship's relative angle to the wind at the time of firing, and disregards the relative angle of the projectile to the wind.
The formula is defined as:
def calc_max_distance(ship_direction: int, wind_direction: int):
relative_angle = wind_direction - ship_direction
if relative_angle >= 0x80:
bonus_range_factor = 0xc0 - relative_angle
else:
bonus_range_factor = relative_angle - 0x40
return bonus_range_factor * 4320 // 3200 + 480
It causes the following range spread:
The following screenshots showcase the impact of 0°, 90°, 180° and 270°: