From 7a817300fd90ea53e4a476f0e119066cf8425646 Mon Sep 17 00:00:00 2001
From: Aylong <69762909+AyIong@users.noreply.github.com>
Date: Tue, 24 Dec 2024 21:32:38 +0200
Subject: [PATCH] Improve and extend `fieldset_block` and `examine_block`
(#88678)
## About The Pull Request
Maked `fieldset_block` and `examine_block` more stylish and neat, also
`fieldset_block` no longer has a centred title.
Renamed `examine_block` to `boxed_message` and adds
`custom_boxed_message` which can be colored.
- AdminPMs, admin tickets and vote results has been wrapped into
`fieldset_block` for comfort and visibility
- Health Analyzer results painted to blue
- Vote notice and tips of the round wrapped to purple
`custom_boxed_message`
- Tooltip text border color, now uses text color, not just white
## Why It's Good For The Game
Demonstration in both themes
Dark



Light



## Changelog
:cl:
qol: AdminPMs, admin tickets, vote results and started vote notification
are now much more visible in the chat.
qol: Boxed messages in chat (like examine), has been restyled.
/:cl:
---
code/__DEFINES/chat.dm | 8 +-
code/__HELPERS/game.dm | 2 +-
code/_onclick/hud/alert.dm | 2 +-
code/controllers/subsystem/map_vote.dm | 4 +-
code/controllers/subsystem/polling.dm | 2 +-
code/controllers/subsystem/vote.dm | 6 +-
code/datums/ai_laws/ai_laws.dm | 2 +-
code/datums/components/trader/trader.dm | 4 +-
code/datums/elements/slapcrafting.dm | 4 +-
code/datums/elements/weapon_description.dm | 2 +-
code/datums/mind/skills.dm | 2 +-
code/datums/mood.dm | 2 +-
code/datums/votes/_vote_datum.dm | 9 ++-
.../objects/items/AI_modules/_AI_modules.dm | 2 +-
code/game/objects/items/devices/flashlight.dm | 2 +-
.../items/devices/scanners/gas_analyzer.dm | 2 +-
.../items/devices/scanners/health_analyzer.dm | 8 +-
.../items/devices/scanners/slime_scanner.dm | 2 +-
code/modules/admin/topic.dm | 2 +-
code/modules/admin/verbs/adminhelp.dm | 7 +-
code/modules/admin/verbs/adminpm.dm | 28 ++-----
code/modules/admin/verbs/mapping.dm | 2 +-
code/modules/buildmode/submodes/advanced.dm | 2 +-
code/modules/buildmode/submodes/area_edit.dm | 2 +-
code/modules/buildmode/submodes/basic.dm | 2 +-
code/modules/buildmode/submodes/boom.dm | 2 +-
code/modules/buildmode/submodes/copy.dm | 2 +-
code/modules/buildmode/submodes/delete.dm | 2 +-
code/modules/buildmode/submodes/fill.dm | 2 +-
code/modules/buildmode/submodes/map_export.dm | 2 +-
code/modules/buildmode/submodes/mapgen.dm | 2 +-
code/modules/buildmode/submodes/outfit.dm | 2 +-
code/modules/buildmode/submodes/proccall.dm | 2 +-
code/modules/buildmode/submodes/smite.dm | 2 +-
code/modules/buildmode/submodes/throwing.dm | 2 +-
code/modules/buildmode/submodes/tweakcomps.dm | 2 +-
.../buildmode/submodes/variable_edit.dm | 2 +-
code/modules/client/verbs/who.dm | 2 +-
code/modules/clothing/clothing.dm | 2 +-
code/modules/clothing/neck/_neck.dm | 2 +-
code/modules/fishing/fishing_rod.dm | 6 +-
code/modules/hydroponics/hydroitemdefines.dm | 16 ++--
code/modules/jobs/job_types/_job.dm | 2 +-
code/modules/lootpanel/misc.dm | 2 +-
code/modules/mob/emote.dm | 2 +-
.../basic/space_fauna/revenant/_revenant.dm | 2 +-
code/modules/mob/living/carbon/human/human.dm | 4 +-
.../mob/living/carbon/human/human_defense.dm | 2 +-
code/modules/mob/living/carbon/human/login.dm | 2 +-
code/modules/mob/living/silicon/laws.dm | 2 +-
code/modules/mob/mob.dm | 4 +-
code/modules/reagents/chemistry/items.dm | 2 +-
.../chemistry/machinery/reagentgrinder.dm | 2 +-
.../research/xenobiology/xenobio_camera.dm | 2 +-
.../tgui-panel/styles/tgchat/chat-dark.scss | 78 +++++++++++++++++--
.../tgui-panel/styles/tgchat/chat-light.scss | 42 ++++++++--
56 files changed, 196 insertions(+), 114 deletions(-)
diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm
index 516fe8c4e19..80fb1a07ecc 100644
--- a/code/__DEFINES/chat.dm
+++ b/code/__DEFINES/chat.dm
@@ -44,9 +44,11 @@
/// Used for debug messages to the server
#define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]")
/// Adds a generic box around whatever message you're sending in chat. Really makes things stand out.
-#define examine_block(str) ("
" + str + "
")
-/// Makes a fieldset with a name in the middle top part. Can apply additional classes
-#define fieldset_block(title, content, classes) ("")
+#define boxed_message(str) ("
" + str + "
")
+/// Adds a box around whatever message you're sending in chat. Can apply color and/or additional classes. Available colors: red, green, blue, purple. Use it like red_box
+#define custom_boxed_message(classes, str) ("
" + str + "
")
+/// Makes a fieldset with a neaty styled name. Can apply additional classes.
+#define fieldset_block(title, content, classes) ("")
/// Makes a horizontal line with text in the middle
#define separator_hr(str) ("
" + str + "
")
/// Emboldens runechat messages
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 2c285a348fa..9b80dbfc169 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -349,4 +349,4 @@
message = html_encode(message)
else
message = copytext(message, 2)
- to_chat(target, span_purple(examine_block("[source]: [message]")))
+ to_chat(target, custom_boxed_message("purple_box", span_purple("[source]: [message]")))
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 7cab2074c54..6b6c6bc9050 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -1136,7 +1136,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
return FALSE
var/list/modifiers = params2list(params)
if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat
- to_chat(usr, examine_block(jointext(examine(usr), "\n")))
+ to_chat(usr, boxed_message(jointext(examine(usr), "\n")))
return FALSE
var/datum/our_master = master_ref?.resolve()
if(our_master && click_master)
diff --git a/code/controllers/subsystem/map_vote.dm b/code/controllers/subsystem/map_vote.dm
index ced1e65e3a2..f57d73d773e 100644
--- a/code/controllers/subsystem/map_vote.dm
+++ b/code/controllers/subsystem/map_vote.dm
@@ -53,7 +53,7 @@ SUBSYSTEM_DEF(map_vote)
last_message_at = world.time
var/list/messages = args.Copy()
- to_chat(world, span_purple(examine_block("Map Vote\n[messages.Join("\n")]")))
+ to_chat(world, span_purple(boxed_message("Map Vote\n[messages.Join("\n")]")))
/datum/controller/subsystem/map_vote/proc/finalize_map_vote(datum/vote/map_vote/map_vote)
if(already_voted)
@@ -170,4 +170,4 @@ SUBSYSTEM_DEF(map_vote)
for(var/map_id in map_vote_cache)
var/datum/map_config/map = config.maplist[map_id]
data += "[map.map_name] - [map_vote_cache[map_id]]"
- tally_printout = examine_block("Current Tallies\n[data.Join("\n")]")
+ tally_printout = boxed_message("Current Tallies\n[data.Join("\n")]")
diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm
index c9c7d3ea311..5cb81498c3d 100644
--- a/code/controllers/subsystem/polling.dm
+++ b/code/controllers/subsystem/polling.dm
@@ -165,7 +165,7 @@ SUBSYSTEM_DEF(polling)
else
surrounding_image = image(chat_text_border_icon)
surrounding_icon = icon2html(surrounding_image, candidate_mob, extra_classes = "bigicon")
- var/final_message = examine_block("[surrounding_icon] [span_ooc(question)] [surrounding_icon]\n[act_jump] [act_signup] [act_never]")
+ var/final_message = boxed_message("[surrounding_icon] [span_ooc(question)] [surrounding_icon]\n[act_jump] [act_signup] [act_never]")
to_chat(candidate_mob, final_message)
// Start processing it so it updates visually the timer
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index d0e642bd3aa..d9d796782c2 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -119,7 +119,7 @@ SUBSYSTEM_DEF(vote)
)
log_vote("vote finalized", vote_log_data)
if(to_display)
- to_chat(world, span_infoplain(vote_font("\n[to_display]")))
+ to_chat(world, span_infoplain(vote_font("[to_display]")))
// Finally, doing any effects on vote completion
current_vote.finalize_vote(final_winner)
@@ -230,9 +230,9 @@ SUBSYSTEM_DEF(vote)
var/to_display = current_vote.initiate_vote(vote_initiator_name, duration)
log_vote(to_display)
- to_chat(world, span_infoplain(vote_font("\n[span_bold(to_display)]\n\
+ to_chat(world, custom_boxed_message("purple_box center", span_infoplain(vote_font("[span_bold(to_display)] \
Type vote or click here to place your votes.\n\
- You have [DisplayTimeText(duration)] to vote.")))
+ You have [DisplayTimeText(duration)] to vote."))))
// And now that it's going, give everyone a voter action
for(var/client/new_voter as anything in GLOB.clients)
diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm
index a0d1d629fc8..a25f7e694a9 100644
--- a/code/datums/ai_laws/ai_laws.dm
+++ b/code/datums/ai_laws/ai_laws.dm
@@ -442,7 +442,7 @@ GLOBAL_VAR(round_default_lawset)
/datum/ai_laws/proc/show_laws(mob/to_who)
var/list/printable_laws = get_law_list(include_zeroth = TRUE)
- to_chat(to_who, examine_block(jointext(printable_laws, "\n")))
+ to_chat(to_who, boxed_message(jointext(printable_laws, "\n")))
/datum/ai_laws/proc/associate(mob/living/silicon/M)
if(owner)
diff --git a/code/datums/components/trader/trader.dm b/code/datums/components/trader/trader.dm
index d623a9943b8..3b2675785ae 100644
--- a/code/datums/components/trader/trader.dm
+++ b/code/datums/components/trader/trader.dm
@@ -394,7 +394,7 @@ Can accept both a type path, and an instance of a datum. Type path has priority.
else
buy_info += span_notice("• [initial(thing.name)] for [product_info[TRADER_PRODUCT_INFO_PRICE]] [trader_data.currency_name][product_info[TRADER_PRODUCT_INFO_PRICE_MOD_DESCRIPTION]]; willing to buy [span_green("[tern_op_result]")]")
- to_chat(customer, examine_block(buy_info.Join("\n")))
+ to_chat(customer, boxed_message(buy_info.Join("\n")))
///Displays to the customer what the trader is selling and how much is in stock
/datum/component/trader/proc/trader_sells_what(mob/customer)
@@ -413,7 +413,7 @@ Can accept both a type path, and an instance of a datum. Type path has priority.
sell_info += span_notice("• [span_red("(OUT OF STOCK)")] [initial(thing.name)] for [product_info[TRADER_PRODUCT_INFO_PRICE]] [trader_data.currency_name]; [span_red("[tern_op_result]")] left in stock")
else
sell_info += span_notice("• [initial(thing.name)] for [product_info[TRADER_PRODUCT_INFO_PRICE]] [trader_data.currency_name]; [span_green("[tern_op_result]")] left in stock")
- to_chat(customer, examine_block(sell_info.Join("\n")))
+ to_chat(customer, boxed_message(sell_info.Join("\n")))
///Sets quantity of all products to initial(quanity); this proc is currently called during initialize
/datum/component/trader/proc/restock_products()
diff --git a/code/datums/elements/slapcrafting.dm b/code/datums/elements/slapcrafting.dm
index 4b58bddd2a0..925b2fd5755 100644
--- a/code/datums/elements/slapcrafting.dm
+++ b/code/datums/elements/slapcrafting.dm
@@ -180,7 +180,7 @@
// If we did find ingredients then add them onto the list.
if(length(string_ingredient_list))
to_chat(user, span_boldnotice("Extra Ingredients:"))
- to_chat(user, examine_block(span_notice(string_ingredient_list)))
+ to_chat(user, boxed_message(span_notice(string_ingredient_list)))
var/list/tool_list = ""
@@ -194,7 +194,7 @@
if(length(tool_list))
to_chat(user, span_boldnotice("Required Tools:"))
- to_chat(user, examine_block(span_notice(tool_list)))
+ to_chat(user, boxed_message(span_notice(tool_list)))
qdel(cur_recipe)
diff --git a/code/datums/elements/weapon_description.dm b/code/datums/elements/weapon_description.dm
index 64d044fb74a..110a490b5ca 100644
--- a/code/datums/elements/weapon_description.dm
+++ b/code/datums/elements/weapon_description.dm
@@ -57,7 +57,7 @@
SIGNAL_HANDLER
if(href_list["examine"])
- to_chat(user, span_notice(examine_block("[build_label_text(source)]")))
+ to_chat(user, span_notice(boxed_message("[build_label_text(source)]")))
/**
*
diff --git a/code/datums/mind/skills.dm b/code/datums/mind/skills.dm
index 474291d5ae0..80a78c3d950 100644
--- a/code/datums/mind/skills.dm
+++ b/code/datums/mind/skills.dm
@@ -75,4 +75,4 @@
var/datum/skill/the_skill = i
msg += "[initial(the_skill.name)] - [get_skill_level_name(the_skill)]\n"
msg += ""
- to_chat(user, examine_block(msg))
+ to_chat(user, boxed_message(msg))
diff --git a/code/datums/mood.dm b/code/datums/mood.dm
index d3f2ac70861..e10be827eb2 100644
--- a/code/datums/mood.dm
+++ b/code/datums/mood.dm
@@ -389,7 +389,7 @@
msg += span_boldnicegreen(event.description + "\n")
else
msg += "[span_grey("I don't have much of a reaction to anything right now.")]\n"
- to_chat(user, examine_block(msg))
+ to_chat(user, boxed_message(msg))
/// Updates the mob's moodies, if the area provides a mood bonus
/datum/mood/proc/check_area_mood(datum/source, area/new_area)
diff --git a/code/datums/votes/_vote_datum.dm b/code/datums/votes/_vote_datum.dm
index 76833f73ff5..957160dea7d 100644
--- a/code/datums/votes/_vote_datum.dm
+++ b/code/datums/votes/_vote_datum.dm
@@ -170,13 +170,14 @@
* Return a formatted string of text to be displayed to everyone.
*/
/datum/vote/proc/get_result_text(list/all_winners, real_winner, list/non_voters)
+ var/title_text = ""
var/returned_text = ""
if(override_question)
- returned_text += span_bold(override_question)
+ title_text += span_bold(override_question)
else
- returned_text += span_bold("[capitalize(name)] Vote")
+ title_text += span_bold("[capitalize(name)] Vote")
- returned_text += "\nWinner Selection: "
+ returned_text += "Winner Selection: "
switch(winner_method)
if(VOTE_WINNER_METHOD_NONE)
returned_text += "None"
@@ -215,7 +216,7 @@
returned_text += "\n"
returned_text += get_winner_text(all_winners, real_winner, non_voters)
- return returned_text
+ return fieldset_block(title_text, returned_text, "boxed_message purple_box")
/**
* Gets the text that displays the winning options within the result text.
diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm
index a7f8dbb1798..905443569b2 100644
--- a/code/game/objects/items/AI_modules/_AI_modules.dm
+++ b/code/game/objects/items/AI_modules/_AI_modules.dm
@@ -36,7 +36,7 @@
/obj/item/ai_module/attack_self(mob/user as mob)
..()
- to_chat(user, examine_block(display_laws()))
+ to_chat(user, boxed_message(display_laws()))
/// Returns a text display of the laws for the module.
/obj/item/ai_module/proc/display_laws()
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 94b7e14fe80..943896f29f4 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -267,7 +267,7 @@
if(length(render_list))
//display our packaged information in an examine block for easy reading
- to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
+ to_chat(user, boxed_message(jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
return ITEM_INTERACT_SUCCESS
return ITEM_INTERACT_BLOCKING
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index 112833877c4..8fc6ff4426b 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -220,7 +220,7 @@
message += span_notice("Volume: [volume] L") // don't want to change the order volume appears in, suck it
// we let the join apply newlines so we do need handholding
- to_chat(user, examine_block(jointext(message, "\n")), type = MESSAGE_TYPE_INFO)
+ to_chat(user, boxed_message(jointext(message, "\n")), type = MESSAGE_TYPE_INFO)
return TRUE
/obj/item/analyzer/ranged
diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm
index 3535bef0074..83d7df3a75a 100644
--- a/code/game/objects/items/devices/scanners/health_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/health_analyzer.dm
@@ -81,7 +81,7 @@
floor_text += "Body temperature: [scan_turf?.return_air()?.return_temperature() || "???"] "
if(user.can_read(src) && !user.is_blind())
- to_chat(user, examine_block(floor_text))
+ to_chat(user, custom_boxed_message("blue_box", floor_text))
last_scan_text = floor_text
return
@@ -410,7 +410,7 @@
. = jointext(render_list, "")
if(tochat)
- to_chat(user, examine_block(.), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO)
+ to_chat(user, custom_boxed_message("blue_box", .), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO)
return .
/obj/item/healthanalyzer/click_ctrl_shift(mob/user)
@@ -507,7 +507,7 @@
render_list += "[allergies] "
// we handled the last so we don't need handholding
- to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO)
+ to_chat(user, custom_boxed_message("blue_box", jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO)
/obj/item/healthanalyzer/click_alt(mob/user)
if(mode == SCANNER_NO_MODE)
@@ -558,7 +558,7 @@
simple_scanner.show_emotion(AID_EMOTION_HAPPY)
to_chat(user, "No wounds detected in subject.")
else
- to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
+ to_chat(user, custom_boxed_message("blue_box", jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
if(simple_scan)
var/obj/item/healthanalyzer/simple/simple_scanner = scanner
simple_scanner.show_emotion(AID_EMOTION_WARN)
diff --git a/code/game/objects/items/devices/scanners/slime_scanner.dm b/code/game/objects/items/devices/scanners/slime_scanner.dm
index 79050f0a78c..c355da8ba7d 100644
--- a/code/game/objects/items/devices/scanners/slime_scanner.dm
+++ b/code/game/objects/items/devices/scanners/slime_scanner.dm
@@ -57,4 +57,4 @@
to_render += "\n[span_notice("Core mutation in progress: [scanned_slime.crossbreed_modification]")]\
\n[span_notice("Progress in core mutation: [scanned_slime.applied_crossbreed_amount] / [SLIME_EXTRACT_CROSSING_REQUIRED]")]"
- to_chat(user, examine_block(jointext(to_render,"")))
+ to_chat(user, boxed_message(jointext(to_render,"")))
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index f517a7a7a51..0ea5e67fbf7 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -847,7 +847,7 @@
exportable_text += "[special_role_description] "
exportable_text += ADMIN_FULLMONTY_NONAME(subject)
- to_chat(src.owner, examine_block(exportable_text), confidential = TRUE)
+ to_chat(src.owner, boxed_message(exportable_text), confidential = TRUE)
else if(href_list["addjobslot"])
if(!check_rights(R_ADMIN))
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index a389980f533..4ff36ec2d01 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -403,7 +403,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
msg = sanitize(copytext_char(msg, 1, MAX_MESSAGE_LEN))
var/ref_src = "[REF(src)]"
//Message to be sent to all admins
- var/admin_msg = span_adminnotice(span_adminhelp("Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [span_linkify(keywords_lookup(msg))]"))
+ var/admin_msg = fieldset_block(
+ span_adminhelp("Ticket [TicketHref("#[id]", ref_src)]"),
+ "[LinkedReplyName(ref_src)]\n\n\
+ [span_linkify(keywords_lookup(msg))]\n\n\
+ [FullMonty(ref_src)]",
+ "boxed_message red_box")
AddInteraction("[LinkedReplyName(ref_src)]: [msg]", player_message = "[LinkedReplyName(ref_src)]: [msg]")
log_admin_private("Ticket #[id]: [key_name(initiator)]: [msg]")
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index abbcbb62ab6..4b668082d4b 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -387,20 +387,11 @@ ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM
recipient_ticket_id = recipient_ticket?.id
SSblackbox.LogAhelp(recipient_ticket_id, "Ticket Opened", send_message, recipient.ckey, src.ckey)
- to_chat(recipient,
- type = MESSAGE_TYPE_ADMINPM,
- html = "-- Administrator private message --",
- confidential = TRUE)
-
recipient.receive_ahelp(
link_to_us,
span_linkify(send_message),
)
- to_chat(recipient,
- type = MESSAGE_TYPE_ADMINPM,
- html = span_adminsay("Click on the administrator's name to reply."),
- confidential = TRUE)
to_chat(src,
type = MESSAGE_TYPE_ADMINPM,
html = span_notice("Admin PM to-[their_name_with_link]: [span_linkify(send_message)]"),
@@ -707,21 +698,11 @@ ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM
message_admins("External message from [sender] to [recipient_name_linked] : [message]")
log_admin_private("External PM: [sender] -> [recipient_name] : [message]")
- to_chat(recipient,
- type = MESSAGE_TYPE_ADMINPM,
- html = "-- Administrator private message --",
- confidential = TRUE)
-
recipient.receive_ahelp(
"[adminname]",
message,
)
- to_chat(recipient,
- type = MESSAGE_TYPE_ADMINPM,
- html = span_adminsay("Click on the administrator's name to reply."),
- confidential = TRUE)
-
admin_ticket_log(recipient, "PM From [tgs_tagged]: [message]", log_in_blackbox = FALSE)
window_flash(recipient, ignorepref = TRUE)
@@ -766,8 +747,13 @@ ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM
to_chat(
src,
type = MESSAGE_TYPE_ADMINPM,
- html = "Admin PM from-[reply_to]: [message]",
- confidential = TRUE,
+ html = fieldset_block(
+ span_adminhelp("Administrator private message"),
+ "Admin PM from-[reply_to]\n\n\
+ [message]\n\n\
+ Click on the administrator's name to reply.",
+ "boxed_message red_box"),
+ confidential = TRUE
)
current_ticket?.player_replied = FALSE
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 8504cd5262c..277b7ad36d5 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -224,7 +224,7 @@ ADMIN_VERB(create_mapping_job_icons, R_DEBUG, "Generate job landmarks icons", "G
ADMIN_VERB_VISIBILITY(debug_z_levels, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG)
ADMIN_VERB(debug_z_levels, R_DEBUG, "Debug Z-Levels", "Displays a list of all z-levels and their linkages.", ADMIN_CATEGORY_MAPPING)
- to_chat(user, examine_block(gather_z_level_information(append_grid = TRUE)), confidential = TRUE)
+ to_chat(user, boxed_message(gather_z_level_information(append_grid = TRUE)), confidential = TRUE)
/// Returns all necessary z-level information. Argument `append_grid` allows the user to see a table showing all of the z-level linkages, which is only visible and useful in-game.
/proc/gather_z_level_information(append_grid = FALSE)
diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm
index f4ebb204d6e..bb08ddaf529 100644
--- a/code/modules/buildmode/submodes/advanced.dm
+++ b/code/modules/buildmode/submodes/advanced.dm
@@ -3,7 +3,7 @@
var/atom/objholder = null
/datum/buildmode_mode/advanced/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Set object type")] -> Right Mouse Button on buildmode button\n\
[span_bold("Copy object type")] -> Left Mouse Button + Alt on turf/obj\n\
[span_bold("Place objects")] -> Left Mouse Button on turf/obj\n\
diff --git a/code/modules/buildmode/submodes/area_edit.dm b/code/modules/buildmode/submodes/area_edit.dm
index 0d9ef8dd480..e91ea26be77 100644
--- a/code/modules/buildmode/submodes/area_edit.dm
+++ b/code/modules/buildmode/submodes/area_edit.dm
@@ -9,7 +9,7 @@
..()
/datum/buildmode_mode/area_edit/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select corner")] -> Left Mouse Button on obj/turf/mob\n\
[span_bold("Paint area")] -> Left Mouse Button + Alt on turf/obj/mob\n\
[span_bold("Select area to paint")] -> Right Mouse Button on obj/turf/mob\n\
diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm
index b0108a3a37f..e68ccda926d 100644
--- a/code/modules/buildmode/submodes/basic.dm
+++ b/code/modules/buildmode/submodes/basic.dm
@@ -2,7 +2,7 @@
key = "basic"
/datum/buildmode_mode/basic/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Construct / Upgrade")] -> Left Mouse Button\n\
[span_bold("Deconstruct / Delete / Downgrade")] -> Right Mouse Button\n\
[span_bold("R-Window")] -> Left Mouse Button + Ctrl\n\
diff --git a/code/modules/buildmode/submodes/boom.dm b/code/modules/buildmode/submodes/boom.dm
index 727d001f5ca..e86d377d5d8 100644
--- a/code/modules/buildmode/submodes/boom.dm
+++ b/code/modules/buildmode/submodes/boom.dm
@@ -16,7 +16,7 @@
)
/datum/buildmode_mode/boom/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Set explosion destructiveness")] -> Right Mouse Button on buildmode button\n\
[span_bold("Kaboom")] -> Mouse Button on obj\n\n\
[span_warning("NOTE:")] Using the \"Config/Launch Supplypod\" verb allows you to do this in an IC way (i.e., making a cruise missile come down from the sky and explode wherever you click!)"))
diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm
index 88a1160a8a8..19dd34d3b4b 100644
--- a/code/modules/buildmode/submodes/copy.dm
+++ b/code/modules/buildmode/submodes/copy.dm
@@ -7,7 +7,7 @@
return ..()
/datum/buildmode_mode/copy/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Spawn a copy of selected target")] -> Left Mouse Button on obj/turf/mob\n\
[span_bold("Select target to copy")] -> Right Mouse Button on obj/mob"))
)
diff --git a/code/modules/buildmode/submodes/delete.dm b/code/modules/buildmode/submodes/delete.dm
index 7bb1a1472c0..1980375a33c 100644
--- a/code/modules/buildmode/submodes/delete.dm
+++ b/code/modules/buildmode/submodes/delete.dm
@@ -2,7 +2,7 @@
key = "delete"
/datum/buildmode_mode/delete/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Delete an object")] -> Left Mouse Button on obj/turf/mob\n\
[span_bold("Delete all objects of a type")] -> Right Mouse Button on obj/turf/mob"))
)
diff --git a/code/modules/buildmode/submodes/fill.dm b/code/modules/buildmode/submodes/fill.dm
index e2bd3a5c16a..1646f6b3a0d 100644
--- a/code/modules/buildmode/submodes/fill.dm
+++ b/code/modules/buildmode/submodes/fill.dm
@@ -7,7 +7,7 @@
var/atom/objholder = null
/datum/buildmode_mode/fill/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select corner")] -> Left Mouse Button on turf/obj/mob\n\
[span_bold("Delete region")] -> Left Mouse Button + Alt on turf/obj/mob\n\
[span_bold("Select object type")] -> Right Mouse Button on buildmode button"))
diff --git a/code/modules/buildmode/submodes/map_export.dm b/code/modules/buildmode/submodes/map_export.dm
index 19c0d57b57f..9d59263aa47 100644
--- a/code/modules/buildmode/submodes/map_export.dm
+++ b/code/modules/buildmode/submodes/map_export.dm
@@ -22,7 +22,7 @@
to_chat(builder, span_notice("[what_to_change] is now [save_flag & options[what_to_change] ? "ENABLED" : "DISABLED"]."))
/datum/buildmode_mode/map_export/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select corner")] -> Left Mouse Button on obj/turf/mob\n\
[span_bold("Set export options")] -> Right Mouse Button on buildmode button"))
)
diff --git a/code/modules/buildmode/submodes/mapgen.dm b/code/modules/buildmode/submodes/mapgen.dm
index 102660425c8..d5589872449 100644
--- a/code/modules/buildmode/submodes/mapgen.dm
+++ b/code/modules/buildmode/submodes/mapgen.dm
@@ -5,7 +5,7 @@
var/generator_path
/datum/buildmode_mode/mapgen/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select corner")] -> Left Mouse Button on turf/obj/mob\n\
[span_bold("Select generator")] -> Right Mouse Button on buildmode button"))
)
diff --git a/code/modules/buildmode/submodes/outfit.dm b/code/modules/buildmode/submodes/outfit.dm
index c3d507bf1e6..30b0f33cec1 100644
--- a/code/modules/buildmode/submodes/outfit.dm
+++ b/code/modules/buildmode/submodes/outfit.dm
@@ -7,7 +7,7 @@
return ..()
/datum/buildmode_mode/outfit/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select outfit to equip")] -> Right Mouse Button on buildmode button\n\
[span_bold("Equip the selected outfit")] -> Left Mouse Button on mob/living/carbon/human\n\
[span_bold("Strip and delete current outfit")] -> Right Mouse Button on mob/living/carbon/human"))
diff --git a/code/modules/buildmode/submodes/proccall.dm b/code/modules/buildmode/submodes/proccall.dm
index 3df1b810538..612a44cde4c 100644
--- a/code/modules/buildmode/submodes/proccall.dm
+++ b/code/modules/buildmode/submodes/proccall.dm
@@ -6,7 +6,7 @@
var/list/proc_args = null
/datum/buildmode_mode/proccall/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Choose procedure and arguments")] -> Right Mouse Button on buildmode button\n\
[span_bold("Apply procedure on object")] -> Left Mouse Button on machinery"))
)
diff --git a/code/modules/buildmode/submodes/smite.dm b/code/modules/buildmode/submodes/smite.dm
index 1ea5f415e35..7e382926c59 100644
--- a/code/modules/buildmode/submodes/smite.dm
+++ b/code/modules/buildmode/submodes/smite.dm
@@ -7,7 +7,7 @@
return ..()
/datum/buildmode_mode/smite/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select smite to use")] -> Right Mouse Button on buildmode button\n\
[span_bold("Smite the mob")] -> Left Mouse Button on mob/living"))
)
diff --git a/code/modules/buildmode/submodes/throwing.dm b/code/modules/buildmode/submodes/throwing.dm
index 587bf456e2a..c1bc4c2184e 100644
--- a/code/modules/buildmode/submodes/throwing.dm
+++ b/code/modules/buildmode/submodes/throwing.dm
@@ -8,7 +8,7 @@
return ..()
/datum/buildmode_mode/throwing/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select")] -> Left Mouse Button on turf/obj/mob\n\
[span_bold("Throw")] -> Right Mouse Button on turf/obj/mob"))
)
diff --git a/code/modules/buildmode/submodes/tweakcomps.dm b/code/modules/buildmode/submodes/tweakcomps.dm
index 89f233f9687..b0e41589917 100644
--- a/code/modules/buildmode/submodes/tweakcomps.dm
+++ b/code/modules/buildmode/submodes/tweakcomps.dm
@@ -4,7 +4,7 @@
var/rating = null
/datum/buildmode_mode/tweakcomps/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Choose the rating of the components")] -> Right Mouse Button on buildmode button\n\
[span_bold("Sets the chosen rating of the components on the machinery")] -> Left Mouse Button on machinery"))
)
diff --git a/code/modules/buildmode/submodes/variable_edit.dm b/code/modules/buildmode/submodes/variable_edit.dm
index f132cd196ce..4162af69faa 100644
--- a/code/modules/buildmode/submodes/variable_edit.dm
+++ b/code/modules/buildmode/submodes/variable_edit.dm
@@ -10,7 +10,7 @@
return ..()
/datum/buildmode_mode/varedit/show_help(client/builder)
- to_chat(builder, span_purple(examine_block(
+ to_chat(builder, span_purple(boxed_message(
"[span_bold("Select var(type) & value")] -> Right Mouse Button on buildmode button\n\
[span_bold("Set var(type) & value")] -> Left Mouse Button on turf/obj/mob\n\
[span_bold("Reset var's value")] -> Right Mouse Button on turf/obj/mob"))
diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm
index bd023ede630..c9e500e7dbc 100644
--- a/code/modules/client/verbs/who.dm
+++ b/code/modules/client/verbs/who.dm
@@ -85,7 +85,7 @@
lines += span_bold(header)
lines += payload_string
- var/finalized_string = examine_block(jointext(lines, "\n"))
+ var/finalized_string = boxed_message(jointext(lines, "\n"))
to_chat(src, finalized_string)
/// Proc that generates the applicable string to dispatch to the client for adminwho.
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 9f68581e3ab..12600338f97 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -456,7 +456,7 @@
readout += "No armor or durability information available."
var/formatted_readout = span_notice("PROTECTION CLASSES[jointext(readout, "\n")]")
- to_chat(usr, examine_block(formatted_readout))
+ to_chat(usr, boxed_message(formatted_readout))
/**
* Rounds armor_value down to the nearest 10, divides it by 10 and then converts it to Roman numerals.
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 6d97c116ab1..7fe2074175d 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -336,7 +336,7 @@
render_list += "[target.p_Their()] pulse is [pulse_pressure] and [heart_strength].\n"
//display our packaged information in an examine block for easy reading
- to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
+ to_chat(user, boxed_message(jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
///////////
//SCARVES//
diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm
index 5fcfdd07ff3..8190b21c84c 100644
--- a/code/modules/fishing/fishing_rod.dm
+++ b/code/modules/fishing/fishing_rod.dm
@@ -150,7 +150,7 @@
block += get_stat_info(get_percent, gravity_mult, "The lure will sink", "faster", "slower", span_info = TRUE)
list_clear_nulls(block)
- . += examine_block(block.Join("\n"))
+ . += boxed_message(block.Join("\n"))
if(get_percent && (material_flags & MATERIAL_EFFECTS) && length(custom_materials))
block = list()
@@ -159,7 +159,7 @@
if(material.fish_weight_modifier != 1)
var/heavier = material.fish_weight_modifier > 1 ? "heavier" : "lighter"
block += span_info("Fish made of the same material as this rod tend to be [abs(material.fish_weight_modifier - 1) * 100]% [heavier].")
- . += examine_block(block.Join("\n"))
+ . += boxed_message(block.Join("\n"))
block = list()
if(HAS_TRAIT(src, TRAIT_ROD_ATTRACT_SHINY_LOVERS))
@@ -171,7 +171,7 @@
if(HAS_TRAIT(src, TRAIT_ROD_LAVA_USABLE))
block += span_info("This fishing rod can be used to fish on lava.")
if(length(block))
- . += examine_block(block.Join("\n"))
+ . += boxed_message(block.Join("\n"))
///Used in examine_more to reduce all the copypasta when getting more information about the various stats of the fishing rod.
/obj/item/fishing_rod/proc/get_stat_info(get_percent, value, prefix, easier, harder, suffix = "with this fishing rod", span_info = FALSE, less_is_better = FALSE, offset = 1)
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index 0ffc3372042..216c913d792 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -75,22 +75,22 @@
/obj/item/plant_analyzer/proc/do_plant_stats_scan(atom/scan_target, mob/user)
if(istype(scan_target, /obj/machinery/hydroponics))
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
- to_chat(user, examine_block(scan_tray_stats(scan_target)))
+ to_chat(user, boxed_message(scan_tray_stats(scan_target)))
return TRUE
if(istype(scan_target, /obj/structure/glowshroom))
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
var/obj/structure/glowshroom/shroom_plant = scan_target
- to_chat(user, examine_block(scan_plant_stats(shroom_plant.myseed)))
+ to_chat(user, boxed_message(scan_plant_stats(shroom_plant.myseed)))
return TRUE
if(istype(scan_target, /obj/item/graft))
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
- to_chat(user, examine_block(get_graft_text(scan_target)))
+ to_chat(user, boxed_message(get_graft_text(scan_target)))
return TRUE
if(isitem(scan_target))
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
var/obj/item/scanned_object = scan_target
if(scanned_object.get_plant_seed() || istype(scanned_object, /obj/item/seeds))
- to_chat(user, examine_block(scan_plant_stats(scanned_object)))
+ to_chat(user, boxed_message(scan_plant_stats(scanned_object)))
return TRUE
if(isliving(scan_target))
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
@@ -112,19 +112,19 @@
*/
/obj/item/plant_analyzer/proc/do_plant_chem_scan(atom/scan_target, mob/user)
if(istype(scan_target, /obj/machinery/hydroponics))
- to_chat(user, examine_block(scan_tray_chems(scan_target)))
+ to_chat(user, boxed_message(scan_tray_chems(scan_target)))
return TRUE
if(istype(scan_target, /obj/structure/glowshroom))
var/obj/structure/glowshroom/shroom_plant = scan_target
- to_chat(user, examine_block(scan_plant_chems(shroom_plant.myseed)))
+ to_chat(user, boxed_message(scan_plant_chems(shroom_plant.myseed)))
return TRUE
if(istype(scan_target, /obj/item/graft))
- to_chat(user, examine_block(get_graft_text(scan_target)))
+ to_chat(user, boxed_message(get_graft_text(scan_target)))
return TRUE
if(isitem(scan_target))
var/obj/item/scanned_object = scan_target
if(scanned_object.get_plant_seed() || istype(scanned_object, /obj/item/seeds))
- to_chat(user, examine_block(scan_plant_chems(scanned_object)))
+ to_chat(user, boxed_message(scan_plant_chems(scanned_object)))
return TRUE
if(isliving(scan_target))
var/mob/living/L = scan_target
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 0646d1d1df3..0f229181b38 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -299,7 +299,7 @@
/// Gets the message that shows up when spawning as this job
/datum/job/proc/get_spawn_message()
SHOULD_NOT_OVERRIDE(TRUE)
- return examine_block(span_infoplain(jointext(get_spawn_message_information(), "\n• ")))
+ return boxed_message(span_infoplain(jointext(get_spawn_message_information(), "\n• ")))
/// Returns a list of strings that correspond to chat messages sent to this mob when they join the round.
/datum/job/proc/get_spawn_message_information()
diff --git a/code/modules/lootpanel/misc.dm b/code/modules/lootpanel/misc.dm
index 6e8448b8205..4fc3af2da29 100644
--- a/code/modules/lootpanel/misc.dm
+++ b/code/modules/lootpanel/misc.dm
@@ -7,7 +7,7 @@
var/build = owner.byond_build
var/version = owner.byond_version
if(build < 515 || (build == 515 && version < 1635))
- to_chat(owner.mob, examine_block(span_info("\
+ to_chat(owner.mob, boxed_message(span_info("\
Your version of Byond doesn't support fast image loading.\n\
Detected: [version].[build]\n\
Required version for this feature: 515.1635 or later.\n\
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index 924498332ec..d6bfa48303a 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -72,7 +72,7 @@
message += keys.Join(", ")
message += "."
message = message.Join("")
- to_chat(user, examine_block(message))
+ to_chat(user, boxed_message(message))
/datum/emote/flip
key = "flip"
diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm
index 615f314bf2e..5ac15722a5b 100644
--- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm
+++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm
@@ -117,7 +117,7 @@
var/static/cached_string = null
if(isnull(cached_string))
- cached_string = examine_block(jointext(create_login_string(), "\n"))
+ cached_string = boxed_message(jointext(create_login_string(), "\n"))
to_chat(src, cached_string, type = MESSAGE_TYPE_INFO)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index b63195b2f59..72afd4e107a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -141,7 +141,7 @@
id_examine += "" // container
id_examine += "" // text
- to_chat(viewer, examine_block(span_info(id_examine)))
+ to_chat(viewer, boxed_message(span_info(id_examine)))
///////HUDs///////
if(href_list["hud"])
@@ -318,7 +318,7 @@
sec_record_message += "\nCrime: [crime.name]"
sec_record_message += "\nDetails: [crime.details]"
sec_record_message += "\nAdded by [crime.author] at [crime.time]"
- to_chat(human_or_ghost_user, examine_block(sec_record_message))
+ to_chat(human_or_ghost_user, boxed_message(sec_record_message))
return
if(ishuman(human_or_ghost_user))
var/mob/living/carbon/human/human_user = human_or_ghost_user
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 73f63b8bfe1..95774e8b54e 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -676,7 +676,7 @@
if(quirks.len)
combined_msg += span_notice("You have these quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)].")
- to_chat(src, examine_block(combined_msg.Join("\n")))
+ to_chat(src, boxed_message(combined_msg.Join("\n")))
/mob/living/carbon/human/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone)
if(damage_type != BRUTE && damage_type != BURN)
diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm
index 03795be168e..9b3e23a3786 100644
--- a/code/modules/mob/living/carbon/human/login.dm
+++ b/code/modules/mob/living/carbon/human/login.dm
@@ -31,5 +31,5 @@
if(LAZYLEN(afk_thefts) >= AFK_THEFT_MAX_MESSAGES)
print_msg += span_warning("There may have been more, but that's all you can remember...")
- to_chat(src, examine_block(print_msg.Join("\n")))
+ to_chat(src, boxed_message(print_msg.Join("\n")))
LAZYNULL(afk_thefts)
diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm
index 1754a89aa5c..8a1861246ac 100644
--- a/code/modules/mob/living/silicon/laws.dm
+++ b/code/modules/mob/living/silicon/laws.dm
@@ -2,7 +2,7 @@
laws_sanity_check()
var/list/law_box = list(span_bold("Obey these laws:"))
law_box += laws.get_law_list(include_zeroth = TRUE)
- to_chat(src, examine_block(jointext(law_box, "\n")))
+ to_chat(src, boxed_message(jointext(law_box, "\n")))
/mob/living/silicon/proc/try_sync_laws()
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 0ff10d1f1dc..acc14dc7a00 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -532,7 +532,7 @@
var/list/result = examinify.examine_more(src)
if(!length(result))
result += span_notice("You examine [examinify] closer, but find nothing of interest...")
- result_combined = examine_block(jointext(result, " "))
+ result_combined = boxed_message(jointext(result, " "))
else
client.recent_examines[ref_to_atom] = world.time // set to when we last normal examine'd them
@@ -543,7 +543,7 @@
var/list/result = examinify.examine(src)
var/atom_title = examinify.examine_title(src, thats = TRUE)
SEND_SIGNAL(src, COMSIG_MOB_EXAMINING, examinify, result)
- result_combined = (atom_title ? fieldset_block("[span_slightly_larger(atom_title)].", jointext(result, " "), "examine_block") : examine_block(jointext(result, " ")))
+ result_combined = (atom_title ? fieldset_block("[atom_title]", jointext(result, " "), "boxed_message") : boxed_message(jointext(result, " ")))
to_chat(src, span_infoplain(result_combined))
SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify)
diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm
index 1e712db9c23..f7501f36fc4 100644
--- a/code/modules/reagents/chemistry/items.dm
+++ b/code/modules/reagents/chemistry/items.dm
@@ -132,7 +132,7 @@
out_message += "[round(reagent.volume, 0.01)]u of [reagent.name], Purity: [round(reagent.purity, 0.000001)*100]%, [(scanmode?"[(reagent.overdose_threshold?"Overdose: [reagent.overdose_threshold]u, ":"")]Base pH: [initial(reagent.ph)], Current pH: [reagent.ph].":"Current pH: [reagent.ph].")]\n"
if(scanmode)
out_message += "Analysis: [reagent.description]\n"
- to_chat(user, examine_block(span_notice("[out_message.Join()]")))
+ to_chat(user, boxed_message(span_notice("[out_message.Join()]")))
desc = "An electrode attached to a small circuit box that will display details of a solution. Can be toggled to provide a description of each of the reagents. The screen currently displays detected vol: [round(cont.volume, 0.01)] detected pH:[round(cont.reagents.ph, 0.1)]."
return ITEM_INTERACT_SUCCESS
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index a009ab35dd1..a6938f5dcf5 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -387,7 +387,7 @@
if("mix")
mix(5 SECONDS, user)
if("examine")
- to_chat(user, examine_block(jointext(examine(user), "\n")))
+ to_chat(user, boxed_message(jointext(examine(user), "\n")))
/**
* Checks if the radial menu can interact with this machine
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 66cbd4b93de..d98f62596ea 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -350,7 +350,7 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo
render_list += "• Alt-click a slime to feed it a potion."
render_list += "• Ctrl-click or a dead monkey to recycle it, or the floor to place a new monkey."
- to_chat(owner, examine_block(jointext(render_list, "\n")))
+ to_chat(owner, boxed_message(jointext(render_list, "\n")))
//
// Alternate clicks for slime, monkey and open turf if using a xenobio console
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index b3cdfa6e880..e009982f43f 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -42,6 +42,10 @@ a.popt {
text-decoration: none;
}
+.center {
+ text-align: center;
+}
+
/* POPUPS */
.popup {
@@ -769,6 +773,10 @@ em {
font-size: 60%;
}
+.smaller {
+ font-size: 80%;
+}
+
.slightly_larger {
font-size: 115%;
}
@@ -966,16 +974,70 @@ em {
margin-left: 2.5em;
}
-.examine_block {
- background: hsl(220, 5.3%, 11.2%);
- border: 1px solid hsl(213.6, 37.9%, 74.1%);
- margin: 0.5em;
- padding: 0.5em 0.75em;
-}
-
.tooltip {
font-style: italic;
- border-bottom: 1px dashed #fff;
+ border-bottom: 1px dashed;
+}
+
+.fieldset_legend {
+ position: relative;
+ max-width: 95%;
+ font-size: 120%;
+ padding: 0.2em 0.5em;
+ background: #151515; // Chat background color
+ border: 1px solid;
+ border-color: inherit;
+ border-radius: 0.33em;
+ z-index: 1;
+
+ // "Mask" a half of the border
+ // It very rough but it only possible way i see with IE compat
+ // Replace it with normal mask-image when 516 got stable
+ &:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ height: 1.15em;
+ width: 100%;
+ background: #151515; // Chat background color
+ transform: translateY(-50%) scaleX(1.05);
+ z-index: -1;
+ }
+}
+
+.boxed_message {
+ background: hsl(220, 10%, 10%);
+ border: 1em * calc(1px / 12px) solid;
+ border-left: 1em * calc(4px / 12px) solid;
+ border-color: hsla(220, 40%, 75%, 0.25);
+ margin: 0.5em 0;
+ padding: 0.5em 0.75em;
+ border-radius: 0.33em;
+
+ &.red_box {
+ background: hsl(0, 20%, 10%);
+ border-color: hsla(0, 100%, 50%, 0.5);
+ }
+
+ &.green_box {
+ background: hsl(140, 20%, 10%);
+ border-color: hsla(120, 100%, 50%, 0.5);
+ }
+
+ &.blue_box {
+ background: hsl(220, 20%, 10%);
+ border-color: hsla(225, 90%, 65%, 0.5);
+ }
+
+ &.purple_box {
+ background: hsl(260, 25%, 12.5%);
+ border-color: hsla(260, 100%, 75%, 0.5);
+ }
+
+ hr {
+ margin: 0.5em -0.75em;
+ border-color: inherit;
+ }
}
// Provides a horizontal bar with text in the middle
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index e46cd52d507..a35c927ae79 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -984,16 +984,42 @@ h2.alert {
margin-left: 3em;
}
-.examine_block {
- background: hsl(202.5, 44.4%, 96.5%);
- border: 1px solid hsl(215.5, 39.3%, 11%);
- margin: 0.5em;
- padding: 0.5em 0.75em;
-}
-
.tooltip {
font-style: italic;
- border-bottom: 1px dashed #000;
+ border-bottom: 1px dashed;
+}
+
+.fieldset_legend {
+ background: #ffffff; // Chat background color
+
+ &:before {
+ background: #ffffff; // Chat background color
+ }
+}
+
+.boxed_message {
+ background: hsl(220, 100%, 97.5%);
+ border-color: hsla(220, 75%, 25%, 0.5);
+
+ &.red_box {
+ background: hsl(0, 100%, 97.5%);
+ border-color: hsla(0, 100%, 50%, 0.5);
+ }
+
+ &.green_box {
+ background: hsl(140, 100%, 97.5%);
+ border-color: hsl(120, 100%, 33%, 0.5);
+ }
+
+ &.blue_box {
+ background: hsl(220, 100%, 97.5%);
+ border-color: hsla(225, 100%, 50%, 0.5);
+ }
+
+ &.purple_box {
+ background: hsl(260, 100%, 97.5%);
+ border-color: hsla(260, 100%, 50%, 0.5);
+ }
}
// Provides a horizontal bar with text in the middle