Add cheat option to show all operating modes; cleanup

This commit is contained in:
Gymnasiast 2015-09-18 10:54:48 +02:00
parent 338855ba50
commit 4909272a44
10 changed files with 43 additions and 24 deletions

View File

@ -3886,6 +3886,7 @@ STR_5544 :{SMALLFONT}{BLACK}Bright red
STR_5545 :{SMALLFONT}{BLACK}Dark pink
STR_5546 :{SMALLFONT}{BLACK}Bright pink
STR_5547 :{SMALLFONT}{BLACK}Light pink
STR_5548 :Show all operating modes
#####################
# Rides/attractions #

View File

@ -3,10 +3,12 @@
bool gCheatsSandboxMode = false;
bool gCheatsDisableClearanceChecks = false;
bool gCheatsDisableSupportLimits = false;
bool gCheatsShowAllOperatingModes = false;
void cheats_reset()
{
gCheatsSandboxMode = false;
gCheatsDisableClearanceChecks = false;
gCheatsDisableSupportLimits = false;
gCheatsShowAllOperatingModes = false;
}

View File

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

View File

@ -2104,6 +2104,7 @@ enum {
STR_CHEAT_DISABLE_VANDALISM_TIP = 5515,
STR_COLOUR_NAMES_START = 5516,
STR_SHOW_ALL_OPERATING_MODES = 5548,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768

View File

@ -3681,11 +3681,8 @@ void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int *
ride_remove_peeps(ride_id);
rct_ride_type* ride_entry = GET_RIDE_ENTRY(ride->subtype);
const uint8* available_modes = RideAvailableModes;
const uint8* available_modes = ride_seek_available_modes(ride);
for (int i = 0; i < ride->type; i++) {
while (*(available_modes++) != 255) {}
}
if (ride_entry->flags & RIDE_ENTRY_FLAG_17){
available_modes += 2;
}
@ -7043,3 +7040,22 @@ void ride_reset_all_names()
ride->name_arguments_number = name_args.number;
}
}
const uint8* ride_seek_available_modes(rct_ride *ride)
{
const uint8* availableModes;
if(!gCheatsShowAllOperatingModes) {
availableModes = RideAvailableModes;
for (int i = 0; i < ride->type; i++) {
while (*(availableModes++) != 255) { }
}
}
else
{
availableModes = AllRideModesAvailable;
}
return availableModes;
}

View File

@ -1042,5 +1042,6 @@ void sub_6C94D8();
bool shop_item_is_food_or_drink(int shopItem);
void ride_reset_all_names();
const uint8* ride_seek_available_modes(rct_ride *ride);
#endif

View File

