File diff r26193:4bc7915a2156 → r26194:f7347205838e
src/saveload/afterload.cpp
Show inline comments
 
@@ -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++) {