From c14b84489c5cbba6b85e23b8ac58bfe1b6df4620 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Tue, 31 Mar 2015 22:42:16 -0700 Subject: [PATCH 1/3] Decompile sub_65E1C2 --- src/ride/ride.h | 2 +- src/ride/ride_ratings.c | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/ride/ride.h b/src/ride/ride.h index 79a6ad2750..b0f67e974d 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -194,7 +194,7 @@ typedef struct { uint8 pad_116; uint8 highest_drop_height; // 0x117 uint32 var_118; - uint8 pad_11C[0x02]; + uint16 var_11C; uint8 var_11E; uint8 var_11F; sint16 var_120; diff --git a/src/ride/ride_ratings.c b/src/ride/ride_ratings.c index a442459877..5e30ff6187 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -619,11 +619,35 @@ 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); + // EBX, ECX, EBP + int var_118_shifted = (ride->var_118) >> 16; + uint32 eax = min(var_118_shifted, 1000); + int excitement = (eax * 9175) >> 16; - rating_tuple rating = { ebx, ecx, ebp }; + eax = min(var_118_shifted, 2000); + int intensity = (eax * 0x2666) >> 16; + + eax = min(var_118_shifted, 1000); + int nausea = (eax * 0x4000) >> 16; + + eax = (ride->var_11C * 30340) >> 16; + nausea += eax; + + if (ride->var_11E & 0x40) { + excitement += 20; + nausea += 15; + } + + if (ride->var_11E & 0x20) { + excitement += 20; + nausea += 15; + } + + uint8 lowerval = ride->var_11E & 0x1F; + lowerval = min(lowerval, 11); + excitement += (lowerval * 774516) >> 16; + + rating_tuple rating = { excitement, intensity, nausea }; return rating; } From 7bb6b6a70d566fdf25f2f2e8596cfe845f1df3f8 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Sat, 11 Apr 2015 09:47:06 -0700 Subject: [PATCH 2/3] update ride property names --- src/ride/ride.h | 6 +++--- src/ride/ride_ratings.c | 19 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/ride/ride.h b/src/ride/ride.h index b0f67e974d..fa9387568d 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -193,9 +193,9 @@ typedef struct { uint8 drops; // 0x115 (??XX XXXX) uint8 pad_116; uint8 highest_drop_height; // 0x117 - uint32 var_118; - uint16 var_11C; - uint8 var_11E; + sint32 sheltered_length; // 0x118 + uint8 pad_11C[0x2]; + uint8 no_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 5e30ff6187..35b2157513 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -619,31 +619,30 @@ static rating_tuple sub_65DDD1(rct_ride *ride) */ static rating_tuple sub_65E1C2(rct_ride *ride) { - // EBX, ECX, EBP - int var_118_shifted = (ride->var_118) >> 16; - uint32 eax = min(var_118_shifted, 1000); + int sheltered_length_shifted = (ride->sheltered_length) >> 16; + uint32 eax = min(sheltered_length_shifted, 1000); int excitement = (eax * 9175) >> 16; - eax = min(var_118_shifted, 2000); + eax = min(sheltered_length_shifted, 2000); int intensity = (eax * 0x2666) >> 16; - eax = min(var_118_shifted, 1000); + eax = min(sheltered_length_shifted, 1000); int nausea = (eax * 0x4000) >> 16; - eax = (ride->var_11C * 30340) >> 16; - nausea += eax; + /*eax = (ride->var_11C * 30340) >> 16;*/ + /*nausea += eax;*/ - if (ride->var_11E & 0x40) { + if (ride->no_sheltered_sections & 0x40) { excitement += 20; nausea += 15; } - if (ride->var_11E & 0x20) { + if (ride->no_sheltered_sections & 0x20) { excitement += 20; nausea += 15; } - uint8 lowerval = ride->var_11E & 0x1F; + uint8 lowerval = ride->no_sheltered_sections & 0x1F; lowerval = min(lowerval, 11); excitement += (lowerval * 774516) >> 16; From 42fbe7b027ec090a2465ef3ebfe71b10196be66c Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Sat, 11 Apr 2015 18:38:29 -0700 Subject: [PATCH 3/3] no_sheltered -> num_sheltered --- src/ride/ride.h | 2 +- src/ride/ride_ratings.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ride/ride.h b/src/ride/ride.h index fa9387568d..1e24408e1e 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -195,7 +195,7 @@ typedef struct { uint8 highest_drop_height; // 0x117 sint32 sheltered_length; // 0x118 uint8 pad_11C[0x2]; - uint8 no_sheltered_sections; // 0x11E + 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 35b2157513..8da0cbc736 100644 --- a/src/ride/ride_ratings.c +++ b/src/ride/ride_ratings.c @@ -632,17 +632,17 @@ static rating_tuple sub_65E1C2(rct_ride *ride) /*eax = (ride->var_11C * 30340) >> 16;*/ /*nausea += eax;*/ - if (ride->no_sheltered_sections & 0x40) { + if (ride->num_sheltered_sections & 0x40) { excitement += 20; nausea += 15; } - if (ride->no_sheltered_sections & 0x20) { + if (ride->num_sheltered_sections & 0x20) { excitement += 20; nausea += 15; } - uint8 lowerval = ride->no_sheltered_sections & 0x1F; + uint8 lowerval = ride->num_sheltered_sections & 0x1F; lowerval = min(lowerval, 11); excitement += (lowerval * 774516) >> 16;