diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 797597bf0e..03266b08c8 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5572,6 +5572,11 @@ static void CanalMapSpriteGroup(ByteReader *buf, uint8 idcount) static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->stations == nullptr) { + grfmsg(1, "StationMapSpriteGroup: No stations defined, skipping"); + return; + } + uint8 *stations = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { stations[i] = buf->ReadByte(); @@ -5624,6 +5629,11 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->housespec == nullptr) { + grfmsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping"); + return; + } + uint8 *houses = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { houses[i] = buf->ReadByte(); @@ -5636,11 +5646,6 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "TownHouseMapSpriteGroup")) return; - if (_cur.grffile->housespec == nullptr) { - grfmsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { HouseSpec *hs = _cur.grffile->housespec[houses[i]]; @@ -5655,6 +5660,11 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->industryspec == nullptr) { + grfmsg(1, "IndustryMapSpriteGroup: No industries defined, skipping"); + return; + } + uint8 *industries = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { industries[i] = buf->ReadByte(); @@ -5667,11 +5677,6 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return; - if (_cur.grffile->industryspec == nullptr) { - grfmsg(1, "IndustryMapSpriteGroup: No industries defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { IndustrySpec *indsp = _cur.grffile->industryspec[industries[i]]; @@ -5686,6 +5691,11 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->indtspec == nullptr) { + grfmsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping"); + return; + } + uint8 *indtiles = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { indtiles[i] = buf->ReadByte(); @@ -5698,11 +5708,6 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return; - if (_cur.grffile->indtspec == nullptr) { - grfmsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { IndustryTileSpec *indtsp = _cur.grffile->indtspec[indtiles[i]]; @@ -5864,6 +5869,11 @@ static void RoadTypeMapSpriteGroup(ByteReader *buf, uint8 idcount, RoadTramType static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->airportspec == nullptr) { + grfmsg(1, "AirportMapSpriteGroup: No airports defined, skipping"); + return; + } + uint8 *airports = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { airports[i] = buf->ReadByte(); @@ -5876,11 +5886,6 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "AirportMapSpriteGroup")) return; - if (_cur.grffile->airportspec == nullptr) { - grfmsg(1, "AirportMapSpriteGroup: No airports defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { AirportSpec *as = _cur.grffile->airportspec[airports[i]]; @@ -5895,6 +5900,11 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->airtspec == nullptr) { + grfmsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping"); + return; + } + uint8 *airptiles = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { airptiles[i] = buf->ReadByte(); @@ -5907,11 +5917,6 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "AirportTileMapSpriteGroup")) return; - if (_cur.grffile->airtspec == nullptr) { - grfmsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { AirportTileSpec *airtsp = _cur.grffile->airtspec[airptiles[i]];