diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 2d97c2fd28..63f17d4e99 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -922,6 +922,8 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, DoCommandFlag flags, uin } StationID station_to_join = GB(p2, 16, 16); + bool reuse = (station_to_join != NEW_STATION); + if (!reuse) station_to_join = INVALID_STATION; bool distant_join = (station_to_join != INVALID_STATION); if (distant_join && (!_settings_game.station.distant_join_stations || !IsValidStationID(station_to_join))) return CMD_ERROR; @@ -975,7 +977,7 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, DoCommandFlag flags, uin if (st == NULL && distant_join) st = GetStation(station_to_join); /* See if there is a deleted station close to us. */ - if (st == NULL) st = GetClosestDeletedStation(tile_org); + if (st == NULL && reuse) st = GetClosestDeletedStation(tile_org); if (st != NULL) { /* Reuse an existing station. */ @@ -1403,6 +1405,8 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin bool build_over_road = is_drive_through && IsNormalRoadTile(tile); RoadTypes rts = (RoadTypes)GB(p2, 2, 2); StationID station_to_join = GB(p2, 16, 16); + bool reuse = (station_to_join != NEW_STATION); + if (!reuse) station_to_join = INVALID_STATION; bool distant_join = (station_to_join != INVALID_STATION); Owner tram_owner = _current_company; Owner road_owner = _current_company; @@ -1470,7 +1474,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin if (st == NULL && distant_join) st = GetStation(station_to_join); /* Find a deleted station close to us */ - if (st == NULL) st = GetClosestDeletedStation(tile); + if (st == NULL && reuse) st = GetClosestDeletedStation(tile); /* give us a road stop in the list, and check if something went wrong */ if (!RoadStop::CanAllocateItem()) return_cmd_error(type ? STR_TOO_MANY_TRUCK_STOPS : STR_TOO_MANY_BUS_STOPS); @@ -1855,6 +1859,8 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint { bool airport_upgrade = true; StationID station_to_join = GB(p2, 16, 16); + bool reuse = (station_to_join != NEW_STATION); + if (!reuse) station_to_join = INVALID_STATION; bool distant_join = (station_to_join != INVALID_STATION); if (distant_join && (!_settings_game.station.distant_join_stations || !IsValidStationID(station_to_join))) return CMD_ERROR; @@ -1919,7 +1925,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (st == NULL && distant_join) st = GetStation(station_to_join); /* Find a deleted station close to us */ - if (st == NULL) st = GetClosestDeletedStation(tile); + if (st == NULL && reuse) st = GetClosestDeletedStation(tile); if (st != NULL) { if (st->owner != _current_company) { @@ -2175,6 +2181,8 @@ static const byte _dock_h_chk[4] = { 1, 2, 1, 2 }; CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { StationID station_to_join = GB(p2, 16, 16); + bool reuse = (station_to_join != NEW_STATION); + if (!reuse) station_to_join = INVALID_STATION; bool distant_join = (station_to_join != INVALID_STATION); if (distant_join && (!_settings_game.station.distant_join_stations || !IsValidStationID(station_to_join))) return CMD_ERROR; @@ -2224,7 +2232,7 @@ CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (st == NULL && distant_join) st = GetStation(station_to_join); /* Find a deleted station close to us */ - if (st == NULL) st = GetClosestDeletedStation(tile); + if (st == NULL && reuse) st = GetClosestDeletedStation(tile); if (st != NULL) { if (st->owner != _current_company) { diff --git a/src/station_gui.cpp b/src/station_gui.cpp index a1a37e5c66..185e8d3826 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -1170,7 +1170,7 @@ struct SelectStationWindow : Window { /* Insert station to be joined into stored command */ SB(this->select_station_cmd.p2, 16, 16, - (distant_join ? _stations_nearby_list[st_index] : INVALID_STATION)); + (distant_join ? _stations_nearby_list[st_index] : NEW_STATION)); /* Execute stored Command */ DoCommandP(&this->select_station_cmd); diff --git a/src/station_type.h b/src/station_type.h index 854746b0be..3f2e6846b6 100644 --- a/src/station_type.h +++ b/src/station_type.h @@ -12,6 +12,7 @@ struct Station; struct RoadStop; struct StationSpec; +static const StationID NEW_STATION = 0xFFFE; static const StationID INVALID_STATION = 0xFFFF; /** Station types */