Add GUI/command support for >255 station types per station class

pull/491/head
Jonathan G Rennison 1 year ago
parent 50a48b1264
commit 5e398d9478

@ -50,7 +50,7 @@ CommandProc CmdLandscapeClear;
CommandProc CmdBuildBridge;
CommandProc CmdBuildRailStation;
CommandProcEx CmdBuildRailStation;
CommandProc CmdRemoveFromRailStation;
CommandProc CmdConvertRail;

@ -72,8 +72,8 @@ struct RailStationGUISettings {
bool newstations; ///< Are custom station definitions available?
StationClassID station_class; ///< Currently selected custom station class (if newstations is \c true )
byte station_type; ///< %Station type within the currently selected custom station class (if newstations is \c true )
byte station_count; ///< Number of custom stations (if newstations is \c true )
uint16 station_type; ///< %Station type within the currently selected custom station class (if newstations is \c true )
uint16 station_count; ///< Number of custom stations (if newstations is \c true )
};
static RailStationGUISettings _railstation; ///< Settings of the station builder GUI
@ -212,13 +212,15 @@ static void PlaceRail_Station(TileIndex tile)
VpSetPlaceSizingLimit(_settings_game.station.station_spread);
} else {
uint32 p1 = _cur_railtype | _railstation.orientation << 6 | _settings_client.gui.station_numtracks << 8 | _settings_client.gui.station_platlength << 16 | _ctrl_pressed << 24;
uint32 p2 = _railstation.station_class | _railstation.station_type << 8 | INVALID_STATION << 16;
uint32 p2 = _railstation.station_class | INVALID_STATION << 16;
uint64 p3 = _railstation.station_type;
int w = _settings_client.gui.station_numtracks;
int h = _settings_client.gui.station_platlength;
if (!_railstation.orientation) Swap(w, h);
CommandContainer cmdcont = NewCommandContainerBasic(tile, p1, p2, CMD_BUILD_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION), CcStation);
cmdcont.p3 = p3;
ShowSelectStationIfNeeded(cmdcont, TileArea(tile, w, h));
}
}
@ -1028,9 +1030,11 @@ static void HandleStationPlacement(TileIndex start, TileIndex end)
if (_railstation.orientation == AXIS_X) Swap(numtracks, platlength);
uint32 p1 = _cur_railtype | _railstation.orientation << 6 | numtracks << 8 | platlength << 16 | _ctrl_pressed << 24;
uint32 p2 = _railstation.station_class | _railstation.station_type << 8 | INVALID_STATION << 16;
uint32 p2 = _railstation.station_class | INVALID_STATION << 16;
uint64 p3 = _railstation.station_type;
CommandContainer cmdcont = NewCommandContainerBasic(ta.tile, p1, p2, CMD_BUILD_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION), CcStation);
cmdcont.p3 = p3;
ShowSelectStationIfNeeded(cmdcont, ta);
}

@ -198,7 +198,7 @@
DEBUG(grf, 1, "%s returned an invalid station ID for 'AI construction/purchase selection (18)' callback", file->filename);
} else {
/* We might have gotten an usable station spec. Try to build it, but if it fails we'll fall back to the original station. */
if (ScriptObject::DoCommand(tile, p1, p2 | spec->cls_id | index << 8, CMD_BUILD_RAIL_STATION)) return true;
if (ScriptObject::DoCommandEx(tile, p1, p2 | spec->cls_id, index, CMD_BUILD_RAIL_STATION)) return true;
}
}

@ -1457,12 +1457,13 @@ static void RestoreTrainReservation(Train *v)
* - p1 = (bit 24) - allow stations directly adjacent to other stations.
* @param p2 various bitstuffed elements
* - p2 = (bit 0- 7) - custom station class
* - p2 = (bit 8-15) - custom station id
* - p2 = (bit 16-31) - station ID to join (NEW_STATION if build new one)
* @param p3 various bitstuffed elements
* - p3 = (bit 0-15) - custom station id
* @param text unused
* @return the cost of this operation or an error
*/
CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 p1, uint32 p2, uint64 p3, const char *text, const CommandAuxiliaryBase *aux_data)
{
/* Unpack parameters */
RailType rt = Extract<RailType, 0, 6>(p1);
@ -1472,7 +1473,7 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32
bool adjacent = HasBit(p1, 24);
StationClassID spec_class = Extract<StationClassID, 0, 8>(p2);
byte spec_index = GB(p2, 8, 8);
byte spec_index = GB(p3, 0, 16);
StationID station_to_join = GB(p2, 16, 16);
/* Does the authority allow this? */

Loading…
Cancel
Save