Skip to content
zrowny edited this page Jun 3, 2021 · 7 revisions

Ride Object Properties

Since stalls are considered rides as well, this page is split up into three parts. First are properties for All Ride Objects. After that are the properties specific to shops/stalls vs those for actual rides.

If "type" is "food_stall", "drink_stall", "shop", "information_kiosk", "toilets", "cash_machine", "first_aid" (i.e., a shop or stall), use properties for Stalls and Shops Only. Otherwise, use properties for Actual Rides Only.

All ride objects start with 3 preview images. In theory, these are for the 3 types it has, but since almost all of them only support one type, the second 2 images are almost always blank. The rest of the images are described in the other image sections below.

type : array of enum (of string) : required

Array of ride types of this object. For tracked rides, this is the type of track. For flat rides and stalls, this is the type of it. Currently only up to 3 are used, and most ride objects only have one.

*items* : enum (of string)
Must be one of: "spiral_rc", "stand_up_rc", "suspended_swinging_rc", "inverted_rc", "junior_rc", "miniature_railway", "monorail", "mini_suspended_rc", "boat_hire", "wooden_wild_mouse", "steeplechase", "car_ride", "launched_freefall", "bobsleigh_rc", "observation_tower", "looping_rc", "dinghy_slide", "mine_train_rc", "chairlift", "corkscrew_rc", "maze", "spiral_slide", "go_karts", "log_flume", "river_rapids", "dodgems", "swinging_ship", "swinging_inverter_ship", "food_stall", "drink_stall", "shop", "merry_go_round", "information_kiosk", "toilets", "ferris_wheel", "motion_simulator", "3d_cinema", "top_spin", "space_rings", "reverse_freefall_rc", "lift", "vertical_drop_rc", "cash_machine", "twist", "haunted_house", "first_aid", "circus", "ghost_train", "twister_rc", "wooden_rc", "side_friction_rc", "steel_wild_mouse", "multi_dimension_rc", "flying_rc", "virginia_reel", "splash_boats", "mini_helicopters", "lay_down_rc", "suspended_monorail", "reverser_rc", "heartline_twister_rc", "mini_golf", "giga_rc", "roto_drop", "flying_saucers", "crooked_house", "monorail_cycles", "compact_inverted_rc", "water_coaster", "air_powered_vertical_rc", "inverted_hairpin_rc", "magic_carpet", "submarine_ride", "river_rafts", "enterprise", "inverted_impulse_rc", "mini_rc", "mine_ride", "lim_launched_rc", "hypercoaster", "hyper_twister", "monster_trucks", "spinning_wild_mouse", "classic_mini_rc", "hybrid_rc", "single_rail_rc",
category : string

[Deprecated] Ride category is now determined from the type

Example:

"category": "rollercoaster"
carColours : array of array : required

An array of preset color schemes for the ride. Currently, a ride can either have multiple presets (up to 254) with a single color scheme each (which are randomly chosen from when a ride is built), or it can have a single preset that has different color schemes for each train (car?). Note: If there is more than one preset, only the first color scheme in each preset is used.

*items* : array of array
*items* : array
*item* : enum (of string)

Object color

Must be one of: "black", "grey", "white", "dark_purple", "light_purple", "bright_purple", "dark_blue", "light_blue", "icy_blue", "teal", "aquamarine", "saturated_green", "dark_green", "moss_green", "bright_green", "olive_green", "dark_olive_green", "bright_yellow", "yellow", "dark_yellow", "light_orange", "dark_orange", "light_brown", "saturated_brown", "dark_brown", "salmon_pink", "bordeaux_red", "saturated_red", "bright_red", "dark_pink", "bright_pink", "light_pink",

*item* : enum (of string)

Object color

Must be one of: "black", "grey", "white", "dark_purple", "light_purple", "bright_purple", "dark_blue", "light_blue", "icy_blue", "teal", "aquamarine", "saturated_green", "dark_green", "moss_green", "bright_green", "olive_green", "dark_olive_green", "bright_yellow", "yellow", "dark_yellow", "light_orange", "dark_orange", "light_brown", "saturated_brown", "dark_brown", "salmon_pink", "bordeaux_red", "saturated_red", "bright_red", "dark_pink", "bright_pink", "light_pink",

*item* : enum (of string)

Object color

