From aa929e1593e7a2adcc0c5886c2693c3e2ec407fa Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 10 May 2016 00:00:59 +0100 Subject: [PATCH] add globals for researched things, cleanup --- src/addresses.h | 5 ++ src/management/research.c | 75 +++++++++++++--- src/management/research.h | 8 ++ src/rct2/S6Exporter.cpp | 8 +- src/rct2/S6Importer.cpp | 8 +- src/ride/ride.c | 8 -- src/ride/track.c | 4 +- src/ride/track_data.c | 118 +++++++++++++------------- src/scenario.h | 8 +- src/windows/editor_bottom_toolbar.c | 14 +-- src/windows/editor_object_selection.c | 20 ++--- src/windows/new_ride.c | 12 +-- src/windows/ride.c | 23 ++--- src/windows/ride_construction.c | 4 +- src/world/park.c | 2 +- 15 files changed, 183 insertions(+), 134 deletions(-) diff --git a/src/addresses.h b/src/addresses.h index 36f408a053..470d1046af 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -361,6 +361,11 @@ #define RCT2_ADDRESS_CURRENT_TICKS 0x013628F4 #define RCT2_ADDRESS_RIDE_LIST 0x013628F8 +#define RCT2_ADDRESS_RESEARCHED_RIDE_TYPES 0x01357404 +#define RCT2_ADDRESS_RESEARCHED_RIDE_ENTRIES 0x01357424 +#define RCT2_ADDRESS_RESEARCHED_TRACK_TYPES_A 0x01357444 +#define RCT2_ADDRESS_RESEARCHED_TRACK_TYPES_B 0x01357644 + #define RCT2_ADDRESS_RIDE_COUNT 0x013587C8 #define RCT2_ADDRESS_RIDE_FLAGS 0x0097CF40 diff --git a/src/management/research.c b/src/management/research.c index 2544c78d48..297a1ac957 100644 --- a/src/management/research.c +++ b/src/management/research.c @@ -25,6 +25,7 @@ #include "../rct1.h" #include "../ride/ride.h" #include "../ride/ride_data.h" +#include "../ride/track_data.h" #include "../world/scenery.h" #include "news_item.h" #include "research.h" @@ -37,8 +38,16 @@ rct_research_item *gResearchItems = (rct_research_item*)RCT2_RESEARCH_ITEMS; // 0x00EE787C uint8 gResearchUncompletedCategories; +uint32 *gResearchedRideTypes = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_RIDE_TYPES, uint32); +uint32 *gResearchedRideEntries = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_RIDE_ENTRIES, uint32); +uint32 *gResearchedTrackTypesA = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_TRACK_TYPES_A, uint32); +uint32 *gResearchedTrackTypesB = RCT2_ADDRESS(RCT2_ADDRESS_RESEARCHED_TRACK_TYPES_B, uint32); + bool gSilentResearch = false; +static void ride_type_set_invented(int rideType); +static void ride_entry_set_invented(int rideEntryIndex); + /** * * rct2: 0x006671AD, part of 0x00667132 @@ -171,15 +180,15 @@ void research_finish_item(sint32 entryIndex) base_ride_type = (entryIndex >> 8) & 0xFF; rideEntryIndex = entryIndex & 0xFF; rideEntry = get_ride_entry(rideEntryIndex); - RCT2_ADDRESS(0x01357404, uint32)[base_ride_type >> 5] |= (1u << (base_ride_type & 0x1F)); - RCT2_ADDRESS(0x01357444, uint32)[base_ride_type] = RCT2_ADDRESS(0x0097C468, uint32)[base_ride_type]; - RCT2_ADDRESS(0x01357644, uint32)[base_ride_type] = RCT2_ADDRESS(0x0097C5D4, uint32)[base_ride_type]; + ride_type_set_invented(base_ride_type); + gResearchedTrackTypesA[base_ride_type] = (RideTypePossibleTrackConfigurations[base_ride_type] ) & 0xFFFFFFFFULL; + gResearchedTrackTypesB[base_ride_type] = (RideTypePossibleTrackConfigurations[base_ride_type] >> 32ULL) & 0xFFFFFFFFULL; if (RideData4[base_ride_type].flags & RIDE_TYPE_FLAG4_3) { ebx = RCT2_GLOBAL(0x0097D4F5 + (base_ride_type * 8), uint8); - RCT2_ADDRESS(0x01357444, uint32)[ebx] = RCT2_ADDRESS(0x0097C468, uint32)[ebx]; - RCT2_ADDRESS(0x01357644, uint32)[ebx] = RCT2_ADDRESS(0x0097C5D4, uint32)[ebx]; + gResearchedTrackTypesA[ebx] = (RideTypePossibleTrackConfigurations[ebx] ) & 0xFFFFFFFFULL; + gResearchedTrackTypesB[ebx] = (RideTypePossibleTrackConfigurations[ebx] >> 32ULL) & 0xFFFFFFFFULL; } - RCT2_ADDRESS(0x001357424, uint32)[rideEntryIndex >> 5] |= 1u << (rideEntryIndex & 0x1F); + ride_entry_set_invented(rideEntryIndex); if (!(rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE)) { for (i = 0; i < 128; i++) { rideEntry2 = get_ride_entry(i); @@ -188,8 +197,12 @@ void research_finish_item(sint32 entryIndex) if ((rideEntry2->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE)) continue; - if (rideEntry2->ride_type[0] == base_ride_type || rideEntry2->ride_type[1] == base_ride_type || rideEntry2->ride_type[2] == base_ride_type) - RCT2_ADDRESS(0x001357424, uint32)[i >> 5] |= 1u << (i & 0x1F); + if (rideEntry2->ride_type[0] == base_ride_type || + rideEntry2->ride_type[1] == base_ride_type || + rideEntry2->ride_type[2] == base_ride_type + ) { + ride_entry_set_invented(rideEntryIndex); + } } } @@ -307,8 +320,8 @@ void sub_684AC3(){ } for (int i = 0; i < 8; ++i){ - RCT2_ADDRESS(0x01357404, uint32)[i] = 0; - RCT2_ADDRESS(0x01357424, uint32)[i] = 0; + gResearchedRideTypes[i] = 0; + gResearchedRideEntries[i] = 0; } for (int i = 0; i < 56; i++){ @@ -587,3 +600,45 @@ void research_insert_scenery_group_entry(uint8 entryIndex, bool researched) rct_scenery_set_entry *scenerySetEntry = g_scenerySetEntries[entryIndex]; research_insert(researched, entryIndex, RESEARCH_CATEGORY_SCENERYSET); } + +bool ride_type_is_invented(int rideType) +{ + int quadIndex = rideType >> 5; + int bitIndex = rideType & 0x1F; + bool invented = (gResearchedRideTypes[quadIndex] & (1 << bitIndex)); + return invented; +} + +bool ride_entry_is_invented(int rideEntryIndex) +{ + int quadIndex = rideEntryIndex >> 5; + int bitIndex = rideEntryIndex & 0x1F; + bool invented = (gResearchedRideEntries[quadIndex] & (1 << bitIndex)); + return invented; +} + +bool track_type_is_invented(uint8 rideType, int trackType) +{ + if (trackType < 32) { + bool invented = (gResearchedTrackTypesA[rideType] & (1UL << trackType)); + return invented; + } else { + trackType -= 32; + bool invented = (gResearchedTrackTypesB[rideType] & (1UL << trackType)); + return invented; + } +} + +static void ride_type_set_invented(int rideType) +{ + int quadIndex = rideType >> 5; + int bitIndex = rideType & 0x1F; + gResearchedRideTypes[quadIndex] |= 1 << bitIndex; +} + +static void ride_entry_set_invented(int rideEntryIndex) +{ + int quadIndex = rideEntryIndex >> 5; + int bitIndex = rideEntryIndex & 0x1F; + gResearchedRideEntries[quadIndex] |= 1 << bitIndex; +} diff --git a/src/management/research.h b/src/management/research.h index 595061f489..cc5868e8e0 100644 --- a/src/management/research.h +++ b/src/management/research.h @@ -74,6 +74,10 @@ enum { extern rct_research_item *gResearchItems; extern uint8 gResearchUncompletedCategories; +extern uint32 *gResearchedRideTypes; +extern uint32 *gResearchedRideEntries; +extern uint32 *gResearchedTrackTypesA; +extern uint32 *gResearchedTrackTypesB; extern bool gSilentResearch; void research_reset_items(); @@ -94,4 +98,8 @@ void research_remove(sint32 entryIndex); void research_insert_ride_entry(uint8 entryIndex, bool researched); void research_insert_scenery_group_entry(uint8 entryIndex, bool researched); +bool ride_type_is_invented(int rideType); +bool ride_entry_is_invented(int rideEntryIndex); +bool track_type_is_invented(uint8 rideType, int trackType); + #endif diff --git a/src/rct2/S6Exporter.cpp b/src/rct2/S6Exporter.cpp index 122d42ad61..061fc907d7 100644 --- a/src/rct2/S6Exporter.cpp +++ b/src/rct2/S6Exporter.cpp @@ -273,10 +273,10 @@ void S6Exporter::Export() _s6.guest_count_change_modifier = gGuestChangeModifier; _s6.current_research_level = gResearchFundingLevel; // pad_01357400 - memcpy(_s6.ride_types_researched, RCT2_ADDRESS(0x01357404, uint32), sizeof(_s6.ride_types_researched)); - memcpy(_s6.ride_entries_researched, RCT2_ADDRESS(0x01357424, uint32), sizeof(_s6.ride_entries_researched)); - memcpy(_s6.dword_01357444, RCT2_ADDRESS(0x01357444, uint32), sizeof(_s6.dword_01357444)); - memcpy(_s6.dword_01357644, RCT2_ADDRESS(0x01357644, uint32), sizeof(_s6.dword_01357644)); + memcpy(_s6.researched_ride_types, gResearchedRideTypes, sizeof(_s6.researched_ride_types)); + memcpy(_s6.researched_ride_entries, gResearchedRideEntries, sizeof(_s6.researched_ride_entries)); + memcpy(_s6.researched_track_types_a, gResearchedTrackTypesA, sizeof(_s6.researched_track_types_a)); + memcpy(_s6.researched_track_types_b, gResearchedTrackTypesB, sizeof(_s6.researched_track_types_b)); _s6.guests_in_park = gNumGuestsInPark; _s6.guests_heading_for_park = gNumGuestsHeadingForPark; diff --git a/src/rct2/S6Importer.cpp b/src/rct2/S6Importer.cpp index fa86d2c641..91a97589e5 100644 --- a/src/rct2/S6Importer.cpp +++ b/src/rct2/S6Importer.cpp @@ -205,10 +205,10 @@ void S6Importer::Import() gGuestChangeModifier = _s6.guest_count_change_modifier; gResearchFundingLevel = _s6.current_research_level; // pad_01357400 - memcpy(RCT2_ADDRESS(0x01357404, uint32), _s6.ride_types_researched, sizeof(_s6.ride_types_researched)); - memcpy(RCT2_ADDRESS(0x01357424, uint32), _s6.ride_entries_researched, sizeof(_s6.ride_entries_researched)); - memcpy(RCT2_ADDRESS(0x01357444, uint32), _s6.dword_01357444, sizeof(_s6.dword_01357444)); - memcpy(RCT2_ADDRESS(0x01357644, uint32), _s6.dword_01357644, sizeof(_s6.dword_01357644)); + memcpy(gResearchedRideTypes, _s6.researched_ride_types, sizeof(_s6.researched_ride_types)); + memcpy(gResearchedRideEntries, _s6.researched_ride_entries, sizeof(_s6.researched_ride_entries)); + memcpy(gResearchedTrackTypesA, _s6.researched_track_types_a, sizeof(_s6.researched_track_types_a)); + memcpy(gResearchedTrackTypesB, _s6.researched_track_types_b, sizeof(_s6.researched_track_types_b)); gNumGuestsInPark = _s6.guests_in_park; gNumGuestsHeadingForPark = _s6.guests_heading_for_park; diff --git a/src/ride/ride.c b/src/ride/ride.c index ff52777b08..61c3861afb 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -7652,14 +7652,6 @@ void ride_set_num_cars_per_vehicle(int rideIndex, int numCarsPerVehicle) ); } -static bool ride_entry_is_invented(int rideEntryIndex) -{ - int quadIndex = rideEntryIndex >> 5; - int bitIndex = rideEntryIndex & 0x1F; - bool invented = (RCT2_ADDRESS(0x01357424, uint32)[quadIndex] & (1 << bitIndex)); - return invented; -} - static bool ride_is_vehicle_type_valid(rct_ride *ride, uint8 inputRideEntryIndex) { bool selectionShouldBeExpanded; diff --git a/src/ride/track.c b/src/ride/track.c index 723d75c20c..81cac7fb85 100644 --- a/src/ride/track.c +++ b/src/ride/track.c @@ -617,9 +617,9 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in RCT2_GLOBAL(RCT2_ADDRESS_ABOVE_GROUND_FLAGS, uint8) = 0; uint64 enabledTrackPieces = 0; - enabledTrackPieces |= rideEntry->enabledTrackPiecesB & RCT2_ADDRESS(0x01357644, uint32)[ride->type]; + enabledTrackPieces |= rideEntry->enabledTrackPiecesB & gResearchedTrackTypesB[ride->type]; enabledTrackPieces <<= 32; - enabledTrackPieces |= rideEntry->enabledTrackPiecesA & RCT2_ADDRESS(0x01357444, uint32)[ride->type]; + enabledTrackPieces |= rideEntry->enabledTrackPiecesA & gResearchedTrackTypesA[ride->type]; uint32 rideTypeFlags = RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32); RCT2_GLOBAL(0x00F44068, uint32) = rideTypeFlags; diff --git a/src/ride/track_data.c b/src/ride/track_data.c index fbb0305058..fd7e805d79 100644 --- a/src/ride/track_data.c +++ b/src/ride/track_data.c @@ -281,31 +281,31 @@ const rct_track_coordinates TrackCoordinates[256] = { // rct2: 0x0097C468 (0 - 31) and 0x0097C5D4 (32 - 63) const uint64 RideTypePossibleTrackConfigurations[91] = { - /* RIDE_TYPE_SPIRAL_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_STAND_UP_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HALF_LOOP | TRACK_CORKSCREW | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_SUSPENDED_SWINGING_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_LARGE_UNBANKED | TRACK_BRAKES, - /* RIDE_TYPE_INVERTED_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_TWIST | TRACK_HALF_LOOP | TRACK_CORKSCREW | TRACK_HELIX_LARGE | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_HALF_LOOP_LARGE, - /* RIDE_TYPE_JUNIOR_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_LIFT_HILL_CURVE | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_CURVE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_MINIATURE_RAILWAY */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE, - /* RIDE_TYPE_MONORAIL */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE, - /* RIDE_TYPE_MINI_SUSPENDED_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE, - /* RIDE_TYPE_BOAT_RIDE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_CURVE_VERY_SMALL, - /* RIDE_TYPE_WOODEN_WILD_MOUSE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_LIFT_HILL_STEEP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_LONG | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL, - /* RIDE_TYPE_STEEPLECHASE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_BRAKES, - /* RIDE_TYPE_CAR_RIDE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL | TRACK_TOWER_BASE, - /* RIDE_TYPE_LAUNCHED_FREEFALL */ TRACK_TOWER_BASE, - /* RIDE_TYPE_BOBSLEIGH_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_OBSERVATION_TOWER */ TRACK_TOWER_BASE, - /* RIDE_TYPE_LOOPING_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_DINGHY_SLIDE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE, - /* RIDE_TYPE_MINE_TRAIN_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_CHAIRLIFT */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL, - /* RIDE_TYPE_CORKSCREW_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HALF_LOOP | TRACK_CORKSCREW | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, + /* RIDE_TYPE_SPIRAL_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_STAND_UP_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HALF_LOOP) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_SUSPENDED_SWINGING_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_LARGE_UNBANKED) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_INVERTED_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_TWIST) | (1UL << TRACK_HALF_LOOP) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_HELIX_LARGE) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_HALF_LOOP_LARGE), + /* RIDE_TYPE_JUNIOR_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_LIFT_HILL_CURVE) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_MINIATURE_RAILWAY */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_MONORAIL */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_MINI_SUSPENDED_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_BOAT_RIDE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_CURVE_VERY_SMALL), + /* RIDE_TYPE_WOODEN_WILD_MOUSE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_LIFT_HILL_STEEP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_LONG) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL), + /* RIDE_TYPE_STEEPLECHASE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_CAR_RIDE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_TOWER_BASE), + /* RIDE_TYPE_LAUNCHED_FREEFALL */ (1UL << TRACK_TOWER_BASE), + /* RIDE_TYPE_BOBSLEIGH_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_OBSERVATION_TOWER */ (1UL << TRACK_TOWER_BASE), + /* RIDE_TYPE_LOOPING_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_DINGHY_SLIDE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_MINE_TRAIN_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_CHAIRLIFT */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL), + /* RIDE_TYPE_CORKSCREW_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HALF_LOOP) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), /* RIDE_TYPE_MAZE */ 0, /* RIDE_TYPE_SPIRAL_SLIDE */ 0, - /* RIDE_TYPE_GO_KARTS */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL, - /* RIDE_TYPE_LOG_FLUME */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_RIVER_RAPIDS */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL | TRACK_TOWER_BASE | TRACK_ON_RIDE_PHOTO, + /* RIDE_TYPE_GO_KARTS */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL), + /* RIDE_TYPE_LOG_FLUME */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_RIVER_RAPIDS */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_TOWER_BASE) | (1UL << TRACK_ON_RIDE_PHOTO), /* RIDE_TYPE_DODGEMS */ 0, /* RIDE_TYPE_PIRATE_SHIP */ 0, /* RIDE_TYPE_SWINGING_INVERTER_SHIP */ 0, @@ -323,55 +323,55 @@ const uint64 RideTypePossibleTrackConfigurations[91] = { /* RIDE_TYPE_3D_CINEMA */ 0, /* RIDE_TYPE_TOP_SPIN */ 0, /* RIDE_TYPE_SPACE_RINGS */ 0, - /* RIDE_TYPE_REVERSE_FREEFALL_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL_STEEP, - /* RIDE_TYPE_LIFT */ TRACK_TOWER_BASE, - /* RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER */ TRACK_FLAT | TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_LIFT_HILL_STEEP | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_LONG | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_SLOPE_VERTICAL, + /* RIDE_TYPE_REVERSE_FREEFALL_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL_STEEP), + /* RIDE_TYPE_LIFT */ (1UL << TRACK_TOWER_BASE), + /* RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER */ (1UL << TRACK_FLAT) | (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_LIFT_HILL_STEEP) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_LONG) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_SLOPE_VERTICAL), /* RIDE_TYPE_CASH_MACHINE */ 0, /* RIDE_TYPE_TWIST */ 0, /* RIDE_TYPE_HAUNTED_HOUSE */ 0, /* RIDE_TYPE_FIRST_AID */ 0, /* RIDE_TYPE_CIRCUS_SHOW */ 0, - /* RIDE_TYPE_GHOST_TRAIN */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_TWISTER_ROLLER_COASTER */ TRACK_FLAT | TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HALF_LOOP | TRACK_CORKSCREW | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_SLOPE_VERTICAL | TRACK_BARREL_ROLL | TRACK_POWERED_LIFT | TRACK_HALF_LOOP_LARGE, - /* RIDE_TYPE_WOODEN_ROLLER_COASTER */ TRACK_FLAT | TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_WATER_SPLASH, - /* RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_BRAKES, - /* RIDE_TYPE_WILD_MOUSE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_LIFT_HILL_STEEP | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_LONG | TRACK_SLOPE_CURVE | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HALF_LOOP | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_SLOPE_VERTICAL, - /* RIDE_TYPE_38 */ TRACK_STRAIGHT | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_TWIST | TRACK_CORKSCREW | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_SLOPE_VERTICAL, - /* RIDE_TYPE_FLYING_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_3A */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_TWIST | TRACK_HELIX_LARGE | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_VIRGINIA_REEL */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL, - /* RIDE_TYPE_SPLASH_BOATS */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_S_BEND | TRACK_CURVE, - /* RIDE_TYPE_MINI_HELICOPTERS */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL, - /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_SUSPENDED_MONORAIL */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE, - /* RIDE_TYPE_40 */ TRACK_STRAIGHT | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_TWIST | TRACK_HELIX_LARGE | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_REVERSER_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_BRAKES, - /* RIDE_TYPE_HEARTLINE_TWISTER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_LIFT_HILL_STEEP | TRACK_SLOPE | TRACK_SLOPE_STEEP, - /* RIDE_TYPE_MINI_GOLF */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL, - /* RIDE_TYPE_GIGA_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_ROTO_DROP */ TRACK_TOWER_BASE, + /* RIDE_TYPE_GHOST_TRAIN */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_TWISTER_ROLLER_COASTER */ (1UL << TRACK_FLAT) | (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HALF_LOOP) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_SLOPE_VERTICAL) | (1UL << TRACK_BARREL_ROLL) | (1UL << TRACK_POWERED_LIFT) | (1UL << TRACK_HALF_LOOP_LARGE), + /* RIDE_TYPE_WOODEN_ROLLER_COASTER */ (1UL << TRACK_FLAT) | (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_WATER_SPLASH), + /* RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_WILD_MOUSE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_LIFT_HILL_STEEP) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_LONG) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HALF_LOOP) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_SLOPE_VERTICAL), + /* RIDE_TYPE_38 */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_TWIST) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_SLOPE_VERTICAL), + /* RIDE_TYPE_FLYING_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_3A */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_TWIST) | (1UL << TRACK_HELIX_LARGE) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_VIRGINIA_REEL */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL), + /* RIDE_TYPE_SPLASH_BOATS */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_MINI_HELICOPTERS */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL), + /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_SUSPENDED_MONORAIL */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_40 */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_TWIST) | (1UL << TRACK_HELIX_LARGE) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_REVERSER_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_HEARTLINE_TWISTER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_LIFT_HILL_STEEP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP), + /* RIDE_TYPE_MINI_GOLF */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL), + /* RIDE_TYPE_GIGA_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_ROTO_DROP */ (1UL << TRACK_TOWER_BASE), /* RIDE_TYPE_FLYING_SAUCERS */ 0, /* RIDE_TYPE_CROOKED_HOUSE */ 0, - /* RIDE_TYPE_MONORAIL_CYCLES */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE, - /* RIDE_TYPE_COMPACT_INVERTED_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_TWIST | TRACK_HALF_LOOP | TRACK_CORKSCREW | TRACK_HELIX_LARGE | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_SLOPE_VERTICAL, - /* RIDE_TYPE_WATER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL_STEEP | TRACK_LIFT_HILL_CURVE | TRACK_FLAT_ROLL_BANKING | TRACK_CURVE | TRACK_BRAKES, - /* RIDE_TYPE_INVERTED_HAIRPIN_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_LIFT_HILL_STEEP | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_LONG | TRACK_SLOPE_CURVE | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL | TRACK_BRAKES, + /* RIDE_TYPE_MONORAIL_CYCLES */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE), + /* RIDE_TYPE_COMPACT_INVERTED_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_TWIST) | (1UL << TRACK_HALF_LOOP) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_HELIX_LARGE) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_SLOPE_VERTICAL), + /* RIDE_TYPE_WATER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL_STEEP) | (1UL << TRACK_LIFT_HILL_CURVE) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_CURVE) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_INVERTED_HAIRPIN_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_LIFT_HILL_STEEP) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_LONG) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_BRAKES), /* RIDE_TYPE_MAGIC_CARPET */ 0, - /* RIDE_TYPE_SUBMARINE_RIDE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL, - /* RIDE_TYPE_RIVER_RAFTS */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_S_BEND | TRACK_CURVE, + /* RIDE_TYPE_SUBMARINE_RIDE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL), + /* RIDE_TYPE_RIVER_RAFTS */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE), /* RIDE_TYPE_50 */ 0, /* RIDE_TYPE_ENTERPRISE */ 0, /* RIDE_TYPE_52 */ 0, /* RIDE_TYPE_53 */ 0, /* RIDE_TYPE_54 */ 0, - /* RIDE_TYPE_55 */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_INVERTED_IMPULSE_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_VERTICAL, - /* RIDE_TYPE_MINI_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_MINE_RIDE */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_HELIX_SMALL | TRACK_ON_RIDE_PHOTO, - /* RIDE_TYPE_59 */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_LIFT_HILL | TRACK_FLAT_ROLL_BANKING | TRACK_SLOPE | TRACK_CURVE_VERY_SMALL | TRACK_CURVE_SMALL | TRACK_BRAKES, - /* RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER */ TRACK_STRAIGHT | TRACK_STATION_END | TRACK_FLAT_ROLL_BANKING | TRACK_VERTICAL_LOOP | TRACK_SLOPE | TRACK_SLOPE_STEEP | TRACK_SLOPE_CURVE | TRACK_SLOPE_CURVE_STEEP | TRACK_S_BEND | TRACK_CURVE_SMALL | TRACK_CURVE | TRACK_TWIST | TRACK_CORKSCREW | TRACK_HELIX_SMALL | TRACK_BRAKES | TRACK_ON_RIDE_PHOTO | TRACK_SLOPE_VERTICAL + /* RIDE_TYPE_55 */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_INVERTED_IMPULSE_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_VERTICAL), + /* RIDE_TYPE_MINI_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_MINE_RIDE */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_ON_RIDE_PHOTO), + /* RIDE_TYPE_59 */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_LIFT_HILL) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_SLOPE) | (1UL << TRACK_CURVE_VERY_SMALL) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_BRAKES), + /* RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER */ (1UL << TRACK_STRAIGHT) | (1UL << TRACK_STATION_END) | (1UL << TRACK_FLAT_ROLL_BANKING) | (1UL << TRACK_VERTICAL_LOOP) | (1UL << TRACK_SLOPE) | (1UL << TRACK_SLOPE_STEEP) | (1UL << TRACK_SLOPE_CURVE) | (1UL << TRACK_SLOPE_CURVE_STEEP) | (1UL << TRACK_S_BEND) | (1UL << TRACK_CURVE_SMALL) | (1UL << TRACK_CURVE) | (1UL << TRACK_TWIST) | (1UL << TRACK_CORKSCREW) | (1UL << TRACK_HELIX_SMALL) | (1UL << TRACK_BRAKES) | (1UL << TRACK_ON_RIDE_PHOTO) | (1UL << TRACK_SLOPE_VERTICAL) }; #define TRACK_BLOCK_END { 255, 255, 255, 255, 255, 255, 255 } diff --git a/src/scenario.h b/src/scenario.h index fba0317e71..0f99318ea1 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -156,10 +156,10 @@ typedef struct { uint8 guest_count_change_modifier; uint8 current_research_level; uint8 pad_01357400[4]; - uint32 ride_types_researched[8]; - uint32 ride_entries_researched[8]; - uint32 dword_01357444[128]; - uint32 dword_01357644[128]; + uint32 researched_ride_types[8]; + uint32 researched_ride_entries[8]; + uint32 researched_track_types_a[128]; + uint32 researched_track_types_b[128]; // SC6[7] uint16 guests_in_park; diff --git a/src/windows/editor_bottom_toolbar.c b/src/windows/editor_bottom_toolbar.c index 540652f340..bd86c977db 100644 --- a/src/windows/editor_bottom_toolbar.c +++ b/src/windows/editor_bottom_toolbar.c @@ -28,6 +28,7 @@ #include "../interface/widget.h" #include "../interface/window.h" #include "../platform/platform.h" +#include "../ride/track_data.h" #include "../title.h" #include "../util/util.h" #include "../world/footpath.h" @@ -238,18 +239,17 @@ bool window_editor_bottom_toolbar_check_object_selection() */ static void sub_66F6E3() { - RCT2_GLOBAL(0x01357404, uint32) = 0xFFFFFFFF; - RCT2_GLOBAL(0x01357408, uint32) = 0xFFFFFFFF; - RCT2_GLOBAL(0x0135740C, uint32) = 0xFFFFFFFF; - RCT2_GLOBAL(0x01357410, uint32) = 0xFFFFFFFF; + for (int i = 0; i < 4; i++) { + gResearchedRideTypes[i] = 0xFFFFFFFF; + } for (int i = 0; i < 128; i++) { - RCT2_ADDRESS(0x01357444, uint32)[i] = RCT2_ADDRESS(0x0097C468, uint32)[i]; - RCT2_ADDRESS(0x01357644, uint32)[i] = RCT2_ADDRESS(0x0097C5D4, uint32)[i]; + gResearchedTrackTypesA[i] = (RideTypePossibleTrackConfigurations[i] ) & 0xFFFFFFFFULL; + gResearchedTrackTypesB[i] = (RideTypePossibleTrackConfigurations[i] >> 32ULL) & 0xFFFFFFFFULL; } for (int i = 0; i < 8; i++) { - RCT2_ADDRESS(0x01357424, uint32)[i] = 0xFFFFFFFF; + gResearchedRideEntries[i] = 0xFFFFFFFF; } window_new_ride_open(); diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index f293daaa2e..5940341249 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -29,6 +29,7 @@ #include "../ride/ride.h" #include "../ride/ride_data.h" #include "../ride/track.h" +#include "../ride/track_data.h" #include "../ride/track_design.h" #include "../scenario.h" #include "../util/util.h" @@ -1933,18 +1934,17 @@ static int get_object_from_object_selection(uint8 object_type, int y, uint8 *obj */ static void window_editor_object_selection_manage_tracks() { - RCT2_GLOBAL(0x1357404, sint32) = -1; - RCT2_GLOBAL(0x1357408, sint32) = -1; - RCT2_GLOBAL(0x135740C, sint32) = -1; - RCT2_GLOBAL(0x1357410, sint32) = -1; - - for (int i = 0; i < 128; ++i){ - RCT2_ADDRESS(0x1357444, uint32)[i] = RCT2_ADDRESS(0x97C468, uint32)[i]; - RCT2_ADDRESS(0x1357644, uint32)[i] = RCT2_ADDRESS(0x97C5D4, uint32)[i]; + for (int i = 0; i < 4; i++) { + gResearchedRideTypes[i] = 0xFFFFFFFF; } - for (int i = 0; i < 8; ++i){ - RCT2_ADDRESS(0x1357424, sint32)[i] = -1; + for (int i = 0; i < 128; i++) { + gResearchedTrackTypesA[i] = (RideTypePossibleTrackConfigurations[i] ) & 0xFFFFFFFFULL; + gResearchedTrackTypesB[i] = (RideTypePossibleTrackConfigurations[i] >> 32ULL) & 0xFFFFFFFFULL; + } + + for (int i = 0; i < 8; i++) { + gResearchedRideEntries[i] = 0xFFFFFFFF; } RCT2_GLOBAL(0x141F570, uint8) = 7; diff --git a/src/windows/new_ride.c b/src/windows/new_ride.c index e9305e55ca..cc88ecdc70 100644 --- a/src/windows/new_ride.c +++ b/src/windows/new_ride.c @@ -285,13 +285,11 @@ void window_new_ride_init_vars() { */ static void window_new_ride_populate_list() { - int i, quadIndex, bitIndex; - uint8 currentCategory = _window_new_ride_current_tab; ride_list_item *nextListItem = (ride_list_item*)0x00F43523; // For each ride type in the view order list - for (i = 0; i < countof(RideTypeViewOrder); i++) { + for (int i = 0; i < countof(RideTypeViewOrder); i++) { uint8 rideType = RideTypeViewOrder[i]; if (rideType == RIDE_TYPE_NULL) continue; @@ -304,9 +302,7 @@ static void window_new_ride_populate_list() char preferredVehicleName[9]; strcpy(preferredVehicleName," "); - quadIndex = rideType >> 5; - bitIndex = rideType & 0x1F; - if (RCT2_ADDRESS(0x01357404, uint32)[quadIndex] & (1u << bitIndex)) { + if (ride_type_is_invented(rideType)) { int dh = 0; uint8 *rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(rideType); @@ -317,10 +313,8 @@ static void window_new_ride_populate_list() memcpy(rideEntryName,object_entry_groups[OBJECT_TYPE_RIDE].entries[rideEntryIndex].name,8); rideEntryName[8]=0; - quadIndex = rideEntryIndex >> 5; - bitIndex = rideEntryIndex & 0x1F; // Skip if vehicle type is not invented yet - if (!(RCT2_ADDRESS(0x01357424, uint32)[quadIndex] & (1u << bitIndex))) + if (!ride_entry_is_invented(rideEntryIndex)) continue; // Ride entries diff --git a/src/windows/ride.c b/src/windows/ride.c index a96b869aae..b3c1c30ffe 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -1234,7 +1234,7 @@ rct_window *window_ride_open(int rideIndex) rct_window *w; rct_ride *ride; uint8 *rideEntryIndexPtr; - int numSubTypes, quadIndex, bitIndex; + int numSubTypes; w = window_create_auto_pos(316, 207, window_ride_page_events[0], WC_RIDE, WF_10 | WF_RESIZABLE); w->widgets = window_ride_page_widgets[0]; @@ -1259,12 +1259,9 @@ rct_window *window_ride_open(int rideIndex) numSubTypes = 0; rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(ride->type); for (; *rideEntryIndexPtr != 0xFF; rideEntryIndexPtr++) { - quadIndex = *rideEntryIndexPtr >> 5; - bitIndex = *rideEntryIndexPtr & 0x1F; - if (!(RCT2_ADDRESS(0x01357424, uint32)[quadIndex] & (1 << bitIndex))) - continue; - - numSubTypes++; + if (ride_entry_is_invented(*rideEntryIndexPtr)) { + numSubTypes++; + } } var_496(w) = numSubTypes; return w; @@ -2175,13 +2172,13 @@ static rct_string_id window_ride_get_status_vehicle(rct_window *w, void *argumen vehicle = &(g_sprite_list[vehicleSpriteIndex].vehicle); if (vehicle->status != VEHICLE_STATUS_CRASHING && vehicle->status != VEHICLE_STATUS_CRASHED) { int trackType = vehicle->track_type >> 2; - if (trackType == 216 || + if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_CABLE_LIFT_HILL || trackType == TRACK_ELEM_25_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_60_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT) { - if ((RCT2_ADDRESS(0x01357644, uint32)[ride->type] & 0x40) && vehicle->velocity == 0) { + if (track_type_is_invented(ride->type, TRACK_BLOCK_BRAKES) && vehicle->velocity == 0) { RCT2_GLOBAL((int)arguments + 0, uint16) = STR_STOPPED_BY_BLOCK_BRAKES; return 1191; } @@ -2381,7 +2378,7 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi rct_widget *dropdownWidget = widget - 1; rct_ride *ride; rct_ride_entry *rideEntry, *currentRideEntry; - int numItems, quadIndex, bitIndex, rideEntryIndex, selectedIndex, rideTypeIterator, rideTypeIteratorMax; + int numItems, rideEntryIndex, selectedIndex, rideTypeIterator, rideTypeIteratorMax; uint8 *rideEntryIndexPtr; bool selectionShouldBeExpanded; @@ -2421,10 +2418,8 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi if ((currentRideEntry->flags & (RIDE_ENTRY_FLAG_SEPARATE_RIDE | RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME)) && !(gConfigInterface.select_by_track_type || selectionShouldBeExpanded)) continue; - quadIndex = rideEntryIndex >> 5; - bitIndex = rideEntryIndex & 0x1F; // Skip if vehicle type is not invented yet - if (!(RCT2_ADDRESS(0x01357424, uint32)[quadIndex] & (1u << bitIndex))) + if (!ride_entry_is_invented(rideEntryIndex)) continue; if (ride->subtype == rideEntryIndex) @@ -3087,7 +3082,7 @@ static void window_ride_operating_invalidate(rct_window *w) w->pressed_widgets &= ~0x44700000; // Lift hill speed - if ((rideEntry->enabledTrackPiecesA & RCT2_ADDRESS(0x01357444, uint32)[ride->type]) & 8) { + if ((rideEntry->enabledTrackPiecesA & (1UL << TRACK_LIFT_HILL)) && track_type_is_invented(ride->type, TRACK_LIFT_HILL)) { window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_LABEL].type = WWT_24; window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED].type = WWT_SPINNER; window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_INCREASE].type = WWT_DROPDOWN_BUTTON; diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 549ad0ba67..c6c0d3c8df 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -2664,8 +2664,8 @@ static void window_ride_construction_update_enabled_track_pieces() return; int rideType = _currentTrackCovered & 2 ? RCT2_ADDRESS(0x0097D4F5, uint8)[ride->type * 8] : ride->type; - _enabledRidePieces.a = rideEntry->enabledTrackPiecesA & RCT2_ADDRESS(0x01357444, uint32)[rideType]; - _enabledRidePieces.b = rideEntry->enabledTrackPiecesB & RCT2_ADDRESS(0x01357644, uint32)[rideType]; + _enabledRidePieces.a = rideEntry->enabledTrackPiecesA & gResearchedTrackTypesA[rideType]; + _enabledRidePieces.b = rideEntry->enabledTrackPiecesB & gResearchedTrackTypesB[rideType]; } /** diff --git a/src/world/park.c b/src/world/park.c index a8e7024be6..36de9d75fe 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -98,7 +98,7 @@ void park_init() finance_init(); for (i = 0; i < 2; i++) - RCT2_ADDRESS(0x01357404, uint32)[i] = 0; + gResearchedRideTypes[i] = 0; for (i = 0; i < 56; i++) RCT2_ADDRESS(0x01357BD0, sint32)[i] = -1;