Introduce cheat option to show vehicles from other track types

This commit is contained in:
Gymnasiast 2015-10-12 15:58:15 +02:00
parent 1629c75fb3
commit 105280a082
7 changed files with 61 additions and 24 deletions

View File

@ -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 #

View File

@ -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;
}

View File

@ -27,6 +27,7 @@ extern bool gCheatsSandboxMode;
extern bool gCheatsDisableClearanceChecks;
extern bool gCheatsDisableSupportLimits;
extern bool gCheatsShowAllOperatingModes;
extern bool gCheatsShowVehiclesFromOtherTrackTypes;
void cheats_reset();

View File

@ -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
};

View File

@ -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;
}

View File

@ -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
#endif

View File

@ -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(