Must be one of: "black", "grey", "white", "dark_purple", "light_purple", "bright_purple", "dark_blue", "light_blue", "icy_blue", "teal", "aquamarine", "saturated_green", "dark_green", "moss_green", "bright_green", "olive_green", "dark_olive_green", "bright_yellow", "yellow", "dark_yellow", "light_orange", "dark_orange", "light_brown", "saturated_brown", "dark_brown", "salmon_pink", "bordeaux_red", "saturated_red", "bright_red", "dark_pink", "bright_pink", "light_pink",

Examples:

rct2.ride.scht1 (Looping Roller Coaster Trains)

"carColours": [
    [
        ["bright_red", "bright_red", "yellow"]
    ],
    [
        ["dark_green", "bright_red", "dark_green"]
    ],
    [
        ["light_blue", "white", "light_blue"]
    ]
]

rct2.ride.kart1 (Go-Karts)

"carColours": [
    [
        ["light_blue", "black", "black"],
        ["bright_red", "black", "black"],
        ["yellow", "black", "black"],
        ["bright_green", "black", "black"],
        ["black", "black", "black"],
        ["light_purple", "black", "black"],
        ["light_orange", "black", "black"],
        ["aquamarine", "black", "black"],
        ["dark_brown", "black", "black"],
        ["white", "black", "black"],
        ["bright_pink", "black", "black"],
        ["dark_olive_green", "black", "black"],
        ["bordeaux_red", "black", "black"],
        ["dark_purple", "black", "black"],
        ["bright_purple", "black", "black"],
        ["light_pink", "black", "black"],
        ["dark_blue", "black", "black"],
        ["icy_blue", "black", "black"],
        ["teal", "black", "black"],
        ["saturated_green", "black", "black"],
        ["dark_green", "black", "black"],
        ["moss_green", "black", "black"],
        ["olive_green", "black", "black"],
        ["bright_yellow", "black", "black"],
        ["dark_yellow", "black", "black"],
        ["dark_orange", "black", "black"],
        ["saturated_brown", "black", "black"],
        ["salmon_pink", "black", "black"],
        ["saturated_red", "black", "black"],
        ["dark_pink", "black", "black"],
        ["light_blue", "black", "black"],
        ["bright_red", "black", "black"]
    ]
]

After the 3 preview images, for most stalls, there are just the 4 angles. Unusually, they start facing back-right and then go clockwise. For stalls that peeps can enter ("toilets" and "first_aid"), the part that is drawn in front of peeps that enter it is split off for the front facing angles, but unlike other objects with split images, it's all the "behind" angles first and then the "in front" angles:

  • Front-left (behind)
  • Back-left (can't see the entrance, so there's no split)
  • Back-right (again, no split)
  • Front-right (behind)
  • Front-left (front)
  • Front-right (front)
sells : array : required

The item(s) sold by the shop, currently up to two are used

items
Must be one of: "burger", "chips", "ice_cream", "candyfloss", "pizza", "popcorn", "hot_dog", "tentacle", "toffee_apple", "doughnut", "chicken", "pretzel", "funnel_cake", "beef_noodles", "fried_rice_noodles", "wonton_soup", "meatball_soup", "sub_sandwich", "cookie", "roast_sausage", "drink", "coffee", "lemonade", "chocolate", "iced_tea", "fruit_juice", "soybean_milk", "sujeonggwa", "balloon", "toy", "map", "photo", "umbrella", "voucher", "hat", "tshirt", or "sunglasses".
disablePainting : boolean
Flagged if the ride does not support recolouring

rct2.ride.bnoodles (Beef Noodles Stall)

"properties": {
    "type": "food_stall",
    "category": "stall",
    "sells": "beef_noodles",
    "disablePainting": true,
    "carColours": [
        [
            ["black", "black", "black"]
        ]
    ]
}
buildMenuPriority : integer
For rides that do not list their subtypes separately, this number describes the priority order for which subtype should show for the generic ride type in the build menu. Of all the subtypes that are available and researched, whichever has the highest buildMenuPriority will show as representative of the generic ride type.
maxHeight : integer
Maximum height of the ride (if not set, or set to 0, uses the hardcoded value for the ridetype)
swingMode : enum (of integer)

If set to 1 or 2, indicates alternate swing modes that are used for some rides

Must be one of: 0, 1, 2,

rotationMode : enum (of integer)

If set to 1, indicates alternate rotation modes used for twist, if set to 2, indicates alternate rotation mode used for enterprise

Must be one of: 0, 1, 2,

ratingMultipler : object

