mirror of https://github.com/OpenRCT2/OpenRCT2.git
refactor ride ratings proximity
This commit is contained in:
parent
a29ee4e1f0
commit
d7a5dedea4
|
@ -35,10 +35,47 @@ enum {
|
||||||
RIDE_RATINGS_STATE_5
|
RIDE_RATINGS_STATE_5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROXIMITY_WATER_OVER, // 0x0138B596
|
||||||
|
PROXIMITY_WATER_TOUCH, // 0x0138B598
|
||||||
|
PROXIMITY_WATER_LOW, // 0x0138B59A
|
||||||
|
PROXIMITY_WATER_HIGH, // 0x0138B59C
|
||||||
|
PROXIMITY_SURFACE_TOUCH, // 0x0138B59E
|
||||||
|
PROXIMITY_PATH_OVER, // 0x0138B5A0
|
||||||
|
PROXIMITY_PATH_TOUCH_ABOVE, // 0x0138B5A2
|
||||||
|
PROXIMITY_PATH_TOUCH_UNDER, // 0x0138B5A4
|
||||||
|
PROXIMITY_138B5A6, // 0x0138B5A6
|
||||||
|
PROXIMITY_138B5A8, // 0x0138B5A8
|
||||||
|
PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE, // 0x0138B5AA
|
||||||
|
PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE, // 0x0138B5AC
|
||||||
|
PROXIMITY_OWN_TRACK_ABOVE_OR_BELOW, // 0x0138B5AE
|
||||||
|
PROXIMITY_OWN_TRACK_TOUCH_ABOVE, // 0x0138B5B0
|
||||||
|
PROXIMITY_OWN_TRACK_CLOSE_ABOVE, // 0x0138B5B2
|
||||||
|
PROXIMITY_138B5B4, // 0x0138B5B4
|
||||||
|
PROXIMITY_138B5B6, // 0x0138B5B6
|
||||||
|
PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE, // 0x0138B5B8
|
||||||
|
PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE, // 0x0138B5BA
|
||||||
|
PROXIMITY_138B5BC, // 0x0138B5BC
|
||||||
|
PROXIMITY_138B5BE, // 0x0138B5BE
|
||||||
|
PROXIMITY_138B5C0, // 0x0138B5C0
|
||||||
|
PROXIMITY_THROUGH_VERTICAL_LOOP, // 0x0138B5C2
|
||||||
|
PROXIMITY_138B5C4, // 0x0138B5C4
|
||||||
|
PROXIMITY_138B5C6, // 0x0138B5C6
|
||||||
|
PROXIMITY_138B5C8, // 0x0138B5C8
|
||||||
|
PROXIMITY_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
typedef void (*ride_ratings_calculation)(rct_ride *ride);
|
typedef void (*ride_ratings_calculation)(rct_ride *ride);
|
||||||
|
|
||||||
#define _rideRatingsState RCT2_GLOBAL(0x0138B591, uint8)
|
#define _rideRatingsProximityX RCT2_GLOBAL(0x0138B584, uint16)
|
||||||
|
#define _rideRatingsProximityY RCT2_GLOBAL(0x0138B586, uint16)
|
||||||
|
#define _rideRatingsProximityZ RCT2_GLOBAL(0x0138B588, uint16)
|
||||||
#define _rideRatingsCurrentRide RCT2_GLOBAL(0x0138B590, uint8)
|
#define _rideRatingsCurrentRide RCT2_GLOBAL(0x0138B590, uint8)
|
||||||
|
#define _rideRatingsState RCT2_GLOBAL(0x0138B591, uint8)
|
||||||
|
#define _rideRatingsProximityTrackType RCT2_GLOBAL(0x0138B592, uint8)
|
||||||
|
#define _rideRatingsProximityTotal RCT2_GLOBAL(0x0138B594, uint16)
|
||||||
|
|
||||||
|
static uint16 *_proximityScores = (uint16*)0x0138B596;
|
||||||
|
|
||||||
static const ride_ratings_calculation ride_ratings_calculate_func_table[91];
|
static const ride_ratings_calculation ride_ratings_calculate_func_table[91];
|
||||||
|
|
||||||
|
@ -108,33 +145,10 @@ static void ride_ratings_update_state_0()
|
||||||
*/
|
*/
|
||||||
static void ride_ratings_update_state_1()
|
static void ride_ratings_update_state_1()
|
||||||
{
|
{
|
||||||
RCT2_GLOBAL(0x0138B594, uint16) = 0;
|
_rideRatingsProximityTotal = 0;
|
||||||
RCT2_GLOBAL(0x0138B596, uint16) = 0;
|
for (int i = 0; i < PROXIMITY_COUNT; i++) {
|
||||||
RCT2_GLOBAL(0x0138B598, uint16) = 0;
|
_proximityScores[i] = 0;
|
||||||
RCT2_GLOBAL(0x0138B59A, uint16) = 0;
|
}
|
||||||
RCT2_GLOBAL(0x0138B59C, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B59E, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5A0, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5A2, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5A4, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5A6, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5A8, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5AA, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5AC, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5AE, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5B0, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5B2, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5B4, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5B6, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5B8, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5BA, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5BC, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5BE, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5C0, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5C2, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5C4, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5C6, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5C8, uint16) = 0;
|
|
||||||
RCT2_GLOBAL(0x0138B5CA, uint16) = 0;
|
RCT2_GLOBAL(0x0138B5CA, uint16) = 0;
|
||||||
RCT2_GLOBAL(0x0138B5CC, uint16) = 0;
|
RCT2_GLOBAL(0x0138B5CC, uint16) = 0;
|
||||||
_rideRatingsState = RIDE_RATINGS_STATE_2;
|
_rideRatingsState = RIDE_RATINGS_STATE_2;
|
||||||
|
@ -172,10 +186,10 @@ static void loc_6B5BB2()
|
||||||
y = (ride->station_starts[i] >> 8) * 32;
|
y = (ride->station_starts[i] >> 8) * 32;
|
||||||
z = ride->station_heights[i] * 8;
|
z = ride->station_heights[i] * 8;
|
||||||
|
|
||||||
RCT2_GLOBAL(0x0138B584, uint16) = x;
|
_rideRatingsProximityX = x;
|
||||||
RCT2_GLOBAL(0x0138B586, uint16) = y;
|
_rideRatingsProximityY = y;
|
||||||
RCT2_GLOBAL(0x0138B588, uint16) = z;
|
_rideRatingsProximityZ = z;
|
||||||
RCT2_GLOBAL(0x0138B592, uint8) = 255;
|
_rideRatingsProximityTrackType = 255;
|
||||||
RCT2_GLOBAL(0x0138B58A, uint16) = x;
|
RCT2_GLOBAL(0x0138B58A, uint16) = x;
|
||||||
RCT2_GLOBAL(0x0138B58C, uint16) = y;
|
RCT2_GLOBAL(0x0138B58C, uint16) = y;
|
||||||
RCT2_GLOBAL(0x0138B58E, uint16) = z;
|
RCT2_GLOBAL(0x0138B58E, uint16) = z;
|
||||||
|
@ -203,13 +217,12 @@ static void ride_ratings_update_state_2()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = RCT2_GLOBAL(0x0138B584, uint16) / 32;
|
x = _rideRatingsProximityX / 32;
|
||||||
y = RCT2_GLOBAL(0x0138B586, uint16) / 32;
|
y = _rideRatingsProximityY / 32;
|
||||||
z = RCT2_GLOBAL(0x0138B588, uint16) / 8;
|
z = _rideRatingsProximityZ / 8;
|
||||||
|
trackType = _rideRatingsProximityTrackType;
|
||||||
|
|
||||||
mapElement = map_get_first_element_at(x, y);
|
mapElement = map_get_first_element_at(x, y);
|
||||||
trackType = RCT2_GLOBAL(0x0138B592, uint8);
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK)
|
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK)
|
||||||
continue;
|
continue;
|
||||||
|
@ -226,8 +239,8 @@ static void ride_ratings_update_state_2()
|
||||||
|
|
||||||
ride_ratings_score_close_proximity(mapElement);
|
ride_ratings_score_close_proximity(mapElement);
|
||||||
|
|
||||||
trackElement.x = RCT2_GLOBAL(0x0138B584, uint16);
|
trackElement.x = _rideRatingsProximityX;
|
||||||
trackElement.y = RCT2_GLOBAL(0x0138B586, uint16);
|
trackElement.y = _rideRatingsProximityY;
|
||||||
trackElement.element = mapElement;
|
trackElement.element = mapElement;
|
||||||
if (!track_block_get_next(&trackElement, &nextTrackElement, NULL, NULL)) {
|
if (!track_block_get_next(&trackElement, &nextTrackElement, NULL, NULL)) {
|
||||||
_rideRatingsState = RIDE_RATINGS_STATE_4;
|
_rideRatingsState = RIDE_RATINGS_STATE_4;
|
||||||
|
@ -242,10 +255,10 @@ static void ride_ratings_update_state_2()
|
||||||
_rideRatingsState = RIDE_RATINGS_STATE_CALCULATE;
|
_rideRatingsState = RIDE_RATINGS_STATE_CALCULATE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RCT2_GLOBAL(0x0138B584, uint16) = x;
|
_rideRatingsProximityX = x;
|
||||||
RCT2_GLOBAL(0x0138B586, uint16) = y;
|
_rideRatingsProximityY = y;
|
||||||
RCT2_GLOBAL(0x0138B588, uint16) = z;
|
_rideRatingsProximityZ = z;
|
||||||
RCT2_GLOBAL(0x0138B592, uint8) = mapElement->properties.track.type;
|
_rideRatingsProximityTrackType = mapElement->properties.track.type;
|
||||||
}
|
}
|
||||||
} while (!map_element_is_last_for_tile(mapElement++));
|
} while (!map_element_is_last_for_tile(mapElement++));
|
||||||
|
|
||||||
|
@ -301,13 +314,12 @@ static void ride_ratings_update_state_5()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = RCT2_GLOBAL(0x0138B584, uint16) / 32;
|
x = _rideRatingsProximityX / 32;
|
||||||
y = RCT2_GLOBAL(0x0138B586, uint16) / 32;
|
y = _rideRatingsProximityY / 32;
|
||||||
z = RCT2_GLOBAL(0x0138B588, uint16) / 8;
|
z = _rideRatingsProximityZ / 8;
|
||||||
|
trackType = _rideRatingsProximityTrackType;
|
||||||
|
|
||||||
mapElement = map_get_first_element_at(x, y);
|
mapElement = map_get_first_element_at(x, y);
|
||||||
trackType = RCT2_GLOBAL(0x0138B592, uint8);
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK)
|
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK)
|
||||||
continue;
|
continue;
|
||||||
|
@ -317,8 +329,8 @@ static void ride_ratings_update_state_5()
|
||||||
if (trackType == 255 || trackType == mapElement->properties.track.type) {
|
if (trackType == 255 || trackType == mapElement->properties.track.type) {
|
||||||
ride_ratings_score_close_proximity(mapElement);
|
ride_ratings_score_close_proximity(mapElement);
|
||||||
|
|
||||||
x = RCT2_GLOBAL(0x0138B584, uint16);
|
x = _rideRatingsProximityX;
|
||||||
y = RCT2_GLOBAL(0x0138B586, uint16);
|
y = _rideRatingsProximityY;
|
||||||
if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) {
|
if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) {
|
||||||
_rideRatingsState = RIDE_RATINGS_STATE_CALCULATE;
|
_rideRatingsState = RIDE_RATINGS_STATE_CALCULATE;
|
||||||
return;
|
return;
|
||||||
|
@ -330,16 +342,21 @@ static void ride_ratings_update_state_5()
|
||||||
_rideRatingsState = RIDE_RATINGS_STATE_CALCULATE;
|
_rideRatingsState = RIDE_RATINGS_STATE_CALCULATE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RCT2_GLOBAL(0x0138B584, uint16) = x;
|
_rideRatingsProximityX = x;
|
||||||
RCT2_GLOBAL(0x0138B586, uint16) = y;
|
_rideRatingsProximityY = y;
|
||||||
RCT2_GLOBAL(0x0138B588, uint16) = z;
|
_rideRatingsProximityZ = z;
|
||||||
RCT2_GLOBAL(0x0138B592, uint8) = mapElement->properties.track.type;
|
_rideRatingsProximityTrackType = mapElement->properties.track.type;
|
||||||
}
|
}
|
||||||
} while (!map_element_is_last_for_tile(mapElement++));
|
} while (!map_element_is_last_for_tile(mapElement++));
|
||||||
|
|
||||||
_rideRatingsState = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
_rideRatingsState = RIDE_RATINGS_STATE_FIND_NEXT_RIDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void proximity_score_increment(int type)
|
||||||
|
{
|
||||||
|
_proximityScores[type]++;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x006B6207
|
* rct2: 0x006B6207
|
||||||
|
@ -371,32 +388,32 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement)
|
||||||
if (RCT2_GLOBAL(0x0138B5CE, uint16) & 1)
|
if (RCT2_GLOBAL(0x0138B5CE, uint16) & 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RCT2_GLOBAL(0x00138B594, uint16)++;
|
_rideRatingsProximityTotal++;
|
||||||
x = RCT2_GLOBAL(0x00138B584, uint16);
|
x = _rideRatingsProximityX;
|
||||||
y = RCT2_GLOBAL(0x00138B586, uint16);
|
y = _rideRatingsProximityY;
|
||||||
mapElement = map_get_first_element_at(x >> 5, y >> 5);
|
mapElement = map_get_first_element_at(x >> 5, y >> 5);
|
||||||
do {
|
do {
|
||||||
switch (map_element_get_type(mapElement)) {
|
switch (map_element_get_type(mapElement)) {
|
||||||
case MAP_ELEMENT_TYPE_SURFACE:
|
case MAP_ELEMENT_TYPE_SURFACE:
|
||||||
RCT2_GLOBAL(0x0138B593, uint8) = mapElement->base_height;
|
RCT2_GLOBAL(0x0138B593, uint8) = mapElement->base_height;
|
||||||
if (mapElement->base_height * 8 != RCT2_GLOBAL(0x0138B588, uint16)) {
|
if (mapElement->base_height * 8 != _rideRatingsProximityZ) {
|
||||||
RCT2_GLOBAL(0x0138B59E, uint16)++;
|
RCT2_GLOBAL(0x0138B59E, uint16)++;
|
||||||
}
|
}
|
||||||
waterHeight = (mapElement->properties.surface.terrain & 0x1F);
|
waterHeight = (mapElement->properties.surface.terrain & 0x1F);
|
||||||
if (waterHeight != 0) {
|
if (waterHeight != 0) {
|
||||||
z = waterHeight * 16;
|
z = waterHeight * 16;
|
||||||
if (z <= RCT2_GLOBAL(0x0138B588, uint16)) {
|
if (z <= _rideRatingsProximityZ) {
|
||||||
RCT2_GLOBAL(0x0138B596, uint16)++;
|
proximity_score_increment(PROXIMITY_WATER_OVER);
|
||||||
if (z == RCT2_GLOBAL(0x0138B588, uint16)) {
|
if (z == _rideRatingsProximityZ) {
|
||||||
RCT2_GLOBAL(0x0138B598, uint16)++;
|
proximity_score_increment(PROXIMITY_WATER_TOUCH);
|
||||||
}
|
}
|
||||||
z += 16;
|
z += 16;
|
||||||
if (z == RCT2_GLOBAL(0x0138B588, uint16)) {
|
if (z == _rideRatingsProximityZ) {
|
||||||
RCT2_GLOBAL(0x0138B59A, uint16)++;
|
proximity_score_increment(PROXIMITY_WATER_LOW);
|
||||||
}
|
}
|
||||||
z += 112;
|
z += 112;
|
||||||
if (z <= RCT2_GLOBAL(0x0138B588, uint16)) {
|
if (z <= _rideRatingsProximityZ) {
|
||||||
RCT2_GLOBAL(0x0138B59C, uint16)++;
|
proximity_score_increment(PROXIMITY_WATER_HIGH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -404,20 +421,20 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement)
|
||||||
case MAP_ELEMENT_TYPE_PATH:
|
case MAP_ELEMENT_TYPE_PATH:
|
||||||
if (inputMapElement->properties.path.type & 0xF0) {
|
if (inputMapElement->properties.path.type & 0xF0) {
|
||||||
if (mapElement->clearance_height == inputMapElement->base_height) {
|
if (mapElement->clearance_height == inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5A6, uint16)++;
|
proximity_score_increment(PROXIMITY_138B5A6);
|
||||||
}
|
}
|
||||||
if (mapElement->base_height == inputMapElement->clearance_height) {
|
if (mapElement->base_height == inputMapElement->clearance_height) {
|
||||||
RCT2_GLOBAL(0x0138B5A8, uint16)++;
|
proximity_score_increment(PROXIMITY_138B5A8);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (mapElement->clearance_height <= inputMapElement->base_height) {
|
if (mapElement->clearance_height <= inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5A0, uint16)++;
|
proximity_score_increment(PROXIMITY_PATH_OVER);
|
||||||
}
|
}
|
||||||
if (mapElement->clearance_height == inputMapElement->base_height) {
|
if (mapElement->clearance_height == inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5A2, uint16)++;
|
proximity_score_increment(PROXIMITY_PATH_TOUCH_ABOVE);
|
||||||
}
|
}
|
||||||
if (mapElement->base_height == inputMapElement->clearance_height) {
|
if (mapElement->base_height == inputMapElement->clearance_height) {
|
||||||
RCT2_GLOBAL(0x0138B5A4, uint16)++;
|
proximity_score_increment(PROXIMITY_PATH_TOUCH_UNDER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -427,26 +444,26 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement)
|
||||||
sequence = mapElement->properties.track.sequence & 0x0F;
|
sequence = mapElement->properties.track.sequence & 0x0F;
|
||||||
if (sequence == 3 || sequence == 6) {
|
if (sequence == 3 || sequence == 6) {
|
||||||
if (mapElement->base_height - inputMapElement->clearance_height <= 10) {
|
if (mapElement->base_height - inputMapElement->clearance_height <= 10) {
|
||||||
RCT2_GLOBAL(0x0138B5C2, uint16)++;
|
proximity_score_increment(PROXIMITY_THROUGH_VERTICAL_LOOP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (inputMapElement->properties.track.ride_index == mapElement->properties.track.ride_index) {
|
if (inputMapElement->properties.track.ride_index == mapElement->properties.track.ride_index) {
|
||||||
RCT2_GLOBAL(0x0138B5AE, uint16)++;
|
proximity_score_increment(PROXIMITY_OWN_TRACK_ABOVE_OR_BELOW);
|
||||||
if (mapElement->clearance_height == inputMapElement->base_height) {
|
if (mapElement->clearance_height == inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5B0, uint16)++;
|
proximity_score_increment(PROXIMITY_OWN_TRACK_TOUCH_ABOVE);
|
||||||
}
|
}
|
||||||
if (mapElement->clearance_height + 2 <= inputMapElement->base_height) {
|
if (mapElement->clearance_height + 2 <= inputMapElement->base_height) {
|
||||||
if (mapElement->clearance_height + 10 >= inputMapElement->base_height) {
|
if (mapElement->clearance_height + 10 >= inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5B2, uint16)++;
|
proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (inputMapElement->clearance_height == mapElement->base_height) {
|
if (inputMapElement->clearance_height == mapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5B0, uint16)++;
|
proximity_score_increment(PROXIMITY_OWN_TRACK_TOUCH_ABOVE);
|
||||||
}
|
}
|
||||||
if (inputMapElement->clearance_height + 2 == mapElement->base_height) {
|
if (inputMapElement->clearance_height + 2 == mapElement->base_height) {
|
||||||
if (inputMapElement->clearance_height + 10 >= mapElement->base_height) {
|
if (inputMapElement->clearance_height + 10 >= mapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5B2, uint16)++;
|
proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -457,31 +474,31 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement)
|
||||||
trackType == TRACK_ELEM_BEGIN_STATION
|
trackType == TRACK_ELEM_BEGIN_STATION
|
||||||
);
|
);
|
||||||
if (mapElement->clearance_height == inputMapElement->base_height) {
|
if (mapElement->clearance_height == inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5AA, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE);
|
||||||
if (isStation) {
|
if (isStation) {
|
||||||
RCT2_GLOBAL(0x0138B5B8, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mapElement->clearance_height + 2 <= inputMapElement->base_height) {
|
if (mapElement->clearance_height + 2 <= inputMapElement->base_height) {
|
||||||
if (mapElement->clearance_height + 10 >= inputMapElement->base_height) {
|
if (mapElement->clearance_height + 10 >= inputMapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5AC, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE);
|
||||||
if (isStation) {
|
if (isStation) {
|
||||||
RCT2_GLOBAL(0x0138B5BA, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inputMapElement->clearance_height == mapElement->base_height) {
|
if (inputMapElement->clearance_height == mapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5AA, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE);
|
||||||
if (isStation) {
|
if (isStation) {
|
||||||
RCT2_GLOBAL(0x0138B5B8, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (inputMapElement->clearance_height + 2 <= mapElement->base_height) {
|
if (inputMapElement->clearance_height + 2 <= mapElement->base_height) {
|
||||||
if (inputMapElement->clearance_height + 10 >= mapElement->base_height) {
|
if (inputMapElement->clearance_height + 10 >= mapElement->base_height) {
|
||||||
RCT2_GLOBAL(0x0138B5AC, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE);
|
||||||
if (isStation) {
|
if (isStation) {
|
||||||
RCT2_GLOBAL(0x0138B5BA, uint16)++;
|
proximity_score_increment(PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -759,19 +776,19 @@ static void set_unreliability_factor(rct_ride *ride)
|
||||||
ride->unreliability_factor += (ride->lift_hill_speed - lift_speed_adjustment) * 2;
|
ride->unreliability_factor += (ride->lift_hill_speed - lift_speed_adjustment) * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32 ride_ratings_get_proximity_score_helper_1(uint16 x, uint16 max, uint32 multiplier)
|
static uint32 get_proximity_score_helper_1(uint16 x, uint16 max, uint32 multiplier)
|
||||||
{
|
{
|
||||||
return (min(x, max) * multiplier) >> 16;
|
return (min(x, max) * multiplier) >> 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32 ride_ratings_get_proximity_score_helper_2(uint16 x, uint16 additionIfNotZero, uint16 max, uint32 multiplier)
|
static uint32 get_proximity_score_helper_2(uint16 x, uint16 additionIfNotZero, uint16 max, uint32 multiplier)
|
||||||
{
|
{
|
||||||
uint32 result = x;
|
uint32 result = x;
|
||||||
if (result != 0) result += additionIfNotZero;
|
if (result != 0) result += additionIfNotZero;
|
||||||
return (max(result, max) * multiplier) >> 16;
|
return (max(result, max) * multiplier) >> 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32 ride_ratings_get_proximity_score_helper_3(uint16 x, uint16 resultIfNotZero)
|
static uint32 get_proximity_score_helper_3(uint16 x, uint16 resultIfNotZero)
|
||||||
{
|
{
|
||||||
return x == 0 ? 0 : resultIfNotZero;
|
return x == 0 ? 0 : resultIfNotZero;
|
||||||
}
|
}
|
||||||
|
@ -783,32 +800,32 @@ static uint32 ride_ratings_get_proximity_score_helper_3(uint16 x, uint16 resultI
|
||||||
static uint32 ride_ratings_get_proximity_score()
|
static uint32 ride_ratings_get_proximity_score()
|
||||||
{
|
{
|
||||||
uint32 result = 0;
|
uint32 result = 0;
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B596, uint16) , 60, 0x00AAAA);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_OVER ] , 60, 0x00AAAA);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B598, uint16) , 22, 0x0245D1);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_TOUCH ] , 22, 0x0245D1);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B59A, uint16) , 10, 0x020000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_LOW ] , 10, 0x020000);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B59C, uint16) , 40, 0x00A000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_HIGH ] , 40, 0x00A000);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B59E, uint16) , 70, 0x01B6DB);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_SURFACE_TOUCH ] , 70, 0x01B6DB);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5A0, uint16) + 8, 12, 0x064000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_PATH_OVER ] + 8, 12, 0x064000);
|
||||||
result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5A2, uint16) , 40 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_PATH_TOUCH_ABOVE ] , 40 );
|
||||||
result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5A4, uint16) , 45 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_PATH_TOUCH_UNDER ] , 45 );
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5A6, uint16) , 10, 20, 0x03C000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5A6 ] , 10, 20, 0x03C000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5A6, uint16) , 10, 20, 0x044000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5A8 ] , 10, 20, 0x044000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5AA, uint16) , 10, 15, 0x035555);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE ] , 10, 15, 0x035555);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5AC, uint16) , 5, 0x060000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE ] , 5, 0x060000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5AE, uint16) , 10, 15, 0x02AAAA);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_OWN_TRACK_ABOVE_OR_BELOW ] , 10, 15, 0x02AAAA);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5B0, uint16) , 10, 15, 0x04AAAA);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_OWN_TRACK_TOUCH_ABOVE ] , 10, 15, 0x04AAAA);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5B2, uint16) , 5, 0x090000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_OWN_TRACK_CLOSE_ABOVE ] , 5, 0x090000);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5B4, uint16) , 35, 0x016DB6);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_138B5B4 ] , 35, 0x016DB6);
|
||||||
result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5B6, uint16) , 35, 0x00DB6D);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_138B5B6 ] , 35, 0x00DB6D);
|
||||||
result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5B8, uint16) , 55 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE] , 55 );
|
||||||
result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5BA, uint16) , 25 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE] , 25 );
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5BC, uint16) , 4, 6, 0x140000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5BC ] , 4, 6, 0x140000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5BE, uint16) , 4, 6, 0x0F0000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5BE ] , 4, 6, 0x0F0000);
|
||||||
result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5C0, uint16) , 100 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_138B5C0 ] , 100 );
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C2, uint16) , 4, 6, 0x0A0000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_THROUGH_VERTICAL_LOOP ] , 4, 6, 0x0A0000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C4, uint16) , 10, 20, 0x01C000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5C4 ] , 10, 20, 0x01C000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C6, uint16) , 10, 20, 0x024000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5C6 ] , 10, 20, 0x024000);
|
||||||
result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C8, uint16) , 10, 20, 0x028000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5C8 ] , 10, 20, 0x028000);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue