diff --git a/rail_gui.c b/rail_gui.c index 0a63a41f32..4b651db5e0 100644 --- a/rail_gui.c +++ b/rail_gui.c @@ -694,6 +694,7 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) bool newstations = _railstation.newstations; int y_offset; DrawPixelInfo tmp_dpi, *old_dpi; + const StationSpec *statspec = newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL; if (WP(w,def_d).close) return; @@ -712,23 +713,14 @@ static void StationBuildWndProc(Window *w, WindowEvent *e) if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad); - /* Update buttons for correct spread value */ - for (bits = _patches.station_spread; bits < 7; bits++) { - DisableWindowWidget(w, bits + 5); - DisableWindowWidget(w, bits + 12); - } - - if (newstations) { - const StationSpec *statspec = GetCustomStationSpec(_railstation.station_class, _railstation.station_type); - - for (bits = 0; bits < 7; bits++) { - if (statspec == NULL) { - EnableWindowWidget(w, bits + 5); - EnableWindowWidget(w, bits + 12); - } else { - SetWindowWidgetDisabledState(w, bits + 5, HASBIT(statspec->disallowed_platforms, bits)); - SetWindowWidgetDisabledState(w, bits + 12, HASBIT(statspec->disallowed_lengths, bits)); - } + for (bits = 0; bits < 7; bits++) { + bool disable = bits >= _patches.station_spread; + if (statspec == NULL) { + SetWindowWidgetDisabledState(w, bits + 5, disable); + SetWindowWidgetDisabledState(w, bits + 12, disable); + } else { + SetWindowWidgetDisabledState(w, bits + 5, HASBIT(statspec->disallowed_platforms, bits) || disable); + SetWindowWidgetDisabledState(w, bits + 12, HASBIT(statspec->disallowed_lengths, bits) || disable); } } diff --git a/station_cmd.c b/station_cmd.c index 5965514d94..21d537e091 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -1700,6 +1700,11 @@ int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (st != NULL && st->facilities) st = NULL; } + if (w > _patches.station_spread || h > _patches.station_spread) { + _error_message = STR_306C_STATION_TOO_SPREAD_OUT; + return CMD_ERROR; + } + if (st != NULL) { if (st->owner != OWNER_NONE && st->owner != _current_player) return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);