Merge pull request #21350 from Gymnasiast/objects-1.4.0

Update to v1.4.0 objects release
This commit is contained in:
Michael Steenbeek 2024-03-02 01:46:25 +01:00 committed by GitHub
commit 8916b3ce9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 567 additions and 427 deletions

View File

@ -64,9 +64,9 @@ set(TITLE_SEQUENCE_VERSION "0.4.6")
set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip")
set(TITLE_SEQUENCE_SHA1 "80fefc6ebbabc42a6f4703412daa5c62f661420d")
set(OBJECTS_VERSION "1.3.13")
set(OBJECTS_VERSION "1.4.0")
set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip")
set(OBJECTS_SHA1 "15a60424d5f4f0b94ac07763b6967ba0e6ae3a7d")
set(OBJECTS_SHA1 "f512e230ffa2f16109209e4f30e7d7bf4fe21fc0")
set(OPENSFX_VERSION "1.0.5")
set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip")

View File

@ -5,10 +5,16 @@
- Feature: [#21376] Add option to reload an object (for object developers).
- Feature: [#21413, OpenSFX#19] Add log flume lift sound effect (when “chainlift” is enabled).
- Feature: [#21455] Add option to control hidden scenery.
- Feature: [objects#282] Added RCT1 beta terrains.
- Improved: [#21356] Resize the title bar when moving between displays with different scaling factors on Windows systems.
- Improved: [#21388] Tooltips will now show even when an error message is present.
- Improved: [#21423] Add mechanism to allow building partly underground.
- Improved: [objects#272, objects#276, objects#277, objects#278, objects#279, objects#280, objects#281] Add most remaining ports of RCT1 ride and vehicle objects (for import only).
- Improved: [objects#275, objects#284, objects#286] Add remaining RCT1 walls (for import only).
- Change: [#21350] Group Dodgems and Flying Saucers vehicles.
- Change: [#21453] Reintroduce lost RCT1 Jet skis colour presets to the boat hire.
- Change: [objects#285] Mark old reversed train objects as compatibility objects.
- Fix: [#17610] Some scenery items are unavailable in RCT1 scenarios.
- Fix: [#18963] Research table in parks from Loopy Landscapes is imported incorrectly.
- Fix: [#20164] Grass and Rock terrain objects cannot be de-selected.
- Fix: [#20907] RCT1/AA scenarios use the 4-across train for the Inverted Roller Coaster.
@ -22,7 +28,9 @@
- Fix: [#21332] Mini Helicopters and Monorail Cycles ride types are swapped in research within RCT1 scenarios.
- Fix: [#21343] “Pause” and “Build Path” hotkeys do not work if top toolbar is hidden.
- Fix: [#21347] Too many options are hidden if the platform has no file picker.
- Fix: [#21350] Maze and Mini Golf track designs from RCT1 not shown in track designs list.
- Fix: [#21425] Additional missing/misplaced land & construction rights tiles in Japanese Coastal Reclaim.
- Fix: [objects#262, objects#263, objects#265, objects#266, objects#267, objects#268, objects#270, objects#271, objects#283] Various errors in expansion pack objects (original bug).
- Fix: [OpenSFX#18] B&M Roar sound effect not looping correctly.
0.4.8 (2024-02-04)

View File

@ -45,8 +45,8 @@
<LibsSha1 Condition="'$(Platform)'=='ARM64'">bd338aa3da9a357fb996dcaa6cea02c4f906718c</LibsSha1>
<TitleSequencesUrl>https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.6/title-sequences.zip</TitleSequencesUrl>
<TitleSequencesSha1>80fefc6ebbabc42a6f4703412daa5c62f661420d</TitleSequencesSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.3.13/objects.zip</ObjectsUrl>
<ObjectsSha1>15a60424d5f4f0b94ac07763b6967ba0e6ae3a7d</ObjectsSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.4.0/objects.zip</ObjectsUrl>
<ObjectsSha1>f512e230ffa2f16109209e4f30e7d7bf4fe21fc0</ObjectsSha1>
<OpenSFXUrl>https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.5/opensound.zip</OpenSFXUrl>
<OpenSFXSha1>b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb</OpenSFXSha1>
<OpenMSXUrl>https://github.com/OpenRCT2/OpenMusic/releases/download/v1.5/openmusic.zip</OpenMSXUrl>

View File

@ -109,6 +109,116 @@ namespace RCT1
Null = 255,
};
enum class VehicleType : uint8_t
{
SteelRollerCoasterTrain,
SteelRollerCoasterTrainBackwards,
WoodenRollerCoasterTrain,
InvertedCoasterTrain, // Not in RCT2
SuspendedSwingingCars,
LadybirdCars,
StandUpRollerCoasterCars,
SpinningCars,
SinglePersonSwingingChairs,
SwansPedalBoats,
LargeMonorailTrain,
Canoes,
RowingBoats,
SteamTrain,
WoodenMouseCars,
BumperBoats,
WoodenRollerCoasterTrainBackwards,
RocketCars,
Horses, // Steeplechase
Sportscars,
LyingDownSwingingCars, // Inverted single-rail
WoodenMineCars,
SuspendedSwingingAirplaneCars,
SmallMonorailCars,
WaterTricycles,
LaunchedFreefallCar,
BobsleighCars,
Dinghies,
RotatingCabin,
MineTrain,
ChairliftCars,
CorkscrewRollerCoasterTrain,
Motorbikes,
RacingCars,
Trucks,
GoKarts,
RapidsBoats,
LogFlumeBoats,
Dodgems,
SwingingShip,
SwingingInverterShip,
MerryGoRound,
FerrisWheel,
SimulatorPod,
CinemaBuilding,
TopspinCar,
SpaceRings,
ReverseFreefallRollerCoasterCar,
VerticalRollerCoasterCars,
CatCars,
TwistArmsAndCars,
HauntedHouseBuilding,
LogCars,
CircusTent,
GhostTrainCars,
SteelTwisterRollerCoasterTrain,
WoodenTwisterRollerCoasterTrain,
WoodenSideFrictionCars,
VintageCars,
SteamTrainCoveredCars,
StandUpSteelTwisterRollerCoasterTrain,
FloorlessSteelTwisterRollerCoasterTrain,
SteelMouseCars,
ChairliftCarsAlternative,
SuspendedMonorailTrain,
HelicopterCars,
VirginiaReelTubs,
ReverserCars,
Golfers,
RiverRideBoats,
FlyingRollerCoasterTrain,
NonLoopingSteelTwisterRollerCoasterTrain,
HeartlineTwisterCars,
HeartlineTwisterCarsReversed,
Reserved,
RotodropCar,
FlyingSaucers,
CrookedHouseBuilding,
Bicycles,
HypercoasterTrain,
_4AcrossInvertedCoasterTrain,
WaterCoasterBoats,
FaceoffCars,
JetSkis,
RaftBoats,
AmericanStyleSteamTrain,
AirPoweredCoasterTrain,
SuspendedWildMouseCars, // Inverted Hairpin in RCT2
EnterpriseWheel,
Count,
};
enum class BannerType : uint8_t
{
Plain = 0,
Jungle,
Roman,
Egyptian,
Mine,
Jurassic,
Oriental,
Snow,
Space,
Null = 255,
};
#pragma pack(push, 1)
struct Entrance
{
@ -125,11 +235,11 @@ namespace RCT1
*/
struct Ride
{
RideType Type; // 0x000
uint8_t VehicleType; // 0x001
uint16_t LifecycleFlags; // 0x002
uint8_t OperatingMode; // 0x004
uint8_t ColourScheme; // 0x005
RideType Type; // 0x000
RCT1::VehicleType VehicleType; // 0x001
uint16_t LifecycleFlags; // 0x002
uint8_t OperatingMode; // 0x004
uint8_t ColourScheme; // 0x005
struct
{
colour_t Body;
@ -792,7 +902,7 @@ namespace RCT1
struct TD4
{
RideType Type; // 0x00
uint8_t VehicleType;
RCT1::VehicleType VehicleType;
uint32_t Flags; // 0x02
uint8_t Mode; // 0x06
uint8_t VersionAndColourScheme; // 0x07 0b0000_VVCC
@ -850,101 +960,6 @@ namespace RCT1
assert_struct_size(TD4AA, 0xC4);
#pragma pack(pop)
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,
RCT1_VEHICLE_TYPE_COUNT
};
enum
{
RCT1_TRACK_ELEM_BOOSTER = 100

View File

@ -95,6 +95,7 @@ namespace RCT1
RCT12::EntryList _smallSceneryEntries;
RCT12::EntryList _largeSceneryEntries;
RCT12::EntryList _wallEntries;
RCT12::EntryList _bannerEntries;
RCT12::EntryList _pathEntries;
RCT12::EntryList _pathAdditionEntries;
RCT12::EntryList _sceneryGroupEntries;
@ -106,10 +107,11 @@ namespace RCT1
// Lookup tables for converting from RCT1 hard coded types to the new dynamic object entries
ObjectEntryIndex _rideTypeToRideEntryMap[EnumValue(RideType::Count)]{};
ObjectEntryIndex _vehicleTypeToRideEntryMap[RCT1_VEHICLE_TYPE_COUNT]{};
ObjectEntryIndex _vehicleTypeToRideEntryMap[EnumValue(VehicleType::Count)]{};
ObjectEntryIndex _smallSceneryTypeToEntryMap[256]{};
ObjectEntryIndex _largeSceneryTypeToEntryMap[256]{};
ObjectEntryIndex _wallTypeToEntryMap[256]{};
ObjectEntryIndex _bannerTypeToEntryMap[9]{};
ObjectEntryIndex _pathTypeToEntryMap[24]{};
ObjectEntryIndex _pathAdditionTypeToEntryMap[16]{};
ObjectEntryIndex _sceneryThemeTypeToEntryMap[24]{};
@ -349,6 +351,7 @@ namespace RCT1
std::fill(std::begin(_smallSceneryTypeToEntryMap), std::end(_smallSceneryTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_largeSceneryTypeToEntryMap), std::end(_largeSceneryTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_wallTypeToEntryMap), std::end(_wallTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_bannerTypeToEntryMap), std::end(_bannerTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_pathTypeToEntryMap), std::end(_pathTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_pathAdditionTypeToEntryMap), std::end(_pathAdditionTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_sceneryThemeTypeToEntryMap), std::end(_sceneryThemeTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
@ -373,6 +376,7 @@ namespace RCT1
AddAvailableEntriesFromMap();
AddAvailableEntriesFromRides();
AddAvailableEntriesFromSceneryGroups();
AddAvailableEntriesFromBannerList();
AddEntryForWater();
}
@ -453,7 +457,8 @@ namespace RCT1
// For some bizarre reason, RCT1 research lists contain vehicles that aren't actually researched.
if (rideTypeInResearch[researchItem->RelatedRide])
{
AddEntryForVehicleType(static_cast<RideType>(researchItem->RelatedRide), researchItem->Item);
AddEntryForVehicleType(
static_cast<RideType>(researchItem->RelatedRide), static_cast<VehicleType>(researchItem->Item));
}
break;
}
@ -559,7 +564,7 @@ namespace RCT1
case ObjectType::SmallScenery:
case ObjectType::LargeScenery:
case ObjectType::Walls:
case ObjectType::Paths:
case ObjectType::Banners:
case ObjectType::PathAdditions:
{
RCT12::EntryList* entries = GetEntryList(objectType);
@ -585,6 +590,19 @@ namespace RCT1
}
}
void AddAvailableEntriesFromBannerList()
{
for (size_t i = 0; i < std::size(_s4.Banners); i++)
{
auto& banner = _s4.Banners[i];
auto type = static_cast<BannerType>(banner.Type);
if (type == BannerType::Null)
continue;
AddEntryForBanner(type);
}
}
void AddEntryForWater()
{
std::string_view entryName;
@ -614,17 +632,17 @@ namespace RCT1
}
}
void AddEntryForVehicleType(RideType rideType, uint8_t vehicleType)
void AddEntryForVehicleType(RideType rideType, VehicleType vehicleType)
{
Guard::Assert(EnumValue(rideType) < std::size(_rideTypeToRideEntryMap));
if (_vehicleTypeToRideEntryMap[vehicleType] == OBJECT_ENTRY_INDEX_NULL)
if (_vehicleTypeToRideEntryMap[EnumValue(vehicleType)] == OBJECT_ENTRY_INDEX_NULL)
{
auto entryName = RCT1::GetVehicleObject(vehicleType);
if (!entryName.empty())
{
auto entryIndex = _rideEntries.GetOrAddEntry(entryName);
_vehicleTypeToRideEntryMap[vehicleType] = entryIndex;
_vehicleTypeToRideEntryMap[EnumValue(vehicleType)] = entryIndex;
if (rideType != RideType::Null)
AddEntryForRideType(rideType);
@ -668,6 +686,18 @@ namespace RCT1
}
}
void AddEntryForBanner(BannerType bannerType)
{
assert(EnumValue(bannerType) < std::size(_bannerTypeToEntryMap));
if (_bannerTypeToEntryMap[EnumValue(bannerType)] == OBJECT_ENTRY_INDEX_NULL)
{
auto entryName = RCT1::GetBannerObject(bannerType);
auto entryIndex = _bannerEntries.GetOrAddEntry(entryName);
_bannerTypeToEntryMap[EnumValue(bannerType)] = entryIndex;
}
}
void AddEntryForPathSurface(ObjectEntryIndex pathType)
{
assert(pathType < std::size(_footpathSurfaceTypeToEntryMap));
@ -797,7 +827,7 @@ namespace RCT1
if (RCT1::RideTypeUsesVehicles(src->Type))
{
dst->subtype = _vehicleTypeToRideEntryMap[src->VehicleType];
dst->subtype = _vehicleTypeToRideEntryMap[EnumValue(src->VehicleType)];
}
else
{
@ -830,6 +860,10 @@ namespace RCT1
dst->lifecycle_flags &= ~RIDE_LIFECYCLE_INDESTRUCTIBLE;
dst->lifecycle_flags &= ~RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK;
}
if (VehicleTypeIsReversed(src->VehicleType))
{
dst->lifecycle_flags |= RIDE_LIFECYCLE_REVERSED_TRAINS;
}
// Station
if (src->OverallView.IsNull())
@ -1210,9 +1244,8 @@ namespace RCT1
void SetVehicleColours(::Vehicle* dst, const RCT1::Vehicle* src)
{
const auto& srcRide = _s4.Rides[src->Ride];
uint8_t vehicleTypeIndex = srcRide.VehicleType;
RCT1::VehicleColourSchemeCopyDescriptor colourSchemeCopyDescriptor = RCT1::GetColourSchemeCopyDescriptor(
vehicleTypeIndex);
srcRide.VehicleType);
// RCT1 had no third colour
if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_1)
@ -1475,19 +1508,7 @@ namespace RCT1
AppendRequiredObjects(result, ObjectType::Paths, _pathEntries);
AppendRequiredObjects(result, ObjectType::PathAdditions, _pathAdditionEntries);
AppendRequiredObjects(result, ObjectType::SceneryGroup, _sceneryGroupEntries);
AppendRequiredObjects(
result, ObjectType::Banners,
std::vector<std::string>({
"rct2.footpath_banner.bn1",
"rct2.footpath_banner.bn2",
"rct2.footpath_banner.bn3",
"rct2.footpath_banner.bn4",
"rct2.footpath_banner.bn5",
"rct2.footpath_banner.bn6",
"rct2.footpath_banner.bn7",
"rct2.footpath_banner.bn8",
"rct2.footpath_banner.bn9",
}));
AppendRequiredObjects(result, ObjectType::Banners, _bannerEntries);
AppendRequiredObjects(result, ObjectType::ParkEntrance, std::vector<std::string>({ "rct2.park_entrance.pkent1" }));
AppendRequiredObjects(result, ObjectType::Water, _waterEntry);
AppendRequiredObjects(result, ObjectType::TerrainSurface, _terrainSurfaceEntries);
@ -2375,10 +2396,6 @@ namespace RCT1
case RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_SNOW:
*colourA = COLOUR_DARK_BROWN;
break;
case RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_GATE:
*colourB = *colourA;
*colourA = COLOUR_DARK_BROWN;
break;
case RCT1_WALL_TYPE_GLASS_SMOOTH:
case RCT1_WALL_TYPE_GLASS_PANELS:
*colourB = COLOUR_WHITE;
@ -2400,7 +2417,12 @@ namespace RCT1
*dst = {};
dst->id = id;
dst->type = RCTEntryIndexToOpenRCT2EntryIndex(src->Type);
auto type = RCTEntryIndexToOpenRCT2EntryIndex(src->Type);
if (type < std::size(_bannerTypeToEntryMap))
type = _bannerTypeToEntryMap[type];
else
type = OBJECT_ENTRY_INDEX_NULL;
dst->type = type;
dst->flags = 0;
if (src->Flags & BANNER_FLAG_NO_ENTRY)
@ -2453,6 +2475,8 @@ namespace RCT1
return &_largeSceneryEntries;
case ObjectType::Walls:
return &_wallEntries;
case ObjectType::Banners:
return &_bannerEntries;
case ObjectType::Paths:
return &_pathEntries;
case ObjectType::PathAdditions:
@ -2717,7 +2741,7 @@ namespace RCT1
if (researchList[i].Type == RCT1_RESEARCH_TYPE_RIDE)
{
return RCT1::GetRideType(static_cast<RideType>(researchList[i].Item), 0);
return RCT1::GetRideType(static_cast<RideType>(researchList[i].Item), static_cast<VehicleType>(0));
}
}
@ -2907,6 +2931,11 @@ namespace RCT1
dst->SetFlag(VehicleFlags::Crashed);
}
dst->BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed;
if (VehicleTypeIsReversed(rct1Ride.VehicleType))
{
dst->SetFlag(VehicleFlags::CarIsReversed);
}
}
template<> void S4Importer::ImportEntity<Guest>(const RCT12EntityBase& srcBase)

View File

@ -147,7 +147,7 @@ namespace RCT1
}
assert(!vehicleObject.empty());
td->vehicle_object = ObjectEntryDescriptor(vehicleObject);
td->vehicle_type = td4Base.VehicleType;
td->vehicle_type = EnumValue(td4Base.VehicleType);
td->flags = td4Base.Flags;
td->colour_scheme = td4Base.VersionAndColourScheme & 0x3;

View File

@ -163,11 +163,11 @@ namespace RCT1
return terrainEdge < std::size(map) ? map[terrainEdge] : map[0];
}
uint8_t GetRideType(RideType rideType, uint8_t vehicleType)
uint8_t GetRideType(RideType rideType, VehicleType vehicleType)
{
if (rideType == RideType::SteelTwisterRollerCoaster && vehicleType == RCT1_VEHICLE_TYPE_NON_LOOPING_STEEL_TWISTER_ROLLER_COASTER_TRAIN)
if (rideType == RideType::SteelTwisterRollerCoaster && vehicleType == VehicleType::NonLoopingSteelTwisterRollerCoasterTrain)
return RIDE_TYPE_HYPER_TWISTER;
if (rideType == RideType::SteelCorkscrewRollerCoaster && vehicleType == RCT1_VEHICLE_TYPE_HYPERCOASTER_TRAIN)
if (rideType == RideType::SteelCorkscrewRollerCoaster && vehicleType == VehicleType::HypercoasterTrain)
return RIDE_TYPE_HYPERCOASTER;
static uint8_t map[] =
@ -265,103 +265,103 @@ namespace RCT1
return map[index];
}
VehicleColourSchemeCopyDescriptor GetColourSchemeCopyDescriptor(uint8_t vehicleType)
VehicleColourSchemeCopyDescriptor GetColourSchemeCopyDescriptor(VehicleType vehicleType)
{
static VehicleColourSchemeCopyDescriptor map[89] =
{
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN = 0,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN_BACKWARDS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN, // Not in RCT2
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LADYBIRD_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_1, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_STANDUP_ROLLER_COASTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SPINNING_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SINGLE_PERSON_SWINGING_CHAIRS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SWANS_PEDAL_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN = 0,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN_BACKWARDS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN, // Not in RCT2
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LADYBIRD_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_1, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_STANDUP_ROLLER_COASTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SPINNING_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SINGLE_PERSON_SWINGING_CHAIRS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SWANS_PEDAL_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_DARK_BLUE }, // RCT1_VEHICLE_TYPE_LARGE_MONORAIL_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CANOES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROWING_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_YELLOW }, // RCT1_VEHICLE_TYPE_STEAM_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_WOODEN_MOUSE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_BUMPER_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN_BACKWARDS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROCKET_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HORSES, // Steeplechase
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SPORTSCARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LYING_DOWN_SWINGING_CARS, // Inverted single-rail
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_MINE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_AIRPLANE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SMALL_MONORAIL_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WATER_TRICYCLES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LAUNCHED_FREEFALL_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_BOBSLEIGH_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_DINGHIES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROTATING_CABIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_MINE_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_MOTORBIKES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RACING_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_TRUCKS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_GO_KARTS,
{ COPY_COLOUR_1, COLOUR_BLACK, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RAPIDS_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LOG_FLUME_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_DODGEMS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SWINGING_SHIP,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SWINGING_INVERTER_SHIP,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_MERRY_GO_ROUND,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_FERRIS_WHEEL,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SIMULATOR_POD,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CINEMA_BUILDING,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_TOPSPIN_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SPACE_RINGS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_1 }, // RCT1_VEHICLE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_VERTICAL_ROLLER_COASTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CAT_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_TWIST_ARMS_AND_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HAUNTED_HOUSE_BUILDING,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LOG_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CIRCUS_TENT,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_GHOST_TRAIN_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_1, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_SIDE_FRICTION_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_1, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_VINTAGE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_YELLOW }, // RCT1_VEHICLE_TYPE_STEAM_TRAIN_COVERED_CARS,
{ COPY_COLOUR_1, COLOUR_BLACK, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_STAND_UP_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COLOUR_BLACK, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_FLOORLESS_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_STEEL_MOUSE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS_ALTERNATIVE,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SUSPENDED_MONORAIL_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HELICOPTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_VIRGINIA_REEL_TUBS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_REVERSER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_GOLFERS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RIVER_RIDE_BOATS,
{ COPY_COLOUR_1, COLOUR_BLACK, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_FLYING_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_1 }, // RCT1_VEHICLE_TYPE_NON_LOOPING_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RESERVED,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROTODROP_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_FLYING_SAUCERS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CROOKED_HOUSE_BUILDING,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_BICYCLES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HYPERCOASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WATER_COASTER_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_FACEOFF_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_JET_SKIS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_RAFT_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_YELLOW }, // RCT1_VEHICLE_TYPE_AMERICAN_STYLE_STEAM_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_AIR_POWERED_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SUSPENDED_WILD_MOUSE_CARS, // Inverted Hairpin in RCT2
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ENTERPRISE_WHEEL
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CANOES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROWING_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_YELLOW }, // RCT1_VEHICLE_TYPE_STEAM_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_WOODEN_MOUSE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_BUMPER_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN_BACKWARDS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROCKET_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HORSES, // Steeplechase
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SPORTSCARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LYING_DOWN_SWINGING_CARS, // Inverted single-rail
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_MINE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_AIRPLANE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SMALL_MONORAIL_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WATER_TRICYCLES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LAUNCHED_FREEFALL_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_BOBSLEIGH_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_DINGHIES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROTATING_CABIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_MINE_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_MOTORBIKES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RACING_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_TRUCKS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_GO_KARTS,
{ COPY_COLOUR_1, COLOUR_BLACK, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RAPIDS_BOATS,
{ COPY_COLOUR_1, COLOUR_BLACK, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LOG_FLUME_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_DODGEMS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SWINGING_SHIP,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SWINGING_INVERTER_SHIP,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_MERRY_GO_ROUND,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_FERRIS_WHEEL,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SIMULATOR_POD,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CINEMA_BUILDING,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_TOPSPIN_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SPACE_RINGS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_1 }, // RCT1_VEHICLE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_1 }, // RCT1_VEHICLE_TYPE_VERTICAL_ROLLER_COASTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CAT_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_TWIST_ARMS_AND_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HAUNTED_HOUSE_BUILDING,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_LOG_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CIRCUS_TENT,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_GHOST_TRAIN_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WOODEN_SIDE_FRICTION_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_1, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_VINTAGE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_YELLOW }, // RCT1_VEHICLE_TYPE_STEAM_TRAIN_COVERED_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_STAND_UP_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_FLOORLESS_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_STEEL_MOUSE_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS_ALTERNATIVE,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SUSPENDED_MONORAIL_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HELICOPTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_VIRGINIA_REEL_TUBS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_REVERSER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_GOLFERS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RIVER_RIDE_BOATS,
{ COPY_COLOUR_1, COLOUR_BLACK, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_FLYING_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_1 }, // RCT1_VEHICLE_TYPE_NON_LOOPING_STEEL_TWISTER_ROLLER_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_RESERVED,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ROTODROP_CAR,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_FLYING_SAUCERS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_CROOKED_HOUSE_BUILDING,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_BICYCLES,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_HYPERCOASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_WATER_COASTER_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_FACEOFF_CARS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_JET_SKIS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COPY_COLOUR_2 }, // RCT1_VEHICLE_TYPE_RAFT_BOATS,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_YELLOW }, // RCT1_VEHICLE_TYPE_AMERICAN_STYLE_STEAM_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_AIR_POWERED_COASTER_TRAIN,
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_SUSPENDED_WILD_MOUSE_CARS, // Inverted Hairpin in RCT2
{ COPY_COLOUR_1, COPY_COLOUR_2, COLOUR_BLACK }, // RCT1_VEHICLE_TYPE_ENTERPRISE_WHEEL
};
Guard::ArgumentInRange<size_t>(vehicleType, 0, std::size(map), "Unsupported RCT1 vehicle type.");
return map[vehicleType];
Guard::ArgumentInRange<size_t>(EnumValue(vehicleType), 0, std::size(map), "Unsupported RCT1 vehicle type.");
return map[EnumValue(vehicleType)];
}
bool RideTypeUsesVehicles(RideType rideType)
@ -422,7 +422,7 @@ namespace RCT1
return pathAdditionType;
}
uint8_t GetVehicleSubEntryIndex(uint8_t rct1VehicleType, uint8_t vehicleSubEntry)
uint8_t GetVehicleSubEntryIndex(VehicleType rct1VehicleType, uint8_t vehicleSubEntry)
{
static constexpr uint8_t map[] =
{
@ -684,11 +684,11 @@ namespace RCT1
0,
};
if (rct1VehicleType == RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS)
if (rct1VehicleType == VehicleType::HeartlineTwisterCars)
{
return vehicleSubEntry == HEARTLINE_TWISTER_FORWARDS ? 0 : 1;
}
if (rct1VehicleType == RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED)
if (rct1VehicleType == VehicleType::HeartlineTwisterCarsReversed)
{
return vehicleSubEntry == HEARTLINE_TWISTER_BACKWARDS ? 0 : 1;
}
@ -706,33 +706,33 @@ namespace RCT1
{
"rct1.ride.wooden_rc_trains", // RCT1_RIDE_TYPE_WOODEN_ROLLER_COASTER
"rct2.ride.togst", // RCT1_RIDE_TYPE_STAND_UP_STEEL_ROLLER_COASTER
"rct2.ride.arrsw1", // RCT1_RIDE_TYPE_SUSPENDED_ROLLER_COASTER
"rct2.ride.nemt", // RCT1_RIDE_TYPE_INVERTED_ROLLER_COASTER
"rct1.ride.suspended_swinging_cars", // RCT1_RIDE_TYPE_SUSPENDED_ROLLER_COASTER
"rct1ll.ride.4_across_inverted_trains", // RCT1_RIDE_TYPE_INVERTED_ROLLER_COASTER
"rct1.ride.ladybird_trains", // RCT1_RIDE_TYPE_STEEL_MINI_ROLLER_COASTER
"rct2.ride.nrl", // RCT1_RIDE_TYPE_MINIATURE_RAILWAY
"rct2.ride.mono2", // RCT1_RIDE_TYPE_MONORAIL
"rct1.ride.steam_trains", // RCT1_RIDE_TYPE_MINIATURE_RAILWAY
"rct1.ride.small_monorail_cars", // RCT1_RIDE_TYPE_MONORAIL
"rct1.ride.single_person_swinging_cars", // RCT1_RIDE_TYPE_SUSPENDED_SINGLE_RAIL_ROLLER_COASTER
"rct2.ride.rboat", // RCT1_RIDE_TYPE_BOAT_HIRE
"rct2.ride.wmouse", // RCT1_RIDE_TYPE_WOODEN_CRAZY_RODENT_ROLLER_COASTER
"rct2.ride.steep1", // RCT1_RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER
"rct2.ride.spcar", // RCT1_RIDE_TYPE_CAR_RIDE
"rct1.ride.mouse_cars", // RCT1_RIDE_TYPE_WOODEN_CRAZY_RODENT_ROLLER_COASTER
"rct1.ride.horses", // RCT1_RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER
"rct1.ride.sports_cars", // RCT1_RIDE_TYPE_CAR_RIDE
"rct2.ride.ssc1", // RCT1_RIDE_TYPE_LAUNCHED_FREEFALL
"rct2.ride.bob1", // RCT1_RIDE_TYPE_BOBSLED_ROLLER_COASTER
"rct1.ride.bobsleigh_trains", // RCT1_RIDE_TYPE_BOBSLED_ROLLER_COASTER
"rct2.ride.obs1", // RCT1_RIDE_TYPE_OBSERVATION_TOWER
"rct1.ride.steel_rc_trains", // RCT1_RIDE_TYPE_STEEL_ROLLER_COASTER
"rct2.ride.ding1", // RCT1_RIDE_TYPE_WATER_SLIDE
"rct2.ride.amt1", // RCT1_RIDE_TYPE_MINE_TRAIN_ROLLER_COASTER
"rct2.ride.clift1", // RCT1_RIDE_TYPE_CHAIRLIFT
"rct1.ride.dinghies", // RCT1_RIDE_TYPE_WATER_SLIDE
"rct1.ride.mine_trains", // RCT1_RIDE_TYPE_MINE_TRAIN_ROLLER_COASTER
"rct1.ride.chairlift_cars", // RCT1_RIDE_TYPE_CHAIRLIFT
"rct1.ride.corkscrew_trains", // RCT1_RIDE_TYPE_STEEL_CORKSCREW_ROLLER_COASTER
"rct2.ride.hmaze", // RCT1_RIDE_TYPE_HEDGE_MAZE
"rct2.ride.hskelt", // RCT1_RIDE_TYPE_SPIRAL_SLIDE
"rct1.ride.go_karts", // RCT1_RIDE_TYPE_GO_KARTS
"rct2.ride.lfb1", // RCT1_RIDE_TYPE_LOG_FLUME
"rct2.ride.rapboat", // RCT1_RIDE_TYPE_RIVER_RAPIDS
"rct2.ride.dodg1", // RCT1_RIDE_TYPE_DODGEMS
"rct1.ride.logs", // RCT1_RIDE_TYPE_LOG_FLUME
"rct1.ride.river_rapids_boats", // RCT1_RIDE_TYPE_RIVER_RAPIDS
"rct1.ride.dodgems", // RCT1_RIDE_TYPE_DODGEMS
"rct2.ride.swsh1", // RCT1_RIDE_TYPE_SWINGING_SHIP
"rct2.ride.swsh2", // RCT1_RIDE_TYPE_SWINGING_INVERTER_SHIP
"rct2.ride.icecr1", // RCT1_RIDE_TYPE_ICE_CREAM_STALL
"rct1.ride.fruity_ices_stall", // RCT1_RIDE_TYPE_ICE_CREAM_STALL
"rct2.ride.chpsh", // RCT1_RIDE_TYPE_CHIPS_STALL
"rct2.ride.drnks", // RCT1_RIDE_TYPE_DRINK_STALL
"rct2.ride.cndyf", // RCT1_RIDE_TYPE_CANDYFLOSS_STALL
@ -746,44 +746,44 @@ namespace RCT1
"rct2.ride.c3d", // RCT1_RIDE_TYPE_3D_CINEMA
"rct2.ride.topsp1", // RCT1_RIDE_TYPE_TOP_SPIN
"rct2.ride.srings", // RCT1_RIDE_TYPE_SPACE_RINGS
"rct2.ride.revf1", // RCT1_RIDE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER
"rct1.ride.reverse_freefall_car", // RCT1_RIDE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER
"rct2.ride.souvs", // RCT1_RIDE_TYPE_SOUVENIR_STALL
"rct2.ride.bmvd", // RCT1_RIDE_TYPE_VERTICAL_ROLLER_COASTER
"rct1.ride.vertical_drop_trains", // RCT1_RIDE_TYPE_VERTICAL_ROLLER_COASTER
"rct2.ride.pizzs", // RCT1_RIDE_TYPE_PIZZA_STALL
"rct2.ride.twist1", // RCT1_RIDE_TYPE_TWIST
"rct2.ride.hhbuild", // RCT1_RIDE_TYPE_HAUNTED_HOUSE
"rct2.ride.popcs", // RCT1_RIDE_TYPE_POPCORN_STALL
"rct2.ride.circus1", // RCT1_RIDE_TYPE_CIRCUS
"rct2.ride.gtc", // RCT1_RIDE_TYPE_GHOST_TRAIN
"rct2.ride.bmsd", // RCT1_RIDE_TYPE_STEEL_TWISTER_ROLLER_COASTER
"rct1aa.ride.ghost_train_cars", // RCT1_RIDE_TYPE_GHOST_TRAIN
"rct1aa.ride.twister_trains", // RCT1_RIDE_TYPE_STEEL_TWISTER_ROLLER_COASTER
"rct2.ride.mft", // RCT1_RIDE_TYPE_WOODEN_TWISTER_ROLLER_COASTER
"rct2.ride.sfric1", // RCT1_RIDE_TYPE_WOODEN_SIDE_FRICTION_ROLLER_COASTER
"rct2.ride.smc1", // RCT1_RIDE_TYPE_STEEL_WILD_MOUSE_ROLLER_COASTER
"rct1aa.ride.side_friction_cars", // RCT1_RIDE_TYPE_WOODEN_SIDE_FRICTION_ROLLER_COASTER
"rct1aa.ride.steel_wild_mouse_cars", // RCT1_RIDE_TYPE_STEEL_WILD_MOUSE_ROLLER_COASTER
"rct2.ride.hotds", // RCT1_RIDE_TYPE_HOT_DOG_STALL
"rct2.ride.sqdst", // RCT1_RIDE_TYPE_EXOTIC_SEA_FOOD_STALL
"rct2.ride.hatst", // RCT1_RIDE_TYPE_HAT_STALL
"rct2.ride.toffs", // RCT1_RIDE_TYPE_TOFFEE_APPLE_STALL
"rct2.ride.vreel", // RCT1_RIDE_TYPE_VIRGINIA_REEL
"rct2.ride.spboat", // RCT1_RIDE_TYPE_RIVER_RIDE
"rct2.ride.helicar", // RCT1_RIDE_TYPE_CYCLE_MONORAIL
"rct1aa.ride.virginia_reel_tubs", // RCT1_RIDE_TYPE_VIRGINIA_REEL
"rct1aa.ride.splash_boats", // RCT1_RIDE_TYPE_RIVER_RIDE
"rct1aa.ride.mini_helicopters", // RCT1_RIDE_TYPE_CYCLE_MONORAIL
"rct2.ride.vekst", // RCT1_RIDE_TYPE_FLYING_ROLLER_COASTER
"rct2.ride.smono", // RCT1_RIDE_TYPE_SUSPENDED_MONORAIL
"rct1aa.ride.suspended_monorail_trains", // RCT1_RIDE_TYPE_SUSPENDED_MONORAIL
"", // RCT1_RIDE_TYPE_40
"rct2.ride.revcar", // RCT1_RIDE_TYPE_WOODEN_REVERSER_ROLLER_COASTER
"rct2.ride.utcar", // RCT1_RIDE_TYPE_HEARTLINE_TWISTER_ROLLER_COASTER
"rct1aa.ride.reverser_cars", // RCT1_RIDE_TYPE_WOODEN_REVERSER_ROLLER_COASTER
"rct1aa.ride.heartline_twister_cars", // RCT1_RIDE_TYPE_HEARTLINE_TWISTER_ROLLER_COASTER
"rct2.ride.golf1", // RCT1_RIDE_TYPE_MINIATURE_GOLF
"", // RCT1_RIDE_TYPE_44
"rct2.ride.gdrop1", // RCT1_RIDE_TYPE_ROTO_DROP
"rct2.ride.fsauc", // RCT1_RIDE_TYPE_FLYING_SAUCERS
"rct1aa.ride.flying_saucers", // RCT1_RIDE_TYPE_FLYING_SAUCERS
"rct2.ride.chbuild", // RCT1_RIDE_TYPE_CROOKED_HOUSE
"rct2.ride.monbk", // RCT1_RIDE_TYPE_CYCLE_RAILWAY
"rct1aa.ride.bicycles", // RCT1_RIDE_TYPE_CYCLE_RAILWAY
"rct1.ride.inverted_trains", // RCT1_RIDE_TYPE_SUSPENDED_LOOPING_ROLLER_COASTER
"rct2.ride.cstboat", // RCT1_RIDE_TYPE_WATER_COASTER
"rct2.ride.thcar", // RCT1_RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
"rct2.ride.ivmc1", // RCT1_RIDE_TYPE_INVERTED_WILD_MOUSE_COASTER
"rct2.ride.jski", // RCT1_RIDE_TYPE_JET_SKIS
"rct1ll.ride.coaster_boats", // RCT1_RIDE_TYPE_WATER_COASTER
"rct1ll.ride.air_powered_trains", // RCT1_RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
"rct1ll.ride.inverted_hairpin_cars", // RCT1_RIDE_TYPE_INVERTED_WILD_MOUSE_COASTER
"rct1ll.ride.jet_skis", // RCT1_RIDE_TYPE_JET_SKIS
"rct2.ride.tshrt", // RCT1_RIDE_TYPE_T_SHIRT_STALL
"rct2.ride.rftboat", // RCT1_RIDE_TYPE_RAFT_RIDE
"rct1ll.ride.rafts", // RCT1_RIDE_TYPE_RAFT_RIDE
"rct2.ride.dough", // RCT1_RIDE_TYPE_DOUGHNUT_SHOP
"rct2.ride.enterp", // RCT1_RIDE_TYPE_ENTERPRISE
"rct2.ride.coffs", // RCT1_RIDE_TYPE_COFFEE_SHOP
@ -797,103 +797,103 @@ namespace RCT1
return map[index];
}
std::string_view GetVehicleObject(uint8_t vehicleType)
std::string_view GetVehicleObject(VehicleType vehicleType)
{
static constexpr const char * map[] =
{
"rct1.ride.steel_rc_trains", // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN
"rct1.ride.steel_rc_trains_reversed", // RCT1_VEHICLE_TYPE_STEEL_ROLLER_COASTER_TRAIN_BACKWARDS
"rct1.ride.wooden_rc_trains", // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN
"rct1.ride.inverted_trains", // RCT1_VEHICLE_TYPE_INVERTED_COASTER_TRAIN (Not in RCT2)
"rct2.ride.arrsw1", // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_CARS
"rct1.ride.ladybird_trains", // RCT1_VEHICLE_TYPE_LADYBIRD_CARS
"rct2.ride.togst", // RCT1_VEHICLE_TYPE_STANDUP_ROLLER_COASTER_CARS
"rct2.ride.wmspin", // RCT1_VEHICLE_TYPE_SPINNING_CARS
"rct1.ride.single_person_swinging_cars", // RCT1_VEHICLE_TYPE_SINGLE_PERSON_SWINGING_CHAIRS
"rct2.ride.swans", // RCT1_VEHICLE_TYPE_SWANS_PEDAL_BOATS
"rct2.ride.mono1", // RCT1_VEHICLE_TYPE_LARGE_MONORAIL_TRAIN
"rct2.ride.cboat", // RCT1_VEHICLE_TYPE_CANOES
"rct2.ride.rboat", // RCT1_VEHICLE_TYPE_ROWING_BOATS
"rct2.ride.nrl", // RCT1_VEHICLE_TYPE_STEAM_TRAIN
"rct2.ride.wmouse", // RCT1_VEHICLE_TYPE_WOODEN_MOUSE_CARS
"rct2.ride.bboat", // RCT1_VEHICLE_TYPE_BUMPER_BOATS
"rct1.ride.wooden_rc_trains_reversed", // RCT1_VEHICLE_TYPE_WOODEN_ROLLER_COASTER_TRAIN_BACKWARDS
"rct1.ride.rocket_cars", // RCT1_VEHICLE_TYPE_ROCKET_CARS
"rct2.ride.steep1", // RCT1_VEHICLE_TYPE_HORSES // Steeplechase
"rct2.ride.spcar", // RCT1_VEHICLE_TYPE_SPORTSCARS
"rct2.ride.skytr", // RCT1_VEHICLE_TYPE_LYING_DOWN_SWINGING_CARS (Inverted single-rail)
"rct2.ride.wmmine", // RCT1_VEHICLE_TYPE_WOODEN_MINE_CARS
"rct2.ride.arrsw2", // RCT1_VEHICLE_TYPE_SUSPENDED_SWINGING_AIRPLANE_CARS
"rct2.ride.mono2", // RCT1_VEHICLE_TYPE_SMALL_MONORAIL_CARS
"rct2.ride.trike", // RCT1_VEHICLE_TYPE_WATER_TRICYCLES
"rct2.ride.ssc1", // RCT1_VEHICLE_TYPE_LAUNCHED_FREEFALL_CAR
"rct2.ride.bob1", // RCT1_VEHICLE_TYPE_BOBSLEIGH_CARS
"rct2.ride.ding1", // RCT1_VEHICLE_TYPE_DINGHIES
"rct2.ride.obs1", // RCT1_VEHICLE_TYPE_ROTATING_CABIN
"rct2.ride.amt1", // RCT1_VEHICLE_TYPE_MINE_TRAIN
"rct2.ride.clift1", // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS
"rct1.ride.corkscrew_trains", // RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN
"rct2.ride.steep2", // RCT1_VEHICLE_TYPE_MOTORBIKES
"rct2.ride.rcr", // RCT1_VEHICLE_TYPE_RACING_CARS
"rct2.ride.truck1", // RCT1_VEHICLE_TYPE_TRUCKS
"rct1.ride.go_karts", // RCT1_VEHICLE_TYPE_GO_KARTS
"rct2.ride.rapboat", // RCT1_VEHICLE_TYPE_RAPIDS_BOATS
"rct2.ride.lfb1", // RCT1_VEHICLE_TYPE_LOG_FLUME_BOATS
"rct2.ride.dodg1", // RCT1_VEHICLE_TYPE_DODGEMS
"rct2.ride.swsh1", // RCT1_VEHICLE_TYPE_SWINGING_SHIP
"rct2.ride.swsh2", // RCT1_VEHICLE_TYPE_SWINGING_INVERTER_SHIP
"rct2.ride.mgr1", // RCT1_VEHICLE_TYPE_MERRY_GO_ROUND
"rct2.ride.fwh1", // RCT1_VEHICLE_TYPE_FERRIS_WHEEL
"rct2.ride.simpod", // RCT1_VEHICLE_TYPE_SIMULATOR_POD
"rct2.ride.c3d", // RCT1_VEHICLE_TYPE_CINEMA_BUILDING
"rct2.ride.topsp1", // RCT1_VEHICLE_TYPE_TOPSPIN_CAR
"rct2.ride.srings", // RCT1_VEHICLE_TYPE_SPACE_RINGS
"rct2.ride.revf1", // RCT1_VEHICLE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER_CAR
"rct2.ride.bmvd", // RCT1_VEHICLE_TYPE_VERTICAL_ROLLER_COASTER_CARS
"rct2.ride.ctcar", // RCT1_VEHICLE_TYPE_CAT_CARS
"rct2.ride.twist1", // RCT1_VEHICLE_TYPE_TWIST_ARMS_AND_CARS
"rct2.ride.hhbuild", // RCT1_VEHICLE_TYPE_HAUNTED_HOUSE_BUILDING
"rct1.ride.log_trains", // RCT1_VEHICLE_TYPE_LOG_CARS
"rct2.ride.circus1", // RCT1_VEHICLE_TYPE_CIRCUS_TENT
"rct2.ride.gtc", // RCT1_VEHICLE_TYPE_GHOST_TRAIN_CARS
"rct2.ride.bmsd", // RCT1_VEHICLE_TYPE_STEEL_TWISTER_ROLLER_COASTER_TRAIN
"rct2.ride.mft", // RCT1_VEHICLE_TYPE_WOODEN_TWISTER_ROLLER_COASTER_TRAIN
"rct2.ride.sfric1", // RCT1_VEHICLE_TYPE_WOODEN_SIDE_FRICTION_CARS
"rct2.ride.vcr", // RCT1_VEHICLE_TYPE_VINTAGE_CARS
"rct2.ride.nrl2", // RCT1_VEHICLE_TYPE_STEAM_TRAIN_COVERED_CARS
"rct2.ride.bmsu", // RCT1_VEHICLE_TYPE_STAND_UP_STEEL_TWISTER_ROLLER_COASTER_TRAIN
"rct2.ride.bmfl", // RCT1_VEHICLE_TYPE_FLOORLESS_STEEL_TWISTER_ROLLER_COASTER_TRAIN
"rct2.ride.smc1", // RCT1_VEHICLE_TYPE_STEEL_MOUSE_CARS
"rct2.ride.clift2", // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS_ALTERNATIVE
"rct2.ride.smono", // RCT1_VEHICLE_TYPE_SUSPENDED_MONORAIL_TRAIN
"rct2.ride.helicar", // RCT1_VEHICLE_TYPE_HELICOPTER_CARS
"rct2.ride.vreel", // RCT1_VEHICLE_TYPE_VIRGINIA_REEL_TUBS
"rct2.ride.revcar", // RCT1_VEHICLE_TYPE_REVERSER_CARS
"rct2.ride.golf1", // RCT1_VEHICLE_TYPE_GOLFERS
"rct2.ride.spboat", // RCT1_VEHICLE_TYPE_RIVER_RIDE_BOATS
"rct2.ride.vekst", // RCT1_VEHICLE_TYPE_FLYING_ROLLER_COASTER_TRAIN
"rct2.ride.bmrb", // RCT1_VEHICLE_TYPE_NON_LOOPING_STEEL_TWISTER_ROLLER_COASTER_TRAIN
"rct2.ride.utcar", // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS
"rct2.ride.utcarr", // RCT1_VEHICLE_TYPE_HEARTLINE_TWISTER_CARS_REVERSED
"", // RCT1_VEHICLE_TYPE_RESERVED
"rct2.ride.gdrop1", // RCT1_VEHICLE_TYPE_ROTODROP_CAR
"rct2.ride.fsauc", // RCT1_VEHICLE_TYPE_FLYING_SAUCERS
"rct2.ride.chbuild", // RCT1_VEHICLE_TYPE_CROOKED_HOUSE_BUILDING
"rct2.ride.monbk", // RCT1_VEHICLE_TYPE_BICYCLES
"rct2.ride.arrt2", // RCT1_VEHICLE_TYPE_HYPERCOASTER_TRAIN
"rct2.ride.nemt", // RCT1_VEHICLE_TYPE_4_ACROSS_INVERTED_COASTER_TRAIN
"rct2.ride.cstboat", // RCT1_VEHICLE_TYPE_WATER_COASTER_BOATS
"rct2.ride.slcfo", // RCT1_VEHICLE_TYPE_FACEOFF_CARS
"rct2.ride.jski", // RCT1_VEHICLE_TYPE_JET_SKIS
"rct2.ride.rftboat", // RCT1_VEHICLE_TYPE_RAFT_BOATS
"rct2.ride.aml1", // RCT1_VEHICLE_TYPE_AMERICAN_STYLE_STEAM_TRAIN
"rct2.ride.thcar", // RCT1_VEHICLE_TYPE_AIR_POWERED_COASTER_TRAIN
"rct2.ride.ivmc1", // RCT1_VEHICLE_TYPE_SUSPENDED_WILD_MOUSE_CARS (Inverted Hairpin in RCT2)
"rct2.ride.enterp", // RCT1_VEHICLE_TYPE_ENTERPRISE_WHEEL
"rct1.ride.steel_rc_trains", // VehicleType::SteelRollerCoasterTrain
"rct1.ride.steel_rc_trains", // VehicleType::SteelRollerCoasterTrainBackwards
"rct1.ride.wooden_rc_trains", // VehicleType::WoodenRollerCoasterTrain
"rct1.ride.inverted_trains", // VehicleType::InvertedCoasterTrain//NotinRCT2
"rct1.ride.suspended_swinging_cars", // VehicleType::SuspendedSwingingCars
"rct1.ride.ladybird_trains", // VehicleType::LadybirdCars
"rct2.ride.togst", // VehicleType::StandupRollerCoasterCars
"rct2.ride.wmspin", // VehicleType::SpinningCars
"rct1.ride.single_person_swinging_cars", // VehicleType::SinglePersonSwingingChairs
"rct2.ride.swans", // VehicleType::SwansPedalBoats
"rct1.ride.streamlined_monorail_trains", // VehicleType::LargeMonorailTrain
"rct2.ride.cboat", // VehicleType::Canoes
"rct2.ride.rboat", // VehicleType::RowingBoats
"rct1.ride.steam_trains", // VehicleType::SteamTrain
"rct1.ride.mouse_cars", // VehicleType::WoodenMouseCars
"rct1.ride.bumper_boats", // VehicleType::BumperBoats
"rct1.ride.wooden_rc_trains", // VehicleType::WoodenRollerCoasterTrainBackwards
"rct1.ride.rocket_cars", // VehicleType::RocketCars
"rct1.ride.horses", // VehicleType::Horses//Steeplechase
"rct1.ride.sports_cars", // VehicleType::Sportscars
"rct1.ride.swinging_lay_down_cars", // VehicleType::LyingDownSwingingCars//Invertedsingle-rail
"rct1.ride.mine_cars", // VehicleType::WoodenMineCars
"rct1.ride.suspended_swinging_aeroplane_cars", // VehicleType::SuspendedSwingingAirplaneCars
"rct1.ride.small_monorail_cars", // VehicleType::SmallMonorailCars
"rct2.ride.trike", // VehicleType::WaterTricycles
"rct2.ride.ssc1", // VehicleType::LaunchedFreefallCar
"rct1.ride.bobsleigh_trains", // VehicleType::BobsleighCars
"rct1.ride.dinghies", // VehicleType::Dinghies
"rct2.ride.obs1", // VehicleType::RotatingCabin
"rct1.ride.mine_trains", // VehicleType::MineTrain
"rct1.ride.chairlift_cars", // VehicleType::ChairliftCars
"rct1.ride.corkscrew_trains", // VehicleType::CorkscrewRollerCoasterTrain
"rct1.ride.motorbikes", // VehicleType::Motorbikes
"rct1.ride.racing_cars", // VehicleType::RacingCars
"rct1.ride.pickup_trucks", // VehicleType::Trucks
"rct1.ride.go_karts", // VehicleType::GoKarts
"rct1.ride.river_rapids_boats", // VehicleType::RapidsBoats
"rct1.ride.logs", // VehicleType::LogFlumeBoats
"rct1.ride.dodgems", // VehicleType::Dodgems
"rct2.ride.swsh1", // VehicleType::SwingingShip
"rct2.ride.swsh2", // VehicleType::SwingingInverterShip
"rct2.ride.mgr1", // VehicleType::MerryGoRound
"rct2.ride.fwh1", // VehicleType::FerrisWheel
"rct2.ride.simpod", // VehicleType::SimulatorPod
"rct2.ride.c3d", // VehicleType::CinemaBuilding
"rct2.ride.topsp1", // VehicleType::TopspinCar
"rct2.ride.srings", // VehicleType::SpaceRings
"rct1.ride.reverse_freefall_car", // VehicleType::ReverseFreefallRollerCoasterCar
"rct1.ride.vertical_drop_trains", // VehicleType::VerticalRollerCoasterCars
"rct1.ride.cat_cars", // VehicleType::CatCars
"rct2.ride.twist1", // VehicleType::TwistArmsAndCars
"rct2.ride.hhbuild", // VehicleType::HauntedHouseBuilding
"rct1.ride.log_trains", // VehicleType::LogCars
"rct2.ride.circus1", // VehicleType::CircusTent
"rct1aa.ride.ghost_train_cars", // VehicleType::GhostTrainCars
"rct1aa.ride.twister_trains", // VehicleType::SteelTwisterRollerCoasterTrain
"rct2.ride.mft", // VehicleType::WoodenTwisterRollerCoasterTrain
"rct1aa.ride.side_friction_cars", // VehicleType::WoodenSideFrictionCars
"rct1aa.ride.vintage_cars", // VehicleType::VintageCars
"rct1aa.ride.steam_trains_covered", // VehicleType::SteamTrainCoveredCars
"rct1aa.ride.stand_up_twister_trains", // VehicleType::StandUpSteelTwisterRollerCoasterTrain
"rct1aa.ride.floorless_twister_trains", // VehicleType::FloorlessSteelTwisterRollerCoasterTrain
"rct1aa.ride.steel_wild_mouse_cars", // VehicleType::SteelMouseCars
"rct1aa.ride.ski_lift_cars", // VehicleType::ChairliftCarsAlternative
"rct1aa.ride.suspended_monorail_trains", // VehicleType::SuspendedMonorailTrain
"rct1aa.ride.mini_helicopters", // VehicleType::HelicopterCars
"rct1aa.ride.virginia_reel_tubs", // VehicleType::VirginiaReelTubs
"rct1aa.ride.reverser_cars", // VehicleType::ReverserCars
"rct2.ride.golf1", // VehicleType::Golfers
"rct1aa.ride.splash_boats", // VehicleType::RiverRideBoats
"rct2.ride.vekst", // VehicleType::FlyingRollerCoasterTrain
"rct1aa.ride.hyper_twister_trains", // VehicleType::NonLoopingSteelTwisterRollerCoasterTrain
"rct1aa.ride.heartline_twister_cars", // VehicleType::HeartlineTwisterCars
"rct1aa.ride.heartline_twister_cars", // VehicleType::HeartlineTwisterCarsReversed
"", // VehicleType::Reserved
"rct2.ride.gdrop1", // VehicleType::RotodropCar
"rct1aa.ride.flying_saucers", // VehicleType::FlyingSaucers
"rct2.ride.chbuild", // VehicleType::CrookedHouseBuilding
"rct1aa.ride.bicycles", // VehicleType::Bicycles
"rct1ll.ride.hypercoaster_trains", // VehicleType::HypercoasterTrain
"rct1ll.ride.4_across_inverted_trains", // VehicleType::_4_Across_Inverted_Coaster_Train
"rct1ll.ride.coaster_boats", // VehicleType::WaterCoasterBoats
"rct1ll.ride.face_off_cars", // VehicleType::FaceoffCars
"rct1ll.ride.jet_skis", // VehicleType::JetSkis
"rct1ll.ride.rafts", // VehicleType::RaftBoats
"rct1ll.ride.steam_trains_american", // VehicleType::AmericanStyleSteamTrain
"rct1ll.ride.air_powered_trains", // VehicleType::AirPoweredCoasterTrain
"rct1ll.ride.inverted_hairpin_cars", // VehicleType::SuspendedWildMouseCars
"rct2.ride.enterp", // VehicleType::EnterpriseWheel
};
Guard::ArgumentInRange<size_t>(vehicleType, 0, std::size(map), "Unsupported RCT1 vehicle type.");
return map[vehicleType];
Guard::ArgumentInRange<size_t>(EnumValue(vehicleType), 0, std::size(map), "Unsupported RCT1 vehicle type.");
return map[EnumValue(vehicleType)];
}
std::string_view GetSmallSceneryObject(uint8_t smallSceneryType)
@ -1263,58 +1263,58 @@ namespace RCT1
{
static constexpr const char * map[] =
{
"rct2.scenery_wall.wmf", // RCT1_WALL_TYPE_MESH_FENCE
"rct2.scenery_wall.wmfg", // RCT1_WALL_TYPE_MESH_FENCE_WITH_GATE
"rct2.scenery_wall.wrw", // RCT1_WALL_TYPE_ROMAN
"rct2.scenery_wall.wew", // RCT1_WALL_TYPE_EGYPTIAN
"rct2.scenery_wall.whg", // RCT1_WALL_TYPE_HEDGE
"rct2.scenery_wall.whgg", // RCT1_WALL_TYPE_HEDGE_WITH_GATE
"rct2.scenery_wall.wcw1", // RCT1_WALL_TYPE_BLUE_PLAYING_CARDS
"rct2.scenery_wall.wcw2", // RCT1_WALL_TYPE_RED_PLAYING_CARDS
"rct2.scenery_wall.wsw", // RCT1_WALL_TYPE_WHITE_RAILING
"rct2.scenery_wall.wswg", // RCT1_WALL_TYPE_WHITE_RAILING_WITH_GATE
"rct2.scenery_wall.wmw", // RCT1_WALL_TYPE_MARTIAN
"rct2.scenery_wall.wallgl16", // RCT1_WALL_TYPE_GLASS_SMOOTH
"rct2.scenery_wall.wfw1", // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE
"rct2.scenery_wall.wfwg", // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_GATE
"rct2.scenery_wall.wpw1", // RCT1_WALL_TYPE_WOODEN_POST_FENCE
"rct2.scenery_wall.wpw2", // RCT1_WALL_TYPE_RED_WOODEN_POST_FENCE
"rct2.scenery_wall.wpf", // RCT1_WALL_TYPE_BARBED_WIRE
"rct2.scenery_wall.wpfg", // RCT1_WALL_TYPE_BARBED_WIRE_WITH_GATE
"rct2.scenery_wall.wwtw", // RCT1_WALL_TYPE_PRIMITIVE_TALL_WOOD_FENCE
"rct2.scenery_wall.wmww", // RCT1_WALL_TYPE_PRIMITIVE_SHORT_WOOD_FENCE
"rct2.scenery_wall.wsw1", // RCT1_WALL_TYPE_IRON_RAILING
"rct2.scenery_wall.wsw2", // RCT1_WALL_TYPE_IRON_RAILING_WITH_GATE
"rct2.scenery_wall.wgw2", // RCT1_WALL_TYPE_GLASS_PANELS
"rct2.scenery_wall.wbw", // RCT1_WALL_TYPE_BONE_FENCE
"rct2.scenery_wall.wbr1", // RCT1_WALL_TYPE_BRICK
"rct2.scenery_wall.wbrg", // RCT1_WALL_TYPE_BRICK_WITH_GATE
"rct2.scenery_wall.wfw1", // RCT1_WALL_TYPE_WHITE_WOODEN_PANEL_FENCE
"rct1.scenery_wall.wooden_fence_red", // RCT1_WALL_TYPE_RED_WOODEN_PANEL_FENCE
"rct2.scenery_wall.wbr2", // RCT1_WALL_TYPE_STONE
"rct2.scenery_wall.wbr3", // RCT1_WALL_TYPE_STONE_WITH_GATE
"rct2.scenery_wall.wpw3", // RCT1_WALL_TYPE_WOODEN_FENCE
"rct2.scenery_wall.wjf", // RCT1_WALL_TYPE_JUNGLE
"rct2.scenery_wall.wch", // RCT1_WALL_TYPE_CONIFER_HEDGE
"rct2.scenery_wall.wchg", // RCT1_WALL_TYPE_CONIFER_HEDGE_WITH_GATE
"rct2.scenery_wall.wc1", // RCT1_WALL_TYPE_SMALL_BROWN_CASTLE
"rct2.scenery_wall.wc2", // RCT1_WALL_TYPE_SMALL_GREY_CASTLE
"rct2.scenery_wall.wc3", // RCT1_WALL_TYPE_ROMAN_COLUMN
"rct2.scenery_wall.wc4", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE
"rct2.scenery_wall.wc5", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_CROSS
"rct2.scenery_wall.wc6", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_GATE
"rct2.scenery_wall.wc7", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_WINDOW
"rct2.scenery_wall.wc8", // RCT1_WALL_TYPE_MEDIUM_BROWN_CASTLE
"rct2.scenery_wall.wc9", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE
"rct2.scenery_wall.wc10", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_CROSS
"rct2.scenery_wall.wc11", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_GATE
"rct2.scenery_wall.wc12", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_WINDOW
"rct2.scenery_wall.wc13", // RCT1_WALL_TYPE_MEDIUM_GREY_CASTLE
"rct2.scenery_wall.wc14", // RCT1_WALL_TYPE_CREEPY
"rct2.scenery_wall.wc15", // RCT1_WALL_TYPE_CREEPY_GATE
"rct2.scenery_wall.wc16", // RCT1_WALL_TYPE_BARBED_WIRE_WITH_SNOW
"rct2.scenery_wall.wc17", // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_SNOW
"rct2.scenery_wall.wc18", // RCT1_WALL_TYPE_WOODEN_POST_FENCE_WITH_SNOW
"rct2.scenery_wall.wmf", // RCT1_WALL_TYPE_MESH_FENCE
"rct2.scenery_wall.wmfg", // RCT1_WALL_TYPE_MESH_FENCE_WITH_GATE
"rct2.scenery_wall.wrw", // RCT1_WALL_TYPE_ROMAN
"rct2.scenery_wall.wew", // RCT1_WALL_TYPE_EGYPTIAN
"rct2.scenery_wall.whg", // RCT1_WALL_TYPE_HEDGE
"rct2.scenery_wall.whgg", // RCT1_WALL_TYPE_HEDGE_WITH_GATE
"rct1.scenery_wall.playing_card_wall_1", // RCT1_WALL_TYPE_BLUE_PLAYING_CARDS
"rct1.scenery_wall.playing_card_wall_2", // RCT1_WALL_TYPE_RED_PLAYING_CARDS
"rct2.scenery_wall.wsw", // RCT1_WALL_TYPE_WHITE_RAILING
"rct2.scenery_wall.wswg", // RCT1_WALL_TYPE_WHITE_RAILING_WITH_GATE
"rct2.scenery_wall.wmw", // RCT1_WALL_TYPE_MARTIAN
"rct1aa.scenery_wall.glass_wall", // RCT1_WALL_TYPE_GLASS_SMOOTH
"rct1.scenery_wall.wooden_fence_brown", // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE
"rct1.scenery_wall.wooden_fence_brown_gate", // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_GATE
"rct1aa.scenery_wall.wooden_post_wall_1", // RCT1_WALL_TYPE_WOODEN_POST_FENCE
"rct1aa.scenery_wall.wooden_post_wall_2", // RCT1_WALL_TYPE_RED_WOODEN_POST_FENCE
"rct2.scenery_wall.wpf", // RCT1_WALL_TYPE_BARBED_WIRE
"rct2.scenery_wall.wpfg", // RCT1_WALL_TYPE_BARBED_WIRE_WITH_GATE
"rct2.scenery_wall.wwtw", // RCT1_WALL_TYPE_PRIMITIVE_TALL_WOOD_FENCE
"rct2.scenery_wall.wmww", // RCT1_WALL_TYPE_PRIMITIVE_SHORT_WOOD_FENCE
"rct2.scenery_wall.wsw1", // RCT1_WALL_TYPE_IRON_RAILING
"rct2.scenery_wall.wsw2", // RCT1_WALL_TYPE_IRON_RAILING_WITH_GATE
"rct2.scenery_wall.wgw2", // RCT1_WALL_TYPE_GLASS_PANELS
"rct2.scenery_wall.wbw", // RCT1_WALL_TYPE_BONE_FENCE
"rct2.scenery_wall.wbr1", // RCT1_WALL_TYPE_BRICK
"rct2.scenery_wall.wbrg", // RCT1_WALL_TYPE_BRICK_WITH_GATE
"rct1.scenery_wall.wooden_fence_white", // RCT1_WALL_TYPE_WHITE_WOODEN_PANEL_FENCE
"rct1.scenery_wall.wooden_fence_red", // RCT1_WALL_TYPE_RED_WOODEN_PANEL_FENCE
"rct2.scenery_wall.wbr2", // RCT1_WALL_TYPE_STONE
"rct2.scenery_wall.wbr3", // RCT1_WALL_TYPE_STONE_WITH_GATE
"rct1ll.scenery_wall.medieval_wooden_fence", // RCT1_WALL_TYPE_WOODEN_FENCE
"rct2.scenery_wall.wjf", // RCT1_WALL_TYPE_JUNGLE
"rct2.scenery_wall.wch", // RCT1_WALL_TYPE_CONIFER_HEDGE
"rct2.scenery_wall.wchg", // RCT1_WALL_TYPE_CONIFER_HEDGE_WITH_GATE
"rct2.scenery_wall.wc1", // RCT1_WALL_TYPE_SMALL_BROWN_CASTLE
"rct2.scenery_wall.wc2", // RCT1_WALL_TYPE_SMALL_GREY_CASTLE
"rct1.scenery_wall.roman_column_wall", // RCT1_WALL_TYPE_ROMAN_COLUMN
"rct2.scenery_wall.wc4", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE
"rct2.scenery_wall.wc5", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_CROSS
"rct2.scenery_wall.wc6", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_GATE
"rct2.scenery_wall.wc7", // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_WINDOW
"rct2.scenery_wall.wc8", // RCT1_WALL_TYPE_MEDIUM_BROWN_CASTLE
"rct2.scenery_wall.wc9", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE
"rct2.scenery_wall.wc10", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_CROSS
"rct2.scenery_wall.wc11", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_GATE
"rct2.scenery_wall.wc12", // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_WINDOW
"rct2.scenery_wall.wc13", // RCT1_WALL_TYPE_MEDIUM_GREY_CASTLE
"rct2.scenery_wall.wc14", // RCT1_WALL_TYPE_CREEPY
"rct2.scenery_wall.wc15", // RCT1_WALL_TYPE_CREEPY_GATE
"rct2.scenery_wall.wc16", // RCT1_WALL_TYPE_BARBED_WIRE_WITH_SNOW
"rct1ll.scenery_wall.wooden_fence_brown_snow", // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_SNOW
"rct2.scenery_wall.wc18", // RCT1_WALL_TYPE_WOODEN_POST_FENCE_WITH_SNOW
};
if (wallType < std::size(map))
return map[wallType];
@ -1322,6 +1322,23 @@ namespace RCT1
return map[0];
}
std::string_view GetBannerObject(BannerType bannerType)
{
static constexpr const char * map[] =
{
"rct2.footpath_banner.bn1", // BannerType::Plain
"rct2.footpath_banner.bn2", // BannerType::Jungle
"rct2.footpath_banner.bn3", // BannerType::Roman
"rct2.footpath_banner.bn4", // BannerType::Egyptian
"rct2.footpath_banner.bn5", // BannerType::Mine
"rct2.footpath_banner.bn6", // BannerType::Jurassic
"rct2.footpath_banner.bn7", // BannerType::Oriental
"rct2.footpath_banner.bn8", // BannerType::Snow
"rct2.footpath_banner.bn9", // BannerType::Space
};
return map[EnumValue(bannerType)];
}
std::string_view GetPathSurfaceObject(uint8_t pathType)
{
static constexpr const char * map[] =
@ -1438,13 +1455,13 @@ namespace RCT1
{ "rct2.scenery_small.tic", "rct2.scenery_small.tlc", "rct2.scenery_small.tmc", "rct2.scenery_small.tmp", "rct2.scenery_small.titc", "rct2.scenery_small.tghc", "rct2.scenery_small.tac", "rct2.scenery_small.tghc2", "rct2.scenery_small.tcj", "rct2.scenery_small.tmbj", "rct2.scenery_small.tcf", "rct2.scenery_small.tcl", "rct2.scenery_small.trf", "rct2.scenery_small.trf2", "rct2.scenery_small.tel", "rct2.scenery_small.tap", "rct2.scenery_small.tsp", "rct2.scenery_small.tmzp", "rct2.scenery_small.tcrp", "rct2.scenery_small.tbp", "rct2.scenery_small.tlp", "rct2.scenery_small.twp", "rct2.scenery_small.tas", "rct2.scenery_small.tmg", "rct2.scenery_small.tww", "rct2.scenery_small.tsb", "rct2.scenery_small.tvl", "rct2.scenery_small.tcy", "rct2.scenery_small.tns", "rct2.scenery_small.twn", "rct2.scenery_small.tce", "rct2.scenery_small.tco", "rct2.scenery_small.thl", "rct2.scenery_small.tcc", "rct2.scenery_small.tf1", "rct2.scenery_small.tf2", "rct2.scenery_small.tct", "rct2.scenery_small.th1", "rct2.scenery_small.th2", "rct2.scenery_small.tpm", "rct2.scenery_small.tropt1",
"rct2.scenery_small.ts0", "rct2.scenery_small.ts1", "rct2.scenery_small.ts2", "rct2.scenery_small.ts3", "rct2.scenery_small.ts4", "rct2.scenery_small.ts5", "rct2.scenery_small.ts6", "rct2.scenery_small.tef", "rct2.scenery_small.tal", "rct2.scenery_small.tsq", "rct2.scenery_small.tht", "rct2.scenery_small.tcb", "rct2.scenery_small.tdm", "rct2.scenery_small.tsd", "rct2.scenery_small.torn1", "rct2.scenery_small.torn2", "rct2.scenery_small.tgs", "rct2.scenery_small.tus", "rct2.scenery_small.tbc", "rct2.scenery_small.tsc", "rct2.scenery_small.twf", "rct2.scenery_small.tsh0", "rct2.scenery_small.tsh1", "rct2.scenery_small.tsh2", "rct2.scenery_small.tsh3", "rct2.scenery_small.tsh4", "rct2.scenery_small.tsh5", "rct2.scenery_small.tdf", "rct2.scenery_small.tsh", "rct2.scenery_small.thrs", "rct2.scenery_small.tstd", "rct2.scenery_small.tbr", "rct2.scenery_small.ttf", "rct2.scenery_wall.whg", "rct2.scenery_wall.whgg", "rct2.scenery_wall.wch", "rct2.scenery_wall.wchg",
"rct2.scenery_small.tg1", "rct2.scenery_small.tg2", "rct2.scenery_small.tg3", "rct2.scenery_small.tg4", "rct2.scenery_small.tg5", "rct2.scenery_small.tg6", "rct2.scenery_small.tg7", "rct2.scenery_small.tg8", "rct2.scenery_small.tg9", "rct2.scenery_small.tg10", "rct2.scenery_small.tg11", "rct2.scenery_small.tg12", "rct2.scenery_small.tg13", "rct2.scenery_small.tg14", "rct2.scenery_small.tg15", "rct2.scenery_small.tg16", "rct2.scenery_small.tg17", "rct2.scenery_small.tg18", "rct2.scenery_small.tg19", "rct2.scenery_small.tg20", "rct2.scenery_small.tg21",
"rct2.scenery_wall.wbr1a", "rct2.scenery_wall.wbr2a", "rct2.scenery_wall.wallbb34", "rct2.scenery_wall.walltn32", "rct2.scenery_small.tntroof1", "rct2.scenery_wall.wallbb33", "rct2.scenery_wall.wallbb32", "rct2.scenery_wall.wallbb16", "rct2.scenery_wall.wallbb8", "rct2.scenery_small.roof5", "rct2.scenery_small.roof7", "rct2.scenery_wall.wallrs32", "rct2.scenery_wall.wallrs16", "rct2.scenery_wall.wallrs8", "rct2.scenery_wall.wallbr32", "rct2.scenery_wall.wallbr16", "rct2.scenery_wall.wallbr8", "rct2.scenery_wall.wallbrdr", "rct2.scenery_wall.wallbrwn", "rct2.scenery_small.brbase", "rct2.scenery_small.roof1", "rct2.scenery_small.roof2", "rct2.scenery_small.roof3", "rct2.scenery_small.roof4", "rct2.scenery_wall.wallcb32", "rct2.scenery_wall.wallcb16", "rct2.scenery_wall.wallcb8", "rct2.scenery_wall.wallcbdr", "rct2.scenery_wall.wallcbwn", "rct2.scenery_small.brbase2", "rct2.scenery_small.cwbcrv33", "rct2.scenery_small.cwbcrv32", "rct2.scenery_small.brcrrf1", "rct2.scenery_small.roof6", "rct2.scenery_small.roof8", "rct2.scenery_wall.wallcf32", "rct2.scenery_wall.wallcf16", "rct2.scenery_wall.wallcf8", "rct2.scenery_wall.wallcfdr", "rct2.scenery_wall.wallcfwn", "rct2.scenery_wall.wallcfar", "rct2.scenery_small.brbase3", "rct2.scenery_small.cwfcrv33", "rct2.scenery_small.cwfcrv32", "rct2.scenery_small.brcrrf2", "rct2.scenery_small.roof9", "rct2.scenery_small.roof11", "rct2.scenery_small.roof10", "rct2.scenery_small.roof12", "rct2.scenery_small.corroof2", "rct2.scenery_wall.wallco16", "rct2.scenery_small.corroof", "rct2.scenery_wall.walllt32", "rct2.scenery_wall.wallsk16", "rct2.scenery_wall.wallsk32", "rct2.scenery_small.sktdw2", "rct2.scenery_small.sktdw", "rct2.scenery_small.sktbase", "rct2.scenery_small.sktbaset", "rct2.scenery_small.suppw2", "rct2.scenery_small.suppw1", "rct2.scenery_small.suppw3", "rct2.scenery_small.suppleg1", "rct2.scenery_small.suppleg2", "rct2.scenery_small.sumrf", "rct2.scenery_wall.wallrh32",
"rct2.scenery_wall.wmf", "rct2.scenery_wall.wmfg", "rct2.scenery_wall.wsw", "rct2.scenery_wall.wswg", "rct2.scenery_wall.wfw1", "rct1.scenery_wall.wooden_fence_red", "rct2.scenery_wall.wfwg", "rct2.scenery_wall.wpf", "rct2.scenery_wall.wpfg", "rct2.scenery_wall.wsw1", "rct2.scenery_wall.wsw2", "rct2.scenery_wall.wbr1", "rct2.scenery_wall.wbrg", "rct2.scenery_wall.wbr2", "rct2.scenery_wall.wbr3", "rct2.scenery_wall.wallmm16", "rct2.scenery_wall.wallmm17",
"rct2.scenery_wall.wbr1a", "rct2.scenery_wall.wbr2a", "rct2.scenery_wall.wallbb34", "rct2.scenery_wall.walltn32", "rct2.scenery_small.tntroof1", "rct2.scenery_wall.wallbb33", "toontowner.scenery_small.xxbbbr01_fix", "rct2.scenery_wall.wallbb32", "rct2.scenery_wall.wallbb16", "rct2.scenery_wall.wallbb8", "rct2.scenery_small.roof5", "rct2.scenery_small.roof7", "rct2.scenery_wall.wallrs32", "rct2.scenery_wall.wallrs16", "rct2.scenery_wall.wallrs8", "rct2.scenery_wall.wallbr32", "rct2.scenery_wall.wallbr16", "rct2.scenery_wall.wallbr8", "rct2.scenery_wall.wallbrdr", "rct2.scenery_wall.wallbrwn", "rct2.scenery_small.brbase", "rct2.scenery_small.roof1", "toontowner.scenery_small.ttrftl02", "toontowner.scenery_small.ttrftl03", "toontowner.scenery_small.ttrftl04", "rct2.scenery_small.roof2", "rct2.scenery_small.roof3", "toontowner.scenery_small.ttrftl07", "toontowner.scenery_small.ttrftl08", "rct2.scenery_small.roof4", "rct2.scenery_wall.wallcb32", "rct2.scenery_wall.wallcb16", "rct2.scenery_wall.wallcb8", "rct2.scenery_wall.wallcbdr", "rct2.scenery_wall.wallcbwn", "rct2.scenery_small.brbase2", "rct2.scenery_small.cwbcrv33", "rct2.scenery_small.cwbcrv32", "rct2.scenery_small.brcrrf1", "rct2.scenery_small.roof6", "rct2.scenery_small.roof8", "rct2.scenery_wall.wallcf32", "rct2.scenery_wall.wallcf16", "rct2.scenery_wall.wallcf8", "rct2.scenery_wall.wallcfdr", "rct2.scenery_wall.wallcfwn", "rct2.scenery_wall.wallcfar", "rct2.scenery_small.brbase3", "rct2.scenery_small.cwfcrv33", "rct2.scenery_small.cwfcrv32", "rct2.scenery_small.brcrrf2", "rct2.scenery_small.roof9", "rct2.scenery_small.roof11", "rct2.scenery_small.roof10", "rct2.scenery_small.roof12", "rct2.scenery_small.corroof2", "rct2.scenery_wall.wallco16", "rct2.scenery_small.corroof", "rct2.scenery_wall.walllt32", "rct2.scenery_wall.wallsk16", "rct2.scenery_wall.wallsk32", "rct2.scenery_small.sktdw2", "rct2.scenery_small.sktdw", "rct2.scenery_small.sktbase", "rct2.scenery_small.sktbaset", "rct2.scenery_small.suppw2", "rct2.scenery_small.suppw1", "rct2.scenery_small.suppw3", "rct2.scenery_small.suppleg1", "rct2.scenery_small.suppleg2", "rct2.scenery_small.sumrf", "rct2.scenery_wall.wallrh32",
"rct2.scenery_wall.wmf", "rct2.scenery_wall.wmfg", "rct2.scenery_wall.wsw", "rct2.scenery_wall.wswg", "rct2.scenery_wall.wfw1", "rct2.scenery_wall.wfwg", "rct1.scenery_wall.wooden_fence_brown", "rct1.scenery_wall.wooden_fence_brown_gate", "rct1.scenery_wall.wooden_fence_red", "rct1.scenery_wall.wooden_fence_white", "rct2.scenery_wall.wpf", "rct2.scenery_wall.wpfg", "rct2.scenery_wall.wsw1", "rct2.scenery_wall.wsw2", "rct2.scenery_wall.wbr1", "rct2.scenery_wall.wbrg", "rct2.scenery_wall.wbr2", "rct2.scenery_wall.wbr3", "rct2.scenery_wall.wallmm16", "rct2.scenery_wall.wallmm17",
"rct2.footpath_item.lamp1", "rct2.footpath_item.lamp2", "rct2.footpath_item.litter1", "rct2.footpath_item.bench1", "rct2.footpath_item.qtv1", "rct2.footpath_banner.bn1", "rct2.scenery_wall.wallpost", "rct2.scenery_wall.wallsign", "rct2.scenery_large.ssig1", "rct2.scenery_large.ssig2", "rct2.scenery_large.ssig3", "rct2.scenery_large.ssig4" },
// RCT1_SCENERY_THEME_MINE
{ "rct2.scenery_large.smh1", "rct2.scenery_large.smh2", "rct2.scenery_large.smn1", "rct2.scenery_small.tbw", "rct2.scenery_small.tbr1", "rct2.scenery_small.tbr2", "rct2.scenery_small.tml", "rct2.scenery_small.tmw", "rct2.scenery_small.tbr3", "rct2.scenery_small.tbr4", "rct2.scenery_small.tmj", "rct2.footpath_banner.bn5", "rct2.scenery_wall.wallwd8", "rct2.scenery_wall.wallwd16", "rct2.scenery_wall.wallwd32", "rct2.scenery_wall.wallwd33", "rct2.scenery_wall.wallmn32", "rct2.scenery_small.wdbase", "rct2.scenery_small.minroof1", "rct2.scenery_small.roof13", "rct2.footpath_item.littermn" },
{ "rct2.scenery_large.smh1", "rct2.scenery_large.smh2", "rct2.scenery_large.smn1", "rct2.scenery_small.tbw", "rct2.scenery_small.tbr1", "rct2.scenery_small.tbr2", "rct2.scenery_small.tml", "rct2.scenery_small.tmw", "rct2.scenery_small.tbr3", "rct2.scenery_small.tbr4", "rct2.scenery_small.tmj", "rct2.footpath_banner.bn5", "rct2.scenery_wall.wallwd8", "rct2.scenery_wall.wallwd16", "rct2.scenery_wall.wallwd32", "rct2.scenery_wall.wallwd33", "rct2.scenery_wall.wallmn32", "rct2.scenery_small.wdbase", "rct2.scenery_small.minroof1", "rct2.scenery_small.roof13", "toontowner.scenery_small.ttrfwd01", "toontowner.scenery_small.ttrfwd02", "toontowner.scenery_small.ttrfwd03", "toontowner.scenery_small.ttrfwd04", "toontowner.scenery_small.ttrfwd06", "toontowner.scenery_small.ttrfwd07", "toontowner.scenery_small.ttrfwd08", "rct2.footpath_item.littermn" },
// RCT1_SCENERY_THEME_CLASSICAL_ROMAN
{ "rct2.scenery_large.scol", "rct2.scenery_small.tt1", "rct2.scenery_small.trms", "rct2.scenery_small.trws", "rct2.scenery_small.trc", "rct2.scenery_small.tqf", "rct2.scenery_wall.wrw", "rct2.scenery_wall.wrwa", "rct2.scenery_small.romroof2", "rct2.scenery_wall.wc3", "rct2.scenery_small.romroof1", "rct2.footpath_banner.bn3" },
{ "rct2.scenery_large.scol", "rct2.scenery_small.tt1", "rct2.scenery_small.trms", "rct2.scenery_small.trws", "rct2.scenery_small.trc", "rct2.scenery_small.tqf", "rct2.scenery_wall.wrw", "rct2.scenery_wall.wrwa", "rct2.scenery_small.romroof2", "rct1.scenery_wall.roman_column_wall", "rct2.scenery_wall.wc3", "rct2.scenery_small.romroof1", "rct2.footpath_banner.bn3" },
// RCT1_SCENERY_THEME_EGYPTIAN
{ "rct2.scenery_large.sspx", "rct2.scenery_large.scln", "rct2.scenery_large.spyr", "rct2.scenery_small.tes1", "rct2.scenery_small.ten", "rct2.scenery_small.ters", "rct2.scenery_small.terb", "rct2.scenery_small.tep", "rct2.scenery_wall.wew", "rct2.footpath_item.lamp3", "rct2.footpath_banner.bn4", "rct2.footpath_item.benchstn" },
// RCT1_SCENERY_THEME_MARTIAN
@ -1452,21 +1469,21 @@ namespace RCT1
// RCT1_SCENERY_THEME_JUMPING_FOUNTAINS (Single researchable scenery item)
{ "rct2.footpath_item.jumpfnt1" },
// RCT1_SCENERY_THEME_WONDERLAND
{ "rct2.scenery_small.twh1", "rct2.scenery_small.twh2", "rct2.scenery_small.tst1", "rct2.scenery_small.tst2", "rct2.scenery_small.tms1", "rct2.scenery_small.tst3", "rct2.scenery_small.tst4", "rct2.scenery_small.tst5", "rct2.scenery_small.tas1", "rct2.scenery_small.tas2", "rct2.scenery_small.tas3", "rct2.scenery_small.tas4", "rct2.scenery_small.chbbase", "rct2.scenery_small.tp1", "rct2.scenery_small.tp2", "rct2.scenery_small.tk1", "rct2.scenery_small.tk2", "rct2.scenery_small.tr1", "rct2.scenery_small.tr2", "rct2.scenery_small.tq1", "rct2.scenery_small.tq2", "rct2.scenery_small.tb1", "rct2.scenery_small.tb2", "rct2.scenery_small.tk3", "rct2.scenery_small.tk4", "rct2.scenery_wall.wcw1", "rct2.scenery_wall.wcw2" },
{ "rct2.scenery_small.twh1", "rct2.scenery_small.twh2", "rct2.scenery_small.tst1", "rct2.scenery_small.tst2", "rct2.scenery_small.tms1", "rct2.scenery_small.tst3", "rct2.scenery_small.tst4", "rct2.scenery_small.tst5", "rct2.scenery_small.tas1", "rct2.scenery_small.tas2", "rct2.scenery_small.tas3", "rct2.scenery_small.tas4", "rct2.scenery_small.chbbase", "rct2.scenery_small.tp1", "rct2.scenery_small.tp2", "rct2.scenery_small.tk1", "rct2.scenery_small.tk2", "rct2.scenery_small.tr1", "rct2.scenery_small.tr2", "rct2.scenery_small.tq1", "rct2.scenery_small.tq2", "rct2.scenery_small.tb1", "rct2.scenery_small.tb2", "rct2.scenery_small.tk3", "rct2.scenery_small.tk4", "rct1.scenery_wall.playing_card_wall_1", "rct1.scenery_wall.playing_card_wall_2", "rct2.scenery_wall.wcw1", "rct2.scenery_wall.wcw2" },
// RCT1_SCENERY_THEME_JURASSIC
{ "rct2.scenery_small.tbn", "rct2.scenery_small.tbn1", "rct2.scenery_small.tdn4", "rct2.scenery_small.tdn5", "rct2.scenery_large.sdn1", "rct2.scenery_large.sdn2", "rct2.scenery_large.sdn3", "rct2.scenery_wall.wwtw", "rct2.scenery_wall.wmww", "rct2.scenery_wall.wwtwa", "rct2.scenery_wall.wbw", "rct2.footpath_banner.bn6" },
// RCT1_SCENERY_THEME_SPOOKY,
{ "rct2.scenery_large.ssk1", "rct2.scenery_small.tdt1", "rct2.scenery_small.tdt2", "rct2.scenery_small.tdt3", "rct2.scenery_small.tmm1", "rct2.scenery_small.tmm2", "rct2.scenery_small.tmm3", "rct2.scenery_small.tgs1", "rct2.scenery_small.tgs2", "rct2.scenery_small.tgs3", "rct2.scenery_small.tgs4", "rct2.scenery_small.smskull", "rct2.scenery_wall.wallrk32" },
// RCT1_SCENERY_THEME_JUNGLE
{ "rct2.scenery_small.tjt1", "rct2.scenery_small.tjt2", "rct2.scenery_small.tjb1", "rct2.scenery_small.tjt3", "rct2.scenery_small.tjt4", "rct2.scenery_small.tjp1", "rct2.scenery_small.tjb2", "rct2.scenery_small.tjt5", "rct2.scenery_small.tjb3", "rct2.scenery_small.tjb4", "rct2.scenery_small.tjt6", "rct2.scenery_small.tjp2", "rct2.scenery_small.tjf", "rct2.scenery_wall.wpw1", "rct2.scenery_wall.wpw2", "rct2.scenery_wall.wjf", "rct2.footpath_banner.bn2", "rct2.scenery_wall.walljn32", "rct2.scenery_small.jngroof1", "rct2.scenery_small.roof14", "rct2.footpath_item.benchlog" },
{ "rct2.scenery_small.tjt1", "rct2.scenery_small.tjt2", "rct2.scenery_small.tjb1", "rct2.scenery_small.tjt3", "rct2.scenery_small.tjt4", "rct2.scenery_small.tjp1", "rct2.scenery_small.tjb2", "rct2.scenery_small.tjt5", "rct2.scenery_small.tjb3", "rct2.scenery_small.tjb4", "rct2.scenery_small.tjt6", "rct2.scenery_small.tjp2", "rct2.scenery_small.tjf", "rct1aa.scenery_wall.wooden_post_wall_1", "rct1aa.scenery_wall.wooden_post_wall_2", "rct2.scenery_wall.wpw1", "rct2.scenery_wall.wpw2", "rct2.scenery_wall.wjf", "couger.scenery_wall.acwwf32", "couger.scenery_wall.acww33", "rct2.footpath_banner.bn2", "rct2.scenery_wall.walljn32", "rct2.scenery_small.jngroof1", "rct2.scenery_small.roof14", "rct2.footpath_item.benchlog" },
// RCT1_SCENERY_THEME_ABSTRACT
{ "rct2.scenery_small.tge1", "rct2.scenery_small.tge2", "rct2.scenery_small.tge3", "rct2.scenery_small.tge4", "rct2.scenery_small.tge5", "rct2.scenery_small.tgc1", "rct2.scenery_small.tgc2", "rct2.scenery_wall.wallgl8", "rct2.scenery_wall.wallgl16", "rct2.scenery_wall.wallgl32", "rct2.scenery_small.georoof1", "rct2.scenery_wall.wgw2", "rct2.scenery_small.georoof2" },
{ "rct2.scenery_small.tge1", "rct2.scenery_small.tge2", "rct2.scenery_small.tge3", "rct2.scenery_small.tge4", "rct2.scenery_small.tge5", "rct2.scenery_small.tgc1", "rct2.scenery_small.tgc2", "rct2.scenery_wall.wallgl8", "rct2.scenery_wall.wallgl16", "rct2.scenery_wall.wallgl32", "rct2.scenery_small.georoof1", "rct2.scenery_wall.wgw2", "rct1aa.scenery_wall.glass_wall", "toontowner.scenery_small.ttrfgl01", "toontowner.scenery_small.ttrfgl02", "rct2.scenery_small.georoof2", "toontowner.scenery_small.ttrfgl03" },
// RCT1_SCENERY_THEME_GARDEN_CLOCK (Single researchable scenery item)
{ "rct2.scenery_small.tck" },
// RCT1_SCENERY_THEME_SNOW_ICE
{ "rct2.scenery_large.sip", "rct2.scenery_small.tsm", "rct2.scenery_small.tig", "rct2.scenery_small.tsf1", "rct2.scenery_small.tsf2", "rct2.scenery_small.tsf3", "rct2.scenery_small.tsnc", "rct2.scenery_small.tsnb", "rct2.scenery_wall.wc16", "rct2.scenery_wall.wc17", "rct2.scenery_wall.wc18", "rct2.footpath_item.jumpsnw1", "rct2.scenery_small.tcfs", "rct2.scenery_small.trfs", "rct2.scenery_small.trf3", "rct2.scenery_small.tnss", "rct2.footpath_banner.bn8", "rct2.scenery_wall.wallig16", "rct2.scenery_wall.wallig24", "rct2.scenery_small.igroof" },
{ "rct2.scenery_large.sip", "rct2.scenery_small.tsm", "rct2.scenery_small.tig", "rct2.scenery_small.tsf1", "rct2.scenery_small.tsf2", "rct2.scenery_small.tsf3", "rct2.scenery_small.tsnc", "rct2.scenery_small.tsnb", "rct2.scenery_wall.wc16", "rct1ll.scenery_wall.wooden_fence_brown_snow", "rct2.scenery_wall.wc17", "rct2.scenery_wall.wc18", "rct2.footpath_item.jumpsnw1", "rct2.scenery_small.tcfs", "rct2.scenery_small.trfs", "rct2.scenery_small.trf3", "rct2.scenery_small.tnss", "rct2.footpath_banner.bn8", "rct2.scenery_wall.wallig16", "rct2.scenery_wall.wallig24", "rct2.scenery_small.igroof" },
// RCT1_SCENERY_THEME_MEDIEVAL
{ "rct2.scenery_small.tct1", "rct2.scenery_large.stb1", "rct2.scenery_large.stb2", "rct2.scenery_wall.wc1", "rct2.scenery_wall.wc4", "rct2.scenery_wall.wc5", "rct2.scenery_wall.wc6", "rct2.scenery_wall.wc7", "rct2.scenery_wall.wc8", "rct2.scenery_wall.wallcz32", "rct2.scenery_wall.wallcy32", "rct2.scenery_small.tct2", "rct2.scenery_large.stg1", "rct2.scenery_large.stg2", "rct2.scenery_wall.wc2", "rct2.scenery_wall.wc9", "rct2.scenery_wall.wc10", "rct2.scenery_wall.wc11", "rct2.scenery_wall.wc12", "rct2.scenery_wall.wc13", "rct2.scenery_wall.wallcw32", "rct2.scenery_wall.wallcx32", "rct2.scenery_small.tcn", "rct2.scenery_small.ttg", "rct2.scenery_large.sct", "rct2.scenery_large.soh1", "rct2.scenery_large.soh2", "rct2.scenery_large.soh3", "rct2.scenery_wall.wpw3", "rct2.scenery_wall.wallcfpc", "rct2.scenery_wall.wallcbpc" },
{ "rct2.scenery_small.tct1", "rct2.scenery_large.stb1", "rct2.scenery_large.stb2", "rct2.scenery_wall.wc1", "rct2.scenery_wall.wc4", "rct2.scenery_wall.wc5", "rct2.scenery_wall.wc6", "rct2.scenery_wall.wc7", "rct2.scenery_wall.wc8", "rct2.scenery_wall.wallcz32", "rct2.scenery_wall.wallcy32", "rct2.scenery_small.tct2", "rct2.scenery_large.stg1", "rct2.scenery_large.stg2", "rct2.scenery_wall.wc2", "rct2.scenery_wall.wc9", "rct2.scenery_wall.wc10", "rct2.scenery_wall.wc11", "rct2.scenery_wall.wc12", "rct2.scenery_wall.wc13", "rct2.scenery_wall.wallcw32", "rct2.scenery_wall.wallcx32", "rct2.scenery_small.tcn", "rct2.scenery_small.ttg", "rct2.scenery_large.sct", "rct2.scenery_large.soh1", "rct2.scenery_large.soh2", "rct2.scenery_large.soh3", "rct1ll.scenery_wall.medieval_wooden_fence", "rct2.scenery_wall.wpw3", "rct2.scenery_wall.wallcfpc", "rct2.scenery_wall.wallcbpc" },
// RCT1_SCENERY_THEME_SPACE
{ "rct2.scenery_large.ssr", "rct2.scenery_large.sst", "rct2.scenery_large.ssh", "rct2.scenery_small.tscp", "rct2.scenery_small.tsph", "rct2.scenery_small.tsc2", "rct2.scenery_small.tsp1", "rct2.scenery_small.tsp2", "rct2.scenery_wall.wallsp32", "rct2.scenery_small.spcroof1", "rct2.footpath_banner.bn9", "rct2.footpath_item.benchspc", "rct2.footpath_item.littersp" },
// RCT1_SCENERY_THEME_CREEPY
@ -1487,4 +1504,17 @@ namespace RCT1
return origTrackType;
}
bool VehicleTypeIsReversed(const VehicleType vehicleType)
{
switch (vehicleType)
{
case VehicleType::SteelRollerCoasterTrainBackwards:
case VehicleType::WoodenRollerCoasterTrainBackwards:
case VehicleType::HeartlineTwisterCarsReversed:
return true;
default:
return false;
}
}
} // namespace RCT1

View File

@ -11,6 +11,7 @@
#include "../common.h"
#include "../entity/Peep.h"
#include "RCT1.h"
#include <vector>
@ -27,15 +28,15 @@ namespace RCT1
colour_t GetColour(colour_t colour);
::PeepSpriteType GetPeepSpriteType(PeepSpriteType rct1SpriteType);
uint8_t GetRideType(RideType rideType, uint8_t vehicleType);
VehicleColourSchemeCopyDescriptor GetColourSchemeCopyDescriptor(uint8_t vehicleType);
uint8_t GetRideType(RideType rideType, VehicleType vehicleType);
VehicleColourSchemeCopyDescriptor GetColourSchemeCopyDescriptor(VehicleType vehicleType);
bool RideTypeUsesVehicles(RideType rideType);
bool PathIsQueue(uint8_t pathType);
uint8_t NormalisePathAddition(uint8_t pathAdditionType);
uint8_t GetVehicleSubEntryIndex(uint8_t rct1VehicleType, uint8_t vehicleSubEntry);
uint8_t GetVehicleSubEntryIndex(VehicleType rct1VehicleType, uint8_t vehicleSubEntry);
std::string_view GetRideTypeObject(RideType rideType, bool isLL);
std::string_view GetVehicleObject(uint8_t vehicleType);
std::string_view GetVehicleObject(VehicleType vehicleType);
std::string_view GetSmallSceneryObject(uint8_t smallSceneryType);
std::string_view GetLargeSceneryObject(uint8_t largeSceneryType);
/**
@ -43,6 +44,7 @@ namespace RCT1
*/
int32_t MapSlopedWall(uint8_t wallType);
std::string_view GetWallObject(uint8_t wallType);
std::string_view GetBannerObject(BannerType bannerType);
std::string_view GetPathSurfaceObject(uint8_t pathType);
std::string_view GetPathAddtionObject(uint8_t pathAdditionType);
std::string_view GetFootpathRailingsObject(uint8_t footpathRailingsType);
@ -52,4 +54,6 @@ namespace RCT1
std::string_view GetTerrainEdgeObject(uint8_t terrainEdge);
const std::vector<const char*> GetSceneryObjects(uint8_t sceneryType);
bool VehicleTypeIsReversed(const VehicleType vehicleType);
} // namespace RCT1

View File

@ -29,7 +29,7 @@ constexpr RideTypeDescriptor DodgemsRTD =
RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE | 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,
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT,
.RideModes = EnumsToFlags(RideMode::Dodgems),
.DefaultMode = RideMode::Dodgems,
.OperatingSettings = { 20, 180, 0, 0, 0, 0 },

View File

@ -28,8 +28,7 @@ constexpr RideTypeDescriptor FlyingSaucersRTD =
RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS | RIDE_TYPE_FLAG_NO_TEST_MODE |
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,
RIDE_TYPE_FLAG_SINGLE_SESSION | RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT,
.RideModes = EnumsToFlags(RideMode::Dodgems),
.DefaultMode = RideMode::Dodgems,
.OperatingSettings = { 20, 180, 0, 0, 0, 0 },

View File

@ -26,7 +26,7 @@ constexpr RideTypeDescriptor MazeRTD =
.StartTrackPiece = TrackElemType::Maze,
.TrackPaintFunctions = TrackDrawerDescriptor(GetTrackPaintFunctionMaze),
.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 |
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_PEEP_CAN_USE_UMBRELLA | RIDE_TYPE_FLAG_IS_MAZE,
.RideModes = EnumsToFlags(RideMode::Maze),
.DefaultMode = RideMode::Maze,

View File

@ -26,7 +26,7 @@ constexpr RideTypeDescriptor MiniGolfRTD =
.TrackPaintFunctions = TrackDrawerDescriptor(GetTrackPaintFunctionMiniGolf),
.Flags = RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_NO_TEST_MODE | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_HAS_ONE_STATION |
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,
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT,
.RideModes = EnumsToFlags(RideMode::ContinuousCircuit),
.DefaultMode = RideMode::ContinuousCircuit,
.OperatingSettings = { 0, 0, 0, 0, 0, 0 },

View File

@ -429,12 +429,14 @@ static std::vector<ScenerySelection> GetAllMiscScenery()
{
std::vector<ScenerySelection> miscScenery;
std::vector<ScenerySelection> nonMiscScenery;
std::vector<ObjectEntryIndex> sceneryGroupIds;
for (ObjectEntryIndex i = 0; i < MAX_SCENERY_GROUP_OBJECTS; i++)
{
const auto* sgEntry = OpenRCT2::ObjectManager::GetObjectEntry<SceneryGroupEntry>(i);
if (sgEntry != nullptr)
{
nonMiscScenery.insert(nonMiscScenery.end(), sgEntry->SceneryEntries.begin(), sgEntry->SceneryEntries.end());
sceneryGroupIds.emplace_back(i);
}
}
for (uint8_t sceneryType = SCENERY_TYPE_SMALL; sceneryType < SCENERY_TYPE_COUNT; sceneryType++)
@ -442,6 +444,59 @@ static std::vector<ScenerySelection> GetAllMiscScenery()
const auto maxObjects = GetMaxObjectsForSceneryType(sceneryType);
for (ObjectEntryIndex i = 0; i < maxObjects; i++)
{
ObjectEntryIndex linkedSceneryGroup = OBJECT_ENTRY_INDEX_NULL;
const auto objectType = GetObjectTypeFromSceneryType(sceneryType);
switch (objectType)
{
case ObjectType::SmallScenery:
{
const auto* objectEntry = OpenRCT2::ObjectManager::GetObjectEntry<SmallSceneryEntry>(i);
if (objectEntry != nullptr)
linkedSceneryGroup = objectEntry->scenery_tab_id;
break;
}
case ObjectType::LargeScenery:
{
const auto* objectEntry = OpenRCT2::ObjectManager::GetObjectEntry<LargeSceneryEntry>(i);
if (objectEntry != nullptr)
linkedSceneryGroup = objectEntry->scenery_tab_id;
break;
}
case ObjectType::Walls:
{
const auto* objectEntry = OpenRCT2::ObjectManager::GetObjectEntry<WallSceneryEntry>(i);
if (objectEntry != nullptr)
linkedSceneryGroup = objectEntry->scenery_tab_id;
break;
}
case ObjectType::Banners:
{
const auto* objectEntry = OpenRCT2::ObjectManager::GetObjectEntry<BannerSceneryEntry>(i);
if (objectEntry != nullptr)
linkedSceneryGroup = objectEntry->scenery_tab_id;
break;
}
case ObjectType::PathAdditions:
{
const auto* objectEntry = OpenRCT2::ObjectManager::GetObjectEntry<PathAdditionEntry>(i);
if (objectEntry != nullptr)
linkedSceneryGroup = objectEntry->scenery_tab_id;
break;
}
default:
break;
}
// An object may be link itself against a scenery group, in which case it should not be marked as miscellaneous.
if (linkedSceneryGroup != OBJECT_ENTRY_INDEX_NULL)
{
if (std::find(std::begin(sceneryGroupIds), std::end(sceneryGroupIds), linkedSceneryGroup)
!= std::end(sceneryGroupIds))
{
continue;
}
}
const ScenerySelection sceneryItem = { sceneryType, i };
if (IsSceneryEntryValid(sceneryItem))
{