From 7d7f284d82eed7e2d82259091014acf9bd3ff330 Mon Sep 17 00:00:00 2001
From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Date: Sat, 31 May 2025 22:12:05 -0400
Subject: [PATCH] Escape menu improvements (#91397)
## About The Pull Request
Removes the blur of the escape menu so players can sorta see what's
going on in their game while going through, so they can react in case
something's happening while they're in menu.
Changes the font of the escape menu so it's no longer the LISA font
Makes the title only show up on the home menu, so being on the suicide
panel wont show you "another day on space station 13".
Moves the 'back' button on the suicide menu to the top left.


## Why It's Good For The Game
This hopes to make the escape menu a little more easy to go through,
removing some obstruction of your game's screen so you can see what's
happening around you, and give a little generic part of submenus in case
we add more (which I do have at least one planned).
## Changelog
:cl:
qol: The escape menu no longer blurs the game in the background.
qol: The escape menu now has a more readable font, and the escape menu's
back button is now smaller and in the corner.
/:cl:
---
code/_onclick/hud/screen_object_holder.dm | 12 +-
code/modules/client/verbs/ooc.dm | 2 +-
code/modules/escape_menu/escape_menu.dm | 20 +-
code/modules/escape_menu/home_page.dm | 243 +-----------------
code/modules/escape_menu/leave_body.dm | 28 +-
.../escape_menu/screen_objects/admin_text.dm | 129 ++++++++++
.../escape_menu/screen_objects/home_text.dm | 87 +++++++
.../screen_objects/leave_body_text.dm | 24 ++
.../{ => screen_objects}/lobby_buttons.dm | 16 +-
code/modules/escape_menu/title.dm | 2 +-
icons/hud/escape_menu_icons.dmi | Bin 2659 -> 2949 bytes
tgstation.dme | 5 +-
12 files changed, 285 insertions(+), 283 deletions(-)
create mode 100644 code/modules/escape_menu/screen_objects/admin_text.dm
create mode 100644 code/modules/escape_menu/screen_objects/home_text.dm
create mode 100644 code/modules/escape_menu/screen_objects/leave_body_text.dm
rename code/modules/escape_menu/{ => screen_objects}/lobby_buttons.dm (89%)
diff --git a/code/_onclick/hud/screen_object_holder.dm b/code/_onclick/hud/screen_object_holder.dm
index 0e84ef612de..e94914b174c 100644
--- a/code/_onclick/hud/screen_object_holder.dm
+++ b/code/_onclick/hud/screen_object_holder.dm
@@ -27,7 +27,8 @@
client?.screen += screen_object
return screen_object
-/// Gives the screen object to the client, but does not qdel it when it's cleared
+/// Gives the screen object to the client, but does not qdel it when it's cleared,
+/// this is used for screen object instances you plan on giving to multiple mobs.
/datum/screen_object_holder/proc/give_protected_screen_object(atom/screen_object)
ASSERT(istype(screen_object))
@@ -39,10 +40,13 @@
ASSERT(istype(screen_object))
ASSERT((screen_object in screen_objects) || (screen_object in protected_screen_objects))
- screen_objects -= screen_object
- protected_screen_objects -= screen_object
client?.screen -= screen_object
- qdel(screen_object)
+ screen_objects -= screen_object
+ //protected objects don't get qdel'ed
+ if(screen_object in protected_screen_objects)
+ protected_screen_objects -= screen_object
+ else
+ qdel(screen_object)
/datum/screen_object_holder/proc/clear()
client?.screen -= screen_objects
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index 631d27b446a..f77143d1883 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -167,7 +167,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
/client/verb/admin_notice()
set name = "Adminnotice"
set category = "Admin"
- set desc ="Check the admin notice if it has been set"
+ set desc = "Check the admin notice if it has been set"
if(GLOB.admin_notice)
to_chat(src, "[span_boldnotice("Admin Notice:")]\n \t [GLOB.admin_notice]")
diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm
index 32cabbabb19..3b0cf71c42a 100644
--- a/code/modules/escape_menu/escape_menu.dm
+++ b/code/modules/escape_menu/escape_menu.dm
@@ -25,6 +25,8 @@ GLOBAL_LIST_EMPTY(escape_menus)
VAR_PRIVATE
ckey
+ static/atom/movable/screen/fullscreen/dimmer/dim_screen
+
datum/screen_object_holder/base_holder
datum/screen_object_holder/page_holder
@@ -41,6 +43,8 @@ GLOBAL_LIST_EMPTY(escape_menus)
src.client = client
base_holder = new(client)
+ if(isnull(dim_screen))
+ dim_screen = new()
populate_base_ui()
page_holder = new(client)
@@ -61,7 +65,6 @@ GLOBAL_LIST_EMPTY(escape_menus)
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)
@@ -98,10 +101,7 @@ GLOBAL_LIST_EMPTY(escape_menus)
/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(dim_screen)
base_holder.give_protected_screen_object(give_escape_menu_details())
/datum/escape_menu/proc/open_home_page()
@@ -116,16 +116,6 @@ GLOBAL_LIST_EMPTY(escape_menus)
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
diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm
index c9a00fcf71b..0bdcef19483 100644
--- a/code/modules/escape_menu/home_page.dm
+++ b/code/modules/escape_menu/home_page.dm
@@ -1,4 +1,5 @@
/datum/escape_menu/proc/show_home_page()
+ page_holder.give_protected_screen_object(give_escape_menu_title())
page_holder.give_screen_object(
new /atom/movable/screen/escape_menu/home_button(
null,
@@ -178,245 +179,3 @@
client?.prefs.ui_interact(client?.mob)
qdel(src)
-/atom/movable/screen/escape_menu/home_button
- mouse_opacity = MOUSE_OPACITY_OPAQUE
-
- VAR_PRIVATE
- atom/movable/screen/escape_menu/home_button_text/home_button_text
- datum/escape_menu/escape_menu
- datum/callback/on_click_callback
-
-/atom/movable/screen/escape_menu/home_button/Initialize(
- mapload,
- datum/hud/hud_owner,
- datum/escape_menu/escape_menu,
- button_text,
- offset,
- on_click_callback,
-)
- . = ..()
-
- src.escape_menu = escape_menu
- src.on_click_callback = on_click_callback
-
- home_button_text = new /atom/movable/screen/escape_menu/home_button_text(
- src,
- /* hud_owner = */ src,
- button_text,
- )
-
- vis_contents += home_button_text
-
- screen_loc = "NORTH:-[100 + (32 * offset)],WEST:110"
- transform = transform.Scale(6, 1)
-
-/atom/movable/screen/escape_menu/home_button/Destroy()
- escape_menu = null
- on_click_callback = null
-
- return ..()
-
-/atom/movable/screen/escape_menu/home_button/Click(location, control, params)
- if (!enabled())
- return
-
- on_click_callback.InvokeAsync()
-
-/atom/movable/screen/escape_menu/home_button/MouseEntered(location, control, params)
- home_button_text.set_hovered(TRUE)
-
-/atom/movable/screen/escape_menu/home_button/MouseExited(location, control, params)
- home_button_text.set_hovered(FALSE)
-
-/atom/movable/screen/escape_menu/home_button/proc/text_color()
- return enabled() ? "white" : "gray"
-
-/atom/movable/screen/escape_menu/home_button/proc/enabled()
- return TRUE
-
-// Needs to be separated so it doesn't scale
-/atom/movable/screen/escape_menu/home_button_text
- maptext_width = 200
- maptext_height = 50
- pixel_x = -80
-
- VAR_PRIVATE
- button_text
- hovered = FALSE
-
-/atom/movable/screen/escape_menu/home_button_text/Initialize(mapload, datum/hud/hud_owner, button_text)
- . = ..()
-
- src.button_text = button_text
- update_text()
-
-/// Sets the hovered state of the button, and updates the text
-/atom/movable/screen/escape_menu/home_button_text/proc/set_hovered(hovered)
- if (src.hovered == hovered)
- return
-
- src.hovered = hovered
- update_text()
-
-/atom/movable/screen/escape_menu/home_button_text/proc/update_text()
- var/atom/movable/screen/escape_menu/home_button/escape_menu_loc = loc
-
- maptext = MAPTEXT_VCR_OSD_MONO("[button_text]")
-
- if (hovered)
- maptext = "[maptext]"
-
-/atom/movable/screen/escape_menu/home_button/admin_help
- VAR_PRIVATE
- current_blink = FALSE
- is_blinking = FALSE
- last_blink_time = 0
-
- blink_interval = 0.4 SECONDS
-
-/atom/movable/screen/escape_menu/home_button/admin_help/Initialize(
- mapload,
- datum/hud/hud_owner,
- datum/escape_menu/escape_menu,
- button_text,
- offset,
- on_click_callback,
-)
- . = ..()
-
- RegisterSignal(escape_menu.client, COMSIG_ADMIN_HELP_RECEIVED, PROC_REF(on_admin_help_received))
- RegisterSignals(escape_menu.client, list(COMSIG_CLIENT_VERB_ADDED, COMSIG_CLIENT_VERB_REMOVED), PROC_REF(on_client_verb_changed))
-
- var/datum/admin_help/current_ticket = escape_menu.client?.current_ticket
- if (!isnull(current_ticket))
- connect_ticket(current_ticket)
- if (!current_ticket?.player_replied)
- begin_processing()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/Click(location, control, params)
- if (!enabled())
- return
-
- QDEL_IN(escape_menu, 0)
-
- var/client/client = escape_menu.client
-
- if (has_open_adminhelp())
- client?.view_latest_ticket()
- else
- client?.adminhelp()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/has_open_adminhelp()
- var/client/client = escape_menu.client
-
- var/datum/admin_help/current_ticket = client?.current_ticket
-
- // This is null with a closed ticket.
- // This is okay since the View Latest Ticket panel already tells you if your ticket is closed, intentionally.
- if (isnull(current_ticket))
- return FALSE
-
- // If we sent a ticket, but nobody has responded, send another one instead.
- // Not worth opening a menu when there's nothing to read, you're only going to want to send.
- if (length(current_ticket.admins_involved - client?.ckey) == 0)
- return FALSE
-
- return TRUE
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/on_admin_help_received()
- SIGNAL_HANDLER
-
- begin_processing()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/on_client_verb_changed(client/source, list/verbs_changed)
- SIGNAL_HANDLER
-
- if (/client/verb/adminhelp in verbs_changed)
- home_button_text.update_text()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/begin_processing()
- if (is_blinking)
- return
-
- is_blinking = TRUE
- current_blink = TRUE
- START_PROCESSING(SSescape_menu, src)
- home_button_text.update_text()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/end_processing()
- if (!is_blinking)
- return
-
- is_blinking = FALSE
- current_blink = FALSE
- STOP_PROCESSING(SSescape_menu, src)
- home_button_text.update_text()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/connect_ticket(datum/admin_help/admin_help)
- ASSERT(istype(admin_help))
-
- RegisterSignal(admin_help, COMSIG_ADMIN_HELP_REPLIED, PROC_REF(on_admin_help_replied))
-
-/atom/movable/screen/escape_menu/home_button/admin_help/proc/on_admin_help_replied()
- SIGNAL_HANDLER
-
- end_processing()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/enabled()
- if (!..())
- return FALSE
-
- if (!has_open_adminhelp())
- return /client/verb/adminhelp in escape_menu.client?.verbs
-
- return TRUE
-
-/atom/movable/screen/escape_menu/home_button/admin_help/process(seconds_per_tick)
- if (world.time - last_blink_time < blink_interval)
- return
-
- current_blink = !current_blink
- last_blink_time = world.time
- home_button_text.update_text()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/text_color()
- if (!enabled())
- return ..()
-
- return current_blink ? "red" : ..()
-
-/atom/movable/screen/escape_menu/home_button/admin_help/MouseEntered(location, control, params)
- . = ..()
-
- if (is_blinking)
- openToolTip(usr, src, params, content = "An admin is trying to talk to you!")
-
-/atom/movable/screen/escape_menu/home_button/admin_help/MouseExited(location, control, params)
- . = ..()
-
- closeToolTip(usr)
-
-/atom/movable/screen/escape_menu/home_button/leave_body
-
-/atom/movable/screen/escape_menu/home_button/leave_body/Initialize(
- mapload,
- datum/hud/hud_owner,
- datum/escape_menu/escape_menu,
- button_text,
- offset,
- on_click_callback,
-)
- . = ..()
-
- RegisterSignal(escape_menu.client, COMSIG_CLIENT_MOB_LOGIN, PROC_REF(on_client_mob_login))
-
-/atom/movable/screen/escape_menu/home_button/leave_body/enabled()
- if (!..())
- return FALSE
-
- return isliving(escape_menu.client?.mob)
-
-/atom/movable/screen/escape_menu/home_button/leave_body/proc/on_client_mob_login()
- SIGNAL_HANDLER
-
- home_button_text.update_text()
diff --git a/code/modules/escape_menu/leave_body.dm b/code/modules/escape_menu/leave_body.dm
index bbdd31025b4..1acbb9a82f5 100644
--- a/code/modules/escape_menu/leave_body.dm
+++ b/code/modules/escape_menu/leave_body.dm
@@ -1,6 +1,18 @@
/datum/escape_menu/proc/show_leave_body_page()
PRIVATE_PROC(TRUE)
+ page_holder.give_screen_object(
+ new /atom/movable/screen/escape_menu/lobby_button/small(
+ null,
+ /* hud_owner = */ null,
+ "Back",
+ /* tooltip_text = */ null,
+ /* pixel_offset = */ list(-260, 190),
+ CALLBACK(src, PROC_REF(open_home_page)),
+ /* button_overlay = */ "back",
+ )
+ )
+
var/static/dead_clown
if (isnull(dead_clown))
if (MC_RUNNING(SSatoms.init_stage)) // We're about to create a bunch of atoms for a human
@@ -13,7 +25,7 @@
/* hud_owner = */ null,
"Suicide",
"Perform a dramatic suicide in game",
- /* pixel_offset = */ list(-105, -1),
+ /* pixel_offset = */ list(-55, -1),
CALLBACK(src, PROC_REF(leave_suicide)),
/* button_overlay = */ dead_clown,
))
@@ -24,24 +36,12 @@
/* hud_owner = */ null,
"Ghost",
"Exit quietly, leaving your body",
- /* pixel_offset = */ list(0, -1),
+ /* pixel_offset = */ list(55, -1),
CALLBACK(src, PROC_REF(leave_ghost)),
/* button_overlay = */ "ghost",
)
)
- page_holder.give_screen_object(
- new /atom/movable/screen/escape_menu/lobby_button(
- null,
- /* hud_owner = */ null,
- "Back",
- /* tooltip_text = */ null,
- /* pixel_offset = */ list(105, -1),
- CALLBACK(src, PROC_REF(open_home_page)),
- /* button_overlay = */ "back",
- )
- )
-
/datum/escape_menu/proc/create_dead_clown()
PRIVATE_PROC(TRUE)
diff --git a/code/modules/escape_menu/screen_objects/admin_text.dm b/code/modules/escape_menu/screen_objects/admin_text.dm
new file mode 100644
index 00000000000..c9e83ae07b2
--- /dev/null
+++ b/code/modules/escape_menu/screen_objects/admin_text.dm
@@ -0,0 +1,129 @@
+/atom/movable/screen/escape_menu/home_button/admin_help
+ VAR_PRIVATE
+ current_blink = FALSE
+ is_blinking = FALSE
+ last_blink_time = 0
+
+ blink_interval = 0.4 SECONDS
+
+/atom/movable/screen/escape_menu/home_button/admin_help/Initialize(
+ mapload,
+ datum/hud/hud_owner,
+ datum/escape_menu/escape_menu,
+ button_text,
+ offset,
+ on_click_callback,
+)
+ . = ..()
+
+ RegisterSignal(escape_menu.client, COMSIG_ADMIN_HELP_RECEIVED, PROC_REF(on_admin_help_received))
+ RegisterSignals(escape_menu.client, list(COMSIG_CLIENT_VERB_ADDED, COMSIG_CLIENT_VERB_REMOVED), PROC_REF(on_client_verb_changed))
+
+ var/datum/admin_help/current_ticket = escape_menu.client?.current_ticket
+ if (!isnull(current_ticket))
+ connect_ticket(current_ticket)
+ if (!current_ticket?.player_replied)
+ begin_processing()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/Click(location, control, params)
+ if (!enabled())
+ return
+
+ QDEL_IN(escape_menu, 0)
+
+ var/client/client = escape_menu.client
+
+ if (has_open_adminhelp())
+ client?.view_latest_ticket()
+ else
+ client?.adminhelp()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/has_open_adminhelp()
+ var/client/client = escape_menu.client
+
+ var/datum/admin_help/current_ticket = client?.current_ticket
+
+ // This is null with a closed ticket.
+ // This is okay since the View Latest Ticket panel already tells you if your ticket is closed, intentionally.
+ if (isnull(current_ticket))
+ return FALSE
+
+ // If we sent a ticket, but nobody has responded, send another one instead.
+ // Not worth opening a menu when there's nothing to read, you're only going to want to send.
+ if (length(current_ticket.admins_involved - client?.ckey) == 0)
+ return FALSE
+
+ return TRUE
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/on_admin_help_received()
+ SIGNAL_HANDLER
+
+ begin_processing()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/on_client_verb_changed(client/source, list/verbs_changed)
+ SIGNAL_HANDLER
+
+ if (/client/verb/adminhelp in verbs_changed)
+ home_button_text.update_text()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/begin_processing()
+ if (is_blinking)
+ return
+
+ is_blinking = TRUE
+ current_blink = TRUE
+ START_PROCESSING(SSescape_menu, src)
+ home_button_text.update_text()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/end_processing()
+ if (!is_blinking)
+ return
+
+ is_blinking = FALSE
+ current_blink = FALSE
+ STOP_PROCESSING(SSescape_menu, src)
+ home_button_text.update_text()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/connect_ticket(datum/admin_help/admin_help)
+ ASSERT(istype(admin_help))
+
+ RegisterSignal(admin_help, COMSIG_ADMIN_HELP_REPLIED, PROC_REF(on_admin_help_replied))
+
+/atom/movable/screen/escape_menu/home_button/admin_help/proc/on_admin_help_replied()
+ SIGNAL_HANDLER
+
+ end_processing()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/enabled()
+ if (!..())
+ return FALSE
+
+ if (!has_open_adminhelp())
+ return /client/verb/adminhelp in escape_menu.client?.verbs
+
+ return TRUE
+
+/atom/movable/screen/escape_menu/home_button/admin_help/process(seconds_per_tick)
+ if (world.time - last_blink_time < blink_interval)
+ return
+
+ current_blink = !current_blink
+ last_blink_time = world.time
+ home_button_text.update_text()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/text_color()
+ if (!enabled())
+ return ..()
+
+ return current_blink ? "red" : ..()
+
+/atom/movable/screen/escape_menu/home_button/admin_help/MouseEntered(location, control, params)
+ . = ..()
+
+ if (is_blinking)
+ openToolTip(usr, src, params, content = "An admin is trying to talk to you!")
+
+/atom/movable/screen/escape_menu/home_button/admin_help/MouseExited(location, control, params)
+ . = ..()
+
+ closeToolTip(usr)
diff --git a/code/modules/escape_menu/screen_objects/home_text.dm b/code/modules/escape_menu/screen_objects/home_text.dm
new file mode 100644
index 00000000000..4364b5dcf3d
--- /dev/null
+++ b/code/modules/escape_menu/screen_objects/home_text.dm
@@ -0,0 +1,87 @@
+/atom/movable/screen/escape_menu/home_button
+ mouse_opacity = MOUSE_OPACITY_OPAQUE
+
+ VAR_PRIVATE
+ atom/movable/screen/escape_menu/home_button_text/home_button_text
+ datum/escape_menu/escape_menu
+ datum/callback/on_click_callback
+
+/atom/movable/screen/escape_menu/home_button/Initialize(
+ mapload,
+ datum/hud/hud_owner,
+ datum/escape_menu/escape_menu,
+ button_text,
+ offset,
+ on_click_callback,
+)
+ . = ..()
+
+ src.escape_menu = escape_menu
+ src.on_click_callback = on_click_callback
+
+ home_button_text = new /atom/movable/screen/escape_menu/home_button_text(
+ src,
+ /* hud_owner = */ src,
+ button_text,
+ )
+
+ vis_contents += home_button_text
+
+ screen_loc = "NORTH:-[100 + (32 * offset)],WEST:110"
+ transform = transform.Scale(6, 1)
+
+/atom/movable/screen/escape_menu/home_button/Destroy()
+ escape_menu = null
+ on_click_callback = null
+
+ return ..()
+
+/atom/movable/screen/escape_menu/home_button/Click(location, control, params)
+ if (!enabled())
+ return
+
+ on_click_callback.InvokeAsync()
+
+/atom/movable/screen/escape_menu/home_button/MouseEntered(location, control, params)
+ home_button_text.set_hovered(TRUE)
+
+/atom/movable/screen/escape_menu/home_button/MouseExited(location, control, params)
+ home_button_text.set_hovered(FALSE)
+
+/atom/movable/screen/escape_menu/home_button/proc/text_color()
+ return enabled() ? "white" : "gray"
+
+/atom/movable/screen/escape_menu/home_button/proc/enabled()
+ return TRUE
+
+// Needs to be separated so it doesn't scale
+/atom/movable/screen/escape_menu/home_button_text
+ maptext_width = 300
+ maptext_height = 50
+ pixel_x = -80
+
+ VAR_PRIVATE
+ button_text
+ hovered = FALSE
+
+/atom/movable/screen/escape_menu/home_button_text/Initialize(mapload, datum/hud/hud_owner, button_text)
+ . = ..()
+
+ src.button_text = button_text
+ update_text()
+
+/// Sets the hovered state of the button, and updates the text
+/atom/movable/screen/escape_menu/home_button_text/proc/set_hovered(hovered)
+ if (src.hovered == hovered)
+ return
+
+ src.hovered = hovered
+ update_text()
+
+/atom/movable/screen/escape_menu/home_button_text/proc/update_text()
+ var/atom/movable/screen/escape_menu/home_button/escape_menu_loc = loc
+
+ maptext = MAPTEXT_PIXELLARI("[button_text]")
+
+ if (hovered)
+ maptext = "[maptext]"
diff --git a/code/modules/escape_menu/screen_objects/leave_body_text.dm b/code/modules/escape_menu/screen_objects/leave_body_text.dm
new file mode 100644
index 00000000000..f316369e4a2
--- /dev/null
+++ b/code/modules/escape_menu/screen_objects/leave_body_text.dm
@@ -0,0 +1,24 @@
+/atom/movable/screen/escape_menu/home_button/leave_body
+
+/atom/movable/screen/escape_menu/home_button/leave_body/Initialize(
+ mapload,
+ datum/hud/hud_owner,
+ datum/escape_menu/escape_menu,
+ button_text,
+ offset,
+ on_click_callback,
+)
+ . = ..()
+
+ RegisterSignal(escape_menu.client, COMSIG_CLIENT_MOB_LOGIN, PROC_REF(on_client_mob_login))
+
+/atom/movable/screen/escape_menu/home_button/leave_body/enabled()
+ if (!..())
+ return FALSE
+
+ return isliving(escape_menu.client?.mob)
+
+/atom/movable/screen/escape_menu/home_button/leave_body/proc/on_client_mob_login()
+ SIGNAL_HANDLER
+
+ home_button_text.update_text()
diff --git a/code/modules/escape_menu/lobby_buttons.dm b/code/modules/escape_menu/screen_objects/lobby_buttons.dm
similarity index 89%
rename from code/modules/escape_menu/lobby_buttons.dm
rename to code/modules/escape_menu/screen_objects/lobby_buttons.dm
index ed3224d3d20..25135d06f98 100644
--- a/code/modules/escape_menu/lobby_buttons.dm
+++ b/code/modules/escape_menu/screen_objects/lobby_buttons.dm
@@ -56,25 +56,31 @@
closeToolTip(usr)
/atom/movable/screen/escape_menu/lobby_button/proc/add_maptext(button_text)
- SHOULD_CALL_PARENT(TRUE)
animate(src,
- maptext = MAPTEXT_VCR_OSD_MONO("[button_text]"),
+ maptext = MAPTEXT_PIXELLARI("[button_text]"),
flags = ANIMATION_CONTINUE,
)
/atom/movable/screen/escape_menu/lobby_button/small
icon = 'icons/hud/escape_menu_icons.dmi'
- font_size = 9
+ font_size = 6
maptext_width = 80
maptext_x = -20
maptext_y = -14
+/atom/movable/screen/escape_menu/lobby_button/small/add_maptext(button_text)
+ //overriding parent for a different font here.
+ animate(src,
+ maptext = MAPTEXT_GRAND9K("[button_text]"),
+ flags = ANIMATION_CONTINUE,
+ )
+
///Amount of time between animations when we fade in and out.
#define COLLAPSIBLE_BUTTON_DURATION (0.4 SECONDS)
/atom/movable/screen/escape_menu/lobby_button/small/collapsible
maptext_width = 48
- maptext_x = -5
+ maptext_x = -4
maptext_y = -44 //we change this during animation to bring it up
layer = parent_type::layer - 0.01
@@ -97,7 +103,7 @@
/atom/movable/screen/escape_menu/lobby_button/small/collapsible/add_maptext(button_text)
//more than 6 characters, lets bump the maptext down a bit, because we're smaller buttons we would be overlaying over the icon itself otherwise.
if(length(button_text) > 6)
- maptext_y -= 12
+ maptext_y -= 10
//let's take the icons out
animate(src,
transform = transform.Translate(x = end_point, y = 0),
diff --git a/code/modules/escape_menu/title.dm b/code/modules/escape_menu/title.dm
index 4b669d4aa7b..c56bfd0c990 100644
--- a/code/modules/escape_menu/title.dm
+++ b/code/modules/escape_menu/title.dm
@@ -35,7 +35,7 @@ GLOBAL_DATUM(escape_menu_title, /atom/movable/screen/escape_menu/title)
"}
- maptext = "" + subtitle_text + MAPTEXT_VCR_OSD_MONO(title_text) + ""
+ maptext = "" + subtitle_text + MAPTEXT_PIXELLARI(title_text) + ""
/atom/movable/screen/escape_menu/title/proc/on_station_name_changed()
SIGNAL_HANDLER
diff --git a/icons/hud/escape_menu_icons.dmi b/icons/hud/escape_menu_icons.dmi
index b41d5884e4cab49f0bfa0cb5803bcb171d2af71a..8f848aa25e40ec0978d4e584b22126606d372429 100644
GIT binary patch
delta 2942
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
delta 2650
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