summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2009-05-10 22:16:51 +0000
committerfrosch <frosch@openttd.org>2009-05-10 22:16:51 +0000
commit4710c3fe316216c880643038e5099066724f1254 (patch)
treee4efdc82e636c625f313d45f9687856139a0c9f2
parent1724ed5c616fa2f23ace99e3f1d4af06462b8755 (diff)
downloadopenttd-4710c3fe316216c880643038e5099066724f1254.tar.xz
(svn r16274) -Fix: Disable multitile houses for which the newgrf does not define proper additional tiles. (instead of crashing later)
-rw-r--r--src/newgrf.cpp21
-rw-r--r--src/town.h1
2 files changed, 19 insertions, 3 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 2790163bc..eb0aa5fba 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -5835,10 +5835,25 @@ static void FinaliseHouseArray()
for (int i = 0; i < HOUSE_MAX; i++) {
HouseSpec *hs = file->housespec[i];
- if (hs != NULL) {
- _house_mngr.SetEntitySpec(hs);
- if (hs->min_year < min_year) min_year = hs->min_year;
+
+ if (hs == NULL) continue;
+
+ const HouseSpec *next1 = (i + 1 < HOUSE_MAX ? file->housespec[i + 1] : NULL);
+ const HouseSpec *next2 = (i + 2 < HOUSE_MAX ? file->housespec[i + 2] : NULL);
+ const HouseSpec *next3 = (i + 3 < HOUSE_MAX ? file->housespec[i + 3] : NULL);
+
+ if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 &&
+ (next1 == NULL || !next1->enabled || (next1->building_flags & BUILDING_HAS_1_TILE) != 0)) ||
+ ((hs->building_flags & BUILDING_HAS_4_TILES) != 0 &&
+ (next2 == NULL || !next2->enabled || (next2->building_flags & BUILDING_HAS_1_TILE) != 0 ||
+ next3 == NULL || !next3->enabled || (next3->building_flags & BUILDING_HAS_1_TILE) != 0))) {
+ hs->enabled = false;
+ DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d as multitile, but no suitable tiles follow. Disabling house.", file->filename, hs->local_id);
+ continue;
}
+
+ _house_mngr.SetEntitySpec(hs);
+ if (hs->min_year < min_year) min_year = hs->min_year;
}
}
diff --git a/src/town.h b/src/town.h
index 9c87b1c44..384ff9b3a 100644
--- a/src/town.h
+++ b/src/town.h
@@ -43,6 +43,7 @@ enum BuildingFlags {
BUILDING_IS_CHURCH = 1U << 6,
BUILDING_IS_STADIUM = 1U << 7,
BUILDING_HAS_1_TILE = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
+ BUILDING_HAS_2_TILES = TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
BUILDING_2_TILES_X = TILE_SIZE_2x1 | TILE_SIZE_2x2,
BUILDING_2_TILES_Y = TILE_SIZE_1x2 | TILE_SIZE_2x2,
BUILDING_HAS_4_TILES = TILE_SIZE_2x2,