diff --git a/code/modules/admin/game_master/game_master_submenu/vents.dm b/code/modules/admin/game_master/game_master_submenu/vents.dm
index 6b236d47ae..db3b96c0b8 100644
--- a/code/modules/admin/game_master/game_master_submenu/vents.dm
+++ b/code/modules/admin/game_master/game_master_submenu/vents.dm
@@ -72,28 +72,40 @@
if("set_xeno_spawns")
var/new_number = text2num(params["value"])
if(!new_number)
- return
+ return TRUE
xeno_spawn_count = clamp(new_number, 1, 10)
- return
+ return TRUE
if("set_selected_xeno")
selected_xeno = params["new_xeno"]
xeno_spawn_count = DEFAULT_XENO_AMOUNT_TO_SPAWN
- return
+ return TRUE
if("ambush")
setup_ambush()
- return
+ return TRUE
if("spawn")
handle_vent_spawn()
- return
+ return TRUE
if("clear_ambush")
current_ambush = list()
ambush_info = initial(ambush_info)
- return
+ return TRUE
+
+ if("shake_vent")
+ var/obj/structure/pipes/vents/referenced_vent = referenced_atom
+
+ if(!referenced_vent)
+ log_debug("A submenu for [referenced_atom] was not a /obj/structure/pipes/vents. Returning.")
+ return TRUE
+
+ referenced_vent.animate_ventcrawl()
+ playsound(referenced_vent, pick('sound/effects/alien_ventcrawl1.ogg', 'sound/effects/alien_ventcrawl2.ogg'), 40, 1)
+ addtimer(CALLBACK(referenced_vent, TYPE_PROC_REF(/obj/structure/pipes/vents, animate_ventcrawl_reset)), (0.5 SECONDS))
+ return TRUE
/// Callback for when one of our registered turfs has something move across it, tells the ambush to start if set up
/datum/game_master_submenu/vents/proc/ambush_turf_movement(turf/crossed_turf, atom/movable/entering_movable)
@@ -137,7 +149,7 @@
return
referenced_vent.animate_ventcrawl()
- playsound(referenced_vent, pick('sound/effects/alien_ventcrawl1.ogg', 'sound/effects/alien_ventcrawl2.ogg'), 25, 1)
+ playsound(referenced_vent, pick('sound/effects/alien_ventcrawl1.ogg', 'sound/effects/alien_ventcrawl2.ogg'), 40, 1)
var/timer_increment = VENT_ESCAPE_INCREMENT_TIME
referenced_vent.visible_message(SPAN_NOTICE("Something begins climbing out of [referenced_vent]!"))
diff --git a/tgui/packages/tgui/interfaces/GameMasterSubmenuVents.js b/tgui/packages/tgui/interfaces/GameMasterSubmenuVents.js
index f068ffa746..59cedcde9d 100644
--- a/tgui/packages/tgui/interfaces/GameMasterSubmenuVents.js
+++ b/tgui/packages/tgui/interfaces/GameMasterSubmenuVents.js
@@ -1,5 +1,5 @@
import { useBackend } from '../backend';
-import { Stack, Dropdown, Button } from '../components';
+import { Stack, Dropdown, Button, Section } from '../components';
import { Window } from '../layouts';
export const GameMasterSubmenuVents = (props, context) => {
@@ -8,61 +8,108 @@ export const GameMasterSubmenuVents = (props, context) => {
return (
-
-
-
-
- {
- act('set_xeno_spawns', { value });
- }}
- />
-
-
- {
- act('set_selected_xeno', { new_xeno });
- }}
- />
-
-
-
-
-
-
-
-
-
- {data.ambush_info}
+
+
+
+
+
+
);
};
+
+export const GameMasterSubmenuVentsSpawningPanel = (props, context) => {
+ const { data, act } = useBackend(context);
+
+ return (
+
+
+
+
+
+ {
+ act('set_xeno_spawns', { value });
+ }}
+ />
+
+
+ {
+ act('set_selected_xeno', { new_xeno });
+ }}
+ />
+
+
+
+
+
+
+
+ );
+};
+
+export const GameMasterSubmenuVentsAmbushPanel = (props, context) => {
+ const { data, act } = useBackend(context);
+
+ return (
+
+
+
+
+
+
+ {data.ambush_info}
+
+
+ );
+};
+
+export const GameMasterSubmenuVentsMiscPanel = (props, context) => {
+ const { data, act } = useBackend(context);
+
+ return (
+
+
+
+
+
+
+ );
+};