diff options
author | peter1138 <peter1138@openttd.org> | 2005-10-14 20:10:12 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2005-10-14 20:10:12 +0000 |
commit | 5c3625b88fba7d83173851f177c14309e3d54989 (patch) | |
tree | c81de7dc93f3edb134f00c849f31546908bac26e /newgrf.c | |
parent | f97d1274bc13b976aeec0d346f6dc06f3b4072c6 (diff) | |
download | openttd-5c3625b88fba7d83173851f177c14309e3d54989.tar.xz |
(svn r3044) -NewGRF, Codechange: Improve handling of non-existent sprite sets.
Diffstat (limited to 'newgrf.c')
-rw-r--r-- | newgrf.c | 29 |
1 files changed, 11 insertions, 18 deletions
@@ -1404,14 +1404,10 @@ static void NewSpriteGroup(byte *buf, int len) if (HASBIT(groupid, 15)) { dg->ranges[i].group = NewCallBackResultSpriteGroup(groupid); dg->ranges[i].group->ref_count++; - } else if (groupid >= _cur_grffile->spritegroups_count) { - /* This doesn't exist for us. */ - grf_load_word(&buf); // skip range - i--; dg->num_ranges--; - continue; + } else if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) { + grfmsg(GMS_WARN, "NewSpriteGroup(%02x:0x%x): Groupid %04x does not exist, leaving empty.", setid, numloaded, groupid); + dg->ranges[i].group = NULL; } else { - /* XXX: If multiple surreal sets attach a surreal - * set this way, we are in trouble. */ dg->ranges[i].group = _cur_grffile->spritegroups[groupid]; dg->ranges[i].group->ref_count++; } @@ -1423,15 +1419,14 @@ static void NewSpriteGroup(byte *buf, int len) groupid = grf_load_word(&buf); if (HASBIT(groupid, 15)) { dg->default_group = NewCallBackResultSpriteGroup(groupid); - } else if (groupid >= _cur_grffile->spritegroups_count) { - /* This spritegroup stinks. */ - free(dg->ranges), dg->ranges = NULL; - grfmsg(GMS_WARN, "NewSpriteGroup(%02x:0x%x): Default groupid %04x is cargo callback or unknown, ignoring spritegroup.", setid, numloaded, groupid); - return; + dg->default_group->ref_count++; + } else if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) { + grfmsg(GMS_WARN, "NewSpriteGroup(%02x:0x%x): Groupid %04x does not exist, leaving empty.", setid, numloaded, groupid); + dg->default_group = NULL; } else { dg->default_group = _cur_grffile->spritegroups[groupid]; - } dg->default_group->ref_count++; + } if (_cur_grffile->spritegroups[setid] != NULL) UnloadSpriteGroup(&_cur_grffile->spritegroups[setid]); @@ -1474,11 +1469,9 @@ static void NewSpriteGroup(byte *buf, int len) if (HASBIT(groupid, 15)) { rg->groups[i] = NewCallBackResultSpriteGroup(groupid); rg->groups[i]->ref_count++; - } else if (groupid >= _cur_grffile->spritegroups_count) { - /* This doesn't exist for us. */ - i--; - rg->num_groups--; - continue; + } else if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) { + grfmsg(GMS_WARN, "NewSpriteGroup(%02x:0x%x): Groupid %04x does not exist, leaving empty.", setid, numloaded, groupid); + rg->groups[i] = NULL; } else { rg->groups[i] = _cur_grffile->spritegroups[groupid]; rg->groups[i]->ref_count++; |