51 #define M(a, b) ((a << 5) | b) 52 static const uint16 _month_date_from_year_day[] = {
53 M( 0, 1), M( 0, 2), M( 0, 3), M( 0, 4), M( 0, 5), M( 0, 6), M( 0, 7), M( 0, 8), M( 0, 9), M( 0, 10), M( 0, 11), M( 0, 12), M( 0, 13), M( 0, 14), M( 0, 15), M( 0, 16), M( 0, 17), M( 0, 18), M( 0, 19), M( 0, 20), M( 0, 21), M( 0, 22), M( 0, 23), M( 0, 24), M( 0, 25), M( 0, 26), M( 0, 27), M( 0, 28), M( 0, 29), M( 0, 30), M( 0, 31),
54 M( 1, 1), M( 1, 2), M( 1, 3), M( 1, 4), M( 1, 5), M( 1, 6), M( 1, 7), M( 1, 8), M( 1, 9), M( 1, 10), M( 1, 11), M( 1, 12), M( 1, 13), M( 1, 14), M( 1, 15), M( 1, 16), M( 1, 17), M( 1, 18), M( 1, 19), M( 1, 20), M( 1, 21), M( 1, 22), M( 1, 23), M( 1, 24), M( 1, 25), M( 1, 26), M( 1, 27), M( 1, 28), M( 1, 29),
55 M( 2, 1), M( 2, 2), M( 2, 3), M( 2, 4), M( 2, 5), M( 2, 6), M( 2, 7), M( 2, 8), M( 2, 9), M( 2, 10), M( 2, 11), M( 2, 12), M( 2, 13), M( 2, 14), M( 2, 15), M( 2, 16), M( 2, 17), M( 2, 18), M( 2, 19), M( 2, 20), M( 2, 21), M( 2, 22), M( 2, 23), M( 2, 24), M( 2, 25), M( 2, 26), M( 2, 27), M( 2, 28), M( 2, 29), M( 2, 30), M( 2, 31),
56 M( 3, 1), M( 3, 2), M( 3, 3), M( 3, 4), M( 3, 5), M( 3, 6), M( 3, 7), M( 3, 8), M( 3, 9), M( 3, 10), M( 3, 11), M( 3, 12), M( 3, 13), M( 3, 14), M( 3, 15), M( 3, 16), M( 3, 17), M( 3, 18), M( 3, 19), M( 3, 20), M( 3, 21), M( 3, 22), M( 3, 23), M( 3, 24), M( 3, 25), M( 3, 26), M( 3, 27), M( 3, 28), M( 3, 29), M( 3, 30),
57 M( 4, 1), M( 4, 2), M( 4, 3), M( 4, 4), M( 4, 5), M( 4, 6), M( 4, 7), M( 4, 8), M( 4, 9), M( 4, 10), M( 4, 11), M( 4, 12), M( 4, 13), M( 4, 14), M( 4, 15), M( 4, 16), M( 4, 17), M( 4, 18), M( 4, 19), M( 4, 20), M( 4, 21), M( 4, 22), M( 4, 23), M( 4, 24), M( 4, 25), M( 4, 26), M( 4, 27), M( 4, 28), M( 4, 29), M( 4, 30), M( 4, 31),
58 M( 5, 1), M( 5, 2), M( 5, 3), M( 5, 4), M( 5, 5), M( 5, 6), M( 5, 7), M( 5, 8), M( 5, 9), M( 5, 10), M( 5, 11), M( 5, 12), M( 5, 13), M( 5, 14), M( 5, 15), M( 5, 16), M( 5, 17), M( 5, 18), M( 5, 19), M( 5, 20), M( 5, 21), M( 5, 22), M( 5, 23), M( 5, 24), M( 5, 25), M( 5, 26), M( 5, 27), M( 5, 28), M( 5, 29), M( 5, 30),
59 M( 6, 1), M( 6, 2), M( 6, 3), M( 6, 4), M( 6, 5), M( 6, 6), M( 6, 7), M( 6, 8), M( 6, 9), M( 6, 10), M( 6, 11), M( 6, 12), M( 6, 13), M( 6, 14), M( 6, 15), M( 6, 16), M( 6, 17), M( 6, 18), M( 6, 19), M( 6, 20), M( 6, 21), M( 6, 22), M( 6, 23), M( 6, 24), M( 6, 25), M( 6, 26), M( 6, 27), M( 6, 28), M( 6, 29), M( 6, 30), M( 6, 31),
60 M( 7, 1), M( 7, 2), M( 7, 3), M( 7, 4), M( 7, 5), M( 7, 6), M( 7, 7), M( 7, 8), M( 7, 9), M( 7, 10), M( 7, 11), M( 7, 12), M( 7, 13), M( 7, 14), M( 7, 15), M( 7, 16), M( 7, 17), M( 7, 18), M( 7, 19), M( 7, 20), M( 7, 21), M( 7, 22), M( 7, 23), M( 7, 24), M( 7, 25), M( 7, 26), M( 7, 27), M( 7, 28), M( 7, 29), M( 7, 30), M( 7, 31),
61 M( 8, 1), M( 8, 2), M( 8, 3), M( 8, 4), M( 8, 5), M( 8, 6), M( 8, 7), M( 8, 8), M( 8, 9), M( 8, 10), M( 8, 11), M( 8, 12), M( 8, 13), M( 8, 14), M( 8, 15), M( 8, 16), M( 8, 17), M( 8, 18), M( 8, 19), M( 8, 20), M( 8, 21), M( 8, 22), M( 8, 23), M( 8, 24), M( 8, 25), M( 8, 26), M( 8, 27), M( 8, 28), M( 8, 29), M( 8, 30),
62 M( 9, 1), M( 9, 2), M( 9, 3), M( 9, 4), M( 9, 5), M( 9, 6), M( 9, 7), M( 9, 8), M( 9, 9), M( 9, 10), M( 9, 11), M( 9, 12), M( 9, 13), M( 9, 14), M( 9, 15), M( 9, 16), M( 9, 17), M( 9, 18), M( 9, 19), M( 9, 20), M( 9, 21), M( 9, 22), M( 9, 23), M( 9, 24), M( 9, 25), M( 9, 26), M( 9, 27), M( 9, 28), M( 9, 29), M( 9, 30), M( 9, 31),
63 M(10, 1), M(10, 2), M(10, 3), M(10, 4), M(10, 5), M(10, 6), M(10, 7), M(10, 8), M(10, 9), M(10, 10), M(10, 11), M(10, 12), M(10, 13), M(10, 14), M(10, 15), M(10, 16), M(10, 17), M(10, 18), M(10, 19), M(10, 20), M(10, 21), M(10, 22), M(10, 23), M(10, 24), M(10, 25), M(10, 26), M(10, 27), M(10, 28), M(10, 29), M(10, 30),
64 M(11, 1), M(11, 2), M(11, 3), M(11, 4), M(11, 5), M(11, 6), M(11, 7), M(11, 8), M(11, 9), M(11, 10), M(11, 11), M(11, 12), M(11, 13), M(11, 14), M(11, 15), M(11, 16), M(11, 17), M(11, 18), M(11, 19), M(11, 20), M(11, 21), M(11, 22), M(11, 23), M(11, 24), M(11, 25), M(11, 26), M(11, 27), M(11, 28), M(11, 29), M(11, 30), M(11, 31),
70 ACCUM_FEB = ACCUM_JAN + 31,
71 ACCUM_MAR = ACCUM_FEB + 29,
72 ACCUM_APR = ACCUM_MAR + 31,
73 ACCUM_MAY = ACCUM_APR + 30,
74 ACCUM_JUN = ACCUM_MAY + 31,
75 ACCUM_JUL = ACCUM_JUN + 30,
76 ACCUM_AUG = ACCUM_JUL + 31,
77 ACCUM_SEP = ACCUM_AUG + 31,
78 ACCUM_OCT = ACCUM_SEP + 30,
79 ACCUM_NOV = ACCUM_OCT + 31,
80 ACCUM_DEC = ACCUM_NOV + 30,
85 ACCUM_JAN, ACCUM_FEB, ACCUM_MAR, ACCUM_APR,
86 ACCUM_MAY, ACCUM_JUN, ACCUM_JUL, ACCUM_AUG,
87 ACCUM_SEP, ACCUM_OCT, ACCUM_NOV, ACCUM_DEC,
135 if (!
IsLeapYear(yr) && rem >= ACCUM_MAR - 1) rem++;
139 x = _month_date_from_year_day[rem];
156 if (!
IsLeapYear(year) && days >= ACCUM_MAR) days--;
164 extern void DisasterDailyLoop();
169 extern void TownsMonthlyLoop();
170 extern void IndustryMonthlyLoop();
175 extern void VehiclesYearlyLoop();
176 extern void TownsYearlyLoop();
196 VehiclesYearlyLoop();
212 _date -= days_this_year;
238 IndustryMonthlyLoop();
249 if (!_newgrf_profilers.empty() && _newgrf_profile_end_date <=
_date) {
250 NewGRFProfiler::FinishAll();
274 if (_game_mode == GM_MENU)
return;
void CompaniesYearlyLoop()
A year has passed, update the economic data of all companies, and perhaps show the financial overview...
GameSettings _settings_game
Game settings of a running game or the scenario editor.
void IncreaseDate()
Increases the tick counter, increases date and possibly calls procedures that have to be called daily...
static const int DAYS_IN_YEAR
days per year
Profiling of NewGRF action 2 handling.
void SetWindowDirty(WindowClass cls, WindowNumber number)
Mark window as dirty (in need of repainting)
void StationMonthlyLoop()
Monthly loop for stations.
Functions related to dates.
Functions to handle different currencies.
void CompaniesMonthlyLoop()
Monthly update of the economic data (of the companies as well as economic fluctuations).
static void OnNewYear()
Runs various procedures that have to be done yearly.
static const int DAY_TICKS
1 day is 74 ticks; _date_fract used to be uint16 and incremented by 885.
int32 Year
Type for the year, note: 0 based, i.e. starts at the year 0.
Year _cur_year
Current year, starting at 0.
void NetworkServerDailyLoop()
Daily "callback".
int32 _old_ending_year_slv_105
Old ending year for savegames before SLV_105.
A connected component of a link graph.
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
void SetDate(Date date, DateFract fract)
Set the date.
Functions/types related to saving and loading games.
DateFract _date_fract
Fractional part of the day.
bool auto_euro
automatically switch to euro in 2002
ClientSettings _settings_client
The current settings for this game.
Types related to global configuration settings.
void NetworkServerYearlyLoop()
Yearly "callback".
Definition of base types and functions in a cross-platform compatible way.
Data structure to convert between Date and triplet (year, month, and day).
A number of safeguards to prevent using unsafe methods.
bool ResetSignalVariant(int32 p)
Updates the current signal variant used in the signal GUI to the one adequate to current year...
Year semaphore_build_before
build semaphore signals automatically before this year
uint16 DateFract
The fraction of a date we're in, i.e. the number of ticks since the last date changeover.
#define DAYS_TILL(year)
Calculate the date of the first day of a given year.
Basic functions/variables used all over the place.
Build station; Window numbers:
uint8 Month
Type for the month, note: 0 based, i.e. 0 = January, 11 = December.
static bool IsLeapYear(Year yr)
Checks whether the given year is a leap year or not.
void CheckSwitchToEuro()
Verify if the currency chosen by the user is about to be converted to Euro.
Month _cur_month
Current month (0..11)
uint16 _tick_counter
Ever incrementing (and sometimes wrapping) tick counter for setting off various events.
void ShowEndGameChart()
Show the endgame victory screen in 2050.
void NetworkInitChatMessage()
Initialize all buffers of the chat visualisation.
static const uint16 _accum_days_for_month[]
Number of days to pass from the first day in the year before reaching the first of a month...
static void OnNewDay()
Runs various procedures that have to be done daily.
static void OnNewMonth()
Runs various procedures that have to be done monthly.
GUISettings gui
settings related to the GUI
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Cheat window; Window numbers:
void SetWindowWidgetDirty(WindowClass cls, WindowNumber number, byte widget_index)
Mark a particular widget in a particular window as dirty (in need of repainting)
Base class for all vehicles.
Town view; Window numbers:
static const Month _autosave_months[]
Available settings for autosave intervals.
uint8 Day
Type for the day of the month, note: 1 based, first day of a month is 1.
Statusbar (at the bottom of your screen); Window numbers:
Network functions used by other parts of OpenTTD.
bool _network_server
network-server is active
void SubsidyMonthlyLoop()
Perform the monthly update of open subsidies, and try to create a new one.
void IndustryDailyLoop()
Daily handler for the industry changes Taking the original map size of 256*256, the number of random ...
Declaration of link graph classes used for cargo distribution.
int32 Date
The type to store our dates in.
void NetworkServerMonthlyLoop()
Monthly "callback".
GameCreationSettings game_creation
settings used during the creation of a game (map)
Date ConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
Window functions not directly related to making/drawing windows.
void SetWindowClassesDirty(WindowClass cls)
Mark all windows of a particular class as dirty (in need of repainting)
Date _date
Current date in days (day counter)
void ConvertDateToYMD(Date date, YearMonthDay *ymd)
Converts a Date to a Year, Month & Day.
void EnginesMonthlyLoop()
Monthly update of the availability, reliability, and preview offers of the engines.
byte autosave
how often should we do autosaves?
static const Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date...
bool _do_autosave
are we doing an autosave at the moment?
void EnginesDailyLoop()
Functions used by the IncreaseDate function.
static const int DAYS_IN_LEAP_YEAR
sometimes, you need one day more...
Year ending_year
scoring end date