changeset 18176:3276c7baad57 draft

(svn r23005) -Fix (r23004): Of course there's still the 16-sprite version for shore tiles... we should continue to handle it.
author planetmaker <planetmaker@openttd.org>
date Wed, 05 Oct 2011 17:39:12 +0000
parents e905642c7adf
children 817449f0482e
files src/newgrf.cpp
diffstat 1 files changed, 15 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -5332,11 +5332,21 @@
 
 	const Action5Type *action5_type = &_action5_types[type];
 
-	/* Contrary to TTDP we allow always to specify too few sprites as we allow always an offset.
-	 * Thus no check for the amount of sprites is needed (anymore).
-	 * The only no-offset entry, shores, is handled above already.
-	 * We'll assume that offsets are always allowed further down, thus assert on this */
-	assert(action5_type->block_type == A5BLOCK_ALLOW_OFFSET);
+	/* Contrary to TTDP we allow always to specify too few sprites as we allow always an offset,
+	 * except for the long version of the shore type:
+	 * Ignore offset if not allowed */
+	if ((action5_type->block_type != A5BLOCK_ALLOW_OFFSET) && (offset != 0)) {
+		grfmsg(1, "GraphicsNew: %s (type 0x%02X) do not allow an <offset> field. Ignoring offset.", action5_type->name, type);
+		offset = 0;
+	}
+
+	/* Ignore action5 if too few sprites are specified. (for TTDP compatibility)
+	 * This does not make sense, if <offset> is allowed */
+	if ((action5_type->block_type == A5BLOCK_FIXED) && (num < action5_type->min_sprites)) {
+		grfmsg(1, "GraphicsNew: %s (type 0x%02X) count must be at least %d. Only %d were specified. Skipping.", action5_type->name, type, action5_type->min_sprites, num);
+		_cur.skip_sprites = num;
+		return;
+	}
 
 	/* Load at most max_sprites sprites. Skip remaining sprites. (for compatibility with TTDP and future extentions) */
 	uint16 skip_num = SanitizeSpriteOffset(num, offset, action5_type->max_sprites, action5_type->name);