Additional rating multiplier(s) for this specific ride subtype (this is separate from the rating multipliers that are hardcoded for each ride type)

excitement : integer

intensity : integer

nausea : integer

minCarsPerTrain : integer
Minimum number of cars that can be in a train
maxCarsPerTrain : integer
Maximum number of cars that can be in a train
carsPerFlatRide : integer
The number of cars, for a flat ride
numEmptyCars : integer
The number of "zero" cars in the train. That is, cars that do not hold any guests
defaultCar : integer

Index of the car that should be used as the default car for this ride. In other words, this is the normal car that appears throughout the train wherever there isn't a special (i.e. front or rear) car

Defaults to 0 if not specified

tabCar : number
The index of the car that should show in the gui tab for this ride (0 if not specified)
tabScale : number
If <= 0.5, this will scale the size of the tab preview in half
headCars : array of integer or number
The index(es) of up to three cars that should be used to fill the front of a train
tailCars : integer
Index of the car that should be used as the tail car, if any (the code supports listing an array instead of just a single index here, but currently only the first index listed is used)
cars : array or object : required

The cars in this ride

This can be either a single Car Object or an array of them

noInversions : boolean
Flagged if the ride does not support inversions
noBanking : boolean
Flagged if the ride does not support banking
playDepartSound : boolean
Flagged if the ride plays a departure sound when departing the station. depending on sound_range setting, plays Tram or Train departing sound.
playSplashSound : boolean
Flagged if the ride should play a splashing sound on down to flat elements
playSplashSoundSlide : boolean
Flagged if the ride should play a splashing sound when entering a water channel, for water coasters. Has no effect if playSplashSound is enabled. Note: Internally, water channel track is coded as "covered" track, so if this flag is set for a ride running on a track that supports covered pieces, it will play a splash sound when entering a covered section of track.
hasShelter : boolean

Flagged if the ride is covered (for example, monorail cars are covered)

Note that there are some ride types in vanilla RCT2 that seem to have this bit set illogically. Pickup-trucks did not have this set, and the uncovered ski lift cars did have these set. These have been changed in OpenRCT2 to make more sense.

limitAirTimeBonus : boolean
Flagged if the ride should have a hard cap on how much bonus it gets from airtime. This is only set for heartline-twister coasters, and makes it so that a max of ~2 seconds of airtime can give an excitement bonus.
disableBreakdown : boolean
Flagged if the ride does not break down
noCollisionCrashes : boolean
Flagged if the ride does not crash when vehicles collide
disablePainting : boolean
Flagged if the ride does not support recolouring

rct2.ride.bboat (Bumper Boats)

"properties": {
    "type": "boat_hire",
    "category": [
        "water",
        "thrill"
    ],
    "ratingMultipler": {
        "excitement": 30,
        "intensity": 15,
        "nausea": 15
    },
    "carColours": [
        [
            ["yellow", "light_blue", "black"]
        ],
        [
            ["bright_red", "light_blue", "black"]
        ],
        [
            ["dark_green", "yellow", "black"]
        ]
    ],
    "cars": {[...]},
    "buildMenuPriority": 5
}

rct2.ride.twist1 (Twist)

"properties": {
    "type": "twist",
    "category": "thrill",
    "tabScale": 0.5,
    "rotationMode": 1,
    "carsPerFlatRide": 1,
    "carColours": [
        [
            ["moss_green", "yellow", "black"]
        ],
        [
            ["bright_red", "white", "black"]
        ]
    ],
    "cars": {[..]}
}
rotationFrameMask : integer

A bitmask indicating which rotation frames this car has, for rendering spinning car in the UI?

Example:

"rotationFrameMask": 31
spacing : integer

The space taken up by this car (I have no idea what the units are tbh)

Example:

"spacing": 146000
mass : integer

Mass of this car

Example:

"mass": 650
tabOffset : integer
If used, adds a vertical offset to this car when rendered in the UI
numSeats : integer
Number of seats that this car holds
seatsInPairs : boolean
If set, indicates that guests sit in this car in pairs
spriteWidth : integer
For manually entering the sprite width for this car. This is only used if VEHICLE_ENTRY_FLAG_10 is set, which seems to only be for non-tracked-rides (?), otherwide this value is calculated.
spriteHeightNegative : integer
For manually entering the sprite height below the origin for this car. This is only used if VEHICLE_ENTRY_FLAG_10 is set, which seems to only be for non-tracked-rides (?), otherwide this value is calculated.
spriteHeightPositive : integer
For manually entering the sprite height above the origin for this car. This is only used if VEHICLE_ENTRY_FLAG_10 is set, which seems to only be for non-tracked-rides (?), otherwide this value is calculated.
animation : integer

