(svn r651) LoadNewGrfFile() now doesn't care about num_sprites and just loads whatever is
authormiham
Wed, 17 Nov 2004 02:24:21 +0000
changeset 442 913a307af50d
parent 441 892cb9999501
child 443 a45be556a111
(svn r651) LoadNewGrfFile() now doesn't care about num_sprites and just loads whatever is
available. Fixes George's long vehicles. (pasky)
spritecache.c
--- a/spritecache.c	Wed Nov 17 02:01:12 2004 +0000
+++ b/spritecache.c	Wed Nov 17 02:24:21 2004 +0000
@@ -308,9 +308,6 @@
 
 static int LoadNewGrfFile(const char *filename, int load_index, int file_index)
 {
-	/* XXX: Is it better to fervently follow the num_sprites information or
-	 * be tolerant and comply with more/less sprites too? --pasky */
-	int num_sprites = 0;
 	int i;
 	
 	FioOpenFile(file_index, filename);
@@ -321,6 +318,9 @@
 	DEBUG(spritecache, 2) ("Reading newgrf-file ``%s'' [offset: %u]",
 			filename, load_index);
 
+	/* Skip the first sprite; we don't care about how many sprites this
+	 * does contain; newest TTDPatches and George's longvehicles don't
+	 * neither, apparently. */
 	{
 		int length;
 		byte type;
@@ -329,24 +329,16 @@
 		type = FioReadByte();
 
 		if ((length == 4) && (type == 0xFF)) {
-			num_sprites = FioReadDword();
+			FioReadDword();
 		} else {
 			error("Custom .grf has invalid format.");
 		}
-
-		/* Ignore last sprite, it's only used to mark end-of-file */
-		num_sprites--;
-		load_index++;
 	}
 
-	if ((load_index + num_sprites) > NUM_SPRITES)
-		error("Too many sprites (%x). Recompile with higher NUM_SPRITES value or remove some custom GRF files.",
-		      load_index + num_sprites);
-
-	for (i = 0; i < num_sprites; i++) {
-		if (!LoadNextSprite(load_index + i, file_index))
-			error("NEWGRF: Header was talking abount %d sprites, but only %d found..",
-			      num_sprites, i);
+	for (i = 0; LoadNextSprite(load_index + i, file_index); i++) {
+		if (load_index + i >= NUM_SPRITES)
+			error("Too many sprites (%x). Recompile with higher NUM_SPRITES value or remove some custom GRF files.",
+			      load_index + i);
 	}
 
 	/* Clean up. */
@@ -354,7 +346,7 @@
 	memset(_replace_sprites_count, 0, 16 * sizeof(*_replace_sprites_count));
 	memset(_replace_sprites_offset, 0, 16 * sizeof(*_replace_sprites_offset));
 
-	return num_sprites;
+	return i;
 }
 
 static void LoadGrfIndexed(const char *filename, const uint16 *index_tbl, int file_index)