Changeset - r10803:77f0b95a3138
[Not reviewed]
master
0 3 0
smatz - 16 years ago 2009-01-18 16:20:04
smatz@openttd.org
(svn r15137) -Fix (r11822)(r14340): signs with sign 'Sign' were lost when converting from TTD savegames
3 files changed with 14 insertions and 21 deletions:
0 comments (0 inline, 0 general)
src/saveload/afterload.cpp
Show inline comments
 
@@ -206,14 +206,6 @@ static void UpdateVoidTiles()
 
	for (i = 0; i < MapSizeX(); ++i) MakeVoid(MapSizeX() * MapMaxY() + i);
 
}
 

	
 
/* since savegame version 6.0 each sign has an "owner", signs without owner (from old games are set to 255) */
 
static void UpdateSignOwner()
 
{
 
	Sign *si;
 

	
 
	FOR_ALL_SIGNS(si) si->owner = OWNER_NONE;
 
}
 

	
 
static inline RailType UpdateRailType(RailType rt, RailType min)
 
{
 
	return rt >= min ? (RailType)(rt + 1): rt;
 
@@ -351,9 +343,6 @@ bool AfterLoadGame()
 
	/* from version 4.2 of the savegame, currencies are in a different order */
 
	if (CheckSavegameVersionOldStyle(4, 2)) UpdateCurrencies();
 

	
 
	/* from version 6.1 of the savegame, signs have an "owner" */
 
	if (CheckSavegameVersionOldStyle(6, 1)) UpdateSignOwner();
 

	
 
	/* In old version there seems to be a problem that water is owned by
 
	 * OWNER_NONE, not OWNER_WATER.. I can't replicate it for the current
 
	 * (4.3) version, so I just check when versions are older, and then
 
@@ -392,14 +381,6 @@ bool AfterLoadGame()
 
			wp->name = CopyFromOldName(wp->string);
 
			wp->string = STR_EMPTY;
 
		}
 

	
 
		for (uint i = 0; i < GetSignPoolSize(); i++) {
 
			/* invalid signs are determined by si->ower == INVALID_COMPANY now */
 
			Sign *si = GetSign(i);
 
			if (!si->IsValid() && si->name != NULL) {
 
				si->owner = OWNER_NONE;
 
			}
 
		}
 
	}
 

	
 
	/* From this point the old names array is cleared. */
src/saveload/oldloader.cpp
Show inline comments
 
@@ -1145,8 +1145,11 @@ static bool LoadOldSign(LoadgameState *l
 
	Sign *si = new (num) Sign();
 
	if (!LoadChunk(ls, si, sign_chunk)) return false;
 

	
 
	_old_string_id = RemapOldStringID(_old_string_id);
 
	si->name = CopyFromOldName(_old_string_id);
 
	if (_old_string_id != 0) {
 
		_old_string_id = RemapOldStringID(_old_string_id);
 
		si->name = CopyFromOldName(_old_string_id);
 
		si->owner = OWNER_NONE;
 
	}
 

	
 
	return true;
 
}
src/saveload/signs_sl.cpp
Show inline comments
 
@@ -41,6 +41,15 @@ static void Load_SIGN()
 
	while ((index = SlIterateArray()) != -1) {
 
		Sign *si = new (index) Sign();
 
		SlObject(si, _sign_desc);
 
		/* Before version 6.1, signs didn't have owner.
 
		 * Before version 83, invalid signs were determined by si->str == 0.
 
		 * Before version 103, owner could be a bankrupted company.
 
		 *  - we can't use IsValidCompany() now, so this is fixed in AfterLoadGame()
 
		 * All signs that were saved are valid (including those with just 'Sign' and INVALID_OWNER).
 
		 *  - so set owner to OWNER_NONE if needed (signs from pre-version 6.1 would be lost) */
 
		if (CheckSavegameVersionOldStyle(6, 1) || (CheckSavegameVersion(83) && si->owner == INVALID_OWNER)) {
 
			si->owner = OWNER_NONE;
 
		}
 
	}
 
}
 

	
0 comments (0 inline, 0 general)