Live
aRandumDude reacted 🔥 to Zombie AnimalsRickySpanish updated Zombie AnimalsGoldenRatio reacted 🔥 to AutoLootBackpackDuff reacted 🔥 to Zombie Animalsdrifter reacted 😆 to Zombie AnimalsMabel reacted 🔥 to Zombie AnimalsRickySpanish published Zombie AnimalsGrandMeister reacted 🚀 to Cluster GrenadesRickySpanish followed @JeffGoldblumeJeffGoldblume followed @WrecksMabel followed @magnumkmagnumk published 🍌 Banana Shop 🍌drifter reviewed Alpha Tango **UPDATED For JULY WIPE**Khaled published Advanced ApartmentGoldenRatio published Golden Master Key ControllerDuff published LumosKap published Exile - The Forgotten LandPumpkinKing reviewed ViperNetFaceFirst published Rocket MagBarry_Allenn published MBRatesWrecks published ViperNetbadgyver published Australia Template Mapbadgyver published Austria Template Mapbadgyver published Azerbaijan Template Mapbadgyver published Bahrain Template Mapbadgyver published Bangladesh Template MapKhaled published Hackable Crate ManageraRandumDude reviewed RustShieldSovereign_Skies reviewed ApartmentControllerSlayersRust published Creators Paradise 4500K Custom Map
aRandumDude reacted 🔥 to Zombie AnimalsRickySpanish updated Zombie AnimalsGoldenRatio reacted 🔥 to AutoLootBackpackDuff reacted 🔥 to Zombie Animalsdrifter reacted 😆 to Zombie AnimalsMabel reacted 🔥 to Zombie AnimalsRickySpanish published Zombie AnimalsGrandMeister reacted 🚀 to Cluster GrenadesRickySpanish followed @JeffGoldblumeJeffGoldblume followed @WrecksMabel followed @magnumkmagnumk published 🍌 Banana Shop 🍌drifter reviewed Alpha Tango **UPDATED For JULY WIPE**Khaled published Advanced ApartmentGoldenRatio published Golden Master Key ControllerDuff published LumosKap published Exile - The Forgotten LandPumpkinKing reviewed ViperNetFaceFirst published Rocket MagBarry_Allenn published MBRatesWrecks published ViperNetbadgyver published Australia Template Mapbadgyver published Austria Template Mapbadgyver published Azerbaijan Template Mapbadgyver published Bahrain Template Mapbadgyver published Bangladesh Template MapKhaled published Hackable Crate ManageraRandumDude reviewed RustShieldSovereign_Skies reviewed ApartmentControllerSlayersRust published Creators Paradise 4500K Custom Map
Browse/Rust/Plugins/Escape Room

Escape Room

RickySpanish 5.0 (3)v1.0.9OxideCarbonExclusive#pve#events#escape
1 / 7
A procedurally generated escape room event for Rust.
Description

EscapeRoom

A procedurally generated escape room event for Rust. Players are dropped into a dungeon of dynamically built rooms, hunted by NPC carriers and a boss, and must crack a randomized four digit code to open the exit door before time runs out.

Every event is different. The layout, the NPC placements, the clue distribution, and the escape code are all rolled fresh each run, so no two playthroughs feel the same.

CORE LOOP
Players queue in a lobby with a visible countdown. When the lobby ends the event begins, an on screen timer takes over showing how long they have left, and the event goes live. Players explore room by room, kill NPC carriers for journal pages with clues, talk to wandering NPCs for riddles, fight a boss for the death code, and finally enter the four digit escape code at the exit door to win.

FEATURES

Procedural Generation
Multi room layouts with hallways, stairs, second floor, doors, and doorways
Room archetypes: start room, normal rooms, boss room, exit room
Pressure plate triggered doors
Decorative props placed by archetype

NPCs
The Turned: hostile NPC carriers placed throughout the dungeon. Each one drops a journal page on death containing a clue toward the escape code
The Unturned: peaceful talking NPCs scattered around the rooms. Players interact with them to receive spoken riddles
Boss: a final encounter that drops the code needed to unlock a separate door
Auto turrets in the boss room

Clue System
Over 40 distinct clue types generated per code, including math, parity, repetition, position, glyph shape, and journey style narrative clues
Each clue is wrapped into a thematic captive journal page with a unique flavor narrative for immersion
Clues are split between the Turned drops and the Unturned riddles, so killing and talking both reward the player

