Mercurial > hg > openttd
changeset 7875:02dd433b7846 draft
(svn r11425) -Fix [FS#1424]: overriden industries were ignored when mapping newgrf industry type to 'real' industry type
author | glx <glx@openttd.org> |
---|---|
date | Mon, 12 Nov 2007 20:57:03 +0000 |
parents | 67e296ac1a18 |
children | c0e32f921e0c |
files | src/newgrf_commons.cpp |
diffstat | 1 files changed, 16 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -86,6 +86,12 @@ return id; } } + + /* No mapping found, try the overrides */ + for (uint16 id = 0; id < max_offset; id++) { + if (entity_overrides[id] == grf_local_id && grfid_overrides[id] == grfid) return id; + } + return invalid_ID; } @@ -169,6 +175,9 @@ { /* This entity hasn't been defined before, so give it an ID now. */ for (uint16 id = 0; id < max_new_entities; id++) { + /* Skip overriden industries */ + if (id < max_offset && entity_overrides[id] != invalid_ID) continue; + /* Get the real live industry */ const IndustrySpec *inds = GetIndustrySpec(id); @@ -201,21 +210,13 @@ /* First step : We need to find if this industry is already specified in the savegame data */ IndustryType ind_id = this->GetID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid); - if (ind_id == invalid_ID) { // not found? So this is the introduction of a new industry - /* Second step is dealing with the override. */ - if (inds->grf_prop.override != invalid_ID && _industry_specs[inds->grf_prop.override].grf_prop.grffile == NULL) { - /* this is an override, which means it will take the place of the industry it is - * designed to replace. Before we conclude that the override is allowed, - * we first need to verify that the slot is not holding another industry from a grf - * If it's the case,it will be considered as a normal substitute */ - ind_id = inds->grf_prop.override; - } else { - /* It has already been overriden, so you've lost your place old boy. - * Or it is a simple substitute. - * In both case, we need to find a free available slot */ - ind_id = this->AddEntityID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid, inds->grf_prop.subst_id); - inds->grf_prop.override = invalid_ID; // make sure it will not be detected as overriden - } + if (ind_id == invalid_ID) { + /* Not found. + * Or it has already been overriden, so you've lost your place old boy. + * Or it is a simple substitute. + * We need to find a free available slot */ + ind_id = this->AddEntityID(inds->grf_prop.local_id, inds->grf_prop.grffile->grfid, inds->grf_prop.subst_id); + inds->grf_prop.override = invalid_ID; // make sure it will not be detected as overriden } if (ind_id == invalid_ID) {