Mercurial > hg > openttd
changeset 12093:1288972d5615 draft
(svn r16503) -Fix: base graphics names must be unique, so don't add duplicates (even if the versions differ).
author | rubidium <rubidium@openttd.org> |
---|---|
date | Tue, 02 Jun 2009 12:56:38 +0000 |
parents | 511a7baf7c34 |
children | cbc3f4302215 |
files | src/gfxinit.cpp |
diffstat | 1 files changed, 25 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -444,7 +444,7 @@ bool OBGFileScanner::AddFile(const char *filename, size_t basepath_length) { bool ret = false; - DEBUG(grf, 1, "Found %s as base graphics set", filename); + DEBUG(grf, 1, "Checking %s for base graphics set", filename); GraphicsSet *graphics = new GraphicsSet();; IniFile *ini = new IniFile(); @@ -459,12 +459,28 @@ } if (FillGraphicsSetDetails(graphics, ini, path)) { - bool duplicate = false; - for (const GraphicsSet *c = _available_graphics_sets; !duplicate && c != NULL; c = c->next) { - duplicate = (strcmp(c->name, graphics->name) == 0 || c->shortname == graphics->shortname) && c->version == graphics->version; + const GraphicsSet *duplicate = NULL; + for (const GraphicsSet *c = _available_graphics_sets; c != NULL; c = c->next) { + if (strcmp(c->name, graphics->name) == 0 || c->shortname == graphics->shortname) { + duplicate = c; + break; + } } - if (duplicate) { - delete graphics; + if (duplicate != NULL) { + if (duplicate->version >= graphics->version) { + DEBUG(grf, 1, "Not adding %s (%i) as base graphics set (duplicate)", graphics->name, graphics->version); + delete graphics; + } else { + GraphicsSet **prev = &_available_graphics_sets; + while (*prev != duplicate) prev = &(*prev)->next; + + *prev = graphics; + graphics->next = duplicate->next; + + DEBUG(grf, 1, "Removing %s (%i) as base graphics set (duplicate)", duplicate->name, duplicate->version); + delete duplicate; + ret = true; + } } else { GraphicsSet **last = &_available_graphics_sets; while (*last != NULL) last = &(*last)->next; @@ -472,6 +488,9 @@ *last = graphics; ret = true; } + if (ret) { + DEBUG(grf, 1, "Adding %s (%i) as base graphics set", graphics->name, graphics->version); + } } else { delete graphics; }