changeset 13968:070572f1272d draft

(svn r18506) -Fix [FS#3368]: no error message was created for the first fatal NewGRF error.
author rubidium <rubidium@openttd.org>
date Tue, 15 Dec 2009 00:00:51 +0000
parents 01dfb82ddfab
children 93cebbb864df
files src/genworld.cpp src/lang/english.txt src/newgrf.h src/newgrf_gui.cpp src/saveload/afterload.cpp
diffstat 5 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/genworld.cpp
+++ b/src/genworld.cpp
@@ -32,6 +32,7 @@
 #include "saveload/saveload.h"
 #include "void_map.h"
 #include "town.h"
+#include "newgrf.h"
 
 #include "table/sprites.h"
 
@@ -168,6 +169,8 @@
 
 		CleanupGeneration();
 
+		ShowNewGRFError();
+
 		if (_network_dedicated) DEBUG(net, 0, "Map generated, starting game");
 		DEBUG(desync, 1, "new_map: %i\n", _settings_game.game_creation.generation_seed);
 
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2325,6 +2325,7 @@
 STR_NEWGRF_ERROR_MSG_WARNING                                    :{RED}Warning: {SILVER}{RAW_STRING}
 STR_NEWGRF_ERROR_MSG_ERROR                                      :{RED}Error: {SILVER}{RAW_STRING}
 STR_NEWGRF_ERROR_MSG_FATAL                                      :{RED}Fatal: {SILVER}{RAW_STRING}
+STR_NEWGRF_ERROR_FATAL_POPUP                                    :{WHITE}A fatal NewGRF error has occurred: {}{STRING5}
 STR_NEWGRF_ERROR_VERSION_NUMBER                                 :{1:STRING1} will not work with the TTDPatch version reported by OpenTTD.
 STR_NEWGRF_ERROR_DOS_OR_WINDOWS                                 :{1:STRING1} is for the {STRING1} version of TTD.
 STR_NEWGRF_ERROR_UNSET_SWITCH                                   :{1:STRING1} is designed to be used with {STRING1}
--- a/src/newgrf.h
+++ b/src/newgrf.h
@@ -147,5 +147,6 @@
 bool GetGlobalVariable(byte param, uint32 *value);
 
 StringID MapGRFStringID(uint32 grfid, StringID str);
+void ShowNewGRFError();
 
 #endif /* NEWGRF_H */
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -26,6 +26,29 @@
 #include "table/strings.h"
 #include "table/sprites.h"
 
+/**
+ * Show the first NewGRF error we can find.
+ */
+void ShowNewGRFError()
+{
+	for (const GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
+		/* We only want to show fatal errors */
+		if (c->error == NULL || c->error->severity != STR_NEWGRF_ERROR_MSG_FATAL) continue;
+
+		SetDParam   (0, c->error->custom_message == NULL ? c->error->message : STR_JUST_RAW_STRING);
+		SetDParamStr(1, c->error->custom_message);
+		SetDParam   (2, STR_JUST_RAW_STRING);
+		SetDParamStr(3, c->filename);
+		SetDParam   (4, STR_JUST_RAW_STRING);
+		SetDParamStr(5, c->error->data);
+		for (uint i = 0; i < c->error->num_params; i++) {
+			SetDParam(6 + i, c->error->param_value[i]);
+		}
+		ShowErrorMessage(STR_NEWGRF_ERROR_FATAL_POPUP, INVALID_STRING_ID, 0, 0, true);
+		break;
+	}
+}
+
 /** Parse an integerlist string and set each found value
  * @param p the string to be parsed. Each element in the list is seperated by a
  * comma or a space character
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -261,6 +261,7 @@
 	UpdateAirportsNoise();
 
 	CheckTrainsLengths();
+	ShowNewGRFError();
 }
 
 typedef void (CDECL *SignalHandlerPointer)(int);