From e2ccfc1cb8a7ae22f83473542a20e7d17c32ffd4 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 15 Dec 2015 15:09:39 +0100 Subject: [PATCH] Only check if ride mode exists when placing new track design, fixes #2445 --- src/localisation/string_ids.h | 1 + src/ride/ride.c | 11 ++++++----- src/ride/ride_data.c | 2 +- src/ride/track.c | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 941f9b4170..c373de4cf7 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -228,6 +228,7 @@ enum { STR_COST_AMOUNT = 986, STR_TOO_MANY_RIDES = 987, + STR_CANT_CREATE_NEW_RIDE_ATTRACTION = 988, STR_CONSTRUCTION = 990, diff --git a/src/ride/ride.c b/src/ride/ride.c index b460bebca9..d7113dc736 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -3629,6 +3629,7 @@ void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int * switch (setting){ case 0: + // Alteration: only check if the ride mode exists, and fall back to the default if it doesn't. invalidate_test_results(ride_id); ride_clear_for_construction(ride_id); ride_remove_peeps(ride_id); @@ -3641,16 +3642,16 @@ void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int * } uint8 default_mode = available_modes[0]; + + available_modes = AllRideModesAvailable; for (; *available_modes != 0xFF; available_modes++){ if (*available_modes == new_value) break; } - if (*available_modes == 0xFF) new_value = default_mode; - - if (available_modes[1] == 0xFF){ - if ((ride_entry->flags & RIDE_ENTRY_DISABLE_LAST_OPERATING_MODE) && !gCheatsShowAllOperatingModes) - new_value = default_mode; + if (*available_modes == 0xFF) { + log_warning("Tried to use incorrect ride mode, using default for this ride type."); + new_value = default_mode; } ride->mode = new_value; diff --git a/src/ride/ride_data.c b/src/ride/ride_data.c index a41ceda1c4..e9fee2dba9 100644 --- a/src/ride/ride_data.c +++ b/src/ride/ride_data.c @@ -736,7 +736,7 @@ const uint8 RideAvailableModes[] = { RIDE_MODE_CIRCUS_SHOW, 0xFF, // 31 Circus Show RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 32 Ghost Train RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 33 Twister Roller Coaster - RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 34 Wooden Roller Coaster + RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 34 Wooden Roller Coaster RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 35 Side-Friction Roller Coaster RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 36 Wild Mouse RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 37 Multi Dimension Coaster diff --git a/src/ride/track.c b/src/ride/track.c index e367b6b9c3..c436c483f6 100644 --- a/src/ride/track.c +++ b/src/ride/track.c @@ -3290,7 +3290,7 @@ void game_command_place_track_design(int* eax, int* ebx, int* ecx, int* edx, int entry_index = 0xFF; } - RCT2_GLOBAL(0x00141E9AE, rct_string_id) = 988; + RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, rct_string_id) = STR_CANT_CREATE_NEW_RIDE_ATTRACTION; int rideIndex = 0; { int _eax = 0,