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