summaryrefslogtreecommitdiff
path: root/src/sprite.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2010-01-30 10:08:39 +0000
committerfrosch <frosch@openttd.org>2010-01-30 10:08:39 +0000
commit9e4a62d1ee8ebd467b669681cf8fb8dbf7d79638 (patch)
tree3b50fb8c695ed235c3e5c12fbe9ecf660f7cbce4 /src/sprite.cpp
parent5c9cb9648b370efccd719073149461143b85ee3e (diff)
downloadopenttd-9e4a62d1ee8ebd467b669681cf8fb8dbf7d79638.tar.xz
(svn r18959) -Feature: [NewGRF] Allow layering of multiple groundsprites in spritelayouts of stations, houses and industrytiles; so hacks with zero-sized bounding boxes are no longer needed and no longer cause trouble.
Diffstat (limited to 'src/sprite.cpp')
-rw-r--r--src/sprite.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/sprite.cpp b/src/sprite.cpp
index eb2e9a162..e817de32c 100644
--- a/src/sprite.cpp
+++ b/src/sprite.cpp
@@ -30,6 +30,7 @@
*/
void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32 orig_offset, uint32 newgrf_offset, PaletteID default_palette, bool child_offset_is_unsigned)
{
+ bool parent_sprite_encountered = false;
const DrawTileSeqStruct *dtss;
foreach_draw_tile_seq(dtss, dts->seq) {
SpriteID image = dtss->image.sprite;
@@ -45,6 +46,7 @@ void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, Transpare
PaletteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, default_palette);
if ((byte)dtss->delta_z != 0x80) {
+ parent_sprite_encountered = true;
AddSortableSpriteToDraw(
image, pal,
ti->x + dtss->delta_x, ti->y + dtss->delta_y,
@@ -55,7 +57,16 @@ void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, Transpare
} else {
int offs_x = child_offset_is_unsigned ? (uint8)dtss->delta_x : dtss->delta_x;
int offs_y = child_offset_is_unsigned ? (uint8)dtss->delta_y : dtss->delta_y;
- AddChildSpriteScreen(image, pal, offs_x, offs_y, !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to));
+ bool transparent = !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to);
+ if (parent_sprite_encountered) {
+ AddChildSpriteScreen(image, pal, offs_x, offs_y, transparent);
+ } else {
+ if (transparent) {
+ SetBit(image, PALETTE_MODIFIER_TRANSPARENT);
+ pal = PALETTE_TO_TRANSPARENT;
+ }
+ DrawGroundSprite(image, pal, NULL, offs_x, offs_y);
+ }
}
}
}