From 3862a8566672513766be4ccf5130551fff14abbd Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Sun, 22 Mar 2015 08:01:01 -0700 Subject: [PATCH 1/2] Name reliability variables - Rename var_146 to fair_value (it is not reliability) - Add a helper method get_age_penalty which computes the age penalty for a ride. - Adds a constant for a ride's initial reliability - Names a subroutine --- src/management/finance.c | 4 +- src/ride/ride.c | 66 ++++++++++---------- src/ride/ride.h | 16 +++-- src/ride/ride_ratings.c | 120 +++++++++++++++++++------------------ src/windows/new_campaign.c | 8 +-- src/windows/ride.c | 2 +- src/windows/ride_list.c | 4 +- src/world/park.c | 12 ++-- 8 files changed, 121 insertions(+), 111 deletions(-) diff --git a/src/management/finance.c b/src/management/finance.c index 81a382e152..c5a39507a7 100644 --- a/src/management/finance.c +++ b/src/management/finance.c @@ -127,7 +127,7 @@ void finance_pay_ride_upkeep() FOR_ALL_RIDES(i, ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED)) { ride->build_date = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16); - ride->var_196 = 25855; // durability? + ride->reliability = RIDE_INITIAL_RELIABILITY; } if (ride->status != RIDE_STATUS_CLOSED && !(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) { @@ -297,4 +297,4 @@ void game_command_set_current_loan(int* eax, int* ebx, int* ecx, int* edx, int* } *ebx = 0; -} \ No newline at end of file +} diff --git a/src/ride/ride.c b/src/ride/ride.c index 7ce514a14c..54bd711b70 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -1309,13 +1309,35 @@ static void ride_inspection_update(rct_ride *ride) } } +static int get_age_penalty(rct_ride *ride) { + int years; + years = date_get_year(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) - ride->build_date); + switch (years) { + case 0: + return 0; + case 1: + return ride->unreliability_factor / 8; + case 2: + return ride->unreliability_factor / 4; + case 3: + case 4: + return ride->unreliability_factor / 2; + case 5: + case 6: + case 7: + return 0; + default: + return ride->unreliability_factor * 2; + } +} + /** * * rct2: 0x006AC622 */ static void ride_breakdown_update(int rideIndex) { - int agePenalty, years, ax, breakdownReason; + int breakdownReason, unreliabilityAccumulator; rct_ride *ride = GET_RIDE(rideIndex); if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 255) @@ -1354,38 +1376,17 @@ static void ride_breakdown_update(int rideIndex) return; // Calculate breakdown probability? - ax = ride->var_198; - agePenalty; - years = date_get_year(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) - ride->build_date); - switch (years) { - case 0: - agePenalty = 0; - break; - case 1: - agePenalty = ax >> 3; - break; - case 2: - agePenalty = ax >> 2; - break; - case 3: - case 4: - agePenalty = ax >> 1; - break; - case 5: - case 6: - case 7: - agePenalty = ax >> 0; - break; - default: - agePenalty = ax << 1; - break; - } - ax += agePenalty; - ride->var_196 = max(0, ride->var_196 - ax); + unreliabilityAccumulator = ride->unreliability_factor + get_age_penalty(ride); + ride->reliability = max(0, ride->reliability - unreliabilityAccumulator); ride->var_14D |= 32; - // Random probability of a breakdown - if (ride->var_196 == 0 || (int)(scenario_rand() & 0x2FFFFF) <= 25856 - ride->var_196) { + // Random probability of a breakdown. Roughly this is 1 in + // + // (25000 - reliability) / 3 000 000 + // + // a 0.8% chance, less the breakdown factor which accumulates as the game + // continues. + if (ride->reliability == 0 || (int)(scenario_rand() & 0x2FFFFF) <= 1 + RIDE_INITIAL_RELIABILITY - ride->reliability) { breakdownReason = ride_get_new_breakdown_problem(ride); if (breakdownReason != -1) ride_prepare_breakdown(rideIndex, breakdownReason); @@ -1443,9 +1444,8 @@ static int ride_get_new_breakdown_problem(rct_ride *ride) if (ride->num_vehicles != 1) return -1; - // Again the probability is lower, this time if young or two other unknown reasons... monthsOld = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint8) - ride->build_date; - if (monthsOld < 16 || ride->var_196 > 12800 || ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS) + if (monthsOld < 16 || ride->reliability > (50 << 8) || ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS) return -1; return BREAKDOWN_BRAKES_FAILURE; diff --git a/src/ride/ride.h b/src/ride/ride.h index f0e270d1ac..db769fee86 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -218,7 +218,8 @@ typedef struct { ride_rating nausea; // 0x144 }; }; - uint16 reliability; // 0x146 + // Max price customers will pay before they think the ride is bad value + uint16 fair_value; // 0x146 uint16 var_148; uint8 satisfaction; // 0x14A uint8 satisfaction_time_out; // 0x14B @@ -253,9 +254,13 @@ typedef struct { uint8 broken_car; // 0x192 uint8 breakdown_reason; // 0x193 money16 price_secondary; // 0x194 - uint16 var_196; - // used in computing excitement, nausea, etc - uint8 var_198; + // Starts at RIDE_INITIAL_RELIABILITY and decreases from there. Right shift + // this number by 8 to get a reliability percentage 0-100 + uint16 reliability; + // Small constant used to increase the unreliability as the game continues, + // making breakdowns more and more likely. + uint8 unreliability_factor; + // Down time uint8 var_199; uint8 inspection_interval; // 0x19A uint8 last_inspection; // 0x19B @@ -661,7 +666,8 @@ enum { #define MAX_RIDES 255 #define MAX_RIDE_MEASUREMENTS 8 -#define RIDE_RELIABILITY_UNDEFINED 0xFFFF +#define RIDE_FAIR_VALUE_UNDEFINED 0xFFFF +#define RIDE_INITIAL_RELIABILITY ((100 << 8) - 1) #define STATION_DEPART_FLAG (1 << 7) #define STATION_DEPART_MASK (~STATION_DEPART_FLAG) diff --git a/src/ride/ride_ratings.c b/src/ride/ride_ratings.c index 4c280dc2eb..1e5c48cc19 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -49,7 +49,7 @@ static void ride_ratings_update_state_4(); static void ride_ratings_update_state_5(); static void loc_6B5BB2(); static void ride_ratings_calculate(rct_ride *ride); -static void ride_ratings_reliability_calculate(rct_ride *ride); +static void ride_ratings_fair_value_calculate(rct_ride *ride); static int sub_6C6402(rct_map_element *mapElement, int *x, int *y, int *z) { @@ -283,7 +283,7 @@ static void ride_ratings_update_state_3() ride_ratings_calculate(ride); RCT2_CALLPROC_X(0x00655F64, 0, 0, 0, 0, 0, (int)ride, 0); - ride_ratings_reliability_calculate(ride); + ride_ratings_fair_value_calculate(ride); window_invalidate_by_number(WC_RIDE, _rideRatingsCurrentRide); _rideRatingsState = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; @@ -372,7 +372,7 @@ static void ride_ratings_calculate(rct_ride *ride) } } -static void ride_ratings_reliability_calculate(rct_ride *ride) +static void ride_ratings_fair_value_calculate(rct_ride *ride) { rct_ride *ride2; int i, otherRidesOfSameType; @@ -380,7 +380,7 @@ static void ride_ratings_reliability_calculate(rct_ride *ride) if (ride->excitement == (ride_rating)0xFFFF) return; - int reliability = + int fair_value = (((ride->excitement * RCT2_GLOBAL(0x0097CD1E + (ride->type * 6), sint16)) * 32) >> 15) + (((ride->intensity * RCT2_GLOBAL(0x0097CD20 + (ride->type * 6), sint16)) * 32) >> 15) + (((ride->nausea * RCT2_GLOBAL(0x0097CD22 + (ride->type * 6), sint16)) * 32) >> 15); @@ -389,19 +389,19 @@ static void ride_ratings_reliability_calculate(rct_ride *ride) // New ride reward if (monthsOld <= 12) { - reliability += 10; + fair_value += 10; if (monthsOld <= 4) - reliability += 20; + fair_value += 20; } // Old ride penalty - if (monthsOld >= 40) reliability -= reliability / 4; - if (monthsOld >= 64) reliability -= reliability / 4; + if (monthsOld >= 40) fair_value -= fair_value / 4; + if (monthsOld >= 64) fair_value -= fair_value / 4; if (monthsOld < 200) { - if (monthsOld >= 88) reliability -= reliability / 4; - if (monthsOld >= 104) reliability -= reliability / 4; - if (monthsOld >= 120) reliability -= reliability / 2; - if (monthsOld >= 128) reliability -= reliability / 2; + if (monthsOld >= 88) fair_value -= fair_value / 4; + if (monthsOld >= 104) fair_value -= fair_value / 4; + if (monthsOld >= 120) fair_value -= fair_value / 2; + if (monthsOld >= 128) fair_value -= fair_value / 2; } // Other ride of same type penalty @@ -411,9 +411,9 @@ static void ride_ratings_reliability_calculate(rct_ride *ride) otherRidesOfSameType++; } if (otherRidesOfSameType > 1) - reliability -= reliability / 4; + fair_value -= fair_value / 4; - ride->reliability = max(0, reliability); + ride->fair_value = max(0, fair_value); } /** @@ -564,12 +564,16 @@ static void ride_ratings_apply_intensity_penalty(rating_tuple *ratings) } /** - * * rct2: 0x00655FD6 */ -static void sub_655FD6(rct_ride *ride) +static void set_unreliability_factor(rct_ride *ride) { - ride->var_198 += (ride->lift_hill_speed - RCT2_ADDRESS(0x0097D7C9, uint8)[ride->type * 4]) * 2; + // The higher the number, the lower the breakdown + // possibility. Range is [3, 7]. values are here: + // https://gist.github.com/kevinburke/123977c4884ccadbec70. Consider + // inlining this per ride + uint8 lift_speed_adjustment = RCT2_ADDRESS(0x0097D7C9, uint8)[ride->type * 4]; + ride->unreliability_factor += (ride->lift_hill_speed - lift_speed_adjustment) * 2; } /** @@ -752,13 +756,13 @@ static void ride_ratings_calculate_mine_train_coaster(rct_ride *ride) if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; - ride->var_198 = 16; - sub_655FD6(ride); + ride->unreliability_factor = 16; + set_unreliability_factor(ride); // Base ratings - ratings.excitement = RIDE_RATING(2,90); - ratings.intensity = RIDE_RATING(2,30); - ratings.nausea = RIDE_RATING(2,10); + ratings.excitement = RIDE_RATING(2,90); + ratings.intensity = RIDE_RATING(2,30); + ratings.nausea = RIDE_RATING(2,10); // Apply length of ride factor totalLength = (ride->length[0] + ride->length[1] + ride->length[2] + ride->length[3]) >> 16; @@ -868,8 +872,8 @@ static void ride_ratings_calculate_maze(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 8; - sub_655FD6(ride); + ride->unreliability_factor = 8; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,30); @@ -901,8 +905,8 @@ static void ride_ratings_calculate_spiral_slide(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 8; - sub_655FD6(ride); + ride->unreliability_factor = 8; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,50); @@ -936,8 +940,8 @@ static void ride_ratings_calculate_pirate_ship(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 10; - sub_655FD6(ride); + ride->unreliability_factor = 10; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,50); @@ -968,8 +972,8 @@ static void ride_ratings_calculate_inverter_ship(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 16; - sub_655FD6(ride); + ride->unreliability_factor = 16; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(2,50); @@ -1018,8 +1022,8 @@ static void ride_ratings_calculate_merry_go_round(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 16; - sub_655FD6(ride); + ride->unreliability_factor = 16; + set_unreliability_factor(ride); int unk = ride->var_0D0 * 5; ratings.excitement = unk + RIDE_RATING(0,60) + ((ride_ratings_get_scenery_score(ride) * 19521) >> 16); @@ -1056,8 +1060,8 @@ static void ride_ratings_calculate_ferris_wheel(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 16; - sub_655FD6(ride); + ride->unreliability_factor = 16; + set_unreliability_factor(ride); int unk = ride->var_0D0 * 25; ratings.excitement = unk + RIDE_RATING(0,60) + ((ride_ratings_get_scenery_score(ride) * 41831) >> 16); @@ -1082,8 +1086,8 @@ static void ride_ratings_calculate_motion_simulator(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 21; - sub_655FD6(ride); + ride->unreliability_factor = 21; + set_unreliability_factor(ride); // Base ratings if (ride->mode == RIDE_MODE_FILM_THRILL_RIDERS) { @@ -1114,8 +1118,8 @@ static void ride_ratings_calculate_3d_cinema(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 21; - sub_655FD6(ride); + ride->unreliability_factor = 21; + set_unreliability_factor(ride); // Base ratings switch (ride->mode) { @@ -1155,8 +1159,8 @@ static void ride_ratings_calculate_top_spin(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 19; - sub_655FD6(ride); + ride->unreliability_factor = 19; + set_unreliability_factor(ride); // Base ratings switch (ride->mode) { @@ -1198,8 +1202,8 @@ static void ride_ratings_calculate_space_rings(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 7; - sub_655FD6(ride); + ride->unreliability_factor = 7; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,50); @@ -1228,8 +1232,8 @@ static void ride_ratings_calculate_elevator(rct_ride *ride) if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; - ride->var_198 = 15; - sub_655FD6(ride); + ride->unreliability_factor = 15; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,11); @@ -1270,8 +1274,8 @@ static void ride_ratings_calculate_twist(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 16; - sub_655FD6(ride); + ride->unreliability_factor = 16; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,13); @@ -1302,8 +1306,8 @@ static void ride_ratings_calculate_haunted_house(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 8; - sub_655FD6(ride); + ride->unreliability_factor = 8; + set_unreliability_factor(ride); ratings.excitement = RIDE_RATING(3,41); ratings.intensity = RIDE_RATING(1,53); @@ -1330,8 +1334,8 @@ static void ride_ratings_calculate_mini_golf(rct_ride *ride) if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; - ride->var_198 = 0; - sub_655FD6(ride); + ride->unreliability_factor = 0; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(1,50); @@ -1391,8 +1395,8 @@ static void ride_ratings_calculate_circus_show(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 9; - sub_655FD6(ride); + ride->unreliability_factor = 9; + set_unreliability_factor(ride); ratings.excitement = RIDE_RATING(2,10); ratings.intensity = RIDE_RATING(0,30); @@ -1416,8 +1420,8 @@ static void ride_ratings_calculate_crooked_house(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 5; - sub_655FD6(ride); + ride->unreliability_factor = 5; + set_unreliability_factor(ride); ratings.excitement = RIDE_RATING(2,15); ratings.intensity = RIDE_RATING(0,62); @@ -1441,8 +1445,8 @@ static void ride_ratings_calculate_magic_carpet(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 16; - sub_655FD6(ride); + ride->unreliability_factor = 16; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(2,45); @@ -1473,8 +1477,8 @@ static void ride_ratings_calculate_enterprise(rct_ride *ride) ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; - ride->var_198 = 22; - sub_655FD6(ride); + ride->unreliability_factor = 22; + set_unreliability_factor(ride); // Base ratings ratings.excitement = RIDE_RATING(3,60); diff --git a/src/windows/new_campaign.c b/src/windows/new_campaign.c index ec2900077c..69a9e7e873 100644 --- a/src/windows/new_campaign.c +++ b/src/windows/new_campaign.c @@ -100,13 +100,13 @@ static void* window_new_campaign_events[] = { uint8 window_new_campaign_rides[MAX_RIDES]; uint8 window_new_campaign_shop_items[64]; -int ride_reliability_compare(const void *a, const void *b) +int ride_fair_value_compare(const void *a, const void *b) { rct_ride *rideA, *rideB; rideA = GET_RIDE(*((uint8*)a)); rideB = GET_RIDE(*((uint8*)b)); - return rideB->reliability - rideA->reliability; + return rideB->fair_value - rideA->fair_value; } int ride_name_compare(const void *a, const void *b) @@ -179,7 +179,7 @@ void window_new_campaign_open(sint16 campaignType) // Take top 40 most reliable rides if (numApplicableRides > 40) { - qsort(window_new_campaign_rides, countof(window_new_campaign_rides), sizeof(uint8), ride_reliability_compare); + qsort(window_new_campaign_rides, countof(window_new_campaign_rides), sizeof(uint8), ride_fair_value_compare); numApplicableRides = 40; } @@ -413,4 +413,4 @@ static void window_new_campaign_paint() // Total price money32 totalPrice = AdvertisingCampaignPricePerWeek[w->campaign.campaign_type] * w->campaign.no_weeks; gfx_draw_string_left(dpi, STR_MARKETING_TOTAL_COST, &totalPrice, 0, x, y); -} \ No newline at end of file +} diff --git a/src/windows/ride.c b/src/windows/ride.c index a54900b372..658a0baac2 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -3434,7 +3434,7 @@ static void window_ride_maintenance_paint() x = w->x + widget->left + 4; y = w->y + widget->top + 4; - reliability = ride->var_196 >> 8; + reliability = ride->reliability >> 8; gfx_draw_string_left(dpi, STR_RELIABILITY_LABEL_1757, &reliability, 0, x, y); window_ride_maintenance_draw_bar(w, dpi, x + 103, y, max(10, reliability), 14); y += 11; diff --git a/src/windows/ride_list.c b/src/windows/ride_list.c index 17ea8b21ce..ff0d13f367 100644 --- a/src/windows/ride_list.c +++ b/src/windows/ride_list.c @@ -507,7 +507,7 @@ static void window_ride_list_scrollpaint() case INFORMATION_TYPE_RELIABILITY: // edx = RCT2_GLOBAL(0x009ACFA4 + (ride->var_001 * 4), uint32); - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->var_196 >> 8; + RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->reliability >> 8; formatSecondary = STR_RELIABILITY_LABEL; break; case INFORMATION_TYPE_DOWN_TIME: @@ -661,7 +661,7 @@ static void window_ride_list_refresh_list(rct_window *w) case INFORMATION_TYPE_RELIABILITY: while (--current_list_position >= 0) { otherRide = &g_ride_list[w->list_item_positions[current_list_position]]; - if (ride->var_196 >> 8 <= otherRide->var_196 >> 8) + if (ride->reliability >> 8 <= otherRide->reliability >> 8) break; window_bubble_list_item(w, current_list_position); diff --git a/src/world/park.c b/src/world/park.c index ebd476334f..2d4d1e4c3d 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -276,11 +276,11 @@ money32 calculate_ride_value(rct_ride *ride) { if (ride->type == RIDE_TYPE_NULL) return 0; - if (ride->reliability == 0xFFFF) + if (ride->fair_value == RIDE_FAIR_VALUE_UNDEFINED) return 0; - // Reliability * (...) - return (ride->reliability * 10) * ( + // Fair value * (...) + return (ride->fair_value * 10) * ( ride->var_124 + ride->var_126 + ride->var_128 + ride->var_12A + ride->var_12C + ride->var_12E + ride->age + ride->running_cost + ride->var_134 + ride->var_136 + @@ -369,8 +369,8 @@ static int park_calculate_guest_generation_probability() suggestedMaxGuests += RCT2_GLOBAL(0x0097D21E + (ride->type * 8), uint8); // Add ride value - if (ride->reliability != RIDE_RELIABILITY_UNDEFINED) { - int rideValue = ride->reliability - ride->price; + if (ride->fair_value != RIDE_FAIR_VALUE_UNDEFINED) { + int rideValue = ride->fair_value - ride->price; if (rideValue > 0) totalRideValue += rideValue * 2; } @@ -802,4 +802,4 @@ void game_command_set_park_name(int *eax, int *ebx, int *ecx, int *edx, int *esi } *ebx = 0; -} \ No newline at end of file +} From 5fc72d354d4d26f88fb88d269d4f6020d15b000c Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Sun, 22 Mar 2015 08:38:42 -0700 Subject: [PATCH 2/2] Rename fair_value to value --- src/ride/ride.h | 5 ++--- src/ride/ride_ratings.c | 28 ++++++++++++++-------------- src/windows/new_campaign.c | 6 +++--- src/world/park.c | 8 ++++---- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/ride/ride.h b/src/ride/ride.h index db769fee86..767030ea92 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -218,8 +218,7 @@ typedef struct { ride_rating nausea; // 0x144 }; }; - // Max price customers will pay before they think the ride is bad value - uint16 fair_value; // 0x146 + uint16 value; // 0x146 uint16 var_148; uint8 satisfaction; // 0x14A uint8 satisfaction_time_out; // 0x14B @@ -666,7 +665,7 @@ enum { #define MAX_RIDES 255 #define MAX_RIDE_MEASUREMENTS 8 -#define RIDE_FAIR_VALUE_UNDEFINED 0xFFFF +#define RIDE_VALUE_UNDEFINED 0xFFFF #define RIDE_INITIAL_RELIABILITY ((100 << 8) - 1) #define STATION_DEPART_FLAG (1 << 7) diff --git a/src/ride/ride_ratings.c b/src/ride/ride_ratings.c index 1e5c48cc19..57dec9c9e9 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -49,7 +49,7 @@ static void ride_ratings_update_state_4(); static void ride_ratings_update_state_5(); static void loc_6B5BB2(); static void ride_ratings_calculate(rct_ride *ride); -static void ride_ratings_fair_value_calculate(rct_ride *ride); +static void ride_ratings_calculate_value(rct_ride *ride); static int sub_6C6402(rct_map_element *mapElement, int *x, int *y, int *z) { @@ -283,7 +283,7 @@ static void ride_ratings_update_state_3() ride_ratings_calculate(ride); RCT2_CALLPROC_X(0x00655F64, 0, 0, 0, 0, 0, (int)ride, 0); - ride_ratings_fair_value_calculate(ride); + ride_ratings_calculate_value(ride); window_invalidate_by_number(WC_RIDE, _rideRatingsCurrentRide); _rideRatingsState = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; @@ -372,7 +372,7 @@ static void ride_ratings_calculate(rct_ride *ride) } } -static void ride_ratings_fair_value_calculate(rct_ride *ride) +static void ride_ratings_calculate_value(rct_ride *ride) { rct_ride *ride2; int i, otherRidesOfSameType; @@ -380,7 +380,7 @@ static void ride_ratings_fair_value_calculate(rct_ride *ride) if (ride->excitement == (ride_rating)0xFFFF) return; - int fair_value = + int value = (((ride->excitement * RCT2_GLOBAL(0x0097CD1E + (ride->type * 6), sint16)) * 32) >> 15) + (((ride->intensity * RCT2_GLOBAL(0x0097CD20 + (ride->type * 6), sint16)) * 32) >> 15) + (((ride->nausea * RCT2_GLOBAL(0x0097CD22 + (ride->type * 6), sint16)) * 32) >> 15); @@ -389,19 +389,19 @@ static void ride_ratings_fair_value_calculate(rct_ride *ride) // New ride reward if (monthsOld <= 12) { - fair_value += 10; + value += 10; if (monthsOld <= 4) - fair_value += 20; + value += 20; } // Old ride penalty - if (monthsOld >= 40) fair_value -= fair_value / 4; - if (monthsOld >= 64) fair_value -= fair_value / 4; + if (monthsOld >= 40) value -= value / 4; + if (monthsOld >= 64) value -= value / 4; if (monthsOld < 200) { - if (monthsOld >= 88) fair_value -= fair_value / 4; - if (monthsOld >= 104) fair_value -= fair_value / 4; - if (monthsOld >= 120) fair_value -= fair_value / 2; - if (monthsOld >= 128) fair_value -= fair_value / 2; + if (monthsOld >= 88) value -= value / 4; + if (monthsOld >= 104) value -= value / 4; + if (monthsOld >= 120) value -= value / 2; + if (monthsOld >= 128) value -= value / 2; } // Other ride of same type penalty @@ -411,9 +411,9 @@ static void ride_ratings_fair_value_calculate(rct_ride *ride) otherRidesOfSameType++; } if (otherRidesOfSameType > 1) - fair_value -= fair_value / 4; + value -= value / 4; - ride->fair_value = max(0, fair_value); + ride->value = max(0, value); } /** diff --git a/src/windows/new_campaign.c b/src/windows/new_campaign.c index 69a9e7e873..31e6a07263 100644 --- a/src/windows/new_campaign.c +++ b/src/windows/new_campaign.c @@ -100,13 +100,13 @@ static void* window_new_campaign_events[] = { uint8 window_new_campaign_rides[MAX_RIDES]; uint8 window_new_campaign_shop_items[64]; -int ride_fair_value_compare(const void *a, const void *b) +int ride_value_compare(const void *a, const void *b) { rct_ride *rideA, *rideB; rideA = GET_RIDE(*((uint8*)a)); rideB = GET_RIDE(*((uint8*)b)); - return rideB->fair_value - rideA->fair_value; + return rideB->value - rideA->value; } int ride_name_compare(const void *a, const void *b) @@ -179,7 +179,7 @@ void window_new_campaign_open(sint16 campaignType) // Take top 40 most reliable rides if (numApplicableRides > 40) { - qsort(window_new_campaign_rides, countof(window_new_campaign_rides), sizeof(uint8), ride_fair_value_compare); + qsort(window_new_campaign_rides, countof(window_new_campaign_rides), sizeof(uint8), ride_value_compare); numApplicableRides = 40; } diff --git a/src/world/park.c b/src/world/park.c index 2d4d1e4c3d..f2f0344b56 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -276,11 +276,11 @@ money32 calculate_ride_value(rct_ride *ride) { if (ride->type == RIDE_TYPE_NULL) return 0; - if (ride->fair_value == RIDE_FAIR_VALUE_UNDEFINED) + if (ride->value == RIDE_VALUE_UNDEFINED) return 0; // Fair value * (...) - return (ride->fair_value * 10) * ( + return (ride->value * 10) * ( ride->var_124 + ride->var_126 + ride->var_128 + ride->var_12A + ride->var_12C + ride->var_12E + ride->age + ride->running_cost + ride->var_134 + ride->var_136 + @@ -369,8 +369,8 @@ static int park_calculate_guest_generation_probability() suggestedMaxGuests += RCT2_GLOBAL(0x0097D21E + (ride->type * 8), uint8); // Add ride value - if (ride->fair_value != RIDE_FAIR_VALUE_UNDEFINED) { - int rideValue = ride->fair_value - ride->price; + if (ride->value != RIDE_VALUE_UNDEFINED) { + int rideValue = ride->value - ride->price; if (rideValue > 0) totalRideValue += rideValue * 2; }