Mercurial > hg > openttd
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 */