# Auto-generated by openrct2-codegen 0.7.2
# OpenRCT2 v0.4.32 (objects v1.7.6)
# Generated: 2026-04-01T15:06:22.384456+00:00
#
# DO NOT EDIT — regenerate with:
#   openrct2-codegen render --template objects.py --out <path>

from __future__ import annotations

from pydantic import BaseModel, ConfigDict

# OpenRCT2 version these objects were generated against.
GENERATED_OPENRCT2_VERSION: str = "v0.4.32"
GENERATED_OBJECTS_VERSION: str = "v1.7.6"


class RideObjectInfo(BaseModel):
    """Static info about a ride/stall object. Generated from OpenRCT2 object definitions."""

    model_config = ConfigDict(frozen=True)

    identifier: str
    name: str
    ride_type: str
    category: str | list[str]
    tiles_x: int | None = None
    tiles_y: int | None = None
    clearance_height: int | None = None


# ── Ride object instances ────────────────────────────────────────────

MONSTER_TRUCKS = RideObjectInfo(
    identifier="rct2.ride.4x4",
    name="Monster Trucks",
    ride_type="monster_trucks",
    category='gentle',
)
AMERICAN_STYLE_STEAM_TRAINS = RideObjectInfo(
    identifier="rct2.ride.aml1",
    name="American Style Steam Trains",
    ride_type="miniature_railway",
    category='transport',
)
MINE_TRAINS = RideObjectInfo(
    identifier="rct2.ride.amt1",
    name="Mine Trains",
    ride_type="mine_train_rc",
    category='rollercoaster',
)
SUSPENDED_SWINGING_CARS = RideObjectInfo(
    identifier="rct2.ride.arrsw1",
    name="Suspended Swinging Cars",
    ride_type="suspended_swinging_rc",
    category='rollercoaster',
)
SUSPENDED_SWINGING_AIRPLANE_CARS = RideObjectInfo(
    identifier="rct2.ride.arrsw2",
    name="Suspended Swinging Airplane Cars",
    ride_type="suspended_swinging_rc",
    category='rollercoaster',
)
CORKSCREW_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.arrt1",
    name="Corkscrew Roller Coaster Trains",
    ride_type="corkscrew_rc",
    category='rollercoaster',
)
HYPERCOASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.arrt2",
    name="Hypercoaster Trains",
    ride_type="hypercoaster",
    category='rollercoaster',
)
MULTI_DIMENSION_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.arrx",
    name="Multi-Dimension Coaster Trains",
    ride_type="multi_dimension_rc",
    category='rollercoaster',
)
ATM = RideObjectInfo(
    identifier="rct2.ride.atm1",
    name="ATM",
    ride_type="cash_machine",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
BALLOON_STALL = RideObjectInfo(
    identifier="rct2.ride.balln",
    name="Balloon Stall",
    ride_type="shop",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SWINGING_CARS = RideObjectInfo(
    identifier="rct2.ride.batfl",
    name="Swinging Cars",
    ride_type="mini_suspended_rc",
    category='rollercoaster',
)
BUMPER_BOATS = RideObjectInfo(
    identifier="rct2.ride.bboat",
    name="Bumper Boats",
    ride_type="boat_hire",
    category=['water', 'thrill'],
)
FLYING_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.bmair",
    name="Flying Roller Coaster Trains",
    ride_type="flying_rc",
    category='rollercoaster',
)
FLOORLESS_TWISTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.bmfl",
    name="Floorless Twister Trains",
    ride_type="twister_rc",
    category='rollercoaster',
)
HYPER_TWISTER_TRAINS_WIDE_CARS = RideObjectInfo(
    identifier="rct2.ride.bmrb",
    name="Hyper-Twister Trains (wide cars)",
    ride_type="hyper_twister",
    category='rollercoaster',
)
TWISTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.bmsd",
    name="Twister Trains",
    ride_type="twister_rc",
    category='rollercoaster',
)
STAND_UP_TWISTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.bmsu",
    name="Stand-up Twister Trains",
    ride_type="twister_rc",
    category='rollercoaster',
)
SIX_SEATER_TWISTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.bmvd",
    name="Six-seater Twister Trains",
    ride_type="vertical_drop_rc",
    category='rollercoaster',
)
BEEF_NOODLES_STALL = RideObjectInfo(
    identifier="rct2.ride.bnoodles",
    name="Beef Noodles Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
BOBSLED_TRAINS = RideObjectInfo(
    identifier="rct2.ride.bob1",
    name="Bobsled Trains",
    ride_type="bobsleigh_rc",
    category='rollercoaster',
)
BURGER_BAR = RideObjectInfo(
    identifier="rct2.ride.burgb",
    name="Burger Bar",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
_3D_CINEMA = RideObjectInfo(
    identifier="rct2.ride.c3d",
    name="3D Cinema",
    ride_type="3d_cinema",
    category='thrill',
    tiles_x=3,
    tiles_y=3,
    clearance_height=128,
)
CANOES = RideObjectInfo(
    identifier="rct2.ride.cboat",
    name="Canoes",
    ride_type="boat_hire",
    category=['water', 'gentle'],
)
CROOKED_HOUSE = RideObjectInfo(
    identifier="rct2.ride.chbuild",
    name="Crooked House",
    ride_type="crooked_house",
    category='gentle',
    tiles_x=3,
    tiles_y=3,
    clearance_height=96,
)
FRIED_CHICKEN_STALL = RideObjectInfo(
    identifier="rct2.ride.chcks",
    name="Fried Chicken Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
CHICKEN_NUGGETS_STALL = RideObjectInfo(
    identifier="rct2.ride.chknug",
    name="Chicken Nuggets Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
FRIES_SHOP = RideObjectInfo(
    identifier="rct2.ride.chpsh",
    name="Fries Shop",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
FRIES_STALL = RideObjectInfo(
    identifier="rct2.ride.chpsh2",
    name="Fries Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SUJEONGGWA_STALL = RideObjectInfo(
    identifier="rct2.ride.cindr",
    name="Sujeonggwa Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
CIRCUS = RideObjectInfo(
    identifier="rct2.ride.circus1",
    name="Circus",
    ride_type="circus",
    category='gentle',
    tiles_x=3,
    tiles_y=3,
    clearance_height=128,
)
CHAIRLIFT_CARS = RideObjectInfo(
    identifier="rct2.ride.clift1",
    name="Chairlift Cars",
    ride_type="chairlift",
    category='transport',
)
SKI_LIFT_CHAIRS = RideObjectInfo(
    identifier="rct2.ride.clift2",
    name="Ski-lift Chairs",
    ride_type="chairlift",
    category='transport',
)
COTTON_CANDY_STALL = RideObjectInfo(
    identifier="rct2.ride.cndyf",
    name="Cotton Candy Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
COFFEE_SHOP = RideObjectInfo(
    identifier="rct2.ride.coffs",
    name="Coffee Shop",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
COOKIE_SHOP = RideObjectInfo(
    identifier="rct2.ride.cookst",
    name="Cookie Shop",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
COASTER_BOATS = RideObjectInfo(
    identifier="rct2.ride.cstboat",
    name="Coaster Boats",
    ride_type="water_coaster",
    category=['water', 'rollercoaster'],
)
CHESHIRE_CATS = RideObjectInfo(
    identifier="rct2.ride.ctcar",
    name="Cheshire Cats",
    ride_type="car_ride",
    category='gentle',
)
DINGHIES = RideObjectInfo(
    identifier="rct2.ride.ding1",
    name="Dinghies",
    ride_type="dinghy_slide",
    category=['water', 'rollercoaster'],
)
BUMPER_CARS = RideObjectInfo(
    identifier="rct2.ride.dodg1",
    name="Bumper Cars",
    ride_type="dodgems",
    category='gentle',
    tiles_x=4,
    tiles_y=4,
    clearance_height=48,
)
DONUT_SHOP = RideObjectInfo(
    identifier="rct2.ride.dough",
    name="Donut Shop",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
DRINKS_STALL = RideObjectInfo(
    identifier="rct2.ride.drnks",
    name="Drinks Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
ENTERPRISE = RideObjectInfo(
    identifier="rct2.ride.enterp",
    name="Enterprise",
    ride_type="enterprise",
    category='thrill',
    tiles_x=4,
    tiles_y=4,
    clearance_height=160,
)
FIRST_AID_ROOM = RideObjectInfo(
    identifier="rct2.ride.faid1",
    name="First Aid Room",
    ride_type="first_aid",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=48,
)
FRIED_RICE_NOODLES_STALL = RideObjectInfo(
    identifier="rct2.ride.frnood",
    name="Fried Rice Noodles Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
FLYING_SAUCERS = RideObjectInfo(
    identifier="rct2.ride.fsauc",
    name="Flying Saucers",
    ride_type="flying_saucers",
    category='gentle',
    tiles_x=4,
    tiles_y=4,
    clearance_height=48,
)
FUNNEL_CAKE_SHOP = RideObjectInfo(
    identifier="rct2.ride.funcake",
    name="Funnel Cake Shop",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
FERRIS_WHEEL = RideObjectInfo(
    identifier="rct2.ride.fwh1",
    name="Ferris Wheel",
    ride_type="ferris_wheel",
    category='gentle',
    tiles_x=1,
    tiles_y=4,
    clearance_height=176,
)
ROTO_DROP = RideObjectInfo(
    identifier="rct2.ride.gdrop1",
    name="Roto-Drop",
    ride_type="roto_drop",
    category='thrill',
)
MINI_GOLF = RideObjectInfo(
    identifier="rct2.ride.golf1",
    name="Mini Golf",
    ride_type="mini_golf",
    category='gentle',
)
HYPER_TWISTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.goltr",
    name="Hyper-Twister Trains",
    ride_type="hyper_twister",
    category='rollercoaster',
)
GHOST_TRAIN_CARS = RideObjectInfo(
    identifier="rct2.ride.gtc",
    name="Ghost Train Cars",
    ride_type="ghost_train",
    category='gentle',
)
HAT_STALL = RideObjectInfo(
    identifier="rct2.ride.hatst",
    name="Hat Stall",
    ride_type="shop",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
HOT_CHOCOLATE_STALL = RideObjectInfo(
    identifier="rct2.ride.hchoc",
    name="Hot Chocolate Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
MINI_HELICOPTERS = RideObjectInfo(
    identifier="rct2.ride.helicar",
    name="Mini Helicopters",
    ride_type="mini_helicopters",
    category='gentle',
)
HAUNTED_HOUSE = RideObjectInfo(
    identifier="rct2.ride.hhbuild",
    name="Haunted House",
    ride_type="haunted_house",
    category='gentle',
    tiles_x=3,
    tiles_y=3,
    clearance_height=160,
)
MAZE = RideObjectInfo(
    identifier="rct2.ride.hmaze",
    name="Maze",
    ride_type="maze",
    category='gentle',
)
HAUNTED_MANSION_CARS = RideObjectInfo(
    identifier="rct2.ride.hmcar",
    name="Haunted Mansion Cars",
    ride_type="ghost_train",
    category='gentle',
)
HOT_DOG_STALL = RideObjectInfo(
    identifier="rct2.ride.hotds",
    name="Hot Dog Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SPIRAL_SLIDE = RideObjectInfo(
    identifier="rct2.ride.hskelt",
    name="Spiral Slide",
    ride_type="spiral_slide",
    category='gentle',
    tiles_x=2,
    tiles_y=2,
    clearance_height=128,
)
FRUITY_ICES_STALL = RideObjectInfo(
    identifier="rct2.ride.icecr1",
    name="Fruity Ices Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
ICE_CREAM_CONE_STALL = RideObjectInfo(
    identifier="rct2.ride.icecr2",
    name="Ice Cream Cone Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
ICED_TEA_STALL = RideObjectInfo(
    identifier="rct2.ride.icetst",
    name="Iced Tea Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
INFORMATION_KIOSK = RideObjectInfo(
    identifier="rct2.ride.infok",
    name="Information Kiosk",
    ride_type="information_kiosk",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=48,
)
_6_SEATER_BOBSLEDS = RideObjectInfo(
    identifier="rct2.ride.intbob",
    name="6-seater Bobsleds",
    ride_type="bobsleigh_rc",
    category='rollercoaster',
)
IMPULSE_TRAINS = RideObjectInfo(
    identifier="rct2.ride.intinv",
    name="Impulse Trains",
    ride_type="inverted_impulse_rc",
    category='rollercoaster',
)
GIGA_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.intst",
    name="Giga Coaster Trains",
    ride_type="giga_rc",
    category='rollercoaster',
)
FOUR_SEATER_CARS = RideObjectInfo(
    identifier="rct2.ride.ivmc1",
    name="Four-seater Cars",
    ride_type="inverted_hairpin_rc",
    category='rollercoaster',
)
JET_SKIS = RideObjectInfo(
    identifier="rct2.ride.jski",
    name="Jet Skis",
    ride_type="boat_hire",
    category=['water', 'thrill'],
)
TOBOGGAN_CARS = RideObjectInfo(
    identifier="rct2.ride.jstar1",
    name="Toboggan Cars",
    ride_type="mini_rc",
    category='rollercoaster',
)
GO_KARTS = RideObjectInfo(
    identifier="rct2.ride.kart1",
    name="Go-Karts",
    ride_type="go_karts",
    category='thrill',
)
LEMONADE_STALL = RideObjectInfo(
    identifier="rct2.ride.lemst",
    name="Lemonade Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
LOGS = RideObjectInfo(
    identifier="rct2.ride.lfb1",
    name="Logs",
    ride_type="log_flume",
    category='water',
)
LIFT_CABIN = RideObjectInfo(
    identifier="rct2.ride.lift1",
    name="Lift Cabin",
    ride_type="lift",
    category='transport',
)
MEATBALL_SOUP_STALL = RideObjectInfo(
    identifier="rct2.ride.mbsoup",
    name="Meatball Soup Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
MAGIC_CARPET = RideObjectInfo(
    identifier="rct2.ride.mcarpet1",
    name="Magic Carpet",
    ride_type="magic_carpet",
    category='thrill',
    tiles_x=1,
    tiles_y=4,
    clearance_height=176,
)
ARTICULATED_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.mft",
    name="Articulated Roller Coaster Trains",
    ride_type="wooden_rc",
    category='rollercoaster',
)
MERRY_GO_ROUND = RideObjectInfo(
    identifier="rct2.ride.mgr1",
    name="Merry-Go-Round",
    ride_type="merry_go_round",
    category='gentle',
    tiles_x=3,
    tiles_y=3,
    clearance_height=64,
)
BICYCLES = RideObjectInfo(
    identifier="rct2.ride.monbk",
    name="Bicycles",
    ride_type="monorail_cycles",
    category=['gentle', 'transport'],
)
STREAMLINED_MONORAIL_TRAINS = RideObjectInfo(
    identifier="rct2.ride.mono1",
    name="Streamlined Monorail Trains",
    ride_type="monorail",
    category='transport',
)
SMALL_MONORAIL_CARS = RideObjectInfo(
    identifier="rct2.ride.mono2",
    name="Small Monorail Cars",
    ride_type="monorail",
    category='transport',
)
RETRO_STYLE_MONORAIL_TRAINS = RideObjectInfo(
    identifier="rct2.ride.mono3",
    name="Retro-style Monorail Trains",
    ride_type="monorail",
    category='transport',
)
_4_ACROSS_INVERTED_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.nemt",
    name="4-across Inverted Roller Coaster Trains",
    ride_type="inverted_rc",
    category='rollercoaster',
)
STEAM_TRAINS = RideObjectInfo(
    identifier="rct2.ride.nrl",
    name="Steam Trains",
    ride_type="miniature_railway",
    category='transport',
)
STEAM_TRAINS_WITH_COVERED_CARS = RideObjectInfo(
    identifier="rct2.ride.nrl2",
    name="Steam Trains with Covered Cars",
    ride_type="miniature_railway",
    category='transport',
)
SINGLE_DECK_CABIN = RideObjectInfo(
    identifier="rct2.ride.obs1",
    name="Single-deck Cabin",
    ride_type="observation_tower",
    category='gentle',
)
DOUBLE_DECK_CABIN = RideObjectInfo(
    identifier="rct2.ride.obs2",
    name="Double-deck Cabin",
    ride_type="observation_tower",
    category='gentle',
)
PIZZA_STALL = RideObjectInfo(
    identifier="rct2.ride.pizzs",
    name="Pizza Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
POWERED_MINE_TRAINS = RideObjectInfo(
    identifier="rct2.ride.pmt1",
    name="Powered Mine Trains",
    ride_type="mine_ride",
    category='rollercoaster',
)
POPCORN_STALL = RideObjectInfo(
    identifier="rct2.ride.popcs",
    name="Popcorn Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
LIM_LAUNCHED_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.premt1",
    name="LIM Launched Roller Coaster Trains",
    ride_type="lim_launched_rc",
    category='rollercoaster',
)
PRETZEL_STALL = RideObjectInfo(
    identifier="rct2.ride.pretst",
    name="Pretzel Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
WOODEN_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.ptct1",
    name="Wooden Roller Coaster Trains",
    ride_type="wooden_rc",
    category='rollercoaster',
)
WOODEN_ROLLER_COASTER_TRAINS_6_SEATER = RideObjectInfo(
    identifier="rct2.ride.ptct2",
    name="Wooden Roller Coaster Trains (6 seater)",
    ride_type="wooden_rc",
    category='rollercoaster',
)
WOODEN_ROLLER_COASTER_TRAINS_6_SEATER_REVERSED = RideObjectInfo(
    identifier="rct2.ride.ptct2r",
    name="Wooden Roller Coaster Trains (6 seater, Reversed)",
    ride_type="wooden_rc",
    category='rollercoaster',
)
RIVER_RAPIDS_BOATS = RideObjectInfo(
    identifier="rct2.ride.rapboat",
    name="River Rapids Boats",
    ride_type="river_rapids",
    category=['water', 'thrill'],
)
ROWING_BOATS = RideObjectInfo(
    identifier="rct2.ride.rboat",
    name="Rowing Boats",
    ride_type="boat_hire",
    category=['water', 'gentle'],
)
ROCKET_CARS = RideObjectInfo(
    identifier="rct2.ride.rckc",
    name="Rocket Cars",
    ride_type="mini_rc",
    category='rollercoaster',
)
RACING_CARS = RideObjectInfo(
    identifier="rct2.ride.rcr",
    name="Racing Cars",
    ride_type="car_ride",
    category='gentle',
)
REVERSER_CARS = RideObjectInfo(
    identifier="rct2.ride.revcar",
    name="Reverser Cars",
    ride_type="reverser_rc",
    category='rollercoaster',
)
REVERSE_FREEFALL_CAR = RideObjectInfo(
    identifier="rct2.ride.revf1",
    name="Reverse Freefall Car",
    ride_type="reverse_freefall_rc",
    category='rollercoaster',
)
RAFTS = RideObjectInfo(
    identifier="rct2.ride.rftboat",
    name="Rafts",
    ride_type="river_rafts",
    category=['water', 'transport'],
)
ROAST_SAUSAGE_STALL = RideObjectInfo(
    identifier="rct2.ride.rsaus",
    name="Roast Sausage Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SOAP_BOXES = RideObjectInfo(
    identifier="rct2.ride.sbox",
    name="Soap Boxes",
    ride_type="steeplechase",
    category='rollercoaster',
)
LOOPING_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.scht1",
    name="Looping Roller Coaster Trains",
    ride_type="looping_rc",
    category='rollercoaster',
)
WOODEN_SIDE_FRICTION_CARS = RideObjectInfo(
    identifier="rct2.ride.sfric1",
    name="Wooden Side-Friction Cars",
    ride_type="side_friction_rc",
    category='rollercoaster',
)
MOTION_SIMULATOR = RideObjectInfo(
    identifier="rct2.ride.simpod",
    name="Motion Simulator",
    ride_type="motion_simulator",
    category='thrill',
    tiles_x=2,
    tiles_y=2,
    clearance_height=64,
)
LAY_DOWN_CARS = RideObjectInfo(
    identifier="rct2.ride.skytr",
    name="Lay-down Cars",
    ride_type="mini_suspended_rc",
    category='rollercoaster',
)
FACE_OFF_CARS = RideObjectInfo(
    identifier="rct2.ride.slcfo",
    name="Face-off Cars",
    ride_type="compact_inverted_rc",
    category='rollercoaster',
)
COMPACT_INVERTED_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.slct",
    name="Compact Inverted Coaster Trains",
    ride_type="compact_inverted_rc",
    category='rollercoaster',
)
MOUSE_CARS = RideObjectInfo(
    identifier="rct2.ride.smc1",
    name="Mouse Cars",
    ride_type="steel_wild_mouse",
    category='rollercoaster',
)
MINE_CARS = RideObjectInfo(
    identifier="rct2.ride.smc2",
    name="Mine Cars",
    ride_type="steel_wild_mouse",
    category='rollercoaster',
)
SUSPENDED_MONORAIL_TRAINS = RideObjectInfo(
    identifier="rct2.ride.smono",
    name="Suspended Monorail Trains",
    ride_type="suspended_monorail",
    category='transport',
)
SOUVENIR_STALL = RideObjectInfo(
    identifier="rct2.ride.souvs",
    name="Souvenir Stall",
    ride_type="shop",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SOYBEAN_MILK_STALL = RideObjectInfo(
    identifier="rct2.ride.soybean",
    name="Soybean Milk Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SPLASH_BOATS = RideObjectInfo(
    identifier="rct2.ride.spboat",
    name="Splash Boats",
    ride_type="splash_boats",
    category=['water', 'thrill'],
)
SPORTS_CARS = RideObjectInfo(
    identifier="rct2.ride.spcar",
    name="Sports Cars",
    ride_type="car_ride",
    category='gentle',
)
SPIRAL_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.spdrcr",
    name="Spiral Roller Coaster Trains",
    ride_type="spiral_rc",
    category='rollercoaster',
)
SEA_FOOD_STALL = RideObjectInfo(
    identifier="rct2.ride.sqdst",
    name="Sea Food Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SPACE_RINGS = RideObjectInfo(
    identifier="rct2.ride.srings",
    name="Space Rings",
    ride_type="space_rings",
    category='gentle',
    tiles_x=3,
    tiles_y=3,
    clearance_height=48,
)
LAUNCHED_FREEFALL_CAR = RideObjectInfo(
    identifier="rct2.ride.ssc1",
    name="Launched Freefall Car",
    ride_type="launched_freefall",
    category='thrill',
)
STAR_FRUIT_DRINK_STALL = RideObjectInfo(
    identifier="rct2.ride.starfrdr",
    name="Star Fruit Drink Stall",
    ride_type="drink_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
HORSES = RideObjectInfo(
    identifier="rct2.ride.steep1",
    name="Horses",
    ride_type="steeplechase",
    category='rollercoaster',
)
MOTORBIKES = RideObjectInfo(
    identifier="rct2.ride.steep2",
    name="Motorbikes",
    ride_type="steeplechase",
    category='rollercoaster',
)
SUBMARINES = RideObjectInfo(
    identifier="rct2.ride.submar",
    name="Submarines",
    ride_type="submarine_ride",
    category=['gentle', 'water'],
)
SUB_SANDWICH_STALL = RideObjectInfo(
    identifier="rct2.ride.substl",
    name="Sub Sandwich Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SUNGLASSES_STALL = RideObjectInfo(
    identifier="rct2.ride.sungst",
    name="Sunglasses Stall",
    ride_type="shop",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
SWANS = RideObjectInfo(
    identifier="rct2.ride.swans",
    name="Swans",
    ride_type="boat_hire",
    category=['water', 'gentle'],
)
PIRATE_SHIP = RideObjectInfo(
    identifier="rct2.ride.swsh1",
    name="Pirate Ship",
    ride_type="swinging_ship",
    category='thrill',
    tiles_x=1,
    tiles_y=5,
    clearance_height=112,
)
SWINGING_INVERTER_SHIP = RideObjectInfo(
    identifier="rct2.ride.swsh2",
    name="Swinging Inverter Ship",
    ride_type="swinging_inverter_ship",
    category='thrill',
    tiles_x=1,
    tiles_y=4,
    clearance_height=176,
)
AIR_POWERED_VERTICAL_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.thcar",
    name="Air Powered Vertical Coaster Trains",
    ride_type="air_powered_vertical_rc",
    category='rollercoaster',
)
RESTROOM = RideObjectInfo(
    identifier="rct2.ride.tlt1",
    name="Restroom",
    ride_type="toilets",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=32,
)
RESTROOM_2 = RideObjectInfo(
    identifier="rct2.ride.tlt2",
    name="Restroom",
    ride_type="toilets",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=32,
)
CANDY_APPLE_STALL = RideObjectInfo(
    identifier="rct2.ride.toffs",
    name="Candy Apple Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
STAND_UP_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.togst",
    name="Stand-up Roller Coaster Trains",
    ride_type="stand_up_rc",
    category='rollercoaster',
)
TOP_SPIN = RideObjectInfo(
    identifier="rct2.ride.topsp1",
    name="Top Spin",
    ride_type="top_spin",
    category='thrill',
    tiles_x=3,
    tiles_y=3,
    clearance_height=112,
)
TRAMS = RideObjectInfo(
    identifier="rct2.ride.tram1",
    name="Trams",
    ride_type="miniature_railway",
    category='transport',
)
WATER_TRICYCLES = RideObjectInfo(
    identifier="rct2.ride.trike",
    name="Water Tricycles",
    ride_type="boat_hire",
    category=['water', 'gentle'],
)
PICKUP_TRUCKS = RideObjectInfo(
    identifier="rct2.ride.truck1",
    name="Pickup Trucks",
    ride_type="car_ride",
    category='gentle',
)
T_SHIRT_STALL = RideObjectInfo(
    identifier="rct2.ride.tshrt",
    name="T-Shirt Stall",
    ride_type="shop",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
TWIST = RideObjectInfo(
    identifier="rct2.ride.twist1",
    name="Twist",
    ride_type="twist",
    category='thrill',
    tiles_x=3,
    tiles_y=3,
    clearance_height=64,
)
SNOW_CUPS = RideObjectInfo(
    identifier="rct2.ride.twist2",
    name="Snow Cups",
    ride_type="twist",
    category='thrill',
    tiles_x=3,
    tiles_y=3,
    clearance_height=64,
)
TWISTER_CARS = RideObjectInfo(
    identifier="rct2.ride.utcar",
    name="Twister Cars",
    ride_type="heartline_twister_rc",
    category='rollercoaster',
)
TWISTER_CARS_STARTING_REVERSED = RideObjectInfo(
    identifier="rct2.ride.utcarr",
    name="Twister Cars (starting reversed)",
    ride_type="heartline_twister_rc",
    category='rollercoaster',
)
VINTAGE_CARS = RideObjectInfo(
    identifier="rct2.ride.vcr",
    name="Vintage Cars",
    ride_type="car_ride",
    category='gentle',
)
VERTICAL_SHUTTLE_CARS = RideObjectInfo(
    identifier="rct2.ride.vekdv",
    name="Vertical Shuttle Cars",
    ride_type="compact_inverted_rc",
    category='rollercoaster',
)
LAY_DOWN_ROLLER_COASTER_TRAINS = RideObjectInfo(
    identifier="rct2.ride.vekst",
    name="Lay-down Roller Coaster Trains",
    ride_type="lay_down_rc",
    category='rollercoaster',
)
SWINGING_FLOORLESS_CARS = RideObjectInfo(
    identifier="rct2.ride.vekvamp",
    name="Swinging Floorless Cars",
    ride_type="suspended_swinging_rc",
    category='rollercoaster',
)
VIRGINIA_REEL_TUBS = RideObjectInfo(
    identifier="rct2.ride.vreel",
    name="Virginia Reel Tubs",
    ride_type="virginia_reel",
    category='rollercoaster',
)
AUTOMOBILE_CARS = RideObjectInfo(
    identifier="rct2.ride.wcatc",
    name="Automobile Cars",
    ride_type="mini_rc",
    category='rollercoaster',
)
MINE_CARS_2 = RideObjectInfo(
    identifier="rct2.ride.wmmine",
    name="Mine Cars",
    ride_type="wooden_wild_mouse",
    category='rollercoaster',
)
MOUSE_CARS_2 = RideObjectInfo(
    identifier="rct2.ride.wmouse",
    name="Mouse Cars",
    ride_type="wooden_wild_mouse",
    category='rollercoaster',
)
SPINNING_MOUSE_CARS = RideObjectInfo(
    identifier="rct2.ride.wmspin",
    name="Spinning Mouse Cars",
    ride_type="spinning_wild_mouse",
    category='rollercoaster',
)
WONTON_SOUP_STALL = RideObjectInfo(
    identifier="rct2.ride.wonton",
    name="Wonton Soup Stall",
    ride_type="food_stall",
    category='stall',
    tiles_x=1,
    tiles_y=1,
    clearance_height=64,
)
LADYBIRD_TRAINS = RideObjectInfo(
    identifier="rct2.ride.zldb",
    name="Ladybird Trains",
    ride_type="junior_rc",
    category='rollercoaster',
)
LOG_TRAINS = RideObjectInfo(
    identifier="rct2.ride.zlog",
    name="Log Trains",
    ride_type="junior_rc",
    category='rollercoaster',
)

# ── Category namespaces ──────────────────────────────────────────────


class _Gentle:
    """Gentle ride objects."""
    BICYCLES: RideObjectInfo = BICYCLES
    BUMPER_CARS: RideObjectInfo = BUMPER_CARS
    CANOES: RideObjectInfo = CANOES
    CHESHIRE_CATS: RideObjectInfo = CHESHIRE_CATS
    CIRCUS: RideObjectInfo = CIRCUS
    CROOKED_HOUSE: RideObjectInfo = CROOKED_HOUSE
    DOUBLE_DECK_CABIN: RideObjectInfo = DOUBLE_DECK_CABIN
    FERRIS_WHEEL: RideObjectInfo = FERRIS_WHEEL
    FLYING_SAUCERS: RideObjectInfo = FLYING_SAUCERS
    GHOST_TRAIN_CARS: RideObjectInfo = GHOST_TRAIN_CARS
    HAUNTED_HOUSE: RideObjectInfo = HAUNTED_HOUSE
    HAUNTED_MANSION_CARS: RideObjectInfo = HAUNTED_MANSION_CARS
    MAZE: RideObjectInfo = MAZE
    MERRY_GO_ROUND: RideObjectInfo = MERRY_GO_ROUND
    MINI_GOLF: RideObjectInfo = MINI_GOLF
    MINI_HELICOPTERS: RideObjectInfo = MINI_HELICOPTERS
    MONSTER_TRUCKS: RideObjectInfo = MONSTER_TRUCKS
    PICKUP_TRUCKS: RideObjectInfo = PICKUP_TRUCKS
    RACING_CARS: RideObjectInfo = RACING_CARS
    ROWING_BOATS: RideObjectInfo = ROWING_BOATS
    SINGLE_DECK_CABIN: RideObjectInfo = SINGLE_DECK_CABIN
    SPACE_RINGS: RideObjectInfo = SPACE_RINGS
    SPIRAL_SLIDE: RideObjectInfo = SPIRAL_SLIDE
    SPORTS_CARS: RideObjectInfo = SPORTS_CARS
    SUBMARINES: RideObjectInfo = SUBMARINES
    SWANS: RideObjectInfo = SWANS
    VINTAGE_CARS: RideObjectInfo = VINTAGE_CARS
    WATER_TRICYCLES: RideObjectInfo = WATER_TRICYCLES


class _Rollercoaster:
    """Rollercoaster ride objects."""
    AIR_POWERED_VERTICAL_COASTER_TRAINS: RideObjectInfo = AIR_POWERED_VERTICAL_COASTER_TRAINS
    ARTICULATED_ROLLER_COASTER_TRAINS: RideObjectInfo = ARTICULATED_ROLLER_COASTER_TRAINS
    AUTOMOBILE_CARS: RideObjectInfo = AUTOMOBILE_CARS
    BOBSLED_TRAINS: RideObjectInfo = BOBSLED_TRAINS
    COASTER_BOATS: RideObjectInfo = COASTER_BOATS
    COMPACT_INVERTED_COASTER_TRAINS: RideObjectInfo = COMPACT_INVERTED_COASTER_TRAINS
    CORKSCREW_ROLLER_COASTER_TRAINS: RideObjectInfo = CORKSCREW_ROLLER_COASTER_TRAINS
    DINGHIES: RideObjectInfo = DINGHIES
    FACE_OFF_CARS: RideObjectInfo = FACE_OFF_CARS
    FLOORLESS_TWISTER_TRAINS: RideObjectInfo = FLOORLESS_TWISTER_TRAINS
    FLYING_ROLLER_COASTER_TRAINS: RideObjectInfo = FLYING_ROLLER_COASTER_TRAINS
    FOUR_SEATER_CARS: RideObjectInfo = FOUR_SEATER_CARS
    GIGA_COASTER_TRAINS: RideObjectInfo = GIGA_COASTER_TRAINS
    HORSES: RideObjectInfo = HORSES
    HYPERCOASTER_TRAINS: RideObjectInfo = HYPERCOASTER_TRAINS
    HYPER_TWISTER_TRAINS: RideObjectInfo = HYPER_TWISTER_TRAINS
    HYPER_TWISTER_TRAINS_WIDE_CARS: RideObjectInfo = HYPER_TWISTER_TRAINS_WIDE_CARS
    IMPULSE_TRAINS: RideObjectInfo = IMPULSE_TRAINS
    LADYBIRD_TRAINS: RideObjectInfo = LADYBIRD_TRAINS
    LAY_DOWN_CARS: RideObjectInfo = LAY_DOWN_CARS
    LAY_DOWN_ROLLER_COASTER_TRAINS: RideObjectInfo = LAY_DOWN_ROLLER_COASTER_TRAINS
    LIM_LAUNCHED_ROLLER_COASTER_TRAINS: RideObjectInfo = LIM_LAUNCHED_ROLLER_COASTER_TRAINS
    LOG_TRAINS: RideObjectInfo = LOG_TRAINS
    LOOPING_ROLLER_COASTER_TRAINS: RideObjectInfo = LOOPING_ROLLER_COASTER_TRAINS
    MINE_CARS: RideObjectInfo = MINE_CARS
    MINE_CARS_2: RideObjectInfo = MINE_CARS_2
    MINE_TRAINS: RideObjectInfo = MINE_TRAINS
    MOTORBIKES: RideObjectInfo = MOTORBIKES
    MOUSE_CARS: RideObjectInfo = MOUSE_CARS
    MOUSE_CARS_2: RideObjectInfo = MOUSE_CARS_2
    MULTI_DIMENSION_COASTER_TRAINS: RideObjectInfo = MULTI_DIMENSION_COASTER_TRAINS
    POWERED_MINE_TRAINS: RideObjectInfo = POWERED_MINE_TRAINS
    REVERSER_CARS: RideObjectInfo = REVERSER_CARS
    REVERSE_FREEFALL_CAR: RideObjectInfo = REVERSE_FREEFALL_CAR
    ROCKET_CARS: RideObjectInfo = ROCKET_CARS
    SIX_SEATER_TWISTER_TRAINS: RideObjectInfo = SIX_SEATER_TWISTER_TRAINS
    SOAP_BOXES: RideObjectInfo = SOAP_BOXES
    SPINNING_MOUSE_CARS: RideObjectInfo = SPINNING_MOUSE_CARS
    SPIRAL_ROLLER_COASTER_TRAINS: RideObjectInfo = SPIRAL_ROLLER_COASTER_TRAINS
    STAND_UP_ROLLER_COASTER_TRAINS: RideObjectInfo = STAND_UP_ROLLER_COASTER_TRAINS
    STAND_UP_TWISTER_TRAINS: RideObjectInfo = STAND_UP_TWISTER_TRAINS
    SUSPENDED_SWINGING_AIRPLANE_CARS: RideObjectInfo = SUSPENDED_SWINGING_AIRPLANE_CARS
    SUSPENDED_SWINGING_CARS: RideObjectInfo = SUSPENDED_SWINGING_CARS
    SWINGING_CARS: RideObjectInfo = SWINGING_CARS
    SWINGING_FLOORLESS_CARS: RideObjectInfo = SWINGING_FLOORLESS_CARS
    TOBOGGAN_CARS: RideObjectInfo = TOBOGGAN_CARS
    TWISTER_CARS: RideObjectInfo = TWISTER_CARS
    TWISTER_CARS_STARTING_REVERSED: RideObjectInfo = TWISTER_CARS_STARTING_REVERSED
    TWISTER_TRAINS: RideObjectInfo = TWISTER_TRAINS
    VERTICAL_SHUTTLE_CARS: RideObjectInfo = VERTICAL_SHUTTLE_CARS
    VIRGINIA_REEL_TUBS: RideObjectInfo = VIRGINIA_REEL_TUBS
    WOODEN_ROLLER_COASTER_TRAINS: RideObjectInfo = WOODEN_ROLLER_COASTER_TRAINS
    WOODEN_ROLLER_COASTER_TRAINS_6_SEATER: RideObjectInfo = WOODEN_ROLLER_COASTER_TRAINS_6_SEATER
    WOODEN_ROLLER_COASTER_TRAINS_6_SEATER_REVERSED: RideObjectInfo = WOODEN_ROLLER_COASTER_TRAINS_6_SEATER_REVERSED
    WOODEN_SIDE_FRICTION_CARS: RideObjectInfo = WOODEN_SIDE_FRICTION_CARS
    _4_ACROSS_INVERTED_ROLLER_COASTER_TRAINS: RideObjectInfo = _4_ACROSS_INVERTED_ROLLER_COASTER_TRAINS
    _6_SEATER_BOBSLEDS: RideObjectInfo = _6_SEATER_BOBSLEDS


class _Stall:
    """Stall ride objects."""
    ATM: RideObjectInfo = ATM
    BALLOON_STALL: RideObjectInfo = BALLOON_STALL
    BEEF_NOODLES_STALL: RideObjectInfo = BEEF_NOODLES_STALL
    BURGER_BAR: RideObjectInfo = BURGER_BAR
    CANDY_APPLE_STALL: RideObjectInfo = CANDY_APPLE_STALL
    CHICKEN_NUGGETS_STALL: RideObjectInfo = CHICKEN_NUGGETS_STALL
    COFFEE_SHOP: RideObjectInfo = COFFEE_SHOP
    COOKIE_SHOP: RideObjectInfo = COOKIE_SHOP
    COTTON_CANDY_STALL: RideObjectInfo = COTTON_CANDY_STALL
    DONUT_SHOP: RideObjectInfo = DONUT_SHOP
    DRINKS_STALL: RideObjectInfo = DRINKS_STALL
    FIRST_AID_ROOM: RideObjectInfo = FIRST_AID_ROOM
    FRIED_CHICKEN_STALL: RideObjectInfo = FRIED_CHICKEN_STALL
    FRIED_RICE_NOODLES_STALL: RideObjectInfo = FRIED_RICE_NOODLES_STALL
    FRIES_SHOP: RideObjectInfo = FRIES_SHOP
    FRIES_STALL: RideObjectInfo = FRIES_STALL
    FRUITY_ICES_STALL: RideObjectInfo = FRUITY_ICES_STALL
    FUNNEL_CAKE_SHOP: RideObjectInfo = FUNNEL_CAKE_SHOP
    HAT_STALL: RideObjectInfo = HAT_STALL
    HOT_CHOCOLATE_STALL: RideObjectInfo = HOT_CHOCOLATE_STALL
    HOT_DOG_STALL: RideObjectInfo = HOT_DOG_STALL
    ICED_TEA_STALL: RideObjectInfo = ICED_TEA_STALL
    ICE_CREAM_CONE_STALL: RideObjectInfo = ICE_CREAM_CONE_STALL
    INFORMATION_KIOSK: RideObjectInfo = INFORMATION_KIOSK
    LEMONADE_STALL: RideObjectInfo = LEMONADE_STALL
    MEATBALL_SOUP_STALL: RideObjectInfo = MEATBALL_SOUP_STALL
    PIZZA_STALL: RideObjectInfo = PIZZA_STALL
    POPCORN_STALL: RideObjectInfo = POPCORN_STALL
    PRETZEL_STALL: RideObjectInfo = PRETZEL_STALL
    RESTROOM: RideObjectInfo = RESTROOM
    RESTROOM_2: RideObjectInfo = RESTROOM_2
    ROAST_SAUSAGE_STALL: RideObjectInfo = ROAST_SAUSAGE_STALL
    SEA_FOOD_STALL: RideObjectInfo = SEA_FOOD_STALL
    SOUVENIR_STALL: RideObjectInfo = SOUVENIR_STALL
    SOYBEAN_MILK_STALL: RideObjectInfo = SOYBEAN_MILK_STALL
    STAR_FRUIT_DRINK_STALL: RideObjectInfo = STAR_FRUIT_DRINK_STALL
    SUB_SANDWICH_STALL: RideObjectInfo = SUB_SANDWICH_STALL
    SUJEONGGWA_STALL: RideObjectInfo = SUJEONGGWA_STALL
    SUNGLASSES_STALL: RideObjectInfo = SUNGLASSES_STALL
    T_SHIRT_STALL: RideObjectInfo = T_SHIRT_STALL
    WONTON_SOUP_STALL: RideObjectInfo = WONTON_SOUP_STALL


class _Thrill:
    """Thrill ride objects."""
    BUMPER_BOATS: RideObjectInfo = BUMPER_BOATS
    ENTERPRISE: RideObjectInfo = ENTERPRISE
    GO_KARTS: RideObjectInfo = GO_KARTS
    JET_SKIS: RideObjectInfo = JET_SKIS
    LAUNCHED_FREEFALL_CAR: RideObjectInfo = LAUNCHED_FREEFALL_CAR
    MAGIC_CARPET: RideObjectInfo = MAGIC_CARPET
    MOTION_SIMULATOR: RideObjectInfo = MOTION_SIMULATOR
    PIRATE_SHIP: RideObjectInfo = PIRATE_SHIP
    RIVER_RAPIDS_BOATS: RideObjectInfo = RIVER_RAPIDS_BOATS
    ROTO_DROP: RideObjectInfo = ROTO_DROP
    SNOW_CUPS: RideObjectInfo = SNOW_CUPS
    SPLASH_BOATS: RideObjectInfo = SPLASH_BOATS
    SWINGING_INVERTER_SHIP: RideObjectInfo = SWINGING_INVERTER_SHIP
    TOP_SPIN: RideObjectInfo = TOP_SPIN
    TWIST: RideObjectInfo = TWIST
    _3D_CINEMA: RideObjectInfo = _3D_CINEMA


class _Transport:
    """Transport ride objects."""
    AMERICAN_STYLE_STEAM_TRAINS: RideObjectInfo = AMERICAN_STYLE_STEAM_TRAINS
    BICYCLES: RideObjectInfo = BICYCLES
    CHAIRLIFT_CARS: RideObjectInfo = CHAIRLIFT_CARS
    LIFT_CABIN: RideObjectInfo = LIFT_CABIN
    RAFTS: RideObjectInfo = RAFTS
    RETRO_STYLE_MONORAIL_TRAINS: RideObjectInfo = RETRO_STYLE_MONORAIL_TRAINS
    SKI_LIFT_CHAIRS: RideObjectInfo = SKI_LIFT_CHAIRS
    SMALL_MONORAIL_CARS: RideObjectInfo = SMALL_MONORAIL_CARS
    STEAM_TRAINS: RideObjectInfo = STEAM_TRAINS
    STEAM_TRAINS_WITH_COVERED_CARS: RideObjectInfo = STEAM_TRAINS_WITH_COVERED_CARS
    STREAMLINED_MONORAIL_TRAINS: RideObjectInfo = STREAMLINED_MONORAIL_TRAINS
    SUSPENDED_MONORAIL_TRAINS: RideObjectInfo = SUSPENDED_MONORAIL_TRAINS
    TRAMS: RideObjectInfo = TRAMS


class _Water:
    """Water ride objects."""
    BUMPER_BOATS: RideObjectInfo = BUMPER_BOATS
    CANOES: RideObjectInfo = CANOES
    COASTER_BOATS: RideObjectInfo = COASTER_BOATS
    DINGHIES: RideObjectInfo = DINGHIES
    JET_SKIS: RideObjectInfo = JET_SKIS
    LOGS: RideObjectInfo = LOGS
    RAFTS: RideObjectInfo = RAFTS
    RIVER_RAPIDS_BOATS: RideObjectInfo = RIVER_RAPIDS_BOATS
    ROWING_BOATS: RideObjectInfo = ROWING_BOATS
    SPLASH_BOATS: RideObjectInfo = SPLASH_BOATS
    SUBMARINES: RideObjectInfo = SUBMARINES
    SWANS: RideObjectInfo = SWANS
    WATER_TRICYCLES: RideObjectInfo = WATER_TRICYCLES


class RideObjects:
    """All ride objects, organized by category.

    Access by category:
        RideObjects.gentle.MERRY_GO_ROUND
        RideObjects.stall.BURGER_BAR

    Or iterate all:
        RideObjects.all()
    """

    gentle = _Gentle()
    rollercoaster = _Rollercoaster()
    stall = _Stall()
    thrill = _Thrill()
    transport = _Transport()
    water = _Water()

    @staticmethod
    def all() -> list[RideObjectInfo]:
        """Return all 155 ride objects."""
        return [
            MONSTER_TRUCKS,
            AMERICAN_STYLE_STEAM_TRAINS,
            MINE_TRAINS,
            SUSPENDED_SWINGING_CARS,
            SUSPENDED_SWINGING_AIRPLANE_CARS,
            CORKSCREW_ROLLER_COASTER_TRAINS,
            HYPERCOASTER_TRAINS,
            MULTI_DIMENSION_COASTER_TRAINS,
            ATM,
            BALLOON_STALL,
            SWINGING_CARS,
            BUMPER_BOATS,
            FLYING_ROLLER_COASTER_TRAINS,
            FLOORLESS_TWISTER_TRAINS,
            HYPER_TWISTER_TRAINS_WIDE_CARS,
            TWISTER_TRAINS,
            STAND_UP_TWISTER_TRAINS,
            SIX_SEATER_TWISTER_TRAINS,
            BEEF_NOODLES_STALL,
            BOBSLED_TRAINS,
            BURGER_BAR,
            _3D_CINEMA,
            CANOES,
            CROOKED_HOUSE,
            FRIED_CHICKEN_STALL,
            CHICKEN_NUGGETS_STALL,
            FRIES_SHOP,
            FRIES_STALL,
            SUJEONGGWA_STALL,
            CIRCUS,
            CHAIRLIFT_CARS,
            SKI_LIFT_CHAIRS,
            COTTON_CANDY_STALL,
            COFFEE_SHOP,
            COOKIE_SHOP,
            COASTER_BOATS,
            CHESHIRE_CATS,
            DINGHIES,
            BUMPER_CARS,
            DONUT_SHOP,
            DRINKS_STALL,
            ENTERPRISE,
            FIRST_AID_ROOM,
            FRIED_RICE_NOODLES_STALL,
            FLYING_SAUCERS,
            FUNNEL_CAKE_SHOP,
            FERRIS_WHEEL,
            ROTO_DROP,
            MINI_GOLF,
            HYPER_TWISTER_TRAINS,
            GHOST_TRAIN_CARS,
            HAT_STALL,
            HOT_CHOCOLATE_STALL,
            MINI_HELICOPTERS,
            HAUNTED_HOUSE,
            MAZE,
            HAUNTED_MANSION_CARS,
            HOT_DOG_STALL,
            SPIRAL_SLIDE,
            FRUITY_ICES_STALL,
            ICE_CREAM_CONE_STALL,
            ICED_TEA_STALL,
            INFORMATION_KIOSK,
            _6_SEATER_BOBSLEDS,
            IMPULSE_TRAINS,
            GIGA_COASTER_TRAINS,
            FOUR_SEATER_CARS,
            JET_SKIS,
            TOBOGGAN_CARS,
            GO_KARTS,
            LEMONADE_STALL,
            LOGS,
            LIFT_CABIN,
            MEATBALL_SOUP_STALL,
            MAGIC_CARPET,
            ARTICULATED_ROLLER_COASTER_TRAINS,
            MERRY_GO_ROUND,
            BICYCLES,
            STREAMLINED_MONORAIL_TRAINS,
            SMALL_MONORAIL_CARS,
            RETRO_STYLE_MONORAIL_TRAINS,
            _4_ACROSS_INVERTED_ROLLER_COASTER_TRAINS,
            STEAM_TRAINS,
            STEAM_TRAINS_WITH_COVERED_CARS,
            SINGLE_DECK_CABIN,
            DOUBLE_DECK_CABIN,
            PIZZA_STALL,
            POWERED_MINE_TRAINS,
            POPCORN_STALL,
            LIM_LAUNCHED_ROLLER_COASTER_TRAINS,
            PRETZEL_STALL,
            WOODEN_ROLLER_COASTER_TRAINS,
            WOODEN_ROLLER_COASTER_TRAINS_6_SEATER,
            WOODEN_ROLLER_COASTER_TRAINS_6_SEATER_REVERSED,
            RIVER_RAPIDS_BOATS,
            ROWING_BOATS,
            ROCKET_CARS,
            RACING_CARS,
            REVERSER_CARS,
            REVERSE_FREEFALL_CAR,
            RAFTS,
            ROAST_SAUSAGE_STALL,
            SOAP_BOXES,
            LOOPING_ROLLER_COASTER_TRAINS,
            WOODEN_SIDE_FRICTION_CARS,
            MOTION_SIMULATOR,
            LAY_DOWN_CARS,
            FACE_OFF_CARS,
            COMPACT_INVERTED_COASTER_TRAINS,
            MOUSE_CARS,
            MINE_CARS,
            SUSPENDED_MONORAIL_TRAINS,
            SOUVENIR_STALL,
            SOYBEAN_MILK_STALL,
            SPLASH_BOATS,
            SPORTS_CARS,
            SPIRAL_ROLLER_COASTER_TRAINS,
            SEA_FOOD_STALL,
            SPACE_RINGS,
            LAUNCHED_FREEFALL_CAR,
            STAR_FRUIT_DRINK_STALL,
            HORSES,
            MOTORBIKES,
            SUBMARINES,
            SUB_SANDWICH_STALL,
            SUNGLASSES_STALL,
            SWANS,
            PIRATE_SHIP,
            SWINGING_INVERTER_SHIP,
            AIR_POWERED_VERTICAL_COASTER_TRAINS,
            RESTROOM,
            RESTROOM_2,
            CANDY_APPLE_STALL,
            STAND_UP_ROLLER_COASTER_TRAINS,
            TOP_SPIN,
            TRAMS,
            WATER_TRICYCLES,
            PICKUP_TRUCKS,
            T_SHIRT_STALL,
            TWIST,
            SNOW_CUPS,
            TWISTER_CARS,
            TWISTER_CARS_STARTING_REVERSED,
            VINTAGE_CARS,
            VERTICAL_SHUTTLE_CARS,
            LAY_DOWN_ROLLER_COASTER_TRAINS,
            SWINGING_FLOORLESS_CARS,
            VIRGINIA_REEL_TUBS,
            AUTOMOBILE_CARS,
            MINE_CARS_2,
            MOUSE_CARS_2,
            SPINNING_MOUSE_CARS,
            WONTON_SOUP_STALL,
            LADYBIRD_TRAINS,
            LOG_TRAINS,
        ]

    @staticmethod
    def by_identifier(identifier: str) -> RideObjectInfo | None:
        """Look up a ride object by its identifier string."""
        return _BY_IDENTIFIER.get(identifier)

    @staticmethod
    def by_ride_type(ride_type: str) -> list[RideObjectInfo]:
        """Return all objects for a given ride type string."""
        return [o for o in RideObjects.all() if o.ride_type == ride_type]


# ── Lookup indices ───────────────────────────────────────────────────

_BY_IDENTIFIER: dict[str, RideObjectInfo] = {
    "rct2.ride.4x4": MONSTER_TRUCKS,
    "rct2.ride.aml1": AMERICAN_STYLE_STEAM_TRAINS,
    "rct2.ride.amt1": MINE_TRAINS,
    "rct2.ride.arrsw1": SUSPENDED_SWINGING_CARS,
    "rct2.ride.arrsw2": SUSPENDED_SWINGING_AIRPLANE_CARS,
    "rct2.ride.arrt1": CORKSCREW_ROLLER_COASTER_TRAINS,
    "rct2.ride.arrt2": HYPERCOASTER_TRAINS,
    "rct2.ride.arrx": MULTI_DIMENSION_COASTER_TRAINS,
    "rct2.ride.atm1": ATM,
    "rct2.ride.balln": BALLOON_STALL,
    "rct2.ride.batfl": SWINGING_CARS,
    "rct2.ride.bboat": BUMPER_BOATS,
    "rct2.ride.bmair": FLYING_ROLLER_COASTER_TRAINS,
    "rct2.ride.bmfl": FLOORLESS_TWISTER_TRAINS,
    "rct2.ride.bmrb": HYPER_TWISTER_TRAINS_WIDE_CARS,
    "rct2.ride.bmsd": TWISTER_TRAINS,
    "rct2.ride.bmsu": STAND_UP_TWISTER_TRAINS,
    "rct2.ride.bmvd": SIX_SEATER_TWISTER_TRAINS,
    "rct2.ride.bnoodles": BEEF_NOODLES_STALL,
    "rct2.ride.bob1": BOBSLED_TRAINS,
    "rct2.ride.burgb": BURGER_BAR,
    "rct2.ride.c3d": _3D_CINEMA,
    "rct2.ride.cboat": CANOES,
    "rct2.ride.chbuild": CROOKED_HOUSE,
    "rct2.ride.chcks": FRIED_CHICKEN_STALL,
    "rct2.ride.chknug": CHICKEN_NUGGETS_STALL,
    "rct2.ride.chpsh": FRIES_SHOP,
    "rct2.ride.chpsh2": FRIES_STALL,
    "rct2.ride.cindr": SUJEONGGWA_STALL,
    "rct2.ride.circus1": CIRCUS,
    "rct2.ride.clift1": CHAIRLIFT_CARS,
    "rct2.ride.clift2": SKI_LIFT_CHAIRS,
    "rct2.ride.cndyf": COTTON_CANDY_STALL,
    "rct2.ride.coffs": COFFEE_SHOP,
    "rct2.ride.cookst": COOKIE_SHOP,
    "rct2.ride.cstboat": COASTER_BOATS,
    "rct2.ride.ctcar": CHESHIRE_CATS,
    "rct2.ride.ding1": DINGHIES,
    "rct2.ride.dodg1": BUMPER_CARS,
    "rct2.ride.dough": DONUT_SHOP,
    "rct2.ride.drnks": DRINKS_STALL,
    "rct2.ride.enterp": ENTERPRISE,
    "rct2.ride.faid1": FIRST_AID_ROOM,
    "rct2.ride.frnood": FRIED_RICE_NOODLES_STALL,
    "rct2.ride.fsauc": FLYING_SAUCERS,
    "rct2.ride.funcake": FUNNEL_CAKE_SHOP,
    "rct2.ride.fwh1": FERRIS_WHEEL,
    "rct2.ride.gdrop1": ROTO_DROP,
    "rct2.ride.golf1": MINI_GOLF,
    "rct2.ride.goltr": HYPER_TWISTER_TRAINS,
    "rct2.ride.gtc": GHOST_TRAIN_CARS,
    "rct2.ride.hatst": HAT_STALL,
    "rct2.ride.hchoc": HOT_CHOCOLATE_STALL,
    "rct2.ride.helicar": MINI_HELICOPTERS,
    "rct2.ride.hhbuild": HAUNTED_HOUSE,
    "rct2.ride.hmaze": MAZE,
    "rct2.ride.hmcar": HAUNTED_MANSION_CARS,
    "rct2.ride.hotds": HOT_DOG_STALL,
    "rct2.ride.hskelt": SPIRAL_SLIDE,
    "rct2.ride.icecr1": FRUITY_ICES_STALL,
    "rct2.ride.icecr2": ICE_CREAM_CONE_STALL,
    "rct2.ride.icetst": ICED_TEA_STALL,
    "rct2.ride.infok": INFORMATION_KIOSK,
    "rct2.ride.intbob": _6_SEATER_BOBSLEDS,
    "rct2.ride.intinv": IMPULSE_TRAINS,
    "rct2.ride.intst": GIGA_COASTER_TRAINS,
    "rct2.ride.ivmc1": FOUR_SEATER_CARS,
    "rct2.ride.jski": JET_SKIS,
    "rct2.ride.jstar1": TOBOGGAN_CARS,
    "rct2.ride.kart1": GO_KARTS,
    "rct2.ride.lemst": LEMONADE_STALL,
    "rct2.ride.lfb1": LOGS,
    "rct2.ride.lift1": LIFT_CABIN,
    "rct2.ride.mbsoup": MEATBALL_SOUP_STALL,
    "rct2.ride.mcarpet1": MAGIC_CARPET,
    "rct2.ride.mft": ARTICULATED_ROLLER_COASTER_TRAINS,
    "rct2.ride.mgr1": MERRY_GO_ROUND,
    "rct2.ride.monbk": BICYCLES,
    "rct2.ride.mono1": STREAMLINED_MONORAIL_TRAINS,
    "rct2.ride.mono2": SMALL_MONORAIL_CARS,
    "rct2.ride.mono3": RETRO_STYLE_MONORAIL_TRAINS,
    "rct2.ride.nemt": _4_ACROSS_INVERTED_ROLLER_COASTER_TRAINS,
    "rct2.ride.nrl": STEAM_TRAINS,
    "rct2.ride.nrl2": STEAM_TRAINS_WITH_COVERED_CARS,
    "rct2.ride.obs1": SINGLE_DECK_CABIN,
    "rct2.ride.obs2": DOUBLE_DECK_CABIN,
    "rct2.ride.pizzs": PIZZA_STALL,
    "rct2.ride.pmt1": POWERED_MINE_TRAINS,
    "rct2.ride.popcs": POPCORN_STALL,
    "rct2.ride.premt1": LIM_LAUNCHED_ROLLER_COASTER_TRAINS,
    "rct2.ride.pretst": PRETZEL_STALL,
    "rct2.ride.ptct1": WOODEN_ROLLER_COASTER_TRAINS,
    "rct2.ride.ptct2": WOODEN_ROLLER_COASTER_TRAINS_6_SEATER,
    "rct2.ride.ptct2r": WOODEN_ROLLER_COASTER_TRAINS_6_SEATER_REVERSED,
    "rct2.ride.rapboat": RIVER_RAPIDS_BOATS,
    "rct2.ride.rboat": ROWING_BOATS,
    "rct2.ride.rckc": ROCKET_CARS,
    "rct2.ride.rcr": RACING_CARS,
    "rct2.ride.revcar": REVERSER_CARS,
    "rct2.ride.revf1": REVERSE_FREEFALL_CAR,
    "rct2.ride.rftboat": RAFTS,
    "rct2.ride.rsaus": ROAST_SAUSAGE_STALL,
    "rct2.ride.sbox": SOAP_BOXES,
    "rct2.ride.scht1": LOOPING_ROLLER_COASTER_TRAINS,
    "rct2.ride.sfric1": WOODEN_SIDE_FRICTION_CARS,
    "rct2.ride.simpod": MOTION_SIMULATOR,
    "rct2.ride.skytr": LAY_DOWN_CARS,
    "rct2.ride.slcfo": FACE_OFF_CARS,
    "rct2.ride.slct": COMPACT_INVERTED_COASTER_TRAINS,
    "rct2.ride.smc1": MOUSE_CARS,
    "rct2.ride.smc2": MINE_CARS,
    "rct2.ride.smono": SUSPENDED_MONORAIL_TRAINS,
    "rct2.ride.souvs": SOUVENIR_STALL,
    "rct2.ride.soybean": SOYBEAN_MILK_STALL,
    "rct2.ride.spboat": SPLASH_BOATS,
    "rct2.ride.spcar": SPORTS_CARS,
    "rct2.ride.spdrcr": SPIRAL_ROLLER_COASTER_TRAINS,
    "rct2.ride.sqdst": SEA_FOOD_STALL,
    "rct2.ride.srings": SPACE_RINGS,
    "rct2.ride.ssc1": LAUNCHED_FREEFALL_CAR,
    "rct2.ride.starfrdr": STAR_FRUIT_DRINK_STALL,
    "rct2.ride.steep1": HORSES,
    "rct2.ride.steep2": MOTORBIKES,
    "rct2.ride.submar": SUBMARINES,
    "rct2.ride.substl": SUB_SANDWICH_STALL,
    "rct2.ride.sungst": SUNGLASSES_STALL,
    "rct2.ride.swans": SWANS,
    "rct2.ride.swsh1": PIRATE_SHIP,
    "rct2.ride.swsh2": SWINGING_INVERTER_SHIP,
    "rct2.ride.thcar": AIR_POWERED_VERTICAL_COASTER_TRAINS,
    "rct2.ride.tlt1": RESTROOM,
    "rct2.ride.tlt2": RESTROOM_2,
    "rct2.ride.toffs": CANDY_APPLE_STALL,
    "rct2.ride.togst": STAND_UP_ROLLER_COASTER_TRAINS,
    "rct2.ride.topsp1": TOP_SPIN,
    "rct2.ride.tram1": TRAMS,
    "rct2.ride.trike": WATER_TRICYCLES,
    "rct2.ride.truck1": PICKUP_TRUCKS,
    "rct2.ride.tshrt": T_SHIRT_STALL,
    "rct2.ride.twist1": TWIST,
    "rct2.ride.twist2": SNOW_CUPS,
    "rct2.ride.utcar": TWISTER_CARS,
    "rct2.ride.utcarr": TWISTER_CARS_STARTING_REVERSED,
    "rct2.ride.vcr": VINTAGE_CARS,
    "rct2.ride.vekdv": VERTICAL_SHUTTLE_CARS,
    "rct2.ride.vekst": LAY_DOWN_ROLLER_COASTER_TRAINS,
    "rct2.ride.vekvamp": SWINGING_FLOORLESS_CARS,
    "rct2.ride.vreel": VIRGINIA_REEL_TUBS,
    "rct2.ride.wcatc": AUTOMOBILE_CARS,
    "rct2.ride.wmmine": MINE_CARS_2,
    "rct2.ride.wmouse": MOUSE_CARS_2,
    "rct2.ride.wmspin": SPINNING_MOUSE_CARS,
    "rct2.ride.wonton": WONTON_SOUP_STALL,
    "rct2.ride.zldb": LADYBIRD_TRAINS,
    "rct2.ride.zlog": LOG_TRAINS,
}

# Ride type → TrackElemType integer value for flat rides.
# Derived from C++ RideTypeDescriptor.StartTrackPiece in the RTD headers.
#
# Each flat ride type has a specific track piece that determines:
# 1. The visual model rendered on the map (e.g. a 3x3 carousel vs a 1x1 stall)
# 2. The physical footprint that blocks construction on surrounding tiles
# 3. Whether the ride is considered "constructed" and can be opened
#
# Using the wrong track type (e.g. END_STATION instead of FLAT_TRACK3X3)
# results in invisible rides with no footprint.
#
# Only flat ride types are included — tracked rides (coasters, water rides)
# are not flat rides and cannot be placed with place_flat_ride().
RIDE_TYPE_TRACK_ELEMS: dict[str, int] = {
    "circus": 266,  # flatTrack3x3
    "crooked_house": 266,  # flatTrack3x3
    "dodgems": 259,  # flatTrack4x4
    "ferris_wheel": 265,  # flatTrack1x4C
    "flying_saucers": 259,  # flatTrack4x4
    "haunted_house": 266,  # flatTrack3x3
    "merry_go_round": 266,  # flatTrack3x3
    "space_rings": 266,  # flatTrack3x3
    "spiral_slide": 258,  # flatTrack2x2
    "cash_machine": 262,  # flatTrack1x1A
    "drink_stall": 262,  # flatTrack1x1A
    "first_aid": 262,  # flatTrack1x1A
    "food_stall": 262,  # flatTrack1x1A
    "information_kiosk": 264,  # flatTrack1x1B
    "shop": 262,  # flatTrack1x1A
    "toilets": 262,  # flatTrack1x1A
    "3d_cinema": 266,  # flatTrack3x3
    "enterprise": 259,  # flatTrack4x4
    "magic_carpet": 257,  # flatTrack1x4A
    "motion_simulator": 258,  # flatTrack2x2
    "swinging_inverter_ship": 263,  # flatTrack1x4B
    "swinging_ship": 261,  # flatTrack1x5
    "top_spin": 266,  # flatTrack3x3
    "twist": 266,  # flatTrack3x3
}
