Merge pull request #11457 from Gymnasiast/refactor/rtd-forever

More RTD + cleanup
This commit is contained in:
Michael Steenbeek 2020-04-27 15:11:54 +02:00 committed by GitHub
commit bcabc1d807
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
101 changed files with 374 additions and 309 deletions

View File

@ -108,8 +108,8 @@ enum WINDOW_CHEATS_WIDGET_IDX
WIDX_GUEST_NAUSEA_MIN,
WIDX_GUEST_NAUSEA_TOLERANCE_MAX,
WIDX_GUEST_NAUSEA_TOLERANCE_MIN,
WIDX_GUEST_BATHROOM_MAX,
WIDX_GUEST_BATHROOM_MIN,
WIDX_GUEST_TOILET_MAX,
WIDX_GUEST_TOILET_MIN,
WIDX_GUEST_RIDE_INTENSITY_MORE_THAN_1,
WIDX_GUEST_RIDE_INTENSITY_LESS_THAN_15,
WIDX_GUEST_IGNORE_RIDE_INTENSITY,
@ -248,8 +248,8 @@ static rct_widget window_cheats_guests_widgets[] =
{ WWT_BUTTON, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(5), HPL(5), STR_MIN, STR_NONE }, // nausea min
{ WWT_BUTTON, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(6), HPL(6), STR_MAX, STR_NONE }, // nausea tolerance max
{ WWT_BUTTON, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(6), HPL(6), STR_MIN, STR_NONE }, // nausea tolerance min
{ WWT_BUTTON, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(7), HPL(7), STR_MAX, STR_NONE }, // bathroom max
{ WWT_BUTTON, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(7), HPL(7), STR_MIN, STR_NONE }, // bathroom min
{ WWT_BUTTON, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(7), HPL(7), STR_MAX, STR_NONE }, // toilet max
{ WWT_BUTTON, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(7), HPL(7), STR_MIN, STR_NONE }, // toilet min
{ WWT_BUTTON, 1, XPL(1), WPL(1), YPL(9), HPL(9), STR_CHEAT_MORE_THAN_1, STR_NONE }, // ride intensity > 1
{ WWT_BUTTON, 1, XPL(0), WPL(0), YPL(9), HPL(9), STR_CHEAT_LESS_THAN_15, STR_NONE }, // ride intensity < 15
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(10), OHPL(10), STR_CHEAT_IGNORE_INTENSITY, STR_CHEAT_IGNORE_INTENSITY_TIP }, // guests ignore intensity
@ -522,8 +522,8 @@ static uint64_t window_cheats_page_enabled_widgets[] = {
(1ULL << WIDX_GUEST_NAUSEA_MIN) |
(1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MAX) |
(1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MIN) |
(1ULL << WIDX_GUEST_BATHROOM_MAX) |
(1ULL << WIDX_GUEST_BATHROOM_MIN) |
(1ULL << WIDX_GUEST_TOILET_MAX) |
(1ULL << WIDX_GUEST_TOILET_MIN) |
(1ULL << WIDX_GUEST_RIDE_INTENSITY_MORE_THAN_1) |
(1ULL << WIDX_GUEST_RIDE_INTENSITY_LESS_THAN_15) |
(1ULL << WIDX_GUEST_IGNORE_RIDE_INTENSITY) |
@ -872,11 +872,11 @@ static void window_cheats_guests_mouseup(rct_window* w, rct_widgetindex widgetIn
case WIDX_GUEST_NAUSEA_TOLERANCE_MIN:
CheatsSet(CheatType::SetGuestParameter, GUEST_PARAMETER_NAUSEA_TOLERANCE, PEEP_NAUSEA_TOLERANCE_NONE);
break;
case WIDX_GUEST_BATHROOM_MAX:
CheatsSet(CheatType::SetGuestParameter, GUEST_PARAMETER_BATHROOM, PEEP_MAX_BATHROOM);
case WIDX_GUEST_TOILET_MAX:
CheatsSet(CheatType::SetGuestParameter, GUEST_PARAMETER_TOILET, PEEP_MAX_TOILET);
break;
case WIDX_GUEST_BATHROOM_MIN:
CheatsSet(CheatType::SetGuestParameter, GUEST_PARAMETER_BATHROOM, 0);
case WIDX_GUEST_TOILET_MIN:
CheatsSet(CheatType::SetGuestParameter, GUEST_PARAMETER_TOILET, 0);
break;
case WIDX_GUEST_RIDE_INTENSITY_MORE_THAN_1:
CheatsSet(CheatType::SetGuestParameter, GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY, 1);
@ -1250,8 +1250,7 @@ static void window_cheats_paint(rct_window* w, rct_drawpixelinfo* dpi)
dpi, STR_CHEAT_GUEST_NAUSEA_TOLERANCE, nullptr, COLOUR_BLACK, w->windowPos.x + XPL(0) + TXTO,
w->windowPos.y + YPL(6) + TXTO);
gfx_draw_string_left(
dpi, STR_CHEAT_GUEST_BATHROOM, nullptr, COLOUR_BLACK, w->windowPos.x + XPL(0) + TXTO,
w->windowPos.y + YPL(7) + TXTO);
dpi, STR_CHEAT_GUEST_TOILET, nullptr, COLOUR_BLACK, w->windowPos.x + XPL(0) + TXTO, w->windowPos.y + YPL(7) + TXTO);
gfx_draw_string_left(
dpi, STR_CHEAT_GUEST_PREFERRED_INTENSITY, nullptr, COLOUR_BLACK, w->windowPos.x + XPL(0) + TXTO,
w->windowPos.y + YPL(8) + TXTO);

View File

