# HG changeset patch # User frosch # Date 2011-07-29 22:23:17 # Node ID c09c4061796339be24b8b229893b3ba64ea45a73 # Parent 3ad2d3feba81665f94dc7b7716740d173bb7f3d0 (svn r22693) -Fix [FS#4691]: The override managers were not reset in some cases like creating a new scenario. diff --git a/src/misc.cpp b/src/misc.cpp --- a/src/misc.cpp +++ b/src/misc.cpp @@ -14,6 +14,7 @@ #include "news_func.h" #include "ai/ai.hpp" #include "ai/ai_gui.hpp" +#include "newgrf.h" #include "newgrf_house.h" #include "group.h" #include "economy_func.h" @@ -70,6 +71,8 @@ void InitializeGame(uint size_x, uint si PoolBase::Clean(PT_NORMAL); + ResetPersistentNewGRFData(); + InitializeSound(); InitializeMusic(); diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -7432,6 +7432,20 @@ void ResetNewGRFData() _spritegroup_pool.CleanPool(); } +/** + * Reset NewGRF data which is stored persistently in savegames. + */ +void ResetPersistentNewGRFData() +{ + /* Reset override managers */ + _engine_mngr.ResetToDefaultMapping(); + _house_mngr.ResetMapping(); + _industry_mngr.ResetMapping(); + _industile_mngr.ResetMapping(); + _airport_mngr.ResetMapping(); + _airporttile_mngr.ResetMapping(); +} + static void BuildCargoTranslationMap() { memset(_cur_grffile->cargo_map, 0xFF, sizeof(_cur_grffile->cargo_map)); diff --git a/src/newgrf.h b/src/newgrf.h --- a/src/newgrf.h +++ b/src/newgrf.h @@ -162,6 +162,7 @@ void LoadNewGRFFile(struct GRFConfig *co void LoadNewGRF(uint load_index, uint file_index); void ReloadNewGRFData(); // in saveload/afterload.cpp void ResetNewGRFData(); +void ResetPersistentNewGRFData(); void CDECL grfmsg(int severity, const char *str, ...) WARN_FORMAT(2, 3); diff --git a/src/openttd.cpp b/src/openttd.cpp --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -231,17 +231,6 @@ static void ParseResolution(Dimension *r res->height = max(strtoul(t + 1, NULL, 0), 64UL); } -static void InitializeDynamicVariables() -{ - /* Dynamic stuff needs to be initialized somewhere... */ - _engine_mngr.ResetToDefaultMapping(); - _house_mngr.ResetMapping(); - _industry_mngr.ResetMapping(); - _industile_mngr.ResetMapping(); - _airport_mngr.ResetMapping(); - _airporttile_mngr.ResetMapping(); -} - /** * Unitializes drivers, frees allocated memory, cleans pools, ... @@ -553,9 +542,6 @@ int ttd_main(int argc, char *argv[]) /* initialize screenshot formats */ InitializeScreenshotFormats(); - /* initialize all variables that are allocated dynamically */ - InitializeDynamicVariables(); - /* Initialize FreeType */ InitFreeType(); @@ -780,7 +766,6 @@ static void MakeNewGame(bool from_height _game_mode = GM_NORMAL; ResetGRFConfig(true); - InitializeDynamicVariables(); GenerateWorldSetCallback(&MakeNewGameDone); GenerateWorld(from_heightmap ? GWM_HEIGHTMAP : GWM_NEWGAME, 1 << _settings_game.game_creation.map_x, 1 << _settings_game.game_creation.map_y, reset_settings); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2557,8 +2557,6 @@ static SaveOrLoadResult DoLoad(LoadFilte _next_offs = 0; if (!load_check) { - _engine_mngr.ResetToDefaultMapping(); - /* Old maps were hardcoded to 256x256 and thus did not contain * any mapsize information. Pre-initialize to 256x256 to not to * confuse old games */ @@ -2662,7 +2660,6 @@ SaveOrLoadResult SaveOrLoad(const char * /* Load a TTDLX or TTDPatch game */ if (mode == SL_OLD_LOAD) { - _engine_mngr.ResetToDefaultMapping(); InitializeGame(256, 256, true, true); // set a mapsize of 256x256 for TTDPatch games or it might get confused /* TTD/TTO savegames have no NewGRFs, TTDP savegame have them