mirror of https://github.com/OpenRCT2/OpenRCT2.git
implement ride_ratings_score_close_proximity_loops
This commit is contained in:
parent
d264a27195
commit
01d2d599ca
|
@ -40,7 +40,7 @@ enum {
|
||||||
PROXIMITY_WATER_TOUCH, // 0x0138B598
|
PROXIMITY_WATER_TOUCH, // 0x0138B598
|
||||||
PROXIMITY_WATER_LOW, // 0x0138B59A
|
PROXIMITY_WATER_LOW, // 0x0138B59A
|
||||||
PROXIMITY_WATER_HIGH, // 0x0138B59C
|
PROXIMITY_WATER_HIGH, // 0x0138B59C
|
||||||
PROXIMITY_SURFACE_TOUCH, // 0x0138B59E
|
PROXIMITY_SURFACE_NO_TOUCH, // 0x0138B59E
|
||||||
PROXIMITY_PATH_OVER, // 0x0138B5A0
|
PROXIMITY_PATH_OVER, // 0x0138B5A0
|
||||||
PROXIMITY_PATH_TOUCH_ABOVE, // 0x0138B5A2
|
PROXIMITY_PATH_TOUCH_ABOVE, // 0x0138B5A2
|
||||||
PROXIMITY_PATH_TOUCH_UNDER, // 0x0138B5A4
|
PROXIMITY_PATH_TOUCH_UNDER, // 0x0138B5A4
|
||||||
|
@ -55,9 +55,9 @@ enum {
|
||||||
PROXIMITY_SCENERY_SIDE_ABOVE, // 0x0138B5B6
|
PROXIMITY_SCENERY_SIDE_ABOVE, // 0x0138B5B6
|
||||||
PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE, // 0x0138B5B8
|
PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE, // 0x0138B5B8
|
||||||
PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE, // 0x0138B5BA
|
PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE, // 0x0138B5BA
|
||||||
PROXIMITY_138B5BC, // 0x0138B5BC
|
PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP, // 0x0138B5BC
|
||||||
PROXIMITY_138B5BE, // 0x0138B5BE
|
PROXIMITY_PATH_TROUGH_VERTICAL_LOOP, // 0x0138B5BE
|
||||||
PROXIMITY_138B5C0, // 0x0138B5C0
|
PROXIMITY_INTERSECTING_VERTICAL_LOOP, // 0x0138B5C0
|
||||||
PROXIMITY_THROUGH_VERTICAL_LOOP, // 0x0138B5C2
|
PROXIMITY_THROUGH_VERTICAL_LOOP, // 0x0138B5C2
|
||||||
PROXIMITY_PATH_SIDE_CLOSE, // 0x0138B5C4
|
PROXIMITY_PATH_SIDE_CLOSE, // 0x0138B5C4
|
||||||
PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE, // 0x0138B5C6
|
PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE, // 0x0138B5C6
|
||||||
|
@ -409,13 +409,58 @@ static void ride_ratings_score_close_proximity_in_direction(rct_map_element *inp
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ride_ratings_score_close_proximity_loops_helper(rct_map_element *inputMapElement, int x, int y)
|
||||||
|
{
|
||||||
|
rct_map_element *mapElement;
|
||||||
|
int zDiff, unk;
|
||||||
|
|
||||||
|
mapElement = map_get_first_element_at(x >> 5, y >> 5);
|
||||||
|
do {
|
||||||
|
switch (map_element_get_type(mapElement)) {
|
||||||
|
case MAP_ELEMENT_TYPE_PATH:
|
||||||
|
zDiff = (int)mapElement->base_height - (int)inputMapElement->base_height;
|
||||||
|
if (zDiff >= 0 && zDiff <= 16) {
|
||||||
|
proximity_score_increment(PROXIMITY_PATH_TROUGH_VERTICAL_LOOP);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MAP_ELEMENT_TYPE_TRACK:
|
||||||
|
unk = (mapElement->type ^ inputMapElement->type) & 1;
|
||||||
|
if (unk != 0) {
|
||||||
|
zDiff = (int)mapElement->base_height - (int)inputMapElement->base_height;
|
||||||
|
if (zDiff >= 0 && zDiff <= 16) {
|
||||||
|
proximity_score_increment(PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP);
|
||||||
|
if (
|
||||||
|
mapElement->properties.track.type == TRACK_ELEM_LEFT_VERTICAL_LOOP ||
|
||||||
|
mapElement->properties.track.type == TRACK_ELEM_RIGHT_VERTICAL_LOOP
|
||||||
|
) {
|
||||||
|
proximity_score_increment(PROXIMITY_INTERSECTING_VERTICAL_LOOP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (!map_element_is_last_for_tile(mapElement++));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x006B62DA
|
* rct2: 0x006B62DA
|
||||||
*/
|
*/
|
||||||
static void loc_6B62DA(rct_map_element *inputMapElement)
|
static void ride_ratings_score_close_proximity_loops(rct_map_element *inputMapElement)
|
||||||
{
|
{
|
||||||
RCT2_CALLPROC_X(0x006B6207, 0, 0, 0, 0, (int)inputMapElement, 0, 0);
|
int x, y, direction, trackType;
|
||||||
|
|
||||||
|
trackType = inputMapElement->properties.track.type;
|
||||||
|
if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) {
|
||||||
|
x = _rideRatingsProximityX;
|
||||||
|
y = _rideRatingsProximityY;
|
||||||
|
ride_ratings_score_close_proximity_loops_helper(inputMapElement, _rideRatingsProximityX, _rideRatingsProximityY);
|
||||||
|
|
||||||
|
direction = inputMapElement->type & MAP_ELEMENT_DIRECTION_MASK;
|
||||||
|
x = _rideRatingsProximityX + TileDirectionDelta[direction].x;
|
||||||
|
y = _rideRatingsProximityY + TileDirectionDelta[direction].y;
|
||||||
|
ride_ratings_score_close_proximity_loops_helper(inputMapElement, x, y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -440,7 +485,7 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement)
|
||||||
case MAP_ELEMENT_TYPE_SURFACE:
|
case MAP_ELEMENT_TYPE_SURFACE:
|
||||||
_rideRatingsProximityBaseHeight = mapElement->base_height;
|
_rideRatingsProximityBaseHeight = mapElement->base_height;
|
||||||
if (mapElement->base_height * 8 != _rideRatingsProximityZ) {
|
if (mapElement->base_height * 8 != _rideRatingsProximityZ) {
|
||||||
RCT2_GLOBAL(0x0138B59E, uint16)++;
|
proximity_score_increment(PROXIMITY_SURFACE_NO_TOUCH);
|
||||||
}
|
}
|
||||||
waterHeight = (mapElement->properties.surface.terrain & 0x1F);
|
waterHeight = (mapElement->properties.surface.terrain & 0x1F);
|
||||||
if (waterHeight != 0) {
|
if (waterHeight != 0) {
|
||||||
|
@ -553,7 +598,17 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement)
|
||||||
direction = inputMapElement->type & MAP_ELEMENT_DIRECTION_MASK;
|
direction = inputMapElement->type & MAP_ELEMENT_DIRECTION_MASK;
|
||||||
ride_ratings_score_close_proximity_in_direction(inputMapElement, (direction + 1) & 3);
|
ride_ratings_score_close_proximity_in_direction(inputMapElement, (direction + 1) & 3);
|
||||||
ride_ratings_score_close_proximity_in_direction(inputMapElement, (direction - 1) & 3);
|
ride_ratings_score_close_proximity_in_direction(inputMapElement, (direction - 1) & 3);
|
||||||
loc_6B62DA(inputMapElement);
|
ride_ratings_score_close_proximity_loops(inputMapElement);
|
||||||
|
|
||||||
|
switch (_rideRatingsProximityTrackType) {
|
||||||
|
case TRACK_ELEM_BRAKES:
|
||||||
|
RCT2_GLOBAL(0x0138B5CA, uint16)++;
|
||||||
|
break;
|
||||||
|
case 211:
|
||||||
|
case 212:
|
||||||
|
RCT2_GLOBAL(0x0138B5CC, uint16)++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -847,7 +902,7 @@ static uint32 ride_ratings_get_proximity_score()
|
||||||
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_TOUCH ] , 22, 0x0245D1);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_TOUCH ] , 22, 0x0245D1);
|
||||||
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_LOW ] , 10, 0x020000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_LOW ] , 10, 0x020000);
|
||||||
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_HIGH ] , 40, 0x00A000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_HIGH ] , 40, 0x00A000);
|
||||||
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_SURFACE_TOUCH ] , 70, 0x01B6DB);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_SURFACE_NO_TOUCH ] , 70, 0x01B6DB);
|
||||||
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_PATH_OVER ] + 8, 12, 0x064000);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_PATH_OVER ] + 8, 12, 0x064000);
|
||||||
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_PATH_TOUCH_ABOVE ] , 40 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_PATH_TOUCH_ABOVE ] , 40 );
|
||||||
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_PATH_TOUCH_UNDER ] , 45 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_PATH_TOUCH_UNDER ] , 45 );
|
||||||
|
@ -862,9 +917,9 @@ static uint32 ride_ratings_get_proximity_score()
|
||||||
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_SCENERY_SIDE_ABOVE ] , 35, 0x00DB6D);
|
result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_SCENERY_SIDE_ABOVE ] , 35, 0x00DB6D);
|
||||||
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE] , 55 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_FOREIGN_STATION_TOUCH_ABOVE] , 55 );
|
||||||
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE] , 25 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE] , 25 );
|
||||||
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5BC ] , 4, 6, 0x140000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP] , 4, 6, 0x140000);
|
||||||
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5BE ] , 4, 6, 0x0F0000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_PATH_TROUGH_VERTICAL_LOOP ] , 4, 6, 0x0F0000);
|
||||||
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_138B5C0 ] , 100 );
|
result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_INTERSECTING_VERTICAL_LOOP ] , 100 );
|
||||||
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_THROUGH_VERTICAL_LOOP ] , 4, 6, 0x0A0000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_THROUGH_VERTICAL_LOOP ] , 4, 6, 0x0A0000);
|
||||||
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_PATH_SIDE_CLOSE ] , 10, 20, 0x01C000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_PATH_SIDE_CLOSE ] , 10, 20, 0x01C000);
|
||||||
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE ] , 10, 20, 0x024000);
|
result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE ] , 10, 20, 0x024000);
|
||||||
|
|
Loading…
Reference in New Issue