newgrf.c
changeset 2515 480538b48b0f
parent 2508 c1a1af1920ce
child 2516 b11f1229cefd
--- a/newgrf.c	Fri Oct 14 08:11:18 2005 +0000
+++ b/newgrf.c	Fri Oct 14 20:10:12 2005 +0000
@@ -1404,14 +1404,10 @@
 			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 @@
 		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++;
 		}
-		dg->default_group->ref_count++;
 
 		if (_cur_grffile->spritegroups[setid] != NULL)
 			UnloadSpriteGroup(&_cur_grffile->spritegroups[setid]);
@@ -1474,11 +1469,9 @@
 			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++;