diff --git a/src/ride/ride.c b/src/ride/ride.c index 9e6e2bfe76..e83714b864 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -3592,8 +3592,8 @@ bool ride_type_has_flag(int rideType, int flag) } /* - * The next three functions are helpers to access ride data at the offset 10E. - * We believe it stores three distinct values in the following format: + * The next six functions are helpers to access ride data at the offset 10E & + * 110. We believe it stores three distinct values in the following format: * * unknown1: bits 9-11 * unknown2: bits 6-8 @@ -3612,6 +3612,18 @@ int get_var_10E_unk_3(rct_ride* ride) { return ride->var_10E & 0x1F; } +int get_var_110_unk_1(rct_ride* ride) { + return (ride->var_110 >> 8) & 0x7; +} + +int get_var_110_unk_2(rct_ride* ride) { + return (ride->var_110 >> 5) & 0x7; +} + +int get_var_110_unk_3(rct_ride* ride) { + return ride->var_110 & 0x1F; +} + bool ride_has_spinning_tunnel(rct_ride *ride) { return ride->special_track_elements & RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; } diff --git a/src/ride/ride.h b/src/ride/ride.h index 8e2f2c6cef..47ccb3923d 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -767,6 +767,9 @@ void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int * int get_var_10E_unk_1(rct_ride* ride); int get_var_10E_unk_2(rct_ride* ride); int get_var_10E_unk_3(rct_ride* ride); +int get_var_110_unk_1(rct_ride* ride); +int get_var_110_unk_2(rct_ride* ride); +int get_var_110_unk_3(rct_ride* ride); uint8 ride_get_helix_sections(rct_ride *ride); bool ride_has_spinning_tunnel(rct_ride *ride); diff --git a/src/ride/ride_ratings.c b/src/ride/ride_ratings.c index b78cfe1ead..97a2cc19a3 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -623,41 +623,22 @@ static rating_tuple get_var_10E_rating(rct_ride* ride) { /** * rct2: 0x0065DF72 */ -static rating_tuple get_var_110_rating(uint16 var_110) { - int al; +static rating_tuple get_var_110_rating(rct_ride* ride) { + int var_10E_unk_1 = get_var_10E_unk_1(ride); + int var_10E_unk_2 = get_var_10E_unk_2(ride); + int var_10E_unk_3 = get_var_10E_unk_3(ride); - al = var_110 >> 8; - al = al & 7; - int excitement = (al * 0x3c000) >> 16; + int excitement = (var_10E_unk_1 * 0x3c000) >> 16; + excitement += (var_10E_unk_2 * 0x3c000) >> 16; + excitement += (var_10E_unk_3 * 73992) >> 16; - al = var_110 >> 5; - al = al & 7; - excitement += (al * 0x3c000) >> 16; + int intensity = (var_10E_unk_1 * 0x14000) >> 16; + intensity += (var_10E_unk_2 * 49152) >> 16; + intensity += (var_10E_unk_3 * 21140) >> 16; - al = var_110 & 0x1F; - excitement += (al * 73992) >> 16; - - al = var_110 >> 8; - al = al & 7; - int intensity = (al * 0x14000) >> 16; - - al = var_110 >> 5; - al = al & 7; - intensity += (al * 49152) >> 16; - - al = var_110 & 0x1F; - intensity += (al * 21140) >> 16; - - al = var_110 >> 8; - al = al & 7; - int nausea = al / 5; - - al = var_110 >> 5; - al = al & 7; - nausea += (al * 0x32000) >> 16; - - al = var_110 & 0x1F; - nausea += (al * 48623) >> 16; + int nausea = var_10E_unk_1 / 5; + nausea += (var_10E_unk_2 * 0x32000) >> 16; + nausea += (var_10E_unk_3 * 48623) >> 16; rating_tuple rating = { excitement, intensity, nausea }; return rating; @@ -774,7 +755,7 @@ static rating_tuple sub_65DDD1(rct_ride *ride) intensity += var_10E_rating.intensity; nausea += var_10E_rating.nausea; - rating_tuple var_110_rating = get_var_110_rating(ride->var_110); + rating_tuple var_110_rating = get_var_110_rating(ride); excitement += var_110_rating.excitement; intensity += var_110_rating.intensity; nausea += var_110_rating.nausea;