summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhackykid <hackykid@openttd.org>2005-06-19 11:56:07 +0000
committerhackykid <hackykid@openttd.org>2005-06-19 11:56:07 +0000
commit4754dad0d65a969dc8ab6eea824fe34c40c52e89 (patch)
tree89b3b17a58b9a431e9b6c950a1101dfe438dc5d2
parent3042e945d364d896d1420dc619331d84347185ba (diff)
downloadopenttd-4754dad0d65a969dc8ab6eea824fe34c40c52e89.tar.xz
(svn r2460) - Fix: Prevent assertion failure when trying to drag signals starting from a non-rail tile.
- CodeChange: Remove unused variable in CmdSignalTrackHelper.
-rw-r--r--rail_cmd.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/rail_cmd.c b/rail_cmd.c
index 171c48205..09f61344b 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -817,7 +817,7 @@ static int32 CmdSignalTrackHelper(int x, int y, uint32 flags, uint32 p1, uint32
{
int ex, ey;
int32 ret, total_cost, signal_ctr;
- byte m5, signals;
+ byte signals;
TileIndex tile = TILE_FROM_XY(x, y);
bool error = true;
@@ -830,6 +830,9 @@ static int32 CmdSignalTrackHelper(int x, int y, uint32 flags, uint32 p1, uint32
if (p1 > MapSize()) return CMD_ERROR;
if (signal_density == 0 || signal_density > 20) return CMD_ERROR;
+ if (!IsTileType(tile, MP_RAILWAY))
+ return CMD_ERROR;
+
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
/* for vertical/horizontal tracks, double the given signals density
@@ -846,7 +849,6 @@ static int32 CmdSignalTrackHelper(int x, int y, uint32 flags, uint32 p1, uint32
track = TrackdirToTrack(trackdir); /* trackdir might have changed, keep track in sync */
// copy the signal-style of the first rail-piece if existing
- m5 = _map5[tile];
if (GetRailTileType(tile) == RAIL_TYPE_SIGNALS && GetTrackBits(tile) != 0) { /* XXX: GetTrackBits check useless? */
signals = _map3_lo[tile] & SignalOnTrack(track);
if (signals == 0) signals = SignalOnTrack(track); /* Can this actually occur? */
@@ -855,18 +857,18 @@ static int32 CmdSignalTrackHelper(int x, int y, uint32 flags, uint32 p1, uint32
} else // no signals exist, drag a two-way signal stretch
signals = SignalOnTrack(track);
- /* signal_ctr - amount of tiles already processed
+ /* signal_ctr - amount of tiles already processed
* signals_density - patch setting to put signal on every Nth tile (double space on |, -- tracks)
**********
- * trackdir - trackdir to build with autorail
- * semaphores - semaphores or signals
+ * trackdir - trackdir to build with autorail
+ * semaphores - semaphores or signals
* signals - is there a signal/semaphore on the first tile, copy its style (two-way/single-way)
and convert all others to semaphore/signal
- * mode - 1 remove signals, 0 build signals */
+ * mode - 1 remove signals, 0 build signals */
signal_ctr = total_cost = 0;
for (;;) {
// only build/remove signals with the specified density
- if ((signal_ctr % signal_density) == 0 ) {
+ if ((signal_ctr % signal_density) == 0 ) {
ret = DoCommand(x, y, TrackdirToTrack(trackdir) | semaphores, signals, flags, (mode == 1) ? CMD_REMOVE_SIGNALS : CMD_BUILD_SIGNALS);
/* Abort placement for any other error than NOT_SUITABLE_TRACK