summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_station.cpp34
-rw-r--r--src/rail_cmd.cpp22
-rw-r--r--src/sprite.cpp40
-rw-r--r--src/sprite.h1
-rw-r--r--src/station_cmd.cpp6
5 files changed, 52 insertions, 51 deletions
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index 418da8a6a..992d5d8aa 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -11,7 +11,6 @@
#include "stdafx.h"
#include "variables.h"
-#include "landscape.h"
#include "debug.h"
#include "station_base.h"
#include "waypoint_base.h"
@@ -28,7 +27,6 @@
#include "animated_tile_func.h"
#include "functions.h"
#include "tunnelbridge_map.h"
-#include "spritecache.h"
#include "newgrf.h"
#include "core/random_func.hpp"
@@ -880,17 +878,14 @@ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID
{
const StationSpec *statspec;
const DrawTileSprites *sprites;
- const DrawTileSeqStruct *seq;
const RailtypeInfo *rti = GetRailTypeInfo(railtype);
- SpriteID relocation;
- SpriteID image;
SpriteID palette = COMPANY_SPRITE_COLOUR(_local_company);
uint tile = 2;
statspec = GetCustomStationSpec(sclass, station);
if (statspec == NULL) return false;
- relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE);
+ uint relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE);
if (HasBit(statspec->callback_mask, CBM_STATION_SPRITE_LAYOUT)) {
uint16 callback = GetStationCallback(CBID_STATION_SPRITE_LAYOUT, 0x2110000, 0, statspec, NULL, INVALID_TILE);
@@ -903,7 +898,7 @@ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID
sprites = &statspec->renderdata[(tile < statspec->tiles) ? tile + axis : (uint)axis];
}
- image = sprites->ground.sprite;
+ SpriteID image = sprites->ground.sprite;
SpriteID pal = sprites->ground.pal;
if (HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) {
image += GetCustomStationGroundRelocation(statspec, NULL, INVALID_TILE);
@@ -914,30 +909,7 @@ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID
DrawSprite(image, GroundSpritePaletteTransform(image, pal, palette), x, y);
- Point child_offset = {0, 0};
-
- foreach_draw_tile_seq(seq, sprites->seq) {
- image = seq->image.sprite;
- if (HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) {
- image += rti->total_offset;
- } else {
- image += relocation;
- }
-
- pal = SpriteLayoutPaletteTransform(image, seq->image.pal, palette);
-
- if ((byte)seq->delta_z != 0x80) {
- Point pt = RemapCoords(seq->delta_x, seq->delta_y, seq->delta_z);
- DrawSprite(image, pal, x + pt.x, y + pt.y);
-
- const Sprite *spr = GetSprite(image & SPRITE_MASK, ST_NORMAL);
- child_offset.x = pt.x + spr->x_offs;
- child_offset.y = pt.y + spr->y_offs;
- } else {
- /* For stations and original spritelayouts delta_x and delta_y are signed */
- DrawSprite(image, pal, x + child_offset.x + seq->delta_x, y + child_offset.y + seq->delta_y);
- }
- }
+ DrawCommonTileSeqInGUI(x, y, sprites, rti->total_offset, relocation, palette);
return true;
}
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index f1e74e999..d7622d831 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -1986,28 +1986,20 @@ static void DrawTile_Track(TileInfo *ti)
DrawBridgeMiddle(ti);
}
-
-static void DrawTileSequence(int x, int y, SpriteID ground, const DrawTileSeqStruct *dtss, uint32 offset)
-{
- SpriteID palette = COMPANY_SPRITE_COLOUR(_local_company);
-
- DrawSprite(ground, PAL_NONE, x, y);
- for (; dtss->image.sprite != 0; dtss++) {
- Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z);
- SpriteID image = dtss->image.sprite + offset;
-
- DrawSprite(image, HasBit(image, PALETTE_MODIFIER_COLOUR) ? palette : PAL_NONE, x + pt.x, y + pt.y);
- }
-}
-
void DrawTrainDepotSprite(int x, int y, int dir, RailType railtype)
{
const DrawTileSprites *dts = &_depot_gfx_table[dir];
SpriteID image = dts->ground.sprite;
uint32 offset = GetRailTypeInfo(railtype)->total_offset;
+ x += 33;
+ y += 17;
+
if (image != SPR_FLAT_GRASS_TILE) image += offset;
- DrawTileSequence(x + 33, y + 17, image, dts->seq, offset);
+ SpriteID palette = COMPANY_SPRITE_COLOUR(_local_company);
+
+ DrawSprite(image, PAL_NONE, x, y);
+ DrawCommonTileSeqInGUI(x, y, dts, offset, 0, palette);
}
static uint GetSlopeZ_Track(TileIndex tile, uint x, uint y)
diff --git a/src/sprite.cpp b/src/sprite.cpp
index 1edaa2909..574cc1d31 100644
--- a/src/sprite.cpp
+++ b/src/sprite.cpp
@@ -13,6 +13,8 @@
#include "sprite.h"
#include "tile_cmd.h"
#include "viewport_func.h"
+#include "landscape.h"
+#include "spritecache.h"
#include "table/sprites.h"
@@ -56,3 +58,41 @@ void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, Transpare
}
}
}
+
+/**
+ * Draws a tile sprite sequence in the GUI
+ * @param x X position to draw to
+ * @param y Y position to draw to
+ * @param dts Sprite and subsprites to draw
+ * @param orig_offset Sprite-Offset for original sprites
+ * @param newgrf_offset Sprite-Offset for NewGRF defined sprites
+ * @param default_palette The default recolour sprite to use (typically company colour)
+ */
+void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32 orig_offset, uint32 newgrf_offset, SpriteID default_palette)
+{
+ const DrawTileSeqStruct *dtss;
+ Point child_offset = {0, 0};
+
+ foreach_draw_tile_seq(dtss, dts->seq) {
+ SpriteID image = dtss->image.sprite;
+ if (newgrf_offset == 0 || HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) {
+ image += orig_offset;
+ } else {
+ image += newgrf_offset;
+ }
+
+ SpriteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, default_palette);
+
+ if ((byte)dtss->delta_z != 0x80) {
+ Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z);
+ DrawSprite(image, pal, x + pt.x, y + pt.y);
+
+ const Sprite *spr = GetSprite(image & SPRITE_MASK, ST_NORMAL);
+ child_offset.x = pt.x + spr->x_offs;
+ child_offset.y = pt.y + spr->y_offs;
+ } else {
+ /* For stations and original spritelayouts delta_x and delta_y are signed */
+ DrawSprite(image, pal, x + child_offset.x + dtss->delta_x, y + child_offset.y + dtss->delta_y);
+ }
+ }
+}
diff --git a/src/sprite.h b/src/sprite.h
index c0d37d9ce..5251f7a3b 100644
--- a/src/sprite.h
+++ b/src/sprite.h
@@ -69,6 +69,7 @@ struct DrawBuildingsTileStruct {
#define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++)
void DrawCommonTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32 orig_offset, uint32 newgrf_offset, SpriteID default_palette);
+void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32 orig_offset, uint32 newgrf_offset, SpriteID default_palette);
bool SkipSpriteData(byte type, uint16 num);
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index e3e041195..9fcd078f2 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2476,11 +2476,7 @@ void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, Ro
DrawSprite(SPR_TRAMWAY_TRAM + (t->ground.sprite == SPR_ROAD_PAVED_STRAIGHT_X ? 1 : 0), PAL_NONE, x, y);
}
- const DrawTileSeqStruct *dtss;
- foreach_draw_tile_seq(dtss, t->seq) {
- Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z);
- DrawSprite(dtss->image.sprite + total_offset, pal, x + pt.x, y + pt.y);
- }
+ DrawCommonTileSeqInGUI(x, y, t, total_offset, 0, pal);
}
static uint GetSlopeZ_Station(TileIndex tile, uint x, uint y)