(svn r11720) -Codechange: [NewGRF] Add support for bit 30 of station tile layouts; forcing a sprite to always be opaque.
--- a/src/newgrf.cpp Sat Dec 29 09:24:26 2007 +0000
+++ b/src/newgrf.cpp Sat Dec 29 21:06:54 2007 +0000
@@ -950,6 +950,10 @@
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);
@@ -981,6 +985,10 @@
ClrBit(dtss->pal, 15);
SetBit(dtss->image, SPRITE_MODIFIER_USE_OFFSET);
}
+ if (HasBit(dtss->pal, 14)) {
+ ClrBit(dtss->pal, 14);
+ SetBit(dtss->image, SPRITE_MODIFIER_OPAQUE);
+ }
if (HasBit(dtss->image, 15)) {
ClrBit(dtss->image, 15);
--- a/src/rail_cmd.cpp Sat Dec 29 09:24:26 2007 +0000
+++ b/src/rail_cmd.cpp Sat Dec 29 21:06:54 2007 +0000
@@ -1811,7 +1811,7 @@
image += relocation;
}
- if (!IsTransparencySet(TO_BUILDINGS) && HasBit(image, PALETTE_MODIFIER_COLOR)) {
+ if (!(!HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS)) && HasBit(image, PALETTE_MODIFIER_COLOR)) {
pal = _drawtile_track_palette;
} else {
pal = dtss->pal;
@@ -1823,7 +1823,7 @@
ti->x + dtss->delta_x, ti->y + dtss->delta_y,
dtss->size_x, dtss->size_y,
dtss->size_z, ti->z + dtss->delta_z,
- IsTransparencySet(TO_BUILDINGS)
+ !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS)
);
} else {
AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y);
--- a/src/station_cmd.cpp Sat Dec 29 09:24:26 2007 +0000
+++ b/src/station_cmd.cpp Sat Dec 29 21:06:54 2007 +0000
@@ -2160,7 +2160,7 @@
}
SpriteID pal;
- if (!IsTransparencySet(TO_BUILDINGS) && HasBit(image, PALETTE_MODIFIER_COLOR)) {
+ if (!(!HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS)) && HasBit(image, PALETTE_MODIFIER_COLOR)) {
pal = palette;
} else {
pal = dtss->pal;
@@ -2172,7 +2172,7 @@
ti->x + dtss->delta_x, ti->y + dtss->delta_y,
dtss->size_x, dtss->size_y,
dtss->size_z, ti->z + dtss->delta_z,
- IsTransparencySet(TO_BUILDINGS)
+ !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS)
);
} else {
AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, IsTransparencySet(TO_BUILDINGS));
--- a/src/table/sprites.h Sat Dec 29 09:24:26 2007 +0000
+++ b/src/table/sprites.h Sat Dec 29 21:06:54 2007 +0000
@@ -1415,6 +1415,7 @@
TRANSPARENT_BIT = 31, ///< toggles transparency in the sprite
RECOLOR_BIT = 30, ///< toggles recoloring in the sprite
OFFSET_BIT = 29,
+ OPAQUE_BIT = 28,
PALETTE_WIDTH = 24, ///< number of bits of the sprite containing the recolor palette
SPRITE_WIDTH = 24, ///< number of bits for the sprite number
@@ -1430,7 +1431,8 @@
*/
enum Modifiers {
SPRITE_MODIFIER_USE_OFFSET = OFFSET_BIT,
- SPRITE_MODIFIER_OPAQUE = OFFSET_BIT,
+ /// Set when a sprite must not ever be displayed transparently
+ SPRITE_MODIFIER_OPAQUE = OPAQUE_BIT,
///when a sprite is to be displayed transparently, this bit needs to be set.
PALETTE_MODIFIER_TRANSPARENT = TRANSPARENT_BIT,
///this bit is set when a recoloring process is in action