Indicates a special animation mode to use for this car.

1: Miniature Railway 2: Swan boats 3: Canoes 4: Row boats 5: Water tricycles 6: Observation tower 7: Helicars 8: Monorail cycles 9: Multidimensional Coaster

baseNumFrames : integer
The number of frames (angles) of rotation when this car is flat. This number is always calculated now so it shouldn't be specified
numImages : integer
The total number of sprites for this car. This number is always calculated now so it shouldn't be specified

numSeatRows : integer

spinningInertia : integer

spinningFriction : integer

frictionSoundId : integer

Example:

"frictionSoundId": 57
logFlumeReverserVehicleType : integer

Example:

"logFlumeReverserVehicleType": 0

soundRange : integer

doubleSoundFrequency : integer

poweredAcceleration : integer

poweredMaxSpeed : integer

carVisual : integer

effectVisual : integer

drawOrder : integer

Example:

"drawOrder": 7
numVerticalFramesOverride : integer
When VEHICLE_ENTRY_FLAG_OVERRIDE_NUM_VERTICAL_FRAMES is set, this value overrides the calculated value
loadingPositions : array of integer or integer

A list of the different loading positions for this car

*items* : integer

loadingWaypoints : array of array

A list of the different loading waypoints guests should use for this car

*items* : array of array
*items* : array of integer
*items* : integer
numSegments : integer
If loadingWaypoints is used, the number of segments
frames : object

A set of flags for the different sets of sprites that this car has

flat : boolean
If set, this car has sprites for flat track
gentleSlopes : boolean
If set, this car has sprites for gentle slopes
steepSlopes : boolean
If set, this car has sprites for steep slopes
verticalSlopes : boolean
If set, this car has sprites for vertical slopes
diagonalSlopes : boolean
If set, this car has sprites for diagonal slopes
flatBanked : boolean
If set, this car has sprites for banked, flat track
inlineTwists : boolean
If set, this car has sprites for inline twists
flatToGentleSlopeBankedTransitions : boolean
If set, this car has sprites for flat track to banked gentle sloped track
diagonalGentleSlopeBankedTransitions : boolean
If set, this car has sprites for diagonal banked to unbanked, gentle sloped track transitions
gentleSlopeBankedTransitions : boolean
If set, this car has sprites for banked to unbanked, gentle sloped track transitions
gentleSlopeBankedTurns : boolean
If set, this car has sprites for banked gentle sloping turns
flatToGentleSlopeWhileBankedTransitions : boolean
If set, this car has sprites for banked flat track to banked gentle slope
corkscrews : boolean
If set, this car has sprites for corkscrews
restraintAnimation : boolean
If set, this car has sprites for restraints opening and closing
curvedLiftHill : boolean
If set, this car has sprites for a curved lift-hill
isPoweredRideWithUnrestrictedGravity : boolean
Set on powered vehicles that do not slow down when going down a hill

hasNoUpstopWheels : boolean

hasNoUpstopWheelsBobsleigh : boolean

isMiniGolf : boolean

isReverserBogie : boolean

isReverserPassengerCar : boolean

hasInvertedSpriteSet : boolean
Set on vehicles that support running inverted for extended periods of time, i.e. the Flying, Lay-down and Multi-dimension RCs.
hasDodgemInUseLights : boolean
When set the vehicle has an additional frame for when in use. Used only by dodgems.

hasAdditionalColour2 : boolean

recalculateSpriteBounds : boolean
Only used during loading of the object
VEHICLE_ENTRY_FLAG_11 : boolean
Sets VEHICLE_ENTRY_FLAG_USE_16_ROTATION_FRAMES. Instead of the default 32 rotation frames. Only used for boat hire and works only for non sloped sprites.
overrideNumberOfVerticalFrames : boolean
Setting this will cause the game to use numVerticalFramesOverride instead of calculating it
spriteBoundsIncludeInvertedSet : boolean
Used together for recalculateSpriteBounds if hasInvertedSpriteSet is also set so that the inverted sprites are included in the function that recalculates the sprite bounds.
hasAdditionalSpinningFrames : boolean
16x additional frames for vehicle. A spinning item with additional frames must always face forward to load/unload. Spinning without can load/unload at 4 rotations.

isLift : boolean

