mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +01:00
Apply using namespace OpenRCT2 to RIdeRatings.cpp
This commit is contained in:
@@ -89,96 +89,81 @@ struct ShelteredEights
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Amount of updates allowed per updating state on the current tick.
|
// Amount of updates allowed per updating state on the current tick.
|
||||||
// The total amount would be MaxRideRatingSubSteps * OpenRCT2::RideRating::kMaxUpdateStates which
|
// The total amount would be MaxRideRatingSubSteps * RideRating::kMaxUpdateStates which
|
||||||
// would be currently 80, this is the worst case of sub-steps and may break out earlier.
|
// would be currently 80, this is the worst case of sub-steps and may break out earlier.
|
||||||
static constexpr size_t MaxRideRatingUpdateSubSteps = 20;
|
static constexpr size_t MaxRideRatingUpdateSubSteps = 20;
|
||||||
|
|
||||||
static void ride_ratings_update_state(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_update_state_0(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state_0(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_update_state_1(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state_1(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_update_state_2(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state_2(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_update_state_3(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state_3(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_update_state_4(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state_4(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_update_state_5(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_update_state_5(RideRating::UpdateState& state);
|
||||||
static void ride_ratings_begin_proximity_loop(OpenRCT2::RideRating::UpdateState& state);
|
static void ride_ratings_begin_proximity_loop(RideRating::UpdateState& state);
|
||||||
static void RideRatingsCalculate(OpenRCT2::RideRating::UpdateState& state, Ride& ride);
|
static void RideRatingsCalculate(RideRating::UpdateState& state, Ride& ride);
|
||||||
static void RideRatingsCalculateValue(Ride& ride);
|
static void RideRatingsCalculateValue(Ride& ride);
|
||||||
static void ride_ratings_score_close_proximity(OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement);
|
static void ride_ratings_score_close_proximity(RideRating::UpdateState& state, TileElement* inputTileElement);
|
||||||
static void RideRatingsAdd(OpenRCT2::RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea);
|
static void RideRatingsAdd(RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea);
|
||||||
|
|
||||||
static ShelteredEights GetNumOfShelteredEighths(const Ride& ride);
|
static ShelteredEights GetNumOfShelteredEighths(const Ride& ride);
|
||||||
static money64 RideComputeUpkeep(OpenRCT2::RideRating::UpdateState& state, const Ride& ride);
|
static money64 RideComputeUpkeep(RideRating::UpdateState& state, const Ride& ride);
|
||||||
static void SetUnreliabilityFactor(Ride& ride);
|
static void SetUnreliabilityFactor(Ride& ride);
|
||||||
|
|
||||||
static void RideRatingsApplyAdjustments(const Ride& ride, OpenRCT2::RideRating::Tuple& ratings);
|
static void RideRatingsApplyAdjustments(const Ride& ride, RideRating::Tuple& ratings);
|
||||||
static void RideRatingsApplyIntensityPenalty(OpenRCT2::RideRating::Tuple& ratings);
|
static void RideRatingsApplyIntensityPenalty(RideRating::Tuple& ratings);
|
||||||
|
|
||||||
static void RideRatingsApplyBonusLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusLength(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusSynchronisation(
|
static void RideRatingsApplyBonusSynchronisation(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusTrainLength(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusTrainLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusMaxSpeed(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusMaxSpeed(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusAverageSpeed(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusAverageSpeed(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusDuration(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusDuration(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusGForces(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusGForces(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusTurns(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusTurns(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusDrops(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusDrops(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusSheltered(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusSheltered(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusRotations(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusRotations(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusOperationOption(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusOperationOption(
|
static void RideRatingsApplyBonusReversedTrains(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusGoKartRace(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusReversedTrains(
|
static void RideRatingsApplyBonusTowerRide(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusRotoDrop(RideRating::Tuple& ratings, const Ride& ride);
|
||||||
static void RideRatingsApplyBonusGoKartRace(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusMazeSize(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusTowerRide(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusBoatHireNoCircuit(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusRotoDrop(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride);
|
static void RideRatingsApplyBonusSlideUnlimitedRides(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusMazeSize(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusMotionSimulatorMode(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusBoatHireNoCircuit(
|
static void RideRatingsApplyBonus3DCinemaMode(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusTopSpinMode(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusSlideUnlimitedRides(
|
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyBonusMotionSimulatorMode(
|
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyBonus3DCinemaMode(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyBonusTopSpinMode(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyBonusReversals(
|
static void RideRatingsApplyBonusReversals(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusHoles(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusHoles(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusNumTrains(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusNumTrains(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusDownwardLaunch(
|
static void RideRatingsApplyBonusDownwardLaunch(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusProximity(
|
static void RideRatingsApplyBonusProximity(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyBonusScenery(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyBonusScenery(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyRequirementLength(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementDropHeight(
|
static void RideRatingsApplyRequirementDropHeight(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyRequirementMaxSpeed(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementMaxSpeed(
|
static void RideRatingsApplyRequirementNumDrops(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyRequirementNegativeGs(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementNumDrops(
|
static void RideRatingsApplyRequirementLateralGs(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyRequirementInversions(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementNegativeGs(
|
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyRequirementLateralGs(
|
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyRequirementInversions(
|
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyRequirementUnsheltered(
|
static void RideRatingsApplyRequirementUnsheltered(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, uint8_t shelteredEighths, RatingsModifier modifier);
|
RideRating::Tuple& ratings, const Ride& ride, uint8_t shelteredEighths, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementReversals(
|
static void RideRatingsApplyRequirementReversals(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier);
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementHoles(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyRequirementHoles(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementStations(
|
static void RideRatingsApplyRequirementStations(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
static void RideRatingsApplyRequirementSplashdown(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
static void RideRatingsApplyRequirementSplashdown(
|
static void RideRatingsApplyPenaltyLateralGs(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
static void RideRatingsApplyPenaltyLateralGs(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier);
|
|
||||||
|
|
||||||
void OpenRCT2::RideRating::ResetUpdateStates()
|
void RideRating::ResetUpdateStates()
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::UpdateState nullState{};
|
RideRating::UpdateState nullState{};
|
||||||
nullState.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
nullState.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
||||||
|
|
||||||
auto& updateStates = getGameState().rideRatingUpdateStates;
|
auto& updateStates = getGameState().rideRatingUpdateStates;
|
||||||
@@ -191,9 +176,9 @@ void OpenRCT2::RideRating::ResetUpdateStates()
|
|||||||
* processed will be overwritten.
|
* processed will be overwritten.
|
||||||
* Only purpose of this function currently is for testing.
|
* Only purpose of this function currently is for testing.
|
||||||
*/
|
*/
|
||||||
void OpenRCT2::RideRating::UpdateRide(const Ride& ride)
|
void RideRating::UpdateRide(const Ride& ride)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::UpdateState state;
|
RideRating::UpdateState state;
|
||||||
if (ride.status != RideStatus::closed)
|
if (ride.status != RideStatus::closed)
|
||||||
{
|
{
|
||||||
state.CurrentRide = ride.id;
|
state.CurrentRide = ride.id;
|
||||||
@@ -209,7 +194,7 @@ void OpenRCT2::RideRating::UpdateRide(const Ride& ride)
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5A2A
|
* rct2: 0x006B5A2A
|
||||||
*/
|
*/
|
||||||
void OpenRCT2::RideRating::UpdateAll()
|
void RideRating::UpdateAll()
|
||||||
{
|
{
|
||||||
PROFILED_FUNCTION();
|
PROFILED_FUNCTION();
|
||||||
|
|
||||||
@@ -229,7 +214,7 @@ void OpenRCT2::RideRating::UpdateAll()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ride_ratings_update_state(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
switch (state.State)
|
switch (state.State)
|
||||||
{
|
{
|
||||||
@@ -323,7 +308,7 @@ static RideId GetNextRideToUpdate(RideId currentRide)
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5A5C
|
* rct2: 0x006B5A5C
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_0(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state_0(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
// It is possible that the current ride being calculated has
|
// It is possible that the current ride being calculated has
|
||||||
// been removed or due to import invalid. For both, reset
|
// been removed or due to import invalid. For both, reset
|
||||||
@@ -347,7 +332,7 @@ static void ride_ratings_update_state_0(OpenRCT2::RideRating::UpdateState& state
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5A94
|
* rct2: 0x006B5A94
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_1(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state_1(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
state.ProximityTotal = 0;
|
state.ProximityTotal = 0;
|
||||||
for (int32_t i = 0; i < PROXIMITY_COUNT; i++)
|
for (int32_t i = 0; i < PROXIMITY_COUNT; i++)
|
||||||
@@ -365,7 +350,7 @@ static void ride_ratings_update_state_1(OpenRCT2::RideRating::UpdateState& state
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5C66
|
* rct2: 0x006B5C66
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_2(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state_2(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
const RideId rideIndex = state.CurrentRide;
|
const RideId rideIndex = state.CurrentRide;
|
||||||
auto ride = GetRide(rideIndex);
|
auto ride = GetRide(rideIndex);
|
||||||
@@ -376,7 +361,7 @@ static void ride_ratings_update_state_2(OpenRCT2::RideRating::UpdateState& state
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto loc = state.Proximity;
|
auto loc = state.Proximity;
|
||||||
OpenRCT2::TrackElemType trackType = state.ProximityTrackType;
|
TrackElemType trackType = state.ProximityTrackType;
|
||||||
|
|
||||||
TileElement* tileElement = MapGetFirstElementAt(loc);
|
TileElement* tileElement = MapGetFirstElementAt(loc);
|
||||||
if (tileElement == nullptr)
|
if (tileElement == nullptr)
|
||||||
@@ -442,7 +427,7 @@ static void ride_ratings_update_state_2(OpenRCT2::RideRating::UpdateState& state
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5E4D
|
* rct2: 0x006B5E4D
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_3(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state_3(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
auto ride = GetRide(state.CurrentRide);
|
auto ride = GetRide(state.CurrentRide);
|
||||||
if (ride == nullptr || ride->status == RideStatus::closed)
|
if (ride == nullptr || ride->status == RideStatus::closed)
|
||||||
@@ -461,7 +446,7 @@ static void ride_ratings_update_state_3(OpenRCT2::RideRating::UpdateState& state
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5BAB
|
* rct2: 0x006B5BAB
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_4(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state_4(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
state.State = RIDE_RATINGS_STATE_5;
|
state.State = RIDE_RATINGS_STATE_5;
|
||||||
ride_ratings_begin_proximity_loop(state);
|
ride_ratings_begin_proximity_loop(state);
|
||||||
@@ -471,7 +456,7 @@ static void ride_ratings_update_state_4(OpenRCT2::RideRating::UpdateState& state
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5D72
|
* rct2: 0x006B5D72
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_5(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_update_state_5(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
auto ride = GetRide(state.CurrentRide);
|
auto ride = GetRide(state.CurrentRide);
|
||||||
if (ride == nullptr || ride->status == RideStatus::closed)
|
if (ride == nullptr || ride->status == RideStatus::closed)
|
||||||
@@ -481,7 +466,7 @@ static void ride_ratings_update_state_5(OpenRCT2::RideRating::UpdateState& state
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto loc = state.Proximity;
|
auto loc = state.Proximity;
|
||||||
OpenRCT2::TrackElemType trackType = state.ProximityTrackType;
|
TrackElemType trackType = state.ProximityTrackType;
|
||||||
|
|
||||||
TileElement* tileElement = MapGetFirstElementAt(loc);
|
TileElement* tileElement = MapGetFirstElementAt(loc);
|
||||||
if (tileElement == nullptr)
|
if (tileElement == nullptr)
|
||||||
@@ -536,7 +521,7 @@ static void ride_ratings_update_state_5(OpenRCT2::RideRating::UpdateState& state
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5BB2
|
* rct2: 0x006B5BB2
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_begin_proximity_loop(OpenRCT2::RideRating::UpdateState& state)
|
static void ride_ratings_begin_proximity_loop(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
auto ride = GetRide(state.CurrentRide);
|
auto ride = GetRide(state.CurrentRide);
|
||||||
if (ride == nullptr || ride->status == RideStatus::closed)
|
if (ride == nullptr || ride->status == RideStatus::closed)
|
||||||
@@ -573,7 +558,7 @@ static void ride_ratings_begin_proximity_loop(OpenRCT2::RideRating::UpdateState&
|
|||||||
state.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
state.State = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void proximity_score_increment(OpenRCT2::RideRating::UpdateState& state, int32_t type)
|
static void proximity_score_increment(RideRating::UpdateState& state, int32_t type)
|
||||||
{
|
{
|
||||||
state.ProximityScores[type]++;
|
state.ProximityScores[type]++;
|
||||||
}
|
}
|
||||||
@@ -583,7 +568,7 @@ static void proximity_score_increment(OpenRCT2::RideRating::UpdateState& state,
|
|||||||
* rct2: 0x006B6207
|
* rct2: 0x006B6207
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_score_close_proximity_in_direction(
|
static void ride_ratings_score_close_proximity_in_direction(
|
||||||
OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement, int32_t direction)
|
RideRating::UpdateState& state, TileElement* inputTileElement, int32_t direction)
|
||||||
{
|
{
|
||||||
auto scorePos = CoordsXY{ CoordsXY{ state.Proximity } + CoordsDirectionDelta[direction] };
|
auto scorePos = CoordsXY{ CoordsXY{ state.Proximity } + CoordsDirectionDelta[direction] };
|
||||||
if (!MapIsLocationValid(scorePos))
|
if (!MapIsLocationValid(scorePos))
|
||||||
@@ -643,8 +628,7 @@ static void ride_ratings_score_close_proximity_in_direction(
|
|||||||
} while (!(tileElement++)->IsLastForTile());
|
} while (!(tileElement++)->IsLastForTile());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ride_ratings_score_close_proximity_loops_helper(
|
static void ride_ratings_score_close_proximity_loops_helper(RideRating::UpdateState& state, const CoordsXYE& coordsElement)
|
||||||
OpenRCT2::RideRating::UpdateState& state, const CoordsXYE& coordsElement)
|
|
||||||
{
|
{
|
||||||
TileElement* tileElement = MapGetFirstElementAt(coordsElement);
|
TileElement* tileElement = MapGetFirstElementAt(coordsElement);
|
||||||
if (tileElement == nullptr)
|
if (tileElement == nullptr)
|
||||||
@@ -689,7 +673,7 @@ static void ride_ratings_score_close_proximity_loops_helper(
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B62DA
|
* rct2: 0x006B62DA
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_score_close_proximity_loops(OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement)
|
static void ride_ratings_score_close_proximity_loops(RideRating::UpdateState& state, TileElement* inputTileElement)
|
||||||
{
|
{
|
||||||
auto trackType = inputTileElement->AsTrack()->GetTrackType();
|
auto trackType = inputTileElement->AsTrack()->GetTrackType();
|
||||||
if (trackType == TrackElemType::LeftVerticalLoop || trackType == TrackElemType::RightVerticalLoop)
|
if (trackType == TrackElemType::LeftVerticalLoop || trackType == TrackElemType::RightVerticalLoop)
|
||||||
@@ -706,7 +690,7 @@ static void ride_ratings_score_close_proximity_loops(OpenRCT2::RideRating::Updat
|
|||||||
*
|
*
|
||||||
* rct2: 0x006B5F9D
|
* rct2: 0x006B5F9D
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_score_close_proximity(OpenRCT2::RideRating::UpdateState& state, TileElement* inputTileElement)
|
static void ride_ratings_score_close_proximity(RideRating::UpdateState& state, TileElement* inputTileElement)
|
||||||
{
|
{
|
||||||
if (state.StationFlags & RIDE_RATING_STATION_FLAG_NO_ENTRANCE)
|
if (state.StationFlags & RIDE_RATING_STATION_FLAG_NO_ENTRANCE)
|
||||||
{
|
{
|
||||||
@@ -892,7 +876,7 @@ static void ride_ratings_score_close_proximity(OpenRCT2::RideRating::UpdateState
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsCalculate(OpenRCT2::RideRating::UpdateState& state, Ride& ride)
|
static void RideRatingsCalculate(RideRating::UpdateState& state, Ride& ride)
|
||||||
{
|
{
|
||||||
const auto& rrd = ride.getRideTypeDescriptor().RatingsData;
|
const auto& rrd = ride.getRideTypeDescriptor().RatingsData;
|
||||||
|
|
||||||
@@ -919,7 +903,7 @@ static void RideRatingsCalculate(OpenRCT2::RideRating::UpdateState& state, Ride&
|
|||||||
const auto shelteredEighths = GetNumOfShelteredEighths(ride);
|
const auto shelteredEighths = GetNumOfShelteredEighths(ride);
|
||||||
ride.shelteredEighths = (rrd.RideShelter == -1) ? shelteredEighths.TotalShelteredEighths : rrd.RideShelter;
|
ride.shelteredEighths = (rrd.RideShelter == -1) ? shelteredEighths.TotalShelteredEighths : rrd.RideShelter;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple ratings = rrd.BaseRatings;
|
RideRating::Tuple ratings = rrd.BaseRatings;
|
||||||
// Apply Modifiers
|
// Apply Modifiers
|
||||||
for (const auto& modifier : rrd.Modifiers)
|
for (const auto& modifier : rrd.Modifiers)
|
||||||
{
|
{
|
||||||
@@ -1219,7 +1203,7 @@ static void RideRatingsCalculateValue(Ride& ride)
|
|||||||
* inputs
|
* inputs
|
||||||
* - edi: ride ptr
|
* - edi: ride ptr
|
||||||
*/
|
*/
|
||||||
static money64 RideComputeUpkeep(OpenRCT2::RideRating::UpdateState& state, const Ride& ride)
|
static money64 RideComputeUpkeep(RideRating::UpdateState& state, const Ride& ride)
|
||||||
{
|
{
|
||||||
// data stored at 0x0057E3A8, incrementing 18 bytes at a time
|
// data stored at 0x0057E3A8, incrementing 18 bytes at a time
|
||||||
auto upkeep = ride.getRideTypeDescriptor().UpkeepCosts.BaseCost;
|
auto upkeep = ride.getRideTypeDescriptor().UpkeepCosts.BaseCost;
|
||||||
@@ -1295,7 +1279,7 @@ static money64 RideComputeUpkeep(OpenRCT2::RideRating::UpdateState& state, const
|
|||||||
* - bp: nausea
|
* - bp: nausea
|
||||||
* - edi: ride ptr
|
* - edi: ride ptr
|
||||||
*/
|
*/
|
||||||
static void RideRatingsApplyAdjustments(const Ride& ride, OpenRCT2::RideRating::Tuple& ratings)
|
static void RideRatingsApplyAdjustments(const Ride& ride, RideRating::Tuple& ratings)
|
||||||
{
|
{
|
||||||
const auto* rideEntry = GetRideEntryByIndex(ride.subtype);
|
const auto* rideEntry = GetRideEntryByIndex(ride.subtype);
|
||||||
|
|
||||||
@@ -1354,7 +1338,7 @@ static void RideRatingsApplyAdjustments(const Ride& ride, OpenRCT2::RideRating::
|
|||||||
* Lowers excitement, the higher the intensity.
|
* Lowers excitement, the higher the intensity.
|
||||||
* rct2: 0x0065E7A3
|
* rct2: 0x0065E7A3
|
||||||
*/
|
*/
|
||||||
static void RideRatingsApplyIntensityPenalty(OpenRCT2::RideRating::Tuple& ratings)
|
static void RideRatingsApplyIntensityPenalty(RideRating::Tuple& ratings)
|
||||||
{
|
{
|
||||||
static constexpr ride_rating intensityBounds[] = { 1000, 1100, 1200, 1320, 1450 };
|
static constexpr ride_rating intensityBounds[] = { 1000, 1100, 1200, 1320, 1450 };
|
||||||
ride_rating excitement = ratings.excitement;
|
ride_rating excitement = ratings.excitement;
|
||||||
@@ -1414,7 +1398,7 @@ static uint32_t get_proximity_score_helper_3(uint16_t x, uint16_t resultIfNotZer
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065E277
|
* rct2: 0x0065E277
|
||||||
*/
|
*/
|
||||||
static uint32_t ride_ratings_get_proximity_score(OpenRCT2::RideRating::UpdateState& state)
|
static uint32_t ride_ratings_get_proximity_score(RideRating::UpdateState& state)
|
||||||
{
|
{
|
||||||
const uint16_t* scores = state.ProximityScores;
|
const uint16_t* scores = state.ProximityScores;
|
||||||
|
|
||||||
@@ -1480,13 +1464,13 @@ static ShelteredEights GetNumOfShelteredEighths(const Ride& ride)
|
|||||||
return { trackShelteredEighths, numShelteredEighths };
|
return { trackShelteredEighths, numShelteredEighths };
|
||||||
}
|
}
|
||||||
|
|
||||||
static OpenRCT2::RideRating::Tuple get_flat_turns_rating(const Ride& ride)
|
static RideRating::Tuple get_flat_turns_rating(const Ride& ride)
|
||||||
{
|
{
|
||||||
int32_t num3PlusTurns = GetTurnCount3Elements(ride, 0);
|
int32_t num3PlusTurns = GetTurnCount3Elements(ride, 0);
|
||||||
int32_t num2Turns = GetTurnCount2Elements(ride, 0);
|
int32_t num2Turns = GetTurnCount2Elements(ride, 0);
|
||||||
int32_t num1Turns = GetTurnCount1Element(ride, 0);
|
int32_t num1Turns = GetTurnCount1Element(ride, 0);
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple rating;
|
RideRating::Tuple rating;
|
||||||
rating.excitement = (num3PlusTurns * 0x28000) >> 16;
|
rating.excitement = (num3PlusTurns * 0x28000) >> 16;
|
||||||
rating.excitement += (num2Turns * 0x30000) >> 16;
|
rating.excitement += (num2Turns * 0x30000) >> 16;
|
||||||
rating.excitement += (num1Turns * 63421) >> 16;
|
rating.excitement += (num1Turns * 63421) >> 16;
|
||||||
@@ -1506,13 +1490,13 @@ static OpenRCT2::RideRating::Tuple get_flat_turns_rating(const Ride& ride)
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065DF72
|
* rct2: 0x0065DF72
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple get_banked_turns_rating(const Ride& ride)
|
static RideRating::Tuple get_banked_turns_rating(const Ride& ride)
|
||||||
{
|
{
|
||||||
int32_t num3PlusTurns = GetTurnCount3Elements(ride, 1);
|
int32_t num3PlusTurns = GetTurnCount3Elements(ride, 1);
|
||||||
int32_t num2Turns = GetTurnCount2Elements(ride, 1);
|
int32_t num2Turns = GetTurnCount2Elements(ride, 1);
|
||||||
int32_t num1Turns = GetTurnCount1Element(ride, 1);
|
int32_t num1Turns = GetTurnCount1Element(ride, 1);
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple rating;
|
RideRating::Tuple rating;
|
||||||
rating.excitement = (num3PlusTurns * 0x3C000) >> 16;
|
rating.excitement = (num3PlusTurns * 0x3C000) >> 16;
|
||||||
rating.excitement += (num2Turns * 0x3C000) >> 16;
|
rating.excitement += (num2Turns * 0x3C000) >> 16;
|
||||||
rating.excitement += (num1Turns * 73992) >> 16;
|
rating.excitement += (num1Turns * 73992) >> 16;
|
||||||
@@ -1532,9 +1516,9 @@ static OpenRCT2::RideRating::Tuple get_banked_turns_rating(const Ride& ride)
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065E047
|
* rct2: 0x0065E047
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple get_sloped_turns_rating(const Ride& ride)
|
static RideRating::Tuple get_sloped_turns_rating(const Ride& ride)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple rating;
|
RideRating::Tuple rating;
|
||||||
|
|
||||||
int32_t num4PlusTurns = GetTurnCount4PlusElements(ride, 2);
|
int32_t num4PlusTurns = GetTurnCount4PlusElements(ride, 2);
|
||||||
int32_t num3Turns = GetTurnCount3Elements(ride, 2);
|
int32_t num3Turns = GetTurnCount3Elements(ride, 2);
|
||||||
@@ -1555,9 +1539,9 @@ static OpenRCT2::RideRating::Tuple get_sloped_turns_rating(const Ride& ride)
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065E0F2
|
* rct2: 0x0065E0F2
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple getInversionsRatings(uint16_t inversions)
|
static RideRating::Tuple getInversionsRatings(uint16_t inversions)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple rating;
|
RideRating::Tuple rating;
|
||||||
|
|
||||||
rating.excitement = (std::min<int32_t>(inversions, 6) * 0x1AAAAA) >> 16;
|
rating.excitement = (std::min<int32_t>(inversions, 6) * 0x1AAAAA) >> 16;
|
||||||
rating.intensity = (inversions * 0x320000) >> 16;
|
rating.intensity = (inversions * 0x320000) >> 16;
|
||||||
@@ -1607,7 +1591,7 @@ void SpecialTrackElementRatingsAjustment_LogFlume(const Ride& ride, int32_t& exc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static OpenRCT2::RideRating::Tuple GetSpecialTrackElementsRating(uint8_t type, const Ride& ride)
|
static RideRating::Tuple GetSpecialTrackElementsRating(uint8_t type, const Ride& ride)
|
||||||
{
|
{
|
||||||
int32_t excitement = 0, intensity = 0, nausea = 0;
|
int32_t excitement = 0, intensity = 0, nausea = 0;
|
||||||
const auto& rtd = ride.getRideTypeDescriptor();
|
const auto& rtd = ride.getRideTypeDescriptor();
|
||||||
@@ -1624,7 +1608,7 @@ static OpenRCT2::RideRating::Tuple GetSpecialTrackElementsRating(uint8_t type, c
|
|||||||
int32_t helixesOver5UpTo10 = std::clamp<int32_t>(helixSections - 5, 0, 10);
|
int32_t helixesOver5UpTo10 = std::clamp<int32_t>(helixSections - 5, 0, 10);
|
||||||
nausea += (helixesOver5UpTo10 * 0x140000) >> 16;
|
nausea += (helixesOver5UpTo10 * 0x140000) >> 16;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple rating = { static_cast<ride_rating>(excitement), static_cast<ride_rating>(intensity),
|
RideRating::Tuple rating = { static_cast<ride_rating>(excitement), static_cast<ride_rating>(intensity),
|
||||||
static_cast<ride_rating>(nausea) };
|
static_cast<ride_rating>(nausea) };
|
||||||
return rating;
|
return rating;
|
||||||
}
|
}
|
||||||
@@ -1633,36 +1617,36 @@ static OpenRCT2::RideRating::Tuple GetSpecialTrackElementsRating(uint8_t type, c
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065DDD1
|
* rct2: 0x0065DDD1
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple ride_ratings_get_turns_ratings(const Ride& ride)
|
static RideRating::Tuple ride_ratings_get_turns_ratings(const Ride& ride)
|
||||||
{
|
{
|
||||||
int32_t excitement = 0, intensity = 0, nausea = 0;
|
int32_t excitement = 0, intensity = 0, nausea = 0;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple specialTrackElementsRating = GetSpecialTrackElementsRating(ride.type, ride);
|
RideRating::Tuple specialTrackElementsRating = GetSpecialTrackElementsRating(ride.type, ride);
|
||||||
excitement += specialTrackElementsRating.excitement;
|
excitement += specialTrackElementsRating.excitement;
|
||||||
intensity += specialTrackElementsRating.intensity;
|
intensity += specialTrackElementsRating.intensity;
|
||||||
nausea += specialTrackElementsRating.nausea;
|
nausea += specialTrackElementsRating.nausea;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple flatTurnsRating = get_flat_turns_rating(ride);
|
RideRating::Tuple flatTurnsRating = get_flat_turns_rating(ride);
|
||||||
excitement += flatTurnsRating.excitement;
|
excitement += flatTurnsRating.excitement;
|
||||||
intensity += flatTurnsRating.intensity;
|
intensity += flatTurnsRating.intensity;
|
||||||
nausea += flatTurnsRating.nausea;
|
nausea += flatTurnsRating.nausea;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple bankedTurnsRating = get_banked_turns_rating(ride);
|
RideRating::Tuple bankedTurnsRating = get_banked_turns_rating(ride);
|
||||||
excitement += bankedTurnsRating.excitement;
|
excitement += bankedTurnsRating.excitement;
|
||||||
intensity += bankedTurnsRating.intensity;
|
intensity += bankedTurnsRating.intensity;
|
||||||
nausea += bankedTurnsRating.nausea;
|
nausea += bankedTurnsRating.nausea;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple slopedTurnsRating = get_sloped_turns_rating(ride);
|
RideRating::Tuple slopedTurnsRating = get_sloped_turns_rating(ride);
|
||||||
excitement += slopedTurnsRating.excitement;
|
excitement += slopedTurnsRating.excitement;
|
||||||
intensity += slopedTurnsRating.intensity;
|
intensity += slopedTurnsRating.intensity;
|
||||||
nausea += slopedTurnsRating.nausea;
|
nausea += slopedTurnsRating.nausea;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple inversionsRating = getInversionsRatings(ride.numInversions);
|
RideRating::Tuple inversionsRating = getInversionsRatings(ride.numInversions);
|
||||||
excitement += inversionsRating.excitement;
|
excitement += inversionsRating.excitement;
|
||||||
intensity += inversionsRating.intensity;
|
intensity += inversionsRating.intensity;
|
||||||
nausea += inversionsRating.nausea;
|
nausea += inversionsRating.nausea;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple rating = { static_cast<ride_rating>(excitement), static_cast<ride_rating>(intensity),
|
RideRating::Tuple rating = { static_cast<ride_rating>(excitement), static_cast<ride_rating>(intensity),
|
||||||
static_cast<ride_rating>(nausea) };
|
static_cast<ride_rating>(nausea) };
|
||||||
return rating;
|
return rating;
|
||||||
}
|
}
|
||||||
@@ -1671,7 +1655,7 @@ static OpenRCT2::RideRating::Tuple ride_ratings_get_turns_ratings(const Ride& ri
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065E1C2
|
* rct2: 0x0065E1C2
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple ride_ratings_get_sheltered_ratings(const Ride& ride)
|
static RideRating::Tuple ride_ratings_get_sheltered_ratings(const Ride& ride)
|
||||||
{
|
{
|
||||||
int32_t shelteredLengthShifted = (ride.shelteredLength) >> 16;
|
int32_t shelteredLengthShifted = (ride.shelteredLength) >> 16;
|
||||||
|
|
||||||
@@ -1701,7 +1685,7 @@ static OpenRCT2::RideRating::Tuple ride_ratings_get_sheltered_ratings(const Ride
|
|||||||
lowerVal = std::min<uint8_t>(lowerVal, 11);
|
lowerVal = std::min<uint8_t>(lowerVal, 11);
|
||||||
excitement += (lowerVal * 774516) >> 16;
|
excitement += (lowerVal * 774516) >> 16;
|
||||||
|
|
||||||
OpenRCT2::RideRating::Tuple rating = { static_cast<ride_rating>(excitement), static_cast<ride_rating>(intensity),
|
RideRating::Tuple rating = { static_cast<ride_rating>(excitement), static_cast<ride_rating>(intensity),
|
||||||
static_cast<ride_rating>(nausea) };
|
static_cast<ride_rating>(nausea) };
|
||||||
return rating;
|
return rating;
|
||||||
}
|
}
|
||||||
@@ -1710,9 +1694,9 @@ static OpenRCT2::RideRating::Tuple ride_ratings_get_sheltered_ratings(const Ride
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065DCDC
|
* rct2: 0x0065DCDC
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple ride_ratings_get_gforce_ratings(const Ride& ride)
|
static RideRating::Tuple ride_ratings_get_gforce_ratings(const Ride& ride)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple result = {
|
RideRating::Tuple result = {
|
||||||
.excitement = 0,
|
.excitement = 0,
|
||||||
.intensity = 0,
|
.intensity = 0,
|
||||||
.nausea = 0,
|
.nausea = 0,
|
||||||
@@ -1756,9 +1740,9 @@ static OpenRCT2::RideRating::Tuple ride_ratings_get_gforce_ratings(const Ride& r
|
|||||||
*
|
*
|
||||||
* rct2: 0x0065E139
|
* rct2: 0x0065E139
|
||||||
*/
|
*/
|
||||||
static OpenRCT2::RideRating::Tuple ride_ratings_get_drop_ratings(const Ride& ride)
|
static RideRating::Tuple ride_ratings_get_drop_ratings(const Ride& ride)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple result = {
|
RideRating::Tuple result = {
|
||||||
/* .excitement = */ 0,
|
/* .excitement = */ 0,
|
||||||
/* .intensity = */ 0,
|
/* .intensity = */ 0,
|
||||||
/* .nausea = */ 0,
|
/* .nausea = */ 0,
|
||||||
@@ -1839,7 +1823,7 @@ static int32_t ride_ratings_get_scenery_score(const Ride& ride)
|
|||||||
|
|
||||||
#pragma region Ride rating calculation helpers
|
#pragma region Ride rating calculation helpers
|
||||||
|
|
||||||
static void RideRatingsSet(OpenRCT2::RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea)
|
static void RideRatingsSet(RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea)
|
||||||
{
|
{
|
||||||
ratings.excitement = 0;
|
ratings.excitement = 0;
|
||||||
ratings.intensity = 0;
|
ratings.intensity = 0;
|
||||||
@@ -1850,7 +1834,7 @@ static void RideRatingsSet(OpenRCT2::RideRating::Tuple& ratings, int32_t excitem
|
|||||||
/**
|
/**
|
||||||
* Add to a ride rating with overflow protection.
|
* Add to a ride rating with overflow protection.
|
||||||
*/
|
*/
|
||||||
static void RideRatingsAdd(OpenRCT2::RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea)
|
static void RideRatingsAdd(RideRating::Tuple& ratings, int32_t excitement, int32_t intensity, int32_t nausea)
|
||||||
{
|
{
|
||||||
int32_t newExcitement = ratings.excitement + excitement;
|
int32_t newExcitement = ratings.excitement + excitement;
|
||||||
int32_t newIntensity = ratings.intensity + intensity;
|
int32_t newIntensity = ratings.intensity + intensity;
|
||||||
@@ -1860,15 +1844,14 @@ static void RideRatingsAdd(OpenRCT2::RideRating::Tuple& ratings, int32_t excitem
|
|||||||
ratings.nausea = std::clamp<int32_t>(newNausea, 0, INT16_MAX);
|
ratings.nausea = std::clamp<int32_t>(newNausea, 0, INT16_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusLength(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (std::min(ToHumanReadableRideLength(ride.getTotalLength()), modifier.threshold) * modifier.excitement) >> 16,
|
ratings, (std::min(ToHumanReadableRideLength(ride.getTotalLength()), modifier.threshold) * modifier.excitement) >> 16,
|
||||||
0, 0);
|
0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusSynchronisation(
|
static void RideRatingsApplyBonusSynchronisation(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if ((ride.departFlags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) && RideHasAdjacentStation(ride))
|
if ((ride.departFlags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) && RideHasAdjacentStation(ride))
|
||||||
{
|
{
|
||||||
@@ -1876,12 +1859,12 @@ static void RideRatingsApplyBonusSynchronisation(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusTrainLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusTrainLength(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
RideRatingsAdd(ratings, ((ride.numCarsPerTrain - 1) * modifier.excitement) >> 16, 0, 0);
|
RideRatingsAdd(ratings, ((ride.numCarsPerTrain - 1) * modifier.excitement) >> 16, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusMaxSpeed(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusMaxSpeed(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
int32_t maxSpeedMod = ride.maxSpeed >> 16;
|
int32_t maxSpeedMod = ride.maxSpeed >> 16;
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
@@ -1889,65 +1872,63 @@ static void RideRatingsApplyBonusMaxSpeed(OpenRCT2::RideRating::Tuple& ratings,
|
|||||||
(maxSpeedMod * modifier.nausea) >> 16);
|
(maxSpeedMod * modifier.nausea) >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusAverageSpeed(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusAverageSpeed(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
int32_t avgSpeedMod = ride.averageSpeed >> 16;
|
int32_t avgSpeedMod = ride.averageSpeed >> 16;
|
||||||
RideRatingsAdd(ratings, (avgSpeedMod * modifier.excitement) >> 16, (avgSpeedMod * modifier.intensity) >> 16, 0);
|
RideRatingsAdd(ratings, (avgSpeedMod * modifier.excitement) >> 16, (avgSpeedMod * modifier.intensity) >> 16, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusDuration(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusDuration(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
RideRatingsAdd(ratings, (std::min(ride.getTotalTime(), modifier.threshold) * modifier.excitement) >> 16, 0, 0);
|
RideRatingsAdd(ratings, (std::min(ride.getTotalTime(), modifier.threshold) * modifier.excitement) >> 16, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusGForces(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusGForces(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple subRating = ride_ratings_get_gforce_ratings(ride);
|
RideRating::Tuple subRating = ride_ratings_get_gforce_ratings(ride);
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
||||||
(subRating.nausea * modifier.nausea) >> 16);
|
(subRating.nausea * modifier.nausea) >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusTurns(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusTurns(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple subRating = ride_ratings_get_turns_ratings(ride);
|
RideRating::Tuple subRating = ride_ratings_get_turns_ratings(ride);
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
||||||
(subRating.nausea * modifier.nausea) >> 16);
|
(subRating.nausea * modifier.nausea) >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusDrops(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusDrops(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple subRating = ride_ratings_get_drop_ratings(ride);
|
RideRating::Tuple subRating = ride_ratings_get_drop_ratings(ride);
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
||||||
(subRating.nausea * modifier.nausea) >> 16);
|
(subRating.nausea * modifier.nausea) >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusSheltered(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusSheltered(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple subRating = ride_ratings_get_sheltered_ratings(ride);
|
RideRating::Tuple subRating = ride_ratings_get_sheltered_ratings(ride);
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
||||||
(subRating.nausea * modifier.nausea) >> 16);
|
(subRating.nausea * modifier.nausea) >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusRotations(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusRotations(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, ride.rotations * modifier.excitement, ride.rotations * modifier.intensity, ride.rotations * modifier.nausea);
|
ratings, ride.rotations * modifier.excitement, ride.rotations * modifier.intensity, ride.rotations * modifier.nausea);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusOperationOption(
|
static void RideRatingsApplyBonusOperationOption(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
int32_t intensity = (modifier.intensity >= 0) ? (ride.operationOption * modifier.intensity)
|
int32_t intensity = (modifier.intensity >= 0) ? (ride.operationOption * modifier.intensity)
|
||||||
: (ride.operationOption / std::abs(modifier.intensity));
|
: (ride.operationOption / std::abs(modifier.intensity));
|
||||||
RideRatingsAdd(ratings, ride.operationOption * modifier.excitement, intensity, ride.operationOption * modifier.nausea);
|
RideRatingsAdd(ratings, ride.operationOption * modifier.excitement, intensity, ride.operationOption * modifier.nausea);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusReversedTrains(
|
static void RideRatingsApplyBonusReversedTrains(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.hasLifecycleFlag(RIDE_LIFECYCLE_REVERSED_TRAINS))
|
if (ride.hasLifecycleFlag(RIDE_LIFECYCLE_REVERSED_TRAINS))
|
||||||
{
|
{
|
||||||
@@ -1957,7 +1938,7 @@ static void RideRatingsApplyBonusReversedTrains(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusGoKartRace(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusGoKartRace(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
if (ride.mode == RideMode::race && ride.numTrains >= modifier.threshold)
|
if (ride.mode == RideMode::race && ride.numTrains >= modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -1968,7 +1949,7 @@ static void RideRatingsApplyBonusGoKartRace(OpenRCT2::RideRating::Tuple& ratings
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusTowerRide(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusTowerRide(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
int32_t lengthFactor = ToHumanReadableRideLength(ride.getTotalLength());
|
int32_t lengthFactor = ToHumanReadableRideLength(ride.getTotalLength());
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
@@ -1976,20 +1957,19 @@ static void RideRatingsApplyBonusTowerRide(OpenRCT2::RideRating::Tuple& ratings,
|
|||||||
(lengthFactor * modifier.nausea) >> 16);
|
(lengthFactor * modifier.nausea) >> 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusRotoDrop(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride)
|
static void RideRatingsApplyBonusRotoDrop(RideRating::Tuple& ratings, const Ride& ride)
|
||||||
{
|
{
|
||||||
int32_t lengthFactor = (ToHumanReadableRideLength(ride.getTotalLength()) * 209715) >> 16;
|
int32_t lengthFactor = (ToHumanReadableRideLength(ride.getTotalLength()) * 209715) >> 16;
|
||||||
RideRatingsAdd(ratings, lengthFactor, lengthFactor * 2, lengthFactor * 2);
|
RideRatingsAdd(ratings, lengthFactor, lengthFactor * 2, lengthFactor * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusMazeSize(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusMazeSize(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
int32_t size = std::min<uint16_t>(ride.mazeTiles, modifier.threshold);
|
int32_t size = std::min<uint16_t>(ride.mazeTiles, modifier.threshold);
|
||||||
RideRatingsAdd(ratings, size * modifier.excitement, size * modifier.intensity, size * modifier.nausea);
|
RideRatingsAdd(ratings, size * modifier.excitement, size * modifier.intensity, size * modifier.nausea);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusBoatHireNoCircuit(
|
static void RideRatingsApplyBonusBoatHireNoCircuit(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
// Most likely checking if the ride has does not have a circuit
|
// Most likely checking if the ride has does not have a circuit
|
||||||
if (!(ride.lifecycleFlags & RIDE_LIFECYCLE_TESTED))
|
if (!(ride.lifecycleFlags & RIDE_LIFECYCLE_TESTED))
|
||||||
@@ -1998,8 +1978,7 @@ static void RideRatingsApplyBonusBoatHireNoCircuit(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusSlideUnlimitedRides(
|
static void RideRatingsApplyBonusSlideUnlimitedRides(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.mode == RideMode::unlimitedRidesPerAdmission)
|
if (ride.mode == RideMode::unlimitedRidesPerAdmission)
|
||||||
{
|
{
|
||||||
@@ -2007,8 +1986,7 @@ static void RideRatingsApplyBonusSlideUnlimitedRides(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusMotionSimulatorMode(
|
static void RideRatingsApplyBonusMotionSimulatorMode(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
// Hardcoded until ride mode refactor
|
// Hardcoded until ride mode refactor
|
||||||
if (ride.mode == RideMode::filmThrillRiders)
|
if (ride.mode == RideMode::filmThrillRiders)
|
||||||
@@ -2021,7 +1999,7 @@ static void RideRatingsApplyBonusMotionSimulatorMode(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonus3DCinemaMode(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonus3DCinemaMode(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
// Hardcoded until ride mode refactor
|
// Hardcoded until ride mode refactor
|
||||||
switch (ride.mode)
|
switch (ride.mode)
|
||||||
@@ -2039,7 +2017,7 @@ static void RideRatingsApplyBonus3DCinemaMode(OpenRCT2::RideRating::Tuple& ratin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusTopSpinMode(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusTopSpinMode(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
// Hardcoded until ride mode refactor
|
// Hardcoded until ride mode refactor
|
||||||
switch (ride.mode)
|
switch (ride.mode)
|
||||||
@@ -2058,20 +2036,20 @@ static void RideRatingsApplyBonusTopSpinMode(OpenRCT2::RideRating::Tuple& rating
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusReversals(
|
static void RideRatingsApplyBonusReversals(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
int32_t numReversers = std::min<uint16_t>(state.AmountOfReversers, modifier.threshold);
|
int32_t numReversers = std::min<uint16_t>(state.AmountOfReversers, modifier.threshold);
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, numReversers * modifier.excitement, numReversers * modifier.intensity, numReversers * modifier.nausea);
|
ratings, numReversers * modifier.excitement, numReversers * modifier.intensity, numReversers * modifier.nausea);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusHoles(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusHoles(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
auto bonusHoles = std::min<uint8_t>(modifier.threshold, ride.numHoles);
|
auto bonusHoles = std::min<uint8_t>(modifier.threshold, ride.numHoles);
|
||||||
RideRatingsAdd(ratings, bonusHoles * modifier.excitement, bonusHoles * modifier.intensity, bonusHoles * modifier.nausea);
|
RideRatingsAdd(ratings, bonusHoles * modifier.excitement, bonusHoles * modifier.intensity, bonusHoles * modifier.nausea);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusNumTrains(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusNumTrains(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
// For some reason the original code ran this twice, before and after the operation option bonus
|
// For some reason the original code ran this twice, before and after the operation option bonus
|
||||||
// Has been changed to call once with double value
|
// Has been changed to call once with double value
|
||||||
@@ -2081,8 +2059,7 @@ static void RideRatingsApplyBonusNumTrains(OpenRCT2::RideRating::Tuple& ratings,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusDownwardLaunch(
|
static void RideRatingsApplyBonusDownwardLaunch(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.mode == RideMode::downwardLaunch)
|
if (ride.mode == RideMode::downwardLaunch)
|
||||||
{
|
{
|
||||||
@@ -2090,8 +2067,7 @@ static void RideRatingsApplyBonusDownwardLaunch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusOperationOptionFreefall(
|
static void RideRatingsApplyBonusOperationOptionFreefall(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (ride.operationOption * modifier.excitement) >> 16, (ride.operationOption * modifier.intensity) >> 16,
|
ratings, (ride.operationOption * modifier.excitement) >> 16, (ride.operationOption * modifier.intensity) >> 16,
|
||||||
@@ -2099,7 +2075,7 @@ static void RideRatingsApplyBonusOperationOptionFreefall(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
int32_t excitement = (ToHumanReadableRideLength(ride.getTotalLength()) * 32768) >> 16;
|
int32_t excitement = (ToHumanReadableRideLength(ride.getTotalLength()) * 32768) >> 16;
|
||||||
RideRatingsAdd(ratings, excitement, 0, 0);
|
RideRatingsAdd(ratings, excitement, 0, 0);
|
||||||
@@ -2124,17 +2100,17 @@ static void RideRatingsApplyBonusLaunchedFreefallSpecial(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusProximity(
|
static void RideRatingsApplyBonusProximity(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
RideRatingsAdd(ratings, (ride_ratings_get_proximity_score(state) * modifier.excitement) >> 16, 0, 0);
|
RideRatingsAdd(ratings, (ride_ratings_get_proximity_score(state) * modifier.excitement) >> 16, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyBonusScenery(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyBonusScenery(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
RideRatingsAdd(ratings, (ride_ratings_get_scenery_score(ride) * modifier.excitement) >> 16, 0, 0);
|
RideRatingsAdd(ratings, (ride_ratings_get_scenery_score(ride) * modifier.excitement) >> 16, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementLength(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyRequirementLength(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
if (ride.getStation().SegmentLength < modifier.threshold)
|
if (ride.getStation().SegmentLength < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2144,8 +2120,7 @@ static void RideRatingsApplyRequirementLength(OpenRCT2::RideRating::Tuple& ratin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementDropHeight(
|
static void RideRatingsApplyRequirementDropHeight(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.highestDropHeight < modifier.threshold)
|
if (ride.highestDropHeight < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2155,8 +2130,7 @@ static void RideRatingsApplyRequirementDropHeight(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementMaxSpeed(
|
static void RideRatingsApplyRequirementMaxSpeed(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.maxSpeed < modifier.threshold)
|
if (ride.maxSpeed < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2166,8 +2140,7 @@ static void RideRatingsApplyRequirementMaxSpeed(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementNumDrops(
|
static void RideRatingsApplyRequirementNumDrops(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.numDrops < modifier.threshold)
|
if (ride.numDrops < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2177,8 +2150,7 @@ static void RideRatingsApplyRequirementNumDrops(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementNegativeGs(
|
static void RideRatingsApplyRequirementNegativeGs(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.maxNegativeVerticalG >= modifier.threshold)
|
if (ride.maxNegativeVerticalG >= modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2188,8 +2160,7 @@ static void RideRatingsApplyRequirementNegativeGs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementLateralGs(
|
static void RideRatingsApplyRequirementLateralGs(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.maxLateralG < modifier.threshold)
|
if (ride.maxLateralG < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2199,8 +2170,7 @@ static void RideRatingsApplyRequirementLateralGs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementInversions(
|
static void RideRatingsApplyRequirementInversions(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.numInversions < modifier.threshold)
|
if (ride.numInversions < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2211,7 +2181,7 @@ static void RideRatingsApplyRequirementInversions(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementUnsheltered(
|
static void RideRatingsApplyRequirementUnsheltered(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, uint8_t shelteredEighths, RatingsModifier modifier)
|
RideRating::Tuple& ratings, const Ride& ride, uint8_t shelteredEighths, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
if (shelteredEighths >= modifier.threshold)
|
if (shelteredEighths >= modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2222,7 +2192,7 @@ static void RideRatingsApplyRequirementUnsheltered(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementReversals(
|
static void RideRatingsApplyRequirementReversals(
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, OpenRCT2::RideRating::UpdateState& state, RatingsModifier modifier)
|
RideRating::Tuple& ratings, const Ride& ride, RideRating::UpdateState& state, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
if (state.AmountOfReversers < modifier.threshold)
|
if (state.AmountOfReversers < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2232,7 +2202,7 @@ static void RideRatingsApplyRequirementReversals(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementHoles(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyRequirementHoles(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
if (ride.numHoles < modifier.threshold)
|
if (ride.numHoles < modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2242,8 +2212,7 @@ static void RideRatingsApplyRequirementHoles(OpenRCT2::RideRating::Tuple& rating
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementStations(
|
static void RideRatingsApplyRequirementStations(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (ride.numStations <= modifier.threshold)
|
if (ride.numStations <= modifier.threshold)
|
||||||
{
|
{
|
||||||
@@ -2254,8 +2223,7 @@ static void RideRatingsApplyRequirementStations(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RideRatingsApplyRequirementSplashdown(
|
static void RideRatingsApplyRequirementSplashdown(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
|
||||||
{
|
{
|
||||||
if (!ride.specialTrackElements.has(SpecialElement::splash))
|
if (!ride.specialTrackElements.has(SpecialElement::splash))
|
||||||
{
|
{
|
||||||
@@ -2266,9 +2234,9 @@ static void RideRatingsApplyRequirementSplashdown(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef ORIGINAL_RATINGS
|
#ifndef ORIGINAL_RATINGS
|
||||||
static OpenRCT2::RideRating::Tuple ride_ratings_get_excessive_lateral_g_penalty(const Ride& ride)
|
static RideRating::Tuple ride_ratings_get_excessive_lateral_g_penalty(const Ride& ride)
|
||||||
{
|
{
|
||||||
OpenRCT2::RideRating::Tuple result{};
|
RideRating::Tuple result{};
|
||||||
if (ride.maxLateralG > MakeFixed16_2dp(2, 80))
|
if (ride.maxLateralG > MakeFixed16_2dp(2, 80))
|
||||||
{
|
{
|
||||||
result.intensity = MakeRideRating(3, 75);
|
result.intensity = MakeRideRating(3, 75);
|
||||||
@@ -2297,10 +2265,10 @@ static OpenRCT2::RideRating::Tuple ride_ratings_get_excessive_lateral_g_penalty(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void RideRatingsApplyPenaltyLateralGs(OpenRCT2::RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
static void RideRatingsApplyPenaltyLateralGs(RideRating::Tuple& ratings, const Ride& ride, RatingsModifier modifier)
|
||||||
{
|
{
|
||||||
#ifndef ORIGINAL_RATINGS
|
#ifndef ORIGINAL_RATINGS
|
||||||
OpenRCT2::RideRating::Tuple subRating = ride_ratings_get_excessive_lateral_g_penalty(ride);
|
RideRating::Tuple subRating = ride_ratings_get_excessive_lateral_g_penalty(ride);
|
||||||
RideRatingsAdd(
|
RideRatingsAdd(
|
||||||
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
ratings, (subRating.excitement * modifier.excitement) >> 16, (subRating.intensity * modifier.intensity) >> 16,
|
||||||
(subRating.nausea * modifier.nausea) >> 16);
|
(subRating.nausea * modifier.nausea) >> 16);
|
||||||
@@ -2309,12 +2277,12 @@ static void RideRatingsApplyPenaltyLateralGs(OpenRCT2::RideRating::Tuple& rating
|
|||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
bool OpenRCT2::RideRating::Tuple::isNull() const
|
bool RideRating::Tuple::isNull() const
|
||||||
{
|
{
|
||||||
return excitement == kUndefined;
|
return excitement == kUndefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenRCT2::RideRating::Tuple::setNull()
|
void RideRating::Tuple::setNull()
|
||||||
{
|
{
|
||||||
excitement = kUndefined;
|
excitement = kUndefined;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user