> For the complete documentation index, see [llms.txt](https://docs.rainmad.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rainmad.com/resources/gta-the-crane-job/placement.md).

# Placement

## Moving the Job

Every location is a plain `vec3` / `vec4` in `cfg.lua`. Some are free to move anywhere on the map, some are pinned to the map that provides the crane and the vault.

***

### Free to move

| Field                        | What it is                             |
| ---------------------------- | -------------------------------------- |
| `cfg.heist.start.npc.coords` | The fixer NPC who hands out the job    |
| `cfg.heist.pickup.truck`     | Where the flatbed waits                |
| `cfg.heist.pickup.crane`     | Where the crane sits on the ground     |
| `cfg.heist.pickup.forklift`  | Where the forklift waits               |
| `cfg.heist.tow.dropoff`      | Drop-off bay for the car and the chest |
| `cfg.heist.buyer.coords`     | The buyer NPC at the drop-off          |

Move these anywhere. Keep the buyer inside `cfg.heist.tow.dropoffRadius` of the drop-off so the crew can reach both.

***

### Pinned to the map

| Field                           | What it is                          |
| ------------------------------- | ----------------------------------- |
| `cfg.scene.coords.crane`        | Crane base on the parking deck      |
| `cfg.scene.coords.vault`        | The vault inside the office         |
| `cfg.scene.coords.wall`         | The breakable wall, the C4 target   |
| `cfg.scene.coords.vaultDropped` | Where the crane sets the chest down |
| `cfg.scene.delivery.park`       | Flatbed bay on the deck             |
| `cfg.heist.parking.tow`         | Tow car bay on the deck             |

{% hint style="warning" %}
These match the rope-heist map's IPLs and animations. The crane clips move the arm along a fixed path baked into the map, so relocating the yard means the arm will swing somewhere the vault is not. Change them only if you are also swapping the map.
{% endhint %}

***

### The loading bay

The flatbed does not park on a fixed coordinate at the pickup. Instead it has to be backed up to the crane:

```lua
cfg.heist.pickup.loadFacing           = 180.0
cfg.heist.pickup.loadOffset           = 5.5
cfg.heist.pickup.loadRadius           = 3.0
cfg.heist.pickup.loadHeadingTolerance = 20.0
```

The spot is derived from the crane's own position and heading, so moving `cfg.heist.pickup.crane` moves the bay with it. `loadFacing = 180` means the truck's rear faces the crane; `loadHeadingTolerance` is how many degrees off square is still accepted.

Loosen `loadRadius` and `loadHeadingTolerance` if your players struggle to line the truck up.

***

### Bay markers

The two parking bays are drawn on the ground as vehicle-sized boxes:

```lua
cfg.heist.marker = {
    drawDistance = 40.0,
    towBay   = { length = 5.8, width = 2.7 },
    truckBay = { length = 9.5, width = 3.0 },
}
```

Sizes are visual only. What actually counts as parked is `cfg.heist.parking.radius` for the car and `cfg.heist.parking.truckRadius` for the flatbed.

{% hint style="info" %}
Setting `cfg.dev = true` temporarily adds in-game helpers for reading coordinates and previewing the bays while you tune them. Set it back to `false` before going live.
{% endhint %}