@ -3324,7 +3324,7 @@ static void window_ride_mode_tweak_increase(rct_window* w)
maxValue = 255;
}
uint8_t increment = ride->mode == RIDE_MODE_BUMPERCAR ? 10 : 1;
uint8_t increment = ride->mode == RIDE_MODE_DODGEMS ? 10 : 1;
set_operating_setting(
w->number, RideSetSetting::Operation, std::clamp<int16_t>(ride->operation_option + increment, minValue, maxValue));
@ -3347,7 +3347,7 @@ static void window_ride_mode_tweak_decrease(rct_window* w)
maxValue = 255;
}
uint8_t decrement = ride->mode == RIDE_MODE_BUMPERCAR ? 10 : 1;
uint8_t decrement = ride->mode == RIDE_MODE_DODGEMS ? 10 : 1;
set_operating_setting(
w->number, RideSetSetting::Operation, std::clamp<int16_t>(ride->operation_option - decrement, minValue, maxValue));
@ -3360,43 +3360,39 @@ static void window_ride_mode_tweak_decrease(rct_window* w)
static void window_ride_mode_dropdown(rct_window* w, rct_widget* widget)
{
rct_widget* dropdownWidget;
const uint8_t *availableModes, *mode;
int32_t i, numAvailableModes;
dropdownWidget = widget - 1;
auto ride = get_ride(w->number);
if (ride == nullptr)
return;
// Seek to available modes for this ride
availableModes = ride_seek_available_modes(ride);
// Count number of available modes
mode = availableModes;
numAvailableModes = -1;
do
{
numAvailableModes++;
} while (*(mode++) != 255);
auto availableModes = ride->GetAvailableModes();
// Create dropdown list
for (i = 0; i < numAvailableModes; i++)
auto numAvailableModes = 0;
auto checkedIndex = -1;
for (auto i = 0; i < RIDE_MODE_COUNT; i++)
{
gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsArgs[i] = RideModeNames[availableModes[i]];
if (availableModes & (1ULL << i))
{
gDropdownItemsFormat[numAvailableModes] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsArgs[numAvailableModes] = RideModeNames[i];
if (ride->mode == i)
checkedIndex = numAvailableModes;
numAvailableModes++;
}
}
window_dropdown_show_text_custom_width(
w->windowPos.x + dropdownWidget->left, w->windowPos.y + dropdownWidget->top,
dropdownWidget->bottom - dropdownWidget->top + 1, w->colours[1], 0, DROPDOWN_FLAG_STAY_OPEN, numAvailableModes,
widget->right - dropdownWidget->left);
// Set checked item
for (i = 0; i < numAvailableModes; i++)
if (checkedIndex != -1)
{
if (ride->mode == availableModes[i])
{
dropdown_set_checked(i, true);
}
dropdown_set_checked(checkedIndex, true);
}
}
@ -3581,10 +3577,23 @@ static void window_ride_operating_dropdown(rct_window* w, rct_widgetindex widget
{
case WIDX_MODE_DROPDOWN:
{
// Seek to available modes for this ride
auto availableModes = ride_seek_available_modes(ride);
if (availableModes != nullptr)
set_operating_setting(w->number, RideSetSetting::Mode, availableModes[dropdownIndex]);
uint8_t rideMode = RIDE_MODE_NULL;
auto availableModes = ride->GetAvailableModes();
auto modeInDropdownIndex = -1;
for (uint8_t rideModeIndex = 0; rideModeIndex < RIDE_MODE_COUNT; rideModeIndex++)
{
if (availableModes & (1ULL << rideModeIndex))
{
modeInDropdownIndex++;
if (modeInDropdownIndex == dropdownIndex)
{
rideMode = rideModeIndex;
break;
}
}
}
if (rideMode != RIDE_MODE_NULL)
set_operating_setting(w->number, RideSetSetting::Mode, rideMode);
break;
}
case WIDX_LOAD_DROPDOWN:
@ -3792,7 +3801,7 @@ static void window_ride_operating_invalidate(rct_window* w)
caption = STR_NUMBER_OF_LAPS;
tooltip = STR_NUMBER_OF_LAPS_TIP;
break;
case RIDE_MODE_BUMPERCAR:
case RIDE_MODE_DODGEMS:
format = STR_RIDE_MODE_TIME_LIMIT_VALUE;
caption = STR_TIME_LIMIT;
tooltip = STR_TIME_LIMIT_TIP;

View File

@ -563,7 +563,7 @@ rct_window* window_ride_construction_open()
_currentBrakeSpeed2 = 8;
_currentSeatRotationAngle = 4;
_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | 0x100;
_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackLiftHill = 0;
@ -712,7 +712,7 @@ static void window_ride_construction_resize(rct_window* w)
uint64_t disabledWidgets = 0;
if (_currentTrackCurve & 0x100)
if (_currentTrackCurve & RideConstructionSpecialPieceSelected)
{
disabledWidgets |= (1ULL << WIDX_SLOPE_GROUPBOX) | (1ULL << WIDX_BANKING_GROUPBOX) | (1ULL << WIDX_SLOPE_DOWN_STEEP)
| (1ULL << WIDX_SLOPE_DOWN) | (1ULL << WIDX_LEVEL) | (1ULL << WIDX_SLOPE_UP) | (1ULL << WIDX_SLOPE_UP_STEEP)
@ -773,7 +773,7 @@ static void window_ride_construction_resize(rct_window* w)
}
if (!is_track_enabled(TRACK_SLOPE) && !is_track_enabled(TRACK_SLOPE_STEEP))
{
if (rideType != RIDE_TYPE_REVERSE_FREEFALL_COASTER && rideType != RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER)
if (!RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
// Disable all slopes
disabledWidgets |= (1ULL << WIDX_SLOPE_GROUPBOX) | (1ULL << WIDX_SLOPE_DOWN_STEEP) | (1ULL << WIDX_SLOPE_DOWN)
@ -1321,28 +1321,28 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL && _currentTrackBankEnd == TRACK_BANK_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL && _currentTrackBankEnd == TRACK_BANK_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
@ -1352,14 +1352,15 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN
| RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
@ -1371,14 +1372,14 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_currentTrackCurve == TRACK_CURVE_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
@ -1438,7 +1439,7 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT && _currentTrackCurve == TRACK_CURVE_NONE)
{
_currentTrackCurve = TRACK_ELEM_REVERSE_FREEFALL_SLOPE | 0x100;
_currentTrackCurve = TRACK_ELEM_REVERSE_FREEFALL_SLOPE | RideConstructionSpecialPieceSelected;
window_ride_construction_update_active_elements();
}
}
@ -1453,28 +1454,28 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL && _currentTrackBankEnd == TRACK_BANK_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL && _currentTrackBankEnd == TRACK_BANK_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
@ -1484,14 +1485,14 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
@ -1503,14 +1504,14 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
if (_currentTrackCurve == TRACK_CURVE_LEFT)
{
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP | 0x100;
_currentTrackCurve = TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
}
else if (_currentTrackCurve == TRACK_CURVE_RIGHT)
{
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP | 0x100;
_currentTrackCurve = TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY32_UNDEFINED;
window_ride_construction_update_active_elements();
break;
@ -1672,7 +1673,7 @@ static void window_ride_construction_dropdown(rct_window* w, rct_widgetindex wid
_currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED;
break;
}
_currentTrackCurve = trackPiece | 0x100;
_currentTrackCurve = trackPiece | RideConstructionSpecialPieceSelected;
window_ride_construction_update_active_elements();
}
static void RideConstructPlacedForwardGameActionCallback(const GameAction* ga, const TrackPlaceActionResult* result);
@ -1853,10 +1854,10 @@ static void window_ride_construction_construct(rct_window* w)
viewport_set_visibility(1);
}
if ((_currentTrackCurve >= (TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL | 0x100)
&& _currentTrackCurve <= (TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE | 0x100))
|| (_currentTrackCurve >= (TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP | 0x100)
&& _currentTrackCurve <= (TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN | 0x100))
if ((_currentTrackCurve >= (TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL | RideConstructionSpecialPieceSelected)
&& _currentTrackCurve <= (TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE | RideConstructionSpecialPieceSelected))
|| (_currentTrackCurve >= (TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP | RideConstructionSpecialPieceSelected)
&& _currentTrackCurve <= (TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN | RideConstructionSpecialPieceSelected))
|| (_currentTrackSlopeEnd != TRACK_SLOPE_NONE))
{
viewport_set_visibility(2);
@ -2068,10 +2069,10 @@ static void window_ride_construction_update(rct_window* w)
switch (_currentTrackCurve)
{
case TRACK_ELEM_SPINNING_TUNNEL | 0x100:
case TRACK_ELEM_WHIRLPOOL | 0x100:
case TRACK_ELEM_RAPIDS | 0x100:
case TRACK_ELEM_WATERFALL | 0x100:
case TRACK_ELEM_SPINNING_TUNNEL | RideConstructionSpecialPieceSelected:
case TRACK_ELEM_WHIRLPOOL | RideConstructionSpecialPieceSelected:
case TRACK_ELEM_RAPIDS | RideConstructionSpecialPieceSelected:
case TRACK_ELEM_WATERFALL | RideConstructionSpecialPieceSelected:
widget_invalidate(w, WIDX_CONSTRUCT);
break;
}
@ -2268,7 +2269,7 @@ static void window_ride_construction_invalidate(rct_window* w)
}
rct_string_id stringId = STR_RIDE_CONSTRUCTION_SPECIAL;
if (_currentTrackCurve & 0x100)
if (_currentTrackCurve & RideConstructionSpecialPieceSelected)
{
stringId = RideConfigurationStringIds[_currentTrackCurve & 0xFF];
if (stringId == STR_RAPIDS && ride->type == RIDE_TYPE_CAR_RIDE)
@ -3084,9 +3085,11 @@ static void window_ride_construction_update_widgets(rct_window* w)
window_ride_construction_widgets[WIDX_U_TRACK].type = WWT_EMPTY;
window_ride_construction_widgets[WIDX_O_TRACK].type = WWT_EMPTY;
bool brakesSelected = _selectedTrackType == TRACK_ELEM_BRAKES || _currentTrackCurve == (0x100 | TRACK_ELEM_BRAKES);
bool brakesSelected = _selectedTrackType == TRACK_ELEM_BRAKES
|| _currentTrackCurve == (RideConstructionSpecialPieceSelected | TRACK_ELEM_BRAKES);
_boosterTrackSelected = track_element_is_booster(ride->type, _selectedTrackType)
|| (ride->type != RIDE_TYPE_STEEL_WILD_MOUSE && _currentTrackCurve == (0x100 | TRACK_ELEM_BOOSTER));
|| (ride->type != RIDE_TYPE_STEEL_WILD_MOUSE
&& _currentTrackCurve == (RideConstructionSpecialPieceSelected | TRACK_ELEM_BOOSTER));
if (!brakesSelected && !_boosterTrackSelected)
{
@ -3104,8 +3107,9 @@ static void window_ride_construction_update_widgets(rct_window* w)
window_ride_construction_widgets[WIDX_O_TRACK].image = SPR_RIDE_CONSTRUCTION_WATER_CHANNEL;
window_ride_construction_widgets[WIDX_U_TRACK].tooltip = STR_RIDE_CONSTRUCTION_STANDARD_RC_TRACK_TIP;
window_ride_construction_widgets[WIDX_O_TRACK].tooltip = STR_RIDE_CONSTRUCTION_WATER_CHANNEL_TIP;
if ((_currentTrackCurve < TRACK_CURVE_LEFT_SMALL || _currentTrackCurve == (0x100 | TRACK_ELEM_S_BEND_LEFT)
|| _currentTrackCurve == (0x100 | TRACK_ELEM_S_BEND_RIGHT))
if ((_currentTrackCurve < TRACK_CURVE_LEFT_SMALL
|| _currentTrackCurve == (RideConstructionSpecialPieceSelected | TRACK_ELEM_S_BEND_LEFT)
|| _currentTrackCurve == (RideConstructionSpecialPieceSelected | TRACK_ELEM_S_BEND_RIGHT))
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE)
{
window_ride_construction_widgets[WIDX_BANKING_GROUPBOX].text = STR_RIDE_CONSTRUCTION_TRACK_STYLE;
@ -3171,7 +3175,8 @@ static void window_ride_construction_update_widgets(rct_window* w)
window_ride_construction_widgets[WIDX_SEAT_ROTATION_ANGLE_SPINNER_UP].type = WWT_EMPTY;
window_ride_construction_widgets[WIDX_SEAT_ROTATION_ANGLE_SPINNER_DOWN].type = WWT_EMPTY;
if ((rideType == RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER || rideType == RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT)
&& _selectedTrackType != TRACK_ELEM_BRAKES && _currentTrackCurve != (0x100 | TRACK_ELEM_BRAKES))
&& _selectedTrackType != TRACK_ELEM_BRAKES
&& _currentTrackCurve != (RideConstructionSpecialPieceSelected | TRACK_ELEM_BRAKES))
{
window_ride_construction_widgets[WIDX_SEAT_ROTATION_GROUPBOX].type = WWT_GROUPBOX;
window_ride_construction_widgets[WIDX_SEAT_ROTATION_ANGLE_SPINNER].type = WWT_SPINNER;
@ -3378,7 +3383,7 @@ static void window_ride_construction_show_special_track_dropdown(rct_window* w,
trackPieceStringId = STR_BOOSTER;
}
gDropdownItemsFormat[i] = trackPieceStringId;
if ((trackPiece | 0x100) == _currentTrackCurve)
if ((trackPiece | RideConstructionSpecialPieceSelected) == _currentTrackCurve)
{
defaultIndex = i;
}

View File

@ -98,7 +98,7 @@ enum
GUEST_PARAMETER_THIRST,
GUEST_PARAMETER_NAUSEA,
GUEST_PARAMETER_NAUSEA_TOLERANCE,
GUEST_PARAMETER_BATHROOM,
GUEST_PARAMETER_TOILET,
GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY
};

View File

@ -255,17 +255,7 @@ public:
private:
bool ride_is_mode_valid(Ride * ride) const
{
const uint8_t* availableModes = ride_seek_available_modes(ride);
for (; *availableModes != 0xFF; availableModes++)
{
if (*availableModes == _value)
{
return true;
}
}
return false;
return RideTypeDescriptors[ride->type].RideModes & (1ULL << _value);
}
bool ride_is_valid_lift_hill_speed(Ride * ride) const
@ -303,7 +293,7 @@ private:
return STR_CANT_CHANGE_SPEED;
case RIDE_MODE_RACE:
return STR_CANT_CHANGE_NUMBER_OF_LAPS;
case RIDE_MODE_BUMPERCAR:
case RIDE_MODE_DODGEMS:
return STR_CANT_CHANGE_TIME_LIMIT;
case RIDE_MODE_SWING:
return STR_CANT_CHANGE_NUMBER_OF_SWINGS;

View File

@ -333,9 +333,9 @@ private:
case GUEST_PARAMETER_NAUSEA_TOLERANCE:
return { { GUEST_PARAMETER_HAPPINESS, GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY },
{ PEEP_NAUSEA_TOLERANCE_NONE, PEEP_NAUSEA_TOLERANCE_HIGH } };
case GUEST_PARAMETER_BATHROOM:
case GUEST_PARAMETER_TOILET:
return { { GUEST_PARAMETER_HAPPINESS, GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY },
{ 0, PEEP_MAX_BATHROOM } };
{ 0, PEEP_MAX_TOILET } };
case GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY:
return { { GUEST_PARAMETER_HAPPINESS, GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY }, { 0, 255 } };
default:
@ -601,7 +601,7 @@ private:
case GUEST_PARAMETER_NAUSEA_TOLERANCE:
peep->nausea_tolerance = value;
break;
case GUEST_PARAMETER_BATHROOM:
case GUEST_PARAMETER_TOILET:
peep->toilet = value;
break;
case GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY:

View File

@ -120,7 +120,7 @@ const rct_string_id PeepThoughts[] = {
STR_PEEP_THOUGHT_TYPE_TIRED,
STR_PEEP_THOUGHT_TYPE_HUNGRY,
STR_PEEP_THOUGHT_TYPE_THIRSTY,
STR_PEEP_THOUGHT_TYPE_BATHROOM,
STR_PEEP_THOUGHT_TYPE_TOILET,
STR_PEEP_THOUGHT_TYPE_CANT_FIND,
STR_PEEP_THOUGHT_TYPE_NOT_PAYING,
STR_PEEP_THOUGHT_TYPE_NOT_WHILE_RAINING,

View File

@ -915,7 +915,7 @@ enum
STR_PEEP_THOUGHT_TYPE_TIRED = 1499,
STR_PEEP_THOUGHT_TYPE_HUNGRY = 1500,
STR_PEEP_THOUGHT_TYPE_THIRSTY = 1501,
STR_PEEP_THOUGHT_TYPE_BATHROOM = 1502,
STR_PEEP_THOUGHT_TYPE_TOILET = 1502,
STR_PEEP_THOUGHT_TYPE_CANT_FIND = 1503,
STR_PEEP_THOUGHT_TYPE_NOT_PAYING = 1504,
STR_PEEP_THOUGHT_TYPE_NOT_WHILE_RAINING = 1505,
@ -2119,7 +2119,7 @@ enum
STR_PEEPS_DISLIKE_VANDALISM = 2808,
STR_PEEPS_ARE_HUNGRY = 2809,
STR_PEEPS_ARE_THIRSTY = 2810,
STR_PEEPS_CANT_FIND_BATHROOM = 2811,
STR_PEEPS_CANT_FIND_TOILET = 2811,
STR_PEEPS_GETTING_LOST_OR_STUCK = 2812,
STR_ENTRANCE_FEE_TOO_HI = 2813,
STR_AWARD_MOST_UNTIDY = 2814,
@ -2841,7 +2841,7 @@ enum
STR_CHEAT_GUEST_THIRST = 5355,
STR_CHEAT_GUEST_NAUSEA = 5356,
STR_CHEAT_GUEST_NAUSEA_TOLERANCE = 5357,
STR_CHEAT_GUEST_BATHROOM = 5358,
STR_CHEAT_GUEST_TOILET = 5358,
STR_CHEAT_REMOVE_ALL_GUESTS = 5359,
STR_CHEAT_REMOVE_ALL_GUESTS_TIP = 5360,
STR_CHEAT_GIVE_ALL_GUESTS = 5361,

View File

@ -418,7 +418,7 @@ static bool award_is_deserved_best_restrooms([[maybe_unused]] int32_t activeAwar
if (peep->outside_of_park != 0)
continue;
if (peep->thoughts[0].freshness <= 5 && peep->thoughts[0].type == PEEP_THOUGHT_TYPE_BATHROOM)
if (peep->thoughts[0].freshness <= 5 && peep->thoughts[0].type == PEEP_THOUGHT_TYPE_TOILET)
guestsWhoNeedRestroom++;
}
return (guestsWhoNeedRestroom <= 16);

View File

@ -283,7 +283,7 @@ static constexpr const PeepThoughtType crowded_thoughts[] = {
PEEP_THOUGHT_TYPE_WATCHED,
PEEP_THOUGHT_TYPE_NOT_HUNGRY,
PEEP_THOUGHT_TYPE_NOT_THIRSTY,
PEEP_THOUGHT_TYPE_BATHROOM,
PEEP_THOUGHT_TYPE_TOILET,
PEEP_THOUGHT_TYPE_NONE,
PEEP_THOUGHT_TYPE_NONE,
};
@ -602,10 +602,10 @@ void Guest::HandleEasterEggName()
peep_flags |= PEEP_FLAGS_HUNGER;
}
peep_flags &= ~PEEP_FLAGS_BATHROOM;
peep_flags &= ~PEEP_FLAGS_TOILET;
if (CheckEasterEggName(EASTEREGG_PEEP_NAME_FRANCES_MCGOWAN))
{
peep_flags |= PEEP_FLAGS_BATHROOM;
peep_flags |= PEEP_FLAGS_TOILET;
}
peep_flags &= ~PEEP_FLAGS_CROWDED;
@ -732,7 +732,7 @@ void Guest::Tick128UpdateGuest(int32_t index)
hunger -= 15;
}
if (peep_flags & PEEP_FLAGS_BATHROOM)
if (peep_flags & PEEP_FLAGS_TOILET)
{
if (toilet <= 180)
toilet += 50;
@ -863,7 +863,7 @@ void Guest::Tick128UpdateGuest(int32_t index)
if (toilet >= 160)
{
possible_thoughts[num_thoughts++] = PEEP_THOUGHT_TYPE_BATHROOM;
possible_thoughts[num_thoughts++] = PEEP_THOUGHT_TYPE_TOILET;
}
if (!(gParkFlags & PARK_FLAGS_NO_MONEY) && cash_in_pocket <= MONEY(9, 00) && happiness >= 105
@ -894,7 +894,7 @@ void Guest::Tick128UpdateGuest(int32_t index)
case PEEP_THOUGHT_TYPE_THIRSTY:
peep_head_for_nearest_ride_with_flags(this, RIDE_TYPE_FLAG_SELLS_DRINKS);
break;
case PEEP_THOUGHT_TYPE_BATHROOM:
case PEEP_THOUGHT_TYPE_TOILET:
peep_head_for_nearest_ride_with_flags(this, RIDE_TYPE_FLAG_IS_TOILET);
break;
case PEEP_THOUGHT_TYPE_RUNNING_OUT:
@ -2270,7 +2270,7 @@ bool Guest::ShouldGoToShop(Ride* ride, bool peepAtShop)
return false;
}
// The amount that peeps are willing to pay to use the Toilets scales with their bathroom stat.
// The amount that peeps are willing to pay to use the Toilets scales with their toilet stat.
// It effectively has a minimum of $0.10 (due to the check above) and a maximum of $0.60.
if (ride_get_price(ride) * 40 > toilet)
{
@ -2557,7 +2557,7 @@ bool Guest::FindVehicleToEnter(Ride* ride, std::vector<uint8_t>& car_array)
{
uint8_t chosen_train = RideStation::NO_TRAIN;
if (ride->mode == RIDE_MODE_BUMPERCAR || ride->mode == RIDE_MODE_RACE)
if (ride->mode == RIDE_MODE_DODGEMS || ride->mode == RIDE_MODE_RACE)
{
if (ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING)
return false;
@ -3285,7 +3285,7 @@ void Guest::StopPurchaseThought(uint8_t ride_type)
thoughtType = PEEP_THOUGHT_TYPE_RUNNING_OUT;
if (ride_type != RIDE_TYPE_CASH_MACHINE)
{
thoughtType = PEEP_THOUGHT_TYPE_BATHROOM;
thoughtType = PEEP_THOUGHT_TYPE_TOILET;
if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_IS_TOILET))
{
return;
@ -6935,7 +6935,7 @@ void Guest::UpdateSpriteType()
if (toilet > 220)
{
SetSpriteType(PEEP_SPRITE_TYPE_REQUIRE_BATHROOM);
SetSpriteType(PEEP_SPRITE_TYPE_REQUIRE_TOILET);
return;
}

View File

@ -1195,7 +1195,7 @@ void peep_problem_warnings_update()
Ride* ride;
uint16_t spriteIndex;
uint32_t hunger_counter = 0, lost_counter = 0, noexit_counter = 0, thirst_counter = 0, litter_counter = 0,
disgust_counter = 0, bathroom_counter = 0, vandalism_counter = 0;
disgust_counter = 0, toilet_counter = 0, vandalism_counter = 0;
uint8_t* warning_throttle = gPeepWarningThrottle;
FOR_ALL_GUESTS (spriteIndex, peep)
@ -1231,15 +1231,15 @@ void peep_problem_warnings_update()
thirst_counter++;
break;
case PEEP_THOUGHT_TYPE_BATHROOM:
case PEEP_THOUGHT_TYPE_TOILET:
if (peep->guest_heading_to_ride_id == 0xFF)
{
bathroom_counter++;
toilet_counter++;
break;
}
ride = get_ride(peep->guest_heading_to_ride_id);
if (ride != nullptr && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_TOILET))
bathroom_counter++;
toilet_counter++;
break;
case PEEP_THOUGHT_TYPE_BAD_LITTER: // 0x1a
@ -1283,12 +1283,12 @@ void peep_problem_warnings_update()
if (warning_throttle[2])
--warning_throttle[2];
else if (bathroom_counter >= PEEP_BATHROOM_WARNING_THRESHOLD && bathroom_counter >= gNumGuestsInPark / 16)
else if (toilet_counter >= PEEP_TOILET_WARNING_THRESHOLD && toilet_counter >= gNumGuestsInPark / 16)
{
warning_throttle[2] = 4;
if (gConfigNotifications.guest_warnings)
{
news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_CANT_FIND_BATHROOM, 22);
news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_CANT_FIND_TOILET, 22);
}
}

View File

@ -26,7 +26,7 @@
#define PEEP_HUNGER_WARNING_THRESHOLD 25
#define PEEP_THIRST_WARNING_THRESHOLD 25
#define PEEP_BATHROOM_WARNING_THRESHOLD 28
#define PEEP_TOILET_WARNING_THRESHOLD 28
#define PEEP_LITTER_WARNING_THRESHOLD 23
#define PEEP_DISGUST_WARNING_THRESHOLD 22
#define PEEP_VANDALISM_WARNING_THRESHOLD 15
@ -38,7 +38,7 @@
#define PEEP_MAX_ENERGY 128
#define PEEP_MAX_ENERGY_TARGET 255 // Oddly, this differs from max energy!
#define PEEP_MAX_HUNGER 255
#define PEEP_MAX_BATHROOM 255
#define PEEP_MAX_TOILET 255
#define PEEP_MAX_NAUSEA 255
#define PEEP_MAX_THIRST 255
@ -80,7 +80,7 @@ enum PeepThoughtType : uint8_t
PEEP_THOUGHT_TYPE_TIRED = 19, // "I'm tired"
PEEP_THOUGHT_TYPE_HUNGRY = 20, // "I'm hungry"
PEEP_THOUGHT_TYPE_THIRSTY = 21, // "I'm thirsty"
PEEP_THOUGHT_TYPE_BATHROOM = 22, // "I need to go to the bathroom"
PEEP_THOUGHT_TYPE_TOILET = 22, // "I need to go to the toilet"
PEEP_THOUGHT_TYPE_CANT_FIND = 23, // "I can't find X"
PEEP_THOUGHT_TYPE_NOT_PAYING = 24, // "I'm not paying that much to use X"
PEEP_THOUGHT_TYPE_NOT_WHILE_RAINING = 25, // "I'm not going on X while it's raining"
@ -362,7 +362,7 @@ enum PeepFlags : uint32_t
PEEP_FLAGS_LITTER = (1 << 9), // Makes the peep throw litter
PEEP_FLAGS_LOST = (1 << 10), // Makes the peep feel lost (animation triggered)
PEEP_FLAGS_HUNGER = (1 << 11), // Makes the peep become hungry quicker
PEEP_FLAGS_BATHROOM = (1 << 12), // Makes the peep want to go to the bathroom
PEEP_FLAGS_TOILET = (1 << 12), // Makes the peep want to go to the toilet
PEEP_FLAGS_CROWDED = (1 << 13), // The peep will start feeling crowded
PEEP_FLAGS_HAPPINESS = (1 << 14), // The peep will start increasing happiness
PEEP_FLAGS_NAUSEA = (1 << 15), // Makes the peep feel sick (e.g. after an extreme ride)
@ -488,7 +488,7 @@ enum PeepSpriteType : uint8_t
PEEP_SPRITE_TYPE_HEAD_DOWN = 26,
PEEP_SPRITE_TYPE_NAUSEOUS = 27,
PEEP_SPRITE_TYPE_VERY_NAUSEOUS = 28,
PEEP_SPRITE_TYPE_REQUIRE_BATHROOM = 29,
PEEP_SPRITE_TYPE_REQUIRE_TOILET = 29,
PEEP_SPRITE_TYPE_HAT = 30,
PEEP_SPRITE_TYPE_HOT_DOG = 31,
PEEP_SPRITE_TYPE_TENTACLE = 32,

View File

@ -501,7 +501,7 @@ enum RCT1_PEEP_SPRITE_TYPE
RCT1_PEEP_SPRITE_TYPE_HEAD_DOWN = 23,
RCT1_PEEP_SPRITE_TYPE_NAUSEOUS = 24,
RCT1_PEEP_SPRITE_TYPE_VERY_NAUSEOUS = 25,
RCT1_PEEP_SPRITE_TYPE_REQUIRE_BATHROOM = 26,
RCT1_PEEP_SPRITE_TYPE_REQUIRE_TOILET = 26,
RCT1_PEEP_SPRITE_TYPE_HAT = 27,
RCT1_PEEP_SPRITE_TYPE_BURGER = 28,
RCT1_PEEP_SPRITE_TYPE_TENTACLE = 29,

View File

@ -96,7 +96,7 @@ namespace RCT1
PEEP_SPRITE_TYPE_HEAD_DOWN, // 0x17
PEEP_SPRITE_TYPE_NAUSEOUS, // 0x18
PEEP_SPRITE_TYPE_VERY_NAUSEOUS, // 0x19
PEEP_SPRITE_TYPE_REQUIRE_BATHROOM, // 0x1A
PEEP_SPRITE_TYPE_REQUIRE_TOILET, // 0x1A
PEEP_SPRITE_TYPE_HAT, // 0x1B
PEEP_SPRITE_TYPE_HOT_DOG, // 0x1C
PEEP_SPRITE_TYPE_TENTACLE, // 0x1D

View File

@ -1361,7 +1361,7 @@ static void ride_construction_reset_current_piece()
if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK) || ride->num_stations == 0)
{
_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | 0x100;
_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackLiftHill = 0;
@ -1437,7 +1437,7 @@ void ride_construction_set_default_next_piece()
{
if (track_element_is_booster(ride->type, trackType))
{
curve = 0x100 | TRACK_ELEM_BOOSTER;
curve = RideConstructionSpecialPieceSelected | TRACK_ELEM_BOOSTER;
}
else
{
@ -1501,7 +1501,7 @@ void ride_construction_set_default_next_piece()
{
if (track_element_is_booster(ride->type, trackType))
{
curve = 0x100 | TRACK_ELEM_BOOSTER;
curve = RideConstructionSpecialPieceSelected | TRACK_ELEM_BOOSTER;
}
else
{
@ -1920,7 +1920,7 @@ int32_t ride_initialise_construction_window(Ride* ride)
if (ride == nullptr)
return 0;
_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | 0x100;
_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackLiftHill = 0;
@ -5498,22 +5498,7 @@ void Ride::StopGuestsQueuing()
uint8_t Ride::GetDefaultMode() const
{
const rct_ride_entry* rideEntry = get_ride_entry(subtype);
const uint8_t* availableModes = RideAvailableModes;
for (int32_t i = 0; i < type; i++)
{
while (*(availableModes++) != RIDE_MODE_NULL)
{
}
}
// Since this only selects a default mode and does not prevent other modes from being used, there is no need
// to check if select-by-track-type or the all-ride-modes cheat have been enabled.
if (rideEntry->flags & RIDE_ENTRY_DISABLE_FIRST_TWO_OPERATING_MODES)
{
availableModes += 2;
}
return availableModes[0];
return GetRideTypeDescriptor().DefaultMode;
}
static bool ride_with_colour_config_exists(uint8_t ride_type, const TrackColour* colours)
@ -7130,29 +7115,6 @@ void ride_reset_all_names()
}
}
const uint8_t* ride_seek_available_modes(Ride* ride)
{
const uint8_t* availableModes;
if (!gCheatsShowAllOperatingModes)
{
availableModes = RideAvailableModes;
for (int32_t i = 0; i < ride->type; i++)
{
while (*(availableModes++) != 255)
{
}
}
}
else
{
availableModes = AllRideModesAvailable;
}
return availableModes;
}
// Gets the approximate value of customers per hour for this ride. Multiplies ride_customers_in_last_5_minutes() by 12.
uint32_t ride_customers_per_hour(const Ride* ride)
{
@ -7820,3 +7782,16 @@ size_t Ride::FormatNameTo(void* argsV) const
return ft.NumBytes();
}
}
uint64_t Ride::GetAvailableModes() const
{
if (gCheatsShowAllOperatingModes)
return AllRideModesAvailable;
return GetRideTypeDescriptor().RideModes;
}
const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const
{
return RideTypeDescriptors[type];
}

View File

@ -26,6 +26,7 @@ class Formatter;
class StationObject;
struct Peep;
struct Ride;
struct RideTypeDescriptor;
struct Staff;
#define MAX_RIDE_TYPES_PER_RIDE_ENTRY 3
@ -449,6 +450,9 @@ public:
static bool NameExists(const std::string_view& name, ride_id_t excludeRideId = RIDE_ID_NULL);
std::unique_ptr<TrackDesign> SaveToTrackDesign() const;
uint64_t GetAvailableModes() const;
const RideTypeDescriptor& GetRideTypeDescriptor() const;
};
#pragma pack(push, 1)
@ -523,9 +527,9 @@ enum
RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME_DEPRECATED = 1 << 12, // Always set with SEPARATE_RIDE, and deprecated in favour of it.
RIDE_ENTRY_FLAG_SEPARATE_RIDE_DEPRECATED = 1 << 13, // Made redundant by ride groups
RIDE_ENTRY_FLAG_CANNOT_BREAK_DOWN = 1 << 14,
RIDE_ENTRY_DISABLE_LAST_OPERATING_MODE = 1 << 15,
RIDE_ENTRY_DISABLE_LAST_OPERATING_MODE_DEPRECATED = 1 << 15,
RIDE_ENTRY_FLAG_DISABLE_DOOR_CONSTRUCTION_DEPRECATED = 1 << 16,
RIDE_ENTRY_DISABLE_FIRST_TWO_OPERATING_MODES = 1 << 17,
RIDE_ENTRY_DISABLE_FIRST_TWO_OPERATING_MODES_DEPRECATED = 1 << 17,
RIDE_ENTRY_FLAG_DISABLE_COLLISION_CRASHES = 1 << 18,
RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB = 1 << 19,
// Must be set with swing mode 1 as well.
@ -649,7 +653,7 @@ enum
RIDE_STATUS_SIMULATING,
};
enum
enum : uint8_t
{
RIDE_MODE_NORMAL,
RIDE_MODE_CONTINUOUS_CIRCUIT,
@ -664,7 +668,7 @@ enum
RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION = 10,
RIDE_MODE_MAZE,
RIDE_MODE_RACE,
RIDE_MODE_BUMPERCAR,
RIDE_MODE_DODGEMS,
RIDE_MODE_SWING,
RIDE_MODE_SHOP_STALL,
RIDE_MODE_ROTATION,
@ -689,7 +693,7 @@ enum
RIDE_MODE_POWERED_LAUNCH, // RCT1 style, don't pass through station
RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED,
RIDE_MOUNT_COUNT,
RIDE_MODE_COUNT,
RIDE_MODE_NULL = 255,
};
@ -941,8 +945,6 @@ struct rct_ride_properties
int8_t booster_speed_factor; // The factor to shift the raw booster speed with
};
#define RIDE_MODE_COUNT 37
#define MAX_RIDE_MEASUREMENTS 8
#define RIDE_VALUE_UNDEFINED 0xFFFF
#define RIDE_INITIAL_RELIABILITY ((100 << 8) | 0xFF) // Upper byte is percentage, lower byte is "decimal".
@ -1209,7 +1211,6 @@ void sub_6CB945(Ride* ride);
void sub_6C94D8();
void ride_reset_all_names();
const uint8_t* ride_seek_available_modes(Ride* ride);
void window_ride_construction_mouseup_demolish_next_piece(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t type);

View File

@ -299,108 +299,6 @@ const rct_ride_name RideNaming[] = {
{ STR_RIDE_NAME_LIM_LAUNCHED_ROLLER_COASTER, STR_RIDE_DESCRIPTION_LIM_LAUNCHED_ROLLER_COASTER }, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER
};
/**
*
* rct2: 0x0097C8AC
*/
const uint8_t RideAvailableModes[] = {
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 00 Spiral Roller coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 01 Stand Up Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 02 Suspended Swinging
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 03 Inverted
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 04 Steel Mini Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_SHUTTLE, 0xFF, // 05 Mini Railway
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_SHUTTLE, 0xFF, // 06 Monorail
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 07 Mini Suspended Coaster
RIDE_MODE_BOAT_HIRE, 0xFF, // 08 Boat Hire
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 09 Wooden Wild Mine/Mouse
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 0A Steeplechase/Motorbike/Soap Box Derby
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 0B Car Ride
RIDE_MODE_UPWARD_LAUNCH, RIDE_MODE_DOWNWARD_LAUNCH, 0xFF, // 0C Launched Freefall
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 0D Bobsleigh Coaster
RIDE_MODE_ROTATING_LIFT, 0xFF, // 0E Observation Tower
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 0F Looping Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 10 Dinghy Slide
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 11 Mine Train Coaster
RIDE_MODE_STATION_TO_STATION, 0xFF, // 12 Chairlift
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 13 Corkscrew Roller Coaster
RIDE_MODE_MAZE, 0xFF, // 14 Maze
RIDE_MODE_SINGLE_RIDE_PER_ADMISSION, RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION, 0xFF, // 15 Spiral Slide
RIDE_MODE_RACE, RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 16 Go Karts
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 17 Log Flume
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 18 River Rapids
RIDE_MODE_BUMPERCAR, 0xFF, // 19 Dodgems
RIDE_MODE_SWING, 0xFF, // 1A Pirate Ship
RIDE_MODE_SWING, 0xFF, // 1B Swinging Inverter Ship
RIDE_MODE_SHOP_STALL, 0xFF, // 1C Food Stall
RIDE_MODE_SHOP_STALL, 0xFF, // 1D (none)
RIDE_MODE_SHOP_STALL, 0xFF, // 1E Drink Stall
RIDE_MODE_SHOP_STALL, 0xFF, // 1F (none)
RIDE_MODE_SHOP_STALL, 0xFF, // 20 Shop (all types)
RIDE_MODE_ROTATION, 0xFF, // 21 Merry Go Round
RIDE_MODE_SHOP_STALL, 0xFF, // 22 Balloon Stall (maybe)
RIDE_MODE_SHOP_STALL, 0xFF, // 23 Information Kiosk
RIDE_MODE_SHOP_STALL, 0xFF, // 24 Bathroom
RIDE_MODE_FORWARD_ROTATION, RIDE_MODE_BACKWARD_ROTATION, 0xFF, // 25 Ferris Wheel
RIDE_MODE_FILM_AVENGING_AVIATORS, RIDE_MODE_FILM_THRILL_RIDERS, 0xFF, // 26 Motion Simulator
RIDE_MODE_3D_FILM_MOUSE_TAILS, RIDE_MODE_3D_FILM_STORM_CHASERS, RIDE_MODE_3D_FILM_SPACE_RAIDERS, 0xFF, // 27 3D Cinema
RIDE_MODE_BEGINNERS, RIDE_MODE_INTENSE, RIDE_MODE_BERSERK, 0xFF, // 28 Topspin
RIDE_MODE_SPACE_RINGS, 0xFF, // 29 Space Rings
RIDE_MODE_LIM_POWERED_LAUNCH, 0xFF, // 2A Reverse Freefall Coaster
RIDE_MODE_SHUTTLE, 0xFF, // 2B Elevator
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 2C Vertical Drop Roller Coaster
RIDE_MODE_SHOP_STALL, 0xFF, // 2D ATM
RIDE_MODE_ROTATION, 0xFF, // 2E Twist
RIDE_MODE_HAUNTED_HOUSE, 0xFF, // 2F Haunted House
RIDE_MODE_SHOP_STALL, 0xFF, // 30 First Aid
RIDE_MODE_CIRCUS_SHOW, 0xFF, // 31 Circus Show
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 32 Ghost Train
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 33 Twister Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 34 Wooden Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 35 Side-Friction Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 36 Wild Mouse
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 37 Multi Dimension Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 38 (none)
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 39 Flying Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 3A (none)
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 3B Virginia Reel
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 3C Splash Boats
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 3D Mini Helicopters
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 3E Lay-down Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_SHUTTLE, 0xFF, // 3F Suspended Monorail
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 40 (none)
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 41 Reverser Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 42 Heartline Twister Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 43 Mini Golf
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 44 Giga Coaster
RIDE_MODE_FREEFALL_DROP, 0xFF, // 45 Roto-Drop
RIDE_MODE_BUMPERCAR, 0xFF, // 46 Flying Saucers
RIDE_MODE_CROOKED_HOUSE, 0xFF, // 47 Crooked House
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 48 Monorail Cycles
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 49 Compact Inverted Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 4A Water Coaster
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 4B Air Powered Vertical Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 4C Inverted Hairpin Coaster
RIDE_MODE_SWING, 0xFF, // 4D Magic Carpet
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 4E Submarine Ride
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 4F River Rafts
RIDE_MODE_SHOP_STALL, 0xFF, // 50 (none)
RIDE_MODE_ROTATION, 0xFF, // 51 Enterprise
RIDE_MODE_SHOP_STALL, 0xFF, // 52 (none)
RIDE_MODE_SHOP_STALL, 0xFF, // 53 (none)
RIDE_MODE_SHOP_STALL, 0xFF, // 54 (none)
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 55 (none)
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 56 Inverted Impulse Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 57 Mini Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 58 Mine Ride
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 59 Unknown
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF // 5a LIM Launched Roller Coaster
};
const uint8_t AllRideModesAvailable[] = {
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_SHUTTLE, RIDE_MODE_NORMAL, RIDE_MODE_BOAT_HIRE, RIDE_MODE_UPWARD_LAUNCH, RIDE_MODE_ROTATING_LIFT, RIDE_MODE_STATION_TO_STATION, RIDE_MODE_SINGLE_RIDE_PER_ADMISSION, RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION, RIDE_MODE_MAZE, RIDE_MODE_RACE, RIDE_MODE_BUMPERCAR, RIDE_MODE_SWING, RIDE_MODE_SHOP_STALL, RIDE_MODE_ROTATION, RIDE_MODE_FORWARD_ROTATION, RIDE_MODE_BACKWARD_ROTATION, RIDE_MODE_FILM_AVENGING_AVIATORS, RIDE_MODE_3D_FILM_MOUSE_TAILS, RIDE_MODE_SPACE_RINGS, RIDE_MODE_BEGINNERS, RIDE_MODE_LIM_POWERED_LAUNCH, RIDE_MODE_FILM_THRILL_RIDERS, RIDE_MODE_3D_FILM_STORM_CHASERS, RIDE_MODE_3D_FILM_SPACE_RAIDERS, RIDE_MODE_INTENSE, RIDE_MODE_BERSERK, RIDE_MODE_HAUNTED_HOUSE, RIDE_MODE_CIRCUS_SHOW, RIDE_MODE_DOWNWARD_LAUNCH, RIDE_MODE_CROOKED_HOUSE, RIDE_MODE_FREEFALL_DROP, RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF
};
// rct2: 0x0097D4F0, 0x0097D4F1, 0x0097D4F2, 0x0097D4F4, 0x0097D4F5
const rct_ride_data_4 RideData4[RIDE_TYPE_COUNT] = {
{ 20, 20, MUSIC_STYLE_ROCK_STYLE_3, }, // RIDE_TYPE_SPIRAL_ROLLER_COASTER
@ -1524,22 +1422,6 @@ const rct_string_id RideModeNames[] = {
STR_RIDE_MODE_POWERED_LAUNCH,
STR_RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED_MODE,
};
static constexpr const RideTypeDescriptor DummyRTD =
{
SET_FIELD(AlternateType, RIDE_TYPE_NULL),
SET_FIELD(Category, RIDE_CATEGORY_NONE),
SET_FIELD(EnabledTrackPieces, 0),
SET_FIELD(ExtraTrackPieces, 0),
SET_FIELD(StartTrackPiece, TRACK_ELEM_END_STATION),
SET_FIELD(TrackPaintFunction, nullptr),
SET_FIELD(Flags, 0),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),
SET_FIELD(UpkeepCosts, { 50, 1, 0, 0, 0, 0 }),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
};
// clang-format on
constexpr const RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = {

View File

@ -13,6 +13,8 @@
#include "../common.h"
#include "../localisation/StringIds.h"
#include "Ride.h"
#include "ShopItem.h"
#include "Track.h"
#include "TrackPaint.h"
struct RideComponentName
@ -116,6 +118,9 @@ struct RideTypeDescriptor
uint64_t StartTrackPiece;
TRACK_PAINT_FUNCTION_GETTER TrackPaintFunction;
uint64_t Flags;
/** rct2: 0x0097C8AC */
uint64_t RideModes;
uint8_t DefaultMode;
RideNameConvention NameConvention;
uint8_t AvailableBreakdowns;
/** rct2: 0x0097D7C8, 0x0097D7C9, 0x0097D7CA */
@ -245,8 +250,21 @@ constexpr const RideComponentName RideComponentNames[] =
// clang-format on
extern const rct_ride_name RideNaming[RIDE_TYPE_COUNT];
extern const uint8_t RideAvailableModes[];
extern const uint8_t AllRideModesAvailable[];
constexpr const uint64_t AllRideModesAvailable = (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)
| (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE)
| (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_SHUTTLE) | (1ULL << RIDE_MODE_NORMAL)
| (1ULL << RIDE_MODE_BOAT_HIRE) | (1ULL << RIDE_MODE_UPWARD_LAUNCH) | (1ULL << RIDE_MODE_ROTATING_LIFT)
| (1ULL << RIDE_MODE_STATION_TO_STATION) | (1ULL << RIDE_MODE_SINGLE_RIDE_PER_ADMISSION)
| (1ULL << RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION) | (1ULL << RIDE_MODE_MAZE) | (1ULL << RIDE_MODE_RACE)
| (1ULL << RIDE_MODE_DODGEMS) | (1ULL << RIDE_MODE_SWING) | (1ULL << RIDE_MODE_SHOP_STALL) | (1ULL << RIDE_MODE_ROTATION)
| (1ULL << RIDE_MODE_FORWARD_ROTATION) | (1ULL << RIDE_MODE_BACKWARD_ROTATION) | (1ULL << RIDE_MODE_FILM_AVENGING_AVIATORS)
| (1ULL << RIDE_MODE_3D_FILM_MOUSE_TAILS) | (1ULL << RIDE_MODE_SPACE_RINGS) | (1ULL << RIDE_MODE_BEGINNERS)
| (1ULL << RIDE_MODE_LIM_POWERED_LAUNCH) | (1ULL << RIDE_MODE_FILM_THRILL_RIDERS)
| (1ULL << RIDE_MODE_3D_FILM_STORM_CHASERS) | (1ULL << RIDE_MODE_3D_FILM_SPACE_RAIDERS) | (1ULL << RIDE_MODE_INTENSE)
| (1ULL << RIDE_MODE_BERSERK) | (1ULL << RIDE_MODE_HAUNTED_HOUSE) | (1ULL << RIDE_MODE_CIRCUS_SHOW)
| (1ULL << RIDE_MODE_DOWNWARD_LAUNCH) | (1ULL << RIDE_MODE_CROOKED_HOUSE) | (1ULL << RIDE_MODE_FREEFALL_DROP)
| (1ULL << RIDE_MODE_POWERED_LAUNCH) | RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED;
extern const rct_ride_data_4 RideData4[RIDE_TYPE_COUNT];
extern const ride_cost RideTrackCosts[RIDE_TYPE_COUNT];
@ -262,4 +280,24 @@ extern const track_colour_preset_list RideColourPresets[RIDE_TYPE_COUNT];
extern const rct_string_id RideModeNames[RIDE_MODE_COUNT];
// clang-format off
constexpr const RideTypeDescriptor DummyRTD =
{
SET_FIELD(AlternateType, RIDE_TYPE_NULL),
SET_FIELD(Category, RIDE_CATEGORY_NONE),
SET_FIELD(EnabledTrackPieces, 0),
SET_FIELD(ExtraTrackPieces, 0),
SET_FIELD(StartTrackPiece, TRACK_ELEM_END_STATION),
SET_FIELD(TrackPaintFunction, nullptr),
SET_FIELD(Flags, 0),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),
SET_FIELD(UpkeepCosts, { 50, 1, 0, 0, 0, 0 }),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
};
// clang-format on
#endif

View File

@ -35,7 +35,7 @@ void ride_update_station(Ride* ride, StationIndex stationIndex)
case RIDE_MODE_RACE:
ride_update_station_race(ride, stationIndex);
break;
case RIDE_MODE_BUMPERCAR:
case RIDE_MODE_DODGEMS:
ride_update_station_bumpercar(ride, stationIndex);
break;
case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED:

View File

@ -13,6 +13,8 @@
#include "../object/Object.h"
#include "Ride.h"
constexpr const uint16_t RideConstructionSpecialPieceSelected = 0x100;
using track_type_t = uint16_t;
#pragma pack(push, 1)

View File

@ -2063,7 +2063,7 @@ void Vehicle::UpdateMovingToEndOfStation()
if (!(curFlags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_5))
break;
[[fallthrough]];
case RIDE_MODE_BUMPERCAR:
case RIDE_MODE_DODGEMS:
case RIDE_MODE_SWING:
case RIDE_MODE_ROTATION:
case RIDE_MODE_FORWARD_ROTATION:
@ -2545,7 +2545,7 @@ void Vehicle::UpdateWaitingToDepart()
switch (curRide->mode)
{
case RIDE_MODE_BUMPERCAR:
case RIDE_MODE_DODGEMS:
// Bumper mode uses sub_state / var_CE to tell how long
// the vehicle has been ridden.
SetState(VEHICLE_STATUS_TRAVELLING_DODGEMS);

View File

@ -23,6 +23,8 @@ constexpr const RideTypeDescriptor AirPoweredVerticalCoasterRTD =
SET_FIELD(StartTrackPiece, TRACK_ELEM_END_STATION),
SET_FIELD(TrackPaintFunction, get_track_paint_function_air_powered_vertical_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor BobsleighCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor CompactInvertedCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor CorkscrewRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftArrow, 4, 6 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor FlyingRollerCoasterRTD =
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftBM, 4, 6 }),
@ -46,6 +48,8 @@ constexpr const RideTypeDescriptor FlyingRollerCoasterAltRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftBM, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor GigaCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 5, 8 }),

