(svn r9631) [NoAI] -Codechange: rewrite the loading in such a manner that the NoAI branch gets savegame compatability for both NoAI branch savegames (from this revision on) as well as trunk savegames up to the revision that NoAI is synched with. noai
authorrubidium
Sun, 15 Apr 2007 00:17:57 +0000
branchnoai
changeset 9598 b73018a5ffc0
parent 9597 db3908cf597a
child 9599 949374e83b78
(svn r9631) [NoAI] -Codechange: rewrite the loading in such a manner that the NoAI branch gets savegame compatability for both NoAI branch savegames (from this revision on) as well as trunk savegames up to the revision that NoAI is synched with.
Note: this breaks savegame loading of savegames made with the NoAI branch up to this revision.
bin/ai/regression/regression.sav
src/player.h
src/players.cpp
src/saveload.cpp
src/saveload.h
src/settings.cpp
Binary file bin/ai/regression/regression.sav has changed
--- a/src/player.h	Sat Apr 14 22:16:11 2007 +0000
+++ b/src/player.h	Sun Apr 15 00:17:57 2007 +0000
@@ -63,6 +63,7 @@
 
 	bool is_active;
 	bool is_ai;
+	bool is_noai; ///< This is a NoAI player (for loading old savegames properly). Part of the NoAI 'hack' to retain savegame compatability with trunk.
 
 	int64 yearly_expenses[3][13];
 	PlayerEconomyEntry cur_economy;
--- a/src/players.cpp	Sat Apr 14 22:16:11 2007 +0000
+++ b/src/players.cpp	Sun Apr 15 00:17:57 2007 +0000
@@ -435,6 +435,7 @@
 			PlayerID i = p->index;
 			memset(p, 0, sizeof(Player));
 			p->index = i;
+			p->is_noai = true;
 			return p;
 		}
 	}
@@ -1140,8 +1141,11 @@
 	SLE_CONDVAR(Player, engine_renew_money,    SLE_UINT32,                 16, SL_MAX_VERSION),
 	SLE_CONDVAR(Player, renew_keep_length,     SLE_BOOL,                    2, SL_MAX_VERSION), // added with 16.1, but was blank since 2
 
-	/* reserve extra space in savegame here. (currently 63 bytes) */
-	SLE_CONDNULL(63, 2, SL_MAX_VERSION),
+	/* Reserve extra space in savegame here. (currently 62 bytes)
+	 * The 63rd byte is used to tell us whether we are a player of the NoAI-branch or not.
+	 * Part of the NoAI 'hack' to retain savegame compatability with trunk. */
+	SLE_CONDVAR(Player, is_noai,               SLE_BOOL, 2, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(62, 2, SL_MAX_VERSION),
 
 	SLE_END()
 };
