--- a/src/newgrf_house.cpp Sun Sep 23 07:37:38 2007 +0000
+++ b/src/newgrf_house.cpp Sat Oct 06 22:30:24 2007 +0000
@@ -308,19 +308,23 @@
SpriteID image = dts->ground_sprite;
SpriteID pal = dts->ground_pal;
+ if (IS_CUSTOM_SPRITE(image)) image += stage;
+
if (GB(image, 0, SPRITE_WIDTH) != 0) DrawGroundSprite(image, pal);
foreach_draw_tile_seq(dtss, dts->seq) {
if (GB(dtss->image, 0, SPRITE_WIDTH) == 0) continue;
- image = dtss->image + stage;
+ image = dtss->image;
pal = dtss->pal;
+ if (IS_CUSTOM_SPRITE(image)) image += stage;
+
if ((HASBIT(image, SPRITE_MODIFIER_OPAQUE) || !HASBIT(_transparent_opt, TO_HOUSES)) && HASBIT(image, PALETTE_MODIFIER_COLOR)) {
if (pal == 0) {
const HouseSpec *hs = GetHouseSpecs(house_id);
- if (HASBIT(hs->callback_mask, CBM_BUILDING_COLOUR)) {
- uint16 callback = GetHouseCallback(CBID_BUILDING_COLOUR, 0, 0, house_id, GetTownByTile(ti->tile), ti->tile);
+ if (HASBIT(hs->callback_mask, CBM_HOUSE_COLOUR)) {
+ uint16 callback = GetHouseCallback(CBID_HOUSE_COLOUR, 0, 0, house_id, GetTownByTile(ti->tile), ti->tile);
if (callback != CALLBACK_FAILED) {
/* If bit 14 is set, we should use a 2cc colour map, else use the callback value. */
pal = HASBIT(callback, 14) ? GB(callback, 0, 8) + SPR_2CCMAP_BASE : callback;
@@ -342,7 +346,7 @@
HASBIT(_transparent_opt, TO_HOUSES)
);
} else {
- AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y);
+ AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, HASBIT(_transparent_opt, TO_HOUSES));
}
}
}
@@ -375,7 +379,7 @@
byte animation_speed = hs->animation_speed;
bool frame_set_by_callback = false;
- if (HASBIT(hs->callback_mask, CBM_ANIMATION_SPEED)) {
+ if (HASBIT(hs->callback_mask, CBM_HOUSE_ANIMATION_SPEED)) {
uint16 callback_res = GetHouseCallback(CBID_HOUSE_ANIMATION_SPEED, 0, 0, GetHouseType(tile), GetTownByTile(tile), tile);
if (callback_res != CALLBACK_FAILED) animation_speed = clamp(callback_res & 0xFF, 2, 16);
}
@@ -389,7 +393,7 @@
byte frame = GetHouseAnimationFrame(tile);
byte num_frames = GB(hs->animation_frames, 0, 7);
- if (HASBIT(hs->callback_mask, CBM_ANIMATION_NEXT_FRAME)) {
+ if (HASBIT(hs->callback_mask, CBM_HOUSE_ANIMATION_NEXT_FRAME)) {
uint32 param = (hs->extra_flags & CALLBACK_1A_RANDOM_BITS) ? Random() : 0;
uint16 callback_res = GetHouseCallback(CBID_HOUSE_ANIMATION_NEXT_FRAME, param, 0, GetHouseType(tile), GetTownByTile(tile), tile);
@@ -468,7 +472,7 @@
{
const HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
- if (HASBIT(hs->callback_mask, CBM_ANIMATION_START_STOP)) {
+ if (HASBIT(hs->callback_mask, CBM_HOUSE_ANIMATION_START_STOP)) {
uint32 param = (hs->extra_flags & SYNCHRONISED_CALLBACK_1B) ? (GB(Random(), 0, 16) | random_bits << 16) : Random();
uint16 callback_res = GetHouseCallback(CBID_HOUSE_ANIMATION_START_STOP, param, 0, GetHouseType(tile), GetTownByTile(tile), tile);
@@ -491,7 +495,7 @@
* MarkTileDirtyByTile(tile);
*/
- if (HASBIT(hs->callback_mask, CBM_ANIMATION_START_STOP)) {
+ if (HASBIT(hs->callback_mask, CBM_HOUSE_ANIMATION_START_STOP)) {
/* If this house is marked as having a synchronised callback, all the
* tiles will have the callback called at once, rather than when the
* tile loop reaches them. This should only be enabled for the northern