diff options
author | truebrain <truebrain@openttd.org> | 2009-01-13 01:46:46 +0000 |
---|---|---|
committer | truebrain <truebrain@openttd.org> | 2009-01-13 01:46:46 +0000 |
commit | bcbbf2c366b829994983513d2858762874e99964 (patch) | |
tree | a2e699a90fbe7d2ebd18ddd9ea713546f3f641bc /src/saveload | |
parent | e6883c5cc7dedad23dfcf7a303a7154520db7f5e (diff) | |
download | openttd-bcbbf2c366b829994983513d2858762874e99964.tar.xz |
(svn r15045) -Add [NoAI API CHANGE]: in info.nut you can now have (optional) a CanLoadFromVersion(version), which should return true/false, to indicate if you can load a savegame made with your AI of version 'version'
-Add [NoAI API CHANGE]: in main.nut the Load() function now should be Load(version, data), where 'version' is the version of your AI which made the savegame
-Codechange [NoAI]: various of function renames to make things more sane
-Add [NoAI]: push the 'version' of the AI through various of layers
-Codechange [NoAI]: various of code cleanups
-Add [NoAI]: store the version of the AI in the savegame too
Diffstat (limited to 'src/saveload')
-rw-r--r-- | src/saveload/ai_sl.cpp | 36 | ||||
-rw-r--r-- | src/saveload/saveload.cpp | 2 |
2 files changed, 22 insertions, 16 deletions
diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp index 5e444ea9f..4c3e169dd 100644 --- a/src/saveload/ai_sl.cpp +++ b/src/saveload/ai_sl.cpp @@ -13,12 +13,14 @@ #include "../ai/ai.hpp" #include "../ai/ai_config.hpp" -static char _ai_saveload_ainame[64]; -static char _ai_company_convert_array[1024]; +static char _ai_saveload_name[64]; +static int _ai_saveload_version; +static char _ai_saveload_settings[1024]; static const SaveLoad _ai_company[] = { - SLEG_STR(_ai_saveload_ainame, SLE_STRB), - SLEG_STR(_ai_company_convert_array, SLE_STRB), + SLEG_STR(_ai_saveload_name, SLE_STRB), + SLEG_STR(_ai_saveload_settings, SLE_STRB), + SLEG_CONDVAR(_ai_saveload_version, SLE_UINT32, 108, SL_MAX_VERSION), SLE_END() }; @@ -27,10 +29,11 @@ static void SaveReal_AIPL(int *index_ptr) CompanyID index = (CompanyID)*index_ptr; AIConfig *config = AIConfig::GetConfig(index); - ttd_strlcpy(_ai_saveload_ainame, config->GetName(), lengthof(_ai_saveload_ainame)); + ttd_strlcpy(_ai_saveload_name, config->GetName(), lengthof(_ai_saveload_name)); + _ai_saveload_version = config->GetVersion(); - _ai_company_convert_array[0] = '\0'; - config->SettingsToString(_ai_company_convert_array, lengthof(_ai_company_convert_array)); + _ai_saveload_settings[0] = '\0'; + config->SettingsToString(_ai_saveload_settings, lengthof(_ai_saveload_settings)); SlObject(NULL, _ai_company); /* If the AI was active, store his data too */ @@ -47,27 +50,30 @@ static void Load_AIPL() CompanyID index; while ((index = (CompanyID)SlIterateArray()) != (CompanyID)-1) { AIConfig *config = AIConfig::GetConfig(index); + + _ai_saveload_version = -1; SlObject(NULL, _ai_company); - if (_ai_saveload_ainame[0] == '\0' || AI::GetCompanyInfo(_ai_saveload_ainame) == NULL) { - if (strcmp(_ai_saveload_ainame, "%_dummy") != 0) { - DEBUG(ai, 0, "The savegame has an AI by the name '%s' which is no longer available.", _ai_saveload_ainame); + config->ChangeAI(_ai_saveload_name, _ai_saveload_version); + if (!config->HasAI()) { + if (strcmp(_ai_saveload_name, "%_dummy") != 0) { + DEBUG(ai, 0, "The savegame has an AI by the name '%s', version %d which is no longer available.", _ai_saveload_name, _ai_saveload_version); DEBUG(ai, 0, "A random other AI will be loaded in its place."); } else { DEBUG(ai, 0, "The savegame had no AIs available at the time of saving."); DEBUG(ai, 0, "A random available AI will be loaded now."); } - config->ChangeAI(NULL); - } else { - config->ChangeAI(_ai_saveload_ainame); + /* Make sure the AI doesn't get the saveload data, as he was not the + * writer of the saveload data in the first place */ + _ai_saveload_version = -1; } - config->StringToSettings(_ai_company_convert_array); + config->StringToSettings(_ai_saveload_settings); /* Start the AI directly if it was active in the savegame */ if (IsValidCompanyID(index) && !IsHumanCompany(index)) { AI::StartNew(index); - AI::Load(index); + AI::Load(index, _ai_saveload_version); } } } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 6e41314f3..47934e928 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -42,7 +42,7 @@ #include <list> -extern const uint16 SAVEGAME_VERSION = 107; +extern const uint16 SAVEGAME_VERSION = 108; SavegameType _savegame_type; ///< type of savegame we are loading |