@ -774,6 +774,10 @@ const uint8 RideAvailableModes[] = {
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF // 60 LIM Launched Roller Coaster
};
const uint8 AllRideModesAvailable[] = {
RIDE_MODE_NORMAL, RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_SHUTTLE, RIDE_MODE_BOAT_HIRE, RIDE_MODE_UPWARD_LAUNCH, RIDE_MODE_ROTATING_LIFT, RIDE_MODE_STATION_TO_STATION, RIDE_MODE_SINGLE_RIDE_PER_ADMISSION, RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION, RIDE_MODE_MAZE, RIDE_MODE_RACE, RIDE_MODE_BUMPERCAR, RIDE_MODE_SWING, RIDE_MODE_SHOP_STALL, RIDE_MODE_ROTATION, RIDE_MODE_FORWARD_ROTATION, RIDE_MODE_BACKWARD_ROTATION, RIDE_MODE_FILM_AVENGING_AVIATORS, RIDE_MODE_3D_FILM_MOUSE_TAILS, RIDE_MODE_SPACE_RINGS, RIDE_MODE_BEGINNERS, RIDE_MODE_LIM_POWERED_LAUNCH, RIDE_MODE_FILM_THRILL_RIDERS, RIDE_MODE_3D_FILM_STORM_CHASERS, RIDE_MODE_3D_FILM_SPACE_RAIDERS, RIDE_MODE_INTENSE, RIDE_MODE_BERSERK, RIDE_MODE_HAUNTED_HOUSE, RIDE_MODE_CIRCUS_SHOW, RIDE_MODE_DOWNWARD_LAUNCH, RIDE_MODE_CROOKED_HOUSE, RIDE_MODE_FREEFALL_DROP, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF
};
const uint8 RideAvailableBreakdowns[] = {
(1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE), // 00 Spiral Roller coaster
(1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE), // 01 Stand Up Coaster

View File

@ -83,6 +83,7 @@ extern const uint8 rideUnknownData3[0x60];
extern const rct_ride_name_convention RideNameConvention[96];
extern const uint8 RideAvailableModes[];
extern const uint8 AllRideModesAvailable[];
extern const uint8 RideAvailableBreakdowns[];
extern const rct_ride_entrance_definition RideEntranceDefinitions[RIDE_ENTRANCE_STYLE_COUNT];

View File

@ -2762,10 +2762,7 @@ static void window_ride_mode_dropdown(rct_window *w, rct_widget *widget)
rideEntry = ride_get_entry(ride);
// Seek to available modes for this ride
availableModes = RideAvailableModes;
for (i = 0; i < ride->type; i++) {
while (*(availableModes++) != 255) { }
}
availableModes = ride_seek_available_modes(ride);
// Count number of available modes
mode = availableModes;
@ -2950,7 +2947,6 @@ static void window_ride_operating_dropdown(rct_window *w, int widgetIndex, int d
{
rct_ride *ride;
const uint8 *availableModes;
int i;
if (dropdownIndex == -1)
return;
@ -2960,10 +2956,8 @@ static void window_ride_operating_dropdown(rct_window *w, int widgetIndex, int d
switch (widgetIndex) {
case WIDX_MODE_DROPDOWN:
// Seek to available modes for this ride
availableModes = RideAvailableModes;
for (i = 0; i < ride->type; i++) {
while (*(availableModes++) != 255) { }
}
availableModes = ride_seek_available_modes(ride);
set_operating_setting(w->number, 0, availableModes[dropdownIndex]);
break;
case WIDX_LOAD_DROPDOWN:

View File

@ -116,7 +116,8 @@ enum {
DDIDX_CHEATS,
DDIDX_ENABLE_SANDBOX_MODE = 2,
DDIDX_DISABLE_CLEARANCE_CHECKS,
DDIDX_DISABLE_SUPPORT_LIMITS
DDIDX_DISABLE_SUPPORT_LIMITS,
DDIDX_SHOW_ALL_OPERATING_MODES
};
#pragma region Toolbar_widget_ordering
@ -421,17 +422,19 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg
gDropdownItemsFormat[2] = 1156;
gDropdownItemsFormat[3] = 1156;
gDropdownItemsFormat[4] = 1156;
gDropdownItemsFormat[5] = 1156;
gDropdownItemsArgs[0] = 5217;
gDropdownItemsArgs[2] = STR_ENABLE_SANDBOX_MODE;
gDropdownItemsArgs[3] = STR_DISABLE_CLEARANCE_CHECKS;
gDropdownItemsArgs[4] = STR_DISABLE_SUPPORT_LIMITS;
gDropdownItemsArgs[5] = STR_SHOW_ALL_OPERATING_MODES;
window_dropdown_show_text(
w->x + widget->left,
w->y + widget->top,
widget->bottom - widget->top + 1,
w->colours[0] | 0x80,
0,
5
6
);
if (gCheatsSandboxMode)
gDropdownItemsChecked |= (1 << DDIDX_ENABLE_SANDBOX_MODE);
@ -439,6 +442,8 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg
gDropdownItemsChecked |= (1 << DDIDX_DISABLE_CLEARANCE_CHECKS);
if (gCheatsDisableSupportLimits)
gDropdownItemsChecked |= (1 << DDIDX_DISABLE_SUPPORT_LIMITS);
if (gCheatsShowAllOperatingModes)
gDropdownItemsChecked |= (1 << DDIDX_SHOW_ALL_OPERATING_MODES);
RCT2_GLOBAL(0x009DEBA2, uint16) = 0;
break;
case WIDX_VIEW_MENU:
@ -556,6 +561,8 @@ static void window_top_toolbar_dropdown(rct_window *w, int widgetIndex, int drop
case DDIDX_DISABLE_SUPPORT_LIMITS:
gCheatsDisableSupportLimits = !gCheatsDisableSupportLimits;
break;
case DDIDX_SHOW_ALL_OPERATING_MODES:
gCheatsShowAllOperatingModes = !gCheatsShowAllOperatingModes;
}
break;
case WIDX_VIEW_MENU:
@ -739,12 +746,6 @@ static void window_top_toolbar_invalidate(rct_window *w)
else
w->pressed_widgets |= (1 << WIDX_PATH);
// Fast forward button pressed down
// if (0)
// w->pressed_widgets |= (1 << WIDX_FASTFORWARD);
// else
// w->pressed_widgets &= ~(1 << WIDX_FASTFORWARD);
if (!(RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint32) & 1))
w->pressed_widgets &= ~(1 << WIDX_PAUSE);
else
@ -797,9 +798,6 @@ static void window_top_toolbar_paint(rct_window *w, rct_drawpixelinfo *dpi)
for (int i = 0; i < 3 && i < gGameSpeed - 4 && gGameSpeed >= 5; i++) {
gfx_draw_sprite(dpi, SPR_G2_HYPER_ARROW, x + 5 + i * 6, y + 15, 0);
}
/*if (gGameSpeed >= 8) {
gfx_draw_sprite(dpi, SPR_G2_HYPER_ARROWS, x + 5, y + 15, 0);
}*/
}
// Draw cheats button