48 #define M(a, b) ((a << 5) | b) 49 static const uint16 _month_date_from_year_day[] = {
50 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),
51 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),
52 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),
53 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),
54 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),
55 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),
56 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),
57 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),
58 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),
59 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),
60 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),
61 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),
67 ACCUM_FEB = ACCUM_JAN + 31,
68 ACCUM_MAR = ACCUM_FEB + 29,
69 ACCUM_APR = ACCUM_MAR + 31,
70 ACCUM_MAY = ACCUM_APR + 30,
71 ACCUM_JUN = ACCUM_MAY + 31,
72 ACCUM_JUL = ACCUM_JUN + 30,
73 ACCUM_AUG = ACCUM_JUL + 31,
74 ACCUM_SEP = ACCUM_AUG + 31,
75 ACCUM_OCT = ACCUM_SEP + 30,
76 ACCUM_NOV = ACCUM_OCT + 31,
77 ACCUM_DEC = ACCUM_NOV + 30,
82 ACCUM_JAN, ACCUM_FEB, ACCUM_MAR, ACCUM_APR,
83 ACCUM_MAY, ACCUM_JUN, ACCUM_JUL, ACCUM_AUG,
84 ACCUM_SEP, ACCUM_OCT, ACCUM_NOV, ACCUM_DEC,
132 if (!
IsLeapYear(yr) && rem >= ACCUM_MAR - 1) rem++;
136 x = _month_date_from_year_day[rem];
153 if (!
IsLeapYear(year) && days >= ACCUM_MAR) days--;
161 extern void DisasterDailyLoop();
166 extern void TownsMonthlyLoop();
167 extern void IndustryMonthlyLoop();
172 extern void VehiclesYearlyLoop();
173 extern void TownsYearlyLoop();
193 VehiclesYearlyLoop();
209 _date -= days_this_year;
235 IndustryMonthlyLoop();
267 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...
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
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".
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".
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...
static const Year ORIGINAL_END_YEAR
The original ending year.