|
@@ -59,6 +59,7 @@
|
|
|
|
|
|
|
|
|
#include "saveload_internal.h"
|
|
|
#include "extended_ver_sl.h"
|
|
|
|
|
|
#include <signal.h>
|
|
|
|
|
@@ -750,6 +751,9 @@ bool AfterLoadGame()
|
|
|
_settings_game.construction.max_bridge_length = 64;
|
|
|
_settings_game.construction.max_tunnel_length = 64;
|
|
|
}
|
|
|
if (SlXvIsFeatureMissing(XSLFI_DAYLENGTH)) {
|
|
|
_settings_game.economy.daylength_multiplier = 1;
|
|
|
}
|
|
|
if (IsSavegameVersionBefore(SLV_166)) _settings_game.economy.infrastructure_maintenance = false;
|
|
|
if (IsSavegameVersionBefore(SLV_183)) {
|
|
|
_settings_game.linkgraph.distribution_pax = DT_MANUAL;
|
|
@@ -757,6 +761,9 @@ bool AfterLoadGame()
|
|
|
_settings_game.linkgraph.distribution_armoured = DT_MANUAL;
|
|
|
_settings_game.linkgraph.distribution_default = DT_MANUAL;
|
|
|
}
|
|
|
if (SlXvIsFeatureMissing(XSLFI_TOWN_IMPROVEMENTS)) {
|
|
|
_settings_game.economy.town_growth_multiplier = _settings_game.economy.daylength_multiplier;
|
|
|
}
|
|
|
|
|
|
if (IsSavegameVersionBefore(SLV_ENDING_YEAR)) {
|
|
|
_settings_game.game_creation.ending_year = DEF_END_YEAR;
|
|
@@ -2419,6 +2426,23 @@ bool AfterLoadGame()
|
|
|
for (Depot *d : Depot::Iterate()) d->build_date = _date;
|
|
|
}
|
|
|
|
|
|
if (!SlXvIsFeaturePresent(XSLFI_EXTRA_EXPENSES, 2, 2))
|
|
|
{
|
|
|
// expenses size isn't currently 23. fix the array which now contains broken data
|
|
|
|
|
|
bool first_extension_present = SlXvIsFeaturePresent(XSLFI_EXTRA_EXPENSES, 1, 1);
|
|
|
int old_expenses_size = first_extension_present ? 22 : 13;
|
|
|
int new_expenses_size = 23;
|
|
|
int second_expenses_offset = old_expenses_size - (new_expenses_size - old_expenses_size);
|
|
|
|
|
|
for (Company* c : Company::Iterate()) {
|
|
|
std::copy_backward(&c->yearly_expenses[1][second_expenses_offset], &c->yearly_expenses[1][second_expenses_offset] + old_expenses_size, &c->yearly_expenses[2][0] + old_expenses_size);
|
|
|
std::copy_backward(&c->yearly_expenses[0][old_expenses_size], &c->yearly_expenses[0][old_expenses_size] + old_expenses_size, &c->yearly_expenses[1][0] + old_expenses_size);
|
|
|
std::fill_n(&c->yearly_expenses[0][old_expenses_size], new_expenses_size - old_expenses_size, 0);
|
|
|
std::fill_n(&c->yearly_expenses[1][old_expenses_size], new_expenses_size - old_expenses_size, 0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* In old versions it was possible to remove an airport while a plane was
|
|
|
* taking off or landing. This gives all kind of problems when building
|
|
|
* another airport in the same station so we don't allow that anymore.
|
|
@@ -2822,6 +2846,37 @@ bool AfterLoadGame()
|
|
|
* which is done by StartupEngines(). */
|
|
|
if (gcf_res != GLC_ALL_GOOD) StartupEngines();
|
|
|
|
|
|
/* Set some breakdown-related variables to the correct values. */
|
|
|
if (SlXvIsFeatureMissing(XSLFI_IMPROVED_BREAKDOWNS)) {
|
|
|
|
|
|
for (Vehicle *v : Vehicle::Iterate()) {
|
|
|
switch(v->type) {
|
|
|
case VEH_TRAIN: {
|
|
|
if (Train::From(v)->IsFrontEngine()) {
|
|
|
if (v->breakdown_ctr == 1) SetBit(Train::From(v)->flags, VRF_BREAKDOWN_STOPPED);
|
|
|
} else if (Train::From(v)->IsEngine() || Train::From(v)->IsMultiheaded()) {
|
|
|
/** Non-front engines could have a reliability of 0.
|
|
|
* Set it to the reliability of the front engine or the maximum, whichever is lower. */
|
|
|
const Engine *e = Engine::Get(v->engine_type);
|
|
|
v->reliability_spd_dec = e->reliability_spd_dec;
|
|
|
v->reliability = std::min(v->First()->reliability, e->reliability);
|
|
|
}
|
|
|
}
|
|
|
case VEH_ROAD:
|
|
|
v->breakdown_chance = 128;
|
|
|
break;
|
|
|
case VEH_SHIP:
|
|
|
v->breakdown_chance = 64;
|
|
|
break;
|
|
|
case VEH_AIRCRAFT:
|
|
|
v->breakdown_chance = Clamp(64 + (AircraftVehInfo(v->engine_type)->max_speed >> 3), 0, 255);
|
|
|
v->breakdown_severity = 40;
|
|
|
break;
|
|
|
default: break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* The road owner of standard road stops was not properly accounted for. */
|
|
|
if (IsSavegameVersionBefore(SLV_172)) {
|
|
|
for (TileIndex t = 0; t < map_size; t++) {
|