12 #include "../stdafx.h" 
   15 #include "../string_func.h" 
   17 #include "../game/game.hpp" 
   18 #include "../game/game_config.hpp" 
   19 #include "../network/network.h" 
   20 #include "../game/game_instance.hpp" 
   21 #include "../game/game_text.hpp" 
   23 #include "../safeguards.h" 
   25 static char _game_saveload_name[64];
 
   26 static int  _game_saveload_version;
 
   27 static char _game_saveload_settings[1024];
 
   28 static bool _game_saveload_is_random;
 
   30 static const SaveLoad _game_script[] = {
 
   31       SLEG_STR(_game_saveload_name,        SLE_STRB),
 
   32       SLEG_STR(_game_saveload_settings,    SLE_STRB),
 
   33       SLEG_VAR(_game_saveload_version,   SLE_UINT32),
 
   34       SLEG_VAR(_game_saveload_is_random,   SLE_BOOL),
 
   38 static void SaveReal_GSDT(
int *index_ptr)
 
   47     _game_saveload_name[0] = 
'\0';
 
   48     _game_saveload_version = -1;
 
   51   _game_saveload_is_random = config->
IsRandom();
 
   52   _game_saveload_settings[0] = 
'\0';
 
   59 static void Load_GSDT()
 
   66   _game_saveload_version = -1;
 
   78     config->
Change(_game_saveload_name, _game_saveload_version, 
false, _game_saveload_is_random);
 
   82       config->
Change(_game_saveload_name, -1, 
false, _game_saveload_is_random);
 
   84         if (strcmp(_game_saveload_name, 
"%_dummy") != 0) {
 
   85           DEBUG(script, 0, 
"The savegame has an GameScript by the name '%s', version %d which is no longer available.", _game_saveload_name, _game_saveload_version);
 
   86           DEBUG(script, 0, 
"This game will continue to run without GameScript.");
 
   88           DEBUG(script, 0, 
"The savegame had no GameScript available at the time of saving.");
 
   89           DEBUG(script, 0, 
"This game will continue to run without GameScript.");
 
   92         DEBUG(script, 0, 
"The savegame has an GameScript by the name '%s', version %d which is no longer available.", _game_saveload_name, _game_saveload_version);
 
   93         DEBUG(script, 0, 
"The latest version of that GameScript has been loaded instead, but it'll not get the savegame data as it's incompatible.");
 
   97       _game_saveload_version = -1;
 
  110 static void Save_GSDT()
 
  118 static const char *_game_saveload_string;
 
  119 static uint _game_saveload_strings;
 
  121 static const SaveLoad _game_language_header[] = {
 
  123   SLEG_VAR(_game_saveload_strings, SLE_UINT32),
 
  127 static const SaveLoad _game_language_string[] = {
 
  134   _game_saveload_string  = ls->
language;
 
  137   SlObject(NULL, _game_language_header);
 
  138   for (uint i = 0; i < _game_saveload_strings; i++) {
 
  139     _game_saveload_string = ls->
lines[i];
 
  140     SlObject(NULL, _game_language_string);
 
  144 static void Load_GSTR()
 
  150     _game_saveload_string = NULL;
 
  151     SlObject(NULL, _game_language_header);
 
  154     for (uint i = 0; i < _game_saveload_strings; i++) {
 
  155       SlObject(NULL, _game_language_string);
 
  156       *ls->
lines.
Append() = 
stredup(_game_saveload_string != NULL ? _game_saveload_string : 
"");
 
  165     _current_data = NULL;
 
  173 static void Save_GSTR()
 
  175   if (_current_data == NULL) 
return;
 
  184   { 
'GSTR', Save_GSTR, Load_GSTR, NULL, NULL, CH_ARRAY },
 
  185   { 
'GSDT', Save_GSDT, Load_GSDT, NULL, NULL, CH_ARRAY | 
CH_LAST},