Files
Bubberstation/code/modules/escape_menu/escape_menu.dm
Cyan b46c012970 Adds sounds to the Escape Menu (#87831)
## About The Pull Request

https://github.com/user-attachments/assets/3e07530e-c8f1-4c21-b59b-b814831fdb2d

## Why It's Good For The Game
The aforementioned escape menu felt lacking on the sound side so with
the assistance of @Sadboysuss I've added these,
they also sound pretty neat.
 
## Changelog
🆑
sound: Added sounds for the escape menu opening/closing/being open
/🆑
2024-11-17 02:39:35 +01:00

136 lines
3.3 KiB
Plaintext

GLOBAL_LIST_EMPTY(escape_menus)
/// Opens the escape menu.
/// Verb, hardcoded to Escape, set in the client skin.
/client/verb/open_escape_menu()
set name = "Open Escape Menu"
set hidden = TRUE
var/current_escape_menu = GLOB.escape_menus[ckey]
if (!isnull(current_escape_menu))
qdel(current_escape_menu)
return
reset_held_keys()
new /datum/escape_menu(src)
#define PAGE_HOME "PAGE_HOME"
#define PAGE_LEAVE_BODY "PAGE_LEAVE_BODY"
/datum/escape_menu
/// The client that owns this escape menu
var/client/client
VAR_PRIVATE
ckey
datum/screen_object_holder/base_holder
datum/screen_object_holder/page_holder
atom/movable/plane_master_controller/plane_master_controller
menu_page = PAGE_HOME
/datum/escape_menu/New(client/client)
ASSERT(!(client.ckey in GLOB.escape_menus))
ckey = client?.ckey
src.client = client
base_holder = new(client)
populate_base_ui()
page_holder = new(client)
show_page()
RegisterSignal(client, COMSIG_QDELETING, PROC_REF(on_client_qdel))
RegisterSignal(client, COMSIG_CLIENT_MOB_LOGIN, PROC_REF(on_client_mob_login))
SEND_SOUND(client, 'sound/misc/escape_menu/esc_open.ogg')
var/sound/esc_middle = sound('sound/misc/escape_menu/esc_middle.ogg', repeat = FALSE, channel = CHANNEL_ESCAPEMENU, volume = 80)
SEND_SOUND(client, esc_middle)
if (!isnull(ckey))
GLOB.escape_menus[ckey] = src
/datum/escape_menu/Destroy(force)
QDEL_NULL(base_holder)
QDEL_NULL(page_holder)
GLOB.escape_menus -= ckey
plane_master_controller.remove_filter("escape_menu_blur")
var/sound/esc_clear = sound(null, repeat = FALSE, channel = CHANNEL_ESCAPEMENU) //yes, I'm doing it like this with a null, no its absolutely intentional, cuts off the sound right as needed.
SEND_SOUND(client, esc_clear)
SEND_SOUND(client, 'sound/misc/escape_menu/esc_close.ogg')
return ..()
/datum/escape_menu/proc/on_client_qdel()
SIGNAL_HANDLER
PRIVATE_PROC(TRUE)
qdel(src)
/datum/escape_menu/proc/on_client_mob_login()
SIGNAL_HANDLER
PRIVATE_PROC(TRUE)
if (menu_page == PAGE_LEAVE_BODY)
qdel(src)
/datum/escape_menu/proc/show_page()
PRIVATE_PROC(TRUE)
page_holder.clear()
switch (menu_page)
if (PAGE_HOME)
show_home_page()
if (PAGE_LEAVE_BODY)
show_leave_body_page()
else
CRASH("Unknown escape menu page: [menu_page]")
/datum/escape_menu/proc/populate_base_ui()
PRIVATE_PROC(TRUE)
base_holder.give_screen_object(new /atom/movable/screen/fullscreen/dimmer)
add_blur()
base_holder.give_protected_screen_object(give_escape_menu_title())
base_holder.give_protected_screen_object(give_escape_menu_details())
/datum/escape_menu/proc/open_home_page()
PRIVATE_PROC(TRUE)
menu_page = PAGE_HOME
show_page()
/datum/escape_menu/proc/open_leave_body()
PRIVATE_PROC(TRUE)
menu_page = PAGE_LEAVE_BODY
show_page()
/datum/escape_menu/proc/add_blur()
PRIVATE_PROC(TRUE)
var/list/plane_master_controllers = client?.mob.hud_used.plane_master_controllers
if (isnull(plane_master_controllers))
return
plane_master_controller = plane_master_controllers[PLANE_MASTERS_NON_MASTER]
plane_master_controller.add_filter("escape_menu_blur", 1, list("type" = "blur", "size" = 2))
/atom/movable/screen/escape_menu
plane = ESCAPE_MENU_PLANE
clear_with_screen = FALSE
// The escape menu can be opened before SSatoms
INITIALIZE_IMMEDIATE(/atom/movable/screen/escape_menu)
#undef PAGE_HOME
#undef PAGE_LEAVE_BODY