Skip to content

Commit

Permalink
Fix #8846: When upgrading NewGRF presets, copy NewGRF parameters only…
Browse files Browse the repository at this point in the history
… if the NewGRF are compatible. Otherwise reset to defaults.
  • Loading branch information
frosch123 committed Oct 2, 2023
1 parent d75a5e1 commit 82c8720
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
10 changes: 9 additions & 1 deletion src/newgrf_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,14 @@ GRFConfig::GRFConfig(const GRFConfig &config) :
{
}

/**
* Return whether this NewGRF can replace an older version of the same NewGRF.
*/
bool GRFConfig::IsCompatible(uint32_t old_version) const
{
return this->min_loadable_version <= old_version && old_version <= this->version;
}

/**
* Copy the parameter information from the \a src config.
* @param src Source config.
Expand Down Expand Up @@ -685,7 +693,7 @@ const GRFConfig *FindGRFConfig(uint32_t grfid, FindGRFConfigMode mode, const MD5
/* Skip incompatible stuff, unless explicitly allowed */
if (mode != FGCM_NEWEST && HasBit(c->flags, GCF_INVALID)) continue;
/* check version compatibility */
if (mode == FGCM_COMPATIBLE && (c->version < desired_version || c->min_loadable_version > desired_version)) continue;
if (mode == FGCM_COMPATIBLE && !c->IsCompatible(desired_version)) continue;
/* remember the newest one as "the best" */
if (best == nullptr || c->version > best->version) best = c;
}
Expand Down
1 change: 1 addition & 0 deletions src/newgrf_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ struct GRFConfig : ZeroedMemoryAllocator {

struct GRFConfig *next; ///< NOSAVE: Next item in the linked list

bool IsCompatible(uint32_t old_version) const;
void CopyParams(const GRFConfig &src);

std::optional<std::string> GetTextfile(TextfileType type) const;
Expand Down
6 changes: 5 additions & 1 deletion src/newgrf_gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,11 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
while (*c != iter->second) c = &(*c)->next;
GRFConfig *d = new GRFConfig(*a);
d->next = (*c)->next;
d->CopyParams(**c);
if (d->IsCompatible((*c)->version)) {
d->CopyParams(**c);
} else {
d->SetParameterDefaults();
}
if (this->active_sel == *c) {
CloseWindowByClass(WC_GRF_PARAMETERS);
CloseWindowByClass(WC_TEXTFILE);
Expand Down

0 comments on commit 82c8720

Please sign in to comment.