diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index c6cca74fb6..a229d3e7e4 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1324,9 +1324,7 @@ DEF_CONSOLE_CMD(ConGetDate) return true; } - YearMonthDay ymd; - ConvertDateToYMD(_date, &ymd); - IConsolePrintF(CC_DEFAULT, "Date: %d-%d-%d", ymd.day, ymd.month + 1, ymd.year); + IConsolePrintF(CC_DEFAULT, "Date: %d-%d-%d", _cur_date_ymd.day, _cur_date_ymd.month + 1, _cur_date_ymd.year); return true; } diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 91114dddda..45a6e6fbb5 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -364,7 +364,7 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last) const YearMonthDay ymd; ConvertDateToYMD(_date, &ymd); - buffer += seprintf(buffer, last, "In game date: %i-%02i-%02i (%i, %i)\n\n", ymd.year, ymd.month + 1, ymd.day, _date_fract, _tick_skip_counter); + buffer += seprintf(buffer, last, "In game date: %i-%02i-%02i (%i, %i)\n\n", _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract, _tick_skip_counter); buffer = this->LogError(buffer, last, CrashLog::message); diff --git a/src/date.cpp b/src/date.cpp index d81c097d81..8e4fe8faa0 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -27,6 +27,7 @@ Year _cur_year; ///< Current year, starting at 0 Month _cur_month; ///< Current month (0..11) +YearMonthDay _cur_date_ymd; ///< Current date as YearMonthDay struct Date _date; ///< Current date in days (day counter) DateFract _date_fract; ///< Fractional part of the day. uint16 _tick_counter; ///< Ever incrementing (and sometimes wrapping) tick counter for setting off various events @@ -51,6 +52,7 @@ void SetDate(Date date, DateFract fract) ConvertDateToYMD(date, &ymd); _cur_year = ymd.year; _cur_month = ymd.month; + _cur_date_ymd = ymd; SetScaledTickVariables(); } @@ -319,6 +321,7 @@ void IncreaseDate() bool new_year = ymd.year != _cur_year; /* update internal variables before calling the daily/monthly/yearly loops */ + _cur_date_ymd = ymd; _cur_month = ymd.month; _cur_year = ymd.year; diff --git a/src/date_func.h b/src/date_func.h index 446739dfa0..a15dadcc6d 100644 --- a/src/date_func.h +++ b/src/date_func.h @@ -16,6 +16,7 @@ extern Year _cur_year; extern Month _cur_month; +extern YearMonthDay _cur_date_ymd; extern Date _date; extern DateFract _date_fract; extern uint16 _tick_counter; diff --git a/src/landscape.cpp b/src/landscape.cpp index 5c62ab3e7b..f632821fe2 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -571,9 +571,7 @@ byte GetSnowLine() { if (_snow_line == NULL) return _settings_game.game_creation.snow_line_height; - YearMonthDay ymd; - ConvertDateToYMD(_date, &ymd); - return _snow_line->table[ymd.month][ymd.day]; + return _snow_line->table[_cur_date_ymd.month][_cur_date_ymd.day]; } /** diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 1c418ef1ba..8f85dc9e87 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5780,10 +5780,8 @@ bool GetGlobalVariable(byte param, uint32 *value, const GRFFile *grffile) return true; case 0x02: { // detailed date information: month of year (bit 0-7), day of month (bit 8-12), leap year (bit 15), day of year (bit 16-24) - YearMonthDay ymd; - ConvertDateToYMD(_date, &ymd); - Date start_of_year = ConvertYMDToDate(ymd.year, 0, 1); - *value = ymd.month | (ymd.day - 1) << 8 | (IsLeapYear(ymd.year) ? 1 << 15 : 0) | (_date - start_of_year) << 16; + Date start_of_year = ConvertYMDToDate(_cur_date_ymd.year, 0, 1); + *value = _cur_date_ymd.month | (_cur_date_ymd.day - 1) << 8 | (IsLeapYear(_cur_date_ymd.year) ? 1 << 15 : 0) | (_date - start_of_year) << 16; return true; } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index ed5e3a3657..681c39f65a 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -849,9 +849,7 @@ static bool LoadOldIndustry(LoadgameState *ls, int num) if (i->type > 0x06) i->type++; // Printing Works were added if (i->type == 0x0A) i->type = 0x12; // Iron Ore Mine has different ID - YearMonthDay ymd; - ConvertDateToYMD(_date, &ymd); - i->last_prod_year = ymd.year; + i->last_prod_year = _cur_date_ymd.year; i->random_colour = RemapTTOColour(i->random_colour); } diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index 04e5ae262b..50ea39e39b 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -146,9 +146,6 @@ struct SubsidyListWindow : Window { { if (widget != WID_SUL_PANEL) return; - YearMonthDay ymd; - ConvertDateToYMD(_date, &ymd); - int right = r.right - WD_FRAMERECT_RIGHT; int y = r.top + WD_FRAMERECT_TOP; int x = r.left + WD_FRAMERECT_LEFT; @@ -167,7 +164,7 @@ struct SubsidyListWindow : Window { if (IsInsideMM(pos, 0, cap)) { /* Displays the two offered towns */ SetupSubsidyDecodeParam(s, true); - SetDParam(7, _date - ymd.day + s->remaining * 32); + SetDParam(7, _date - _cur_date_ymd.day + s->remaining * 32); DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_SUBSIDIES_OFFERED_FROM_TO); } pos++; @@ -191,7 +188,7 @@ struct SubsidyListWindow : Window { if (IsInsideMM(pos, 0, cap)) { SetupSubsidyDecodeParam(s, true); SetDParam(7, s->awarded); - SetDParam(8, _date - ymd.day + s->remaining * 32); + SetDParam(8, _date - _cur_date_ymd.day + s->remaining * 32); /* Displays the two connected stations */ DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_SUBSIDIES_SUBSIDISED_FROM_TO);