Replicate vanilla RCT logic when guests specifically heading for ride#15935
Replicate vanilla RCT logic when guests specifically heading for ride#15935reticulatingsplines wants to merge 8 commits into
Conversation
Guests "Heading to" a ride will now skip some of the checks they'd otherwise perform that take into account data calculated about the ride, i.e. how much is sheltered during the rain, how intense it is, and how nauseating it is. In effect, they will not bounce off the queue entrance with thoughts "not going on RIDE while it's raining", "RIDE looks too intense for me", "I want to go on something more thrilling than RIDE", "Just looking at RIDE makes me sick". They are still likely to bounce off if the ride stats haven't been calculated and it's a ride capable of g-forces, or if it's value is uncalculate or too low vis-a-vis the ticket price. A pre-existing comment in the code suggests that this is the intended behavior, and it's confirmed to be the behavior in at least RCT1 and RCT Classic.
|
How have you validated this. Did you check the assembly? |
|
No, but check the discussion thread. I've observed the behavior shown in the screenshots and described below in both RCT Classic and RCT1 (RCT Deluxe, specifically) by watching dozens and dozens of guests trying to enter the queue of rides in different parks, both g-force and non-g-force, sheltered and unsheltered, stats calculated and not calculated, intensity > 10, ticket price $20, etc. If a guest is "Heading towards" Ride X, upon reaching the queue line entrance, they will:
You can watch an unsheltered ride while it's raining; guests heading towards that ride specifically (equivalent of ride->id == GuestHeadingToRideId in OpenRCT2) will enter the queue if there's space. You can forcibly create populations of guests heading towards a specific ride by starting a free ride voucher campaign, which creates guests with GuestHeadingToRideId already set. As shown in the thread, these guests don't care about anything but if forced towards a ride with ludicrous intensity via voucher campaign, they WILL still bounce off in RCT Classic. The current code doesn't really make any sense, and I think the comment makes it clear that the current behavior in OpenRCT2 wasn't intended. Right now, if a guest is specifically heading for a ride, they are actually less likely to ride it, because the function returns false due to an intensity above 10 without even factoring in happiness. |
|
The assembly is jumping all over the place in this function. Will be hard to verify 0x696263 is the GuestHeadingToRideId check. Looks like after this check it has to jump and skip other checks. But there are a few things different in this code. Will need careful unpicking. |
Gymnasiast
left a comment
There was a problem hiding this comment.
I think we’d at least need a good assembly check. Just changing peep AI logic based on what RCT Classic appears to do is not a solid foundation.
|
Obviously understand the skepticism regarding some anonymous lurker claiming to have "watched some peeps in RCT classic", but I do want to point out that this change would be reflective of OpenRCT2 prior to commit 2b66253, where it seems like this logic was inadvertently lost when replacing the gotos. |
|
I think you are correct btw it's just we want to make sure it's correct. Little busy this weekend to verify it against the assembly though. |
|
@reticulatingsplines Did you close this by accident? |
|
Yeah, sorry, my VS github extension went absolutely haywire. I'll remake a pr. edit: done, #15969 |
As discussed in #15903. In vanilla RCT, guests performing the equivalent of the ShouldGoOnRide check who are specifically "Heading For" a ride will skip the weather and stats checks and instead only check that the intensity is below 10. The code comparison looks messy but all that's being modified is the addition of an
else {after the theif (ride->id == GuestHeadingToRideId)block insideif (ride_has_ratings(ride)), so the rest of theif (ride_has_ratings(ride))is only performed if the guest wasn't specifically heading for that ride.