Ensure that get_ride_entry returns NULL on invalid ride entries

This commit is contained in:
Michael Steenbeek 2017-10-12 21:07:35 +02:00 committed by GitHub
parent 7dc6e4e9c3
commit 3a9dc3f491
19 changed files with 109 additions and 88 deletions

View File

@ -213,8 +213,8 @@ static void research_rides_setup(){
{
for (uint8 rideType = 0; rideType < object_entry_group_counts[OBJECT_TYPE_RIDE]; rideType++)
{
rct_ride_entry* master_ride = get_ride_entry(rideType);
if (master_ride == nullptr || (intptr_t)master_ride == -1)
rct_ride_entry * master_ride = get_ride_entry(rideType);
if (master_ride == nullptr)
continue;
if (master_ride->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE)

View File

@ -21,6 +21,7 @@
#include <openrct2/game.h>
#include <openrct2/localisation/localisation.h>
#include <openrct2/interface/widget.h>
#include <openrct2/ride/ride.h>
#include <openrct2/ride/ride_data.h>
#include <openrct2/windows/dropdown.h>
@ -205,12 +206,12 @@ static void window_new_campaign_get_shop_items()
uint64 items = 0;
FOR_ALL_RIDES(i, ride) {
rct_ride_entry *rideType = get_ride_entry(ride->subtype);
if (rideType == nullptr) {
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
if (rideEntry == nullptr) {
continue;
}
uint8 itemType = rideType->shop_item;
if (itemType != 255)
uint8 itemType = rideEntry->shop_item;
if (itemType != SHOP_ITEM_NONE)
items |= 1LL << itemType;
}

View File

@ -121,7 +121,7 @@ public:
auto ride = get_ride(rideIndex);
rideEntry = get_ride_entry(rideEntryIndex);
if (rideEntry == nullptr || rideEntry == (rct_ride_entry *)-1)
if (rideEntry == nullptr)
{
log_warning("Invalid request for ride %u", rideIndex);
res->Error = GA_ERROR::UNKNOWN;

View File

@ -1101,7 +1101,7 @@ void game_fix_save_vars()
if (researchItem->entryIndex & RESEARCH_ENTRY_RIDE_MASK) {
uint8 entryIndex = researchItem->entryIndex & 0xFF;
rct_ride_entry *rideEntry = get_ride_entry(entryIndex);
if (rideEntry == NULL || rideEntry == (rct_ride_entry*)-1) {
if (rideEntry == NULL) {
research_remove(researchItem->entryIndex);
i--;
}

View File

@ -205,7 +205,7 @@ void research_finish_item(uint32 entryIndex)
sint32 rideEntryIndex = entryIndex & 0xFF;
rct_ride_entry * rideEntry = get_ride_entry(rideEntryIndex);
if (rideEntry != nullptr && rideEntry != (rct_ride_entry *) -1 && base_ride_type != RIDE_TYPE_NULL)
if (rideEntry != nullptr && base_ride_type != RIDE_TYPE_NULL)
{
bool ride_group_was_invented_before = false;
bool ride_type_was_invented_before = ride_type_is_invented(base_ride_type);
@ -233,7 +233,7 @@ void research_finish_item(uint32 entryIndex)
for (sint32 i = 0; i < MAX_RESEARCHED_TRACK_TYPES; i++)
{
rct_ride_entry * rideEntry2 = get_ride_entry(i);
if (rideEntry2 == (rct_ride_entry *) -1)
if (rideEntry2 == nullptr)
{
continue;
}
@ -645,7 +645,7 @@ void research_populate_list_random()
for (sint32 i = 0; i < MAX_RIDE_OBJECTS; i++)
{
rct_ride_entry * rideEntry = get_ride_entry(i);
if (rideEntry == (rct_ride_entry *) -1)
if (rideEntry == nullptr)
{
continue;
}
@ -681,7 +681,7 @@ void research_populate_list_researched()
for (sint32 i = 0; i < MAX_RIDE_OBJECTS; i++)
{
rct_ride_entry * rideEntry = get_ride_entry(i);
if (rideEntry == (rct_ride_entry *) -1)
if (rideEntry == nullptr)
{
continue;
}
@ -848,7 +848,7 @@ rct_string_id research_item_get_name(uint32 researchItem)
if (researchItem >= RESEARCH_ENTRY_RIDE_MASK)
{
rct_ride_entry * rideEntry = get_ride_entry(researchItem & 0xFF);
if (rideEntry == nullptr || rideEntry == (rct_ride_entry *) -1)
if (rideEntry == nullptr)
{
return 0;
}

View File

@ -718,7 +718,7 @@ private:
rct_ride_entry * rideEntry = get_ride_entry(dst->subtype);
// This can happen with hacked parks
if (rideEntry == nullptr || rideEntry == (rct_ride_entry*)-1)
if (rideEntry == nullptr)
{
dst = nullptr;
return;

View File

@ -49,7 +49,7 @@ static void paint_crooked_house_structure(paint_session * session, uint8 directi
Ride * ride = get_ride(original_map_element->properties.track.ride_index);
rct_ride_entry * ride_type = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)
{
@ -61,7 +61,7 @@ static void paint_crooked_house_structure(paint_session * session, uint8 directi
}
}
uint32 image_id = (direction + ride_type->vehicles[0].base_image_id) | session->TrackColours[SCHEME_MISC];
uint32 image_id = (direction + rideEntry->vehicles[0].base_image_id) | session->TrackColours[SCHEME_MISC];
rct_crooked_house_bound_box boundBox = crooked_house_data[segment];
sub_98197C(session, image_id, x_offset, y_offset, boundBox.length_x, boundBox.length_y, 127, height + 3, boundBox.offset_x,

View File

@ -43,9 +43,9 @@ static void paint_haunted_house_structure(paint_session * session, uint8 rideInd
uint8 frameNum = 0;
Ride * ride = get_ride(rideIndex);
rct_ride_entry * ride_type = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
uint32 baseImageId = ride_type->vehicles[0].base_image_id;
uint32 baseImageId = rideEntry->vehicles[0].base_image_id;
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL)
{

View File

@ -45,12 +45,12 @@ static void paint_space_rings_structure(paint_session * session, Ride * ride, ui
if (ride->num_stations == 0 || vehicleIndex < ride->num_vehicles)
{
rct_ride_entry * ride_type = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
rct_vehicle * vehicle = NULL;
sint32 frameNum = direction;
uint32 baseImageId = ride_type->vehicles[0].base_image_id;
uint32 baseImageId = rideEntry->vehicles[0].base_image_id;
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL)
{

View File

@ -226,14 +226,20 @@ Ride *get_ride(sint32 index)
return &gRideList[index];
}
rct_ride_entry *get_ride_entry(sint32 index)
rct_ride_entry * get_ride_entry(sint32 index)
{
if (index < 0 || index >= object_entry_group_counts[OBJECT_TYPE_RIDE])
{
log_error("invalid index %d for ride type", index);
return NULL;
}
return gRideEntries[index];
rct_ride_entry * retVal = gRideEntries[index];
if (retVal == (rct_ride_entry *)-1)
return NULL;
else
return retVal;
}
void get_ride_entry_name(char *name, sint32 index)
@ -254,7 +260,7 @@ rct_ride_measurement *get_ride_measurement(sint32 index)
return &gRideMeasurements[index];
}
rct_ride_entry *get_ride_entry_by_ride(Ride *ride)
rct_ride_entry * get_ride_entry_by_ride(Ride *ride)
{
rct_ride_entry *type = get_ride_entry(ride->subtype);
if (type == NULL)
@ -272,14 +278,13 @@ rct_ride_entry *get_ride_entry_by_ride(Ride *ride)
*/
void reset_type_to_ride_entry_index_map()
{
uint8 maxRideEntries = 128;
size_t stride = maxRideEntries + 1;
size_t stride = MAX_RIDE_OBJECTS + 1;
uint8 * entryTypeTable = malloc(RIDE_TYPE_COUNT * stride);
memset(entryTypeTable, 0xFF, RIDE_TYPE_COUNT * stride);
for (uint8 i = 0; i < maxRideEntries; i++) {
for (uint8 i = 0; i < MAX_RIDE_OBJECTS; i++) {
rct_ride_entry * rideEntry = get_ride_entry(i);
if (rideEntry == (rct_ride_entry *)-1) {
if (rideEntry == NULL) {
continue;
}
for (uint8 j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++) {
@ -443,7 +448,8 @@ static money32 ride_calculate_income_per_hour(Ride *ride)
{
// Get entry by ride to provide better reporting
rct_ride_entry *entry = get_ride_entry_by_ride(ride);
if (entry == NULL || entry == (rct_ride_entry*)-1) {
if (entry == NULL)
{
return 0;
}
money32 customersPerHour = ride_customers_per_hour(ride);
@ -979,8 +985,8 @@ void reset_all_ride_build_dates()
static sint32 ride_check_if_construction_allowed(Ride *ride)
{
rct_ride_entry *rideType = get_ride_entry_by_ride(ride);
if (rideType == NULL) {
rct_ride_entry * rideEntry = get_ride_entry_by_ride(ride);
if (rideEntry == NULL) {
context_show_error(STR_INVALID_RIDE_TYPE, STR_CANT_EDIT_INVALID_RIDE_TYPE);
return 0;
}
@ -1817,7 +1823,7 @@ sint32 ride_modify(rct_xy_element *input)
sint32 rideIndex, x, y, z, direction, type;
rct_xy_element mapElement, endOfTrackElement;
Ride *ride;
rct_ride_entry *rideType;
rct_ride_entry *rideEntry;
mapElement = *input;
rideIndex = mapElement.element->properties.track.ride_index;
@ -1825,9 +1831,9 @@ sint32 ride_modify(rct_xy_element *input)
if (ride == NULL) {
return 0;
}
rideType = get_ride_entry_by_ride(ride);
rideEntry = get_ride_entry_by_ride(ride);
if ((rideType == NULL) || !ride_check_if_construction_allowed(ride))
if ((rideEntry == NULL) || !ride_check_if_construction_allowed(ride))
return 0;
if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE) {
@ -3114,7 +3120,7 @@ sint32 ride_get_unused_preset_vehicle_colour(uint8 ride_type, uint8 ride_sub_typ
return 0;
}
rct_ride_entry *rideEntry = get_ride_entry(ride_sub_type);
if (rideEntry == (rct_ride_entry *)-1)
if (rideEntry == NULL)
{
return 0;
}
@ -6060,11 +6066,11 @@ void game_command_set_ride_price(sint32 *eax, sint32 *ebx, sint32 *ecx, sint32 *
*ebx = MONEY32_UNDEFINED;
return;
}
rct_ride_entry *rideEntry = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
money16 price = *edi;
bool secondary_price = (*edx >> 8);
if (rideEntry == (rct_ride_entry *)-1)
if (rideEntry == NULL)
{
log_warning("Invalid game command for ride %u", ride_number);
*ebx = MONEY32_UNDEFINED;
@ -6127,7 +6133,7 @@ void game_command_set_ride_price(sint32 *eax, sint32 *ebx, sint32 *ecx, sint32 *
}
ride = get_ride(0);
for (uint8 rideId = 0; rideId < 0xFF; rideId++, ride++) {
for (uint8 rideId = 0; rideId < MAX_RIDES; rideId++, ride++) {
// Unplaced rides have a type of NULL
if (ride->type == RIDE_TYPE_NULL)
continue;
@ -7005,7 +7011,7 @@ void ride_update_max_vehicles(sint32 rideIndex)
return;
rct_ride_entry *rideEntry = get_ride_entry(ride->subtype);
if (rideEntry == (rct_ride_entry*)-1)
if (rideEntry == NULL)
{
return;
}

View File

@ -942,10 +942,10 @@ extern "C" {
extern const rct_ride_properties RideProperties[RIDE_TYPE_COUNT];
/** Helper macros until rides are stored in this module. */
Ride *get_ride(sint32 index);
rct_ride_entry *get_ride_entry(sint32 index);
void get_ride_entry_name(char *name, sint32 index);
rct_ride_measurement *get_ride_measurement(sint32 index);
Ride * get_ride(sint32 index);
rct_ride_entry * get_ride_entry(sint32 index);
void get_ride_entry_name(char * name, sint32 index);
rct_ride_measurement * get_ride_measurement(sint32 index);
/**
* Helper macro loop for enumerating through all the non null rides.

View File

@ -67,7 +67,7 @@ static void paint_pirate_ship_structure(paint_session * session, Ride * ride, ui
rct_map_element * savedMapElement = static_cast<rct_map_element *>(session->CurrentlyDrawnItem);
rct_ride_entry * rideType = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
rct_vehicle * vehicle = NULL;
sint8 xOffset = !(direction & 1) ? axisOffset : 0;
@ -83,7 +83,7 @@ static void paint_pirate_ship_structure(paint_session * session, Ride * ride, ui
session->CurrentlyDrawnItem = vehicle;
}
baseImageId = rideType->vehicles[0].base_image_id + pirate_ship_base_sprite_offset[direction];
baseImageId = rideEntry->vehicles[0].base_image_id + pirate_ship_base_sprite_offset[direction];
if (vehicle != NULL)
{
sint32 rotation = (sint8)vehicle->vehicle_sprite_type;

View File

@ -57,7 +57,7 @@ static void paint_swinging_inverter_ship_structure(paint_session * session, Ride
{
rct_map_element * savedMapElement = static_cast<rct_map_element *>(session->CurrentlyDrawnItem);
rct_ride_entry * rideType = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
rct_vehicle * vehicle = NULL;
sint8 xOffset = !(direction & 1) ? axisOffset : 0;
@ -71,14 +71,14 @@ static void paint_swinging_inverter_ship_structure(paint_session * session, Ride
session->CurrentlyDrawnItem = vehicle;
}
uint32 vehicleImageId = rideType->vehicles[0].base_image_id + swinging_inverter_ship_base_sprite_offset[direction];
uint32 vehicleImageId = rideEntry->vehicles[0].base_image_id + swinging_inverter_ship_base_sprite_offset[direction];
if (vehicle != NULL)
{
sint32 rotation = (sint8)vehicle->vehicle_sprite_type;
if (rotation != 0)
{
vehicleImageId =
rideType->vehicles[0].base_image_id + swinging_inverter_ship_animating_base_sprite_offset[direction];
rideEntry->vehicles[0].base_image_id + swinging_inverter_ship_animating_base_sprite_offset[direction];
if (direction & 2)
{

View File

@ -911,7 +911,7 @@ static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32
return MONEY32_UNDEFINED;
}
rct_ride_entry *rideEntry = get_ride_entry(ride->subtype);
if (rideEntry == (rct_ride_entry *)-1 || rideEntry == NULL)
if (rideEntry == NULL)
{
log_warning("Invalid ride type for track placement, rideIndex = %d", rideIndex);
return MONEY32_UNDEFINED;

View File

@ -731,16 +731,18 @@ static void vehicle_update_sound_params(rct_vehicle* vehicle)
sint32 v = vehicle->velocity;
rct_ride_entry* ride_type = get_ride_entry(vehicle->ride_subtype);
if (ride_type != (rct_ride_entry*)-1)
rct_ride_entry * ride_type = get_ride_entry(vehicle->ride_subtype);
if (ride_type != NULL)
{
uint8 test = ride_type->vehicles[vehicle->vehicle_type].var_5A;
if (test & 1) {
if (test & 1)
{
v *= 2;
}
}
if (v < 0) {
if (v < 0)
{
v = -v;
}
v >>= 5;
@ -4919,7 +4921,7 @@ static void vehicle_update_sound(rct_vehicle *vehicle)
ride = get_ride(vehicle->ride);
rideEntry = get_ride_entry(vehicle->ride_subtype);
if (rideEntry == (rct_ride_entry*)-1)
if (rideEntry == NULL)
{
return;
}
@ -9040,7 +9042,7 @@ loc_6DC316:
rct_ride_entry_vehicle *vehicle_get_vehicle_entry(rct_vehicle *vehicle)
{
rct_ride_entry *rideEntry = get_ride_entry(vehicle->ride_subtype);
if (rideEntry == (rct_ride_entry*)-1)
if (rideEntry == NULL)
{
return NULL;
}

View File

@ -2359,7 +2359,7 @@ void vehicle_paint(paint_session * session, rct_vehicle *vehicle, sint32 imageDi
vehicleEntry = &CableLiftVehicle;
} else {
rideEntry = get_ride_entry(vehicle->ride_subtype);
if (rideEntry == (rct_ride_entry*)-1)
if (rideEntry == NULL)
{
return;
}

View File

@ -1422,13 +1422,17 @@ static void window_ride_disable_tabs(rct_window *w)
if ((gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) != 0)
disabled_tabs |= (1 << WIDX_TAB_4 | 1 << WIDX_TAB_6 | 1 << WIDX_TAB_9 | 1 << WIDX_TAB_10); // 0x3280
rct_ride_entry *type = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
if (type == nullptr || type == reinterpret_cast<rct_ride_entry*>(-1)) {
if (rideEntry == nullptr)
{
disabled_tabs |= 1 << WIDX_TAB_2 | 1 << WIDX_TAB_3 | 1 << WIDX_TAB_4 | 1 << WIDX_TAB_5 | 1 << WIDX_TAB_6
| 1 << WIDX_TAB_7 | 1 << WIDX_TAB_8 | 1 << WIDX_TAB_9 | 1 << WIDX_TAB_10;
} else if ((type->flags & RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB) != 0)
disabled_tabs |= (1 << WIDX_TAB_5); // 0x100
}
else if ((rideEntry->flags & RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB) != 0)
{
disabled_tabs |= (1 << WIDX_TAB_5);
}
w->disabled_widgets = disabled_tabs;
}
@ -3727,8 +3731,9 @@ static void window_ride_maintenance_resize(rct_window *w)
static void window_ride_maintenance_mousedown(rct_window *w, rct_widgetindex widgetIndex, rct_widget *widget)
{
Ride *ride = get_ride(w->number);
rct_ride_entry *ride_type = get_ride_entry(ride->subtype);
if (ride_type == nullptr) {
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
if (rideEntry == nullptr)
{
return;
}
@ -3759,14 +3764,14 @@ static void window_ride_maintenance_mousedown(rct_window *w, rct_widgetindex wid
case WIDX_FORCE_BREAKDOWN:
num_items = 1;
for (j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++) {
if (ride_type->ride_type[j] != 0xFF)
if (rideEntry->ride_type[j] != 0xFF)
break;
}
gDropdownItemsFormat[0] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsArgs[0] = STR_DEBUG_FIX_RIDE;
for (sint32 i = 0; i < 8; i++) {
assert(j < (sint32)Util::CountOf(ride_type->ride_type));
if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) {
assert(j < (sint32)Util::CountOf(rideEntry->ride_type));
if (RideAvailableBreakdowns[rideEntry->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)) {
if (ride->num_vehicles != 1)
continue;
@ -3793,7 +3798,7 @@ static void window_ride_maintenance_mousedown(rct_window *w, rct_widgetindex wid
sint32 breakdownReason = ride->breakdown_reason_pending;
if (breakdownReason != BREAKDOWN_NONE && (ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING)) {
for (sint32 i = 0; i < 8; i++) {
if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) {
if (RideAvailableBreakdowns[rideEntry->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)) {
if (ride->num_vehicles != 1)
continue;
@ -3829,7 +3834,7 @@ static void window_ride_maintenance_dropdown(rct_window *w, rct_widgetindex widg
rct_vehicle *vehicle;
Ride *ride = get_ride(w->number);
rct_ride_entry *ride_type = get_ride_entry(ride->subtype);
rct_ride_entry * rideEntry = get_ride_entry(ride->subtype);
switch (widgetIndex) {
case WIDX_INSPECTION_INTERVAL_DROPDOWN:
@ -3881,14 +3886,14 @@ static void window_ride_maintenance_dropdown(rct_window *w, rct_widgetindex widg
else {
sint32 j;
for (j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++) {
if (ride_type->ride_type[j] != RIDE_TYPE_NULL)
if (rideEntry->ride_type[j] != RIDE_TYPE_NULL)
break;
}
sint32 i;
sint32 num_items = 1;
for (i = 0; i < BREAKDOWN_COUNT; i++) {
assert(j < (sint32)Util::CountOf(ride_type->ride_type));
if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) {
assert(j < (sint32)Util::CountOf(rideEntry->ride_type));
if (RideAvailableBreakdowns[rideEntry->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)) {
if (ride->num_vehicles != 1)
continue;
@ -5828,19 +5833,19 @@ static void update_same_price_throughout_flags(uint32 shop_item)
*/
static void window_ride_income_toggle_primary_price(rct_window *w)
{
Ride *ride;
rct_ride_entry *ride_type;
Ride * ride;
rct_ride_entry * rideEntry;
uint32 shop_item;
money16 price;
ride = get_ride(w->number);
ride_type = get_ride_entry(ride->subtype);
rideEntry = get_ride_entry(ride->subtype);
if (ride->type == RIDE_TYPE_TOILETS) {
shop_item = SHOP_ITEM_ADMISSION;
}
else {
shop_item = ride_type->shop_item;
shop_item = rideEntry->shop_item;
if (shop_item == 0xFFFF)
return;
}
@ -5857,15 +5862,15 @@ static void window_ride_income_toggle_primary_price(rct_window *w)
*/
static void window_ride_income_toggle_secondary_price(rct_window *w)
{
Ride *ride;
rct_ride_entry *ride_type;
Ride * ride;
rct_ride_entry * rideEntry;
uint32 shop_item;
money16 price;
ride = get_ride(w->number);
ride_type = get_ride_entry(ride->subtype);
rideEntry = get_ride_entry(ride->subtype);
shop_item = ride_type->shop_item_secondary;
shop_item = rideEntry->shop_item_secondary;
if (shop_item == SHOP_ITEM_NONE)
shop_item = RidePhotoItems[ride->type];
@ -5881,15 +5886,15 @@ static void window_ride_income_toggle_secondary_price(rct_window *w)
*/
static void window_ride_income_increase_primary_price(rct_window *w)
{
Ride *ride;
rct_ride_entry *ride_type;
Ride * ride;
rct_ride_entry * rideEntry;
ride = get_ride(w->number);
ride_type = get_ride_entry(ride->subtype);
rideEntry = get_ride_entry(ride->subtype);
if (!park_ride_prices_unlocked())
{
if (ride->type != RIDE_TYPE_TOILETS && ride_type->shop_item == SHOP_ITEM_NONE)
if (ride->type != RIDE_TYPE_TOILETS && rideEntry->shop_item == SHOP_ITEM_NONE)
{
return;
}
@ -5908,14 +5913,14 @@ static void window_ride_income_increase_primary_price(rct_window *w)
static void window_ride_income_decrease_primary_price(rct_window *w)
{
Ride *ride;
rct_ride_entry *ride_type;
rct_ride_entry *rideEntry;
ride = get_ride(w->number);
ride_type = get_ride_entry(ride->subtype);
rideEntry = get_ride_entry(ride->subtype);
if (!park_ride_prices_unlocked())
{
if (ride->type != RIDE_TYPE_TOILETS && ride_type->shop_item == SHOP_ITEM_NONE)
if (ride->type != RIDE_TYPE_TOILETS && rideEntry->shop_item == SHOP_ITEM_NONE)
{
return;
}

View File

@ -343,9 +343,10 @@ static void window_track_list_update(rct_window *w)
static void window_track_list_invalidate(rct_window *w)
{
rct_string_id stringId = STR_NONE;
rct_ride_entry *entry = get_ride_entry(_window_track_list_item.entry_index);
rct_ride_entry * entry = get_ride_entry(_window_track_list_item.entry_index);
if (entry != nullptr && entry != (rct_ride_entry*)-1) {
if (entry != nullptr)
{
rct_ride_name rideName = get_ride_naming(_window_track_list_item.type, entry);
stringId = rideName.name;
}

View File

@ -22,6 +22,7 @@
#include <openrct2/ride/track.h>
#include <openrct2/world/sprite.h>
#include <openrct2/paint/map_element/map_element.h>
#include "../../src/openrct2/ride/ride.h"
#define RCT2_ADDRESS_SPRITE_LIST 0x010E63BC
@ -101,11 +102,16 @@ rct_ride_entry *get_ride_entry(int index) {
log_error("invalid index %d for ride type", index);
return NULL;
}
return gRideEntries[index];
rct_ride_entry * retVal = gRideEntries[index];
if (retVal == (rct_ride_entry *)-1)
return NULL;
else
return retVal;
}
rct_ride_entry *get_ride_entry_by_ride(Ride *ride) {
rct_ride_entry *type = get_ride_entry(ride->subtype);
rct_ride_entry * type = get_ride_entry(ride->subtype);
if (type == NULL) {
log_error("Invalid ride subtype for ride");
}