diff --git a/src/management/award.c b/src/management/award.c index 5f50011ba2..de558f9b28 100644 --- a/src/management/award.c +++ b/src/management/award.c @@ -288,7 +288,7 @@ static int award_is_deserved_best_food(int awardType, int activeAwardTypes) FOR_ALL_RIDES(i, ride) { if (ride->status != RIDE_STATUS_OPEN) continue; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x800000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_23)) continue; shops++; @@ -334,7 +334,7 @@ static int award_is_deserved_worst_food(int awardType, int activeAwardTypes) FOR_ALL_RIDES(i, ride) { if (ride->status != RIDE_STATUS_OPEN) continue; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x800000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_23)) continue; shops++; @@ -459,7 +459,7 @@ static int award_is_deserved_best_custom_designed_rides(int awardType, int activ customDesignedRides = 0; FOR_ALL_RIDES(i, ride) { - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x10000000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_28)) continue; if (ride->lifecycle_flags & RIDE_LIFECYCLE_18) continue; @@ -488,7 +488,7 @@ static int award_is_deserved_most_dazzling_ride_colours(int awardType, int activ countedRides = 0; colourfulRides = 0; FOR_ALL_RIDES(i, ride) { - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x10000000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_28)) continue; countedRides++; diff --git a/src/peep/peep.c b/src/peep/peep.c index 18f07b2bb3..499fd80fdc 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -1990,7 +1990,7 @@ void peep_problem_warnings_update() break; } ride = &g_ride_list[peep->guest_heading_to_ride_id]; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x80000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_19)) hunger_counter++; break; @@ -2000,7 +2000,7 @@ void peep_problem_warnings_update() break; } ride = &g_ride_list[peep->guest_heading_to_ride_id]; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x1000000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_24)) thirst_counter++; break; @@ -2010,7 +2010,7 @@ void peep_problem_warnings_update() break; } ride = &g_ride_list[peep->guest_heading_to_ride_id]; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x2000000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_25)) bathroom_counter++; break; @@ -2261,9 +2261,8 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum case PEEP_STATE_ENTERING_RIDE: *argument_1 = STR_ON_RIDE; ride = g_ride_list[peep->current_ride]; - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride.type * 8, uint32) & 0x400000){ + if (ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_22)) *argument_1 = STR_IN_RIDE; - } *argument_1 |= (ride.name << 16); *argument_2 = ride.name_arguments; break; diff --git a/src/ride/ride.c b/src/ride/ride.c index ca298dfc09..cf3ebc9c36 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -422,7 +422,7 @@ void ride_get_status(int rideIndex, int *formatSecondary, int *argument) *formatSecondary = STR_RACE_WON_BY; } } else { - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17)) { *argument = ride->num_riders; *formatSecondary = STR_PERSON_ON_RIDE; if(*argument != 1) @@ -956,7 +956,7 @@ int ride_modify(rct_xy_element *input) if (ride->type == RIDE_TYPE_MAZE) return ride_modify_maze(mapElement.element, mapElement.x, mapElement.y); - if (RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS,uint64)[ride->type] & 0x100) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_8)) { if (ride_find_track_gap(&mapElement, &endOfTrackElement)) mapElement = endOfTrackElement; } @@ -980,7 +980,7 @@ int ride_modify(rct_xy_element *input) RCT2_GLOBAL(0x00F440B0, uint8) = 0; RCT2_GLOBAL(0x00F440B1, uint8) = 0; - if (RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS, uint64)[ride->type] & 0x8000) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_15)) { sub_6C84CE(); return 1; } @@ -2020,7 +2020,7 @@ rct_ride_measurement *ride_get_measurement(int rideIndex, rct_string_id *message ride = GET_RIDE(rideIndex); // Check if ride type supports data logging - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x200)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_9)) { if (message != NULL) *message = STR_DATA_LOGGING_NOT_AVAILABLE_FOR_THIS_TYPE_OF_RIDE; return NULL; } @@ -2053,7 +2053,7 @@ rct_ride_measurement *ride_get_measurement(int rideIndex, rct_string_id *message measurement->ride_index = rideIndex; ride->measurement_index = i; measurement->flags = 0; - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x80) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_7)) measurement->flags |= RIDE_MEASUREMENT_FLAG_G_FORCES; measurement->num_items = 0; measurement->current_item = 0; @@ -2111,8 +2111,8 @@ void ride_check_all_reachable() if (ride->status != RIDE_STATUS_OPEN || ride->connected_message_throttle != 0) continue; - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000) - ride_shop_connected(ride, i); + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17)) + ride_shop_connected(ride, i); else ride_entrance_exit_connected(ride, i); } @@ -2202,7 +2202,7 @@ static void ride_shop_connected(rct_ride* ride, int ride_idx) uint16 entrance_directions = 0; uint8 track_type = mapElement->properties.track.type; ride = &g_ride_list[mapElement->properties.track.ride_index]; - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x80000) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_19)) { entrance_directions = RCT2_ADDRESS(0x0099CA64, uint8)[track_type * 16]; } else { entrance_directions = RCT2_ADDRESS(0x0099BA64, uint8)[track_type * 16]; @@ -2808,7 +2808,7 @@ int ride_mode_check_station_present(rct_ride* ride){ if (stationIndex == -1) { RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, uint16) = STR_NOT_YET_CONSTRUCTED; - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x8000) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_15)) return -1; if (ride->type == RIDE_TYPE_MAZE) @@ -2829,7 +2829,8 @@ int ride_check_for_entrance_exit(int rideIndex) { rct_ride* ride = GET_RIDE(rideIndex); - if (RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS, uint32)[ride->type * 2] & 0x20000) return 1; + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17)) + return 1; int i; uint8 entrance = 0; @@ -3294,7 +3295,7 @@ int ride_is_valid_for_open(int rideIndex, int goingToBeOpen, int isApplying) sub_6B4D26(rideIndex, &trackElement); if ( - !(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000) && + !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_13) && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) ) { if (sub_6DD84C(ride, rideIndex, &trackElement, isApplying)) @@ -3453,4 +3454,9 @@ void game_command_set_ride_name(int *eax, int *ebx, int *ecx, int *edx, int *esi } *ebx = 0; +} + +bool ride_type_has_flag(int rideType, int flag) +{ + return (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (rideType * 8), uint32) & flag) != 0; } \ No newline at end of file diff --git a/src/ride/ride.h b/src/ride/ride.h index 7427b9543e..88e9187462 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -623,6 +623,41 @@ enum { RIDE_MEASUREMENT_FLAG_G_FORCES = 1 << 2 }; +enum { + RIDE_TYPE_FLAG_0 = 1 << 0, + RIDE_TYPE_FLAG_1 = 1 << 1, + RIDE_TYPE_FLAG_2 = 1 << 2, + RIDE_TYPE_FLAG_3 = 1 << 3, + RIDE_TYPE_FLAG_4 = 1 << 4, + RIDE_TYPE_FLAG_5 = 1 << 5, + RIDE_TYPE_FLAG_6 = 1 << 6, + RIDE_TYPE_FLAG_7 = 1 << 7, + RIDE_TYPE_FLAG_8 = 1 << 8, + RIDE_TYPE_FLAG_9 = 1 << 9, + RIDE_TYPE_FLAG_10 = 1 << 10, + RIDE_TYPE_FLAG_11 = 1 << 11, + RIDE_TYPE_FLAG_12 = 1 << 12, + RIDE_TYPE_FLAG_13 = 1 << 13, + RIDE_TYPE_FLAG_14 = 1 << 14, + RIDE_TYPE_FLAG_15 = 1 << 15, + RIDE_TYPE_FLAG_16 = 1 << 16, + RIDE_TYPE_FLAG_17 = 1 << 17, + RIDE_TYPE_FLAG_18 = 1 << 18, + RIDE_TYPE_FLAG_19 = 1 << 19, + RIDE_TYPE_FLAG_20 = 1 << 20, + RIDE_TYPE_FLAG_21 = 1 << 21, + RIDE_TYPE_FLAG_22 = 1 << 22, + RIDE_TYPE_FLAG_23 = 1 << 23, + RIDE_TYPE_FLAG_24 = 1 << 24, + RIDE_TYPE_FLAG_25 = 1 << 25, + RIDE_TYPE_FLAG_26 = 1 << 26, + RIDE_TYPE_FLAG_27 = 1 << 27, + RIDE_TYPE_FLAG_28 = 1 << 28, + RIDE_TYPE_FLAG_29 = 1 << 29, + RIDE_TYPE_FLAG_30 = 1 << 30, + RIDE_TYPE_FLAG_31 = 1 << 31, +}; + #define MAX_RIDES 255 #define MAX_RIDE_MEASUREMENTS 8 @@ -692,4 +727,6 @@ void game_command_set_ride_status(int *eax, int *ebx, int *ecx, int *edx, int *e void ride_set_name(int rideIndex, const char *name); void game_command_set_ride_name(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp); +bool ride_type_has_flag(int rideType, int flag); + #endif diff --git a/src/ride/track.c b/src/ride/track.c index 28f7554b1a..0ec4f7bd1b 100644 --- a/src/ride/track.c +++ b/src/ride/track.c @@ -1289,7 +1289,7 @@ int save_track_design(uint8 rideIndex){ return 0; } - if (!(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS, uint32)[ride->type * 2] & 0x10000000)){ + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_28)) { window_error_open(3346, RCT2_GLOBAL(0x141E9AC, rct_string_id)); return 0; } diff --git a/src/windows/new_campaign.c b/src/windows/new_campaign.c index 72c3920123..e2eb13e897 100644 --- a/src/windows/new_campaign.c +++ b/src/windows/new_campaign.c @@ -173,7 +173,7 @@ void window_new_campaign_open(sint16 campaignType) numApplicableRides = 0; window_new_campaign_rides[0] = 255; FOR_ALL_RIDES(i, ride) { - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x03820000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17 | RIDE_TYPE_FLAG_23 | RIDE_TYPE_FLAG_24 | RIDE_TYPE_FLAG_25)) window_new_campaign_rides[numApplicableRides++] = i; } diff --git a/src/windows/new_ride.c b/src/windows/new_ride.c index 90a4af9477..f782add16a 100644 --- a/src/windows/new_ride.c +++ b/src/windows/new_ride.c @@ -934,8 +934,7 @@ static void window_new_ride_paint_ride_information(rct_window *w, rct_drawpixeli gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, width, 1690, 0); // Number of designs available - uint32 rideTypeFlags = RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (item.type * 8), uint32); - if (rideTypeFlags & 0x10000000) { + if (ride_type_has_flag(item.type, RIDE_TYPE_FLAG_28)) { if (item.type != _lastTrackDesignCountRideType.type || item.entry_index != _lastTrackDesignCountRideType.entry_index) { _lastTrackDesignCountRideType = item; _lastTrackDesignCount = get_num_track_designs(item); @@ -961,7 +960,7 @@ static void window_new_ride_paint_ride_information(rct_window *w, rct_drawpixeli // Get price of ride int unk2 = RCT2_GLOBAL(0x0097CC68 + (item.type * 2), uint8); money32 price = RCT2_GLOBAL(0x0097DD78 + (item.type * 4), uint16); - if (rideTypeFlags & 0x80000) { + if (ride_type_has_flag(item.type, RIDE_TYPE_FLAG_19)) { price *= RCT2_ADDRESS(0x0099DE34, uint32)[unk2]; } else { price *= RCT2_ADDRESS(0x0099DA34, uint32)[unk2]; @@ -970,7 +969,7 @@ static void window_new_ride_paint_ride_information(rct_window *w, rct_drawpixeli // rct_string_id stringId = 1691; - if (!(rideTypeFlags & 0x8000)) + if (!ride_type_has_flag(item.type, RIDE_TYPE_FLAG_15)) stringId++; gfx_draw_string_right(dpi, stringId, &price, 0, x + width, y + 40); @@ -989,8 +988,7 @@ static void window_new_ride_select(rct_window *w) window_close(w); - uint32 rideTypeFlags = RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (item.type * 8), uint32); - if (rideTypeFlags & 0x10000000) { + if (ride_type_has_flag(item.type, RIDE_TYPE_FLAG_28)) { track_load_list(item); uint8 *trackDesignList = (uint8*)0x00F441EC; diff --git a/src/windows/ride.c b/src/windows/ride.c index 7b2637efbe..28733e738a 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -1241,7 +1241,7 @@ rct_window *window_ride_open_station(int rideIndex, int stationIndex) ride = GET_RIDE(rideIndex); - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_13)) return window_ride_main_open(rideIndex); w = window_bring_to_front_by_number(WC_RIDE, rideIndex); @@ -1509,9 +1509,8 @@ static void window_ride_init_viewport(rct_window *w) focus.coordinate.z = map_element_height(focus.coordinate.x, focus.coordinate.y) & 0xFFFF; focus.sprite.type |= 0x40; focus.coordinate.zoom = 1; - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x8000){ + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_15)) focus.coordinate.zoom = 0; - } } focus.coordinate.var_480 = w->viewport_focus_coordinates.var_480; @@ -1682,7 +1681,7 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget) ride = GET_RIDE(w->number); numItems = 1; - if (!(RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x2000)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_13)) { numItems += ride->num_stations; numItems += ride->num_vehicles; } @@ -1747,7 +1746,7 @@ static void window_ride_show_open_dropdown(rct_window *w, rct_widget *widget) gDropdownItemsArgs[numItems] = STR_CLOSE_RIDE; numItems++; - if (!(RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x800)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_11)) { gDropdownItemsFormat[numItems] = 1142; gDropdownItemsArgs[numItems] = STR_TEST_RIDE; numItems++; @@ -1774,7 +1773,7 @@ static void window_ride_show_open_dropdown(rct_window *w, rct_widget *widget) break; highlightedIndex = 2; - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x800) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_11)) break; if (ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) break; @@ -1796,7 +1795,7 @@ static void window_ride_show_open_dropdown(rct_window *w, rct_widget *widget) if (checkedIndex != RIDE_STATUS_CLOSED) checkedIndex = 3 - checkedIndex; - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x800) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_11)) { if (checkedIndex != 0) checkedIndex--; if (highlightedIndex != 0) @@ -1858,7 +1857,7 @@ static void window_ride_main_dropdown() dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16); ride = GET_RIDE(w->number); - if ((RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x800) && dropdownIndex != 0) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_11) && dropdownIndex != 0) dropdownIndex++; switch (dropdownIndex) { @@ -2657,7 +2656,7 @@ static void window_ride_mode_tweak_set(rct_window *w, uint8 value) RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 1361; if (ride->mode == RIDE_MODE_RACE) RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 1738; - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_13)) RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 1746; if (ride->mode == RIDE_MODE_BUMPERCAR) RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 1751; @@ -3015,7 +3014,7 @@ static void window_ride_operating_invalidate() // Leave if another vehicle arrives at station if ( - (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x10) && + ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_4) && ride->num_vehicles > 1 && ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED && ride->mode != RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED @@ -3030,7 +3029,7 @@ static void window_ride_operating_invalidate() } // Synchronise with adjacent stations - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x20) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_5)) { window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].type = WWT_CHECKBOX; window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].image = STR_SYNCHRONISE_WITH_ADJACENT_STATIONS; window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].tooltip = STR_SYNCHRONISE_WITH_ADJACENT_STATIONS_TIP; @@ -3043,7 +3042,7 @@ static void window_ride_operating_invalidate() // Waiting window_ride_operating_widgets[WIDX_LOAD].image = STR_QUARTER_LOAD + (ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD_MASK); - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x4000) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_14)) { window_ride_operating_widgets[WIDX_LOAD_CHECKBOX].type = WWT_CHECKBOX; window_ride_operating_widgets[WIDX_LOAD].type = WWT_DROPDOWN; window_ride_operating_widgets[WIDX_LOAD_DROPDOWN].type = WWT_DROPDOWN_BUTTON; @@ -3135,7 +3134,7 @@ static void window_ride_operating_invalidate() format = 1736; caption = STR_MAX_PEOPLE_ON_RIDE; tooltip = STR_MAX_PEOPLE_ON_RIDE_TIP; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_13)) format = 0; break; } @@ -3523,12 +3522,11 @@ static uint32 window_ride_get_colour_button_image(int colour) static int window_ride_has_track_colour(rct_ride *ride, int trackColour) { uint16 unk_1 = RCT2_GLOBAL(0x00993E20 + (ride->entrance_style * 8), uint16); - uint32 unk_2 = RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32); switch (trackColour) { - case 0: return ((unk_1 & 1) && !(unk_2 & 0x20000)) || (unk_2 & 1); - case 1: return ((unk_1 & 2) && !(unk_2 & 0x20000)) || (unk_2 & 2); - case 2: return unk_2 & 4; + case 0: return ((unk_1 & 1) && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17)) || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_0); + case 1: return ((unk_1 & 2) && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17)) || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_1); + case 2: return ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_2); default: return 0; } } @@ -3921,7 +3919,7 @@ static void window_ride_colour_invalidate() } // Track, multiple colour schemes - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x80000000) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_31)) { window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME].type = WWT_DROPDOWN; window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME_DROPDOWN].type = WWT_DROPDOWN_BUTTON; window_ride_colour_widgets[WIDX_PAINT_INDIVIDUAL_AREA].type = WWT_FLATBTN; @@ -3956,7 +3954,7 @@ static void window_ride_colour_invalidate() } // Track preview - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 7) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_0 | RIDE_TYPE_FLAG_1 | RIDE_TYPE_FLAG_2)) window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WWT_SPINNER; else window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WWT_EMPTY; @@ -3975,10 +3973,7 @@ static void window_ride_colour_invalidate() } // Vehicle colours - if ( - !(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000) && - (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x4000000) - ) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_13) && ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_26)) { vehicleColourSchemeType = ride->colour_scheme_type & 3; if (vehicleColourSchemeType == 0) w->var_48C = 0; @@ -4016,10 +4011,7 @@ static void window_ride_colour_invalidate() } // Vehicle colour scheme type - if ( - !(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x10000) && - (ride->num_cars_per_train | ride->num_vehicles) > 1 - ) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16) && (ride->num_cars_per_train | ride->num_vehicles) > 1) { window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME].type = WWT_DROPDOWN; window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN].type = WWT_DROPDOWN_BUTTON; } else { @@ -4705,7 +4697,7 @@ static void window_ride_measurements_invalidate() window_ride_measurements_widgets[WIDX_SAVE_DESIGN].type = WWT_EMPTY; window_ride_measurements_widgets[WIDX_CANCEL_DESIGN].type = WWT_EMPTY; if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_19)) { - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x10000000) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_28)) { window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].type = WWT_FLATBTN; w->disabled_widgets |= (1 << WIDX_SAVE_TRACK_DESIGN); if (ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) { @@ -4857,7 +4849,7 @@ static void window_ride_measurements_paint() gfx_draw_string_left_clipped(dpi, STR_RIDE_LENGTH, (void*)0x013CE952, 0, x, y, 308); y += 10; - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x80) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_7)) { // Max. positive vertical G's maxPositiveVerticalGs = ride->max_positive_vertical_g; stringId = maxPositiveVerticalGs >= FIXED_2DP(5,00) ? @@ -4885,7 +4877,7 @@ static void window_ride_measurements_paint() y += 10; } - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x400) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_10)) { // Drops drops = ride->drops & 0x3F; gfx_draw_string_left(dpi, STR_DROPS, &drops, 0, x, y); @@ -5151,7 +5143,7 @@ static void window_ride_graphs_invalidate() w->pressed_widgets |= (1LL << (WIDX_GRAPH_VELOCITY + (w->list_information_type & 0xFF))); // Hide graph buttons that are not applicable - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x80) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_7)) { window_ride_graphs_widgets[WIDX_GRAPH_VERTICAL].type = WWT_DROPDOWN_BUTTON; window_ride_graphs_widgets[WIDX_GRAPH_LATERAL].type = WWT_DROPDOWN_BUTTON; } else { @@ -5767,13 +5759,13 @@ static void window_ride_customer_invalidate() RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; - if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) * 0x20000) { - window_ride_customer_widgets[WIDX_SHOW_GUESTS_THOUGHTS].type = WWT_FLATBTN; - window_ride_customer_widgets[WIDX_SHOW_GUESTS_ON_RIDE].type = WWT_FLATBTN; - window_ride_customer_widgets[WIDX_SHOW_GUESTS_QUEUING].type = WWT_FLATBTN; - } else { + window_ride_customer_widgets[WIDX_SHOW_GUESTS_THOUGHTS].type = WWT_FLATBTN; + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_17)) { window_ride_customer_widgets[WIDX_SHOW_GUESTS_ON_RIDE].type = WWT_EMPTY; window_ride_customer_widgets[WIDX_SHOW_GUESTS_QUEUING].type = WWT_EMPTY; + } else { + window_ride_customer_widgets[WIDX_SHOW_GUESTS_ON_RIDE].type = WWT_FLATBTN; + window_ride_customer_widgets[WIDX_SHOW_GUESTS_QUEUING].type = WWT_FLATBTN; } window_ride_anchor_border_widgets(w); diff --git a/src/windows/track_list.c b/src/windows/track_list.c index 26f7ac428a..f59567abfa 100644 --- a/src/windows/track_list.c +++ b/src/windows/track_list.c @@ -520,7 +520,7 @@ static void window_track_list_paint() y += 10; } - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (track_td6->type * 8), uint32) & 0x80) { + if (ride_type_has_flag(track_td6->type, RIDE_TYPE_FLAG_7)) { // Maximum positive vertical Gs gForces = track_td6->max_positive_vertical_g * 32; gfx_draw_string_left(dpi, STR_MAX_POSITIVE_VERTICAL_G, &gForces, 0, x, y); @@ -546,7 +546,7 @@ static void window_track_list_paint() } } - if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (track_td6->type * 8), uint32) & 0x400) { + if (ride_type_has_flag(track_td6->type, RIDE_TYPE_FLAG_10)) { // Drops drops = track_td6->drops & 0x3F; gfx_draw_string_left(dpi, STR_DROPS, &drops, 0, x, y); diff --git a/src/world/park.c b/src/world/park.c index 43d911d176..5fbf20b3c7 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -385,9 +385,9 @@ static int park_calculate_guest_generation_probability() if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) continue; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x10000000)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_28)) continue; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x200)) + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_9)) continue; if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) continue;