diff --git a/src/ride/ride.h b/src/ride/ride.h index 0b993d4271..9c85974e66 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -200,9 +200,9 @@ typedef struct { uint8 drops; // 0x115 (??XX XXXX) uint8 pad_116; uint8 highest_drop_height; // 0x117 - uint32 var_118; - uint8 pad_11C[0x02]; - uint8 var_11E; + sint32 sheltered_length; // 0x118 + uint8 pad_11C[0x2]; + uint8 num_sheltered_sections; // 0x11E uint8 var_11F; sint16 var_120; sint16 var_122; diff --git a/src/ride/ride_ratings.c b/src/ride/ride_ratings.c index 3762a61d4b..7907654c97 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -781,11 +781,34 @@ static rating_tuple sub_65DDD1(rct_ride *ride) */ static rating_tuple sub_65E1C2(rct_ride *ride) { - int eax, ebx, ecx, edx, esi, edi, ebp; - edi = (int)ride; - RCT2_CALLFUNC_X(0x0065E1C2, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); + int sheltered_length_shifted = (ride->sheltered_length) >> 16; + uint32 eax = min(sheltered_length_shifted, 1000); + int excitement = (eax * 9175) >> 16; - rating_tuple rating = { ebx, ecx, ebp }; + eax = min(sheltered_length_shifted, 2000); + int intensity = (eax * 0x2666) >> 16; + + eax = min(sheltered_length_shifted, 1000); + int nausea = (eax * 0x4000) >> 16; + + /*eax = (ride->var_11C * 30340) >> 16;*/ + /*nausea += eax;*/ + + if (ride->num_sheltered_sections & 0x40) { + excitement += 20; + nausea += 15; + } + + if (ride->num_sheltered_sections & 0x20) { + excitement += 20; + nausea += 15; + } + + uint8 lowerval = ride->num_sheltered_sections & 0x1F; + lowerval = min(lowerval, 11); + excitement += (lowerval * 774516) >> 16; + + rating_tuple rating = { excitement, intensity, nausea }; return rating; }