RedM Pause Menu Configuration
All configuration lives in one file: shared/rm_config.lua. It is the only file you ever need to edit. Every value is validated at boot — a bad value is swapped for its safe default with a console warning, so a typo never takes the menu down.
⚡ Live overrides
Keys marked ⚡ Tuning can be overridden live, in game from Sheriff Desk → Tuning — no restart, no file edit. A live override beats the config value and persists in the database. Ticker, board cards and keymap rows likewise go live from their own desk panels once edited.
Core
| Key | Default | Meaning |
|---|---|---|
Cfg.Core.Framework | 'auto' | 'auto' sniffs the running core, or pin 'vorp' / 'rsg' / 'redemrp' / 'standalone' |
Cfg.Core.Locale | 'en' | One of the eight in langs/ — see Languages |
Cfg.Core.Debug | false | Floods the console with debug chatter |
Cfg.Brand.Name | 'RM' | Brand mark on the side rail |
Cfg.Brand.Tagline | 'ROLEPLAY' | Small print under the mark |
Controls
| Key | Default | Meaning |
|---|---|---|
Command | 'camp' | Chat command that opens the menu |
Key | 'P' | Default keybind — players can rebind it themselves in RedM settings |
CaptureEsc | true | Also opens the menu on ESC, with the native pause menu suppressed |
FixCommand | 'fixcamp' | Escape hatch that clears a stuck pause pose or prop |
Notifications
| Key | Default | Meaning |
|---|---|---|
Cfg.Notify.Mode | 'auto' | 'auto' uses the framework's native notifications, falling back to UI toasts on standalone · 'framework' forces native · 'ui' forces the built-in toast rack |
Stagecraft — camera and pose
| Key | Default | Meaning |
|---|---|---|
Lens | true | Cinematic side camera while the menu is open; the menu docks left. ⚡ Tuning |
Pose.On | true | Play a reading pose with a prop in hand while paused. ⚡ Tuning |
Pose.Dict / Pose.Anim / Pose.Flag | 'mech_carry_box' / 'idle' / 17 | The verified RDR3 animation combo |
Pose.Prop | 'p_cs_newspaper_02x_noanim' | Prop held in hand. Map alternatives, which need Off/Rot retuned: 'p_cs_map01x', 'p_map01x', 's_twofoldmap01x' |
Pose.Bone | 'SKEL_L_Finger12' | Bone the prop pins to |
Pose.Off / Pose.Rot | see file | Prop offset and rotation on the bone |
Appearance
Ink — base accent colours
| Key | Default |
|---|---|
accent | #B02E2E (crimson) |
accentSoft | #B02E2E1A — washed, for fills and hovers |
glow | rgba(176,46,46,0.33) |
Palettes
Five offered in preferences, each carrying the same three colours:
| Palette | Accent |
|---|---|
crimson | #B02E2E (default) |
gold | #C9A227 |
sage | #7A8B5C |
dusk | #4E6E8E |
ash | #8B8578 |
Add, remove or recolour them freely — rows keep the same three-colour shape. Cfg.DefaultPalette must name one that exists.
Cfg.DefaultSkin is 'worn' (textured), 'gilded' (gold ornate) or 'plain' (flat dark).
Scale
Cfg.Scale bounds the player's UI-scale slider: min 0.8, max 1.3, step 0.05, default 1.0.
Player customisation gates
Cfg.Allow decides which knobs players may touch. All four are ⚡ Tuning — flip them live from the desk.
| Key | Default | Controls |
|---|---|---|
Palette | true | Swapping between configured palettes |
InkColor | true | Picking a fully custom accent |
Scale | true | Resizing the UI |
Skin | true | Changing the paper skin |
Links and rail extras
Cfg.Links ⚡ Tuning holds the discord (saloon) and store (trading post) URLs.
Cfg.Socials is a list of { label, icon, url } rows; empty hides the section.
Cfg.NavExtras adds buttons to the side rail:
Cfg.NavExtras = {
{ id = 'stable', label = 'Stables', icon = 'horse', kind = 'command', value = 'stable' },
{ id = 'wiki', label = 'Handbook', icon = 'book', kind = 'url', value = 'https://example.com/handbook' },
}kind is one of 'command', 'clientEvent', 'serverEvent' or 'url'.
Dossier
Posse
| Value | Meaning |
|---|---|
false (default) | Hide the posse row |
'rsg' | Read the RSG gang label |
'redemrp' | Read the RedEM:RP gang name |
function(src) | Your own resolver — return a string or nil |
VORP has no core gang concept, so use a resolver there.
Portrait
| Value | Meaning |
|---|---|
false (default) | Hand-drawn sketch placeholder |
'https://…' | One picture for everybody |
function(src) | Per-player resolver returning a URL — the hook for a mugshot resource |
Pulse — the heartbeat card
| Key | Default | Meaning |
|---|---|---|
ShowUptime | true | Show how long the server has been up |
ShowRestart | true | Show the countdown to the next restart |
RestartTimes | { '04:00', '16:00' } | Daily restarts, 24h server time. Empty {} = none. ⚡ Tuning |
Ticker | a welcome line | Starting marquee text — staff change it live from Desk → Ticker |
Content
Bulletin
Cfg.Bulletin.Seeds plants notices only while the bulletin table is empty (first boot). After that the board runs entirely from the desk.
Eight fixed sections: dispatches (news) · law (rules) · lawmen (staff) · updates · gatherings · wanted (posters) · saloon (Discord) · trading (store).
Row shape: { section, title, body, link?, image?, date?, position? }.
Events
| Key | Default | Meaning |
|---|---|---|
DaysAhead | 30 | How far ahead the calendar looks |
AutoRestart | true | Plant virtual restart entries from Cfg.Pulse.RestartTimes |
Seeds | one sample | Seeded only while the events table is empty |
Eight fixed categories: restart · gathering · law · race · posse · trade · auction · weather.
Virtual restart entries cannot be deleted
With AutoRestart = true, restarts appear as calendar entries that are not database rows. The desk cannot delete them — turn them off in config, or change the restart times from Tuning.
Board, keymap
Cfg.Board sets which home cards start enabled — map, status (with sub-toggles for uptime, restart and ticker), wanted, news, dossier. Staff flip these live from Desk → Board.
Cfg.Keymap.On hides the keybinds card entirely when false. Seeds plants sample { key, label, desc } rows once, then it is edited from Desk → Keymap.
Desk, logbook and the wire
| Key | Default | Meaning |
|---|---|---|
Cfg.Desk.Ace | 'rm_pausemenu.desk' | Master ace — unlocks every badge plus the logbook |
Cfg.Desk.Command | 'sheriff' | Opens the desk view directly |
Cfg.Desk.Badges | all false | Per-badge aces; false means master-ace-only. See Permissions |
Cfg.Logbook.On | true | false stops writing the audit trail |
Cfg.Logbook.MaxRows | 500 | Oldest entries trimmed past this |
The Discord wire
| Key | Default | Meaning |
|---|---|---|
Cfg.Wire.On | false | Master switch |
Cfg.Wire.Url | '' | Must start https://discord.com/api/webhooks/ or the discordapp.com variant |
Cfg.Wire.Name | 'rm_pausemenu' | Webhook display name |
Cfg.Wire.LogEdits / LogTelegrams | true | What gets posted |
The webhook URL never leaves the server
It is not part of any client payload. The desk only ever shows whether a wire is set — reading and writing it are separate server-only calls.
Content limits — enforced server-side
| What | Cap |
|---|---|
| Title | 128 characters |
| Body | 2000 characters |
| Link | 256 characters, must match https?:// |
| Ticker | 300 characters |
| Bulletin entries | 100 per section |
| Event rows | 500 |
| Journal pages | 50, with 40 blocks per page |
| Keymap rows | 100 |
| Coordinates | ±10000 |
| Telegram text | 300 characters |