(svn r11855) -Fix [FS#1335]: recompute town population when removing a 'newhouses' grf, or when loading a game with missing 'newhouses' grfs
authorglx
Tue, 15 Jan 2008 00:03:48 +0000
changeset 8787 3cf49b620b77
parent 8786 f626bd77974a
child 8788 8e028dbff2e9
(svn r11855) -Fix [FS#1335]: recompute town population when removing a 'newhouses' grf, or when loading a game with missing 'newhouses' grfs
src/newgrf_house.cpp
src/newgrf_house.h
src/openttd.cpp
src/town_cmd.cpp
--- a/src/newgrf_house.cpp	Mon Jan 14 20:52:43 2008 +0000
+++ b/src/newgrf_house.cpp	Tue Jan 15 00:03:48 2008 +0000
@@ -33,8 +33,12 @@
 
 void CheckHouseIDs()
 {
+	Town *town;
 	InitializeBuildingCounts();
 
+	/* Reset town population */
+	FOR_ALL_TOWNS(town) town->population = 0;
+
 	for (TileIndex t = 0; t < MapSize(); t++) {
 		HouseID house_id;
 
@@ -47,7 +51,9 @@
 			house_id = _house_mngr.GetSubstituteID(house_id);
 			SetHouseType(t, house_id);
 		}
-		IncreaseBuildingCount(GetTownByTile(t), house_id);
+		town = GetTownByTile(t);
+		IncreaseBuildingCount(town, house_id);
+		if (IsHouseCompleted(t)) town->population += GetHouseSpecs(house_id)->population;
 	}
 }
 
@@ -122,22 +128,6 @@
 	if (_building_counts.class_count[class_id] > 0)   _building_counts.class_count[class_id]--;
 }
 
-/**
- * AfterLoadCountBuildings()
- *
- * After a savegame has been loaded, count the number of buildings on the map.
- */
-void AfterLoadCountBuildings()
-{
-	if (!_loaded_newgrf_features.has_newhouses) return;
-
-	for (TileIndex t = 0; t < MapSize(); t++) {
-		if (!IsTileType(t, MP_HOUSE)) continue;
-		IncreaseBuildingCount(GetTownByTile(t), GetHouseType(t));
-	}
-}
-
-
 static uint32 HouseGetRandomBits(const ResolverObject *object)
 {
 	const TileIndex tile = object->u.house.tile;
--- a/src/newgrf_house.h	Mon Jan 14 20:52:43 2008 +0000
+++ b/src/newgrf_house.h	Tue Jan 15 00:03:48 2008 +0000
@@ -33,7 +33,6 @@
 void InitializeBuildingCounts();
 void IncreaseBuildingCount(Town *t, HouseID house_id);
 void DecreaseBuildingCount(Town *t, HouseID house_id);
-void AfterLoadCountBuildings();
 
 void DrawNewHouseTile(TileInfo *ti, HouseID house_id);
 void AnimateNewHouseTile(TileIndex tile);
--- a/src/openttd.cpp	Mon Jan 14 20:52:43 2008 +0000
+++ b/src/openttd.cpp	Tue Jan 15 00:03:48 2008 +0000
@@ -2018,8 +2018,8 @@
 		}
 	}
 
-	/* Count the buildings after updating the map array. */
-	AfterLoadCountBuildings();
+	/* Check that house ids are still valid. */
+	CheckHouseIDs();
 
 	if (CheckSavegameVersion(43)) {
 		for (TileIndex t = 0; t < map_size; t++) {
--- a/src/town_cmd.cpp	Mon Jan 14 20:52:43 2008 +0000
+++ b/src/town_cmd.cpp	Tue Jan 15 00:03:48 2008 +0000
@@ -2411,9 +2411,8 @@
 	SLE_CONDVAR(Town, xy,                    SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
 	SLE_CONDVAR(Town, xy,                    SLE_UINT32,                 6, SL_MAX_VERSION),
 
-	SLE_CONDVAR(Town, population,            SLE_FILE_U16 | SLE_VAR_U32, 0, 2),
-	SLE_CONDVAR(Town, population,            SLE_UINT32,                 3, SL_MAX_VERSION),
-
+	SLE_CONDNULL(2, 0, 2),
+	SLE_CONDNULL(4, 3, 84),
 
 	    SLE_VAR(Town, num_houses,            SLE_UINT16),
 	SLE_CONDVAR(Town, townnamegrfid,         SLE_UINT32, 66, SL_MAX_VERSION),