summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-07-06 11:08:40 +0000
committerrubidium <rubidium@openttd.org>2008-07-06 11:08:40 +0000
commit3a793ceea95edefc878531bc67e1bc4a6116a9b0 (patch)
tree7a34f2cdc4f3963847cbcad8729e0ccfa69bc724 /src
parent22249a7317753816ba56618e753e0ddf6a29551a (diff)
downloadopenttd-3a793ceea95edefc878531bc67e1bc4a6116a9b0.tar.xz
(svn r13678) -Fix (r13677): electric trains from pre elrail savegames would get stopped on load.
Diffstat (limited to 'src')
-rw-r--r--src/openttd.cpp19
-rw-r--r--src/vehicle.cpp24
-rw-r--r--src/vehicle_base.h1
3 files changed, 24 insertions, 20 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 28280d864..3c33f571b 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -1265,6 +1265,8 @@ static bool InitializeWindowsAndCaches()
}
}
+ InitializeVehicleCaches();
+
SetCachedEngineCounts();
/* Towns have a noise controlled number of airports system
@@ -1382,16 +1384,6 @@ bool AfterLoadGame()
/* 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 @@ bool AfterLoadGame()
}
}
+ /* 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)) {
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index bda5efefd..ff904aeb9 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -275,17 +275,8 @@ void AfterLoadVehicles(bool clear_te_id)
}
FOR_ALL_VEHICLES(v) {
- assert(v->first != NULL);
+ 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) {
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 AfterLoadVehicles(bool clear_te_id)
}
}
+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;
diff --git a/src/vehicle_base.h b/src/vehicle_base.h
index 0defc9566..c7b09b88b 100644
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -191,6 +191,7 @@ DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125)
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);