View File

@ -24,6 +24,8 @@ constexpr const RideTypeDescriptor HeartlineTwisterCoasterRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_heartline_twister_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor InvertedHairpinCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES |
RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftWildMouse, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor InvertedImpulseCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 7 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor InvertedRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftBM, 5, 7 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor JuniorRollerCoasterRTD =
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS |
RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor LIMLaunchedRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH) | (1ULL << RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::Null, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor LayDownRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),
@ -42,6 +44,8 @@ constexpr const RideTypeDescriptor LayDownRollerCoasterAltRTD =
SET_FIELD(TrackPaintFunction, nullptr),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAG_HAS_LARGE_CURVES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor LoopingRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) | (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor MineRideRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor MineTrainCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftArrow, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor MiniRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor MiniSuspendedCoasterRTD =
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT |
RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor MultiDimensionRollerCoasterRTD =
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 6 }),
@ -43,6 +45,8 @@ constexpr const RideTypeDescriptor MultiDimensionRollerCoasterAltRTD =
SET_FIELD(TrackPaintFunction, nullptr),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAG_HAS_LARGE_CURVES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 6 }),

View File

@ -23,6 +23,8 @@ constexpr const RideTypeDescriptor ReverseFreefallCoasterRTD =
SET_FIELD(StartTrackPiece, TRACK_ELEM_END_STATION),
SET_FIELD(TrackPaintFunction, get_track_paint_function_reverse_freefall_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_LIM_POWERED_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_LIM_POWERED_LAUNCH),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -24,6 +24,8 @@ constexpr const RideTypeDescriptor ReverserRollerCoasterRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_reverser_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 3, 4 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor SideFrictionRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftWood, 3, 4 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor SpiralRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 7, 7 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor StandUpRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) | (1ULL << RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) | (1ULL << RIDE_MODE_POWERED_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor SteelWildMouseRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftWildMouse, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor SteeplechaseRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor SuspendedSwingingCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor TwisterRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftBM, 5, 8 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor VerticalDropCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftBM, 4, 5 }),

