diff --git a/src/aircraft.h b/src/aircraft.h index fdf72b12fc..882272bfc6 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -91,6 +91,7 @@ struct Aircraft : public SpecializedVehicle { byte previous_pos; StationID targetairport; byte state; + DirectionByte last_direction; /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Aircraft() : SpecializedVehicle() {} diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 18c14105e4..3baf66116f 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1048,6 +1048,8 @@ static bool AircraftController(Aircraft *v) count = UpdateAircraftSpeed(v, speed_limit, hard_limit); if (count == 0) return false; + if (v->load_unload_time_rem != 0) v->load_unload_time_rem--; + do { GetNewVehiclePosResult gp; @@ -1069,9 +1071,15 @@ static bool AircraftController(Aircraft *v) /* Turn. Do it slowly if in the air. */ Direction newdir = GetDirectionTowards(v, x + amd->x, y + amd->y); if (newdir != v->direction) { - v->direction = newdir; - if (!(amd->flag & AMED_SLOWTURN)) { + if (amd->flag & AMED_SLOWTURN) { + if (v->load_unload_time_rem == 0 || newdir == v->last_direction) { + v->load_unload_time_rem = 8; + v->last_direction = v->direction; + v->direction = newdir; + } + } else { v->cur_speed >>= 1; + v->direction = newdir; } } diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index fa28285966..81260ca629 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -591,9 +591,10 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Aircraft, state, SLE_UINT8), SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION), - /* reserve extra space in savegame here. (currently 15 bytes) */ - SLE_CONDNULL(15, 2, SL_MAX_VERSION), + /* reserve extra space in savegame here. (currently 14 bytes) */ + SLE_CONDNULL(14, 2, SL_MAX_VERSION), SLE_END() };