Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/OpenRCT2/OpenRCT2/llms.txt

Use this file to discover all available pages before exploring further.

Guests are park visitors that can be found using map.getAllEntities('guest'). Each guest has properties controlling their appearance, needs, thoughts, and items.

Accessing Guests

// Get all guests
const guests = map.getAllEntities('guest');

// Get a specific guest by ID
const guest = map.getEntity(guestId);

// Get guests on a specific tile
const guestsOnTile = map.getAllEntitiesOnTile('guest', { x: 64, y: 64 });

Appearance Properties

name
string
Name of the guest.
guest.name = 'John Smith';
console.log(`Guest: ${guest.name}`);
tshirtColour
number
Colour of the guest’s t-shirt (0-31).
guest.tshirtColour = 10; // Change shirt color
trousersColour
number
Colour of the guest’s trousers (0-31).
guest.trousersColour = 5;
balloonColour
number
Colour of the guest’s balloon if they have one.
guest.balloonColour = 3;
hatColour
number
Colour of the guest’s hat if they have one.
guest.hatColour = 7;
umbrellaColour
number
Colour of the guest’s umbrella if they have one.
guest.umbrellaColour = 12;

Status Properties

happiness
number
How happy the guest is (0-255). Higher is happier.
console.log(`Happiness: ${guest.happiness}`);
guest.happiness = 255; // Make guest very happy
happinessTarget
number
The target happiness value. Happiness slowly moves towards this value.
guest.happinessTarget = 200;
energy
number
How tired the guest is (32-128). Lower values mean more tired.
console.log(`Energy: ${guest.energy}`);
energyTarget
number
The target energy value.
guest.energyTarget = 120;
nausea
number
How nauseated the guest is (0-255). Higher values mean more nauseated.
if (guest.nausea > 200) {
  console.log(`${guest.name} feels very sick!`);
}
nauseaTarget
number
The target nausea value.
guest.nauseaTarget = 0; // Target feeling better
hunger
number
How hungry the guest is (0-255). Lower values mean more hungry.
if (guest.hunger < 100) {
  console.log(`${guest.name} is hungry`);
}
thirst
number
How thirsty the guest is (0-255). Lower values mean more thirsty.
if (guest.thirst < 100) {
  console.log(`${guest.name} is thirsty`);
}
toilet
number
How much the guest needs the toilet (0-255). Higher values mean more urgent.
if (guest.toilet > 180) {
  console.log(`${guest.name} needs a toilet!`);
}
mass
number
The mass of the guest. Affects vehicle mass on rides.
console.log(`Mass: ${guest.mass}`);

Preferences

minIntensity
number
The guest’s minimum preferred intensity (0-15).
console.log(`Min intensity: ${guest.minIntensity}`);
maxIntensity
number
The guest’s maximum preferred intensity (0-15).
console.log(`Max intensity: ${guest.maxIntensity}`);
nauseaTolerance
number
The guest’s tolerance to nauseating rides (0-3).
console.log(`Nausea tolerance: ${guest.nauseaTolerance}`);
favouriteRide
number | null
The ride ID of the guest’s favourite ride, or null if none.
if (guest.favouriteRide !== null) {
  const ride = map.getRide(guest.favouriteRide);
  console.log(`Favourite: ${ride.name}`);
}

Financial

cash
number
Amount of cash in the guest’s pocket.
console.log(`Cash: £${guest.cash / 10}`);
guest.cash = 5000; // Give guest £50

Location

isInPark
boolean
Whether the guest is within the park boundaries.
if (guest.isInPark) {
  console.log(`${guest.name} is in the park`);
}
isLost
boolean
Whether the guest is lost (lostCountdown < 90).
if (guest.isLost) {
  console.log(`${guest.name} is lost!`);
}
lostCountdown
number
Countdown (0-255) tracking how long the guest has been looking for their destination.
console.log(`Lost countdown: ${guest.lostCountdown}`);
destination
CoordsXY
The guest’s direct destination coordinates.
console.log(`Heading to: (${guest.destination.x}, ${guest.destination.y})`);
direction
Direction
The guest’s orthogonal direction (0-3).
console.log(`Facing direction: ${guest.direction}`);

Thoughts

thoughts
Thought[]
The list of thoughts this guest has.
guest.thoughts.forEach(thought => {
  console.log(thought.toString());
});
Each thought has:
  • type - The thought type (e.g., “sick”, “hungry”, “was_great”)
  • item - The thought argument (ride ID, shop item, etc.)
  • freshness - How fresh the thought is (lower = more recent)
  • freshTimeout - The freshness timeout
  • toString() - Get formatted string with Unicode quotes
function analyzeThoughts(guest) {
  const thoughtTypes = {};
  
  guest.thoughts.forEach(thought => {
    thoughtTypes[thought.type] = (thoughtTypes[thought.type] || 0) + 1;
  });
  
  console.log(`${guest.name}'s thoughts:`, thoughtTypes);
}

Items

items
GuestItem[]
The list of items this guest has.
console.log(`${guest.name} has ${guest.items.length} items`);

hasItem()

