Lockdown Protocols

Institution-wide radio codes, declared from the dashboard.

Lockdown Radio Codes are the seven standing alert states your site can be put into. Staff declare one from the moderator panel, and the in-game lockdown controller answers with music, lighting, a side panel, a siren and a PA announcement. They run alongside Site Events — two separate addons sharing one world.

The codes

CommandCodeWhat it means
!lrc amber AMBER
VTG/A/AMBER · priority A
Cognitohazardous threat detected. Do not look, listen, or interact. Remain stationary.
!lrc blue BLUE
VTG/C/BLUE · priority C
Minor containment breach detected. Combatives respond.
!lrc superblue SUPERBLUE
VTG/B/SUPERBLUE · priority B
Containment breach detected. Combatives respond. Exercise caution, await recontainment teams.
!lrc green GREEN
VTG/A/GREEN · priority A
Containment breach detected — a biological hazard is present. Combatives respond.
!lrc red RED
VTG/A/RED · priority B
Large-Scale Aggressor breach. Recontainment teams respond.
!lrc black BLACK
VTG/Z/BLACK · priority Z
Non-Terminable Threat detected. Do not engage, avoid confrontation.
!lrc white WHITE
VTG/B/WHITE · priority B
Hostile Assimilation Force detected. Combative teams engage. Fire at will.
!lrc scarlet SCARLET
NRC/B/SCARLET · priority B
Security override in force — terminable command issued.
!lrc stopall STOP ALL
VTG/D/ALLCLEAR · priority D · announced as {ALLCLEAR}
Ends every active lockdown: stops music, resets lighting, clears looping sounds and side info.

Designations and priorities above are the shipped Institution Vortigern wording. If you have renamed your site, your server says its own — see Renaming it for your own site below.

Declaring one

  1. Open the moderator panel and, under Toolbox, choose Lockdown Protocols.
  2. Find the code. The search box matches on name, designation and keywords — typing biohazard finds GREEN.
  3. Declare it, or press Copy to take the exact !lrc command and run it in game chat instead.

Both routes end in the same place. The dashboard queues the code; the addon polls every three seconds, drains the queue, and runs the sequence.

A declaration nobody collects within 60 seconds expires. Commands mean “run this now”, not “run this whenever a game server next appears” — without the expiry, a session starting the next day would drain a day-old pile of sirens in one burst. If no game server is polling, your declaration is discarded rather than banked.

What happens in game

Each code has its own sequence: a music bed, a lighting change, the side panel headline and strapline, a looping siren, a chime, and then the announcement. Timings differ per code — AMBER runs about thirty seconds from declaration to announcement, BLUE about twenty.

  • One lockdown runs at a time. A code declared mid-sequence waits its turn and runs three seconds after the current one finishes, rather than being dropped or talked over.
  • Up to eight can be waiting. Past that, further declarations are discarded, so a stuck sequence cannot bank an hour of alarms.
  • STOP ALL cuts the line. It empties the queue and runs immediately rather than waiting its turn — it exists to clear a stuck lockdown, so it must never wait behind what it is aborting.

STOP ALL does not rewind a sequence already playing. The controller runs one sequence at a time on a single thread, so while a lockdown is playing it is not polling — a STOP ALL sent from the dashboard is not collected until that sequence ends, and then runs after it. It does drop everything still queued, and it does cut ahead of anything waiting. But give a declaration its half-minute before deciding STOP ALL did not work.

STOP ALL and the events tool's ALL-CLEAR are not the same button. Each resets its own controller. ALL-CLEAR stops event sound and restores the lighting, but leaves the lockdown controller believing a lockdown is still active. If both are running, use both.

The announcement is generated, not stored

Every lockdown says the same sentence with four values swapped in, which is what lets a rename reach the radio rather than only the dashboard:

  • [⚠]〔CALLSIGN:〕”DESIGNATION”---Lockdown procedure code {CODEWORD} has been declared on priority level {PRIORITY} by proper authorities. LINE

The codeword follows the display name, so renaming AMBER to GOLD changes the braces too. STOP ALL is the one exception: it is a dashboard button called STOP ALL and the game has always announced it as {ALLCLEAR}, so its codeword stays put.

