> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nexdevelopment.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> Everything lives in shared/config.lua. Edit, then restart nex_animpos for changes to apply.

Everything lives in `shared/config.lua`. Edit, then `restart nex_animpos` for changes to apply.

## Command

```lua theme={null}
Config.Command = "animpos"
Config.CommandSuggestion = "Move your character"
```

| Option                     | What it does                                                             | Default                 |
| -------------------------- | ------------------------------------------------------------------------ | ----------------------- |
| `Config.Command`           | Chat command that toggles positioning mode. Lowercase, no leading slash. | `"animpos"`             |
| `Config.CommandSuggestion` | Hint text shown beside the command in the chat suggestion list.          | `"Move your character"` |

<Info>
  The command is registered unrestricted — every player can use it. There is no ACE gate in the resource itself.
</Info>

## Controls

Each value in `Config.Controls` is a [FiveM control ID](https://docs.fivem.net/docs/game-references/controls/). The defaults map to a standard keyboard layout:

| Key                          | Control ID    | Default                    | Does                                                           |
| ---------------------------- | ------------- | -------------------------- | -------------------------------------------------------------- |
| `goForward` / `goBackward`   | `32` / `33`   | `W` / `S`                  | Move forward / back                                            |
| `goLeft` / `goRight`         | `34` / `35`   | `A` / `D`                  | Move left / right                                              |
| `goUp` / `goDown`            | `85` / `48`   | `Q` / `Z`                  | Move up / down                                                 |
| `rotateLeft` / `rotateRight` | `174` / `175` | `←` / `→`                  | Orbit: rotate character. Free-fly: move character left / right |
| `arrowUp` / `arrowDown`      | `172` / `173` | `↑` / `↓`                  | Free-fly: move character forward / back                        |
| `boost` / `slow`             | `21` / `36`   | `Left Shift` / `Left Ctrl` | Free-fly: fly fast / slow                                      |
| `lookCapture`                | `25`          | `Right Mouse`              | Hold to capture the mouse and look around                      |
| `blockCommands`              | `47`          | `G`                        | Confirm — lock the position in place                           |
| `exitMoveMode`               | `73`          | `X`                        | Cancel — exit and return to the start                          |

Any control you rebind here is automatically suppressed in-game while positioning, so custom binds won't trigger vanilla actions.

## Rebindable hotkeys

```lua theme={null}
Config.Keybinds = {
    cameraToggle = 'V', -- swap between Orbit and Free-Fly
    recenter     = 'F', -- re-center the camera on the character
}
```

These two are registered through `ox_lib`, so players can remap them in **Settings → Key Bindings** under the FiveM category (they appear as `animpos_camtoggle` and `animpos_recenter`).

<Warning>
  `ox_lib` keybind defaults only apply the first time a player joins. Changing `Config.Keybinds` later won't move the key for players who already have the bind saved — they need to remap it themselves in **Settings → Key Bindings**.
</Warning>

## Movement

```lua theme={null}
Config.Offsets = {
    x = 0.1, -- left / right step (metres)
    y = 0.1, -- forward / back step
    z = 0.1, -- up / down step
    h = 3,   -- rotation step in degrees
}

Config.MovementSpeed = 0.05

Config.Steps     = { 0.01, 0.05, 0.1, 0.25, 0.5, 1.0 }
Config.StepIndex = 2 -- 0-based index into Config.Steps (-> 0.1)

Config.StepRanges = {
    move     = { min = 0.01, max = 1.0 },
    vertical = { min = 0.01, max = 1.0 },
    rotate   = { min = 1.0,  max = 45.0 }, -- degrees
    speed    = { min = 0.01, max = 0.2 },
}

Config.MaxDistance = 5.0
```

| Option                 | What it does                                                                                                             | Default                               |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
| `Config.Offsets`       | Starting step distance per axis plus degrees per rotate step. `x`, `y`, and `z` must be one of the `Config.Steps` stops. | `x/y/z = 0.1`, `h = 3`                |
| `Config.MovementSpeed` | Glide speed multiplier for held movement. Higher = faster, lower = finer.                                                | `0.05`                                |
| `Config.Steps`         | Stops the move-step slider snaps to (metres).                                                                            | `{ 0.01, 0.05, 0.1, 0.25, 0.5, 1.0 }` |
| `Config.StepIndex`     | Default slider stop, **0-based**.                                                                                        | `2` (→ `0.1`)                         |
| `Config.StepRanges`    | Min/max the in-game sliders clamp to for move / vertical / rotate / speed.                                               | see above                             |
| `Config.MaxDistance`   | How far the character may stray from the starting point (metres).                                                        | `5.0`                                 |

These are just the starting values — players can tune step size, speed, FOV, and sensitivity live from the panel while positioning.

## Camera

```lua theme={null}
Config.Camera = {
    defaultMode = 'orbit', -- 'orbit' | 'free'
    smoothing   = 14.0,    -- exponential smoothing rate; higher = snappier
    focusHeight = 0.45,    -- orbit target height above the ped root (metres)
    sensitivity = 8.0,     -- mouse-look multiplier
    invertY     = false,   -- invert vertical look

    fov    = 50.0,
    fovMin = 20.0,
    fovMax = 75.0,

    orbit = {
        radius    = 2.8,
        radiusMin = 0.8,
        radiusMax = 8.0,
        pitchMin  = -80.0,
        pitchMax  = 80.0,
        zoomStep  = 0.3,
    },

    free = {
        speed       = 8.0,
        speedMin    = 2.0,
        speedMax    = 30.0,
        boostMult   = 3.0,
        slowMult    = 0.25,
        maxDistance = 30.0, -- how far the fly-cam may stray from the start point
        zoomStep    = 1.0,  -- wheel adjusts fly-speed by this much
    },
}
```

| Option                        | What it does                                                         | Default                  |
| ----------------------------- | -------------------------------------------------------------------- | ------------------------ |
| `defaultMode`                 | Camera mode a session starts in: `'orbit'` or `'free'`.              | `'orbit'`                |
| `smoothing`                   | Exponential smoothing rate for all camera motion. Higher = snappier. | `14.0`                   |
| `focusHeight`                 | Height above the character's root the orbit camera targets (metres). | `0.45`                   |
| `sensitivity`                 | Mouse-look multiplier. Adjustable live from the panel (`1`–`20`).    | `8.0`                    |
| `invertY`                     | Invert vertical mouse-look.                                          | `false`                  |
| `fov` / `fovMin` / `fovMax`   | Default field of view and the range the FOV slider allows.           | `50.0` / `20.0` / `75.0` |
| `orbit.radius` (+ min/max)    | Orbit distance from the character and its zoom limits.               | `2.8` (`0.8`–`8.0`)      |
| `orbit.pitchMin` / `pitchMax` | Vertical orbit limits in degrees.                                    | `-80.0` / `80.0`         |
| `orbit.zoomStep`              | Metres per mouse-wheel notch in orbit mode.                          | `0.3`                    |
| `free.speed` (+ min/max)      | Fly speed and the range the wheel can set.                           | `8.0` (`2.0`–`30.0`)     |
| `free.boostMult` / `slowMult` | Speed multipliers while holding boost / slow.                        | `3.0` / `0.25`           |
| `free.maxDistance`            | Tether: how far the fly-cam may stray from the start point (metres). | `30.0`                   |
| `free.zoomStep`               | Fly-speed change per mouse-wheel notch.                              | `1.0`                    |

## Interface

```lua theme={null}
Config.Accent = '#ffffff'

Config.UI = {
    scale = 1.0, -- root rem scale (bump for 1440p+, lower for 1080p)
}

Config.UIPosition = "center-right"
```

| Option              | What it does                                                                                                                                                                                         | Default          |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `Config.Accent`     | Single accent colour that drives every highlight — active toggle, sliders, Confirm button, logo, focus. Text on top of it auto-contrasts.                                                            | `'#ffffff'`      |
| `Config.UI.scale`   | Root scale of the whole UI. Bump it for 1440p+, lower it for 1080p.                                                                                                                                  | `1.0`            |
| `Config.UIPosition` | Which corner/edge the control card sits in. One of `"top-left"`, `"top-center"`, `"top-right"`, `"center-left"`, `"center"`, `"center-right"`, `"bottom-left"`, `"bottom-center"`, `"bottom-right"`. | `"center-right"` |

<Info>
  `Config.UIPosition` only moves the control card. The controls/keybind list is always top-left.
</Info>
