diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 2e3f35814b..e2b99ff1c8 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4453,6 +4453,9 @@ STR_6141 :RCT1 Bottom Toolbar STR_6142 :{WINDOW_COLOUR_2}Track name: {BLACK}{STRING} STR_6143 :{WINDOW_COLOUR_2}Ride type: {BLACK}{STRINGID} STR_6144 :Show dirty visuals +STR_6146 :Enable all drawable track pieces +STR_6147 :{SMALLFONT}{BLACK}Enables all track pieces the ride type is capable of in the construction window, regardless of whether the vehicle support them. + ############# # Scenarios # diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 1a4dd3e1a3..40578a22f6 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -144,6 +144,7 @@ enum WINDOW_CHEATS_WIDGET_IDX { WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES, WIDX_DISABLE_RIDE_VALUE_AGING, WIDX_IGNORE_RESEARCH_STATUS, + WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES, }; #pragma region MEASUREMENTS @@ -281,7 +282,8 @@ static rct_widget window_cheats_rides_widgets[] = { { WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(13), OHPL(13), STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK, STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK_TIP }, // Enable chain lift on all track { WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(14), OHPL(14), STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES, STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP }, // Allow arbitrary ride type changes { WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(15), OHPL(15), STR_CHEAT_DISABLE_RIDE_VALUE_AGING, STR_CHEAT_DISABLE_RIDE_VALUE_AGING_TIP }, // Disable ride ageing - { WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(16), OHPL(16), STR_CHEAT_IGNORE_RESEARCH_STATUS, STR_CHEAT_IGNORE_RESEARCH_STATUS_TIP}, // Ignore Research Status + { WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(16), OHPL(16), STR_CHEAT_IGNORE_RESEARCH_STATUS, STR_CHEAT_IGNORE_RESEARCH_STATUS_TIP}, // Ignore Research Status + { WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(5), OHPL(5), STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES, STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES_TIP}, // Show all drawable track pieces { WIDGETS_END }, }; @@ -459,7 +461,7 @@ static uint64 window_cheats_page_enabled_widgets[] = { (1ULL << WIDX_MAKE_DESTRUCTIBLE) | (1ULL << WIDX_FIX_ALL) | (1ULL << WIDX_FAST_LIFT_HILL) | (1ULL << WIDX_DISABLE_BRAKES_FAILURE) | (1ULL << WIDX_DISABLE_ALL_BREAKDOWNS) | (1ULL << WIDX_BUILD_IN_PAUSE_MODE) | (1ULL << WIDX_RESET_CRASH_STATUS) | (1ULL << WIDX_10_MINUTE_INSPECTIONS) | (1ULL << WIDX_SHOW_ALL_OPERATING_MODES) | (1ULL << WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES) | (1ULL << WIDX_DISABLE_TRAIN_LENGTH_LIMITS) | - (1ULL << WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK) | (1ULL << WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES) | (1ULL << WIDX_DISABLE_RIDE_VALUE_AGING) | (1ULL << WIDX_IGNORE_RESEARCH_STATUS) + (1ULL << WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK) | (1ULL << WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES) | (1ULL << WIDX_DISABLE_RIDE_VALUE_AGING) | (1ULL << WIDX_IGNORE_RESEARCH_STATUS) | (1ULL << WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES) }; static uint64 window_cheats_page_hold_down_widgets[] = { @@ -837,6 +839,9 @@ static void window_cheats_rides_mouseup(rct_window *w, rct_widgetindex widgetInd case WIDX_IGNORE_RESEARCH_STATUS: game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_IGNORERESEARCHSTATUS, !gCheatsIgnoreResearchStatus, GAME_COMMAND_CHEAT, 0, 0); break; + case WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES: + game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_ENABLEALLDRAWABLETRACKPIECES, !gCheatsEnableAllDrawableTrackPieces, GAME_COMMAND_CHEAT, 0, 0); + break; } } @@ -921,6 +926,7 @@ static void window_cheats_invalidate(rct_window *w) widget_set_checkbox_value(w, WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES, gCheatsAllowArbitraryRideTypeChanges); widget_set_checkbox_value(w, WIDX_DISABLE_RIDE_VALUE_AGING, gCheatsDisableRideValueAging); widget_set_checkbox_value(w, WIDX_IGNORE_RESEARCH_STATUS, gCheatsIgnoreResearchStatus); + widget_set_checkbox_value(w, WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES, gCheatsEnableAllDrawableTrackPieces); break; } diff --git a/src/openrct2/cheats.c b/src/openrct2/cheats.c index 260474f3bb..6f79339276 100644 --- a/src/openrct2/cheats.c +++ b/src/openrct2/cheats.c @@ -52,6 +52,7 @@ bool gCheatsEnableChainLiftOnAllTrack = false; bool gCheatsAllowArbitraryRideTypeChanges = false; bool gCheatsDisableRideValueAging = false; bool gCheatsIgnoreResearchStatus = false; +bool gCheatsEnableAllDrawableTrackPieces = false; sint32 park_rating_spinner_value; @@ -532,6 +533,7 @@ void game_command_cheat(sint32* eax, sint32* ebx, sint32* ecx, sint32* edx, sint case CHEAT_OWNALLLAND: cheat_own_all_land(); break; case CHEAT_DISABLERIDEVALUEAGING: gCheatsDisableRideValueAging = *edx != 0; break; case CHEAT_IGNORERESEARCHSTATUS: gCheatsIgnoreResearchStatus = *edx != 0; break; + case CHEAT_ENABLEALLDRAWABLETRACKPIECES: gCheatsEnableAllDrawableTrackPieces = *edx != 0; break; } if (network_get_mode() == NETWORK_MODE_NONE) { config_save_default(); @@ -771,6 +773,7 @@ const char* cheats_get_cheat_string(int cheat, int edx, int edi) { case CHEAT_OWNALLLAND: return language_get_string(STR_CHEAT_OWN_ALL_LAND); case CHEAT_DISABLERIDEVALUEAGING: return language_get_string(STR_CHEAT_DISABLE_RIDE_VALUE_AGING); case CHEAT_IGNORERESEARCHSTATUS: return language_get_string(STR_CHEAT_IGNORE_RESEARCH_STATUS); + case CHEAT_ENABLEALLDRAWABLETRACKPIECES: return language_get_string(STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES); } return ""; diff --git a/src/openrct2/cheats.h b/src/openrct2/cheats.h index 7ad92ed814..41290b9c5c 100644 --- a/src/openrct2/cheats.h +++ b/src/openrct2/cheats.h @@ -40,6 +40,7 @@ extern bool gCheatsDisableRideValueAging; extern bool gCheatsEnableChainLiftOnAllTrack; extern bool gCheatsAllowArbitraryRideTypeChanges; extern bool gCheatsIgnoreResearchStatus; +extern bool gCheatsEnableAllDrawableTrackPieces; enum { @@ -90,6 +91,7 @@ enum { CHEAT_OWNALLLAND, CHEAT_DISABLERIDEVALUEAGING, CHEAT_IGNORERESEARCHSTATUS, + CHEAT_ENABLEALLDRAWABLETRACKPIECES, }; enum { diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 12a9cb2a9c..c7beaa2c7b 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3793,6 +3793,9 @@ enum { STR_DEBUG_PAINT_SHOW_DIRTY_VISUALS = 6144, + STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES = 6146, + STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES_TIP = 6147, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/openrct2/windows/RideConstruction.cpp b/src/openrct2/windows/RideConstruction.cpp index db6a0c8c12..4192127bc2 100644 --- a/src/openrct2/windows/RideConstruction.cpp +++ b/src/openrct2/windows/RideConstruction.cpp @@ -2732,11 +2732,17 @@ static void window_ride_construction_update_enabled_track_pieces() { Ride *ride = get_ride(_currentRideIndex); rct_ride_entry *rideEntry = get_ride_entry_by_ride(ride); + sint32 rideType = (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideData4[ride->type].alternate_type : ride->type; if (rideEntry == nullptr) return; - sint32 rideType = (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideData4[ride->type].alternate_type : ride->type; + if (gCheatsEnableAllDrawableTrackPieces) + { + _enabledRidePieces = RideTypePossibleTrackConfigurations[rideType]; + return; + } + if (!gConfigInterface.select_by_track_type) { _enabledRidePieces = rideEntry->enabledTrackPieces & RideTypePossibleTrackConfigurations[rideType];