On Screen HUD
Lobby countdown HUD during the queue
Event countdown HUD during play, showing remaining time
Lives counter
Conversation panel for NPC interactions

Player Lifecycle
Saves and restores player inventory and stats across event entry and exit
Configurable lives system

Atmosphere
Optional escape room music
Lights out moments and lockdown timers for tension
Random screams

Configuration

json
1 {
2 "Auto Spawn": {
3 "Enabled": true,
4 "Interval": 3600.0,
5 "Min Players Online": 1
6 },
7 "Event Settings": {
8 "Time Limit (seconds)": 1800.0,
9 "Max Players": 6
10 },
11 "Generation": {
12 "Wallpapers Enabled": true,
13 "Wallpaper - Wall Skin ID (0 = default)": 0,
14 "Wallpaper - Flooring Skin ID (0 = default, e.g. 10386 = Asbestos Vintage Yellow)": 10386,
15 "Wallpaper - Ceiling Skin ID (0 = default, e.g. 10388 = Plasterboard)": 10388
16 },
17 "Combat": {
18 "Player Kit (if set, overrides Starter Items; requires Kits plugin)": "",
19 "Starter Items": [
20 {
21 "Shortname": "hazmatsuit",
22 "Amount": 1,
23 "Skin": 0,
24 "Container (belt, main, wear)": "wear",
25 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": ""
26 },
27 {
28 "Shortname": "rifle.ak",
29 "Amount": 1,
30 "Skin": 0,
31 "Container (belt, main, wear)": "belt",
32 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": "weapon.mod.flashlight"
33 },
34 {
35 "Shortname": "ammo.rifle",
36 "Amount": 300,
37 "Skin": 0,
38 "Container (belt, main, wear)": "main",
39 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": ""
40 },
41 {
42 "Shortname": "rocket.launcher",
43 "Amount": 1,
44 "Skin": 0,
45 "Container (belt, main, wear)": "belt",
46 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": ""
47 },
48 {
49 "Shortname": "ammo.rocket.basic",
50 "Amount": 20,
51 "Skin": 0,
52 "Container (belt, main, wear)": "main",
53 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": ""
54 },
55 {
56 "Shortname": "syringe.medical",
57 "Amount": 5,
58 "Skin": 0,
59 "Container (belt, main, wear)": "belt",
60 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": ""
61 },
62 {
63 "Shortname": "bandage",
64 "Amount": 5,
65 "Skin": 0,
66 "Container (belt, main, wear)": "belt",
67 "Weapon Mod (optional, e.g. weapon.mod.flashlight)": ""
68 }
69 ],
70 "Scientists Per Non-Start/Exit Room (Min)": 1,
71 "Scientists Per Non-Start/Exit Room (Max)": 2,
72 "Boss HP Base": 750,
73 "Boss HP Per Extra Player": 1.5,
74 "Turned HP": 150,
75 "Allow PvP Inside Event (overrides PvE plugins)": false,
76 "Allow Self Damage Inside Event (e.g. blowing yourself up, fall damage)": true,
77 "Allow Explosive Damage Between Players (overrides PvE plugins, splash from C4, satchels, grenades, etc.)": true
78 },
79 "Traps": {
80 "Enabled": true,
81 "Min Traps Per Middle Room": 2,
82 "Max Traps Per Middle Room": 4,
83 "Turret HP": 100.0,
84 "Turrets In Boss Room (Min)": 1,
85 "Turrets In Boss Room (Max)": 2,
86 "Pressure Pad Doors Enabled": true,
87 "Pressure Pad Doors Per Event": 2,
88 "Pressure Pad Unlock Seconds": 5.0
89 },
90 "NPCs": {
91 "Unturned Kit": null,
92 "Boss Kit (blank for default scientist loadout)": "",
93 "Turned Melee Damage (per swing, before randomization)": 10.0
94 },
95 "Atmosphere": {
96 "LightsOutEnabled": true,
97 "LightsOutInterval": 300.0,
98 "LightsOutDuration": 180.0,
99 "LockdownEnabled": true,
100 "LockdownInterval": 240.0,
101 "LockdownDuration": 20.0,
102 "Screams": true,
103 "ScreamMin": 30.0,
104 "ScreamMax": 90.0,
105 "ColdBreath": true,
106 "Blood": true,
107 "Force Dark For Players In Event": true,
108 "Force Dark Hour (0-23)": 2
109 },
110 "Music": {
111 "Enabled": true
112 },
113 "Rewards": {
114 "Currency System (Economics or ServerRewards)": "Economics",
115 "Currency Amount": 500,
116 "Kit": "",
117 "Reward Items (shortname:amount)": [
118 "scrap: 100",
119 "wood: 1000"
120 ],
121 "Reward Console Commands ({steamid}, {playername} placeholders)": []
122 },
123 "General": {
124 "Broadcast": true,
125 "LeaderboardMax": 100,
126 "Player Lives (minimum 1)": 5,
127 "Blocked Commands (while in escape room)": [
128 "home",
129 "tpr",
130 "tp",
131 "town",
132 "outpost",
133 "bandit",
134 "kit",
135 "backpack",
136 "remove"
137 ]
138 },
139 "Queue": {
140 "Queue Wait Time (seconds)": 60.0,
141 "Min Players To Start": 1,
142 "Announce Queue Status": true,
143 "Event Start Sound Prefab (blank to skip)": "assets/prefabs/missions/effects/mission_victory.prefab"
144 }
145}

