changeset 15330:839bc68a738c draft

(svn r19971) -Codechange: Make IsGoodGRFConfigList() operate on any given GRFConfig and move the GameLog operations directly to AfterLoad().
author frosch <frosch@openttd.org>
date Sun, 13 Jun 2010 14:07:49 +0000
parents 6bde7fa50552
children fcc18215652e
files src/newgrf_config.cpp src/newgrf_config.h src/saveload/afterload.cpp
diffstat 3 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -276,6 +276,7 @@
 
 
 /** Check if all GRFs in the GRF config from a savegame can be loaded.
+ * @param grfconfig GrfConfig to check
  * @return will return any of the following 3 values:<br>
  * <ul>
  * <li> GLC_ALL_GOOD: No problems occured, all GRF files were found and loaded
@@ -283,11 +284,11 @@
  *     compatible GRF with the same grfid was found and used instead
  * <li> GLC_NOT_FOUND: For one or more GRF's no match was found at all
  * </ul> */
-GRFListCompatibility IsGoodGRFConfigList()
+GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig)
 {
 	GRFListCompatibility res = GLC_ALL_GOOD;
 
-	for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
+	for (GRFConfig *c = grfconfig; c != NULL; c = c->next) {
 		const GRFConfig *f = FindGRFConfig(c->ident.grfid, c->ident.md5sum);
 		if (f == NULL) {
 			char buf[256];
@@ -302,7 +303,6 @@
 
 				/* Non-found has precedence over compatibility load */
 				if (res != GLC_NOT_FOUND) res = GLC_COMPATIBLE;
-				GamelogGRFCompatible(&f->ident);
 				goto compatible_grf;
 			}
 
@@ -310,8 +310,6 @@
 			md5sumToString(buf, lastof(buf), c->ident.md5sum);
 			DEBUG(grf, 0, "NewGRF %08X (%s) not found; checksum %s", BSWAP32(c->ident.grfid), c->filename, buf);
 
-			GamelogGRFRemove(c->ident.grfid);
-
 			c->status = GCS_NOT_FOUND;
 			res = GLC_NOT_FOUND;
 		} else {
--- a/src/newgrf_config.h
+++ b/src/newgrf_config.h
@@ -119,7 +119,7 @@
 void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el);
 void ClearGRFConfigList(GRFConfig **config);
 void ResetGRFConfig(bool defaults);
-GRFListCompatibility IsGoodGRFConfigList();
+GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig);
 bool FillGRFDetails(GRFConfig *config, bool is_static);
 char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last);
 GRFConfig *DuplicateGRFConfig(const GRFConfig *c);
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -546,7 +546,15 @@
 	if (_settings_game.vehicle.road_side) _settings_game.vehicle.road_side = 1;
 
 	/* Check if all NewGRFs are present, we are very strict in MP mode */
-	GRFListCompatibility gcf_res = IsGoodGRFConfigList();
+	GRFListCompatibility gcf_res = IsGoodGRFConfigList(_grfconfig);
+	for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
+		if (c->status == GCS_NOT_FOUND) {
+			GamelogGRFRemove(c->ident.grfid);
+		} else if (HasBit(c->flags, GCF_COMPATIBLE)) {
+			GamelogGRFCompatible(&c->ident);
+		}
+	}
+
 	if (_networking && gcf_res != GLC_ALL_GOOD) {
 		SetSaveLoadError(STR_NETWORK_ERROR_CLIENT_NEWGRF_MISMATCH);
 		/* Restore the signals */