mirror of
https://github.com/OpenRCT2/OpenRCT2.git
synced 2025-01-22 10:21:57 -05:00
Wooden Twister: Add type and implement flat-to-steep transitions
This commit is contained in:
parent
36f0ce04e7
commit
55f0892106
14 changed files with 614 additions and 337 deletions
|
@ -100,6 +100,7 @@ STR_0095 :Alpine Coaster
|
|||
STR_0096 :Classic Wooden Roller Coaster
|
||||
STR_0097 :Classic Stand-up Roller Coaster
|
||||
STR_0098 :LSM Launched Roller Coaster
|
||||
STR_0099 :Classic Wooden Twister Roller Coaster
|
||||
STR_0512 :A compact roller coaster with a spiral lift hill and smooth, twisting drops.
|
||||
STR_0513 :A looping roller coaster where the riders ride in a standing position
|
||||
STR_0514 :Trains suspended beneath the roller coaster track swing out to the side around corners
|
||||
|
@ -185,6 +186,7 @@ STR_0605 :Riders toboggan down a meandering steel track, braking to control t
|
|||
STR_0606 :An older-style wooden roller coaster with a fast and rough ride, with plenty of air-time, some lateral G’s, and designed to feel ‘out-of-control’
|
||||
STR_0607 :An intense, older-style steel looping roller coaster where the riders ride in a standing position
|
||||
STR_0608 :Roller coaster trains are accelerated by linear synchronous motors, speeding through tight twists and turns
|
||||
STR_0609 :An older-style wooden roller coaster with a fast and rough ride featuring articulated trains, plenty of air-time and twisting track
|
||||
STR_0767 :Guest {INT32}
|
||||
STR_0768 :Handyman {INT32}
|
||||
STR_0769 :Mechanic {INT32}
|
||||
|
|
|
@ -68,6 +68,7 @@ namespace OpenRCT2::Ui::Windows
|
|||
RIDE_TYPE_VIRGINIA_REEL,
|
||||
RIDE_TYPE_REVERSER_ROLLER_COASTER,
|
||||
RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER,
|
||||
RIDE_TYPE_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER,
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER,
|
||||
RIDE_TYPE_WOODEN_WILD_MOUSE,
|
||||
RIDE_TYPE_STEEL_WILD_MOUSE,
|
||||
|
|
|
@ -380,7 +380,7 @@
|
|||
<ClInclude Include="paint\tile_element\Paint.TileElement.h" />
|
||||
<ClInclude Include="paint\tile_element\Segment.h" />
|
||||
<ClInclude Include="paint\tile_element\Paint.Tunnel.h" />
|
||||
<ClInclude Include="paint\track\coaster\WoodenRollerCoaster.h" />
|
||||
<ClInclude Include="paint\track\coaster\WoodenRollerCoaster.hpp" />
|
||||
<ClInclude Include="paint\track\Segment.h" />
|
||||
<ClInclude Include="paint\track\Support.h" />
|
||||
<ClInclude Include="paint\vehicle\Vehicle.MiniGolf.h" />
|
||||
|
@ -435,6 +435,7 @@
|
|||
<ClInclude Include="ride\rtd\coaster\ClassicMiniRollerCoaster.h" />
|
||||
<ClInclude Include="ride\rtd\coaster\ClassicStandUpRollerCoaster.h" />
|
||||
<ClInclude Include="ride\rtd\coaster\ClassicWoodenRollerCoaster.h" />
|
||||
<ClInclude Include="ride\rtd\coaster\ClassicWoodenTwisterRollerCoaster.h" />
|
||||
<ClInclude Include="ride\rtd\coaster\CompactInvertedCoaster.h" />
|
||||
<ClInclude Include="ride\rtd\coaster\CorkscrewRollerCoaster.h" />
|
||||
<ClInclude Include="ride\rtd\coaster\FlyingRollerCoaster.h" />
|
||||
|
@ -916,6 +917,7 @@
|
|||
<ClCompile Include="paint\track\coaster\BobsleighCoaster.cpp" />
|
||||
<ClCompile Include="paint\track\coaster\ClassicStandUpRollerCoaster.cpp" />
|
||||
<ClCompile Include="paint\track\coaster\ClassicWoodenRollerCoaster.cpp" />
|
||||
<ClCompile Include="paint\track\coaster\ClassicWoodenTwisterRollerCoaster.cpp" />
|
||||
<ClCompile Include="paint\track\coaster\CompactInvertedCoaster.cpp" />
|
||||
<ClCompile Include="paint\track\coaster\CorkscrewRollerCoaster.cpp" />
|
||||
<ClCompile Include="paint\track\coaster\FlyingRollerCoaster.cpp" />
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
#include "../../tile_element/Segment.h"
|
||||
#include "../../track/Segment.h"
|
||||
#include "../../track/Support.h"
|
||||
#include "WoodenRollerCoaster.h"
|
||||
#include "WoodenRollerCoaster.hpp"
|
||||
|
||||
using namespace OpenRCT2;
|
||||
|
||||
static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square;
|
||||
// static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square;
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
|
@ -0,0 +1,248 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-2024 OpenRCT2 developers
|
||||
*
|
||||
* For a complete list of all authors, please refer to contributors.md
|
||||
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "../../../ride/Track.h"
|
||||
#include "../../../ride/TrackPaint.h"
|
||||
#include "../../../sprites.h"
|
||||
#include "../../tile_element/Paint.Tunnel.h"
|
||||
#include "../../tile_element/Segment.h"
|
||||
#include "WoodenRollerCoaster.hpp"
|
||||
|
||||
using namespace OpenRCT2;
|
||||
|
||||
// static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square;
|
||||
|
||||
enum
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_0 = SPR_CSG_BEGIN + 65447,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_1 = SPR_CSG_BEGIN + 65448,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_2 = SPR_CSG_BEGIN + 65449,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_3 = SPR_CSG_BEGIN + 65450,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_0 = SPR_CSG_BEGIN + 65451,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_1 = SPR_CSG_BEGIN + 65452,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_2 = SPR_CSG_BEGIN + 65453,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_3 = SPR_CSG_BEGIN + 65454,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_0 = SPR_CSG_BEGIN + 65455,
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_1 = SPR_CSG_BEGIN + 65456,
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_2 = SPR_CSG_BEGIN + 65457,
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_3 = SPR_CSG_BEGIN + 65458,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_0 = SPR_CSG_BEGIN + 65459,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_1 = SPR_CSG_BEGIN + 65460,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_2 = SPR_CSG_BEGIN + 65461,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_3 = SPR_CSG_BEGIN + 65462,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_0 = SPR_CSG_BEGIN + 65463,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_1 = SPR_CSG_BEGIN + 65464,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_2 = SPR_CSG_BEGIN + 65465,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_3 = SPR_CSG_BEGIN + 65466,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_1 = SPR_CSG_BEGIN + 65475,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_3 = SPR_CSG_BEGIN + 65476,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_0 = SPR_CSG_BEGIN + 65477,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_2 = SPR_CSG_BEGIN + 65478,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66203,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66204,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66205,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_3 = SPR_CSG_BEGIN + 66206,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66207,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66208,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66209,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_3 = SPR_CSG_BEGIN + 66210,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66211,
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66212,
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66213,
|
||||
SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_3 = SPR_CSG_BEGIN + 66214,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66215,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66216,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66217,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_3 = SPR_CSG_BEGIN + 66218,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_0 = SPR_CSG_BEGIN + 66219,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_1 = SPR_CSG_BEGIN + 66220,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_2 = SPR_CSG_BEGIN + 66221,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_3 = SPR_CSG_BEGIN + 66222,
|
||||
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_HANDRAIL_1 = SPR_CSG_BEGIN + 66231,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_HANDRAIL_3 = SPR_CSG_BEGIN + 66232,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_HANDRAIL_0 = SPR_CSG_BEGIN + 66233,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_HANDRAIL_2 = SPR_CSG_BEGIN + 66234,
|
||||
};
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kFlatToLeftBankImages = { {
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_0,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_0,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_1,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_1,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_1,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_HANDRAIL_1,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_2,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_2,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_3,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_HANDRAIL_3,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_3,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_HANDRAIL_3,
|
||||
},
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kFlatToRightBankImages = { {
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_0, SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_0,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_0,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_HANDRAIL_0,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_1,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_1,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_2, SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_2,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_2,
|
||||
// SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_HANDRAIL_2,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_3,
|
||||
SPR_CLASSIC_WOODEN_RC_FLAT_TO_RIGHT_BANK_HANDRAIL_3,
|
||||
},
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kLeftBankImages = { {
|
||||
{ SPR_CLASSIC_WOODEN_RC_LEFT_BANK_0, SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_0 },
|
||||
{ SPR_CLASSIC_WOODEN_RC_LEFT_BANK_1, SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_1 },
|
||||
{ SPR_CLASSIC_WOODEN_RC_LEFT_BANK_2, SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_2 },
|
||||
{ SPR_CLASSIC_WOODEN_RC_LEFT_BANK_3, SPR_CLASSIC_WOODEN_RC_LEFT_BANK_HANDRAIL_3 },
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kUp25ToLeftBankImages = { {
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_0,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_0,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_1,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_1,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_2,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_2,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_3,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_LEFT_BANK_HANDRAIL_3,
|
||||
},
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kUp25ToRightBankImages = { {
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_0,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_0,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_1,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_1,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_2,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_2,
|
||||
},
|
||||
{
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_3,
|
||||
SPR_CLASSIC_WOODEN_RC_UP25_TO_RIGHT_BANK_HANDRAIL_3,
|
||||
},
|
||||
} };
|
||||
|
||||
static void ClassicWoodenTwisterRCTrackLeftBankToFlat(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackFlatToBank<false, kFlatToRightBankImages>(
|
||||
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
|
||||
}
|
||||
|
||||
static void ClassicWoodenTwisterRCTrackRightBankToFlat(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackFlatToBank<false, kFlatToLeftBankImages>(
|
||||
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
|
||||
}
|
||||
|
||||
static void ClassicWoodenTwisterRCTrackRightBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackFlatToBank<false, kLeftBankImages>(
|
||||
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
|
||||
}
|
||||
|
||||
static void ClassicWoodenTwisterRCTrackLeftBankTo25DegDown(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrack25DegUpToBank<false, kUp25ToRightBankImages>(
|
||||
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
|
||||
}
|
||||
|
||||
static void ClassicWoodenTwisterRCTrackRightBankTo25DegDown(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrack25DegUpToBank<false, kUp25ToLeftBankImages>(
|
||||
session, ride, trackSequence, DirectionReverse(direction), height, trackElement, supportType);
|
||||
}
|
||||
|
||||
// Stylistically, this coaster is _very_ similar to the regular Wooden Roller Coaster.
|
||||
// The only difference is the degree of the banking.
|
||||
// As such, all non-banked pieces are simply drawn as regular wooden roller coaster pieces.
|
||||
TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenTwisterRC(OpenRCT2::TrackElemType trackType)
|
||||
{
|
||||
if (!IsCsgLoaded())
|
||||
{
|
||||
return GetTrackPaintFunctionWoodenRC(trackType);
|
||||
}
|
||||
|
||||
switch (trackType)
|
||||
{
|
||||
case TrackElemType::FlatToLeftBank:
|
||||
return WoodenRCTrackFlatToBank<false, kFlatToLeftBankImages>;
|
||||
case TrackElemType::FlatToRightBank:
|
||||
return WoodenRCTrackFlatToBank<false, kFlatToRightBankImages>;
|
||||
case TrackElemType::LeftBankToFlat:
|
||||
return ClassicWoodenTwisterRCTrackLeftBankToFlat;
|
||||
case TrackElemType::RightBankToFlat:
|
||||
return ClassicWoodenTwisterRCTrackRightBankToFlat;
|
||||
case TrackElemType::LeftBank:
|
||||
return WoodenRCTrackFlatToBank<false, kLeftBankImages>;
|
||||
case TrackElemType::RightBank:
|
||||
return ClassicWoodenTwisterRCTrackRightBank;
|
||||
case TrackElemType::Up25ToLeftBank:
|
||||
return WoodenRCTrack25DegUpToBank<false, kUp25ToLeftBankImages>;
|
||||
case TrackElemType::Up25ToRightBank:
|
||||
return WoodenRCTrack25DegUpToBank<false, kUp25ToRightBankImages>;
|
||||
case TrackElemType::LeftBankToDown25:
|
||||
return ClassicWoodenTwisterRCTrackLeftBankTo25DegDown;
|
||||
case TrackElemType::RightBankToDown25:
|
||||
return ClassicWoodenTwisterRCTrackRightBankTo25DegDown;
|
||||
default:
|
||||
return GetTrackPaintFunctionWoodenRC(trackType);
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@
|
|||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "WoodenRollerCoaster.h"
|
||||
#include "WoodenRollerCoaster.hpp"
|
||||
|
||||
#include "../../../config/Config.h"
|
||||
#include "../../../drawing/Drawing.h"
|
||||
|
@ -29,7 +29,7 @@
|
|||
|
||||
using namespace OpenRCT2;
|
||||
|
||||
static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square;
|
||||
// static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square;
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -479,6 +479,105 @@ static constexpr const uint32_t WoodenRCDiagBlockBrakeImages[2][kNumOrthogonalDi
|
|||
},
|
||||
};
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kFlatToLeftBankImages = { {
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_SW_NE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_FRONT_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_FRONT_SE_NW,
|
||||
},
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kFlatToRightBankImages = { {
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_FRONT_SW_NE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_FRONT_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_SE_NW,
|
||||
},
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kLeftBankImages = { {
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_SW_NE, SPR_WOODEN_RC_LEFT_BANK_RAILS_SW_NE },
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_NW_SE, SPR_WOODEN_RC_LEFT_BANK_RAILS_NW_SE },
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_NE_SW, SPR_WOODEN_RC_LEFT_BANK_RAILS_NE_SW },
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_SE_NW, SPR_WOODEN_RC_LEFT_BANK_RAILS_SE_NW },
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kUp25ToLeftBankImages = { {
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_SW_NE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_FRONT_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_FRONT_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_FRONT_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_FRONT_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_SE_NW,
|
||||
},
|
||||
} };
|
||||
|
||||
static constexpr std::array<StraightWoodenTrack, kNumOrthogonalDirections> kUp25ToRightBankImages = { {
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_SW_NE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_FRONT_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_FRONT_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_FRONT_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_FRONT_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_SE_NW,
|
||||
},
|
||||
} };
|
||||
|
||||
ImageId WoodenRCGetRailsColour(PaintSession& session)
|
||||
{
|
||||
return session.TrackColours;
|
||||
|
@ -1523,111 +1622,13 @@ static void WoodenRCTrackLeftQuarterTurn5(
|
|||
session, ride, trackSequence, (direction + 1) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC658 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrackFlatToLeftBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
static constexpr uint32_t imageIds[4][4] = {
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_SW_NE,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_FRONT_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_NE_SW,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_FRONT_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_LEFT_BANK_RAILS_FRONT_SE_NW,
|
||||
},
|
||||
};
|
||||
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][0], imageIds[direction][1], { 0, 0, height },
|
||||
{ { 0, 3, height }, { 32, 25, 2 } });
|
||||
if (direction == 1 || direction == 3)
|
||||
{
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][2], imageIds[direction][3], { 0, 0, height },
|
||||
{ { 0, 26, height + 5 }, { 32, 1, 9 } });
|
||||
}
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours);
|
||||
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat);
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC668 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrackFlatToRightBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
static constexpr uint32_t imageIds[4][4] = {
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_SW_NE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_FRONT_SW_NE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_NW_SE,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_FRONT_NE_SW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_FRONT_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_FLAT_TO_RIGHT_BANK_RAILS_SE_NW,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
};
|
||||
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][0], imageIds[direction][1], { 0, 0, height },
|
||||
{ { 0, 3, height }, { 32, 25, 2 } });
|
||||
if (direction == 0 || direction == 2)
|
||||
{
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][2], imageIds[direction][3], { 0, 0, height },
|
||||
{ { 0, 26, height + 5 }, { 32, 1, 9 } });
|
||||
}
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours);
|
||||
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat);
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC678 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrackLeftBankToFlat(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackFlatToRightBank<isClassic>(
|
||||
WoodenRCTrackFlatToBank<isClassic, kFlatToRightBankImages>(
|
||||
session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
|
@ -1637,7 +1638,7 @@ static void WoodenRCTrackRightBankToFlat(
|
|||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackFlatToLeftBank<isClassic>(
|
||||
WoodenRCTrackFlatToBank<isClassic, kFlatToLeftBankImages>(
|
||||
session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
|
@ -2115,119 +2116,7 @@ static void WoodenRCTrackRightBankTo25DegUp(
|
|||
PaintUtilSetGeneralSupportHeight(session, height + 48);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC6D8 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrack25DegUpToLeftBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
static constexpr uint32_t imageIds[4][4] = {
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_SW_NE,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_FRONT_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_FRONT_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_FRONT_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_FRONT_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_LEFT_BANK_RAILS_SE_NW,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
};
|
||||
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][0], imageIds[direction][1], { 0, 0, height },
|
||||
{ { 0, 3, height }, { 32, 25, 2 } });
|
||||
if (direction == 1 || direction == 2)
|
||||
{
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][2], imageIds[direction][3], { 0, 0, height },
|
||||
{ { 0, 26, height + 5 }, { 32, 1, 9 } });
|
||||
}
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
|
||||
WoodenSupportTransitionType::Up25DegToFlat);
|
||||
if (direction == 0 || direction == 3)
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
}
|
||||
else
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg);
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 40);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC6E8 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrack25DegUpToRightBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
static constexpr uint32_t imageIds[4][4] = {
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_SW_NE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_SW_NE,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_FRONT_NW_SE,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_FRONT_NW_SE,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_FRONT_NE_SW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_FRONT_NE_SW,
|
||||
},
|
||||
{
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_SE_NW,
|
||||
SPR_WOODEN_RC_25_DEG_TO_RIGHT_BANK_RAILS_SE_NW,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
};
|
||||
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][0], imageIds[direction][1], { 0, 0, height },
|
||||
{ { 0, 3, height }, { 32, 25, 2 } });
|
||||
if (direction == 1 || direction == 2)
|
||||
{
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][2], imageIds[direction][3], { 0, 0, height },
|
||||
{ { 0, 26, height + 5 }, { 32, 1, 9 } });
|
||||
}
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
|
||||
WoodenSupportTransitionType::Up25DegToFlat);
|
||||
if (direction == 0 || direction == 3)
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
}
|
||||
else
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg);
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 40);
|
||||
}
|
||||
/** rct2: */
|
||||
|
||||
/** rct2: 0x008AC6F8 */
|
||||
template<bool isClassic>
|
||||
|
@ -2235,7 +2124,7 @@ static void WoodenRCTrackLeftBankTo25DegDown(
|
|||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrack25DegUpToRightBank<isClassic>(
|
||||
WoodenRCTrack25DegUpToBank<isClassic, kUp25ToRightBankImages>(
|
||||
session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
|
@ -2245,7 +2134,7 @@ static void WoodenRCTrackRightBankTo25DegDown(
|
|||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrack25DegUpToLeftBank<isClassic>(
|
||||
WoodenRCTrack25DegUpToBank<isClassic, kUp25ToLeftBankImages>(
|
||||
session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
|
@ -2269,36 +2158,14 @@ static void WoodenRCTrack25DegDownToRightBank(
|
|||
session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC738 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrackLeftBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
static constexpr uint32_t imageIds[4][2] = {
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_SW_NE, SPR_WOODEN_RC_LEFT_BANK_RAILS_SW_NE },
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_NW_SE, SPR_WOODEN_RC_LEFT_BANK_RAILS_NW_SE },
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_NE_SW, SPR_WOODEN_RC_LEFT_BANK_RAILS_NE_SW },
|
||||
{ SPR_WOODEN_RC_LEFT_BANK_SE_NW, SPR_WOODEN_RC_LEFT_BANK_RAILS_SE_NW },
|
||||
};
|
||||
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction][0], imageIds[direction][1], { 0, 0, height },
|
||||
{ { 0, 3, height }, { 32, 25, 2 } });
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours);
|
||||
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat);
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC748 */
|
||||
template<bool isClassic>
|
||||
static void WoodenRCTrackRightBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackLeftBank<isClassic>(session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
WoodenRCTrackFlatToBank<isClassic, kLeftBankImages>(
|
||||
session, ride, trackSequence, (direction + 2) & 3, height, trackElement, supportType);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC758 */
|
||||
|
@ -17668,9 +17535,9 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionWoodenAndClassicWoodenRC(OpenRCT2::Tra
|
|||
case TrackElemType::RightQuarterTurn5Tiles:
|
||||
return WoodenRCTrackRightQuarterTurn5<isClassic>;
|
||||
case TrackElemType::FlatToLeftBank:
|
||||
return WoodenRCTrackFlatToLeftBank<isClassic>;
|
||||
return WoodenRCTrackFlatToBank<isClassic, kFlatToLeftBankImages>;
|
||||
case TrackElemType::FlatToRightBank:
|
||||
return WoodenRCTrackFlatToRightBank<isClassic>;
|
||||
return WoodenRCTrackFlatToBank<isClassic, kFlatToRightBankImages>;
|
||||
case TrackElemType::LeftBankToFlat:
|
||||
return WoodenRCTrackLeftBankToFlat<isClassic>;
|
||||
case TrackElemType::RightBankToFlat:
|
||||
|
@ -17684,9 +17551,9 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionWoodenAndClassicWoodenRC(OpenRCT2::Tra
|
|||
case TrackElemType::RightBankToUp25:
|
||||
return WoodenRCTrackRightBankTo25DegUp<isClassic>;
|
||||
case TrackElemType::Up25ToLeftBank:
|
||||
return WoodenRCTrack25DegUpToLeftBank<isClassic>;
|
||||
return WoodenRCTrack25DegUpToBank<isClassic, kUp25ToLeftBankImages>;
|
||||
case TrackElemType::Up25ToRightBank:
|
||||
return WoodenRCTrack25DegUpToRightBank<isClassic>;
|
||||
return WoodenRCTrack25DegUpToBank<isClassic, kUp25ToRightBankImages>;
|
||||
case TrackElemType::LeftBankToDown25:
|
||||
return WoodenRCTrackLeftBankTo25DegDown<isClassic>;
|
||||
case TrackElemType::RightBankToDown25:
|
||||
|
@ -17696,7 +17563,7 @@ TRACK_PAINT_FUNCTION GetTrackPaintFunctionWoodenAndClassicWoodenRC(OpenRCT2::Tra
|
|||
case TrackElemType::Down25ToRightBank:
|
||||
return WoodenRCTrack25DegDownToRightBank<isClassic>;
|
||||
case TrackElemType::LeftBank:
|
||||
return WoodenRCTrackLeftBank<isClassic>;
|
||||
return WoodenRCTrackFlatToBank<isClassic, kLeftBankImages>;
|
||||
case TrackElemType::RightBank:
|
||||
return WoodenRCTrackRightBank<isClassic>;
|
||||
case TrackElemType::LeftQuarterTurn5TilesUp25:
|
||||
|
|
|
@ -20,6 +20,16 @@
|
|||
|
||||
#include <cstdint>
|
||||
|
||||
static constexpr TunnelGroup kTunnelGroup = TunnelGroup::Square;
|
||||
|
||||
struct StraightWoodenTrack
|
||||
{
|
||||
ImageIndex track;
|
||||
ImageIndex handrail;
|
||||
ImageIndex frontTrack = ImageIndexUndefined;
|
||||
ImageIndex frontHandrail = ImageIndexUndefined;
|
||||
};
|
||||
|
||||
struct SpriteBoundBox2
|
||||
{
|
||||
ImageIndex ImageIdA;
|
||||
|
@ -82,4 +92,54 @@ void WoodenRCTrackPaintBb(PaintSession& session, const SpriteBoundBox2* bb, int1
|
|||
}
|
||||
}
|
||||
|
||||
template<bool isClassic, std::array<StraightWoodenTrack, kNumOrthogonalDirections> imageIds>
|
||||
static void WoodenRCTrackStraightBankTrack(PaintSession& session, uint8_t direction, int32_t height)
|
||||
{
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction].track, imageIds[direction].handrail, { 0, 0, height },
|
||||
{ { 0, 3, height }, { 32, 25, 2 } });
|
||||
if (imageIds[direction].frontTrack != ImageIndexUndefined)
|
||||
{
|
||||
WoodenRCTrackPaint<isClassic>(
|
||||
session, direction, imageIds[direction].frontTrack, imageIds[direction].frontHandrail, { 0, 0, height },
|
||||
{ { 0, 26, height + 5 }, { 32, 1, 9 } });
|
||||
}
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC658, 0x008AC668, 0x008AC738 */
|
||||
template<bool isClassic, std::array<StraightWoodenTrack, kNumOrthogonalDirections> imageIds>
|
||||
void WoodenRCTrackFlatToBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackStraightBankTrack<isClassic, imageIds>(session, direction, height);
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours);
|
||||
PaintUtilPushTunnelRotated(session, direction, height, kTunnelGroup, TunnelSubType::Flat);
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + kDefaultGeneralSupportHeight);
|
||||
}
|
||||
|
||||
/** rct2: 0x008AC6D8, 0x008AC6E8 */
|
||||
template<bool isClassic, std::array<StraightWoodenTrack, kNumOrthogonalDirections> imageIds>
|
||||
static void WoodenRCTrack25DegUpToBank(
|
||||
PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height,
|
||||
const TrackElement& trackElement, SupportType supportType)
|
||||
{
|
||||
WoodenRCTrackStraightBankTrack<isClassic, imageIds>(session, direction, height);
|
||||
WoodenASupportsPaintSetupRotated(
|
||||
session, supportType.wooden, WoodenSupportSubType::NeSw, direction, height, session.SupportColours,
|
||||
WoodenSupportTransitionType::Up25DegToFlat);
|
||||
if (direction == 0 || direction == 3)
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height - 8, kTunnelGroup, TunnelSubType::Flat);
|
||||
}
|
||||
else
|
||||
{
|
||||
PaintUtilPushTunnelRotated(session, direction, height + 8, kTunnelGroup, TunnelSubType::FlatTo25Deg);
|
||||
}
|
||||
PaintUtilSetSegmentSupportHeight(session, kSegmentsAll, 0xFFFF, 0);
|
||||
PaintUtilSetGeneralSupportHeight(session, height + 40);
|
||||
}
|
||||
|
||||
TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenRCFallback(OpenRCT2::TrackElemType trackType);
|
|
@ -171,91 +171,91 @@ namespace OpenRCT2::RCT1
|
|||
|
||||
static uint8_t map[] =
|
||||
{
|
||||
RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER,// RCT1_RIDE_TYPE_WOODEN_ROLLER_COASTER
|
||||
RIDE_TYPE_CLASSIC_STAND_UP_ROLLER_COASTER, // RCT1_RIDE_TYPE_STAND_UP_STEEL_ROLLER_COASTER
|
||||
RIDE_TYPE_SUSPENDED_SWINGING_COASTER, // RCT1_RIDE_TYPE_SUSPENDED_ROLLER_COASTER
|
||||
RIDE_TYPE_INVERTED_ROLLER_COASTER, // RCT1_RIDE_TYPE_INVERTED_ROLLER_COASTER
|
||||
RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_MINI_ROLLER_COASTER
|
||||
RIDE_TYPE_MINIATURE_RAILWAY, // RCT1_RIDE_TYPE_MINIATURE_RAILWAY
|
||||
RIDE_TYPE_MONORAIL, // RCT1_RIDE_TYPE_MONORAIL
|
||||
RIDE_TYPE_MINI_SUSPENDED_COASTER, // RCT1_RIDE_TYPE_SUSPENDED_SINGLE_RAIL_ROLLER_COASTER
|
||||
RIDE_TYPE_BOAT_HIRE, // RCT1_RIDE_TYPE_BOAT_HIRE
|
||||
RIDE_TYPE_WOODEN_WILD_MOUSE, // RCT1_RIDE_TYPE_WOODEN_CRAZY_RODENT_ROLLER_COASTER
|
||||
RIDE_TYPE_STEEPLECHASE, // RCT1_RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER
|
||||
RIDE_TYPE_CAR_RIDE, // RCT1_RIDE_TYPE_CAR_RIDE
|
||||
RIDE_TYPE_LAUNCHED_FREEFALL, // RCT1_RIDE_TYPE_LAUNCHED_FREEFALL
|
||||
RIDE_TYPE_BOBSLEIGH_COASTER, // RCT1_RIDE_TYPE_BOBSLED_ROLLER_COASTER
|
||||
RIDE_TYPE_OBSERVATION_TOWER, // RCT1_RIDE_TYPE_OBSERVATION_TOWER
|
||||
RIDE_TYPE_LOOPING_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_ROLLER_COASTER
|
||||
RIDE_TYPE_DINGHY_SLIDE, // RCT1_RIDE_TYPE_WATER_SLIDE
|
||||
RIDE_TYPE_MINE_TRAIN_COASTER, // RCT1_RIDE_TYPE_MINE_TRAIN_ROLLER_COASTER
|
||||
RIDE_TYPE_CHAIRLIFT, // RCT1_RIDE_TYPE_CHAIRLIFT
|
||||
RIDE_TYPE_CORKSCREW_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_CORKSCREW_ROLLER_COASTER
|
||||
RIDE_TYPE_MAZE, // RCT1_RIDE_TYPE_HEDGE_MAZE
|
||||
RIDE_TYPE_SPIRAL_SLIDE, // RCT1_RIDE_TYPE_SPIRAL_SLIDE
|
||||
RIDE_TYPE_GO_KARTS, // RCT1_RIDE_TYPE_GO_KARTS
|
||||
RIDE_TYPE_LOG_FLUME, // RCT1_RIDE_TYPE_LOG_FLUME
|
||||
RIDE_TYPE_RIVER_RAPIDS, // RCT1_RIDE_TYPE_RIVER_RAPIDS
|
||||
RIDE_TYPE_DODGEMS, // RCT1_RIDE_TYPE_DODGEMS
|
||||
RIDE_TYPE_SWINGING_SHIP, // RCT1_RIDE_TYPE_SWINGING_SHIP
|
||||
RIDE_TYPE_SWINGING_INVERTER_SHIP, // RCT1_RIDE_TYPE_SWINGING_INVERTER_SHIP
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_ICE_CREAM_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_CHIPS_STALL
|
||||
RIDE_TYPE_DRINK_STALL, // RCT1_RIDE_TYPE_DRINK_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_CANDYFLOSS_STALL
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_BURGER_BAR
|
||||
RIDE_TYPE_MERRY_GO_ROUND, // RCT1_RIDE_TYPE_MERRY_GO_ROUND
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_BALLOON_STALL
|
||||
RIDE_TYPE_INFORMATION_KIOSK, // RCT1_RIDE_TYPE_INFORMATION_KIOSK
|
||||
RIDE_TYPE_TOILETS, // RCT1_RIDE_TYPE_TOILETS
|
||||
RIDE_TYPE_FERRIS_WHEEL, // RCT1_RIDE_TYPE_FERRIS_WHEEL
|
||||
RIDE_TYPE_MOTION_SIMULATOR, // RCT1_RIDE_TYPE_MOTION_SIMULATOR
|
||||
RIDE_TYPE_3D_CINEMA, // RCT1_RIDE_TYPE_3D_CINEMA
|
||||
RIDE_TYPE_TOP_SPIN, // RCT1_RIDE_TYPE_TOP_SPIN
|
||||
RIDE_TYPE_SPACE_RINGS, // RCT1_RIDE_TYPE_SPACE_RINGS
|
||||
RIDE_TYPE_REVERSE_FREEFALL_COASTER, // RCT1_RIDE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_SOUVENIR_STALL
|
||||
RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER, // RCT1_RIDE_TYPE_VERTICAL_ROLLER_COASTER
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_PIZZA_STALL
|
||||
RIDE_TYPE_TWIST, // RCT1_RIDE_TYPE_TWIST
|
||||
RIDE_TYPE_HAUNTED_HOUSE, // RCT1_RIDE_TYPE_HAUNTED_HOUSE
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_POPCORN_STALL
|
||||
RIDE_TYPE_CIRCUS, // RCT1_RIDE_TYPE_CIRCUS
|
||||
RIDE_TYPE_GHOST_TRAIN, // RCT1_RIDE_TYPE_GHOST_TRAIN
|
||||
RIDE_TYPE_TWISTER_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_TWISTER_ROLLER_COASTER
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_TWISTER_ROLLER_COASTER
|
||||
RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_SIDE_FRICTION_ROLLER_COASTER
|
||||
RIDE_TYPE_STEEL_WILD_MOUSE, // RCT1_RIDE_TYPE_STEEL_WILD_MOUSE_ROLLER_COASTER
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_HOT_DOG_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_EXOTIC_SEA_FOOD_STALL
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_HAT_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_TOFFEE_APPLE_STALL
|
||||
RIDE_TYPE_VIRGINIA_REEL, // RCT1_RIDE_TYPE_VIRGINIA_REEL
|
||||
RIDE_TYPE_SPLASH_BOATS, // RCT1_RIDE_TYPE_RIVER_RIDE
|
||||
RIDE_TYPE_MINI_HELICOPTERS, // RCT1_RIDE_TYPE_CYCLE_MONORAIL
|
||||
RIDE_TYPE_LAY_DOWN_ROLLER_COASTER, // RCT1_RIDE_TYPE_FLYING_ROLLER_COASTER
|
||||
RIDE_TYPE_SUSPENDED_MONORAIL, // RCT1_RIDE_TYPE_SUSPENDED_MONORAIL
|
||||
RIDE_TYPE_NULL, // RCT1_RIDE_TYPE_40
|
||||
RIDE_TYPE_REVERSER_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_REVERSER_ROLLER_COASTER
|
||||
RIDE_TYPE_HEARTLINE_TWISTER_COASTER, // RCT1_RIDE_TYPE_HEARTLINE_TWISTER_ROLLER_COASTER
|
||||
RIDE_TYPE_MINI_GOLF, // RCT1_RIDE_TYPE_MINIATURE_GOLF
|
||||
RIDE_TYPE_NULL, // RCT1_RIDE_TYPE_44
|
||||
RIDE_TYPE_ROTO_DROP, // RCT1_RIDE_TYPE_ROTO_DROP
|
||||
RIDE_TYPE_FLYING_SAUCERS, // RCT1_RIDE_TYPE_FLYING_SAUCERS
|
||||
RIDE_TYPE_CROOKED_HOUSE, // RCT1_RIDE_TYPE_CROOKED_HOUSE
|
||||
RIDE_TYPE_MONORAIL_CYCLES, // RCT1_RIDE_TYPE_CYCLE_RAILWAY
|
||||
RIDE_TYPE_COMPACT_INVERTED_COASTER, // RCT1_RIDE_TYPE_SUSPENDED_LOOPING_ROLLER_COASTER
|
||||
RIDE_TYPE_WATER_COASTER, // RCT1_RIDE_TYPE_WATER_COASTER
|
||||
RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER, // RCT1_RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
|
||||
RIDE_TYPE_INVERTED_HAIRPIN_COASTER, // RCT1_RIDE_TYPE_INVERTED_WILD_MOUSE_COASTER
|
||||
RIDE_TYPE_BOAT_HIRE, // RCT1_RIDE_TYPE_JET_SKIS
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_T_SHIRT_STALL
|
||||
RIDE_TYPE_RIVER_RAFTS, // RCT1_RIDE_TYPE_RAFT_RIDE
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_DOUGHNUT_SHOP
|
||||
RIDE_TYPE_ENTERPRISE, // RCT1_RIDE_TYPE_ENTERPRISE
|
||||
RIDE_TYPE_DRINK_STALL, // RCT1_RIDE_TYPE_COFFEE_SHOP
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_FRIED_CHICKEN_STALL
|
||||
RIDE_TYPE_DRINK_STALL, // RCT1_RIDE_TYPE_LEMONADE_STALL
|
||||
RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_ROLLER_COASTER
|
||||
RIDE_TYPE_CLASSIC_STAND_UP_ROLLER_COASTER, // RCT1_RIDE_TYPE_STAND_UP_STEEL_ROLLER_COASTER
|
||||
RIDE_TYPE_SUSPENDED_SWINGING_COASTER, // RCT1_RIDE_TYPE_SUSPENDED_ROLLER_COASTER
|
||||
RIDE_TYPE_INVERTED_ROLLER_COASTER, // RCT1_RIDE_TYPE_INVERTED_ROLLER_COASTER
|
||||
RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_MINI_ROLLER_COASTER
|
||||
RIDE_TYPE_MINIATURE_RAILWAY, // RCT1_RIDE_TYPE_MINIATURE_RAILWAY
|
||||
RIDE_TYPE_MONORAIL, // RCT1_RIDE_TYPE_MONORAIL
|
||||
RIDE_TYPE_MINI_SUSPENDED_COASTER, // RCT1_RIDE_TYPE_SUSPENDED_SINGLE_RAIL_ROLLER_COASTER
|
||||
RIDE_TYPE_BOAT_HIRE, // RCT1_RIDE_TYPE_BOAT_HIRE
|
||||
RIDE_TYPE_WOODEN_WILD_MOUSE, // RCT1_RIDE_TYPE_WOODEN_CRAZY_RODENT_ROLLER_COASTER
|
||||
RIDE_TYPE_STEEPLECHASE, // RCT1_RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER
|
||||
RIDE_TYPE_CAR_RIDE, // RCT1_RIDE_TYPE_CAR_RIDE
|
||||
RIDE_TYPE_LAUNCHED_FREEFALL, // RCT1_RIDE_TYPE_LAUNCHED_FREEFALL
|
||||
RIDE_TYPE_BOBSLEIGH_COASTER, // RCT1_RIDE_TYPE_BOBSLED_ROLLER_COASTER
|
||||
RIDE_TYPE_OBSERVATION_TOWER, // RCT1_RIDE_TYPE_OBSERVATION_TOWER
|
||||
RIDE_TYPE_LOOPING_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_ROLLER_COASTER
|
||||
RIDE_TYPE_DINGHY_SLIDE, // RCT1_RIDE_TYPE_WATER_SLIDE
|
||||
RIDE_TYPE_MINE_TRAIN_COASTER, // RCT1_RIDE_TYPE_MINE_TRAIN_ROLLER_COASTER
|
||||
RIDE_TYPE_CHAIRLIFT, // RCT1_RIDE_TYPE_CHAIRLIFT
|
||||
RIDE_TYPE_CORKSCREW_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_CORKSCREW_ROLLER_COASTER
|
||||
RIDE_TYPE_MAZE, // RCT1_RIDE_TYPE_HEDGE_MAZE
|
||||
RIDE_TYPE_SPIRAL_SLIDE, // RCT1_RIDE_TYPE_SPIRAL_SLIDE
|
||||
RIDE_TYPE_GO_KARTS, // RCT1_RIDE_TYPE_GO_KARTS
|
||||
RIDE_TYPE_LOG_FLUME, // RCT1_RIDE_TYPE_LOG_FLUME
|
||||
RIDE_TYPE_RIVER_RAPIDS, // RCT1_RIDE_TYPE_RIVER_RAPIDS
|
||||
RIDE_TYPE_DODGEMS, // RCT1_RIDE_TYPE_DODGEMS
|
||||
RIDE_TYPE_SWINGING_SHIP, // RCT1_RIDE_TYPE_SWINGING_SHIP
|
||||
RIDE_TYPE_SWINGING_INVERTER_SHIP, // RCT1_RIDE_TYPE_SWINGING_INVERTER_SHIP
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_ICE_CREAM_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_CHIPS_STALL
|
||||
RIDE_TYPE_DRINK_STALL, // RCT1_RIDE_TYPE_DRINK_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_CANDYFLOSS_STALL
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_BURGER_BAR
|
||||
RIDE_TYPE_MERRY_GO_ROUND, // RCT1_RIDE_TYPE_MERRY_GO_ROUND
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_BALLOON_STALL
|
||||
RIDE_TYPE_INFORMATION_KIOSK, // RCT1_RIDE_TYPE_INFORMATION_KIOSK
|
||||
RIDE_TYPE_TOILETS, // RCT1_RIDE_TYPE_TOILETS
|
||||
RIDE_TYPE_FERRIS_WHEEL, // RCT1_RIDE_TYPE_FERRIS_WHEEL
|
||||
RIDE_TYPE_MOTION_SIMULATOR, // RCT1_RIDE_TYPE_MOTION_SIMULATOR
|
||||
RIDE_TYPE_3D_CINEMA, // RCT1_RIDE_TYPE_3D_CINEMA
|
||||
RIDE_TYPE_TOP_SPIN, // RCT1_RIDE_TYPE_TOP_SPIN
|
||||
RIDE_TYPE_SPACE_RINGS, // RCT1_RIDE_TYPE_SPACE_RINGS
|
||||
RIDE_TYPE_REVERSE_FREEFALL_COASTER, // RCT1_RIDE_TYPE_REVERSE_FREEFALL_ROLLER_COASTER
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_SOUVENIR_STALL
|
||||
RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER, // RCT1_RIDE_TYPE_VERTICAL_ROLLER_COASTER
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_PIZZA_STALL
|
||||
RIDE_TYPE_TWIST, // RCT1_RIDE_TYPE_TWIST
|
||||
RIDE_TYPE_HAUNTED_HOUSE, // RCT1_RIDE_TYPE_HAUNTED_HOUSE
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_POPCORN_STALL
|
||||
RIDE_TYPE_CIRCUS, // RCT1_RIDE_TYPE_CIRCUS
|
||||
RIDE_TYPE_GHOST_TRAIN, // RCT1_RIDE_TYPE_GHOST_TRAIN
|
||||
RIDE_TYPE_TWISTER_ROLLER_COASTER, // RCT1_RIDE_TYPE_STEEL_TWISTER_ROLLER_COASTER
|
||||
RIDE_TYPE_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_TWISTER_ROLLER_COASTER
|
||||
RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_SIDE_FRICTION_ROLLER_COASTER
|
||||
RIDE_TYPE_STEEL_WILD_MOUSE, // RCT1_RIDE_TYPE_STEEL_WILD_MOUSE_ROLLER_COASTER
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_HOT_DOG_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_EXOTIC_SEA_FOOD_STALL
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_HAT_STALL
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_TOFFEE_APPLE_STALL
|
||||
RIDE_TYPE_VIRGINIA_REEL, // RCT1_RIDE_TYPE_VIRGINIA_REEL
|
||||
RIDE_TYPE_SPLASH_BOATS, // RCT1_RIDE_TYPE_RIVER_RIDE
|
||||
RIDE_TYPE_MINI_HELICOPTERS, // RCT1_RIDE_TYPE_CYCLE_MONORAIL
|
||||
RIDE_TYPE_LAY_DOWN_ROLLER_COASTER, // RCT1_RIDE_TYPE_FLYING_ROLLER_COASTER
|
||||
RIDE_TYPE_SUSPENDED_MONORAIL, // RCT1_RIDE_TYPE_SUSPENDED_MONORAIL
|
||||
RIDE_TYPE_NULL, // RCT1_RIDE_TYPE_40
|
||||
RIDE_TYPE_REVERSER_ROLLER_COASTER, // RCT1_RIDE_TYPE_WOODEN_REVERSER_ROLLER_COASTER
|
||||
RIDE_TYPE_HEARTLINE_TWISTER_COASTER, // RCT1_RIDE_TYPE_HEARTLINE_TWISTER_ROLLER_COASTER
|
||||
RIDE_TYPE_MINI_GOLF, // RCT1_RIDE_TYPE_MINIATURE_GOLF
|
||||
RIDE_TYPE_NULL, // RCT1_RIDE_TYPE_44
|
||||
RIDE_TYPE_ROTO_DROP, // RCT1_RIDE_TYPE_ROTO_DROP
|
||||
RIDE_TYPE_FLYING_SAUCERS, // RCT1_RIDE_TYPE_FLYING_SAUCERS
|
||||
RIDE_TYPE_CROOKED_HOUSE, // RCT1_RIDE_TYPE_CROOKED_HOUSE
|
||||
RIDE_TYPE_MONORAIL_CYCLES, // RCT1_RIDE_TYPE_CYCLE_RAILWAY
|
||||
RIDE_TYPE_COMPACT_INVERTED_COASTER, // RCT1_RIDE_TYPE_SUSPENDED_LOOPING_ROLLER_COASTER
|
||||
RIDE_TYPE_WATER_COASTER, // RCT1_RIDE_TYPE_WATER_COASTER
|
||||
RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER, // RCT1_RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
|
||||
RIDE_TYPE_INVERTED_HAIRPIN_COASTER, // RCT1_RIDE_TYPE_INVERTED_WILD_MOUSE_COASTER
|
||||
RIDE_TYPE_BOAT_HIRE, // RCT1_RIDE_TYPE_JET_SKIS
|
||||
RIDE_TYPE_SHOP, // RCT1_RIDE_TYPE_T_SHIRT_STALL
|
||||
RIDE_TYPE_RIVER_RAFTS, // RCT1_RIDE_TYPE_RAFT_RIDE
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_DOUGHNUT_SHOP
|
||||
RIDE_TYPE_ENTERPRISE, // RCT1_RIDE_TYPE_ENTERPRISE
|
||||
RIDE_TYPE_DRINK_STALL, // RCT1_RIDE_TYPE_COFFEE_SHOP
|
||||
RIDE_TYPE_FOOD_STALL, // RCT1_RIDE_TYPE_FRIED_CHICKEN_STALL
|
||||
RIDE_TYPE_DRINK_STALL, // RCT1_RIDE_TYPE_LEMONADE_STALL
|
||||
};
|
||||
|
||||
const auto index = EnumValue(rideType);
|
||||
|
@ -755,7 +755,7 @@ namespace OpenRCT2::RCT1
|
|||
"rct2.ride.circus1", // RCT1_RIDE_TYPE_CIRCUS
|
||||
"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
|
||||
"rct1aa.ride.woodtrc", // RCT1_RIDE_TYPE_WOODEN_TWISTER_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
|
||||
|
@ -856,7 +856,7 @@ namespace OpenRCT2::RCT1
|
|||
"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.woodtrc", // VehicleType::WoodenTwisterRollerCoasterTrain
|
||||
"rct1aa.ride.side_friction_cars", // VehicleType::WoodenSideFrictionCars
|
||||
"rct1aa.ride.vintage_cars", // VehicleType::VintageCars
|
||||
"rct1aa.ride.steam_trains_covered", // VehicleType::SteamTrainCoveredCars
|
||||
|
|
|
@ -620,6 +620,7 @@ enum
|
|||
RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER,
|
||||
RIDE_TYPE_CLASSIC_STAND_UP_ROLLER_COASTER,
|
||||
RIDE_TYPE_LSM_LAUNCHED_ROLLER_COASTER,
|
||||
RIDE_TYPE_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER,
|
||||
|
||||
RIDE_TYPE_COUNT
|
||||
};
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "rtd/coaster/ClassicMiniRollerCoaster.h"
|
||||
#include "rtd/coaster/ClassicStandUpRollerCoaster.h"
|
||||
#include "rtd/coaster/ClassicWoodenRollerCoaster.h"
|
||||
#include "rtd/coaster/ClassicWoodenTwisterRollerCoaster.h"
|
||||
#include "rtd/coaster/CompactInvertedCoaster.h"
|
||||
#include "rtd/coaster/CorkscrewRollerCoaster.h"
|
||||
#include "rtd/coaster/FlyingRollerCoaster.h"
|
||||
|
@ -354,6 +355,7 @@ constexpr RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = {
|
|||
/* RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER */ ClassicWoodenRollerCoasterRTD,
|
||||
/* RIDE_TYPE_CLASSIC_STAND_UP_ROLLER_COASTER */ ClassicStandUpRollerCoasterRTD,
|
||||
/* RIDE_TYPE_LSM_LAUNCHED_ROLLER_COASTER */ LSMLaunchedRollerCoasterRTD,
|
||||
/* RIDE_TYPE_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER */ ClassicWoodenTwisterRollerCoasterRTD,
|
||||
};
|
||||
|
||||
bool RideTypeDescriptor::HasFlag(RtdFlag flag) const
|
||||
|
|
|
@ -23,6 +23,7 @@ enum : StringId
|
|||
STR_RIDE_NAME_CLASSIC_MINI_ROLLER_COASTER = 6111,
|
||||
STR_RIDE_NAME_CLASSIC_STAND_UP_ROLLER_COASTER = 97,
|
||||
STR_RIDE_NAME_CLASSIC_WOODEN_ROLLER_COASTER = 96,
|
||||
STR_RIDE_NAME_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER = 99,
|
||||
STR_RIDE_NAME_COMPACT_INVERTED_COASTER = 75,
|
||||
STR_RIDE_NAME_CORKSCREW_ROLLER_COASTER = 21,
|
||||
STR_RIDE_NAME_FLYING_ROLLER_COASTER = 59,
|
||||
|
@ -66,6 +67,7 @@ enum : StringId
|
|||
STR_RIDE_DESCRIPTION_CLASSIC_MINI_COASTER = 6119,
|
||||
STR_RIDE_DESCRIPTION_CLASSIC_STAND_UP_ROLLER_COASTER = 607,
|
||||
STR_RIDE_DESCRIPTION_CLASSIC_WOODEN_ROLLER_COASTER = 606,
|
||||
STR_RIDE_DESCRIPTION_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER = 609,
|
||||
STR_RIDE_DESCRIPTION_COMPACT_INVERTED_COASTER = 585,
|
||||
STR_RIDE_DESCRIPTION_CORKSCREW_ROLLER_COASTER = 531,
|
||||
STR_RIDE_DESCRIPTION_FLYING_ROLLER_COASTER = 569,
|
||||
|
|
|
@ -639,3 +639,4 @@ namespace OpenRCT2::AlpineRC
|
|||
}
|
||||
TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenRC(OpenRCT2::TrackElemType trackType);
|
||||
TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicStandUpRC(OpenRCT2::TrackElemType trackType);
|
||||
TRACK_PAINT_FUNCTION GetTrackPaintFunctionClassicWoodenTwisterRC(OpenRCT2::TrackElemType trackType);
|
||||
|
|
|
@ -23,7 +23,7 @@ constexpr RideTypeDescriptor ClassicWoodenRollerCoasterRTD =
|
|||
.Drawer = GetTrackPaintFunctionClassicWoodenRC,
|
||||
.supportType = WoodenSupportType::Truss,
|
||||
.enabledTrackGroups = {TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::verticalLoop, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::waterSplash, TrackGroup::blockBrakes, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeSteepLong, TrackGroup::halfLoopMedium, TrackGroup::halfLoopLarge},
|
||||
.extraTrackGroups = {TrackGroup::booster},
|
||||
.extraTrackGroups = {TrackGroup::booster, TrackGroup::slopeCurveSteep},
|
||||
}),
|
||||
.InvertedTrackPaintFunctions = {},
|
||||
.Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt |
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014-2024 OpenRCT2 developers
|
||||
*
|
||||
* For a complete list of all authors, please refer to contributors.md
|
||||
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../../../sprites.h"
|
||||
#include "../../RideData.h"
|
||||
#include "../../ShopItem.h"
|
||||
#include "../../Track.h"
|
||||
|
||||
// clang-format off
|
||||
constexpr RideTypeDescriptor ClassicWoodenTwisterRollerCoasterRTD =
|
||||
{
|
||||
.Category = RIDE_CATEGORY_ROLLERCOASTER,
|
||||
.StartTrackPiece = OpenRCT2::TrackElemType::EndStation,
|
||||
.TrackPaintFunctions = TrackDrawerDescriptor({
|
||||
.Drawer = GetTrackPaintFunctionClassicWoodenTwisterRC,
|
||||
.supportType = WoodenSupportType::Truss,
|
||||
.enabledTrackGroups = { TrackGroup::flat, TrackGroup::straight, TrackGroup::stationEnd, TrackGroup::liftHill, TrackGroup::flatRollBanking, TrackGroup::slope, TrackGroup::slopeSteepUp, TrackGroup::slopeSteepDown, TrackGroup::slopeCurve, TrackGroup::sBend, TrackGroup::curveSmall, TrackGroup::curve, TrackGroup::curveLarge, TrackGroup::brakes, TrackGroup::onridePhoto, TrackGroup::blockBrakes, TrackGroup::diagBrakes, TrackGroup::diagBlockBrakes, TrackGroup::slopeSteepLong, TrackGroup::helixDownBankedHalf, TrackGroup::helixUpBankedHalf, TrackGroup::slopeCurveSteep },
|
||||
.extraTrackGroups = { TrackGroup::verticalLoop, TrackGroup::waterSplash },
|
||||
}),
|
||||
.InvertedTrackPaintFunctions = {},
|
||||
.Flags = kRtdFlagsHasThreeColours | kRtdFlagsCommonCoaster | kRtdFlagsCommonCoasterNonAlt |
|
||||
EnumsToFlags(RtdFlag::hasLeaveWhenAnotherVehicleArrivesAtStation, RtdFlag::checkGForces,
|
||||
RtdFlag::allowMultipleCircuits, RtdFlag::allowReversedTrains),
|
||||
.RideModes = EnumsToFlags(RideMode::ContinuousCircuit, RideMode::ContinuousCircuitBlockSectioned),
|
||||
.DefaultMode = RideMode::ContinuousCircuit,
|
||||
.BoosterSettings = { 0, 68 },
|
||||
.LegacyBoosterSettings = { 0, 68 },
|
||||
.Naming = { STR_RIDE_NAME_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER, STR_RIDE_DESCRIPTION_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER },
|
||||
.NameConvention = { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station },
|
||||
.EnumName = "RIDE_TYPE_CLASSIC_WOODEN_TWISTER_ROLLER_COASTER",
|
||||
.AvailableBreakdowns = (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE),
|
||||
.Heights = { 24, 24, 8, 11, },
|
||||
.MaxMass = 19,
|
||||
.LiftData = { OpenRCT2::Audio::SoundId::LiftWood, 3, 5 },
|
||||
.RatingsMultipliers = { 52, 33, 4 },
|
||||
.UpkeepCosts = { 40, 20, 80, 10, 3, 10 },
|
||||
.BuildCosts = {37.50_GBP, 3.50_GBP, 50, },
|
||||
.DefaultPrices = { 20, 20 },
|
||||
.DefaultMusic = MUSIC_OBJECT_WILD_WEST,
|
||||
.PhotoItem = ShopItem::Photo3,
|
||||
.BonusValue = 105,
|
||||
.ColourPresets = TRACK_COLOUR_PRESETS(
|
||||
{ COLOUR_BORDEAUX_RED, COLOUR_BLACK, COLOUR_WHITE },
|
||||
{ COLOUR_BRIGHT_RED, COLOUR_BLACK, COLOUR_GREY },
|
||||
{ COLOUR_YELLOW, COLOUR_DARK_BROWN, COLOUR_DARK_BROWN },
|
||||
{ COLOUR_TEAL, COLOUR_BORDEAUX_RED, COLOUR_WHITE },
|
||||
{ COLOUR_LIGHT_BLUE, COLOUR_BLACK, COLOUR_BLACK },
|
||||
{ COLOUR_LIGHT_BLUE, COLOUR_BLACK, COLOUR_DARK_BROWN },
|
||||
),
|
||||
.ColourPreview = { SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_CLASSIC_WOODEN_ROLLER_COASTER_SUPPORTS },
|
||||
.ColourKey = RideColourKey::Ride,
|
||||
.Name = "classic_wooden_twister_rc",
|
||||
.RatingsData =
|
||||
{
|
||||
RatingsCalculationType::Normal,
|
||||
{ RIDE_RATING(2, 80), RIDE_RATING(2, 60), RIDE_RATING(2, 00) },
|
||||
19,
|
||||
-1,
|
||||
false,
|
||||
{
|
||||
{ RatingsModifierType::BonusLength, 6000, 873, 0, 0 },
|
||||
{ RatingsModifierType::BonusSynchronisation, 0, RIDE_RATING(0, 40), RIDE_RATING(0, 05), 0 },
|
||||
{ RatingsModifierType::BonusTrainLength, 0, 187245, 0, 0 },
|
||||
{ RatingsModifierType::BonusMaxSpeed, 0, 44281, 88562, 35424 },
|
||||
{ RatingsModifierType::BonusAverageSpeed, 0, 364088, 655360, 0 },
|
||||
{ RatingsModifierType::BonusDuration, 150, 26214, 0, 0 },
|
||||
{ RatingsModifierType::BonusGForces, 0, 40960, 34555, 49648 },
|
||||
{ RatingsModifierType::BonusTurns, 0, 26749, 43458, 45749 },
|
||||
{ RatingsModifierType::BonusDrops, 0, 40777, 46811, 49152 },
|
||||
{ RatingsModifierType::BonusSheltered, 0, 16705, 30583, 35108 },
|
||||
{ RatingsModifierType::BonusReversedTrains, 0, 2, 12, 22 },
|
||||
{ RatingsModifierType::BonusProximity, 0, 22367, 0, 0 },
|
||||
{ RatingsModifierType::BonusScenery, 0, 11155, 0, 0 },
|
||||
{ RatingsModifierType::RequirementDropHeight, 12, 2, 1, 2 },
|
||||
{ RatingsModifierType::RequirementMaxSpeed, 0xA0000, 2, 1, 2 },
|
||||
{ RatingsModifierType::RequirementNegativeGs, FIXED_2DP(0, 10), 2, 1, 2 },
|
||||
{ RatingsModifierType::RequirementLength, 0x1720000, 2, 1, 2 },
|
||||
{ RatingsModifierType::RequirementNumDrops, 2, 2, 1, 2 },
|
||||
{ RatingsModifierType::PenaltyLateralGs, 0, 40960, 34555, 49648 },
|
||||
},
|
||||
},
|
||||
};
|
||||
// clang-format on
|
Loading…
Reference in a new issue