INSTALLATION
Drop EscapeRoom.cs into your oxide/plugins folder
Edit lang strings in the lang file if you want to translate or rewrite player facing text

NOTES
All player facing text lives in the lang file, so the dungeon, journal pages, NPC dialog, and HUD labels can be fully translated or rewritten without touching the plugin source

COMMANDS
Admin commands - /es start, /es end
regular commands - /es join, /es leave

DOCS

code
1PluginReference] private Plugin EscapeRoom;
2 // === Hooks: implement any of these to react to escape room events ===
3 void OnEscapeRoomEventStart()
4 {
5 // event just started (post-queue, gameplay is live)
6 }
7
8 void OnEscapeRoomEventEnd()
9 {
10 // event ended (success, fail, timeout, or cleanup)
11 }
12
13 void OnEscapeRoomPlayerJoin(BasePlayer player)
14 {
15 // player joined the lobby/event
16 }
17
18 void OnEscapeRoomPlayerLeave(BasePlayer player)
19 {
20 // player left voluntarily
21 }
22
23 void OnEscapeRoomPlayerDied(BasePlayer player, int livesLeft)
24 {
25 // player died. livesLeft = 0 means they're out of the run
26 }
27
28 void OnEscapeRoomPlayerEscaped(BasePlayer player, float seconds)
29 {
30 // player successfully escaped. seconds = their escape time
31 }
32
33 void OnEscapeRoomBossKilled()
34 {
35 // boss was killed
36 }
37
38 private void ExampleQueries(BasePlayer player)
39 {
40 // Is an event running right now?
41 bool active = (bool)(EscapeRoom?.Call("EscapeRoomIsEventActive") ?? false);
42
43 // Who's in the current event?
44 var ids = EscapeRoom?.Call("EscapeRoomGetActivePlayerIds") as List<ulong>;
45
46 // Per-player stats (returns null if player has no record)
47 var stats = EscapeRoom?.Call("EscapeRoomGetPlayerStats", player.userID) as Dictionary<string, object>;
48 if (stats != null)
49 {
50 int attempts = Convert.ToInt32(stats[__TK0__]);
51 int escapes = Convert.ToInt32(stats[__TK0__]);
52 int fails = Convert.ToInt32(stats[__TK0__]);
53 float best = Convert.ToSingle(stats[__TK0__]);
54 float total = Convert.ToSingle(stats[__TK0__]);
55 }
56
57 // Top 10 leaderboard
58 var top = EscapeRoom?.Call("EscapeRoomGetTopLeaderboard", 10) as List<Dictionary<string, object>>;
59 if (top != null)
60 {
61 foreach (var entry in top)
62 {
63 string name = (string)entry[__TK0__];
64 float time = Convert.ToSingle(entry[__TK0__]);
65 }
66 }
67 }
$19.99
Views1.6k
Downloads54
Purchases11
Rating 5.0
Version1.0.9
PlatformRust
CategoryPlugins
CompatibleOxide · Carbon
Size283 KB
PublishedMay 6, 2026
UpdatedJul 3, 2026
✓ Reviewed for safety and integrity
RickySpanish
View profile →
Contributors
aRandumDude
Tester
MayonnaiseScc
Tester