Mercurial > hg > openttd
changeset 15340:7113e55b1216 draft
(svn r19981) -Add: Read NewGRF configuration during SL_LOAD_CHECK.
author | frosch <frosch@openttd.org> |
---|---|
date | Sun, 13 Jun 2010 14:15:58 +0000 |
parents | 3a3570b1fd4c |
children | bbb2b959f4a1 |
files | src/fios.h src/fios_gui.cpp src/saveload/newgrf_sl.cpp src/saveload/saveload.cpp |
diffstat | 4 files changed, 26 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fios.h +++ b/src/fios.h @@ -20,6 +20,7 @@ #include "date_type.h" #include "settings_type.h" #include "company_base.h" +#include "newgrf_config.h" typedef SmallMap<uint, CompanyProperties *> CompanyPropertiesMap; @@ -39,7 +40,10 @@ CompanyPropertiesMap companies; ///< Company information. - LoadCheckData() : error_data(NULL) + GRFConfig *grfconfig; ///< NewGrf configuration from save. + GRFListCompatibility grf_compatibility; ///< Summary state of NewGrfs, whether missing files or only compatible found. + + LoadCheckData() : error_data(NULL), grfconfig(NULL) { this->Clear(); }
--- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -54,6 +54,8 @@ delete it->second; } companies.Clear(); + + ClearGRFConfigList(&this->grfconfig); }
--- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -14,6 +14,7 @@ #include "../core/bitmath_func.hpp" #include "../core/alloc_func.hpp" #include "../gfx_func.h" +#include "../fios.h" #include "saveload.h" @@ -40,20 +41,30 @@ } -static void Load_NGRF() +static void Load_NGRF_common(GRFConfig *&grfconfig) { - ClearGRFConfigList(&_grfconfig); + ClearGRFConfigList(&grfconfig); while (SlIterateArray() != -1) { GRFConfig *c = new GRFConfig(); SlObject(c, _grfconfig_desc); if (CheckSavegameVersion(101)) c->windows_paletted = (_use_palette == PAL_WINDOWS); - AppendToGRFConfigList(&_grfconfig, c); + AppendToGRFConfigList(&grfconfig, c); } +} + +static void Load_NGRF() +{ + Load_NGRF_common(_grfconfig); /* Append static NewGRF configuration */ AppendStaticGRFConfigs(&_grfconfig); } +static void Check_NGRF() +{ + Load_NGRF_common(_load_check_data.grfconfig); +} + extern const ChunkHandler _newgrf_chunk_handlers[] = { - { 'NGRF', Save_NGRF, Load_NGRF, NULL, NULL, CH_ARRAY | CH_LAST } + { 'NGRF', Save_NGRF, Load_NGRF, NULL, Check_NGRF, CH_ARRAY | CH_LAST } };
--- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2123,7 +2123,10 @@ _savegame_type = SGT_OTTD; - if (mode != SL_LOAD_CHECK) { + if (mode == SL_LOAD_CHECK) { + /* The only part from AfterLoadGame() we need */ + _load_check_data.grf_compatibility = IsGoodGRFConfigList(_load_check_data.grfconfig); + } else { GamelogStartAction(GLAT_LOAD); /* After loading fix up savegame for any internal changes that