equal
deleted
inserted
replaced
67 |
67 |
68 static const uint16 * const _landscape_spriteindexes[] = { |
68 static const uint16 * const _landscape_spriteindexes[] = { |
69 _landscape_spriteindexes_1, |
69 _landscape_spriteindexes_1, |
70 _landscape_spriteindexes_2, |
70 _landscape_spriteindexes_2, |
71 _landscape_spriteindexes_3, |
71 _landscape_spriteindexes_3, |
|
72 }; |
|
73 |
|
74 static const uint16 * const _slopes_spriteindexes[] = { |
|
75 _slopes_spriteindexes_0, |
|
76 _slopes_spriteindexes_1, |
|
77 _slopes_spriteindexes_2, |
|
78 _slopes_spriteindexes_3, |
72 }; |
79 }; |
73 |
80 |
74 static void CompactSpriteCache(); |
81 static void CompactSpriteCache(); |
75 |
82 |
76 void DecodeSpecialSprite(const char *filename, int num, int load_index); |
83 void DecodeSpecialSprite(const char *filename, int num, int load_index); |
208 #endif |
215 #endif |
209 |
216 |
210 return true; |
217 return true; |
211 } |
218 } |
212 |
219 |
|
220 static void SkipSprites(int count) |
|
221 { |
|
222 while(count>0) |
|
223 { |
|
224 uint16 size; |
|
225 if ( (size = FioReadWord()) == 0) |
|
226 return; |
|
227 |
|
228 ReadSpriteHeaderSkipData(size, NUM_SPRITES-1); |
|
229 count--; |
|
230 } |
|
231 } |
|
232 |
213 // Checks, if trg1r.grf is the Windows version |
233 // Checks, if trg1r.grf is the Windows version |
214 static bool CheckGrfFile() |
234 static bool CheckGrfFile() |
215 { |
235 { |
216 byte check; |
236 byte check; |
217 FioSeekToFile(38); // Byte 38 has the value 0x21 in Windows version, 0x07 in DOS |
237 FioSeekToFile(38); // Byte 38 has the value 0x21 in Windows version, 0x07 in DOS |
244 return load_index - load_index_org; |
264 return load_index - load_index_org; |
245 } |
265 } |
246 |
266 |
247 static void LoadGrfIndexed(const char *filename, const uint16 *index_tbl, int file_index) |
267 static void LoadGrfIndexed(const char *filename, const uint16 *index_tbl, int file_index) |
248 { |
268 { |
249 int start, end; |
269 int start; |
250 |
270 |
251 FioOpenFile(file_index, filename); |
271 FioOpenFile(file_index, filename); |
252 |
272 |
253 for(;(start=*index_tbl++) != 0xffff;) { |
273 for(;(start=*index_tbl++) != 0xffff;) { |
254 end = *index_tbl++; |
274 int end = *index_tbl++; |
255 do { |
275 if(start==0xfffe) { // skip sprites (amount in second var) |
256 bool b = LoadNextSprite(start, file_index); |
276 SkipSprites(end); |
257 assert(b); |
277 } else { // load sprites and use indexes from start to end |
258 } while (++start <= end); |
278 do { |
|
279 bool b = LoadNextSprite(start, file_index); |
|
280 assert(b); |
|
281 } while (++start <= end); |
|
282 } |
259 } |
283 } |
260 } |
284 } |
261 |
285 |
262 typedef size_t CDECL fread_t(void*,size_t,size_t,FILE*); |
286 typedef size_t CDECL fread_t(void*,size_t,size_t,FILE*); |
263 |
287 |
667 { |
691 { |
668 int l; |
692 int l; |
669 if ((l=_sprite_page_to_load) != 0) |
693 if ((l=_sprite_page_to_load) != 0) |
670 LoadGrfIndexed(_landscape_filenames[l-1], _landscape_spriteindexes[l-1], i++); |
694 LoadGrfIndexed(_landscape_filenames[l-1], _landscape_spriteindexes[l-1], i++); |
671 } |
695 } |
|
696 |
|
697 LoadGrfIndexed("trkfoundw.grf", _slopes_spriteindexes[_opt.landscape], i++); |
672 |
698 |
673 load_index = SPR_CANALS_BASE; |
699 load_index = SPR_CANALS_BASE; |
674 load_index += LoadGrfFile("canalsw.grf", load_index, i++); |
700 load_index += LoadGrfFile("canalsw.grf", load_index, i++); |
675 /* XXX: Only for debugging. Will be more generic. */ |
701 /* XXX: Only for debugging. Will be more generic. */ |
676 |
702 |