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

# Skill Check

> A blocking timing minigame — circle, bar, or key sequence — that returns pass or fail.

`Bridge.SkillCheck` runs a short timing minigame and **blocks** until the player passes or fails. Use it to gate an action behind a quick test of timing — lockpicking, hacking, hotwiring. It returns a single boolean.

Three styles are available:

* **`circle`** — a pointer sweeps a ring; press the key while it's in the highlighted zone.
* **`bar`** — a marker ping-pongs across a bar; press the key inside the zone.
* **`keys`** — type a random key sequence before the timer runs out.

## Availability

Client only. Yields until the round(s) finish.

```lua theme={null}
local passed = Bridge.SkillCheck.Run(opts)   -- boolean
```

## Signature

`Bridge.SkillCheck.Run(opts)`

<ParamField path="type" type="string" default="circle">
  `circle`, `bar`, or `keys`.
</ParamField>

<ParamField path="rounds" type="number" default="1">
  How many consecutive zones the player must hit (`circle` / `bar`). Every round must pass.
</ParamField>

<ParamField path="zone" type="number" default="0.16">
  The hit-zone size as a fraction of the track, `0..1` (`circle` / `bar`). Smaller is harder.
</ParamField>

<ParamField path="speed" type="number">
  Milliseconds per sweep cycle for `circle` / `bar` (default `1200`), or the total time limit for `keys` (default `3000`). Also accepted as `speedMs`.
</ParamField>

<ParamField path="key" type="string" default="Space">
  The key glyph to press inside the zone (`circle` / `bar`). `Space` and `Enter` also always work.
</ParamField>

<ParamField path="length" type="number" default="5">
  The number of keys in the sequence for the `keys` type.
</ParamField>

## Returns

<ResponseField name="passed" type="boolean">
  `true` if the player cleared every round, `false` if they missed a zone, pressed a wrong key, or ran out of time.
</ResponseField>

## Examples

<CodeGroup>
  ```lua Circle (default) theme={null}
  CreateThread(function()
      local passed = Bridge.SkillCheck.Run({ rounds = 3, zone = 0.2, speed = 1200, key = 'e' })
      if passed then pickLock() else failLock() end
  end)
  ```

  ```lua Bar theme={null}
  local passed = Bridge.SkillCheck.Run({
      type = 'bar', rounds = 2, zone = 0.18, speed = 900,
  })
  ```

  ```lua Key sequence theme={null}
  local passed = Bridge.SkillCheck.Run({
      type = 'keys', length = 5, speed = 3500,
  })
  ```
</CodeGroup>

<Warning>
  `Bridge.SkillCheck.Run` yields until the minigame ends. Call it inside a `CreateThread`, command, or event callback.
</Warning>

<Tip>
  The pointer, zone, and progress tint to the player's theme accent (turning green on a hit, red on a miss). Set `atlas:ui "ox"` (or `atlas:ui:skillcheck "ox"`) to render the same call through ox\_lib's skill check instead.
</Tip>
