Changeset - r28472:c0dc7fe1d8ca
[Not reviewed]
master
0 1 0
Rubidium - 11 months ago 2024-01-15 18:22:51
rubidium@openttd.org
Change: be more resilient against missing towns in old loader
1 file changed with 11 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/saveload/oldloader_sl.cpp
Show inline comments
 
@@ -495,6 +495,14 @@ static void ClearOldMap3(TileIndex t)
 
	tile.m4() = 0;
 
}
 

	
 
static Town *RemapTown(TileIndex fallback)
 
{
 
	/* In some cases depots, industries and stations could refer to a missing town. */
 
	Town *t = Town::GetIfValid(RemapTownIndex(_old_town_index));
 
	if (t == nullptr) t = CalcClosestTownFromTile(fallback);
 
	return t;
 
}
 

	
 
static void ReadTTDPatchFlags()
 
{
 
	if (_read_ttdpatch_flags) return;
 
@@ -674,10 +682,7 @@ static bool LoadOldDepot(LoadgameState *
 
	if (!LoadChunk(ls, d, depot_chunk)) return false;
 

	
 
	if (d->xy != 0) {
 
		/* In some cases, there could be depots referencing invalid town. */
 
		Town *t = Town::GetIfValid(RemapTownIndex(_old_town_index));
 
		if (t == nullptr) t = Town::GetRandom();
 
		d->town = t;
 
		d->town = RemapTown(d->xy);
 
	} else {
 
		delete d;
 
	}
 
@@ -767,7 +772,7 @@ static bool LoadOldStation(LoadgameState
 
	if (!LoadChunk(ls, st, station_chunk)) return false;
 

	
 
	if (st->xy != 0) {
 
		st->town = Town::Get(RemapTownIndex(_old_town_index));
 
		st->town = RemapTown(st->xy);
 

	
 
		if (_savegame_type == SGT_TTO) {
 
			if (IsInsideBS(_old_string_id, 0x180F, 32)) {
 
@@ -843,7 +848,7 @@ static bool LoadOldIndustry(LoadgameStat
 
	if (!LoadChunk(ls, i, industry_chunk)) return false;
 

	
 
	if (i->location.tile != 0) {
 
		i->town = Town::Get(RemapTownIndex(_old_town_index));
 
		i->town = RemapTown(i->location.tile);
 

	
 
		if (_savegame_type == SGT_TTO) {
 
			if (i->type > 0x06) i->type++; // Printing Works were added
0 comments (0 inline, 0 general)