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.

The map object provides access to the game map, including tiles, rides, and entities.

Properties

size
CoordsXY
The size of the map in tiles.
console.log(`Map size: ${map.size.x} x ${map.size.y}`);
numRides
number
The total number of rides in the park.
console.log(`Total rides: ${map.numRides}`);
numEntities
number
The total number of entities on the map.
console.log(`Total entities: ${map.numEntities}`);
rides
Ride[]
An array of all rides in the park.
map.rides.forEach(ride => {
  console.log(`${ride.name}: ${ride.excitement}`);
});

Ride Methods

getRide()

Gets a ride by its ID.
id
number
required
The ride ID.
const ride = map.getRide(0);
if (ride) {
  console.log(`Ride: ${ride.name}`);
  console.log(`Status: ${ride.status}`);
  console.log(`Excitement: ${ride.excitement}`);
}

Tile Methods

getTile()

Gets a tile at the specified coordinates.
x
number
required
The x coordinate in tiles.
y
number
required
The y coordinate in tiles.
const tile = map.getTile(32, 32);
console.log(`Elements on tile: ${tile.numElements}`);

tile.elements.forEach((element, i) => {
  console.log(`Element ${i}: ${element.type}`);
});
const tile = map.getTile(x, y);
const surface = tile.elements.find(e => e.type === 'surface');

if (surface) {
  console.log('Height:', surface.baseHeight);
  console.log('Slope:', surface.slope);
  console.log('Surface style:', surface.surfaceStyle);
  console.log('Has ownership:', surface.hasOwnership);
}

Entity Methods

getEntity()

Gets an entity by its ID.
id
number
required
The entity ID.
const entity = map.getEntity(42);
if (entity) {
  console.log(`Entity type: ${entity.type}`);
  console.log(`Position: (${entity.x}, ${entity.y}, ${entity.z})`);
}

getAllEntities()

Gets all entities of a specific type.
type
EntityType
required
The entity type: “guest”, “staff”, “car”, “litter”, “balloon”, “money_effect”
// Get all guests
const guests = map.getAllEntities('guest');
console.log(`Total guests: ${guests.length}`);

guests.forEach(guest => {
  console.log(`${guest.name} - Happiness: ${guest.happiness}`);
});

// Get all staff
const staff = map.getAllEntities('staff');
staff.forEach(member => {
  console.log(`${member.name} (${member.staffType})`);
});

// Get all vehicles
const cars = map.getAllEntities('car');
console.log(`Vehicles on track: ${cars.length}`);

getAllEntitiesOnTile()

Gets all entities of a specific type at a tile position.
type
EntityType
required
The entity type.
tilePos
CoordsXY
required
The tile coordinates.
const guestsOnTile = map.getAllEntitiesOnTile('guest', { x: 64, y: 64 });
console.log(`Guests at (64, 64): ${guestsOnTile.length}`);

const litterOnTile = map.getAllEntitiesOnTile('litter', { x: 32, y: 32 });
console.log(`Litter at (32, 32): ${litterOnTile.length}`);

createEntity()

Creates a new entity of the specified type.
type
EntityType
required
The entity type to create.
initializer
object
required
Initial properties for the entity.
// Create a balloon
const balloon = map.createEntity('balloon', {
  x: 1024,
  y: 1024,
  z: 32,
  colour: 0
});

// Create litter
const litter = map.createEntity('litter', {
  x: 2048,
  y: 2048,
  z: 16,
  litterType: 'empty_can'
});

Track Iteration

getTrackIterator()

Gets a track iterator for iterating through a ride’s circuit.
location
CoordsXY
required
The tile coordinates.
elementIndex
number
required
The index of the track element on the tile.
const tile = map.getTile(32, 32);
const trackIndex = tile.elements.findIndex(e => e.type === 'track');

if (trackIndex !== -1) {
  const iterator = map.getTrackIterator({ x: 32, y: 32 }, trackIndex);
  
  if (iterator) {
    console.log('Current position:', iterator.position);
    console.log('Current segment:', iterator.segment?.description);
    
    // Move forward along the track
    if (iterator.next()) {
      console.log('Next position:', iterator.position);
    }
    
    // Move backward
    if (iterator.previous()) {
      console.log('Previous position:', iterator.position);
    }
  }
}

Usage Examples

Find Empty Land

function findEmptyLand() {
  for (let y = 0; y < map.size.y; y++) {
    for (let x = 0; x < map.size.x; x++) {
      const tile = map.getTile(x, y);
      const surface = tile.elements.find(e => e.type === 'surface');
      
      if (surface && surface.hasOwnership && tile.numElements === 1) {
        console.log(`Empty land at (${x}, ${y})`);
        return { x, y };
      }
    }
  }
  return null;
}

Count Guest Thoughts

function countThoughts() {
  const guests = map.getAllEntities('guest');
  const thoughtCounts = {};
  
  guests.forEach(guest => {
    guest.thoughts.forEach(thought => {
      thoughtCounts[thought.type] = (thoughtCounts[thought.type] || 0) + 1;
    });
  });
  
  console.log('Guest thoughts:', thoughtCounts);
}

Track All Rides

function logAllRides() {
  console.log('=== All Rides ===');
  map.rides.forEach(ride => {
    console.log(`${ride.name} (ID: ${ride.id})`);
    console.log(`  Type: ${ride.classification}`);
    console.log(`  Status: ${ride.status}`);
    console.log(`  Excitement: ${(ride.excitement / 100).toFixed(2)}`);
    console.log(`  Intensity: ${(ride.intensity / 100).toFixed(2)}`);
    console.log(`  Customers: ${ride.totalCustomers}`);
  });
}

Clean Up Litter

function cleanAllLitter() {
  const litter = map.getAllEntities('litter');
  console.log(`Removing ${litter.length} litter items`);
  
  litter.forEach(item => {
    item.remove();
  });
}

Monitor Staff Efficiency

function monitorStaff() {
  const staff = map.getAllEntities('staff');
  
  staff.forEach(member => {
    if (member.staffType === 'handyman') {
      console.log(`${member.name}:`);
      console.log(`  Lawns mown: ${member.lawnsMown}`);
      console.log(`  Gardens watered: ${member.gardensWatered}`);
      console.log(`  Litter swept: ${member.litterSwept}`);
      console.log(`  Bins emptied: ${member.binsEmptied}`);
    } else if (member.staffType === 'mechanic') {
      console.log(`${member.name}:`);
      console.log(`  Rides fixed: ${member.ridesFixed}`);
      console.log(`  Inspections: ${member.ridesInspected}`);
    }
  });
}

Coordinate System

OpenRCT2 uses a coordinate system where:
  • Each in-game tile is 32x32 units
  • The z-coordinate raises 16 units per land increment
  • A full-height wall is 32 units in height
  • Tile coordinates are in multiples of 32
// Convert tile coordinates to world coordinates
function tileToWorld(tileX, tileY) {
  return {
    x: tileX * 32,
    y: tileY * 32
  };
}

// Convert world coordinates to tile coordinates
function worldToTile(worldX, worldY) {
  return {
    x: Math.floor(worldX / 32),
    y: Math.floor(worldY / 32)
  };
}