@@ -1167,41 +1171,41 @@
 };
 
 static const SaveLoad _player_ai_desc[] = {
-	SLE_CONDNULL(2,  0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(2,  0, SL_NOAI_MAX_VERSION),
 	SLE_CONDNULL(2,  0, 12),
-	SLE_CONDNULL(4, 13, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(8,  0, SAVELOAD_AIREMOVE_VERSION),
-	 SLE_CONDVAR(PlayerOldAI, num_build_rec, SLE_UINT8, 0, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(3,  0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4, 13, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(8,  0, SL_NOAI_MAX_VERSION),
+	 SLE_CONDVAR(PlayerOldAI, num_build_rec, SLE_UINT8, 0, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(3,  0, SL_NOAI_MAX_VERSION),
 
 	SLE_CONDNULL(2,  0,  5),
-	SLE_CONDNULL(4,  6, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4,  6, SL_NOAI_MAX_VERSION),
 	SLE_CONDNULL(2,  0,  5),
-	SLE_CONDNULL(4,  6, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(2,  0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4,  6, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(2,  0, SL_NOAI_MAX_VERSION),
 
 	SLE_CONDNULL(2,  0,  5),
-	SLE_CONDNULL(4,  6, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4,  6, SL_NOAI_MAX_VERSION),
 	SLE_CONDNULL(2,  0,  5),
-	SLE_CONDNULL(4,  6, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(2,  0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4,  6, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(2,  0, SL_NOAI_MAX_VERSION),
 
-	SLE_CONDNULL(2,  0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(2,  0, SL_NOAI_MAX_VERSION),
 
-	SLE_CONDNULL(18, 0, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(20, 0, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(32, 0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(18, 0, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(20, 0, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(32, 0, SL_NOAI_MAX_VERSION),
 
-	SLE_CONDNULL(64, 2, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(64, 2, SL_NOAI_MAX_VERSION),
 	SLE_END()
 };
 
 static const SaveLoad _player_ai_build_rec_desc[] = {
 	SLE_CONDNULL(2, 0, 5),
-	SLE_CONDNULL(4, 6, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4, 6, SL_NOAI_MAX_VERSION),
 	SLE_CONDNULL(2, 0, 5),
-	SLE_CONDNULL(4, 6, SAVELOAD_AIREMOVE_VERSION),
-	SLE_CONDNULL(8, 0, SAVELOAD_AIREMOVE_VERSION),
+	SLE_CONDNULL(4, 6, SL_NOAI_MAX_VERSION),
+	SLE_CONDNULL(8, 0, SL_NOAI_MAX_VERSION),
 	SLE_END()
 };
 
@@ -1219,7 +1223,7 @@
 	SlObject(p, _player_desc);
 
 	/* Keep backwards compatible for savegames, so load the old AI block */
-	if (!IsHumanPlayer(p->index) && CheckSavegameVersion(SAVELOAD_AIREMOVE_VERSION + 1)) {
+	if (!IsHumanPlayer(p->index) && !p->is_noai) {
 		PlayerOldAI old_ai;
 		char nothing;
 
@@ -1261,6 +1265,7 @@
 		Player *p = GetPlayer((PlayerID)index);
 		SaveLoad_PLYR(p);
 		_player_colors[index] = p->player_color;
+		p->is_noai = true;
 		UpdatePlayerMoney32(p);
 
 		/* This is needed so an AI is attached to a loaded AI */
--- a/src/saveload.cpp	Sat Apr 14 22:16:11 2007 +0000
+++ b/src/saveload.cpp	Sun Apr 15 00:17:57 2007 +0000
@@ -28,7 +28,7 @@
 #include "variables.h"
 #include <setjmp.h>
 
-extern const uint16 SAVEGAME_VERSION = SAVELOAD_AIREMOVE_VERSION + 1;
+extern const uint16 SAVEGAME_VERSION = 53;
 uint16 _sl_version;       ///< the major savegame version identifier
 byte   _sl_minor_version; ///< the minor savegame version, DO NOT USE!
 
--- a/src/saveload.h	Sat Apr 14 22:16:11 2007 +0000
+++ b/src/saveload.h	Sun Apr 15 00:17:57 2007 +0000
@@ -11,10 +11,6 @@
 
 #define SIZE_MAX ((size_t)-1)
 
-enum {
-	SAVELOAD_AIREMOVE_VERSION = 54 - 1,
-};
-
 enum SaveOrLoadResult {
 	SL_OK     = 0, ///< completed successfully
 	SL_ERROR  = 1, ///< error that was caught before internal structures were modified
@@ -60,6 +56,7 @@
 };
 
 #define SL_MAX_VERSION 255
+#define SL_NOAI_MAX_VERSION SL_MAX_VERSION
 
 enum {
 	INC_VEHICLE_COMMON = 0,
--- a/src/settings.cpp	Sat Apr 14 22:16:11 2007 +0000
+++ b/src/settings.cpp	Sun Apr 15 00:17:57 2007 +0000
@@ -653,6 +653,7 @@
 		 * 32-bit variable
 		 * TODO: Support 64-bit settings/variables */
 		switch (GetVarMemType(sd->save.conv)) {
+			case SLE_VAR_NULL: return; // Part of the NoAI 'hack' to retain savegame compatability with trunk.
 			case SLE_VAR_BL:
 			case SLE_VAR_I8:
 			case SLE_VAR_U8:
@@ -1388,7 +1389,7 @@
 
 	/***************************************************************************/
 	/* AI section of the GUI-configure patches window */
-	SDT_CONDNULL(1, 0, SAVELOAD_AIREMOVE_VERSION), // ai-new setting, became invalid with new AI system
+	SDT_CONDNULL(1, 0, SL_NOAI_MAX_VERSION), // ai-new setting, became invalid with new AI system. Part of the NoAI 'hack' to retain savegame compatability with trunk.
 	SDT_BOOL(Patches, ai_in_multiplayer,      0, 0, false, STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER, Ai_In_Multiplayer_Warning),
 	SDT_BOOL(Patches, ai_disable_veh_train,   0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_TRAINS,  NULL),
 	SDT_BOOL(Patches, ai_disable_veh_roadveh, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH, NULL),