From d7a5dedea43c6c507d341901a2dca6c5320c389c Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Sun, 12 Jul 2015 21:18:40 +0100 Subject: [PATCH] refactor ride ratings proximity --- src/ride/ride_ratings.c | 245 +++++++++++++++++++++------------------- 1 file changed, 131 insertions(+), 114 deletions(-) diff --git a/src/ride/ride_ratings.c b/src/ride/ride_ratings.c index b2f79e0f41..0af1b4a735 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -35,10 +35,47 @@ enum { 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); -#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 _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]; @@ -108,33 +145,10 @@ static void ride_ratings_update_state_0() */ static void ride_ratings_update_state_1() { - RCT2_GLOBAL(0x0138B594, uint16) = 0; - RCT2_GLOBAL(0x0138B596, uint16) = 0; - RCT2_GLOBAL(0x0138B598, uint16) = 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; + _rideRatingsProximityTotal = 0; + for (int i = 0; i < PROXIMITY_COUNT; i++) { + _proximityScores[i] = 0; + } RCT2_GLOBAL(0x0138B5CA, uint16) = 0; RCT2_GLOBAL(0x0138B5CC, uint16) = 0; _rideRatingsState = RIDE_RATINGS_STATE_2; @@ -172,10 +186,10 @@ static void loc_6B5BB2() y = (ride->station_starts[i] >> 8) * 32; z = ride->station_heights[i] * 8; - RCT2_GLOBAL(0x0138B584, uint16) = x; - RCT2_GLOBAL(0x0138B586, uint16) = y; - RCT2_GLOBAL(0x0138B588, uint16) = z; - RCT2_GLOBAL(0x0138B592, uint8) = 255; + _rideRatingsProximityX = x; + _rideRatingsProximityY = y; + _rideRatingsProximityZ = z; + _rideRatingsProximityTrackType = 255; RCT2_GLOBAL(0x0138B58A, uint16) = x; RCT2_GLOBAL(0x0138B58C, uint16) = y; RCT2_GLOBAL(0x0138B58E, uint16) = z; @@ -203,13 +217,12 @@ static void ride_ratings_update_state_2() return; } - x = RCT2_GLOBAL(0x0138B584, uint16) / 32; - y = RCT2_GLOBAL(0x0138B586, uint16) / 32; - z = RCT2_GLOBAL(0x0138B588, uint16) / 8; + x = _rideRatingsProximityX / 32; + y = _rideRatingsProximityY / 32; + z = _rideRatingsProximityZ / 8; + trackType = _rideRatingsProximityTrackType; mapElement = map_get_first_element_at(x, y); - trackType = RCT2_GLOBAL(0x0138B592, uint8); - do { if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK) continue; @@ -226,8 +239,8 @@ static void ride_ratings_update_state_2() ride_ratings_score_close_proximity(mapElement); - trackElement.x = RCT2_GLOBAL(0x0138B584, uint16); - trackElement.y = RCT2_GLOBAL(0x0138B586, uint16); + trackElement.x = _rideRatingsProximityX; + trackElement.y = _rideRatingsProximityY; trackElement.element = mapElement; if (!track_block_get_next(&trackElement, &nextTrackElement, NULL, NULL)) { _rideRatingsState = RIDE_RATINGS_STATE_4; @@ -242,10 +255,10 @@ static void ride_ratings_update_state_2() _rideRatingsState = RIDE_RATINGS_STATE_CALCULATE; return; } - RCT2_GLOBAL(0x0138B584, uint16) = x; - RCT2_GLOBAL(0x0138B586, uint16) = y; - RCT2_GLOBAL(0x0138B588, uint16) = z; - RCT2_GLOBAL(0x0138B592, uint8) = mapElement->properties.track.type; + _rideRatingsProximityX = x; + _rideRatingsProximityY = y; + _rideRatingsProximityZ = z; + _rideRatingsProximityTrackType = mapElement->properties.track.type; } } while (!map_element_is_last_for_tile(mapElement++)); @@ -301,13 +314,12 @@ static void ride_ratings_update_state_5() return; } - x = RCT2_GLOBAL(0x0138B584, uint16) / 32; - y = RCT2_GLOBAL(0x0138B586, uint16) / 32; - z = RCT2_GLOBAL(0x0138B588, uint16) / 8; + x = _rideRatingsProximityX / 32; + y = _rideRatingsProximityY / 32; + z = _rideRatingsProximityZ / 8; + trackType = _rideRatingsProximityTrackType; mapElement = map_get_first_element_at(x, y); - trackType = RCT2_GLOBAL(0x0138B592, uint8); - do { if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK) continue; @@ -317,8 +329,8 @@ static void ride_ratings_update_state_5() if (trackType == 255 || trackType == mapElement->properties.track.type) { ride_ratings_score_close_proximity(mapElement); - x = RCT2_GLOBAL(0x0138B584, uint16); - y = RCT2_GLOBAL(0x0138B586, uint16); + x = _rideRatingsProximityX; + y = _rideRatingsProximityY; if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) { _rideRatingsState = RIDE_RATINGS_STATE_CALCULATE; return; @@ -330,16 +342,21 @@ static void ride_ratings_update_state_5() _rideRatingsState = RIDE_RATINGS_STATE_CALCULATE; return; } - RCT2_GLOBAL(0x0138B584, uint16) = x; - RCT2_GLOBAL(0x0138B586, uint16) = y; - RCT2_GLOBAL(0x0138B588, uint16) = z; - RCT2_GLOBAL(0x0138B592, uint8) = mapElement->properties.track.type; + _rideRatingsProximityX = x; + _rideRatingsProximityY = y; + _rideRatingsProximityZ = z; + _rideRatingsProximityTrackType = mapElement->properties.track.type; } } while (!map_element_is_last_for_tile(mapElement++)); _rideRatingsState = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; } +static void proximity_score_increment(int type) +{ + _proximityScores[type]++; +} + /** * * rct2: 0x006B6207 @@ -371,32 +388,32 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement) if (RCT2_GLOBAL(0x0138B5CE, uint16) & 1) return; - RCT2_GLOBAL(0x00138B594, uint16)++; - x = RCT2_GLOBAL(0x00138B584, uint16); - y = RCT2_GLOBAL(0x00138B586, uint16); + _rideRatingsProximityTotal++; + x = _rideRatingsProximityX; + y = _rideRatingsProximityY; mapElement = map_get_first_element_at(x >> 5, y >> 5); do { switch (map_element_get_type(mapElement)) { case MAP_ELEMENT_TYPE_SURFACE: 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)++; } waterHeight = (mapElement->properties.surface.terrain & 0x1F); if (waterHeight != 0) { z = waterHeight * 16; - if (z <= RCT2_GLOBAL(0x0138B588, uint16)) { - RCT2_GLOBAL(0x0138B596, uint16)++; - if (z == RCT2_GLOBAL(0x0138B588, uint16)) { - RCT2_GLOBAL(0x0138B598, uint16)++; + if (z <= _rideRatingsProximityZ) { + proximity_score_increment(PROXIMITY_WATER_OVER); + if (z == _rideRatingsProximityZ) { + proximity_score_increment(PROXIMITY_WATER_TOUCH); } z += 16; - if (z == RCT2_GLOBAL(0x0138B588, uint16)) { - RCT2_GLOBAL(0x0138B59A, uint16)++; + if (z == _rideRatingsProximityZ) { + proximity_score_increment(PROXIMITY_WATER_LOW); } z += 112; - if (z <= RCT2_GLOBAL(0x0138B588, uint16)) { - RCT2_GLOBAL(0x0138B59C, uint16)++; + if (z <= _rideRatingsProximityZ) { + 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: if (inputMapElement->properties.path.type & 0xF0) { if (mapElement->clearance_height == inputMapElement->base_height) { - RCT2_GLOBAL(0x0138B5A6, uint16)++; + proximity_score_increment(PROXIMITY_138B5A6); } if (mapElement->base_height == inputMapElement->clearance_height) { - RCT2_GLOBAL(0x0138B5A8, uint16)++; + proximity_score_increment(PROXIMITY_138B5A8); } } else { if (mapElement->clearance_height <= inputMapElement->base_height) { - RCT2_GLOBAL(0x0138B5A0, uint16)++; + proximity_score_increment(PROXIMITY_PATH_OVER); } 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) { - RCT2_GLOBAL(0x0138B5A4, uint16)++; + proximity_score_increment(PROXIMITY_PATH_TOUCH_UNDER); } } break; @@ -427,26 +444,26 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement) sequence = mapElement->properties.track.sequence & 0x0F; if (sequence == 3 || sequence == 6) { 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) { - RCT2_GLOBAL(0x0138B5AE, uint16)++; + proximity_score_increment(PROXIMITY_OWN_TRACK_ABOVE_OR_BELOW); 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 + 10 >= inputMapElement->base_height) { - RCT2_GLOBAL(0x0138B5B2, uint16)++; + proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE); } } 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 + 10 >= mapElement->base_height) { - RCT2_GLOBAL(0x0138B5B2, uint16)++; + proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE); } } } else { @@ -457,31 +474,31 @@ static void ride_ratings_score_close_proximity(rct_map_element *inputMapElement) trackType == TRACK_ELEM_BEGIN_STATION ); if (mapElement->clearance_height == inputMapElement->base_height) { - RCT2_GLOBAL(0x0138B5AA, uint16)++; + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE); 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 + 10 >= inputMapElement->base_height) { - RCT2_GLOBAL(0x0138B5AC, uint16)++; + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE); if (isStation) { - RCT2_GLOBAL(0x0138B5BA, uint16)++; + proximity_score_increment(PROXIMITY_FOREIGN_STATION_CLOSE_ABOVE); } } } if (inputMapElement->clearance_height == mapElement->base_height) { - RCT2_GLOBAL(0x0138B5AA, uint16)++; + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE); 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 + 10 >= mapElement->base_height) { - RCT2_GLOBAL(0x0138B5AC, uint16)++; + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE); 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; } -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; } -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; if (result != 0) result += additionIfNotZero; 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; } @@ -783,32 +800,32 @@ static uint32 ride_ratings_get_proximity_score_helper_3(uint16 x, uint16 resultI static uint32 ride_ratings_get_proximity_score() { uint32 result = 0; - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B596, uint16) , 60, 0x00AAAA); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B598, uint16) , 22, 0x0245D1); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B59A, uint16) , 10, 0x020000); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B59C, uint16) , 40, 0x00A000); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B59E, uint16) , 70, 0x01B6DB); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5A0, uint16) + 8, 12, 0x064000); - result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5A2, uint16) , 40 ); - result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5A4, uint16) , 45 ); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5A6, uint16) , 10, 20, 0x03C000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5A6, uint16) , 10, 20, 0x044000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5AA, uint16) , 10, 15, 0x035555); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5AC, uint16) , 5, 0x060000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5AE, uint16) , 10, 15, 0x02AAAA); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5B0, uint16) , 10, 15, 0x04AAAA); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5B2, uint16) , 5, 0x090000); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5B4, uint16) , 35, 0x016DB6); - result += ride_ratings_get_proximity_score_helper_1(RCT2_GLOBAL(0x0138B5B6, uint16) , 35, 0x00DB6D); - result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5B8, uint16) , 55 ); - result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5BA, uint16) , 25 ); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5BC, uint16) , 4, 6, 0x140000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5BE, uint16) , 4, 6, 0x0F0000); - result += ride_ratings_get_proximity_score_helper_3(RCT2_GLOBAL(0x0138B5C0, uint16) , 100 ); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C2, uint16) , 4, 6, 0x0A0000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C4, uint16) , 10, 20, 0x01C000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C6, uint16) , 10, 20, 0x024000); - result += ride_ratings_get_proximity_score_helper_2(RCT2_GLOBAL(0x0138B5C8, uint16) , 10, 20, 0x028000); + result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_WATER_OVER ] , 60, 0x00AAAA); + 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_HIGH ] , 40, 0x00A000); + result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_SURFACE_TOUCH ] , 70, 0x01B6DB); + 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_UNDER ] , 45 ); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5A6 ] , 10, 20, 0x03C000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5A8 ] , 10, 20, 0x044000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE ] , 10, 15, 0x035555); + result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE ] , 5, 0x060000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_OWN_TRACK_ABOVE_OR_BELOW ] , 10, 15, 0x02AAAA); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_OWN_TRACK_TOUCH_ABOVE ] , 10, 15, 0x04AAAA); + result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_OWN_TRACK_CLOSE_ABOVE ] , 5, 0x090000); + result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_138B5B4 ] , 35, 0x016DB6); + result += get_proximity_score_helper_1(_proximityScores[PROXIMITY_138B5B6 ] , 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_CLOSE_ABOVE] , 25 ); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5BC ] , 4, 6, 0x140000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5BE ] , 4, 6, 0x0F0000); + result += get_proximity_score_helper_3(_proximityScores[PROXIMITY_138B5C0 ] , 100 ); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_THROUGH_VERTICAL_LOOP ] , 4, 6, 0x0A0000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5C4 ] , 10, 20, 0x01C000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5C6 ] , 10, 20, 0x024000); + result += get_proximity_score_helper_2(_proximityScores[PROXIMITY_138B5C8 ] , 10, 20, 0x028000); return result; }