# Arenas

The arena system is fully configurable. You can add as many arenas as you want in `shared/config.lua`.

***

### Included Arenas

#### Classic Arena (`boardwalk`)

| Property      | Value                                      |
| ------------- | ------------------------------------------ |
| Name          | Classic Arena                              |
| Description   | Compact indoor arena with inflatable cover |
| Center        | `vec3(141.0, -2927.0, 3.9)`                |
| Radius        | 35.0                                       |
| Max team size | 4 (8 players total in TEAM/ELIM)           |
| Spawns        | 6 per team                                 |

#### Big Map (`skyscraper`)

| Property      | Value                                           |
| ------------- | ----------------------------------------------- |
| Name          | Big Map                                         |
| Description   | Large indoor arena with open lanes and barriers |
| Center        | `vec3(165.34, -3015.89, 829.95)`                |
| Radius        | 35.0                                            |
| Max team size | 6 (12 players total in TEAM/ELIM)               |
| Spawns        | 6 per team                                      |
| Collisions    | Loading enabled (`loadCollisions = true`)       |

***

### Adding a Custom Arena

To add a new arena, add an entry to `Config.Arenas`:

```lua
Config.Arenas = {
    -- ... existing arenas ...

    my_custom_arena = {
        name = "My Arena",
        description = "Description of my arena",
        image = "custom_image",             -- Image name (for the UI)
        maxTeamSize = 5,                    -- Max players per team
        center = vec3(100.0, 200.0, 30.0),  -- Arena center
        radius = 40.0,                      -- Boundary radius
        loadCollisions = false,             -- Load collisions (for elevated arenas)
        spawns = {
            RED = {
                vec4(95.0, 210.0, 30.0, 180.0),   -- x, y, z, heading
                vec4(100.0, 212.0, 30.0, 175.0),
                vec4(105.0, 210.0, 30.0, 185.0),
                -- Add as many spawns as needed
            },
            BLUE = {
                vec4(95.0, 190.0, 30.0, 0.0),
                vec4(100.0, 188.0, 30.0, 5.0),
                vec4(105.0, 190.0, 30.0, 355.0),
            },
        },
        spawnZones = {
            RED  = { radius = 7.0 },   -- Spawn protection zone
            BLUE = { radius = 7.0 },
        },
    },
}
```

***

### Arena Properties

| Property         | Type    | Required | Description                                   |
| ---------------- | ------- | -------- | --------------------------------------------- |
| `name`           | string  | Yes      | Display name in the UI                        |
| `description`    | string  | Yes      | Description shown in the UI                   |
| `image`          | string  | No       | Image identifier for the UI                   |
| `maxTeamSize`    | int     | Yes      | Max players per team on this arena            |
| `center`         | vec3    | Yes      | Center coordinates of the arena               |
| `radius`         | float   | Yes      | Play zone radius from the center              |
| `loadCollisions` | boolean | No       | Force collision loading (for elevated arenas) |
| `spawns`         | table   | Yes      | Spawn points per team (RED / BLUE)            |
| `spawnZones`     | table   | Yes      | Spawn protection zones per team               |

***

### Spawn Points

Each spawn is a `vec4(x, y, z, heading)`:

* **x, y, z** — World position
* **heading** — Direction the player faces (0–360)

Spawns are used in round-robin rotation to prevent all players from appearing at the same spot.

{% hint style="info" %}
Add at least **3 spawns per team** for good distribution. Ideally, have as many spawns as `maxTeamSize`.
{% endhint %}

***

### Spawn Protection Zones

The `spawnZone` defines a circular area around a team's spawns. Players within this zone after respawning benefit from spawn protection (duration set by `Config.Gameplay.SpawnProtectionMs`).

```lua
spawnZones = {
    RED  = { radius = 7.0 },
    BLUE = { radius = 7.0 },
}
```

***

### Arena Boundaries

The arena is defined by a circle (`center` + `radius`). If a player leaves this zone:

1. They are pushed back inside
2. If they remain out of bounds for too long, corrective measures are taken

{% hint style="warning" %}
Make sure all your spawn points are **inside** the radius defined by `center` and `radius`.
{% endhint %}
