(svn r13678) -Fix (r13677): electric trains from pre elrail savegames would get stopped on load.
authorrubidium
Sun, 06 Jul 2008 11:08:40 +0000
changeset 11120 373bc4028ce2
parent 11119 abb5658c31c1
child 11121 c257c3ae547c
(svn r13678) -Fix (r13677): electric trains from pre elrail savegames would get stopped on load.
src/openttd.cpp
src/vehicle.cpp
src/vehicle_base.h
--- a/src/openttd.cpp	Fri Jul 04 21:43:17 2008 +0000
+++ b/src/openttd.cpp	Sun Jul 06 11:08:40 2008 +0000
@@ -1265,6 +1265,8 @@
 		}
 	}
 
+	InitializeVehicleCaches();
+
 	SetCachedEngineCounts();
 
 	/* Towns have a noise controlled number of airports system
@@ -1382,16 +1384,6 @@
 	/* reinit the landscape variables (landscape might have changed) */
 	InitializeLandscapeVariables(true);
 
-	/* from version 38 we have optional elrails, since we cannot know the
-	 * preference of a user, let elrails enabled; it can be disabled manually */
-	if (CheckSavegameVersion(38)) _settings_game.vehicle.disable_elrails = false;
-
-	/* Do the same as when elrails were enabled/disabled manually just now.
-	 * This needs to be done before AfterLoadVehicles because that relies on
-	 * the compatible railtypes and such to be correct. */
-	SettingsDisableElrail(_settings_game.vehicle.disable_elrails);
-	InitializeRailGUI();
-
 	/* Update all vehicles */
 	AfterLoadVehicles(true);
 
@@ -1963,6 +1955,13 @@
 		}
 	}
 
+	/* from version 38 we have optional elrails, since we cannot know the
+	 * preference of a user, let elrails enabled; it can be disabled manually */
+	if (CheckSavegameVersion(38)) _settings_game.vehicle.disable_elrails = false;
+	/* do the same as when elrails were enabled/disabled manually just now */
+	SettingsDisableElrail(_settings_game.vehicle.disable_elrails);
+	InitializeRailGUI();
+
 	/* From version 53, the map array was changed for house tiles to allow
 	 * space for newhouses grf features. A new byte, m7, was also added. */
 	if (CheckSavegameVersion(53)) {
--- a/src/vehicle.cpp	Fri Jul 04 21:43:17 2008 +0000
+++ b/src/vehicle.cpp	Sun Jul 06 11:08:40 2008 +0000
@@ -275,17 +275,8 @@
 	}
 
 	FOR_ALL_VEHICLES(v) {
-		assert(v->first != NULL);
-
-		if (v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) {
-			if (IsFrontEngine(v)) v->u.rail.last_speed = v->cur_speed; // update displayed train speed
-			TrainConsistChanged(v);
-		} else if (v->type == VEH_ROAD && IsRoadVehFront(v)) {
-			RoadVehUpdateCache(v);
-		}
-	}
-
-	FOR_ALL_VEHICLES(v) {
+		assert(v->First() != NULL);
+
 		switch (v->type) {
 			case VEH_ROAD:
 				v->u.road.roadtype = HasBit(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
@@ -321,6 +312,19 @@
 	}
 }
 
+void InitializeVehicleCaches()
+{
+	Vehicle *v;
+	FOR_ALL_VEHICLES(v) {
+		if (v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) {
+			if (IsFrontEngine(v)) v->u.rail.last_speed = v->cur_speed; // update displayed train speed
+			TrainConsistChanged(v);
+		} else if (v->type == VEH_ROAD && IsRoadVehFront(v)) {
+			RoadVehUpdateCache(v);
+		}
+	}
+}
+
 Vehicle::Vehicle()
 {
 	this->type               = VEH_INVALID;
--- a/src/vehicle_base.h	Fri Jul 04 21:43:17 2008 +0000
+++ b/src/vehicle_base.h	Sun Jul 06 11:08:40 2008 +0000
@@ -191,6 +191,7 @@
 struct SaveLoad;
 extern const SaveLoad *GetVehicleDescription(VehicleType vt);
 extern void AfterLoadVehicles(bool clear_te_id);
+extern void InitializeVehicleCaches();
 struct LoadgameState;
 extern bool LoadOldVehicle(LoadgameState *ls, int num);