add globals for researched things, cleanup

This commit is contained in:
Ted John 2016-05-10 00:00:59 +01:00
parent b5c0913b76
commit aa929e1593
15 changed files with 183 additions and 134 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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 }

View File

@ -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;

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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];
}
/**

View File

@ -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;