Checks whether the guest has a certain item.
item
GuestItem
required
The item to check for.
if (guest.hasItem('map')) {
  console.log(`${guest.name} has a map`);
}

if (guest.hasItem('umbrella')) {
  console.log(`${guest.name} has an umbrella`);
}

giveItem()

Gives an item to the guest. Guests can only have one item of each type.
item
GuestItem
required
The item to give.
// Give simple item
guest.giveItem('balloon');
guest.giveItem('map');
guest.giveItem('umbrella');

// Give photo with ride ID
guest.giveItem({
  type: 'photo1',
  rideId: 0
});

// Give voucher
guest.giveItem({
  type: 'voucher',
  voucherType: 'entry_free'
});

removeItem()

Removes an item from the guest’s possession.
item
GuestItem
required
The item to remove.
guest.removeItem('balloon');
guest.removeItem('map');

removeAllItems()

Removes all items from the guest’s possession.
guest.removeAllItems();
console.log('All items removed');

Animations

availableAnimations
GuestAnimation[]
The animations available to this guest.
console.log('Available animations:', guest.availableAnimations);
animation
GuestAnimation
The animation the guest is currently exhibiting. Animations include: “walking”, “checkTime”, “watchRide”, “eatFood”, “shakeHead”, “emptyPockets”, “wow”, “throwUp”, “jump”, “joy”, “readMap”, “wave”, “takePhoto”, “clap”, etc.
console.log(`Current animation: ${guest.animation}`);
guest.animation = 'wave'; // Make guest wave
animationOffset
number
The frame offset in the current animation.
console.log(`Animation frame: ${guest.animationOffset}`);
animationLength
number
The total number of frames in the current animation.
console.log(`Animation length: ${guest.animationLength}`);

getAnimationSpriteIds()

Gets an array of sprite IDs representing a particular guest animation.
animation
GuestAnimation
required
The animation to get sprites for.
rotation
number
required
The rotation (0-7).
const sprites = guest.getAnimationSpriteIds('wave', 0);
console.log('Wave animation sprites:', sprites);

Flags

getFlag()

Gets whether a given flag is set.
key
PeepFlags
required
The flag to test.
if (guest.getFlag('tracking')) {
  console.log(`${guest.name} is being tracked`);
}

if (guest.getFlag('leavingPark')) {
  console.log(`${guest.name} is leaving`);
}

setFlag()

Sets a flag to the given value.
key
PeepFlags
required
The flag to set.
value
boolean
required
Whether to set or clear the flag.
guest.setFlag('tracking', true); // Enable tracking
guest.setFlag('leavingPark', false); // Stop guest from leaving
Available flags: “leavingPark”, “slowWalk”, “tracking”, “waving”, “hasPaidForParkEntry”, “photo”, “painting”, “wow”, “litter”, “lost”, “hunger”, “toilet”, “crowded”, “happiness”, “nausea”, “purple”, “pizza”, “explode”, “rideShouldBeMarkedAsFavourite”, “parkEntranceChosen”, “contagious”, “joy”, “angry”, “iceCream”, “hereWeAre”, “positionFrozen”, “animationFrozen”

Usage Examples

Find Unhappy Guests

function findUnhappyGuests() {
  const guests = map.getAllEntities('guest');
  const unhappy = guests.filter(g => g.happiness < 100);
  
  console.log(`Found ${unhappy.length} unhappy guests`);
  
  unhappy.forEach(guest => {
    console.log(`${guest.name}: Happiness ${guest.happiness}`);
    guest.thoughts.forEach(thought => {
      console.log(`  - ${thought.toString()}`);
    });
  });
}

Guest Status Report

function guestReport(guest) {
  console.log(`=== ${guest.name} ===`);
  console.log(`Location: (${guest.x}, ${guest.y}, ${guest.z})`);
  console.log(`In park: ${guest.isInPark}`);
  console.log(`Cash: £${(guest.cash / 10).toFixed(2)}`);
  console.log(`Happiness: ${guest.happiness}/255`);
  console.log(`Energy: ${guest.energy}`);
  console.log(`Hunger: ${guest.hunger}`);
  console.log(`Thirst: ${guest.thirst}`);
  console.log(`Nausea: ${guest.nausea}`);
  console.log(`Items: ${guest.items.map(i => i.type).join(', ')}`);
}

Give Free Items

function giveFreeItems() {
  const guests = map.getAllEntities('guest');
  
  guests.forEach(guest => {
    if (!guest.hasItem('map')) {
      guest.giveItem('map');
    }
    
    if (climate.current.weather === 'rain' && !guest.hasItem('umbrella')) {
      guest.giveItem('umbrella');
    }
  });
}

Make Everyone Happy

function makeEveryoneHappy() {
  const guests = map.getAllEntities('guest');
  
  guests.forEach(guest => {
    guest.happiness = 255;
    guest.happinessTarget = 255;
    guest.energy = 128;
    guest.hunger = 255;
    guest.thirst = 255;
    guest.nausea = 0;
    guest.toilet = 0;
  });
  
  console.log(`Made ${guests.length} guests happy!`);
}