diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -57,26 +57,29 @@ Game::scanner = new GameScannerInfo(); Game::scanner->Initialize(); } +} - if (Game::instance == NULL) { - /* Clients shouldn't start GameScripts */ - if (_networking && !_network_server) return; +/* static */ void Game::StartNew() +{ + if (Game::instance != NULL) return; - GameConfig *config = GameConfig::GetConfig(); - GameInfo *info = config->GetInfo(); - if (info == NULL) return; + /* Clients shouldn't start GameScripts */ + if (_networking && !_network_server) return; - Backup cur_company(_current_company, FILE_LINE); - cur_company.Change(OWNER_DEITY); + GameConfig *config = GameConfig::GetConfig(); + GameInfo *info = config->GetInfo(); + if (info == NULL) return; + + Backup cur_company(_current_company, FILE_LINE); + cur_company.Change(OWNER_DEITY); - Game::info = info; - Game::instance = new GameInstance(); - Game::instance->Initialize(info); + Game::info = info; + Game::instance = new GameInstance(); + Game::instance->Initialize(info); - cur_company.Restore(); + cur_company.Restore(); - InvalidateWindowData(WC_AI_DEBUG, 0, -1); - } + InvalidateWindowData(WC_AI_DEBUG, 0, -1); } /* static */ void Game::Uninitialize(bool keepConfig) @@ -138,6 +141,29 @@ } +/* static */ void Game::Save() +{ + if (Game::instance != NULL && (!_networking || _network_server)) { + Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Game::instance->Save(); + cur_company.Restore(); + } else { + GameInstance::SaveEmpty(); + } +} + +/* static */ void Game::Load(int version) +{ + if (Game::instance != NULL && (!_networking || _network_server)) { + Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Game::instance->Load(version); + cur_company.Restore(); + } else { + /* Read, but ignore, the load data */ + GameInstance::LoadEmpty(); + } +} + /* static */ char *Game::GetConsoleList(char *p, const char *last, bool newest_only) { return Game::scanner->GetConsoleList(p, last, newest_only);