333 // Reached sentinel, but no block found yet. Delete some old entry. |
333 // Reached sentinel, but no block found yet. Delete some old entry. |
334 DeleteEntryFromSpriteCache(); |
334 DeleteEntryFromSpriteCache(); |
335 } |
335 } |
336 } |
336 } |
337 |
337 |
338 #if defined(NEW_ROTATION) |
|
339 #define X15(x) else if (s >= x && s < (x+15)) { s = _rotate_tile_sprite[s - x] + x; } |
|
340 #define X19(x) else if (s >= x && s < (x+19)) { s = _rotate_tile_sprite[s - x] + x; } |
|
341 #define MAP(from,to,map) else if (s >= from && s <= to) { s = map[s - from] + from; } |
|
342 |
|
343 |
|
344 static uint RotateSprite(uint s) |
|
345 { |
|
346 static const byte _rotate_tile_sprite[19] = { 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 17, 18, 16, 15 }; |
|
347 static const byte _coast_map[9] = {0, 4, 3, 1, 2, 6, 8, 5, 7}; |
|
348 static const byte _fence_map[6] = {1, 0, 5, 4, 3, 2}; |
|
349 |
|
350 if (0); |
|
351 X19(752) |
|
352 X15(990-1) |
|
353 X19(3924) |
|
354 X19(3943) |
|
355 X19(3962) |
|
356 X19(3981) |
|
357 X19(4000) |
|
358 X19(4023) |
|
359 X19(4042) |
|
360 MAP(4061, 4069, _coast_map) |
|
361 X19(4126) |
|
362 X19(4145) |
|
363 X19(4164) |
|
364 X19(4183) |
|
365 X19(4202) |
|
366 X19(4221) |
|
367 X19(4240) |
|
368 X19(4259) |
|
369 X19(4259) |
|
370 X19(4278) |
|
371 MAP(4090, 4095, _fence_map) |
|
372 MAP(4096, 4101, _fence_map) |
|
373 MAP(4102, 4107, _fence_map) |
|
374 MAP(4108, 4113, _fence_map) |
|
375 MAP(4114, 4119, _fence_map) |
|
376 MAP(4120, 4125, _fence_map) |
|
377 return s; |
|
378 } |
|
379 #endif |
|
380 |
338 |
381 const void *GetRawSprite(SpriteID sprite) |
339 const void *GetRawSprite(SpriteID sprite) |
382 { |
340 { |
383 void* p; |
341 void* p; |
384 |
342 |
385 assert(sprite < MAX_SPRITES); |
343 assert(sprite < MAX_SPRITES); |
386 |
|
387 #if defined(NEW_ROTATION) |
|
388 sprite = RotateSprite(sprite); |
|
389 #endif |
|
390 |
344 |
391 // Update LRU |
345 // Update LRU |
392 _sprite_lru_new[sprite] = ++_sprite_lru_counter; |
346 _sprite_lru_new[sprite] = ++_sprite_lru_counter; |
393 |
347 |
394 p = _sprite_ptr[sprite]; |
348 p = _sprite_ptr[sprite]; |