1
0
Fork 0

(svn r11746) -Fix(r11727): Make sure that action 0A does follow the same new ordering of shore sprites. It was not considered in the missing shore patch

release/0.6
belugas 2008-01-03 02:39:06 +00:00
parent ade37de6c6
commit 6ce70b17ca
1 changed files with 33 additions and 9 deletions

View File

@ -3272,6 +3272,25 @@ static uint16 SanitizeSpriteOffset(uint16& num, uint16 offset, int max_sprites,
return 0; return 0;
} }
/** Allows to reposition the loaded sprite to its correct placment.
* @param load_index SpriteID of the sprite to be relocated */
static inline void TranslateShoreSprites(SpriteID load_index)
{
/* Contains the displacement required */
static const SpriteID shore_dup[8] = {
SPR_SHORE_BASE + 4, //4062
SPR_SHORE_BASE + 1, //4063
SPR_SHORE_BASE + 2, //4064
SPR_SHORE_BASE + 8, //4065
SPR_SHORE_BASE + 6, //4066
SPR_SHORE_BASE + 12, //4067
SPR_SHORE_BASE + 3, //4068
SPR_SHORE_BASE + 9, //4069
};
DupSprite(load_index, shore_dup[load_index - 4062]);
}
/* Action 0x05 */ /* Action 0x05 */
static void GraphicsNew(byte *buf, int len) static void GraphicsNew(byte *buf, int len)
{ {
@ -3363,18 +3382,18 @@ static void GraphicsNew(byte *buf, int len)
/* openttd(d/w).grf missing shore sprites and initialisation of SPR_SHORE_BASE */ /* openttd(d/w).grf missing shore sprites and initialisation of SPR_SHORE_BASE */
LoadNextSprite( SPR_SHORE_BASE + 0, _file_index, _nfo_line++); // SLOPE_STEEP_S LoadNextSprite( SPR_SHORE_BASE + 0, _file_index, _nfo_line++); // SLOPE_STEEP_S
DupSprite( 4063, SPR_SHORE_BASE + 1 ); // SLOPE_W TranslateShoreSprites(4063); // SLOPE_W
DupSprite( 4064, SPR_SHORE_BASE + 2 ); // SLOPE_S TranslateShoreSprites(4064); // SLOPE_S
DupSprite( 4068, SPR_SHORE_BASE + 3 ); // SLOPE_SW TranslateShoreSprites(4068); // SLOPE_SW
DupSprite( 4062, SPR_SHORE_BASE + 4 ); // SLOPE_E TranslateShoreSprites(4062); // SLOPE_E
LoadNextSprite( SPR_SHORE_BASE + 5, _file_index, _nfo_line++); // SLOPE_STEEP_W LoadNextSprite( SPR_SHORE_BASE + 5, _file_index, _nfo_line++); // SLOPE_STEEP_W
DupSprite( 4066, SPR_SHORE_BASE + 6 ); // SLOPE_SE TranslateShoreSprites(4066); // SLOPE_SE
LoadNextSprite( SPR_SHORE_BASE + 7, _file_index, _nfo_line++); // SLOPE_WSE LoadNextSprite( SPR_SHORE_BASE + 7, _file_index, _nfo_line++); // SLOPE_WSE
DupSprite( 4065, SPR_SHORE_BASE + 8 ); // SLOPE_N TranslateShoreSprites(4065); // SLOPE_N
DupSprite( 4069, SPR_SHORE_BASE + 9 ); // SLOPE_NW TranslateShoreSprites(4069); // SLOPE_NW
LoadNextSprite( SPR_SHORE_BASE + 10, _file_index, _nfo_line++); // SLOPE_STEEP_N LoadNextSprite( SPR_SHORE_BASE + 10, _file_index, _nfo_line++); // SLOPE_STEEP_N
LoadNextSprite( SPR_SHORE_BASE + 11, _file_index, _nfo_line++); // SLOPE_NWS LoadNextSprite( SPR_SHORE_BASE + 11, _file_index, _nfo_line++); // SLOPE_NWS
DupSprite( 4067, SPR_SHORE_BASE + 12 ); // SLOPE_NE TranslateShoreSprites(4067); // SLOPE_NE
LoadNextSprite( SPR_SHORE_BASE + 13, _file_index, _nfo_line++); // SLOPE_ENW LoadNextSprite( SPR_SHORE_BASE + 13, _file_index, _nfo_line++); // SLOPE_ENW
LoadNextSprite( SPR_SHORE_BASE + 14, _file_index, _nfo_line++); // SLOPE_SEN LoadNextSprite( SPR_SHORE_BASE + 14, _file_index, _nfo_line++); // SLOPE_SEN
LoadNextSprite( SPR_SHORE_BASE + 15, _file_index, _nfo_line++); // SLOPE_STEEP_E LoadNextSprite( SPR_SHORE_BASE + 15, _file_index, _nfo_line++); // SLOPE_STEEP_E
@ -3865,8 +3884,13 @@ static void SpriteReplace(byte *buf, int len)
); );
for (uint j = 0; j < num_sprites; j++) { for (uint j = 0; j < num_sprites; j++) {
int load_index = first_sprite + j;
_nfo_line++; _nfo_line++;
LoadNextSprite(first_sprite + j, _file_index, _nfo_line); // XXX LoadNextSprite(load_index, _file_index, _nfo_line); // XXX
/* Shore sprites (4062-4069) are now located at different addresses.
* So apply the required displacements */
if (IsInsideMM(load_index, 4062, 4069+1)) TranslateShoreSprites(load_index);
} }
} }
} }