The words live on the dashboard, not in the script. The controller fetches them and re-reads them roughly once a minute, which is both why a rename lands mid-session and why the addon has room to stay under Roblox's 16 KiB script-box limit — it was at 15.9 KiB with every announcement inlined.

If the dashboard is unreachable, lockdowns run silently. The lights, music and sirens are in the script and still play; the announcement and side panel are skipped rather than falling back to stale text. The controller keeps retrying every poll, so this resolves itself once the dashboard is reachable again.

Renaming it for your own site

Everything the lockdown controller says ships branded for the institution this was built for: the designations read VTG/A/AMBER and VTG/C/BLUE, and the announcer is CARETAKER. If your community is not Vortigern, say so on Staff Hub → Protocols & Events — no source edit, and no re-pasting either addon.

Three fields rewrite the whole system at once:

  • Site code — the segment inside a designation. Set it to 19 and VTG/A/AMBER becomes 19/A/AMBER, across both controllers, in one edit.
  • Announcer callsign — who speaks. Replaces CARETAKER at the head of every announcement.
  • Site name in prose — written out in full, for the handful of announcements that name the site rather than cite it.

Every designation carries the site code, so one edit moves all of them — lockdowns, events, the reactor arc (RCT/VTG/C/SCRAM renames on its inner segment), the full-site lockdown and the detonation alike. The match is anchored to a whole segment followed by a slash, so a longer code that merely starts the same way, or a mention of the code in prose, is left alone.

Below that, every code has its own row, and each field there is optional. Leave one empty and it follows the site identity; fill it in and it wins. That is why the boxes start blank rather than pre-filled with today's values — pre-filling them would pin every code to the current wording the first time anyone pressed Save, and a later change to the site code would then reach nothing.

Where a change lands, and how soon. The dashboard updates immediately — the Toolbox cards, the copied commands, and the overview's Live Session Status badge. In game, a rename lands within about a minute — the controller re-reads its text on a timer, so you do not need to restart anything mid-session. An announcement already playing finishes with the wording it began with.

The page belongs to the Head Event Host rather than the Staff Overseer, because in most communities those are two different people. Grant it under Permits → Events → Name Events & Protocols (events.designations). The Staff Overseer, the server owner and a management override also reach it, so nobody has to appoint a host before they can fix a typo.

Values are cleaned before they are stored, and an unusable one silently reverts to the default. These strings are spoken aloud in game and parsed by the addons, so a site code may hold only letters, digits and dashes; a designation adds slashes and spaces; names may not contain quotes or angle brackets; and control characters are stripped everywhere. If a box empties itself after you save, the value was rejected rather than lost.

Who can declare a lockdown

  • Anyone with the events.protocols permit
  • Anyone with Manage Server on the Discord
  • The server owner, and anyone holding a staff-level override

The check runs on the server for every trigger, not just when the Toolbox decides which buttons to draw. Requests are limited to 20 in any 30 seconds per user.

The in-game chat trigger has its own allowlist, and it is not your permits. Each controller script carries local authorized = {…} near the top — a list of Roblox usernames — and the file as shipped contains the original author's accounts. Replace it with your own hosts before you install the script, or set statusCommand = nil to allow the dashboard only. Discord permits have no bearing on who can type the command in game.

Limitations worth knowing

No history of declarations is kept. The queue is drained and forgotten. The overview shows the currently active protocol, but nothing records who declared what, or when — if you need that for a session report, write it down as you go.

The active-protocol badge is in-memory. A bot restart clears it, and every server reads Offline until fresh heartbeats arrive. The lockdown itself is unaffected — it is running in the game, not on the dashboard. See Session Status.

Lockdown codes and event codes are deliberately disjoint, and travel on separate queues, so the two controllers cannot eat each other's commands.

SCREEN TOO NARROW

This device is below Vortigern's supported size.

Vortigern is built for phones, tablets and computers. Your screen reports under 300px of width, so panels and controls will overflow and some pages will be hard to use.

Rotate the device or open Vortigern on a larger screen for the full interface.