summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordominik <dominik@openttd.org>2004-11-14 20:25:07 +0000
committerdominik <dominik@openttd.org>2004-11-14 20:25:07 +0000
commitc2193ce1a8f1e9acdada4675222d290fcf6640b7 (patch)
treeaab00b05ef796d56ddbd2dc7ee5790001f4b71d1
parent0bcc9b7573fea66107b134a9036849bc5e4d95e7 (diff)
downloadopenttd-c2193ce1a8f1e9acdada4675222d290fcf6640b7.tar.xz
(svn r609) Fixed choose waypoints dialogs, it works without assertion failures and with custom waypoint #0 selectable now. (pasky)
-rw-r--r--rail_cmd.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/rail_cmd.c b/rail_cmd.c
index b17509822..060e3da89 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -736,7 +736,7 @@ int32 CmdBuildTrainWaypoint(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) {
ModifyTile(tile, MP_MAP5, RAIL_TYPE_WAYPOINT | dir);
- if (p1 & 0x100 && (p1 & 0xff)!=0) { // waypoint type 0 uses default graphics
+ if (--p1 & 0x100) { // waypoint type 0 uses default graphics
// custom graphics
_map3_lo[tile] |= 16;
_map3_hi[tile] = p1 & 0xff;
@@ -1626,20 +1626,11 @@ void DrawTrainDepotSprite(int x, int y, int image, int railtype)
void DrawWaypointSprite(int x, int y, int stat_id)
{
- struct StationSpec *stat = GetCustomStation('WAYP', stat_id);
+ struct StationSpec *stat;
uint32 relocation;
DrawTileSprites *cust;
DrawTileSeqStruct const *seq;
uint32 ormod, img;
- const DrawTrackSeqStruct *dtss;
- const byte *t;
-
- assert(stat);
-
- relocation = GetCustomStationRelocation(stat, NULL, 1);
- // emulate station tile - open with building
- // add 1 to get the other direction
- cust = &stat->renderdata[2];
ormod = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player));
@@ -1647,14 +1638,15 @@ void DrawWaypointSprite(int x, int y, int stat_id)
y += 17;
// draw default waypoint graphics of ID 0
- t = _track_depot_layout_table[4];
- if(stat_id==0)
- {
+ if (stat_id == 0) {
+ const byte *t = _track_depot_layout_table[4];
+ const DrawTrackSeqStruct *dtss;
+
img = *(const uint16*)t;
if (img & 0x8000) img = (img & 0x7FFF) + 0;
DrawSprite(img, x, y);
- for(dtss = (const DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) {
+ 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;
@@ -1663,6 +1655,13 @@ void DrawWaypointSprite(int x, int y, int stat_id)
return;
}
+ stat = GetCustomStation('WAYP', stat_id - 1);
+ assert(stat);
+ relocation = GetCustomStationRelocation(stat, NULL, 1);
+ // emulate station tile - open with building
+ // add 1 to get the other direction
+ cust = &stat->renderdata[2];
+
img = cust->ground_sprite;
if (img & 0x8000) img = (img & 0x7FFF);
DrawSprite(img, x, y);