# Rup-Minigames

This will document all ways to use the minigames in our resource!

## Overview

This resource exposes client-side exports you can call from other scripts to run a minigame and get a Boolean result. The resource also exposes a lower-level call `exports.rup_minigames:_openMinigame(minigameId, params)` if you prefer to invoke games by ID and pass the raw parameter table.

Both approaches are supported; the public exports are convenience wrappers that set defaults and return a plain `boolean`.

## Quick start

Example — call a game export:

```lua
local success = exports.rup_minigames:circleClicker(5, 8000, 1500, 40)
if success then
	print('Minigame success!')
else
	print('Minigame failed or cancelled')
end
```

Example — call the minigame export directly:

```lua
local promise = exports.rup_minigames:_openMinigame("circle", {
	circles = 5,
	durationMs = 8000,
	approachMs = 1500,
	radiusPx = 40,
})
-- await/promise resolution depends on your environment (Citizen.Await / p:await / p:next)
local ok = Citizen.Await and Citizen.Await(promise) or promise
if ok then print('success') end
```

## Common behavior

* Returns: `boolean` — `true` on success, `false` on failure or cancel.
* The call blocks until the NUI minigame completes (the exports await the result).
* Press `Escape` to cancel a running minigame (returns `false`).
* `durationMs = 0` (or `nil`) disables the timer for games that support it.
* `moveLimit = 0` (or `nil`) means unlimited moves where applicable.

## Exports

Each public export is a convenience wrapper around `_openMinigame` with a simple parameter list and defaults. Use these when you want a straightforward call that returns `true/false`.

{% stepper %}
{% step %}

### Circle Clicker

```lua
exports.rup_minigames:circleClicker(numberOfCircles, durationMs, approachMs, radiusPx)
```

* `numberOfCircles` (number) — default `5`
* `durationMs` (number) — default `8000`
* `approachMs` (number) — default `1500`
* `radiusPx` (number) — default `40`
  {% endstep %}

{% step %}

### Key Tempo

```lua
exports.rup_minigames:keyTempo(steps, durationMs, stepMs, hitWindow, allowedKeys)
```

* `steps` (number) — default `7`
* `durationMs` (number) — default `9000`
* `stepMs` (number) — default `950`
* `hitWindow` (number) — default `0.12`
* `allowedKeys` (string\["W", "A", "S", "D"] | nil) — optional
  {% endstep %}

{% step %}

### Sequence Memory

```lua
exports.rup_minigames:sequenceMemory(length, durationMs, showMs, gapMs, allowedKeys)
```

* `length` (number) — default `6`
* `durationMs` (number) — default `9000`
* `showMs` (number) — default `420`
* `gapMs` (number) — default `120`
* `allowedKeys` (string\["W", "A", "S", "D"] | nil) — optional
  {% endstep %}

{% step %}

### Rotor Lock

```lua
exports.rup_minigames:rotorLock(locks, durationMs, windowDeg, thresholdDeg, speed1, speed2, key)
```

* `locks` (number) — default `5`
* `durationMs` (number) — default `9000`
* `windowDeg` (number) — default `78`
* `thresholdDeg` (number) — default `18`
* `speed1` (number) — default `150`
* `speed2` (number) — default `230`
* `key` (string) — default `"E"`
  {% endstep %}

{% step %}

### Radar Sweep

```lua
exports.rup_minigames:radarSweep(rounds, durationMs, targetDeg, speedDegPerSec, key)
```

* `rounds` (number) — default `5`
* `durationMs` (number) — default `9000`
* `targetDeg` (number) — default `26`
* `speedDegPerSec` (number) — default `240`
* `key` (string) — default `"E"`
  {% endstep %}

{% step %}

### Wire Trace

```lua
exports.rup_minigames:wireTrace(durationMs, bends, tolerance, startRadius, endRadius)
```

* `durationMs` (number) — default `9000`
* `bends` (number) — default `5`
* `tolerance` (number) — default `3.4`
* `startRadius` (number) — default `6`
* `endRadius` (number) — default `6`
  {% endstep %}

{% step %}

### Signal Tuner

```lua
exports.rup_minigames:signalTuner(durationMs, lockMs, tolerance, adjustSpeed, driftSpeed)
```

* `durationMs` (number) — default `10000`
* `lockMs` (number) — default `7000`
* `tolerance` (number) — default `0.06`
* `adjustSpeed` (number) — default `0.2`
* `driftSpeed` (number) — default `0.22`
  {% endstep %}

{% step %}

### Hash Hunt

```lua
exports.rup_minigames:hashHunt(durationMs, showMs, rounds, gridSize, tokenLen, allowedMistakes)
```

* `durationMs` (number) — default `10000`
* `showMs` (number) — default `2500`
* `rounds` (number) — default `1`
* `gridSize` (number) — default `36`
* `tokenLen` (number) — default `8`
* `allowedMistakes` (number) — default `2`
  {% endstep %}

{% step %}

### Fuse Flip

```lua
exports.rup_minigames:fuseFlip(durationMs, size, scrambleMoves, moveLimit, goalOn)
```

* `durationMs` (number) — default `0` (0 = no timer)
* `size` (number) — default `4` (clamped `3..7`)
* `scrambleMoves` (number) — default `10`
* `moveLimit` (number) — default `0` (0 = unlimited)
* `goalOn` (boolean | nil) — default `true`
  {% endstep %}

{% step %}

### Flow Circuit

```lua
exports.rup_minigames:flowCircuit(durationMs, size, branches, moveLimit)
```

* `durationMs` (number) — default `0` (0 = no timer)
* `size` (number) — default `5` (clamped `4..7`)
* `branches` (number) — default `3`
* `moveLimit` (number) — default `0` (0 = unlimited)
  {% endstep %}
  {% endstepper %}

## Minigame Export

Use this when you want full control over the raw parameter table or to invoke minigames by ID.

* The call returns a promise-like object. The public exports call this and then coerce the result to a Boolean.
* If you pass `nil` for omitted params, the same defaults used by the public exports apply.

Supported `minigameId` values and their `params` (explicit):

* `"circle"` — params: `circles`, `durationMs`, `approachMs`, `radiusPx`.
* `"keys"` — params: `steps`, `durationMs`, `stepMs`, `hitWindow`, `allowedKeys`.
* `"sequence"` — params: `length`, `durationMs`, `showMs`, `gapMs`, `allowedKeys`.
* `"rotor"` — params: `locks`, `durationMs`, `windowDeg`, `thresholdDeg`, `speed1`, `speed2`, `pressKey`.
* `"radar"` — params: `rounds`, `durationMs`, `targetDeg`, `speedDegPerSec`, `pressKey`.
* `"trace"` — params: `durationMs`, `bends`, `tolerance`, `startRadius`, `endRadius`.
* `"tuner"` — params: `durationMs`, `lockMs`, `tolerance`, `adjustSpeed`, `driftSpeed`.
* `"hashhunt"` — params: `durationMs`, `showMs`, `rounds`, `gridSize`, `tokenLen`, `allowedMistakes`.
* `"fuse"` — params: `durationMs`, `size`, `scrambleMoves`, `moveLimit`, `goalOn`.
* `"flow"` — params: `durationMs`, `size`, `branches`, `moveLimit`.

## Debug command

When `Config.Debug` is enabled the resource registers a `/mt` command that can be used to quickly open each minigame for testing (types: `circle`, `keys`, `sequence`, `rotor`, `radar`, `trace`, `tuner`, `hash`, `fuse`, `flow`). Each subcommand will pop a notification indicating success or failure.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rup-scripts.gitbook.io/rupscripts/scripts/rup-minigames.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
