diff --git a/src/date.cpp b/src/date.cpp index c08660924f..d81c097d81 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -21,6 +21,7 @@ #include "linkgraph/linkgraph.h" #include "saveload/saveload.h" #include "console_func.h" +#include "debug.h" #include "safeguards.h" @@ -32,6 +33,7 @@ uint16 _tick_counter; ///< Ever incrementing (and sometimes wrapping) tick coun uint8 _tick_skip_counter; ///< Counter for ticks, when only vehicles are moving and nothing else happens uint32 _scaled_tick_counter; ///< Tick counter in daylength-scaled ticks DateTicksScaled _scaled_date_ticks; ///< Date as ticks in daylength-scaled ticks +uint32 _quit_after_days; ///< Quit after this many days of run time /** * Set the date. @@ -280,6 +282,13 @@ static void OnNewDay() /* Refresh after possible snowline change */ SetWindowClassesDirty(WC_TOWN_VIEW); IConsoleCmdExec("exec scripts/on_newday.scr 0"); + + if (_quit_after_days > 0) { + if (--_quit_after_days == 0) { + DEBUG(misc, 0, "Quitting as day limit reached"); + _exit_game = true; + } + } } /** diff --git a/src/date_func.h b/src/date_func.h index 3825938c1f..446739dfa0 100644 --- a/src/date_func.h +++ b/src/date_func.h @@ -22,6 +22,7 @@ extern uint16 _tick_counter; extern uint8 _tick_skip_counter; extern uint32 _scaled_tick_counter; extern DateTicksScaled _scaled_date_ticks; +extern uint32 _quit_after_days; void SetDate(Date date, DateFract fract); void ConvertDateToYMD(Date date, YearMonthDay *ymd); diff --git a/src/openttd.cpp b/src/openttd.cpp index ce03275273..3e6542d23f 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -569,6 +569,7 @@ static const OptionData _options[] = { GETOPT_SHORT_NOVAL('x'), GETOPT_SHORT_VALUE('q'), GETOPT_SHORT_NOVAL('h'), + GETOPT_SHORT_VALUE('J'), GETOPT_END() }; @@ -717,6 +718,7 @@ int openttd_main(int argc, char *argv[]) case 'G': scanner->generation_seed = atoi(mgo.opt); break; case 'c': free(_config_file); _config_file = stredup(mgo.opt); break; case 'x': scanner->save_config = false; break; + case 'J': _quit_after_days = Clamp(atoi(mgo.opt), 0, INT_MAX); break; case 'h': i = -2; // Force printing of help. break;