diff options
Diffstat (limited to 'src/subgame.cpp')
-rw-r--r-- | src/subgame.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/subgame.cpp b/src/subgame.cpp index a3edcda2e..864732876 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -267,25 +267,31 @@ std::vector<WorldSpec> getAvailableWorlds() return worlds; } -bool initializeWorld(const std::string &path, const std::string &gameid) +bool loadGameConfAndInitWorld(const std::string &path, const SubgameSpec &gamespec) { + // Override defaults with those provided by the game. + // We clear and reload the defaults because the defaults + // might have been overridden by other subgame config + // files that were loaded before. + g_settings->clearDefaults(); + set_default_settings(g_settings); + Settings game_defaults; + getGameMinetestConfig(gamespec.path, game_defaults); + override_default_settings(g_settings, &game_defaults); + infostream << "Initializing world at " << path << std::endl; fs::CreateAllDirs(path); - // Initialize default settings and override defaults with those - // provided by the game - Settings game_defaults; - getGameMinetestConfig(path, game_defaults); - override_default_settings(g_settings, &game_defaults); - // Create world.mt if does not already exist std::string worldmt_path = path + DIR_DELIM "world.mt"; if (!fs::PathExists(worldmt_path)) { std::ostringstream ss(std::ios_base::binary); - ss << "gameid = " << gameid << "\nbackend = sqlite3\n" - << "creative_mode = " << g_settings->get("creative_mode") - << "\nenable_damage = " << g_settings->get("enable_damage") << "\n"; + ss << "gameid = " << gamespec.id + << "\nbackend = sqlite3" + << "\ncreative_mode = " << g_settings->get("creative_mode") + << "\nenable_damage = " << g_settings->get("enable_damage") + << "\n"; if (!fs::safeWriteToFile(worldmt_path, ss.str())) return false; |