diff --git a/src/rct1.c b/src/rct1.c index 11d87cdea1..202ebeba29 100644 --- a/src/rct1.c +++ b/src/rct1.c @@ -1106,6 +1106,99 @@ static const rct_object_entry RCT1DefaultObjectsRides[] = { { 0x00008000, { "AML1 " }, 0 } }; +// A value of 255 means the default vehicle for the respective track type should be used. +static const uint8 RCT1AlternativeVehicleMappings[89] = { + 255, // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN_BACKWARDS + 255, // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN + 73, // RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN // Not in RCT2 + 255, // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_CARS + 255, // RCT1_VEHICLE_TYPE_LADYBIRD_CARS + 255, // RCT1_VEHICLE_TYPE_STANDUP_ROLLER_COASTER_CARS + 85, // RCT1_VEHICLE_TYPE_SPINNING_CARS + 255, // RCT1_VEHICLE_TYPE_SINGLE_PERSON_SWINGING_CHAIRS + 86, // RCT1_VEHICLE_TYPE_SWANS_PEDAL_BOATS + 87, // RCT1_VEHICLE_TYPE_LARGE_MONORAIL_TRAIN + 88, // RCT1_VEHICLE_TYPE_CANOES + 255, // RCT1_VEHICLE_TYPE_ROWING_BOATS + 255, // RCT1_VEHICLE_TYPE_STEAM_TRAIN + 255, // RCT1_VEHICLE_TYPE_WOODEN_MOUSE_CARS + 89, // RCT1_VEHICLE_TYPE_BUMPER_BOATS + 255, // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN_BACKWARDS + 90, // RCT1_VEHICLE_TYPE_ROCKET_CARS + 255, // RCT1_VEHICLE_TYPE_HORSES // Steeplechase + 255, // RCT1_VEHICLE_TYPE_SPORTSCARS + 91, // RCT1_VEHICLE_TYPE_LYING_DOWN_SWINGING_CARS // Inverted single-rail + 92, // RCT1_VEHICLE_TYPE_WOODEN_MINE_CARS + 93, // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_AIRPLANE_CARS + 255, // RCT1_VEHICLE_TYPE_SMALL_MONORAIL_CARS + 94, // RCT1_VEHICLE_TYPE_WATER_TRICYCLES + 255, // RCT1_VEHICLE_TYPE_LAUNCHED_FREEFALL_CAR + 255, // RCT1_VEHICLE_TYPE_BOBSLEIGH_CARS + 255, // RCT1_VEHICLE_TYPE_DINGHIES + 255, // RCT1_VEHICLE_TYPE_ROTATING_CABIN + 255, // RCT1_VEHICLE_TYPE_MINE_TRAIN + 255, // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS + 255, // RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN + 95, // RCT1_VEHICLE_TYPE_MOTORBIKES + 96, // RCT1_VEHICLE_TYPE_RACING_CARS + 97, // RCT1_VEHICLE_TYPE_TRUCKS + 255, // RCT1_VEHICLE_TYPE_GO_KARTS + 255, // RCT1_VEHICLE_TYPE_RAPIDS_BOATS + 255, // RCT1_VEHICLE_TYPE_LOG_FLUME_BOATS + 255, // RCT1_VEHICLE_TYPE_DODGEMS + 255, // RCT1_VEHICLE_TYPE_SWINGING_SHIP + 255, // RCT1_VEHICLE_TYPE_SWINGING_INVERTER_SHIP + 255, // RCT1_VEHICLE_TYPE_MERRY_GO_ROUND + 255, // RCT1_VEHICLE_TYPE_FERRIS_WHEEL + 255, // RCT1_VEHICLE_TYPE_SIMULATOR_POD + 255, // RCT1_VEHICLE_TYPE_CINEMA_BUILDING + 255, // RCT1_VEHICLE_TYPE_TOPSPIN_CAR + 255, // RCT1_VEHICLE_TYPE_SPACE_RINGS + 255, // RCT1_VEHICLE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER_CAR + 255, // RCT1_VEHICLE_TYPE_VERTICAL_ROLLER_COASTER_CARS + 98, // RCT1_VEHICLE_TYPE_CAT_CARS + 255, // RCT1_VEHICLE_TYPE_TWIST_ARMS_AND_CARS + 255, // RCT1_VEHICLE_TYPE_HAUNTED_HOUSE_BUILDING + 99, // RCT1_VEHICLE_TYPE_LOG_CARS + 255, // RCT1_VEHICLE_TYPE_CIRCUS_TENT + 255, // RCT1_VEHICLE_TYPE_GHOST_TRAIN_CARS + 255, // RCT1_VEHICLE_TYPE_STEEL_TWISTER_ROLLER_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_WOODEN_TWISTER_ROLLER_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_WOODEN_SIDE_FRICTION_CARS + 100, // RCT1_VEHICLE_TYPE_VINTAGE_CARS + 101, // RCT1_VEHICLE_TYPE_STEAM_TRAIN_COVERED_CARS + 102, // RCT1_VEHICLE_TYPE_STAND_UP_STEEL_TWISTER_ROLLER_COASTER_TRAIN + 103, // RCT1_VEHICLE_TYPE_FLOORLESS_STEEL_TWISTER_ROLLER_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_STEEL_MOUSE_CARS + 104, // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS_ALTERNATIVE + 255, // RCT1_VEHICLE_TYPE_SUSPENDED_MONORAIL_TRAIN + 255, // RCT1_VEHICLE_TYPE_HELICOPTER_CARS + 255, // RCT1_VEHICLE_TYPE_VIRGINIA_REEL_TUBS + 255, // RCT1_VEHICLE_TYPE_REVERSER_CARS + 255, // RCT1_VEHICLE_TYPE_GOLFERS + 255, // RCT1_VEHICLE_TYPE_RIVER_RIDE_BOATS + 255, // RCT1_VEHICLE_TYPE_FLYING_ROLLER_COASTER_TRAIN + 105, // RCT1_VEHICLE_TYPE_NON_LOOPING_STEEL_TWISTER_ROLLER_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS + 106, // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED + 255, // RCT1_VEHICLE_TYPE_RESERVED + 255, // RCT1_VEHICLE_TYPE_ROTODROP_CAR + 255, // RCT1_VEHICLE_TYPE_FLYING_SAUCERS + 255, // RCT1_VEHICLE_TYPE_CROOKED_HOUSE_BUILDING + 255, // RCT1_VEHICLE_TYPE_BICYCLES + 107, // RCT1_VEHICLE_TYPE_HYPERCOASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_WATER_COASTER_BOATS + 108, // RCT1_VEHICLE_TYPE_FACEOFF_CARS + 255, // RCT1_VEHICLE_TYPE_JET_SKIS + 255, // RCT1_VEHICLE_TYPE_RAFT_BOATS + 109, // RCT1_VEHICLE_TYPE_AMERICAN_STYLE_STEAM_TRAIN + 255, // RCT1_VEHICLE_TYPE_AIR_POWERED_COASTER_TRAIN + 255, // RCT1_VEHICLE_TYPE_SUSPENDED_WILD_MOUSE_CARS // Inverted Hairpin in RCT2 + 255 // RCT1_VEHICLE_TYPE_ENTERPRISE_WHEEL +}; + // rct2: 0x0098BD0E static const rct_object_entry RCT1DefaultObjectsSmallScenery[] = { { 0x00000081, { "TL0 " }, 0 }, @@ -2084,89 +2177,10 @@ static void rct1_import_ride(rct1_s4 *s4, rct_ride *dst, rct1_ride *src) // Make sure the right vehicle is chosen. // https://github.com/OpenRCT2/OpenRCT2/wiki/RCT1-ride-and-vehicle-types-and-their-RCT2-equivalents - switch(src->vehicle_type) - { - case 3: - dst->subtype = 73; - break; - case 7: - dst->subtype = 85; - break; - case 9: - dst->subtype = 86; - break; - case 10: - dst->subtype = 87; - break; - case 11: - dst->subtype = 88; - break; - case 15: - dst->subtype = 89; - break; - case 17: - dst->subtype = 90; - break; - case 20: - dst->subtype = 91; - break; - case 21: - dst->subtype = 92; - break; - case 22: - dst->subtype = 93; - break; - case 24: - dst->subtype = 94; - break; - case 32: - dst->subtype = 95; - break; - case 33: - dst->subtype = 96; - break; - case 34: - dst->subtype = 97; - break; - case 49: - dst->subtype = 98; - break; - case 52: - dst->subtype = 99; - break; - case 58: - dst->subtype = 100; - break; - case 59: - dst->subtype = 101; - break; - case 60: - dst->subtype = 102; - break; - case 61: - dst->subtype = 103; - break; - case 63: - dst->subtype = 104; - break; - case 71: - dst->subtype = 105; - break; - case 73: - dst->subtype = 106; - break; - case 79: - dst->subtype = 107; - break; - case 82: - dst->subtype = 108; - break; - case 85: - dst->subtype = 109; - break; - default: + if (RCT1AlternativeVehicleMappings[src->vehicle_type] != 255) + dst->subtype = RCT1AlternativeVehicleMappings[src->vehicle_type]; + else dst->subtype = src->type; - } rideEntry = get_ride_entry(dst->subtype); diff --git a/src/rct1.h b/src/rct1.h index 5fe7c05d17..23e0f48dd3 100644 --- a/src/rct1.h +++ b/src/rct1.h @@ -426,6 +426,98 @@ enum { RCT1_RIDE_TYPE_LEMONADE_STALL }; +enum { + RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN = 0, + RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN_BACKWARDS, + RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN, // Not in RCT2 + RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_CARS, + RCT1_VEHICLE_TYPE_LADYBIRD_CARS, + RCT1_VEHICLE_TYPE_STANDUP_ROLLER_COASTER_CARS, + RCT1_VEHICLE_TYPE_SPINNING_CARS, + RCT1_VEHICLE_TYPE_SINGLE_PERSON_SWINGING_CHAIRS, + RCT1_VEHICLE_TYPE_SWANS_PEDAL_BOATS, + RCT1_VEHICLE_TYPE_LARGE_MONORAIL_TRAIN, + RCT1_VEHICLE_TYPE_CANOES, + RCT1_VEHICLE_TYPE_ROWING_BOATS, + RCT1_VEHICLE_TYPE_STEAM_TRAIN, + RCT1_VEHICLE_TYPE_WOODEN_MOUSE_CARS, + RCT1_VEHICLE_TYPE_BUMPER_BOATS, + RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN_BACKWARDS, + RCT1_VEHICLE_TYPE_ROCKET_CARS, + RCT1_VEHICLE_TYPE_HORSES, // Steeplechase + RCT1_VEHICLE_TYPE_SPORTSCARS, + RCT1_VEHICLE_TYPE_LYING_DOWN_SWINGING_CARS, // Inverted single-rail + RCT1_VEHICLE_TYPE_WOODEN_MINE_CARS, + RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_AIRPLANE_CARS, + RCT1_VEHICLE_TYPE_SMALL_MONORAIL_CARS, + RCT1_VEHICLE_TYPE_WATER_TRICYCLES, + RCT1_VEHICLE_TYPE_LAUNCHED_FREEFALL_CAR, + RCT1_VEHICLE_TYPE_BOBSLEIGH_CARS, + RCT1_VEHICLE_TYPE_DINGHIES, + RCT1_VEHICLE_TYPE_ROTATING_CABIN, + RCT1_VEHICLE_TYPE_MINE_TRAIN, + RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS, + RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_MOTORBIKES, + RCT1_VEHICLE_TYPE_RACING_CARS, + RCT1_VEHICLE_TYPE_TRUCKS, + RCT1_VEHICLE_TYPE_GO_KARTS, + RCT1_VEHICLE_TYPE_RAPIDS_BOATS, + RCT1_VEHICLE_TYPE_LOG_FLUME_BOATS, + RCT1_VEHICLE_TYPE_DODGEMS, + RCT1_VEHICLE_TYPE_SWINGING_SHIP, + RCT1_VEHICLE_TYPE_SWINGING_INVERTER_SHIP, + RCT1_VEHICLE_TYPE_MERRY_GO_ROUND, + RCT1_VEHICLE_TYPE_FERRIS_WHEEL, + RCT1_VEHICLE_TYPE_SIMULATOR_POD, + RCT1_VEHICLE_TYPE_CINEMA_BUILDING, + RCT1_VEHICLE_TYPE_TOPSPIN_CAR, + RCT1_VEHICLE_TYPE_SPACE_RINGS, + RCT1_VEHICLE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER_CAR, + RCT1_VEHICLE_TYPE_VERTICAL_ROLLER_COASTER_CARS, + RCT1_VEHICLE_TYPE_CAT_CARS, + RCT1_VEHICLE_TYPE_TWIST_ARMS_AND_CARS, + RCT1_VEHICLE_TYPE_HAUNTED_HOUSE_BUILDING, + RCT1_VEHICLE_TYPE_LOG_CARS, + RCT1_VEHICLE_TYPE_CIRCUS_TENT, + RCT1_VEHICLE_TYPE_GHOST_TRAIN_CARS, + RCT1_VEHICLE_TYPE_STEEL_TWISTER_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_WOODEN_TWISTER_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_WOODEN_SIDE_FRICTION_CARS, + RCT1_VEHICLE_TYPE_VINTAGE_CARS, + RCT1_VEHICLE_TYPE_STEAM_TRAIN_COVERED_CARS, + RCT1_VEHICLE_TYPE_STAND_UP_STEEL_TWISTER_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_FLOORLESS_STEEL_TWISTER_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_STEEL_MOUSE_CARS, + RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS_ALTERNATIVE, + RCT1_VEHICLE_TYPE_SUSPENDED_MONORAIL_TRAIN, + RCT1_VEHICLE_TYPE_HELICOPTER_CARS, + RCT1_VEHICLE_TYPE_VIRGINIA_REEL_TUBS, + RCT1_VEHICLE_TYPE_REVERSER_CARS, + RCT1_VEHICLE_TYPE_GOLFERS, + RCT1_VEHICLE_TYPE_RIVER_RIDE_BOATS, + RCT1_VEHICLE_TYPE_FLYING_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_NON_LOOPING_STEEL_TWISTER_ROLLER_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS, + RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED, + RCT1_VEHICLE_TYPE_RESERVED, + RCT1_VEHICLE_TYPE_ROTODROP_CAR, + RCT1_VEHICLE_TYPE_FLYING_SAUCERS, + RCT1_VEHICLE_TYPE_CROOKED_HOUSE_BUILDING, + RCT1_VEHICLE_TYPE_BICYCLES, + RCT1_VEHICLE_TYPE_HYPERCOASTER_TRAIN, + RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_WATER_COASTER_BOATS, + RCT1_VEHICLE_TYPE_FACEOFF_CARS, + RCT1_VEHICLE_TYPE_JET_SKIS, + RCT1_VEHICLE_TYPE_RAFT_BOATS, + RCT1_VEHICLE_TYPE_AMERICAN_STYLE_STEAM_TRAIN, + RCT1_VEHICLE_TYPE_AIR_POWERED_COASTER_TRAIN, + RCT1_VEHICLE_TYPE_SUSPENDED_WILD_MOUSE_CARS, // Inverted Hairpin in RCT2 + RCT1_VEHICLE_TYPE_ENTERPRISE_WHEEL +}; + enum{ RCT1_TRACK_ELEM_BOOSTER = 100 };