Merge branch 'day_length-sx' into jgrpp
Conflicts: src/lang/english.txt src/saveload/extended_ver_sl.cpp src/saveload/extended_ver_sl.h src/timetable_cmd.cpp
This commit is contained in:
@@ -28,6 +28,7 @@ Month _cur_month; ///< Current month (0..11)
|
|||||||
Date _date; ///< Current date in days (day counter)
|
Date _date; ///< Current date in days (day counter)
|
||||||
DateFract _date_fract; ///< Fractional part of the day.
|
DateFract _date_fract; ///< Fractional part of the day.
|
||||||
uint16 _tick_counter; ///< Ever incrementing (and sometimes wrapping) tick counter for setting off various events
|
uint16 _tick_counter; ///< Ever incrementing (and sometimes wrapping) tick counter for setting off various events
|
||||||
|
uint8 _tick_skip_counter; ///< Counter for ticks, when only vehicles are moving and nothing else happens
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the date.
|
* Set the date.
|
||||||
|
@@ -19,6 +19,7 @@ extern Month _cur_month;
|
|||||||
extern Date _date;
|
extern Date _date;
|
||||||
extern DateFract _date_fract;
|
extern DateFract _date_fract;
|
||||||
extern uint16 _tick_counter;
|
extern uint16 _tick_counter;
|
||||||
|
extern uint8 _tick_skip_counter;
|
||||||
|
|
||||||
void SetDate(Date date, DateFract fract);
|
void SetDate(Date date, DateFract fract);
|
||||||
void ConvertDateToYMD(Date date, YearMonthDay *ymd);
|
void ConvertDateToYMD(Date date, YearMonthDay *ymd);
|
||||||
|
@@ -1590,6 +1590,8 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of l
|
|||||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage of income given to the intermediate legs in feeder systems, giving more control over the income
|
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage of income given to the intermediate legs in feeder systems, giving more control over the income
|
||||||
STR_CONFIG_SETTING_SIMULATE_SIGNALS :Simulate signals in tunnels, bridges every: {STRING2}
|
STR_CONFIG_SETTING_SIMULATE_SIGNALS :Simulate signals in tunnels, bridges every: {STRING2}
|
||||||
STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE :{COMMA} tile{P 0 "" s}
|
STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE :{COMMA} tile{P 0 "" s}
|
||||||
|
STR_CONFIG_SETTING_DAY_LENGTH_FACTOR :Day length factor: {STRING2}
|
||||||
|
STR_CONFIG_SETTING_DAY_LENGTH_FACTOR_HELPTEXT :Game pace is slowed by this factor
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :When dragging, place signals every: {STRING2}
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :When dragging, place signals every: {STRING2}
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Set the distance at which signals will be built on a track up to the next obstacle (signal, junction), if signals are dragged
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Set the distance at which signals will be built on a track up to the next obstacle (signal, junction), if signals are dragged
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tile{P 0 "" s}
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tile{P 0 "" s}
|
||||||
|
@@ -63,6 +63,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin
|
|||||||
_pause_mode = PM_UNPAUSED;
|
_pause_mode = PM_UNPAUSED;
|
||||||
_fast_forward = 0;
|
_fast_forward = 0;
|
||||||
_tick_counter = 0;
|
_tick_counter = 0;
|
||||||
|
_tick_skip_counter = 0;
|
||||||
_cur_tileloop_tile = 1;
|
_cur_tileloop_tile = 1;
|
||||||
_thd.redsq = INVALID_TILE;
|
_thd.redsq = INVALID_TILE;
|
||||||
if (reset_settings) MakeNewgameSettingsLive();
|
if (reset_settings) MakeNewgameSettingsLive();
|
||||||
|
@@ -1394,11 +1394,17 @@ void StateGameLoop()
|
|||||||
Backup<CompanyByte> cur_company(_current_company, OWNER_NONE, FILE_LINE);
|
Backup<CompanyByte> cur_company(_current_company, OWNER_NONE, FILE_LINE);
|
||||||
|
|
||||||
BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP);
|
BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP);
|
||||||
|
_tick_skip_counter++;
|
||||||
|
if (_tick_skip_counter < _settings_game.economy.day_length_factor) {
|
||||||
|
CallVehicleTicks();
|
||||||
|
} else {
|
||||||
|
_tick_skip_counter = 0;
|
||||||
AnimateAnimatedTiles();
|
AnimateAnimatedTiles();
|
||||||
IncreaseDate();
|
IncreaseDate();
|
||||||
RunTileLoop();
|
RunTileLoop();
|
||||||
CallVehicleTicks();
|
CallVehicleTicks();
|
||||||
CallLandscapeTick();
|
CallLandscapeTick();
|
||||||
|
}
|
||||||
BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP);
|
BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP);
|
||||||
|
|
||||||
#ifndef DEBUG_DUMP_COMMANDS
|
#ifndef DEBUG_DUMP_COMMANDS
|
||||||
|
@@ -59,6 +59,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_VEHICLE_REPAIR_COST, XSCF_NULL, 1, 1, "vehicle_repair_cost", NULL, NULL, NULL },
|
{ XSLFI_VEHICLE_REPAIR_COST, XSCF_NULL, 1, 1, "vehicle_repair_cost", NULL, NULL, NULL },
|
||||||
{ XSLFI_ENH_VIEWPORT_PLANS, XSCF_IGNORABLE_ALL, 1, 1, "enh_viewport_plans", NULL, NULL, "PLAN,PLLN" },
|
{ XSLFI_ENH_VIEWPORT_PLANS, XSCF_IGNORABLE_ALL, 1, 1, "enh_viewport_plans", NULL, NULL, "PLAN,PLLN" },
|
||||||
{ XSLFI_INFRA_SHARING, XSCF_NULL, 1, 1, "infra_sharing", NULL, NULL, NULL },
|
{ XSLFI_INFRA_SHARING, XSCF_NULL, 1, 1, "infra_sharing", NULL, NULL, NULL },
|
||||||
|
{ XSLFI_VARIABLE_DAY_LENGTH, XSCF_NULL, 1, 1, "variable_day_length", NULL, NULL, NULL },
|
||||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -34,6 +34,7 @@ enum SlXvFeatureIndex {
|
|||||||
XSLFI_VEHICLE_REPAIR_COST, ///< Vehicle repair costs patch
|
XSLFI_VEHICLE_REPAIR_COST, ///< Vehicle repair costs patch
|
||||||
XSLFI_ENH_VIEWPORT_PLANS, ///< Enhanced viewport patch: plans
|
XSLFI_ENH_VIEWPORT_PLANS, ///< Enhanced viewport patch: plans
|
||||||
XSLFI_INFRA_SHARING, ///< Infrastructure sharing patch
|
XSLFI_INFRA_SHARING, ///< Infrastructure sharing patch
|
||||||
|
XSLFI_VARIABLE_DAY_LENGTH, ///< Variable day length patch
|
||||||
|
|
||||||
XSLFI_SIZE, ///< Total count of features, including null feature
|
XSLFI_SIZE, ///< Total count of features, including null feature
|
||||||
};
|
};
|
||||||
|
@@ -75,6 +75,7 @@ static const SaveLoadGlobVarList _date_desc[] = {
|
|||||||
SLEG_CONDVAR(_date, SLE_INT32, 31, SL_MAX_VERSION),
|
SLEG_CONDVAR(_date, SLE_INT32, 31, SL_MAX_VERSION),
|
||||||
SLEG_VAR(_date_fract, SLE_UINT16),
|
SLEG_VAR(_date_fract, SLE_UINT16),
|
||||||
SLEG_VAR(_tick_counter, SLE_UINT16),
|
SLEG_VAR(_tick_counter, SLE_UINT16),
|
||||||
|
SLEG_CONDVAR_X(_tick_skip_counter, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)),
|
||||||
SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
|
SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
|
||||||
SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, 0, 161),
|
SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, 0, 161),
|
||||||
SLE_CONDNULL(1, 0, 45),
|
SLE_CONDNULL(1, 0, 45),
|
||||||
@@ -100,6 +101,7 @@ static const SaveLoadGlobVarList _date_check_desc[] = {
|
|||||||
SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, 31, SL_MAX_VERSION),
|
SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, 31, SL_MAX_VERSION),
|
||||||
SLE_NULL(2), // _date_fract
|
SLE_NULL(2), // _date_fract
|
||||||
SLE_NULL(2), // _tick_counter
|
SLE_NULL(2), // _tick_counter
|
||||||
|
SLEG_CONDVAR_X(_tick_skip_counter, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)),
|
||||||
SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
|
SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day
|
||||||
SLE_CONDNULL(1, 0, 161), // _age_cargo_skip_counter
|
SLE_CONDNULL(1, 0, 161), // _age_cargo_skip_counter
|
||||||
SLE_CONDNULL(1, 0, 45),
|
SLE_CONDNULL(1, 0, 45),
|
||||||
|
@@ -1637,6 +1637,7 @@ static SettingsContainer &GetSettingsTree()
|
|||||||
SettingsPage *accounting = main->Add(new SettingsPage(STR_CONFIG_SETTING_ACCOUNTING));
|
SettingsPage *accounting = main->Add(new SettingsPage(STR_CONFIG_SETTING_ACCOUNTING));
|
||||||
{
|
{
|
||||||
accounting->Add(new SettingEntry("economy.inflation"));
|
accounting->Add(new SettingEntry("economy.inflation"));
|
||||||
|
accounting->Add(new SettingEntry("economy.day_length_factor"));
|
||||||
accounting->Add(new SettingEntry("difficulty.initial_interest"));
|
accounting->Add(new SettingEntry("difficulty.initial_interest"));
|
||||||
accounting->Add(new SettingEntry("difficulty.max_loan"));
|
accounting->Add(new SettingEntry("difficulty.max_loan"));
|
||||||
accounting->Add(new SettingEntry("difficulty.subsidy_multiplier"));
|
accounting->Add(new SettingEntry("difficulty.subsidy_multiplier"));
|
||||||
|
@@ -532,6 +532,7 @@ struct EconomySettings {
|
|||||||
bool allow_town_level_crossings; ///< towns are allowed to build level crossings
|
bool allow_town_level_crossings; ///< towns are allowed to build level crossings
|
||||||
int8 town_cargo_factor; ///< power-of-two multiplier for town (passenger, mail) generation. May be negative.
|
int8 town_cargo_factor; ///< power-of-two multiplier for town (passenger, mail) generation. May be negative.
|
||||||
bool infrastructure_maintenance; ///< enable monthly maintenance fee for owner infrastructure
|
bool infrastructure_maintenance; ///< enable monthly maintenance fee for owner infrastructure
|
||||||
|
uint8 day_length_factor; ///< factor which the length of day is multiplied
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LinkGraphSettings {
|
struct LinkGraphSettings {
|
||||||
|
@@ -1324,6 +1324,20 @@ str = STR_CONFIG_SETTING_INFLATION
|
|||||||
strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
|
[SDT_VAR]
|
||||||
|
base = GameSettings
|
||||||
|
var = economy.day_length_factor
|
||||||
|
type = SLE_UINT8
|
||||||
|
def = 1
|
||||||
|
min = 1
|
||||||
|
max = 125
|
||||||
|
str = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR
|
||||||
|
strhelp = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR_HELPTEXT
|
||||||
|
strval = STR_JUST_COMMA
|
||||||
|
cat = SC_BASIC
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)
|
||||||
|
patxname = ""variable_day_length.economy.day_length_factor""
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = construction.raw_industry_construction
|
var = construction.raw_industry_construction
|
||||||
|
@@ -590,9 +590,9 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|||||||
|
|
||||||
if (v->timetable_start != 0) {
|
if (v->timetable_start != 0) {
|
||||||
#if WALLCLOCK_NETWORK_COMPATIBLE
|
#if WALLCLOCK_NETWORK_COMPATIBLE
|
||||||
v->lateness_counter = (_date - v->timetable_start) * DAY_TICKS + _date_fract;
|
v->lateness_counter = ((_date - v->timetable_start) * DAY_TICKS + _date_fract) * _settings_game.economy.day_length_factor + _tick_skip_counter;
|
||||||
#else
|
#else
|
||||||
v->lateness_counter = (_date * DAY_TICKS) + _date_fract - v->timetable_start;
|
v->lateness_counter = ((_date * DAY_TICKS) + _date_fract - v->timetable_start) * _settings_game.economy.day_length_factor + _tick_skip_counter;
|
||||||
#endif
|
#endif
|
||||||
v->timetable_start = 0;
|
v->timetable_start = 0;
|
||||||
}
|
}
|
||||||
|
@@ -947,7 +947,7 @@ void CallVehicleTicks()
|
|||||||
{
|
{
|
||||||
_vehicles_to_autoreplace.Clear();
|
_vehicles_to_autoreplace.Clear();
|
||||||
|
|
||||||
RunVehicleDayProc();
|
if (_tick_skip_counter == 0) RunVehicleDayProc();
|
||||||
|
|
||||||
Station *st;
|
Station *st;
|
||||||
FOR_ALL_STATIONS(st) LoadUnloadStation(st);
|
FOR_ALL_STATIONS(st) LoadUnloadStation(st);
|
||||||
|
Reference in New Issue
Block a user