diff options
author | dominik <dominik@openttd.org> | 2004-11-14 20:25:07 +0000 |
---|---|---|
committer | dominik <dominik@openttd.org> | 2004-11-14 20:25:07 +0000 |
commit | c2193ce1a8f1e9acdada4675222d290fcf6640b7 (patch) | |
tree | aab00b05ef796d56ddbd2dc7ee5790001f4b71d1 | |
parent | 0bcc9b7573fea66107b134a9036849bc5e4d95e7 (diff) | |
download | openttd-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.c | 29 |
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); |