View File

@ -24,6 +24,8 @@ constexpr const RideTypeDescriptor VirginiaReelRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_virginia_reel),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 3, 4 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor WaterCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT |
RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES | RIDE_TYPE_FLAG_HAS_LARGE_CURVES | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 6 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor WoodenRollerCoasterRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED) | (1ULL << RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) ),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftWood, 5, 7 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor WoodenWildMouseRTD =
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT |
RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftClassic, 4, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor CarRideRTD =
RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor CircusRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CIRCUS_SHOW)),
SET_FIELD(DefaultMode, RIDE_MODE_CIRCUS_SHOW),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor CrookedHouseRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION |
RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CROOKED_HOUSE)),
SET_FIELD(DefaultMode, RIDE_MODE_CROOKED_HOUSE),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor DodgemsRTD =
RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG_ALLOW_MUSIC |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_DODGEMS)),
SET_FIELD(DefaultMode, RIDE_MODE_DODGEMS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor FerrisWheelRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_FORWARD_ROTATION) | (1ULL << RIDE_MODE_BACKWARD_ROTATION)),
SET_FIELD(DefaultMode, RIDE_MODE_FORWARD_ROTATION),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_WHEEL, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor FlyingSaucersRTD =
RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS |
RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_DODGEMS)),
SET_FIELD(DefaultMode, RIDE_MODE_DODGEMS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor GhostTrainRTD =
RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS |
RIDE_TYPE_FLAG_HAS_AIR_TIME | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor HauntedHouseRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION |
RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_HAUNTED_HOUSE)),
SET_FIELD(DefaultMode, RIDE_MODE_HAUNTED_HOUSE),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -24,6 +24,8 @@ constexpr const RideTypeDescriptor MazeRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_maze),
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS | RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES |
RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_MAZE)),
SET_FIELD(DefaultMode, RIDE_MODE_MAZE),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor MerryGoRoundRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG_ALLOW_MUSIC |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_ROTATION)),
SET_FIELD(DefaultMode, RIDE_MODE_ROTATION),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_CONTROL_FAILURE)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor MiniGolfRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_HAS_TRACK |
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_PLAYER, RIDE_COMPONENT_TYPE_COURSE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor MiniHelicoptersRTD =
RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor MonorailCyclesRTD =
RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK |
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor ObservationTowerRTD =
RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK |
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_ROTATING_LIFT)),
SET_FIELD(DefaultMode, RIDE_MODE_ROTATING_LIFT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CABIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor SpaceRingsRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SPACE_RINGS)),
SET_FIELD(DefaultMode, RIDE_MODE_SPACE_RINGS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_RING, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor SpiralSlideRTD =
RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_TRACK_NO_WALLS |
RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT |
RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SINGLE_RIDE_PER_ADMISSION) | (1ULL << RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION)),
SET_FIELD(DefaultMode, RIDE_MODE_SINGLE_RIDE_PER_ADMISSION),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -24,6 +24,8 @@ constexpr const RideTypeDescriptor CashMachineRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_shop),
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES |
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor DrinkStallRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES |
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_SELLS_DRINKS | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor FirstAidRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES |
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY | RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor FoodStallRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES |
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_SELLS_FOOD | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor InformationKioskRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS |
RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP |
RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor ShopRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS |
RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP |
RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor ToiletsRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_NO_VEHICLES |
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY | RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_IS_TOILET | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHOP_STALL)),
SET_FIELD(DefaultMode, RIDE_MODE_SHOP_STALL),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, 0),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor CinemaRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_IN_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_3D_FILM_MOUSE_TAILS) | (1ULL << RIDE_MODE_3D_FILM_STORM_CHASERS) | (1ULL << RIDE_MODE_3D_FILM_SPACE_RAIDERS)),
SET_FIELD(DefaultMode, RIDE_MODE_3D_FILM_MOUSE_TAILS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BUILDING, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor EnterpriseRTD =
RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT |
RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_ROTATION)),
SET_FIELD(DefaultMode, RIDE_MODE_ROTATION),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_WHEEL, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor GoKartsRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS | RIDE_TYPE_FLAG_NO_TEST_MODE |
RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK |
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_RACE) | (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_RACE),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor LaunchedFreefallRTD =
RIDE_TYPE_FLAG_HAS_DATA_LOGGING | RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_UPWARD_LAUNCH) | (1ULL << RIDE_MODE_DOWNWARD_LAUNCH)),
SET_FIELD(DefaultMode, RIDE_MODE_UPWARD_LAUNCH),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor MagicCarpetRTD =
RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_SINGLE_SESSION |
RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SWING)),
SET_FIELD(DefaultMode, RIDE_MODE_SWING),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor MotionSimulatorRTD =
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT |
RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_FILM_AVENGING_AVIATORS) | (1ULL << RIDE_MODE_FILM_THRILL_RIDERS)),
SET_FIELD(DefaultMode, RIDE_MODE_FILM_AVENGING_AVIATORS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor RotoDropRTD =
RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK |
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_FREEFALL_DROP)),
SET_FIELD(DefaultMode, RIDE_MODE_FREEFALL_DROP),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor SwingingInverterShipRTD =
RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS |
RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SWING)),
SET_FIELD(DefaultMode, RIDE_MODE_SWING),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_SHIP, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor SwingingShipRTD =
RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SWING)),
SET_FIELD(DefaultMode, RIDE_MODE_SWING),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_SHIP, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor TopSpinRTD =
RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS |
RIDE_TYPE_FLAG_FLAT_RIDE | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_BEGINNERS) | (1ULL << RIDE_MODE_INTENSE) | (1ULL << RIDE_MODE_BERSERK)),
SET_FIELD(DefaultMode, RIDE_MODE_BEGINNERS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor TwistRTD =
RIDE_TYPE_FLAG_HAS_NO_TRACK | RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_FLAT_RIDE |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_ROTATION)),
SET_FIELD(DefaultMode, RIDE_MODE_ROTATION),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STRUCTURE, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor ChairliftRTD =
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_TRANSPORT_RIDE | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_STATION_TO_STATION)),
SET_FIELD(DefaultMode, RIDE_MODE_STATION_TO_STATION),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -26,6 +26,8 @@ constexpr const RideTypeDescriptor LiftRTD =
RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_TRACK_NO_WALLS | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS |
RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_ALLOW_EXTRA_TOWER_BASES | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_TRANSPORT_RIDE | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_SHUTTLE),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CABIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_DOORS_STUCK_CLOSED) | (1 << BREAKDOWN_DOORS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor MiniatureRailwayRTD =
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_TRANSPORT_RIDE | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor MonorailRTD =
RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_HAS_LARGE_CURVES | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_TRANSPORT_RIDE | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_DOORS_STUCK_CLOSED) | (1 << BREAKDOWN_DOORS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -29,6 +29,8 @@ constexpr const RideTypeDescriptor SuspendedMonorailRTD =
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS |
RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_TRANSPORT_RIDE | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_IS_SUSPENDED),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT) | (1ULL << RIDE_MODE_SHUTTLE)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_DOORS_STUCK_CLOSED) | (1 << BREAKDOWN_DOORS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -25,6 +25,8 @@ constexpr const RideTypeDescriptor BoatHireRTD =
SET_FIELD(Flags, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS | RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER |
RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_CHECK_FOR_STALLING |
RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_BOAT_HIRE)),
SET_FIELD(DefaultMode, RIDE_MODE_BOAT_HIRE),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_DOCKING_PLATFORM, RIDE_COMPONENT_TYPE_DOCKING_PLATFORM }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -29,6 +29,8 @@ constexpr const RideTypeDescriptor DinghySlideRTD =
RIDE_TYPE_FLAG_CHECK_FOR_STALLING | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_HAS_AIR_TIME |
RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor LogFlumeRTD =
RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_HAS_AIR_TIME | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_CONTROL_FAILURE)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor RiverRaftsRTD =
RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS |
RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -29,6 +29,8 @@ constexpr const RideTypeDescriptor RiverRapidsRTD =
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS |
RIDE_TYPE_FLAG_HAS_AIR_TIME | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_CONTROL_FAILURE)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -28,6 +28,8 @@ constexpr const RideTypeDescriptor SplashBoatsRTD =
RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR | RIDE_TYPE_FLAG_ALLOW_MUSIC |
RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_HAS_AIR_TIME |
RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_CONTROL_FAILURE)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

View File

@ -27,6 +27,8 @@ constexpr const RideTypeDescriptor SubmarineRideRTD =
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS),
SET_FIELD(RideModes, (1ULL << RIDE_MODE_CONTINUOUS_CIRCUIT)),
SET_FIELD(DefaultMode, RIDE_MODE_CONTINUOUS_CIRCUIT),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_DOCKING_PLATFORM }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),

Some files were not shown because too many files have changed in this diff Show More