hasAdditionalColour1 : boolean

hasSwinging : boolean

hasSpinning : boolean

isPowered : boolean

hasScreamingRiders : boolean

useSuspendedSwing : boolean
Suspended swinging coaster, or bobsleigh if SLIDE_SWING is also enabled.

useBoatHireCollisionDetection : boolean

hasVehicleAnimation : boolean
Set on animated vehicles like the Multi-dimension coaster trains, Miniature Railway locomotives and Helicycles.
hasRiderAnimation : boolean
Set when the animation updates rider sprite positions.

useWoodenWildMouseSwing : boolean

useSlideSwing : boolean
Set on dingy slides. They have there own swing value calculations and have a different amount of images. Also set on bobsleighs together with the SUSPENDED_SWING flag.

isChairlift : boolean

isWaterRide : boolean
Set on rides where water would provide continuous propulsion

isGoKart : boolean

useDodgemCarPlacement : boolean

rct2.ride.twist1 (Twist)

"cars": {
    "spacing": 139456,
    "mass": 200,
    "tabOffset": -12,
    "numSeats": 18,
    "spriteWidth": 65,
    "spriteHeightNegative": 58,
    "spriteHeightPositive": 36,
    "carVisual": 1,
    "drawOrder": 6,
    "frames": {
        "flat": true
    },
    "recalculateSpriteBounds": true,
    "hasAdditionalColour1": true,
    "numSegments": 4,
    "loadingWaypoints": [
        [
            [43, 43],
            [43, 43],
            [33, 33]
        ],
        [...],
        [
            [-43, 43],
            [-42, -3],
            [-42, 0]
        ]
    ]
}

rct2.ride.bboat (Bumper Boats)

"cars": {
    "rotationFrameMask": 31,
    "spacing": 183036,
    "mass": 140,
    "numSeats": 2,
    "numSeatRows": 1,
    "poweredAcceleration": 220,
    "poweredMaxSpeed": 9,
    "drawOrder": 7,
    "frames": {
        "flat": true
    },
    "hasAdditionalColour1": true,
    "isPowered": true,
    "useBoatHireCollisionDetection": true,
    "loadingPositions": [3, -3]
}

rct2.ride.arrt1 (Corkscrew Roller Coaster Trains)

"cars": [
    {
        "rotationFrameMask": 31,
        "spacing": 261480,
        "mass": 600,
        "numSeats": 4,
        "numSeatRows": 2,
        "frictionSoundId": 2,
        "soundRange": 2,
        "drawOrder": 5,
        "frames": {
            "flat": true,
            "gentleSlopes": true,
            "steepSlopes": true,
            "verticalSlopes": true,
            "diagonalSlopes": true,
            "flatBanked": true,
            "flatToGentleSlopeBankedTransitions": true,
            "diagonalGentleSlopeBankedTransitions": true,
            "corkscrews": true,
            "restraintAnimation": true
        },
        "hasAdditionalColour2": true,
        "hasAdditionalColour1": true,
        "hasScreamingRiders": true,
        "loadingPositions": [5, 3, -7, -9]
    },
    {
        "rotationFrameMask": 31,
        "spacing": 226616,
        "mass": 500,
        "numSeats": 4,
        "numSeatRows": 2,
        "frictionSoundId": 2,
        "soundRange": 2,
        "drawOrder": 6,
        "frames": {
            "flat": true,
            "gentleSlopes": true,
            "steepSlopes": true,
            "verticalSlopes": true,
            "diagonalSlopes": true,
            "flatBanked": true,
            "flatToGentleSlopeBankedTransitions": true,
            "diagonalGentleSlopeBankedTransitions": true,
            "corkscrews": true,
            "restraintAnimation": true
        },
        "hasAdditionalColour2": true,
        "hasAdditionalColour1": true,
        "hasScreamingRiders": true,
        "loadingPositions": [7, 9, -3, -1]
    },
    {
        "rotationFrameMask": 31,
        "spacing": 52296,
        "mass": 50,
        "frictionSoundId": 2,
        "soundRange": 0,
        "drawOrder": 8,
        "frames": {
            "flat": true,
            "gentleSlopes": true,
            "steepSlopes": true,
            "verticalSlopes": true,
            "diagonalSlopes": true,
            "flatBanked": true,
            "flatToGentleSlopeBankedTransitions": true,
            "diagonalGentleSlopeBankedTransitions": true,
            "corkscrews": true
        }
    }
]