summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordominik <dominik@openttd.org>2004-11-14 22:10:08 +0000
committerdominik <dominik@openttd.org>2004-11-14 22:10:08 +0000
commitfb64b4e499ceb631f6e9109d18422e2ae604c204 (patch)
treed6896398c02266f1cd7239e6ea3c40dfde2ef609
parent051e094921f208f48f3239622f96078c528ef734 (diff)
downloadopenttd-fb64b4e499ceb631f6e9109d18422e2ae604c204.tar.xz
(svn r612) [newgrf] Fix: custom waypoints on monorail/maglev are displayed correctly
-rw-r--r--functions.h2
-rw-r--r--rail_cmd.c17
-rw-r--r--rail_gui.c10
3 files changed, 17 insertions, 12 deletions
diff --git a/functions.h b/functions.h
index acc8e1b5f..a4bc6e98f 100644
--- a/functions.h
+++ b/functions.h
@@ -66,7 +66,7 @@ void StationPickerDrawSprite(int x, int y, int railtype, int image);
/* track_land.c */
void DrawTrainDepotSprite(int x, int y, int image, int railtype);
-void DrawWaypointSprite(int x, int y, int image);
+void DrawWaypointSprite(int x, int y, int image, int railtype);
/* road_land.c */
void DrawRoadDepotSprite(int x, int y, int image);
diff --git a/rail_cmd.c b/rail_cmd.c
index 3c46b8798..ac32369d8 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -9,6 +9,8 @@
#include "station.h"
#include "sprite.h"
+extern uint16 _custom_sprites_base;
+
void ShowTrainDepotWindow(uint tile);
enum { /* These values are bitmasks for the map5 byte */
@@ -1569,9 +1571,12 @@ static void DrawTile_Track(TileInfo *ti)
// emulate station tile - open with building
DrawTileSprites *cust = &stat->renderdata[2 + (m5 & 0x1)];
uint32 relocation = GetCustomStationRelocation(stat, ComposeWaypointStation(ti->tile), 0);
+ int railtype=(_map3_lo[ti->tile] & 0xF);
+
+ image = cust->ground_sprite + railtype*((image<_custom_sprites_base)?TRACKTYPE_SPRITE_PITCH:1);
+ if (image & 0x8000) image = (image & 0x7FFF);
+
- image = cust->ground_sprite;
- if (image & 0x8000) image = (image & 0x7FFF) + tracktype_offs;
DrawGroundSprite(image);
foreach_draw_tile_seq(seq, cust->seq) {
@@ -1640,7 +1645,7 @@ void DrawTrainDepotSprite(int x, int y, int image, int railtype)
}
}
-void DrawWaypointSprite(int x, int y, int stat_id)
+void DrawWaypointSprite(int x, int y, int stat_id, int railtype)
{
struct StationSpec *stat;
uint32 relocation;
@@ -1659,14 +1664,14 @@ void DrawWaypointSprite(int x, int y, int stat_id)
const DrawTrackSeqStruct *dtss;
img = *(const uint16*)t;
- if (img & 0x8000) img = (img & 0x7FFF) + 0;
+ if (img & 0x8000) img = (img & 0x7FFF) + railtype*TRACKTYPE_SPRITE_PITCH;
DrawSprite(img, x, y);
for (dtss = (const DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) {
Point pt = RemapCoords(dtss->subcoord_x, dtss->subcoord_y, 0);
img = dtss->image;
if (img & 0x8000) img |= ormod;
- DrawSprite(img + 0, x + pt.x, y + pt.y);
+ DrawSprite(img, x + pt.x, y + pt.y);
}
return;
}
@@ -1678,7 +1683,7 @@ void DrawWaypointSprite(int x, int y, int stat_id)
// add 1 to get the other direction
cust = &stat->renderdata[2];
- img = cust->ground_sprite;
+ img = cust->ground_sprite + railtype*((img<_custom_sprites_base)?TRACKTYPE_SPRITE_PITCH:1);
if (img & 0x8000) img = (img & 0x7FFF);
DrawSprite(img, x, y);
diff --git a/rail_gui.c b/rail_gui.c
index 4ffc60c33..6aa615e65 100644
--- a/rail_gui.c
+++ b/rail_gui.c
@@ -1065,11 +1065,11 @@ static void BuildWaypointWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
r = 4*w->hscroll.pos;
- if(r+0<=_waypoint_count) DrawWaypointSprite(2, 25, r + 0);
- if(r+1<=_waypoint_count) DrawWaypointSprite(70, 25, r + 1);
- if(r+2<=_waypoint_count) DrawWaypointSprite(138, 25, r + 2);
- if(r+3<=_waypoint_count) DrawWaypointSprite(206, 25, r + 3);
- if(r+4<=_waypoint_count) DrawWaypointSprite(274, 25, r + 4);
+ if(r+0<=_waypoint_count) DrawWaypointSprite(2, 25, r + 0, _cur_railtype);
+ if(r+1<=_waypoint_count) DrawWaypointSprite(70, 25, r + 1, _cur_railtype);
+ if(r+2<=_waypoint_count) DrawWaypointSprite(138, 25, r + 2, _cur_railtype);
+ if(r+3<=_waypoint_count) DrawWaypointSprite(206, 25, r + 3, _cur_railtype);
+ if(r+4<=_waypoint_count) DrawWaypointSprite(274, 25, r + 4, _cur_railtype);
break;
}
case WE_CLICK: {