Claim set · data/claims/rollercoaster-tycoon.yaml

RollerCoaster Tycoon (manual, Sawyer, and OpenRCT2's guest code)

Game: RollerCoaster Tycoon.

The manual's rules for building a coaster piece by piece: the last piece must join the station platform to close the loop; track may pass over or under itself with enough clearance but may not cross itself at the same level; a rise can't turn straight into a drop without a straight piece between; supports reach only so high; and track goes underground only where the land is prepared. rollercoaster-tycoon/track-rules

ManualRollerCoaster Tycoon mini manual · p. 12, building Roller Coaster 1The last piece of track must connect to the first piece (the Station Platform) to create a closed loop.RollerCoaster Tycoon mini manual · p. 12However, it is a violation of the safety code to build intersections, so you cannot have the track cross itself at the same level.RollerCoaster Tycoon mini manual · p. 12In order to switch from a rising track to a dropping track, you must have at least one piece of straight track in the middle.RollerCoaster Tycoon mini manual · p. 12There is a limit to how high above the land you can safely raise track using supports.RollerCoaster Tycoon mini manual · p. 12You cannot build track underground unless you prepare the land for it.Checked by claude, 2026-10-26 — found the list in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

A test run gives each custom ride three ratings, excitement, intensity and nausea, which the manual scales from 0 to 10, though intensity can go over 10. Higher excitement lets the ride charge more and makes it more popular; it comes from the ride type and design, speed, pacing, nearby scenery, the view, close passes by paths and other rides, and novelty. Intensity comes from the forces, inversions and speed; a ride rated over 10 may find no riders even for free. Spinning, sharp turns and inversions raise nausea. rollercoaster-tycoon/ride-ratings

ManualRollerCoaster Tycoon mini manual · p. 54, Building a Custom Ridepurpose for testing is to determine the important characteristics of the ride — excitement, intensity, and nausea factor.RollerCoaster Tycoon mini manual · pp. 55-56, Characteristics of the RideThe higher this number, the more you can successfully charge for admission to the ride, and the more popular the ride will be with your guests.RollerCoaster Tycoon mini manual · p. 56The overall speed of the ride, its pacing, and the look of it from the outside can add to the excitement, as can nearby sceneryRollerCoaster Tycoon mini manual · p. 56The age of the ride is a factor, too; novelty adds excitement.RollerCoaster Tycoon mini manual · p. 56The overall rating depends on all the forces, accelerations, changes of direction, inversions, and speed experienced by a rider over the course of the track. You can achieve intensity ratings over 10 through misguided design decisions, but don’t be surprised when no one is willing to ride it, even for free!RollerCoaster Tycoon mini manual · p. 56Spinning rides tend to have high nausea ratings, and the more turns (especially sharp ones) and inversions you include, the worse it gets.Checked by claude, 2026-10-26 — found the passages in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

Nearly every shop or stall has a front with a serving window, and that side must face a path for guests to use it; the Information Kiosk serves from all sides. Shops need no entrance, exit or queue. rollercoaster-tycoon/shop-front

About: RollerCoaster Tycoon Structure placement

ManualRollerCoaster Tycoon mini manual · p. 20, Shops and StallsUnlike a ride, a little shop doesn’t need an Entrance or Exit, and a queuing line is also unnecessary.RollerCoaster Tycoon mini manual · p. 20almost all shops have a predetermined front side with a built in access window, and that front side must be positioned next to a path in order for the guests to be able to use it. The only exception is the Information Kiosk, which has access windows on all sides.Checked by claude, 2026-10-26 — found the passage in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

Sawyer has said he wanted the guests "uncontrollable": they can't be forced to do anything and make up their own minds from what they see, feel and experience, run by "quite a primitive algorithm". Testers complained that guests got lost too easily in odd-shaped parks. rollercoaster-tycoon/guests-uncontrollable

InterviewChris Sawyer (Transport Tycoon/RollerCoaster Tycoon) – Interview · answer on inspiration and objectivesHaving the guests “uncontrollable” in the game appealed to me a lot – i.e. you can’t force them to do something they don’t want to do as they make their own minds up based on what they see and feel and experience.Chris Sawyer (Transport Tycoon/RollerCoaster Tycoon) – Interview · same answerProgramming the guests was a really fun challenge, and quite a satisfying one when you see the results of quite a primitive algorithm looking quite “human”.Chris Sawyer (Transport Tycoon/RollerCoaster Tycoon) – Interview · same answerI remember testers criticising the guests’ ability to get lost far too easily if you built an odd-shaped park, perhaps one with a lake in the middleChecked by claude, 2026-10-26 — found the answer in the pinned capture

Cited by: RollerCoaster Tycoon

The Guest Info window lists each guest's current thought and action, and its second tab totals every guest's thoughts in order of frequency, so a complaint near the top flags a problem. Each guest's own window shows their recent thoughts, their spending in the park, and their preferred ride intensity and tolerance for nausea. rollercoaster-tycoon/guest-thoughts

ManualRollerCoaster Tycoon mini manual · p. 34, Keeping Your Guests HappyThere are two display tabs in this window. the first lists the current thought and action of each guest in the parkRollerCoaster Tycoon mini manual · p. 34The second tab summarizes for you the actions and thoughts of every guest, and presents them in descending order of frequency.RollerCoaster Tycoon mini manual · pp. 82-83, Guest windowCondition is a detailed analysis of the visitor’s physical status and needs, plus information on his or her ride intensity preference and nausea tolerance.RollerCoaster Tycoon mini manual · pp. 82-83, Guest windowThoughts lists this visitor’s most recent few thoughts about your park.RollerCoaster Tycoon mini manual · pp. 82-83, Guest windowFunds details the guest’s spending while in the park.Checked by claude, 2026-10-26 — found both passages in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

The manual teaches needs as chains of cause and effect: guests who eat will need bathrooms and litter bins, salty food makes them thirsty, and a hungry guest looks out for a food stall. rollercoaster-tycoon/guest-needs

ManualRollerCoaster Tycoon mini manual · p. 34, "Foresee and fill visitor's needs"If you serve food, your visitors will need bathrooms and trash bins; provide them before there’s a problem. Salty foods make guests thirsty, so build drink stalls.RollerCoaster Tycoon mini manual · p. 20, Shops and Stallsif a guest is hungry, he or she will keep an eye out for a food stallChecked by claude, 2026-10-26 — found both passages in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

The manual says how often guests get lost depends entirely on the footpaths: avoid dead ends, complex routes and long trails to nowhere, and sell park maps at Information Kiosks, which make a guest much less likely to get lost. A lost guest can be picked up and dropped on a central path. rollercoaster-tycoon/lost-guests

ManualRollerCoaster Tycoon mini manual · p. 32, Lost GuestsHow often guests … become lost depends … entirely on the system … of footpaths in your … park. Try to avoid … dead ends, complexRollerCoaster Tycoon mini manual · p. 32, Park MapsHaving a map … handy significantly reduces a … guest’s chances of getting lost.RollerCoaster Tycoon mini manual · p. 32Move the mouse pointer across the landscape until the visitor you’ve retrieved is over a central footpath (preferably near rides).Checked by claude, 2026-10-26 — found the passages in the pinned PDF's text layer

The page's sidebar interleaves with this column in the text layer, so the quotes are cut where its lines break in.

Cited by: RollerCoaster Tycoon

The park rating, from 0 to 1000, reflects the guests' overall impression of ride design, layout, tidiness, value and efficiency. The manual warns that it shows that there is a problem but never what the problem is. rollercoaster-tycoon/park-rating

Value
{
 "min": 0,
 "max": 1000
}
ManualRollerCoaster Tycoon mini manual · p. 34, Park RatingThis number (between 0 and 1000) reflects your guests’ overall impression — of ride design, park layout, tidiness, value, efficiency, etc.RollerCoaster Tycoon mini manual · p. 34although the rating will never tell you what a problem is, only that there is a problem.Checked by claude, 2026-10-26 — found the bullet in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

The manual's tutorial scenario gives the player until October of Year 1 to bring 250 guests into the park and raise the park rating to at least 600. rollercoaster-tycoon/tutorial-goal

ManualRollerCoaster Tycoon mini manual · p. 8, The TutorialIn the tutorial, you have until October of Year 1 to attract 250 guests into the park and build the park’s rating (a measure of reputation) to at least 600.Checked by claude, 2026-10-26 — found the sentence in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

The manual says the player has borrowed from the bank to improve the park, and that this loan is the working capital; besides it, the only money is what guests spend in the park. The park value, another report, weighs land and equipment, the quality and profit of the rides, and the park rating. rollercoaster-tycoon/finances

ManualRollerCoaster Tycoon mini manual · p. 36, FinancesYou have borrowed a certain amount from the bank to make improvements to the park under your management. This loan constitutes your working capital, also called cash-on-hand (COH). That and whatever income you derive from guest spending in the park are your only sources of funding.RollerCoaster Tycoon mini manual · p. 36, Fiscal Reportscalculated by expert assessors to reflect what the park is worth in terms of the value of the land and equipment owned, the quality and profitability of the rides and the park as a whole, and the park’s overall public reputation, as determined by the Park Rating.Checked by claude, 2026-10-26 — found the passages in the pinned PDF's text layer

Cited by: RollerCoaster Tycoon

In OpenRCT2 the park rating starts from 1150 (1050 in a park set to a difficult rating). The guest count adds from -150 at none to +3 at 2,000 or more. Happy guests, those above 128 on a 0-255 happiness scale, add from -500 at none to nothing once five in six guests are happy. Guests leaving the park who can't find the exit cost 7 points each beyond the first 25. rollercoaster-tycoon/openrct2-park-rating-guests

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/world/Park.cpp#L383-L424int32_t result = 1150; if (park.flags.has(ParkFlag::difficultParkRating)) { result = 1050; } // Guests { // -150 to +3 based on a range of guests from 0 to 2000 result -= 150 - (std::min<int32_t>(2000, park.numGuestsInPark) / 13); // Find the number of happy peeps and the number of peeps who can't find the park exit uint32_t happyGuestCount = 0; uint32_t lostGuestCount = 0; …Checked by claude, 2026-10-26 — read CalculateParkRating's guest block at the v0.5.6 tag

Five in six: the term is 2 × min(250, happy × 300 / guests), which reaches its cap of 500 when happy guests are 250/300 of the park. A guest counts as unable to find the exit when it is leaving the park and its lost countdown is under 90.

Cited by: RollerCoaster Tycoon

OpenRCT2's park rating then weighs the rides: the average uptime gives -200 to 0; rated rides whose average excitement is near 3.7 and intensity near 5.2 give up to 0 from -100; and the summed excitement and intensity of all rated rides, each capped, give -200 to 0. rollercoaster-tycoon/openrct2-park-rating-rides

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/world/Park.cpp#L426-L475// Rides { int32_t rideCount = 0; int32_t excitingRideCount = 0; int32_t totalRideUptime = 0; int32_t totalRideIntensity = 0; int32_t totalRideExcitement = 0; for (auto& ride : RideManager(gameState)) { totalRideUptime += 100 - ride.downtime; if (RideHasRatings(ride)) { …Checked by claude, 2026-10-26 — read CalculateParkRating's ride block at the v0.5.6 tag

Ratings are stored in hundredths and divided by 8 when summed, so the averages' targets of 46 and 65 are 3.68 excitement and 5.20 intensity; each point of distance from them, halved and capped at 50, comes off. The sums of excitement/8 and intensity/8 are each capped at 1000, so the last term reaches 0 at a combined 2000.

Cited by: RollerCoaster Tycoon

OpenRCT2's park rating loses 4 points for each piece of litter at least 7,680 ticks old, up to 150 pieces, and a penalty for casualties; the result is clamped to 0-999 and recalculated every 512 ticks. A cheat can force the rating to a set value. rollercoaster-tycoon/openrct2-park-rating-litter

About: Q928874

Value
{
 "min": 0,
 "max": 999
}
CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/world/Park.cpp#L477-L489// Litter { // Counts the amount of litter whose age is min. 7680 ticks (5~ min) old. const auto litterList = EntityList<Litter>(); const auto litterCount = std::count_if( litterList.begin(), litterList.end(), [](auto* litter) { return litter->getAge() >= 7680; }); result -= 600 - (4 * (150 - std::min<int32_t>(150, litterCount))); } result -= park.ratingCasualtyPenalty; result = std::clamp(result, 0, 999); return result;OpenRCT2 source code, release v0.5.6 · src/openrct2/world/Park.cpp#L333-L336// Every ~13 seconds if (currentTicks % 512 == 0) { park.rating = CalculateParkRating(park, gameState);OpenRCT2 source code, release v0.5.6 · src/openrct2/world/Park.cpp#L378-L381if (gameState.cheats.forcedParkRating != kForcedParkRatingDisabled) { return gameState.cheats.forcedParkRating; }Checked by claude, 2026-10-26 — read the litter block, the clamp and Park::Update at the v0.5.6 tag

The clamp tops the rating at 999 where the RollerCoaster Tycoon manual gives a range of 0 to 1000; the most the terms can sum to is 1153, so a park with every term at its best shows 999. The code's comment puts 512 ticks at about 13 seconds.

Cited by: RollerCoaster Tycoon

In OpenRCT2 a guest weighing a rated ride it isn't already heading for, in dry weather, turns it down when its intensity is below the guest's preferred minimum or above the preferred maximum (capped at 10), each widened by up to 2.55 as the guest gets happier; or when its nausea rating is above the guest's tolerance of 3, 6, 8 or 10, raised the same way. A guest already heading for the ride checks only that its intensity is no more than 10. At the ride, a refusal adds a thought ("X looks too intense for me", "I want to go on something more thrilling than X", "Just looking at X makes me feel sick") and lowers the guest's happiness target by 8. rollercoaster-tycoon/openrct2-ride-choice

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L188-L193static constexpr RideRating_t NauseaMaximumThresholds[] = { 300, 600, 800, 1000, };OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L2005-L2012if (ride.id == guestHeadingToRideId) { if (ride.ratings.intensity > RideRating::make(10, 00) && !gameState.cheats.ignoreRideIntensity) { GuestRideIsTooIntense(*this, ride, peepAtRide); return false; } }OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L2032-L2077if (!isPrecipitating || !GuestShouldRideWhileRaining(*this, ride)) { if (!gameState.cheats.ignoreRideIntensity) { // Intensity calculations. Even though the max intensity can go up to 15, it's capped // at 10.0 (before happiness calculations). A full happiness bar will increase the max // intensity and decrease the min intensity by about 2.5. RideRating_t maxIntensity = std::min(intensity.getMaximum() * 100, 1000) + happiness; RideRating_t minIntensity = (intensity.getMinimum() * 100) - happiness; if (ride.ratings.intensity < minIntensity) { if (peepAtRide) …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L2383-L2395static void GuestRideIsTooIntense(Guest& guest, Ride& ride, bool peepAtRide) { if (peepAtRide) { guest.insertNewThought(PeepThoughtType::intense, ride.id); if (guest.happinessTarget >= 64) { guest.happinessTarget -= 8; } ride.updatePopularity(0); } guest.choseNotToGoOnRide(ride, peepAtRide, true); …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.h#L46-L49moreThrilling = 4, // "I want to go on something more thrilling than X" intense = 5, // "X looks too intense for me" haventFinished = 6, // "I haven't finished my X yet" sickening = 7, // "Just looking at X makes me feel sick"Checked by claude, 2026-10-26 — read shouldGoOnRide's rating checks and GuestRideIsTooIntense at the v0.5.6 tag

Excluded: in rain a guest skips these checks for a ride that shelters it (GuestShouldRideWhileRaining, not read here) and refuses others; a cheat skips them; free transport rides skip all rating checks; and a guest whose own nausea is above 160 avoids any ride rated 1.40 or more for nausea. The happiness target drops only while it is 64 or more. Ratings are in hundredths, so happiness (0-255) widens the band by up to 2.55.

Cited by: RollerCoaster Tycoon

In OpenRCT2 a guest refuses a ride that has crashed unless its happiness is at least 225 of 255, thinking "I'm not going on X - it isn't safe". Free transport rides are exempt. rollercoaster-tycoon/openrct2-crashed-ride

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L1951-L1955// Assuming the queue conditions are met, peeps will always go on free transport rides. // Ride ratings, recent crashes and weather will all be ignored. auto ridePrice = RideGetPrice(ride); if (!ride.getRideTypeDescriptor().flags.has(RtdFlag::isTransportRide) || ride.value == kRideValueUndefined || ridePrice != 0)OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L1985-L1999// If happy enough, peeps will ignore the fact that a ride has recently crashed. if (ride.lastCrashType != RIDE_CRASH_TYPE_NONE && happiness < 225) { if (peepAtRide) { insertNewThought(PeepThoughtType::notSafe, ride.id); if (happinessTarget >= 64) { happinessTarget -= 8; } ride.updatePopularity(0); } …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.h#L72notSafe = 30, // "I'm not going on X - it isn't safe"Checked by claude, 2026-10-26 — read the crash check in shouldGoOnRide at the v0.5.6 tag

The thought is added only when the guest is at the ride, not while choosing from afar.

Cited by: RollerCoaster Tycoon

In OpenRCT2 a guest's happiness moves 4 points at a time toward a target. With each update the target drifts a point toward the middle of the 0-255 scale, and it sinks while the guest is low on energy, hungry or thirsty, or badly needs the toilet. A guest whose nausea target is 128 or more may throw up while walking, more likely the sicker it is. rollercoaster-tycoon/openrct2-happiness

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L678-L722void Guest::updateMotivesIdle() { // Idle peep happiness tends towards 127 (50%). if (happinessTarget >= 128) happinessTarget--; else happinessTarget++; nauseaTarget = std::max(nauseaTarget - 2, 0); if (energy <= 50) { happinessTarget = std::max(happinessTarget - 2, 0); } …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L790-L809uint8_t newHappiness = happiness; uint8_t newHappinessGrowth = happinessTarget; if (newHappiness >= newHappinessGrowth) { newHappiness = std::max(newHappiness - 4, 0); if (newHappiness < newHappinessGrowth) newHappiness = newHappinessGrowth; } else { newHappiness = std::min(255, newHappiness + 4); if (newHappiness > newHappinessGrowth) …Checked by claude, 2026-10-26 — read updateMotivesIdle and the happiness step of updateConsumptionMotives at the v0.5.6 tag

Thresholds: energy 50 or less (-2), hunger or thirst under 10 (-1 each; both count up as the guest is fed), toilet 195 or more (-1). The chance of throwing up is (nausea - 128) / 2 in 256 per check.

Cited by: RollerCoaster Tycoon

In OpenRCT2, while a guest off a ride consumes what it carries, a drink raises its thirst meter (fuller is higher) by 7 a step, and food raises its hunger meter by 7, lowers its thirst meter by 3 and fills its bladder by 2: any food makes a guest thirstier. rollercoaster-tycoon/openrct2-eating

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L723-L744/* rct2: 0x0068FA89*/ void Guest::updateConsumptionMotives() { if (timeToConsume == 0 && hasFoodOrDrink()) { timeToConsume += 3; } if (timeToConsume != 0 && state != PeepState::onRide) { timeToConsume = std::max(timeToConsume - 3, 0); if (hasDrink()) { …Checked by claude, 2026-10-26 — read updateConsumptionMotives at the v0.5.6 tag

The comment names the RCT2 routine at 0x0068FA89. The RollerCoaster Tycoon manual says salty foods make guests thirsty; this routine treats every food alike. Per-item effects elsewhere in the code (shop items) aren't in the pinned paths, so no claim is made about them. Hunger and thirst count up as a guest is fed: updateMotivesIdle penalises values under 10.

Cited by: RollerCoaster Tycoon

In OpenRCT2 a guest's full periodic update runs once every 512 ticks, and on every second one (once every 1,024 ticks) a walking or sitting guest in the park picks one thought at random from those that apply, tired, hungry, thirsty, needing the toilet, or running out of cash, and heads for the nearest food stall, drinks stall, toilet or cash machine to match. A guest leaving the park thinks only "I want to go home". On the alternate updates a guest with nausea of 140 or more thinks "I feel sick", and at 200 or more thinks "I feel very sick" and heads for first aid. rollercoaster-tycoon/openrct2-need-thoughts

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L833-L841void Guest::tick128UpdateGuest(uint32_t index) { const auto currentTicks = getGameState().currentTicks; const bool ticksMatchIndex = (index & 0x1FF) != (currentTicks & 0x1FF); if (ticksMatchIndex && !peepFlags.has(PeepFlag::positionFrozen)) { updateConsumptionMotives(); return; }OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L983-L989if ((index & 0x3FF) == (currentTicks & 0x3FF)) { /* Effect of masking with 0x3FF here vs mask 0x1FF, * which is used in the encompassing conditional, is * to reduce how often the content in this conditional * is executed to once every second time the encompassing * conditional executes. */OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L991-L1033if (!outsideOfPark && (state == PeepState::walking || state == PeepState::sitting)) { uint8_t num_thoughts = 0; PeepThoughtType possible_thoughts[5]; if (peepFlags.has(PeepFlag::leavingPark)) { possible_thoughts[num_thoughts++] = PeepThoughtType::goHome; } else { if (energy <= 70 && happiness < 128) { …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L1036-L1058if (num_thoughts != 0) { PeepThoughtType chosen_thought = possible_thoughts[ScenarioRand() % num_thoughts]; insertNewThought(chosen_thought); switch (chosen_thought) { case PeepThoughtType::hungry: GuestHeadForNearestRideWithFlag(*this, false, RtdFlag::sellsFood); break; case PeepThoughtType::thirsty: GuestHeadForNearestRideWithFlag(*this, false, RtdFlag::sellsDrinks); break; …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L1068-L1077if (nausea >= 140) { PeepThoughtType thought_type = PeepThoughtType::sick; if (nausea >= 200) { thought_type = PeepThoughtType::verySick; GuestHeadForNearestRideWithSpecialType(*this, true, RtdSpecialType::firstAid); } insertNewThought(thought_type); }OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.h#L44-L45sick = 2, // "I feel sick" verySick = 3, // "I feel very sick"OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.h#L51goHome = 9, // "I want to go home"Checked by claude, 2026-10-26 — read tick128UpdateGuest's 0x1FF and 0x3FF masks and its thought block at the v0.5.6 tag

Conditions: tired at energy 70 or less with happiness under 128; hungry at hunger 10 or less and thirsty at thirst 25 or less, both only when carrying no food or drink; toilet at 160 or more; running out at £9.00 or less with happiness 105 or more and energy 70 or more, in parks that use money. The code's comment says the energy test was a second happiness test in the original, guessed to be meant as energy. The guest index offsets each guest's ticks, so guests don't all think at once. The code's comment puts 512 ticks at about 13 seconds (Park.cpp L333).

Cited by: RollerCoaster Tycoon

In OpenRCT2 a guest with energy of at least 55, happiness of at least 45 and £5 or more in pocket always stays in the park (energy 70 and happiness 60 in a park without money). Any other guest has about a 1 in 20 chance at each check of deciding to go home. rollercoaster-tycoon/openrct2-leaving

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L3027-L3055/* Peeps that are happy enough, have enough energy and * (if appropriate) have enough money will always stay * in the park. */ if (!guest.peepFlags.has(PeepFlag::leavingPark)) { if (getGameState().park.flags.has(ParkFlag::noMoney)) { if (guest.energy >= 70 && guest.happiness >= 60) { return; } } …Checked by claude, 2026-10-26 — read GuestDecideWhetherToLeavePark at the v0.5.6 tag

A guest already leaving skips the stay test and takes the roll again. The comment names the RCT2 routine at 0x0068F8CD.

Cited by: RollerCoaster Tycoon

In OpenRCT2 a walking guest checks whether it is lost each time it reaches the next point on its way (unless it has stepped into water), and the pathfinder also checks at a dead end, a path whose only way on is back. In a park with at least two rides every second check adds to its lost counter; at 254 the guest thinks "I'm lost!" and its happiness target falls by 30, and the counter drops back to 230, so the thought repeats on later checks. rollercoaster-tycoon/openrct2-lost

About: Q928874

CodeOpenRCT2 source code, release v0.5.6 · src/openrct2/peep/GuestPathfinding.cpp#L1923-L1929// Check if in a dead end (i.e. only edge is where the peep came from) if (!(edges & ~(1 << direction))) { // In a dead end. Check if peep is lost, etc. peep.checkIfLost(); peep.checkCantFindRide(); peep.checkCantFindExit();OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L5475-L5497const auto [pathingResult, _] = performNextAction(); if (!(pathingResult & PATHING_DESTINATION_REACHED)) return; if (getNextIsSurface()) { auto surfaceElement = MapGetSurfaceElementAt(nextLoc); if (surfaceElement != nullptr) { int32_t water_height = surfaceElement->getWaterHeight(); if (water_height > 0) { moveTo({ x, y, water_height }); …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.cpp#L1331-L1349void Guest::checkIfLost() { if (!peepFlags.has(PeepFlag::lost)) { if (RideGetCount() < 2) return; peepFlags.flip(PeepFlag::unknown21); if (!peepFlags.has(PeepFlag::unknown21)) return; timeLost++; if (timeLost != 254) return; …OpenRCT2 source code, release v0.5.6 · src/openrct2/entity/Guest.h#L58lost = 16, // "I'm lost!"Checked by claude, 2026-10-26 — read checkIfLost and both callers, updateWalking and the pathfinder's dead-end branch, at the v0.5.6 tag

Where the counter resets isn't read here (Peep.cpp sets it to 0 in several path and queue cases). A guest named after an Easter-egg name carries the lost flag and skips the counter (Guest.cpp L640). A guest waiting at a level crossing returns before the check (L5467-L5473).

Cited by: RollerCoaster Tycoon