# HG changeset patch # User rubidium # Date 1176596277 0 # Node ID b73018a5ffc0b719f2c9017c37e7629441d16d24 # Parent db3908cf597ada64625be4e4deb1c2c391afc39e (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. diff -r db3908cf597a -r b73018a5ffc0 bin/ai/regression/regression.sav Binary file bin/ai/regression/regression.sav has changed diff -r db3908cf597a -r b73018a5ffc0 src/player.h --- 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; diff -r db3908cf597a -r b73018a5ffc0 src/players.cpp --- 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 */ diff -r db3908cf597a -r b73018a5ffc0 src/saveload.cpp --- 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 -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! diff -r db3908cf597a -r b73018a5ffc0 src/saveload.h --- 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, diff -r db3908cf597a -r b73018a5ffc0 src/settings.cpp --- 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),