From 105280a082c05a6f85b9b140941f4ae8b92ce162 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Mon, 12 Oct 2015 15:58:15 +0200 Subject: [PATCH] Introduce cheat option to show vehicles from other track types --- data/language/english_uk.txt | 1 + src/cheats.c | 2 ++ src/cheats.h | 1 + src/localisation/string_ids.h | 5 +++ src/windows/cheats.c | 10 ++++-- src/windows/dropdown.h | 2 +- src/windows/ride.c | 64 +++++++++++++++++++++++------------ 7 files changed, 61 insertions(+), 24 deletions(-) diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 74009664a5..f6d816fa12 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3893,6 +3893,7 @@ STR_5551 :Year/Day/Month STR_5552 :{POP16}{POP16}Year {COMMA16}, {PUSH16}{PUSH16}{PUSH16}{STRINGID} {MONTH} STR_5553 :Pause game when Steam overlay is open STR_5554 :{SMALLFONT}{BLACK}Enable mountain tool +STR_5555 :Show vehicles from other track types ##################### # Rides/attractions # diff --git a/src/cheats.c b/src/cheats.c index 7297ede6e3..c6ced49833 100644 --- a/src/cheats.c +++ b/src/cheats.c @@ -4,6 +4,7 @@ bool gCheatsSandboxMode = false; bool gCheatsDisableClearanceChecks = false; bool gCheatsDisableSupportLimits = false; bool gCheatsShowAllOperatingModes = false; +bool gCheatsShowVehiclesFromOtherTrackTypes = false; void cheats_reset() { @@ -11,4 +12,5 @@ void cheats_reset() gCheatsDisableClearanceChecks = false; gCheatsDisableSupportLimits = false; gCheatsShowAllOperatingModes = false; + gCheatsShowVehiclesFromOtherTrackTypes = false; } diff --git a/src/cheats.h b/src/cheats.h index 62b8033241..3c9c2d292d 100644 --- a/src/cheats.h +++ b/src/cheats.h @@ -27,6 +27,7 @@ extern bool gCheatsSandboxMode; extern bool gCheatsDisableClearanceChecks; extern bool gCheatsDisableSupportLimits; extern bool gCheatsShowAllOperatingModes; +extern bool gCheatsShowVehiclesFromOtherTrackTypes; void cheats_reset(); diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 54f7a2ffe2..833ff8e122 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -1947,6 +1947,9 @@ enum { STR_CHEAT_EXPLODE = 5285, STR_CHEAT_TIP_EXPLODE = 5286, + STR_DEBUG_NO_BREAKDOWNS_AVAILABLE = 5289, + STR_DEBUG_FIX_RIDE = 5290, + STR_CHEAT_TIP_CLEAR_LOAN = 5301, STR_CHEAT_CLEAR_LOAN = 5302, STR_CHEAT_BUILD_IN_PAUSE_MODE = 5303, @@ -2130,6 +2133,8 @@ enum { STR_ENABLE_MOUNTAIN_TOOL_TIP = 5554, + STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES = 5555, + // 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/windows/cheats.c b/src/windows/cheats.c index f0aa95a46b..de90955bf3 100644 --- a/src/windows/cheats.c +++ b/src/windows/cheats.c @@ -118,7 +118,8 @@ enum WINDOW_CHEATS_WIDGET_IDX { WIDX_DISABLE_ALL_BREAKDOWNS, WIDX_BUILD_IN_PAUSE_MODE, WIDX_RESET_CRASH_STATUS, - WIDX_SHOW_ALL_OPERATING_MODES + WIDX_SHOW_ALL_OPERATING_MODES, + WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES }; enum { @@ -259,6 +260,7 @@ static rct_widget window_cheats_rides_widgets[] = { { WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(8), OHPL(8), STR_CHEAT_BUILD_IN_PAUSE_MODE, STR_NONE }, // Build in pause mode { WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(2), HPL(2), STR_CHEAT_RESET_CRASH_STATUS, STR_NONE }, // Reset crash status { WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(7), OHPL(7), STR_CHEAT_SHOW_ALL_OPERATING_MODES, STR_NONE }, // Show all operating modes + { WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(6), OHPL(6), STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, STR_NONE }, // Show vehicles from other track types { WIDGETS_END }, }; @@ -414,7 +416,7 @@ static uint64 window_cheats_page_enabled_widgets[] = { (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_HIGH_MONEY) | (1ULL << WIDX_CLEAR_LOAN), (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_GUEST_PARAMETERS_GROUP) | (1ULL << WIDX_GUEST_HAPPINESS_MAX) | (1ULL << WIDX_GUEST_HAPPINESS_MIN) | (1ULL << WIDX_GUEST_ENERGY_MAX) | (1ULL << WIDX_GUEST_ENERGY_MIN) | (1ULL << WIDX_GUEST_HUNGER_MAX) | (1ULL << WIDX_GUEST_HUNGER_MIN) | (1ULL << WIDX_GUEST_THIRST_MAX) | (1ULL << WIDX_GUEST_THIRST_MIN) | (1ULL << WIDX_GUEST_NAUSEA_MAX) | (1ULL << WIDX_GUEST_NAUSEA_MIN) | (1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MAX) | (1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MIN) | (1ULL << WIDX_GUEST_BATHROOM_MAX) | (1ULL << WIDX_GUEST_BATHROOM_MIN) | (1ULL << WIDX_GUEST_RIDE_INTENSITY_MORE_THAN_1) | (1ULL << WIDX_GUEST_RIDE_INTENSITY_LESS_THAN_15) | (1ULL << WIDX_GUEST_IGNORE_RIDE_INTENSITY) | (1ULL << WIDX_GIVE_ALL_GUESTS_GROUP) | (1ULL << WIDX_GIVE_GUESTS_MONEY) | (1ULL << WIDX_GIVE_GUESTS_PARK_MAPS) | (1ULL << WIDX_GIVE_GUESTS_BALLOONS) | (1ULL << WIDX_GIVE_GUESTS_UMBRELLAS) | (1ULL << WIDX_TRAM_GUESTS) | (1ULL << WIDX_REMOVE_ALL_GUESTS) | (1ULL << WIDX_EXPLODE_GUESTS) | (1ULL << WIDX_DISABLE_VANDALISM), (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_FREEZE_CLIMATE) | (1ULL << WIDX_OPEN_CLOSE_PARK) | (1ULL << WIDX_WEATHER_SUN) | (1ULL << WIDX_WEATHER_THUNDER) | (1ULL << WIDX_CLEAR_GRASS) | (1ULL << WIDX_MOWED_GRASS) | (1ULL << WIDX_WATER_PLANTS) | (1ULL << WIDX_FIX_VANDALISM) | (1ULL << WIDX_REMOVE_LITTER) | (1ULL << WIDX_WIN_SCENARIO) | (1ULL << WIDX_HAVE_FUN) | (1ULL << WIDX_UNLOCK_ALL_PRICES) | (1ULL << WIDX_SANDBOX_MODE) | (1ULL << WIDX_FAST_STAFF) | (1ULL << WIDX_NORMAL_STAFF) | (1ULL << WIDX_PARK_PARAMETERS) | (1ULL << WIDX_FORCE_PARK_RATING) | (1ULL << WIDX_INCREASE_PARK_RATING) | (1ULL << WIDX_DECREASE_PARK_RATING), - (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_RENEW_RIDES) | (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_SHOW_ALL_OPERATING_MODES) + (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_RENEW_RIDES) | (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_SHOW_ALL_OPERATING_MODES) | (1ULL << WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES) }; static rct_string_id window_cheats_page_titles[] = { @@ -1011,6 +1013,9 @@ static void window_cheats_rides_mouseup(rct_window *w, int widgetIndex) case WIDX_SHOW_ALL_OPERATING_MODES: gCheatsShowAllOperatingModes = !gCheatsShowAllOperatingModes; break; + case WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES: + gCheatsShowVehiclesFromOtherTrackTypes = !gCheatsShowVehiclesFromOtherTrackTypes; + break; } } @@ -1075,6 +1080,7 @@ static void window_cheats_invalidate(rct_window *w) widget_set_checkbox_value(w, WIDX_DISABLE_ALL_BREAKDOWNS, gConfigCheat.disable_all_breakdowns); widget_set_checkbox_value(w, WIDX_BUILD_IN_PAUSE_MODE, gConfigCheat.build_in_pause_mode); widget_set_checkbox_value(w, WIDX_SHOW_ALL_OPERATING_MODES, gCheatsShowAllOperatingModes); + widget_set_checkbox_value(w, WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, gCheatsShowVehiclesFromOtherTrackTypes); break; } diff --git a/src/windows/dropdown.h b/src/windows/dropdown.h index 5f3d27ed03..2a4789c453 100644 --- a/src/windows/dropdown.h +++ b/src/windows/dropdown.h @@ -48,4 +48,4 @@ int dropdown_index_from_point(int x, int y, rct_window* w); void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour); void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour, uint32 availableColours); -#endif \ No newline at end of file +#endif diff --git a/src/windows/ride.c b/src/windows/ride.c index 7a8d0403cb..dc3ea507a3 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -20,6 +20,7 @@ #include "../addresses.h" #include "../audio/audio.h" +#include "../cheats.h" #include "../config.h" #include "../game.h" #include "../input.h" @@ -2312,39 +2313,60 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi rct_ride *ride; rct_ride_type *rideEntry, *currentRideEntry; rct_string_id stringId; - int i, minCars, maxCars, cars, numItems, quadIndex, bitIndex, rideEntryIndex, selectedIndex; + int i, minCars, maxCars, cars, numItems, quadIndex, bitIndex, rideEntryIndex, selectedIndex, rideTypeIterator, rideTypeIteratorMax; uint8 *rideEntryIndexPtr, *currentRideEntryIndex; + bool selectionShouldBeExpanded; ride = GET_RIDE(w->number); rideEntry = ride_get_entry(ride); + if(gCheatsShowVehiclesFromOtherTrackTypes && !(ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type==RIDE_TYPE_MAZE || ride->type==RIDE_TYPE_MINI_GOLF)) { + selectionShouldBeExpanded=true; + rideTypeIterator=0; + rideTypeIteratorMax=90; + } + else { + selectionShouldBeExpanded=false; + rideTypeIterator=ride->type; + rideTypeIteratorMax=ride->type; + } + switch (widgetIndex) { case WIDX_VEHICLE_TYPE_DROPDOWN: - rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(ride->type); - currentRideEntryIndex; - selectedIndex = -1; numItems = 0; - for (currentRideEntryIndex = rideEntryIndexPtr; *currentRideEntryIndex != 0xFF; currentRideEntryIndex++) { - rideEntryIndex = *currentRideEntryIndex; - currentRideEntry = GET_RIDE_ENTRY(rideEntryIndex); - // Skip if vehicle has the same track type, but not same subtype, unless subtype switching is enabled - if ((currentRideEntry->flags & (RIDE_ENTRY_FLAG_SEPARATE_RIDE | RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME)) && !gConfigInterface.select_by_track_type) + + for (; rideTypeIterator<=rideTypeIteratorMax; rideTypeIterator++) { + + if(selectionShouldBeExpanded && ride_type_has_flag(rideTypeIterator, RIDE_TYPE_FLAG_FLAT_RIDE)) + continue; + if(selectionShouldBeExpanded && (rideTypeIterator==RIDE_TYPE_MAZE || rideTypeIterator==RIDE_TYPE_MINI_GOLF)) continue; - quadIndex = rideEntryIndex >> 5; - bitIndex = rideEntryIndex & 0x1F; - // Skip if vehicle type is not invented yet - if (!(RCT2_ADDRESS(0x01357424, uint32)[quadIndex] & (1 << bitIndex))) - continue; + rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(rideTypeIterator); + currentRideEntryIndex; - if (ride->subtype == rideEntryIndex) - selectedIndex = numItems; + for (currentRideEntryIndex = rideEntryIndexPtr; *currentRideEntryIndex != 0xFF; currentRideEntryIndex++) { + rideEntryIndex = *currentRideEntryIndex; + currentRideEntry = GET_RIDE_ENTRY(rideEntryIndex); + // Skip if vehicle has the same track type, but not same subtype, unless subtype switching is enabled + if ((currentRideEntry->flags & (RIDE_ENTRY_FLAG_SEPARATE_RIDE | RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME)) && !(gConfigInterface.select_by_track_type || selectionShouldBeExpanded)) + continue; - gDropdownItemsFormat[numItems] = 1142; - gDropdownItemsArgs[numItems] = (rideEntryIndex << 16) | currentRideEntry->name; + quadIndex = rideEntryIndex >> 5; + bitIndex = rideEntryIndex & 0x1F; + // Skip if vehicle type is not invented yet + if (!(RCT2_ADDRESS(0x01357424, uint32)[quadIndex] & (1 << bitIndex))) + continue; - numItems++; + if (ride->subtype == rideEntryIndex) + selectedIndex = numItems; + + gDropdownItemsFormat[numItems] = 1142; + gDropdownItemsArgs[numItems] = (rideEntryIndex << 16) | currentRideEntry->name; + + numItems++; + } } window_dropdown_show_text_custom_width( @@ -3353,7 +3375,7 @@ static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rc break; } gDropdownItemsFormat[0] = 1142; - gDropdownItemsArgs[0] = 5290; + gDropdownItemsArgs[0] = STR_DEBUG_FIX_RIDE; for (i = 0; i < 8; i++) { if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) { if (i == BREAKDOWN_BRAKES_FAILURE && (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)) { @@ -3366,7 +3388,7 @@ static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rc } } if (num_items == 1) { - window_error_open(5289, STR_NONE); + window_error_open(STR_DEBUG_NO_BREAKDOWNS_AVAILABLE, STR_NONE); } else { window_dropdown_show_text(