Mercurial > hg > openttd
changeset 8577:3d02afc95b6f draft
(svn r12158) -Codechange: merge all the sprite recolouring mapping under a single function
-Fix: Handle the bridge recolouring mapping as the other features. Although not specified by the specs, it seems to be implicit.
author | belugas <belugas@openttd.org> |
---|---|
date | Sat, 16 Feb 2008 03:01:05 +0000 |
parents | b16535117c57 |
children | 5fd73509ab21 |
files | src/newgrf.cpp |
diffstat | 1 files changed, 31 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -289,6 +289,26 @@ return colour; } +/** Map the colour modifiers of TTDPatch to those that Open is using. + * @param grf_sprite pointer to the structure been modified + */ +static void MapSpriteMappingRecolour(PalSpriteID *grf_sprite) +{ + if (HasBit(grf_sprite->pal, 14)) { + ClrBit(grf_sprite->pal, 14); + SetBit(grf_sprite->sprite, SPRITE_MODIFIER_OPAQUE); + } + + if (HasBit(grf_sprite->sprite, 14)) { + ClrBit(grf_sprite->sprite, 14); + SetBit(grf_sprite->sprite, PALETTE_MODIFIER_TRANSPARENT); + } + + if (HasBit(grf_sprite->sprite, 15)) { + ClrBit(grf_sprite->sprite, 15); + SetBit(grf_sprite->sprite, PALETTE_MODIFIER_COLOR); + } +} typedef bool (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len); @@ -936,18 +956,8 @@ ClrBit(dts->ground.pal, 15); SetBit(dts->ground.sprite, SPRITE_MODIFIER_USE_OFFSET); } - if (HasBit(dts->ground.pal, 14)) { - ClrBit(dts->ground.pal, 14); - SetBit(dts->ground.sprite, SPRITE_MODIFIER_OPAQUE); - } - if (HasBit(dts->ground.sprite, 15)) { - ClrBit(dts->ground.sprite, 15); - SetBit(dts->ground.sprite, PALETTE_MODIFIER_COLOR); - } - if (HasBit(dts->ground.sprite, 14)) { - ClrBit(dts->ground.sprite, 14); - SetBit(dts->ground.sprite, PALETTE_MODIFIER_TRANSPARENT); - } + + MapSpriteMappingRecolour(&dts->ground); while (buf < *bufp + len) { DrawTileSeqStruct *dtss; @@ -971,19 +981,8 @@ ClrBit(dtss->image.pal, 15); SetBit(dtss->image.sprite, SPRITE_MODIFIER_USE_OFFSET); } - if (HasBit(dtss->image.pal, 14)) { - ClrBit(dtss->image.pal, 14); - SetBit(dtss->image.sprite, SPRITE_MODIFIER_OPAQUE); - } - - if (HasBit(dtss->image.sprite, 15)) { - ClrBit(dtss->image.sprite, 15); - SetBit(dtss->image.sprite, PALETTE_MODIFIER_COLOR); - } - if (HasBit(dtss->image.sprite, 14)) { - ClrBit(dtss->image.sprite, 14); - SetBit(dtss->image.sprite, PALETTE_MODIFIER_TRANSPARENT); - } + + MapSpriteMappingRecolour(&dtss->image); } } break; @@ -1207,15 +1206,10 @@ SpriteID image = grf_load_word(&buf); SpriteID pal = grf_load_word(&buf); - if (HasBit(pal, 15)) { - SetBit(image, PALETTE_MODIFIER_TRANSPARENT); - } - - /* Clear old color modifer bit */ - ClrBit(image, 15); - bridge->sprite_table[tableid][sprite].sprite = image; bridge->sprite_table[tableid][sprite].pal = pal; + + MapSpriteMappingRecolour(&bridge->sprite_table[tableid][sprite]); } } } break; @@ -2654,19 +2648,10 @@ /* Groundsprite */ group->g.layout.dts->ground.sprite = grf_load_word(&buf); group->g.layout.dts->ground.pal = grf_load_word(&buf); + /* Remap transparent/colour modifier bits */ - if (HasBit(group->g.layout.dts->ground.sprite, 14)) { - ClrBit(group->g.layout.dts->ground.sprite, 14); - SetBit(group->g.layout.dts->ground.sprite, PALETTE_MODIFIER_TRANSPARENT); - } - if (HasBit(group->g.layout.dts->ground.sprite, 15)) { - ClrBit(group->g.layout.dts->ground.sprite, 15); - SetBit(group->g.layout.dts->ground.sprite, PALETTE_MODIFIER_COLOR); - } - if (HasBit(group->g.layout.dts->ground.pal, 14)) { - ClrBit(group->g.layout.dts->ground.pal, 14); - SetBit(group->g.layout.dts->ground.sprite, SPRITE_MODIFIER_OPAQUE); - } + MapSpriteMappingRecolour(&group->g.layout.dts->ground); + if (HasBit(group->g.layout.dts->ground.pal, 15)) { /* Bit 31 set means this is a custom sprite, so rewrite it to the * last spriteset defined. */ @@ -2685,18 +2670,8 @@ seq->delta_x = grf_load_byte(&buf); seq->delta_y = grf_load_byte(&buf); - if (HasBit(seq->image.sprite, 14)) { - ClrBit(seq->image.sprite, 14); - SetBit(seq->image.sprite, PALETTE_MODIFIER_TRANSPARENT); - } - if (HasBit(seq->image.sprite, 15)) { - ClrBit(seq->image.sprite, 15); - SetBit(seq->image.sprite, PALETTE_MODIFIER_COLOR); - } - if (HasBit(seq->image.pal, 14)) { - ClrBit(seq->image.pal, 14); - SetBit(seq->image.sprite, SPRITE_MODIFIER_OPAQUE); - } + MapSpriteMappingRecolour(&seq->image); + if (HasBit(seq->image.pal, 15)) { /* Bit 31 set means this is a custom sprite, so rewrite it to the * last spriteset defined. */