(svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
authorpeter1138
Wed, 10 May 2006 06:23:43 +0000
changeset 3803 87ff6c6f7d96
parent 3802 e3f0d57cc358
child 3804 53ad7c93c3d5
(svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
newgrf.c
--- a/newgrf.c	Tue May 09 17:24:08 2006 +0000
+++ b/newgrf.c	Wed May 10 06:23:43 2006 +0000
@@ -1299,7 +1299,7 @@
 }
 
 /* Helper function to either create a callback or a result sprite group. */
-static SpriteGroup* CreateGroupFromGroupID(byte setid, byte type, uint16 spriteid, uint16 num_sprites)
+static SpriteGroup* CreateGroupFromGroupID(byte feature, byte setid, byte type, uint16 spriteid, uint16 num_sprites)
 {
 	if (HASBIT(spriteid, 15)) return NewCallBackResultSpriteGroup(spriteid);
 
@@ -1319,6 +1319,12 @@
 		return NULL;
 	}
 
+	if (feature != _cur_grffile->spriteset_feature) {
+		grfmsg(GMS_WARN, "NewSpriteGroup(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping.",
+				_cur_grffile->spriteset_feature, feature);
+		return NULL;
+	}
+
 	return NewResultSpriteGroup(_cur_grffile->spriteset_start + spriteid * num_sprites, num_sprites);
 }
 
@@ -1356,14 +1362,6 @@
 			_cur_grffile->spritegroups[_cur_grffile->spritegroups_count] = NULL;
 	}
 
-	if (feature != _cur_grffile->spriteset_feature) {
-		grfmsg(GMS_WARN, "NewSpriteGroup: sprite set feature 0x%02X does not match action feature 0x%02X, skipping.",
-				_cur_grffile->spriteset_feature, feature);
-		/* Clear this group's reference */
-		_cur_grffile->spritegroups[setid] = NULL;
-		return;
-	}
-
 	switch (type) {
 		/* Deterministic Sprite Group */
 		case 0x81: // Self scope, byte
@@ -1475,6 +1473,8 @@
 		/* Neither a variable or randomized sprite group... must be a real group */
 		default:
 		{
+
+
 			switch (feature) {
 				case GSF_TRAIN:
 				case GSF_ROAD:
@@ -1507,13 +1507,13 @@
 
 					for (i = 0; i < num_loaded; i++) {
 						uint16 spriteid = grf_load_word(&buf);
-						group->g.real.loaded[i] = CreateGroupFromGroupID(setid, type, spriteid, sprites);
+						group->g.real.loaded[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites);
 						DEBUG(grf, 8) ("NewSpriteGroup: + rg->loaded[%i]  = subset %u", i, spriteid);
 					}
 
 					for (i = 0; i < num_loading; i++) {
 						uint16 spriteid = grf_load_word(&buf);
-						group->g.real.loading[i] = CreateGroupFromGroupID(setid, type, spriteid, sprites);
+						group->g.real.loading[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites);
 						DEBUG(grf, 8) ("NewSpriteGroup: + rg->loading[%i] = subset %u", i, spriteid);
 					}