(svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
authorrubidium
Sun, 25 Nov 2007 20:20:16 +0000
changeset 7969 5f1292aa867f
parent 7968 45a32751abe5
child 7970 7d6b9ab57081
(svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
src/openttd.cpp
src/town.h
src/town_cmd.cpp
--- a/src/openttd.cpp	Sun Nov 25 19:45:09 2007 +0000
+++ b/src/openttd.cpp	Sun Nov 25 20:20:16 2007 +0000
@@ -1312,16 +1312,10 @@
 	/* Update all waypoints */
 	if (CheckSavegameVersion(12)) FixOldWaypoints();
 
-	UpdateAllWaypointSigns();
-
 	/* in version 2.2 of the savegame, we have new airports */
 	if (CheckSavegameVersionOldStyle(2, 2)) UpdateOldAircraft();
 
-	UpdateAllStationVirtCoord();
-
-	/* Setup town coords */
 	AfterLoadTown();
-	UpdateAllSignVirtCoords();
 
 	/* make sure there is a town in the game */
 	if (_game_mode == GM_NORMAL && !ClosestTownFromTile(0, (uint)-1)) {
@@ -1815,19 +1809,6 @@
 
 	if (!CheckSavegameVersion(27)) AfterLoadStations();
 
-	{
-		/* Set up the engine count for all players */
-		Player *players[MAX_PLAYERS];
-		const Vehicle *v;
-
-		for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) players[i] = GetPlayer(i);
-
-		FOR_ALL_VEHICLES(v) {
-			if (!IsEngineCountable(v)) continue;
-			players[v->owner]->num_engines[v->engine_type]++;
-		}
-	}
-
 	/* Time starts at 0 instead of 1920.
 	 * Account for this in older games by adding an offset */
 	if (CheckSavegameVersion(31)) {
@@ -2205,6 +2186,12 @@
 	DoZoomInOutWindow(ZOOM_NONE, w); // update button status
 	MarkWholeScreenDirty();
 
+	/* Update coordinates of the signs. */
+	UpdateAllStationVirtCoord();
+	UpdateAllSignVirtCoords();
+	UpdateAllTownVirtCoords();
+	UpdateAllWaypointSigns();
+
 	/* Recalculate */
 	Group *g;
 	FOR_ALL_GROUPS(g) {
@@ -2218,6 +2205,17 @@
 		}
 	}
 
+	/* Set up the engine count for all players */
+	Player *players[MAX_PLAYERS];
+	const Vehicle *v;
+
+	for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) players[i] = GetPlayer(i);
+
+	FOR_ALL_VEHICLES(v) {
+		if (!IsEngineCountable(v)) continue;
+		players[v->owner]->num_engines[v->engine_type]++;
+	}
+
 	return true;
 }
 
--- a/src/town.h	Sun Nov 25 19:45:09 2007 +0000
+++ b/src/town.h	Sun Nov 25 20:20:16 2007 +0000
@@ -207,6 +207,7 @@
 uint32 GetWorldPopulation();
 
 void UpdateTownVirtCoord(Town *t);
+void UpdateAllTownVirtCoords();
 void InitializeTown();
 void ShowTownViewWindow(TownID town);
 void ExpandTown(Town *t);
--- a/src/town_cmd.cpp	Sun Nov 25 19:45:09 2007 +0000
+++ b/src/town_cmd.cpp	Sun Nov 25 20:20:16 2007 +0000
@@ -311,6 +311,15 @@
 	MarkTownSignDirty(t);
 }
 
+/** Update the virtual coords needed to draw the town sign for all towns. */
+void UpdateAllTownVirtCoords()
+{
+	Town *t;
+	FOR_ALL_TOWNS(t) {
+		UpdateTownVirtCoord(t);
+	}
+}
+
 /**
  * Change the towns population
  * @param t Town which polulation has changed
@@ -2521,7 +2530,6 @@
 	Town *t;
 	FOR_ALL_TOWNS(t) {
 		UpdateTownRadius(t);
-		UpdateTownVirtCoord(t);
 	}
 	_town_sort_dirty = true;
 }