Skip to main content

Point

Points (accessed via the global POINTLIST) are named spatial anchors in the game world.
They represent things such as:

  • Spawn locations (e.g., where a mission NPC or vehicle appears).
  • Teleport targets (used in AreaTransitionPoint).
  • Restart positions (for respawning after arrest, knockout, or cutscenes).
  • Environmental anchors (such as where leaves spawn, or shop items appear).

Unlike TRIGGER, which defines areas/volumes, POINTLIST entries define single or multiple coordinates that serve as specific positions.


Why You Can't Iterate POINTLIST with pairs()

Just like TRIGGER, the POINTLIST object cannot be iterated with pairs().

  1. Engine-managed container
    The list is stored internally by the game engine. Lua only receives integer handles when .dat files are loaded.

  2. Non-stable IDs
    Each entry in POINTLIST is just an engine-assigned handle. IDs change between play sessions and are not guaranteed to be stable.

Instead of iterating, you must directly reference the desired point by name (e.g., POINTLIST._PLAYER_START).

Note on Key Access

Keys in POINTLIST and TRIGGER are case-insensitive.

For example, the following will all work and return the same value:

DATLoad("Chapt1Trans.DAT", 2)
print(POINTLIST._PLAYER_START)
print(POINTLIST._player_start)
print(POINTLIST._PlAyEr_StArT)
tip

However, best practice is to always use UPPERCASE keys to match the game's internal style and avoid confusion.

Example Usage

Some internal Lua code shows how POINTLIST entries are used:

-- Teleport the player to a point in the world
AreaTransitionPoint(0, POINTLIST._BUS_POLICEDROPPLAYER, 1, true)

-- Spawn a vehicle at a defined point
shared.veh1 = VehicleCreatePoint(295, POINTLIST._BUS_POLICEDROP, 1)

-- Set restart positions
SetDefaultArrestPoint(POINTLIST._RESTART_B_PS, 0)
SetDefaultArrestRestartCameraPos(POINTLIST._RESTART_B_PS_CAM)

AddArrestRestartPoint(POINTLIST._KO_SCHOOL_INFIRMOUT, 0, 8, 19, POINTLIST._ARREST_RESTART_1, 2)
AddArrestRestartPoint(POINTLIST._KO_SCHOOL_INFIRMOUT, 0, 19, 8, POINTLIST._BOYSDORM_BEDWAKEUP, 14)

-- Interior restart points
AddInteriorArrestRestartPoint(2, POINTLIST._ARREST_RESTART_1, 2, 8, 19)
AddInteriorArrestRestartPoint(2, POINTLIST._BOYSDORM_BEDWAKEUP, 14, 19, 8)

-- Get coordinates from a point
local schoolx, schooly, schoolz = GetPointList(POINTLIST._PLAYER_START)

-- Special effect anchors
EffectAddLeavesInArea(POINTLIST._LEAVESRICHAREA, 0)

-- Shop system referencing a point
ShopAddItem(0, 502, POINTLIST._STORE_DT_GENERAL_ITEM3, 100, 0, callbackFunction, 1)

-- Spawn an NPC at a point
Players[1].Player = PedCreatePoint(130, POINTLIST._CM_GARYSTAND, 1) -- 130: Gary Smith model ID

Minimal example:

-- Move player instantly to dorm restart point
AreaTransitionPoint(0, POINTLIST._BOYSDORM_BEDWAKEUP, 1, true)

Points Dump

For the full list of points (including how many positions each contains), see the Points Dump page.

Notes & Best Practices

  • Always load the correct .dat file with DATLoad before referencing a point. Otherwise, the value will stay -1.
  • Some points contain multiple sub-coordinates (like an array). Use GetPointList to retrieve them, and use GetPointListSize to get the number of sub-coordinates.
  • Point handles are not stable; always reference by constant name.
  • Use points to avoid hardcoding coordinates in scripts — it keeps your mod compatible with mission logic.