diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 80b45ba75b..94209e36e2 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -404,7 +404,7 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, if (timetable_all && !v->orders.list->IsCompleteTimetable()) return CMD_ERROR; const DateTicksScaled now = _scaled_date_ticks; - DateTicksScaled start_date_scaled = (_settings_game.economy.day_length_factor * (((DateTicks)_date * DAY_TICKS) + _date_fract + (DateTicks)(int32)p2)) + sub_ticks; + DateTicksScaled start_date_scaled = (_settings_game.economy.day_length_factor * (((DateTicksScaled)_date * DAY_TICKS) + _date_fract + (DateTicksScaled)(int32)p2)) + sub_ticks; if (flags & DC_EXEC) { SmallVector vehs; @@ -834,7 +834,7 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling) just_started = !HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED); if (v->timetable_start != 0) { - v->lateness_counter = _scaled_date_ticks - ((_settings_game.economy.day_length_factor * v->timetable_start) + v->timetable_start_subticks); + v->lateness_counter = _scaled_date_ticks - ((_settings_game.economy.day_length_factor * ((DateTicksScaled) v->timetable_start)) + v->timetable_start_subticks); v->timetable_start = 0; v->timetable_start_subticks = 0; } diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 525dcea58d..9de31f19da 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -591,7 +591,7 @@ struct TimetableWindow : Window { /* We are running towards the first station so we can start the * timetable at the given time. */ SetDParam(0, STR_JUST_DATE_WALLCLOCK_TINY); - SetDParam(1, (v->timetable_start * _settings_game.economy.day_length_factor) + v->timetable_start_subticks); + SetDParam(1, (((DateTicksScaled) v->timetable_start) * _settings_game.economy.day_length_factor) + v->timetable_start_subticks); DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_TIMETABLE_STATUS_START_AT); } else if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) { /* We aren't running on a timetable yet, so how can we be "on time" @@ -937,12 +937,12 @@ struct TimetableWindow : Window { if (val >= 0 && end && *end == 0) { uint minutes = (val % 100) % 60; uint hours = (val / 100) % 24; - val = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes); - val -= _settings_client.gui.clock_offset; + DateTicksScaled time = MINUTES_DATE(MINUTES_DAY(CURRENT_MINUTE), hours, minutes); + time -= _settings_client.gui.clock_offset; - if (val < (CURRENT_MINUTE - 60)) val += 60 * 24; - val *= _settings_client.gui.ticks_per_minute; - ChangeTimetableStartIntl(v->index | (this->set_start_date_all ? 1 << 20 : 0), val); + if (time < (CURRENT_MINUTE - 60)) time += 60 * 24; + time *= _settings_client.gui.ticks_per_minute; + ChangeTimetableStartIntl(v->index | (this->set_start_date_all ? 1 << 20 : 0), time); } break; }