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°: