spritecache.c
changeset 1361 5833194df433
parent 1357 0a4c07b68673
child 1363 775a7ee52369
equal deleted inserted replaced
1360:768c53adf10a 1361:5833194df433
   145 			}
   145 			}
   146 		}
   146 		}
   147 	}
   147 	}
   148 }
   148 }
   149 
   149 
   150 static void ReadSprite(SpriteID id, byte *dest)
   150 static void ReadSprite(SpriteID id, void *buffer)
   151 {
   151 {
   152 	uint num = _sprite_size[id];
   152 	uint num = _sprite_size[id];
   153 	byte type;
   153 	byte type;
       
   154 	byte* dest;
   154 
   155 
   155 	FioSeekToFile(_sprite_file_pos[id]);
   156 	FioSeekToFile(_sprite_file_pos[id]);
   156 
   157 
   157 	type = FioReadByte();
   158 	type = FioReadByte();
   158 	/* We've decoded special sprites when reading headers. */
   159 	/* We've decoded special sprites when reading headers. */
   159 	if (type != 0xFF) {
   160 	if (type != 0xFF) {
   160 		/* read sprite hdr */
   161 		/* read sprite hdr */
   161 		Sprite* sprite = dest;
   162 		Sprite* sprite = buffer;
   162 		sprite->info = type;
   163 		sprite->info = type;
   163 		sprite->height = FioReadByte();
   164 		sprite->height = FioReadByte();
   164 		if (id == 142) sprite->height = 10; // Compensate for a TTD bug
   165 		if (id == 142) sprite->height = 10; // Compensate for a TTD bug
   165 		sprite->width = FioReadWord();
   166 		sprite->width = FioReadWord();
   166 		sprite->x_offs = FioReadWord();
   167 		sprite->x_offs = FioReadWord();
   167 		sprite->y_offs = FioReadWord();
   168 		sprite->y_offs = FioReadWord();
   168 		dest = sprite->data;
   169 		dest = sprite->data;
   169 		num -= 8;
   170 		num -= 8;
       
   171 	} else {
       
   172 		dest = buffer;
   170 	}
   173 	}
   171 
   174 
   172 	if (type & 2) {
   175 	if (type & 2) {
   173 		for (; num > 0; --num)
   176 		for (; num > 0; --num)
   174 			*dest++ = FioReadByte();
   177 			*dest++ = FioReadByte();
   678 	MAP(4120, 4125, _fence_map)
   681 	MAP(4120, 4125, _fence_map)
   679 	return s;
   682 	return s;
   680 }
   683 }
   681 #endif
   684 #endif
   682 
   685 
   683 const Sprite *GetSprite(SpriteID sprite)
   686 const void *GetRawSprite(SpriteID sprite)
   684 {
       
   685 	return GetNonSprite(sprite);
       
   686 }
       
   687 
       
   688 const byte *GetNonSprite(SpriteID sprite)
       
   689 {
   687 {
   690 	byte *p;
   688 	byte *p;
   691 
   689 
   692 	assert(sprite < NUM_SPRITES);
   690 	assert(sprite < NUM_SPRITES);
   693 
   691