102 FioSeekToFile(filepos); |
102 FioSeekToFile(filepos); |
103 |
103 |
104 num = FioReadWord(); |
104 num = FioReadWord(); |
105 type = FioReadByte(); |
105 type = FioReadByte(); |
106 if (type == 0xFF) { |
106 if (type == 0xFF) { |
107 byte* dest = AllocSprite(num); |
107 byte* dest; |
|
108 |
|
109 if (real_sprite) { |
|
110 static byte warning_level = 0; |
|
111 DEBUG(misc, warning_level) ("Tried to load non sprite #%d as a real sprite. Probable cause: NewGRF interference", id); |
|
112 warning_level = 6; |
|
113 if (id == SPR_IMG_QUERY) error("Uhm, would you be so kind not to load a NewGRF that makes the 'query' sprite a non- sprite?"); |
|
114 return (void*)GetSprite(SPR_IMG_QUERY); |
|
115 } |
|
116 |
|
117 dest = AllocSprite(num); |
108 |
118 |
109 _sprite_ptr[id] = dest; |
119 _sprite_ptr[id] = dest; |
110 FioReadBlock(dest, num); |
120 FioReadBlock(dest, num); |
111 |
121 |
112 return dest; |
122 return dest; |
113 } else { |
123 } else { |
114 uint height = FioReadByte(); |
124 uint height = FioReadByte(); |
115 uint width = FioReadWord(); |
125 uint width = FioReadWord(); |
116 Sprite* sprite; |
126 Sprite* sprite; |
117 byte* dest; |
127 byte* dest; |
|
128 |
|
129 if (!real_sprite) { |
|
130 static byte warning_level = 0; |
|
131 DEBUG(misc, warning_level) ("Tried to load real sprite #%d as a non sprite. Probable cause: NewGRF interference", id); |
|
132 warning_level = 6; |
|
133 } |
118 |
134 |
119 num = (type & 0x02) ? width * height : num - 8; |
135 num = (type & 0x02) ? width * height : num - 8; |
120 sprite = AllocSprite(sizeof(*sprite) + num); |
136 sprite = AllocSprite(sizeof(*sprite) + num); |
121 _sprite_ptr[id] = sprite; |
137 _sprite_ptr[id] = sprite; |
122 sprite->info = type; |
138 sprite->info = type; |
442 _sprite_lru[sprite] = 0; |
458 _sprite_lru[sprite] = 0; |
443 #endif |
459 #endif |
444 |
460 |
445 p = _sprite_ptr[sprite]; |
461 p = _sprite_ptr[sprite]; |
446 // Load the sprite, if it is not loaded, yet |
462 // Load the sprite, if it is not loaded, yet |
447 if (p == NULL) p = ReadSprite(sprite); |
463 if (p == NULL) p = ReadSprite(sprite, real_sprite); |
448 return p; |
464 return p; |
449 } |
465 } |
450 |
466 |
451 |
467 |
452 void GfxInitSpriteMem(void) |
468 void GfxInitSpriteMem(void) |