mirror of https://github.com/OpenTTD/OpenTTD
(svn r26279) -Fix [FS#5853]: [NoAI] Some RemoveRail methods required to set a valid railtype, though it was not used anyway. Remove the need to set one.
parent
cce3d4fec8
commit
5d4c4b9172
|
@ -821,7 +821,7 @@ static CommandCost ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileInd
|
||||||
* @param flags operation to perform
|
* @param flags operation to perform
|
||||||
* @param p1 end tile of drag
|
* @param p1 end tile of drag
|
||||||
* @param p2 various bitstuffed elements
|
* @param p2 various bitstuffed elements
|
||||||
* - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
|
* - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building
|
||||||
* - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
|
* - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
|
||||||
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
|
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
|
||||||
* - p2 = (bit 8) - 0 = build up to an obstacle, 1 = fail if an obstacle is found (used for AIs).
|
* - p2 = (bit 8) - 0 = build up to an obstacle, 1 = fail if an obstacle is found (used for AIs).
|
||||||
|
@ -835,7 +835,7 @@ static CommandCost CmdRailTrackHelper(TileIndex tile, DoCommandFlag flags, uint3
|
||||||
bool remove = HasBit(p2, 7);
|
bool remove = HasBit(p2, 7);
|
||||||
RailType railtype = Extract<RailType, 0, 4>(p2);
|
RailType railtype = Extract<RailType, 0, 4>(p2);
|
||||||
|
|
||||||
if (!ValParamRailtype(railtype) || !ValParamTrackOrientation(track)) return CMD_ERROR;
|
if ((!remove && !ValParamRailtype(railtype)) || !ValParamTrackOrientation(track)) return CMD_ERROR;
|
||||||
if (p1 >= MapSize()) return CMD_ERROR;
|
if (p1 >= MapSize()) return CMD_ERROR;
|
||||||
TileIndex end_tile = p1;
|
TileIndex end_tile = p1;
|
||||||
Trackdir trackdir = TrackToTrackdir(track);
|
Trackdir trackdir = TrackToTrackdir(track);
|
||||||
|
@ -846,7 +846,7 @@ static CommandCost CmdRailTrackHelper(TileIndex tile, DoCommandFlag flags, uint3
|
||||||
bool had_success = false;
|
bool had_success = false;
|
||||||
CommandCost last_error = CMD_ERROR;
|
CommandCost last_error = CMD_ERROR;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
CommandCost ret = DoCommand(tile, railtype, TrackdirToTrack(trackdir), flags, remove ? CMD_REMOVE_SINGLE_RAIL : CMD_BUILD_SINGLE_RAIL);
|
CommandCost ret = DoCommand(tile, remove ? 0 : railtype, TrackdirToTrack(trackdir), flags, remove ? CMD_REMOVE_SINGLE_RAIL : CMD_BUILD_SINGLE_RAIL);
|
||||||
|
|
||||||
if (ret.Failed()) {
|
if (ret.Failed()) {
|
||||||
last_error = ret;
|
last_error = ret;
|
||||||
|
@ -900,7 +900,7 @@ CommandCost CmdBuildRailroadTrack(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||||
* @param flags operation to perform
|
* @param flags operation to perform
|
||||||
* @param p1 end tile of drag
|
* @param p1 end tile of drag
|
||||||
* @param p2 various bitstuffed elements
|
* @param p2 various bitstuffed elements
|
||||||
* - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
|
* - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building
|
||||||
* - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
|
* - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
|
||||||
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
|
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
|
||||||
* @param text unused
|
* @param text unused
|
||||||
|
|
|
@ -253,7 +253,7 @@
|
||||||
EnforcePrecondition(false, GetRailTracks(tile) & rail_track);
|
EnforcePrecondition(false, GetRailTracks(tile) & rail_track);
|
||||||
EnforcePrecondition(false, KillFirstBit((uint)rail_track) == 0);
|
EnforcePrecondition(false, KillFirstBit((uint)rail_track) == 0);
|
||||||
|
|
||||||
return ScriptObject::DoCommand(tile, tile, GetCurrentRailType() | (FindFirstTrack((::TrackBits)rail_track) << 4), CMD_REMOVE_RAILROAD_TRACK);
|
return ScriptObject::DoCommand(tile, tile, FindFirstTrack((::TrackBits)rail_track) << 4, CMD_REMOVE_RAILROAD_TRACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool ScriptRail::AreTilesConnected(TileIndex from, TileIndex tile, TileIndex to)
|
/* static */ bool ScriptRail::AreTilesConnected(TileIndex from, TileIndex tile, TileIndex to)
|
||||||
|
@ -284,7 +284,7 @@
|
||||||
static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to)
|
static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to)
|
||||||
{
|
{
|
||||||
int diag_offset = abs(abs((int)::TileX(*to) - (int)::TileX(tile)) - abs((int)::TileY(*to) - (int)::TileY(tile)));
|
int diag_offset = abs(abs((int)::TileX(*to) - (int)::TileX(tile)) - abs((int)::TileY(*to) - (int)::TileY(tile)));
|
||||||
uint32 p2 = ScriptRail::GetCurrentRailType();
|
uint32 p2 = 0;
|
||||||
if (::TileY(from) == ::TileY(*to)) {
|
if (::TileY(from) == ::TileY(*to)) {
|
||||||
p2 |= (TRACK_X << 4);
|
p2 |= (TRACK_X << 4);
|
||||||
*to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1);
|
*to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1);
|
||||||
|
@ -353,7 +353,7 @@ static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to)
|
||||||
(::TileX(from) == ::TileX(tile) && ::TileX(tile) == ::TileX(to)) ||
|
(::TileX(from) == ::TileX(tile) && ::TileX(tile) == ::TileX(to)) ||
|
||||||
(::TileY(from) == ::TileY(tile) && ::TileY(tile) == ::TileY(to)));
|
(::TileY(from) == ::TileY(tile) && ::TileY(tile) == ::TileY(to)));
|
||||||
|
|
||||||
uint32 p2 = SimulateDrag(from, tile, &to) | 1 << 8;
|
uint32 p2 = SimulateDrag(from, tile, &to) | 1 << 8 | ScriptRail::GetCurrentRailType();;
|
||||||
return ScriptObject::DoCommand(tile, to, p2, CMD_BUILD_RAILROAD_TRACK);
|
return ScriptObject::DoCommand(tile, to, p2, CMD_BUILD_RAILROAD_TRACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +370,6 @@ static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to)
|
||||||
(::TileX(from) == ::TileX(tile) && ::TileX(tile) == ::TileX(to)) ||
|
(::TileX(from) == ::TileX(tile) && ::TileX(tile) == ::TileX(to)) ||
|
||||||
(::TileY(from) == ::TileY(tile) && ::TileY(tile) == ::TileY(to)));
|
(::TileY(from) == ::TileY(tile) && ::TileY(tile) == ::TileY(to)));
|
||||||
|
|
||||||
if (!IsRailTypeAvailable(GetCurrentRailType())) SetCurrentRailType(GetRailType(tile));
|
|
||||||
uint32 p2 = SimulateDrag(from, tile, &to);
|
uint32 p2 = SimulateDrag(from, tile, &to);
|
||||||
return ScriptObject::DoCommand(tile, to, p2, CMD_REMOVE_RAILROAD_TRACK);
|
return ScriptObject::DoCommand(tile, to, p2, CMD_REMOVE_RAILROAD_TRACK);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue