From 2e4a5cefd80abc6c611ceac8f30e2eb80ef76bbc Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Thu, 14 May 2026 02:22:06 -0500 Subject: [PATCH 1/6] Obfuscation --- .../signals/signals_atom/signals_atom_main.dm | 2 + code/datums/components/food/edible.dm | 11 +- code/datums/elements/weapon_description.dm | 124 ---------------- code/datums/quirks/_quirk.dm | 4 +- code/game/atom/atom_examine.dm | 24 +++- code/game/objects/items.dm | 122 ++++++++++++++-- .../items/devices/scanners/health_analyzer.dm | 132 ++++++++++-------- code/game/objects/items/melee/baton.dm | 35 +++-- code/modules/mob/living/brain/brain_item.dm | 2 +- .../projectiles/ammunition/_ammunition.dm | 94 +++++++------ .../boxes_magazines/_box_magazine.dm | 16 +-- code/modules/projectiles/guns/ballistic.dm | 23 +-- code/modules/projectiles/guns/energy.dm | 35 +---- maplestation.dme | 1 - 14 files changed, 301 insertions(+), 324 deletions(-) delete mode 100644 code/datums/elements/weapon_description.dm diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 1323f8f49417..a2ad141ee685 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -11,6 +11,8 @@ #define COMSIG_ATOM_EXAMINE "atom_examine" ///from base of atom/examine_tags(): (/mob, list/examine_tags) #define COMSIG_ATOM_EXAMINE_TAGS "atom_examine_tags" +///from base of atom/examine_post_descriptor(): (/mob, list/examine_text, list/materials) +#define COMSIG_ATOM_EXAMINE_POST_DESCRIPTOR "atom_examine_post_descriptor" ///from base of atom/get_examine_name(): (/mob, list/overrides) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //Positions for overrides list diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index d4f1708a7def..5bc9cd2c6bde 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -75,7 +75,7 @@ Behavior that's still missing from this component that original food items had t /datum/component/edible/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) - RegisterSignal(parent, COMSIG_ATOM_EXAMINE_TAGS, PROC_REF(examine_tags)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE_POST_DESCRIPTOR, PROC_REF(post_examine_tags)) RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(UseByAnimal)) RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, PROC_REF(OnCraft)) RegisterSignal(parent, COMSIG_OOZE_EAT_ATOM, PROC_REF(on_ooze_eat)) @@ -111,7 +111,7 @@ Behavior that's still missing from this component that original food items had t COMSIG_ITEM_USED_AS_INGREDIENT, COMSIG_OOZE_EAT_ATOM, COMSIG_ATOM_EXAMINE, - COMSIG_ATOM_EXAMINE_TAGS, + COMSIG_ATOM_EXAMINE_POST_DESCRIPTOR, )) qdel(GetComponent(/datum/component/connect_loc_behalf)) @@ -281,13 +281,16 @@ Behavior that's still missing from this component that original food items had t var/mob/living/living_user = user living_user.taste(owner.reagents) -/datum/component/edible/proc/examine_tags(datum/source, mob/user, list/examine_tags) +/datum/component/edible/proc/post_examine_tags(datum/source, mob/user, list/examine_tags, list/materials_list) SIGNAL_HANDLER if(food_flags & FOOD_NO_EXAMINE) return for(var/foodtype in bitfield_to_list(foodtypes, FOOD_FLAGS)) - examine_tags[LOWER_TEXT(foodtype)] = "It's \a [LOWER_TEXT(foodtype)] food." + var/foodtype_string = LOWER_TEXT(foodtype) + if(materials_list[foodtype_string]) + continue // meat material and meat foodtype, primarily + materials_list[foodtype_string] = "It's \a [foodtype_string] food." /datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user) SIGNAL_HANDLER diff --git a/code/datums/elements/weapon_description.dm b/code/datums/elements/weapon_description.dm deleted file mode 100644 index c6f41c4afe60..000000000000 --- a/code/datums/elements/weapon_description.dm +++ /dev/null @@ -1,124 +0,0 @@ -/** - * - * The purpose of this element is to widely provide the ability to examine an object and determine its stats, with the ability to add - * additional notes or information based on type or other factors - * - */ -/datum/element/weapon_description - element_flags = ELEMENT_BESPOKE - argument_hash_start_idx = 2 - - // Additional proc to be run for specific object types - var/attached_proc - -/datum/element/weapon_description/Attach(datum/target, attached_proc) - . = ..() - if(!isitem(target)) // Do not attach this to anything that isn't an item - return ELEMENT_INCOMPATIBLE - RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(warning_label)) - RegisterSignal(target, COMSIG_TOPIC, PROC_REF(topic_handler)) - // Don't perform the assignment if there is nothing to assign, or if we already have something for this bespoke element - if(attached_proc && !src.attached_proc) - src.attached_proc = attached_proc - -/datum/element/weapon_description/Detach(datum/target) - . = ..() - UnregisterSignal(target, list(COMSIG_ATOM_EXAMINE, COMSIG_TOPIC)) - -/** - * - * This proc is called when the user examines an object with the associated element. This produces a hyperlinked - * text line provided that the given item meets the weapon-determining criteria (Sufficient force or notes) - * - * Arguments: - * * source - Object being examined, cast into an item variable - * * user - Unused - * * examine_texts - The output text list of the original examine function - */ -/datum/element/weapon_description/proc/warning_label(obj/item/item, mob/user, list/examine_texts) - SIGNAL_HANDLER - - if(item.force >= 5 || item.throwforce >= 5 || item.override_notes || item.offensive_notes || attached_proc) /// Only show this tag for items that could feasibly be weapons, shields, or those that have special notes - examine_texts += span_notice("See combat information.") - -/** - * - * Details the stats of the examined weapon - * - * This function is called when the user clicks the hyperlink provided by - * warning_label(). It calls build_label_text() and outputs its return value to the user - * - * Arguments: - * * source - Object being examined, sent to build_label_text() - * * href-list - List provided by the href of input values, used to know what hyperlinked action is being attempted - */ - -/datum/element/weapon_description/proc/topic_handler(atom/source, user, href_list) - SIGNAL_HANDLER - - if(href_list["examine"]) - to_chat(user, span_notice(examine_block("[build_label_text(source)]"))) - -/** - * - * Compiles a warning label detailing various statistics of the examined weapon - * - * This function is called by the "examine" function of Topic(), and compiles a number of relevant - * weapon stats into a message that is then shown to the user - * Arguments: - * * source - The object whose stats are being examined - */ -/datum/element/weapon_description/proc/build_label_text(obj/item/source) - var/list/readout = list() // Readout is used to store the text block output to the user so it all can be sent in one message - - // Doesn't show the base notes for items that have the override notes variable set to true - if(!source.override_notes) - if (source.sharpness & SHARP_EDGED) - readout += "It's sharp and could cause bleeding wounds." - if (source.sharpness & SHARP_POINTY) - readout += "It's pointy and could cause piercing wounds." - // Make sure not to divide by 0 on accident - if(source.force > 0) - readout += "It takes about [span_warning("[HITS_TO_CRIT(source.force)] melee hit\s")] to take down an enemy." - else - readout += "It does not deal noticeable melee damage." - - if(source.throwforce > 0) - readout += "It takes about [span_warning("[HITS_TO_CRIT(source.throwforce)] throwing hit\s")] to take down an enemy." - else - readout += "It does not deal noticeable throwing damage." - if(source.armour_penetration > 0 || source.block_chance > 0) - readout += "It has [span_warning("[weapon_tag_convert(source.armour_penetration)]")] armor-piercing capability and [span_warning("[weapon_tag_convert(source.block_chance)]")] blocking capability." - // Custom manual notes - if(source.offensive_notes) - readout += source.offensive_notes - - // Check if we have an additional proc, if so, add it to the readout - if(attached_proc) - readout += call(source, attached_proc)() - - // Finally bringing the fields together - return readout.Join("\n") - -/** - * - * Converts percentile based stats to an adjective appropriate for the - * examined warning label - * - * Arguments: - * * tag_val: The value of the item to be added to the tag - */ -/datum/element/weapon_description/proc/weapon_tag_convert(tag_val) - switch(tag_val) - if(0) - return "NO" - if(1 to 25) - return "LITTLE" - if(26 to 50) - return "AVERAGE" - if(51 to 75) - return "ABOVE-AVERAGE" - if(76 to INFINITY) - return "EXCELLENT" - else - return "WEIRD" diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm index 3da6017bc384..36363d46ab1e 100644 --- a/code/datums/quirks/_quirk.dm +++ b/code/datums/quirks/_quirk.dm @@ -207,7 +207,7 @@ * * Category- Which types of quirks we want to print out. Defaults to everything * * from_scan- If the source of this call is like a health analyzer or HUD, in which case QUIRK_HIDE_FROM_MEDICAL hides the quirk. */ -/mob/living/proc/get_quirk_string(medical = FALSE, category = CAT_QUIRK_ALL, from_scan = FALSE) +/mob/living/proc/get_quirk_string(medical = FALSE, category = CAT_QUIRK_ALL, from_scan = FALSE, none_text) var/list/dat = list() for(var/datum/quirk/candidate as anything in quirks) if(from_scan && (candidate.quirk_flags & QUIRK_HIDE_FROM_SCAN)) @@ -227,7 +227,7 @@ dat += medical ? candidate.medical_record_text : candidate.name if(!dat.len) - return medical ? "No issues have been declared." : "None" + return isnull(none_text) ? (medical ? "No issues have been declared." : "None") : none_text return medical ? dat.Join("
") : dat.Join(", ") /mob/living/proc/cleanse_quirk_datums() //removes all trait datums diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 15a149001646..b15de4d86488 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -32,7 +32,11 @@ // Weird bit but ensures that if the final element has its own "and" we don't add another one tag_string = english_list(tag_string, and_text = (findtext(tag_string[length(tag_string)], " and ")) ? ", " : " and ") var/post_descriptor = examine_post_descriptor(user) - . += "[p_They()] [p_are()] a [tag_string] [examine_descriptor(user)][length(post_descriptor) ? " [jointext(post_descriptor, " ")]" : ""]." + var/force_descriptor = examine_weapon_descriptor(user) + . += span_slightly_smaller("[p_They()] [p_are()] a [tag_string] [examine_descriptor(user)]\ + [length(post_descriptor) ? " [jointext(post_descriptor, " ")]" : ""].\ + [force_descriptor ? " [force_descriptor]." : ""]\ + ") if(reagents) var/user_sees_reagents = user.can_see_reagents() @@ -78,13 +82,21 @@ /// Returns a list of strings to be displayed after the descriptor /atom/proc/examine_post_descriptor(mob/user) . = list() - if(!custom_materials) - return - var/mats_list = list() + var/list/mats_list = list() for(var/custom_material in custom_materials) var/datum/material/current_material = GET_MATERIAL_REF(custom_material) - mats_list += span_tooltip("It is made out of [current_material.name].", current_material.name) - . += "made of [english_list(mats_list)]" + mats_list[current_material.name] = "It is made out of [current_material.name]." + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_POST_DESCRIPTOR, user, ., mats_list) + if(!length(mats_list)) + return . + var/list/mats_list_flattened = list() + for(var/mat_name, mat_tooltip in mats_list) + mats_list_flattened += span_tooltip(mat_tooltip, mat_name) + + . += "made of [english_list(mats_list_flattened)]" + +/atom/proc/examine_weapon_descriptor(mob/user) + return /** * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1 second) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 33963c8b4cff..8def0f2dc9f0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -220,10 +220,6 @@ ///A reagent the nutriments are converted into when the item is juiced. var/datum/reagent/consumable/juice_typepath - /// Used in obj/item/examine to give additional notes on what the weapon does, separate from the predetermined output variables - var/offensive_notes - /// Used in obj/item/examine to determines whether or not to detail an item's statistics even if it does not meet the force requirements - var/override_notes = FALSE /// Used if we want to have a custom verb text for throwing. "John Spaceman flicks the ciggerate" for example. var/throw_verb @@ -271,8 +267,6 @@ if(damtype == BRUTE) hitsound = SFX_SWING_HIT - add_weapon_description() - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_ITEM, src) if(get_embed()) AddElement(/datum/element/embed) @@ -368,10 +362,6 @@ /obj/item/proc/add_stealing_item_objective() return -/// Adds the weapon_description element, which shows the 'warning label' for especially dangerous objects. Override this for item types with special notes. -/obj/item/proc/add_weapon_description() - AddElement(/datum/element/weapon_description) - /** * Checks if an item is allowed to be used on an atom/target * Returns TRUE if allowed. @@ -444,6 +434,11 @@ . = parent_tags .[weight_class_to_text(w_class)] = "[gender == PLURAL ? "They are" : "It is"] a [weight_class_to_text(w_class)] item." + if(sharpness & SHARP_EDGED) + .["sharp"] = "It has a sharp edge. It may inflict cut wounds, and could easily slice cloth." + if(sharpness & SHARP_POINTY) + .["pointed"] = "It has a sharp point. It may inflict puncture wounds." + if(item_flags & CRUEL_IMPLEMENT) .[span_red("morbid")] = "It seems quite practical for particularly morbid procedures and experiments." @@ -468,6 +463,113 @@ /obj/item/examine_descriptor(mob/user) return "item" +/obj/item/examine_weapon_descriptor(mob/user) + var/main_weapon_examine = "" + switch(force) + if(5 to 9) + main_weapon_examine = "weak" + if(10 to 14) + main_weapon_examine = "decent" + if(15 to 19) + main_weapon_examine = "considerable" + if(20 to 24) + main_weapon_examine = "potent" + if(25 to 29) + main_weapon_examine = "powerful" + if(30 to INFINITY) + main_weapon_examine = "extremely powerful" + + var/ap_examine = "" + if(armour_penetration > 0) + switch(armour_penetration) + if(1 to 14) + ap_examine += "minimal" + if(25 to 49) + ap_examine += "average" + if(50 to 74) + ap_examine += "above-average" + if(75 to 99) + ap_examine += "excellent" + if(100) + ap_examine += "flawless" + + var/block_examine = "" + var/block_examine_alt = "" + if(block_chance > 0) + switch(block_chance) + if(1 to 24) + block_examine = "minimal" + block_examine_alt = "weak" + if(25 to 49) + block_examine = "average" + block_examine_alt = "decent" + if(50 to 74) + block_examine = "above-average" + block_examine_alt = "considerable" + if(75 to 99) + block_examine = "excellent" + block_examine_alt = "potent" + if(100) + block_examine = "flawless" + block_examine_alt = "perfect" + + var/return_message = "" + if(main_weapon_examine) + return_message = "[p_They()] [p_are()] \a [main_weapon_examine] weapon" + if(ap_examine && block_examine) + return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + else if(ap_examine) + return_message += " with [ap_examine] penetration" + else if(block_examine) + return_message += " with [block_examine] blocking capabilities" + + var/thrown_weapon_examine = "" + switch(throwforce) + if(5 to 9) + thrown_weapon_examine = "weak" + if(10 to 14) + thrown_weapon_examine = "decent" + if(15 to 19) + thrown_weapon_examine = "considerable" + if(20 to 24) + thrown_weapon_examine = "potent" + if(25 to 29) + thrown_weapon_examine = "powerful" + if(30 to INFINITY) + thrown_weapon_examine = "extremely powerful" + + if(thrown_weapon_examine) + // if the weapon is far better thrown than melee, change the order + if(force * 1.5 < throwforce && throwforce >= 10) + return_message = "[p_They()] [p_are()] \a [thrown_weapon_examine] thrown weapon" + if(ap_examine && block_examine) + return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + else if(ap_examine) + return_message += " with [ap_examine] penetration" + else if(block_examine) + return_message += " with [block_examine] blocking capabilities" + if(main_weapon_examine && main_weapon_examine != thrown_weapon_examine) + return_message += ", that is [main_weapon_examine] when used in melee" + + else if(main_weapon_examine) + // you can intuit a good weapon is a good thrown weapon, only report otherwise if it's significant + if(abs(force - throwforce) >= 10) + return_message += ", that is [thrown_weapon_examine] when thrown" + + else + return_message = "[p_They()] [p_are()] \a [thrown_weapon_examine] thrown weapon" + if(ap_examine && block_examine) + return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + else if(ap_examine) + return_message += " with [ap_examine] penetration" + else if(block_examine) + return_message += " with [block_examine] blocking capabilities" + + if((!return_message || (force < 10 && throwforce < 10)) && block_examine_alt) + return_message = "[p_They()] [p_are()] \a [block_examine_alt] at blocking attacks" + + return return_message + /obj/item/examine_more(mob/user) . = ..() if(HAS_TRAIT(user, TRAIT_RESEARCH_SCANNER)) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 655b152860d8..43c3a87175b7 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -85,7 +85,6 @@ ) var/floor_text = "Analyzing results for [scan_turf] ([station_time_timestamp()]):
" - floor_text += "Overall status: Unknown
" floor_text += "Subject lacks a brain.
" floor_text += "Body temperature: [scan_turf?.return_air()?.return_temperature() || "???"]
" @@ -160,15 +159,8 @@ var/tox_loss = target.getToxLoss() var/fire_loss = target.getFireLoss() var/brute_loss = target.getBruteLoss() - var/mob_status = (!target.appears_alive() ? span_alert("Deceased") : "[round(target.health / target.maxHealth, 0.01) * 100]% healthy") - if(HAS_TRAIT(target, TRAIT_FAKEDEATH) && target.stat != DEAD) - // if we don't appear to actually be in a "dead state", add fake oxyloss - if(oxy_loss + tox_loss + fire_loss + brute_loss < 200) - oxy_loss += 200 - (oxy_loss + tox_loss + fire_loss + brute_loss) - oxy_loss = clamp(oxy_loss, 0, 200) - - render_list += "[span_info("Analyzing results for [target] ([station_time_timestamp()]):")]
Overall status: [mob_status]
" + render_list += "[span_info("Analyzing results for [target] ([station_time_timestamp()]):")]
" if(!advanced && target.has_reagent(/datum/reagent/inverse/technetium)) advanced = TRUE @@ -191,12 +183,14 @@ if (!target.get_organ_slot(ORGAN_SLOT_BRAIN)) // kept exclusively for soul purposes render_list += "Subject lacks a brain.
" - if(iscarbon(target)) - var/mob/living/carbon/carbontarget = target - if(LAZYLEN(carbontarget.quirks)) - render_list += "Subject Major Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MAJOR_DISABILITY, from_scan = TRUE)].
" - if(advanced) - render_list += "Subject Minor Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MINOR_DISABILITY, TRUE)].
" + if(LAZYLEN(target.quirks)) + var/scan_text = target.get_quirk_string(FALSE, CAT_QUIRK_MAJOR_DISABILITY, from_scan = TRUE, none_text = "") + if(scan_text) + render_list += "Subject Major Disabilities: [scan_text].
" + if(advanced) + var/scan_text_minor = target.get_quirk_string(FALSE, CAT_QUIRK_MINOR_DISABILITY, from_scan = TRUE, none_text = "") + if(scan_text_minor) + render_list += "Subject Minor Disabilities: [scan_text_minor].
" // Body part damage report if(iscarbon(target)) @@ -207,23 +201,26 @@ var/any_embeds = carbontarget.has_embedded_objects() if(any_damage || (mode == SCANNER_VERBOSE && (any_missing || any_wounded || any_embeds))) render_list += "
" - var/dmgreport = "Body status:\ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - " + var/dmgreport = "\ + \ +
Damage:BruteBurnToxinSuffocation
Overall:[ceil(brute_loss)][ceil(fire_loss)][ceil(tox_loss)][ceil(oxy_loss)]
\ + \ + \ + \ + \ + \ + \ + " + + if(mode == SCANNER_CONDENSED) + dmgreport += "\ + \ + \ + \ + \ + \ + \ + " if(mode == SCANNER_VERBOSE) // Follow same body zone list every time so it's consistent across all humans @@ -244,11 +241,11 @@ continue dmgreport += "" dmgreport += "" - dmgreport += "" - dmgreport += "" + dmgreport += "" + dmgreport += "" if(zone == BODY_ZONE_CHEST) // tox/oxy is stored in the chest - dmgreport += "" - dmgreport += "" + dmgreport += "" + dmgreport += "" dmgreport += "" if(has_any_embeds) var/list/embedded_names = list() @@ -262,7 +259,7 @@ dmgreport += "" if(has_any_wounds) for(var/datum/wound/wound as anything in limb.wounds) - dmgreport += "" + dmgreport += "" dmgreport += "
Damage:BruteBurnToxinHypoxia
Overall:[format_physical_damage(brute_loss)] [format_physical_damage(fire_loss)] [format_internal_damage(tox_loss)] [format_internal_damage(oxy_loss)]
[capitalize((limb.bodytype & BODYTYPE_ROBOTIC) ? limb.name : limb.plaintext_zone)]:[limb.brute_dam > 0 ? ceil(limb.brute_dam) : "0"][limb.burn_dam > 0 ? ceil(limb.burn_dam) : "0"][format_physical_damage(limb.brute_dam)] [format_physical_damage(limb.burn_dam)] [tox_loss > 0 ? ceil(tox_loss) : "0"][oxy_loss > 0 ? ceil(oxy_loss) : "0"][format_internal_damage(tox_loss)] [format_internal_damage(oxy_loss)] 
↳ Foreign object(s): [conditional_tooltip(displayed, "Use a hemostat to remove.", tochat)]
↳ Physical trauma: [conditional_tooltip("[wound.name] ([wound.severity_text()])", wound.treat_text_short, tochat)]
↳ Trauma: [conditional_tooltip("[wound.name] ([wound.severity_text()])", wound.treat_text_short, tochat)]
" render_list += dmgreport // tables do not need extra linebreak @@ -271,26 +268,25 @@ var/mob/living/carbon/human/humantarget = target // Organ damage, missing organs var/render = FALSE - var/toReport = "Organ status:\ + var/toReport = "\ \ - \ +
\ \ \ - [advanced ? "" : ""]\ \ " var/list/missing_organs = list() if(!humantarget.get_organ_slot(ORGAN_SLOT_BRAIN)) missing_organs[ORGAN_SLOT_BRAIN] = "Brain" - if(humantarget.needs_heart() && !humantarget.get_organ_slot(ORGAN_SLOT_HEART)) + if(!isnull(humantarget.dna.species.mutantheart) && !humantarget.get_organ_slot(ORGAN_SLOT_HEART)) missing_organs[ORGAN_SLOT_HEART] = "Heart" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOBREATH, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantlungs) && !humantarget.get_organ_slot(ORGAN_SLOT_LUNGS)) + if(!isnull(humantarget.dna.species.mutantlungs) && !humantarget.get_organ_slot(ORGAN_SLOT_LUNGS)) missing_organs[ORGAN_SLOT_LUNGS] = "Lungs" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_LIVERLESS_METABOLISM, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantliver) && !humantarget.get_organ_slot(ORGAN_SLOT_LIVER)) + if(!isnull(humantarget.dna.species.mutantliver) && !humantarget.get_organ_slot(ORGAN_SLOT_LIVER)) missing_organs[ORGAN_SLOT_LIVER] = "Liver" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOHUNGER, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantstomach) && !humantarget.get_organ_slot(ORGAN_SLOT_STOMACH)) - missing_organs[ORGAN_SLOT_STOMACH] ="Stomach" + if(!isnull(humantarget.dna.species.mutantstomach) && !humantarget.get_organ_slot(ORGAN_SLOT_STOMACH)) + missing_organs[ORGAN_SLOT_STOMACH] = "Stomach" if(!isnull(humantarget.dna.species.mutanttongue) && !humantarget.get_organ_slot(ORGAN_SLOT_TONGUE)) missing_organs[ORGAN_SLOT_TONGUE] = "Tongue" if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EARS)) @@ -305,7 +301,6 @@ if(missing_organs[sorted_slot]) render = TRUE toReport += "\ - [advanced ? "" : ""]\ " continue if(mode != SCANNER_VERBOSE && !organ.show_on_condensed_scans()) @@ -317,7 +312,6 @@ render = TRUE toReport += "\ \ - [advanced ? "" : ""]\ \ " if(appendix) @@ -353,21 +347,19 @@ // NON-MODULE CHANGE var/skin_temp = target.get_skin_temperature() - var/skin_temperature_message = "Skin temperature: [round_and_format_decimal(KELVIN_TO_CELCIUS(skin_temp), 0.1)] °C ([round_and_format_decimal(KELVIN_TO_FAHRENHEIT(skin_temp), 0.1)] °F)" + var/skin_temperature_message = "[round_and_format_decimal(KELVIN_TO_CELCIUS(skin_temp), 0.1)] °C " + span_slightly_smaller("([round_and_format_decimal(KELVIN_TO_FAHRENHEIT(skin_temp), 0.1)] °F)") if(skin_temp >= target.bodytemp_heat_damage_limit) - render_list += "☼ [skin_temperature_message] ☼
" + skin_temperature_message = "☼ [skin_temperature_message] ☼" else if(skin_temp <= target.bodytemp_cold_damage_limit) - render_list += "❄ [skin_temperature_message] ❄
" - else - render_list += "[skin_temperature_message]
" + skin_temperature_message = "❄ [skin_temperature_message] ❄" - var/body_temperature_message = "Body temperature: [round_and_format_decimal(KELVIN_TO_CELCIUS(target.body_temperature), 0.1)] °C ([round_and_format_decimal(KELVIN_TO_FAHRENHEIT(target.body_temperature), 0.1)] °F)" + var/body_temperature_message = "[round_and_format_decimal(KELVIN_TO_CELCIUS(target.body_temperature), 0.1)] °C " + span_slightly_smaller("([round_and_format_decimal(KELVIN_TO_FAHRENHEIT(target.body_temperature), 0.1)] °F)") if(target.body_temperature >= target.bodytemp_heat_damage_limit) - render_list += "☼ [body_temperature_message] ☼
" + body_temperature_message = "☼ [body_temperature_message] ☼" else if(target.body_temperature <= target.bodytemp_cold_damage_limit) - render_list += "❄ [body_temperature_message] ❄
" - else - render_list += "[body_temperature_message]
" + body_temperature_message = "❄ [body_temperature_message] ❄" + + render_list += "Skin / Body temperature: [skin_temperature_message] / [body_temperature_message]
" // Blood Level var/datum/blood_type/target_blood_type = target.blood_type @@ -461,6 +453,32 @@ to_chat(user, examine_block(.), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) return . +/proc/format_physical_damage(damage_amount) + switch(damage_amount) + if(0 to 10) + return "-" + if(10 to 30) + return "Minor" + if(30 to 60) + return "Moderate" + if(60 to 100) + return "Severe" + if(100 to INFINITY) + return "Critical" + +/proc/format_internal_damage(damage_amount) + switch(damage_amount) + if(0 to 5) + return "-" + if(5 to 25) + return "Minor" + if(25 to 50) + return "Moderate" + if(50 to 75) + return "Severe" + if(75 to INFINITY) + return "Critical" + /obj/item/healthanalyzer/click_ctrl_shift(mob/user) if(!length(last_scan_text)) balloon_alert(user, "no scans!") diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index ab832ddd5aeb..d46f16eb17b6 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -75,26 +75,23 @@ register_item_context() -/obj/item/melee/baton/add_weapon_description() - AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_baton_notes)) - -/obj/item/melee/baton/proc/add_baton_notes() - var/list/readout = list() - - if(affect_cyborg) - readout += "It can stun cyborgs for [round((stun_time_cyborg/10), 1)] seconds." - - readout += "\n[active ? "It is currently [span_warning("[activated_word]")], and capable of stunning." : "It is [span_warning("not [activated_word]")], and not capable of stunning."]" - - if(stamina_damage <= 0) // The advanced baton actually does have 0 stamina damage so...yeah. - readout += "Either is is [span_warning("completely unable to perform a stunning strike")], or it [span_warning("attacks via some unusual method")]." - return readout.Join("\n") - - readout += "It takes [span_warning("[HITS_TO_CRIT(stamina_damage)] strike\s")] to stun an enemy." - - readout += "\nThe effects of each strike can be mitigated by utilizing [span_warning("[armour_type_against_stun]")] armor." +/obj/item/melee/baton/examine_weapon_descriptor(mob/user) + . = ..() + var/stun_strength + switch(stamina_damage) + if(0) + stun_strength = "surprisingly" + if(10 to 30) + stun_strength = "minimally" + if(30 to 60) + stun_strength = "moderately" + if(60 to 100) + stun_strength = "highly" - return readout.Join("\n") + if(.) + . += ", [force < 15 ? "but" : "and"] is [stun_strength] capable at disabling targets[affect_cyborg ? ", including cyborgs" : ""]" + else + . = "It is [stun_strength] effective at disabling targets[affect_cyborg ? ", including cyborgs" : ""]" /** * Ok, think of baton attacks like a melee attack chain: diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 2fdf473457e6..75ba10ad44a4 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -268,7 +268,7 @@ trauma_desc += capitalize(trauma.scan_desc) LAZYADD(trauma_text, trauma_desc) if(LAZYLEN(trauma_text)) - return span_alert("Mental trauma: [english_list(trauma_text, and_text = ", and ")].") + return span_alert("Trauma: [english_list(trauma_text, and_text = ", and ")].") /obj/item/organ/brain/feel_for_damage(self_aware, medical_skill) if(damage < low_threshold) diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 49bbcd140756..0681a3eb94d4 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -9,7 +9,6 @@ throwforce = 0 w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5) - override_notes = TRUE drop_sound = 'maplestation_modules/sound/items/drop/ring.ogg' ///What sound should play when this ammo is fired var/fire_sound = null @@ -50,47 +49,60 @@ QDEL_NULL(loaded_projectile) return ..() -/obj/item/ammo_casing/add_weapon_description() - AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_notes_ammo)) +/obj/item/ammo_casing/examine_weapon_descriptor(mob/user) + return projectile_examine_description() -/** - * - * Outputs type-specific weapon stats for ammunition based on the projectile loaded inside the casing. - * Distinguishes between critting and stam-critting in separate lines - * - */ -/obj/item/ammo_casing/proc/add_notes_ammo() - // Try to get a projectile to derive stats from - var/obj/projectile/exam_proj = projectile_type - var/initial_damage = initial(exam_proj.damage) - var/initial_stamina = initial(exam_proj.stamina) - // projectile damage multiplier for guns with snowflaked damage multipliers - var/proj_damage_mult = 1 - if(!ispath(exam_proj) || pellets == 0) - return - - // are we in an ammo box? - if(isammobox(loc)) - var/obj/item/ammo_box/our_box = loc - // is our ammo box in a gun? - if(isgun(our_box.loc)) - var/obj/item/gun/our_gun = our_box.loc - // grab the damage multiplier - proj_damage_mult = our_gun.projectile_damage_multiplier - // if not, are we just in a gun e.g. chambered - else if(isgun(loc)) - var/obj/item/gun/our_gun = loc - // grab the damage multiplier. - proj_damage_mult = our_gun.projectile_damage_multiplier - var/list/readout = list() - if(proj_damage_mult <= 0 || (initial_damage <= 0 && initial_stamina <= 0)) - return "Our legal team has determined the offensive nature of these [span_warning(caliber)] rounds to be esoteric." - // No dividing by 0 - if(initial_damage) - readout += "Most monkeys our legal team subjected to these [span_warning(caliber)] rounds succumbed to their wounds after [span_warning("[HITS_TO_CRIT((initial(exam_proj.damage) * proj_damage_mult) * pellets)] shot\s")] at point-blank, taking [span_warning("[pellets] shot\s")] per round." - if(initial_stamina) - readout += "[!readout.len ? "Most monkeys" : "More fortunate monkeys"] collapsed from exhaustion after [span_warning("[HITS_TO_CRIT((initial(exam_proj.stamina) * proj_damage_mult) * pellets)] impact\s")] of these [span_warning("[caliber]")] rounds." - return readout.Join("\n") // Sending over a single string, rather than the whole list +/obj/item/ammo_casing/proc/projectile_examine_description(preface = p_They(), include_caliber = TRUE) + var/obj/projectile/mag_ammo_projectile = projectile_type + var/actual_damage = 0 + var/disabling_damage = mag_ammo_projectile::stamina + mag_ammo_projectile::pain + mag_ammo_projectile::paralyze + mag_ammo_projectile::stun + if(IS_DISABLING_DAMAGE(mag_ammo_projectile::damage_type)) + disabling_damage += mag_ammo_projectile::damage + else + actual_damage += mag_ammo_projectile::damage + + var/damage_text = "" + switch(actual_damage) + if(1 to 5) + damage_text = "extremely weak" + if(5 to 10) + damage_text = "weak" + if(10 to 15) + damage_text = "decent" + if(15 to 25) + damage_text = "strong" + if(25 to 50) + damage_text = "very strong" + if(50 to INFINITY) + damage_text = "extremely strong" + + var/disabling_text = "" + switch(disabling_damage) + if(1 to 10) + disabling_text = "extremely weak" + if(10 to 20) + disabling_text = "weak" + if(20 to 30) + disabling_text = "decent" + if(30 to 40) + disabling_text = "capable" + if(40 to 50) + disabling_text = "very capable" + if(50 to INFINITY) + disabling_text = "extremely capable" + + var/return_text = "" + if(disabling_text) + if(damage_text) + return_text = "[preface] fire\s [damage_text] [include_caliber ? "[caliber] " : ""]round\s, which are [disabling_text] at disabling targets" + else + return_text = "[preface] fire\s [disabling_text] disabling [include_caliber ? "[caliber] " : ""]round\s" + else if(damage_text) + return_text = "[preface] fire\s [damage_text] [include_caliber ? "[caliber] " : ""]round\s" + else + return_text = "[preface] fire\s [include_caliber ? "[caliber] " : ""]round\s" + + return return_text /obj/item/ammo_casing/update_icon_state() icon_state = "[initial(icon_state)][loaded_projectile ? "-live" : null]" diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 57639507d239..3d4cc19675bc 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -14,7 +14,6 @@ w_class = WEIGHT_CLASS_TINY throw_speed = 3 throw_range = 7 - override_notes = TRUE drop_sound = 'maplestation_modules/sound/items/drop/ammobox.ogg' pickup_sound = 'maplestation_modules/sound/items/pickup/ammobox.ogg' ///list containing the actual ammo within the magazine @@ -63,22 +62,17 @@ stored_ammo -= gone update_appearance() -/obj/item/ammo_box/add_weapon_description() - AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_notes_box)) - -/obj/item/ammo_box/proc/add_notes_box() - var/list/readout = list() +/obj/item/ammo_box/examine_weapon_descriptor(mob/user) + var/return_text = "" if(caliber && max_ammo) // Text references a 'magazine' as only magazines generally have the caliber variable initialized - readout += "Up to [span_warning("[max_ammo] [caliber] [casing_phrasing]s")] can be found within this magazine. \ - \nAccidentally discharging any of these projectiles may void your insurance contract." + return_text += "It can hold up to [max_ammo] [caliber] [casing_phrasing][max_ammo == 1 ? "" : "s"]" var/obj/item/ammo_casing/mag_ammo = get_round(TRUE) - if(istype(mag_ammo)) - readout += "\n[mag_ammo.add_notes_ammo()]" + return_text += ", [mag_ammo.projectile_examine_description("which", include_caliber = FALSE)]" - return readout.Join("\n") + return return_text /** * top_off is used to refill the magazine to max, in case you want to increase the size of a magazine with VV then refill it at once diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 826b88010ddb..923f4dc19b6e 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -159,9 +159,6 @@ QDEL_NULL(magazine) return ..() -/obj/item/gun/ballistic/add_weapon_description() - AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_notes_ballistic)) - /obj/item/gun/ballistic/fire_sounds() var/max_ammo = magazine?.max_ammo || initial(spawn_magazine_type.max_ammo) var/current_ammo = get_ammo() @@ -177,20 +174,12 @@ if(play_click && click_on_low_ammo) playsound(src, 'sound/weapons/gun/general/ballistic_click.ogg', fire_sound_volume, vary_fire_sound, frequency = click_frequency_to_use) - -/** - * - * Outputs type-specific weapon stats for ballistic weaponry based on its magazine and its caliber. - * It contains extra breaks for the sake of presentation - * - **/ -/obj/item/gun/ballistic/proc/add_notes_ballistic() - if(magazine) // Make sure you have a magazine, to get the notes from - return "\n[magazine.add_notes_box()]" - else if(chambered) // if you don't have a magazine, is there something chambered? - return "\n[chambered.add_notes_ammo()]" - else // we have a very expensive mechanical paperweight. - return "\nThe lack of magazine and usable cartridge in chamber makes its usefulness questionable, at best." +/obj/item/gun/ballistic/examine_weapon_descriptor(mob/user) + if(magazine) + return magazine.examine_weapon_descriptor(user) + if(chambered) + return chambered.projectile_examine_description(p_They()) + return "" /obj/item/gun/ballistic/vv_edit_var(vname, vval) . = ..() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 23d42d99af38..46b20afab12d 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -105,39 +105,12 @@ RegisterSignal(src, COMSIG_ITEM_RECHARGED, PROC_REF(instant_recharge)) AddElement(/datum/element/update_icon_updates_onmob) -/obj/item/gun/energy/add_weapon_description() - AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_notes_energy)) - -/** - * - * Outputs type-specific weapon stats for energy-based firearms based on its firing modes - * and the stats of those firing modes. Esoteric firing modes like ion are currently not supported - * but can be added easily - * - */ -/obj/item/gun/energy/proc/add_notes_energy() - var/list/readout = list() - // Make sure there is something to actually retrieve - if(!ammo_type.len) - return - var/obj/projectile/exam_proj - readout += "\nStandard models of this projectile weapon have [span_warning("[ammo_type.len] mode\s")]." - readout += "Our heroic interns have shown that one can theoretically stay standing after..." - if(projectile_damage_multiplier <= 0) - readout += "a theoretically infinite number of shots on [span_warning("every")] mode due to esoteric or nonexistent offensive potential." - return readout.Join("\n") // Sending over the singular string, rather than the whole list +/obj/item/gun/energy/examine_weapon_descriptor(mob/user) + var/return_text = "It has [length(ammo_type)] fire mode\s:" for(var/obj/item/ammo_casing/energy/for_ammo as anything in ammo_type) - exam_proj = for_ammo.projectile_type - if(!ispath(exam_proj)) - continue - if(initial(exam_proj.damage) > 0) // Don't divide by 0!!!!! - readout += "[span_warning("[HITS_TO_CRIT((initial(exam_proj.damage) * projectile_damage_multiplier) * for_ammo.pellets)] shot\s")] on [span_warning("[for_ammo.select_name]")] mode before collapsing from [initial(exam_proj.damage_type) == STAMINA ? "immense pain" : "their wounds"]." - if(initial(exam_proj.stamina) > 0) // In case a projectile does damage AND stamina damage (Energy Crossbow) - readout += "[span_warning("[HITS_TO_CRIT((initial(exam_proj.stamina) * projectile_damage_multiplier) * for_ammo.pellets)] shot\s")] on [span_warning("[for_ammo.select_name]")] mode before collapsing from immense pain." - else - readout += "a theoretically infinite number of shots on [span_warning("[for_ammo.select_name]")] mode." + return_text += "
• [for_ammo.projectile_examine_description("[capitalize(for_ammo.select_name)], which")]" - return readout.Join("\n") // Sending over the singular string, rather than the whole list + return return_text /obj/item/gun/energy/proc/update_ammo_types() var/obj/item/ammo_casing/energy/shot diff --git a/maplestation.dme b/maplestation.dme index a96b99fc2964..955ecfb70e28 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -1543,7 +1543,6 @@ #include "code\datums\elements\wall_tearer.dm" #include "code\datums\elements\wall_walker.dm" #include "code\datums\elements\watery_tile.dm" -#include "code\datums\elements\weapon_description.dm" #include "code\datums\elements\wearable_client_colour.dm" #include "code\datums\elements\weather_listener.dm" #include "code\datums\elements\web_walker.dm" From 209f825d05a611d0b082dd6d792b659183d49a25 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Thu, 14 May 2026 02:37:45 -0500 Subject: [PATCH 2/6] Tweak --- code/game/objects/items.dm | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 8def0f2dc9f0..f3df5e2db8c7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -517,7 +517,10 @@ if(main_weapon_examine) return_message = "[p_They()] [p_are()] \a [main_weapon_examine] weapon" if(ap_examine && block_examine) - return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + if(ap_examine == block_examine) + return_message += " with [ap_examine] penetration and blocking capabilities" + else + eturn_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" else if(ap_examine) return_message += " with [ap_examine] penetration" else if(block_examine) @@ -543,7 +546,10 @@ if(force * 1.5 < throwforce && throwforce >= 10) return_message = "[p_They()] [p_are()] \a [thrown_weapon_examine] thrown weapon" if(ap_examine && block_examine) - return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + if(ap_examine == block_examine) + return_message += " with [ap_examine] penetration and blocking capabilities" + else + return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" else if(ap_examine) return_message += " with [ap_examine] penetration" else if(block_examine) @@ -553,13 +559,16 @@ else if(main_weapon_examine) // you can intuit a good weapon is a good thrown weapon, only report otherwise if it's significant - if(abs(force - throwforce) >= 10) + if(abs(force - throwforce) >= 10 && main_weapon_examine != thrown_weapon_examine) return_message += ", that is [thrown_weapon_examine] when thrown" else return_message = "[p_They()] [p_are()] \a [thrown_weapon_examine] thrown weapon" if(ap_examine && block_examine) - return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + if(ap_examine == block_examine) + return_message += " with [ap_examine] penetration and blocking capabilities" + else + return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" else if(ap_examine) return_message += " with [ap_examine] penetration" else if(block_examine) From 8b855c709f8a4530a692efcadffdc6ec96f45b21 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Thu, 14 May 2026 15:04:51 -0500 Subject: [PATCH 3/6] Tweak --- code/game/atom/atom_examine.dm | 4 +- code/game/objects/items.dm | 50 +++++++++---------- code/game/objects/items/melee/baton.dm | 2 +- .../projectiles/ammunition/_ammunition.dm | 44 +++++----------- .../boxes_magazines/_box_magazine.dm | 2 +- code/modules/projectiles/guns/energy.dm | 2 +- 6 files changed, 42 insertions(+), 62 deletions(-) diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index b15de4d86488..8dbbbdac7890 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -34,8 +34,8 @@ var/post_descriptor = examine_post_descriptor(user) var/force_descriptor = examine_weapon_descriptor(user) . += span_slightly_smaller("[p_They()] [p_are()] a [tag_string] [examine_descriptor(user)]\ - [length(post_descriptor) ? " [jointext(post_descriptor, " ")]" : ""].\ - [force_descriptor ? " [force_descriptor]." : ""]\ + [length(post_descriptor) ? " [jointext(post_descriptor, " ")]" : ""]\ + [force_descriptor ? " [force_descriptor]" : ""].\ ") if(reagents) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f3df5e2db8c7..464ac9e70d96 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -467,17 +467,17 @@ var/main_weapon_examine = "" switch(force) if(5 to 9) - main_weapon_examine = "weak" + main_weapon_examine = "poor" if(10 to 14) main_weapon_examine = "decent" if(15 to 19) - main_weapon_examine = "considerable" + main_weapon_examine = "good" if(20 to 24) - main_weapon_examine = "potent" + main_weapon_examine = "great" if(25 to 29) - main_weapon_examine = "powerful" + main_weapon_examine = "potent" if(30 to INFINITY) - main_weapon_examine = "extremely powerful" + main_weapon_examine = "powerful" var/ap_examine = "" if(armour_penetration > 0) @@ -487,7 +487,7 @@ if(25 to 49) ap_examine += "average" if(50 to 74) - ap_examine += "above-average" + ap_examine += "good" if(75 to 99) ap_examine += "excellent" if(100) @@ -499,28 +499,28 @@ switch(block_chance) if(1 to 24) block_examine = "minimal" - block_examine_alt = "weak" + block_examine_alt = "poor" if(25 to 49) block_examine = "average" block_examine_alt = "decent" if(50 to 74) - block_examine = "above-average" - block_examine_alt = "considerable" + block_examine = "good" + block_examine_alt = "good" if(75 to 99) block_examine = "excellent" - block_examine_alt = "potent" + block_examine_alt = "great" if(100) block_examine = "flawless" block_examine_alt = "perfect" var/return_message = "" if(main_weapon_examine) - return_message = "[p_They()] [p_are()] \a [main_weapon_examine] weapon" + return_message = "that can be used as \a [main_weapon_examine] weapon" if(ap_examine && block_examine) if(ap_examine == block_examine) return_message += " with [ap_examine] penetration and blocking capabilities" else - eturn_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" + return_message += " with [ap_examine] penetration and [block_examine] blocking capabilities" else if(ap_examine) return_message += " with [ap_examine] penetration" else if(block_examine) @@ -528,23 +528,23 @@ var/thrown_weapon_examine = "" switch(throwforce) - if(5 to 9) - thrown_weapon_examine = "weak" if(10 to 14) + thrown_weapon_examine = "poor" + if(14 to 19) thrown_weapon_examine = "decent" - if(15 to 19) - thrown_weapon_examine = "considerable" - if(20 to 24) + if(19 to 24) + thrown_weapon_examine = "good" + if(24 to 29) + thrown_weapon_examine = "great" + if(29 to 39) thrown_weapon_examine = "potent" - if(25 to 29) + if(40 to INFINITY) thrown_weapon_examine = "powerful" - if(30 to INFINITY) - thrown_weapon_examine = "extremely powerful" if(thrown_weapon_examine) // if the weapon is far better thrown than melee, change the order if(force * 1.5 < throwforce && throwforce >= 10) - return_message = "[p_They()] [p_are()] \a [thrown_weapon_examine] thrown weapon" + return_message = "that can be used as \a [thrown_weapon_examine] thrown weapon" if(ap_examine && block_examine) if(ap_examine == block_examine) return_message += " with [ap_examine] penetration and blocking capabilities" @@ -555,15 +555,15 @@ else if(block_examine) return_message += " with [block_examine] blocking capabilities" if(main_weapon_examine && main_weapon_examine != thrown_weapon_examine) - return_message += ", that is [main_weapon_examine] when used in melee" + return_message += ", but is [main_weapon_examine] when used in melee" else if(main_weapon_examine) // you can intuit a good weapon is a good thrown weapon, only report otherwise if it's significant if(abs(force - throwforce) >= 10 && main_weapon_examine != thrown_weapon_examine) - return_message += ", that is [thrown_weapon_examine] when thrown" + return_message += ", but is [thrown_weapon_examine] when thrown" else - return_message = "[p_They()] [p_are()] \a [thrown_weapon_examine] thrown weapon" + return_message = "that can be used as \a [thrown_weapon_examine] thrown weapon" if(ap_examine && block_examine) if(ap_examine == block_examine) return_message += " with [ap_examine] penetration and blocking capabilities" @@ -575,7 +575,7 @@ return_message += " with [block_examine] blocking capabilities" if((!return_message || (force < 10 && throwforce < 10)) && block_examine_alt) - return_message = "[p_They()] [p_are()] \a [block_examine_alt] at blocking attacks" + return_message = "that is [block_examine_alt] at blocking attacks" return return_message diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index d46f16eb17b6..bd28c2d0eabe 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -91,7 +91,7 @@ if(.) . += ", [force < 15 ? "but" : "and"] is [stun_strength] capable at disabling targets[affect_cyborg ? ", including cyborgs" : ""]" else - . = "It is [stun_strength] effective at disabling targets[affect_cyborg ? ", including cyborgs" : ""]" + . = "that is [stun_strength] effective at disabling targets[affect_cyborg ? ", including cyborgs" : ""]" /** * Ok, think of baton attacks like a melee attack chain: diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 0681a3eb94d4..0d45232d8fa2 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -52,7 +52,7 @@ /obj/item/ammo_casing/examine_weapon_descriptor(mob/user) return projectile_examine_description() -/obj/item/ammo_casing/proc/projectile_examine_description(preface = p_They(), include_caliber = TRUE) +/obj/item/ammo_casing/proc/projectile_examine_description(preface = "that", include_caliber = TRUE) var/obj/projectile/mag_ammo_projectile = projectile_type var/actual_damage = 0 var/disabling_damage = mag_ammo_projectile::stamina + mag_ammo_projectile::pain + mag_ammo_projectile::paralyze + mag_ammo_projectile::stun @@ -61,46 +61,26 @@ else actual_damage += mag_ammo_projectile::damage - var/damage_text = "" - switch(actual_damage) + var/stopping_power = "" + switch(actual_damage + disabling_damage) if(1 to 5) - damage_text = "extremely weak" + stopping_power = "very low" if(5 to 10) - damage_text = "weak" + stopping_power = "low" if(10 to 15) - damage_text = "decent" + stopping_power = "decent" if(15 to 25) - damage_text = "strong" + stopping_power = "good" if(25 to 50) - damage_text = "very strong" + stopping_power = "high" if(50 to INFINITY) - damage_text = "extremely strong" - - var/disabling_text = "" - switch(disabling_damage) - if(1 to 10) - disabling_text = "extremely weak" - if(10 to 20) - disabling_text = "weak" - if(20 to 30) - disabling_text = "decent" - if(30 to 40) - disabling_text = "capable" - if(40 to 50) - disabling_text = "very capable" - if(50 to INFINITY) - disabling_text = "extremely capable" + stopping_power = "very high" var/return_text = "" - if(disabling_text) - if(damage_text) - return_text = "[preface] fire\s [damage_text] [include_caliber ? "[caliber] " : ""]round\s, which are [disabling_text] at disabling targets" - else - return_text = "[preface] fire\s [disabling_text] disabling [include_caliber ? "[caliber] " : ""]round\s" - else if(damage_text) - return_text = "[preface] fire\s [damage_text] [include_caliber ? "[caliber] " : ""]round\s" + if(stopping_power) + return_text = "[preface] fires [stopping_power][actual_damage <= 0 ? ", non-lethal" : ""] stopping power [include_caliber ? "[caliber] " : ""][mag_ammo_projectile::hitscan ? "beams" : "rounds"]" else - return_text = "[preface] fire\s [include_caliber ? "[caliber] " : ""]round\s" + return_text = "[preface] fires [include_caliber ? "[caliber] " : ""][mag_ammo_projectile::hitscan ? "beams" : "rounds"]" return return_text diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 3d4cc19675bc..b963ef390203 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -66,7 +66,7 @@ var/return_text = "" if(caliber && max_ammo) // Text references a 'magazine' as only magazines generally have the caliber variable initialized - return_text += "It can hold up to [max_ammo] [caliber] [casing_phrasing][max_ammo == 1 ? "" : "s"]" + return_text += "that can hold up to [max_ammo] [caliber] [casing_phrasing][max_ammo == 1 ? "" : "s"]" var/obj/item/ammo_casing/mag_ammo = get_round(TRUE) if(istype(mag_ammo)) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 46b20afab12d..e8a623014270 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -106,7 +106,7 @@ AddElement(/datum/element/update_icon_updates_onmob) /obj/item/gun/energy/examine_weapon_descriptor(mob/user) - var/return_text = "It has [length(ammo_type)] fire mode\s:" + var/return_text = "that has [length(ammo_type)] fire mode\s:" for(var/obj/item/ammo_casing/energy/for_ammo as anything in ammo_type) return_text += "
• [for_ammo.projectile_examine_description("[capitalize(for_ammo.select_name)], which")]" From a049f884f08feeb4c17aba771b19992a49487766 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 4/6] Improve and extend `fieldset_block` and `examine_block` (#88678) --- code/__DEFINES/chat.dm | 8 +- code/__HELPERS/game.dm | 2 +- code/_onclick/hud/alert.dm | 2 +- code/controllers/subsystem/polling.dm | 2 +- code/controllers/subsystem/vote.dm | 5 +- code/datums/ai_laws/ai_laws.dm | 2 +- code/datums/components/trader/trader.dm | 4 +- code/datums/elements/slapcrafting.dm | 4 +- code/datums/mind/skills.dm | 2 +- code/datums/mood.dm | 2 +- code/datums/votes/_vote_datum.dm | 9 ++- code/game/atom/atom_examine.dm | 2 +- .../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/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 | 2 +- .../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 | 14 ++-- .../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 | 46 +++++++++-- 53 files changed, 192 insertions(+), 105 deletions(-) diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 1595c24e7936..86ffbc403b30 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -46,9 +46,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) ("
" + title + "
" + content + "
") +#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) ("
" + title + "" + content + "
") /// Makes a horizontal line with text in the middle #define separator_hr(str) ("
" + str + "
") #define separator_hr_danger(str) ("
" + str + "
") diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 701763ea483f..d8f81afe1cfa 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -326,4 +326,4 @@ message = html_encode(message) else message = copytext(message, 2) - to_chat(target, span_purple(examine_block("Tip of the round: [message]"))) + to_chat(target, custom_boxed_message("purple_box", span_purple("Tip of the round: [message]"))) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 3c85fc03da5b..f25fac6405f9 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -1133,7 +1133,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/polling.dm b/code/controllers/subsystem/polling.dm index 27433c242f8a..e9287ace4b9e 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -173,7 +173,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 10fee267e1fd..2359df44470e 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -112,7 +112,8 @@ SUBSYSTEM_DEF(vote) "final_winner" = final_winner_string, ) log_vote("vote finalized", vote_log_data) - to_chat(world, examine_block(span_infoplain(vote_font("[to_display]")))) + if(to_display) + to_chat(world, span_infoplain(vote_font(to_display))) // Finally, doing any effects on vote completion if (final_winner) // if no one voted, or the vote cannot be won, final_winner will be null @@ -224,7 +225,7 @@ SUBSYSTEM_DEF(vote) var/to_display = current_vote.initiate_vote(vote_initiator_name, duration) log_vote(to_display) - to_chat(world, examine_block(span_infoplain(vote_font("[span_bold(to_display)]
\ + 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.
\ You have [DisplayTimeText(duration)] to vote.")))) diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index d93966195a1f..0f3b28b85e14 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -426,7 +426,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 c8dd9331938a..004d700c2e62 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 8cfc07f0d325..21e8e17f8236 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,6 +194,6 @@ 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/mind/skills.dm b/code/datums/mind/skills.dm index aa53a3053786..5a52a15f5046 100644 --- a/code/datums/mind/skills.dm +++ b/code/datums/mind/skills.dm @@ -145,4 +145,4 @@ skill_strings += span_smallnoticeital("• [initial(shown_skill.name)] - [get_skill_level_name(shown_skill)]") sortTim(skill_strings, GLOBAL_PROC_REF(cmp_text_asc)) - to_chat(user, examine_block("[span_info("Your skills:")]
[jointext(skill_strings, "
")]")) + to_chat(user, boxed_message("[span_info("Your skills:")]
[jointext(skill_strings, "
")]")) diff --git a/code/datums/mood.dm b/code/datums/mood.dm index c608bdc7d3e8..890b5bf022ce 100644 --- a/code/datums/mood.dm +++ b/code/datums/mood.dm @@ -613,7 +613,7 @@ if(LAZYLEN(mob_parent.quirks)) msg += span_notice("You have these quirks: [mob_parent.get_quirk_string(FALSE, CAT_QUIRK_ALL)].") - 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 ec68f7e4d31a..6764a47cacab 100644 --- a/code/datums/votes/_vote_datum.dm +++ b/code/datums/votes/_vote_datum.dm @@ -188,13 +188,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 += "
Winner Selection: " + returned_text += "Winner Selection: " switch(winner_method) if(VOTE_WINNER_METHOD_NONE) returned_text += "None" @@ -233,7 +234,7 @@ returned_text += "
" 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/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 8dbbbdac7890..0933ca90d6d2 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -308,7 +308,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))) /** * Returns an extended list of examine strings for any contained ID cards. diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm index 44cb429b506e..e7c89d75895b 100644 --- a/code/game/objects/items/AI_modules/_AI_modules.dm +++ b/code/game/objects/items/AI_modules/_AI_modules.dm @@ -39,7 +39,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 bd4df43d641c..e41fe105bd3d 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -279,7 +279,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 33cbf1af7428..a3aa8a703199 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -221,7 +221,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 43c3a87175b7..7ed90faec8d0 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -89,7 +89,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 @@ -450,7 +450,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 . /proc/format_physical_damage(damage_amount) @@ -574,7 +574,7 @@ // NON-MODULE CHANGE if(tochat) // 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) else return jointext(render_list, "") // NON-MODULE CHANGE END @@ -626,7 +626,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 89f216c6c7a8..293ac0f0668f 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 3bf4c22df318..e64cb4b9934f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -729,7 +729,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 4ec275fc48f5..9a9a295510e7 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 5b5984557d2c..eec15d0d8855 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 6a1b3f58fb2e..d911a9c241d2 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 f4ebb204d6ee..bb08ddaf5298 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 0d9ef8dd480b..e91ea26be774 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 b0108a3a37f3..e68ccda926de 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 727d001f5cab..e86d377d5d84 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 88a1160a8a8f..19dd34d3b4b5 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 7bb1a1472c0c..1980375a33cd 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 e2bd3a5c16ad..1646f6b3a0da 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 e0cb6629e190..a908804e6984 100644 --- a/code/modules/buildmode/submodes/map_export.dm +++ b/code/modules/buildmode/submodes/map_export.dm @@ -22,7 +22,7 @@ to_chat(builder, "[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 102660425c87..d55898724490 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 c3d507bf1e6c..30b0f33cec16 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 3df1b8105380..612a44cde4ca 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 1ea5f415e35f..7e382926c596 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 587bf456e2a0..c1bc4c2184ef 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 89f233f9687b..b0e41589917d 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 f132cd196ce7..4162af69faa4 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 796475fddb49..7ecdd74439a2 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 edb59fd068bf..3c686e155e5a 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -464,7 +464,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 a0eda225b48e..2608b19c0909 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -379,7 +379,7 @@ render_list += "[M.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/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 3e6439084bcb..d9a257859846 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -332,7 +332,7 @@ /datum/job/proc/get_spawn_message() SHOULD_NOT_OVERRIDE(TRUE) var/final_product = "[description]

• [jointext(get_spawn_message_information(), "
• ")]" - return fieldset_block(span_big("You are the [title]."), span_infoplain(final_product), "examine_block") + return fieldset_block(span_big("You are the [title]."), span_infoplain(final_product), "boxed_message") /// 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 6e8448b82052..4fc3af2da29b 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 1dff3097f48c..e4ed7f70d70b 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -67,7 +67,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 5c14aa9c4bfe..52cd0f0b15da 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -118,7 +118,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 1a83b3c7381d..a948ef06168f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -274,7 +274,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 6caae2893ca1..4fd337c38359 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -595,7 +595,7 @@ else combined_msg += span_info("You feel fatigued.") - to_chat(src, examine_block(combined_msg.Join("
"))) + to_chat(src, boxed_message(combined_msg.Join("
"))) /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 03795be168e4..9b3e23a37867 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 a9282c83e3bf..b82e2cfaa5e5 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 5cffb13fb200..0a37104fef6a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -534,7 +534,7 @@ result.Insert(1, span_info("You examine [examinify] closer.")) else result += span_info("You examine [examinify] closer, but find nothing of note.") - result_combined = examine_block(jointext(result, "
")) + result_combined = boxed_message(jointext(result, "
")) closer_look = TRUE else @@ -545,7 +545,7 @@ var/list/result = examinify.examine(src) var/atom_title = examinify.examine_title(src, thats = TRUE, href = 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, "
"))) if(!blind) examine_feedback(examinify, closer_look) diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm index ac6c0c8c3fb2..68141702d55b 100644 --- a/code/modules/reagents/chemistry/items.dm +++ b/code/modules/reagents/chemistry/items.dm @@ -124,19 +124,19 @@ return NONE var/list/out_message = list() to_chat(user, "The chemistry meter beeps and displays:") - out_message += "Total volume: [round(cont.volume, 0.01)] Current temperature: [round(cont.reagents.chem_temp, 0.1)]K Total pH: [round(cont.reagents.ph, 0.01)]\n" - out_message += "Chemicals found in [interacting_with.name]:\n" + out_message += "Total volume: [round(cont.volume, 0.01)] Current temperature: [round(cont.reagents.chem_temp, 0.1)]K Total pH: [round(cont.reagents.ph, 0.01)]
" + out_message += "Chemicals found in [interacting_with.name]:

" if(cont.reagents.is_reacting) - out_message += "[span_warning("A reaction appears to be occuring currently.")]\n" + out_message += "[span_warning("A reaction appears to be occuring currently.")]
" for(var/datum/reagent/reagent in cont.reagents.reagent_list) if(reagent.purity < reagent.inverse_chem_val && reagent.inverse_chem) //If the reagent is impure var/datum/reagent/inverse_reagent = GLOB.chemical_reagents_list[reagent.inverse_chem] - out_message += "[span_warning("Inverted reagent detected: ")][round(reagent.volume, 0.01)]u of [inverse_reagent.name], Purity: [round(1 - reagent.purity, 0.000001)*100]%, [(scanmode?"[(inverse_reagent.overdose_threshold?"Overdose: [inverse_reagent.overdose_threshold]u, ":"")]Base pH: [initial(inverse_reagent.ph)], Current pH: [reagent.ph].":"Current pH: [reagent.ph].")]\n" + out_message += "[span_warning("Inverted reagent detected: ")][round(reagent.volume, 0.01)]u of [inverse_reagent.name], Purity: [round(1 - reagent.purity, 0.000001)*100]%, [(scanmode?"[(inverse_reagent.overdose_threshold?"Overdose: [inverse_reagent.overdose_threshold]u, ":"")]Base pH: [initial(inverse_reagent.ph)], Current pH: [reagent.ph].":"Current pH: [reagent.ph].")]
" else - 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" + 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].")]
" if(scanmode) - out_message += "Analysis: [reagent.description]\n" - to_chat(user, "[out_message.Join()]
") + out_message += "Analysis: [reagent.description]
" + 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 f6a6386e862a..dd7e688097d2 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -394,7 +394,7 @@ if("mix") mix(50 DECISECONDS, user) if("examine") - to_chat(user, examine_block("[examine(user)]")) + to_chat(user, boxed_message(jointext(examine(user), "
"))) /** * 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 1f98a0917ad2..98249455c24e 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -389,7 +389,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 acac60f1a397..ba4f94320eac 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -48,6 +48,10 @@ a:visited { } } +.center { + text-align: center; +} + /* POPUPS */ .popup { @@ -793,6 +797,10 @@ em { font-size: 60%; } +.smaller { + font-size: 80%; +} + .slightly_smaller { font-size: 90%; } @@ -990,16 +998,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 80e1dfc4cfb1..3b65f451e25f 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -804,6 +804,10 @@ h2.alert { font-size: 60%; } +.smaller { + font-size: 80%; +} + .slightly_smaller { font-size: 90%; } @@ -1001,16 +1005,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 From 61c8114e4f36b5c32e73d42517726bf42af09579 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Thu, 14 May 2026 16:01:48 -0500 Subject: [PATCH 5/6] Box --- code/datums/mind/skills.dm | 2 +- code/datums/mutations/antenna.dm | 6 +++--- code/game/atom/atom_examine.dm | 4 ++-- code/game/objects/effects/info.dm | 2 +- .../items/devices/scanners/health_analyzer.dm | 13 ++++++------- code/modules/client/preferences.dm | 2 +- code/modules/fishing/sources/_fish_source.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 2 +- code/modules/surgery/operations/_operation.dm | 4 ++-- code/modules/vehicles/mecha/_mecha.dm | 2 +- maplestation_modules/code/datums/pain/pain.dm | 2 +- .../code/game/objects/structures/vital_reader.dm | 2 +- .../code/modules/jobs/job_types/stowaway.dm | 4 ++-- .../human/species_types/synth/android_brain.dm | 2 +- .../code/modules/radio_emote_helper/emote_helper.dm | 2 +- 15 files changed, 25 insertions(+), 26 deletions(-) diff --git a/code/datums/mind/skills.dm b/code/datums/mind/skills.dm index 5a52a15f5046..cc70e14432f7 100644 --- a/code/datums/mind/skills.dm +++ b/code/datums/mind/skills.dm @@ -135,7 +135,7 @@ untrained_skills += known_skill if(!length(shown_skills)) - to_chat(user, examine_block(span_notice("You don't have any particularly outstanding skills."))) + to_chat(user, boxed_message(span_notice("You don't have any particularly outstanding skills."))) return var/list/skill_strings = list() diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm index 02b4849285c3..805ec4019e64 100644 --- a/code/datums/mutations/antenna.dm +++ b/code/datums/mutations/antenna.dm @@ -129,7 +129,7 @@ to_chat(cast_on, span_danger("You feel something foreign enter your mind.")) log_info += "Target alerted!" - to_chat(owner, examine_block(span_notice(jointext(discovered_info, "
")))) + to_chat(owner, boxed_message(span_notice(jointext(discovered_info, "
")))) log_combat(owner, cast_on, "mind read (cast intentionally)", null, "info: [english_list(log_info, and_text = ", ")]") /datum/action/cooldown/spell/pointed/mindread/proc/on_examining(mob/examiner, atom/examining) @@ -156,12 +156,12 @@ if(QDELETED(examiner)) return if(antimagic) - to_chat(examiner, examine_block(span_warning("You attempt to analyze [examined]'s current thoughts, but fail to penetrate [examined.p_their()] mind - It seems you've been foiled."))) + to_chat(examiner, boxed_message(span_warning("You attempt to analyze [examined]'s current thoughts, but fail to penetrate [examined.p_their()] mind - It seems you've been foiled."))) return var/list/log_info = list() - to_chat(examiner, examine_block(span_notice("You analyze [examined]'s current thoughts...
 \"[read_text]\"..."))) + to_chat(examiner, boxed_message(span_notice("You analyze [examined]'s current thoughts...
 \"[read_text]\"..."))) log_info += "Current thought: \"[read_text]\"" if(prob(10)) diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 0933ca90d6d2..41133045c307 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -293,7 +293,7 @@ id_species ||= carbon_wearer.dna.species.name id_blood_type ||= "[find_blood_type(carbon_wearer.dna?.species?.exotic_bloodtype || carbon_wearer.dna?.human_blood_type || random_human_blood_type())]" - var/id_examine = span_slightly_larger(separator_hr("This is [old_wearer]'s ID card.")) + var/id_examine = "" id_examine += "
" id_examine += "[id_icon]" id_examine += "
" @@ -308,7 +308,7 @@ id_examine += "
" // container id_examine += "
" // text - to_chat(viewer, boxed_message(span_info(id_examine))) + to_chat(viewer, fieldset_block(span_slightly_larger("That's [old_wearer]'s ID card."), span_info(id_examine), "boxed_message")) /** * Returns an extended list of examine strings for any contained ID cards. diff --git a/code/game/objects/effects/info.dm b/code/game/objects/effects/info.dm index a565eb46819f..9ffb49a84f79 100644 --- a/code/game/objects/effects/info.dm +++ b/code/game/objects/effects/info.dm @@ -18,7 +18,7 @@ /obj/effect/abstract/info/Click() . = ..() - to_chat(usr, examine_block("[span_boldnotice(name)]
[span_info(info_text)]")) + to_chat(usr, boxed_message("[span_boldnotice(name)]
[span_info(info_text)]")) /obj/effect/abstract/info/MouseEntered(location, control, params) . = ..() diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 7ed90faec8d0..77879edb1999 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -200,7 +200,7 @@ var/any_wounded = length(carbontarget.all_wounds) var/any_embeds = carbontarget.has_embedded_objects() if(any_damage || (mode == SCANNER_VERBOSE && (any_missing || any_wounded || any_embeds))) - render_list += "
" + render_list += span_info(separator_hr("Body Status")) var/dmgreport = "\ \
Organ:DmgStatus
[missing_organs[sorted_slot]]:-Missing
[capitalize(organ.name)]:[organ.damage > 0 ? ceil(organ.damage) : "0"][status]
\ @@ -318,7 +318,7 @@ toReport += "" if(render) - render_list += "
" + render_list += span_info(separator_hr("Organ Status")) render_list += toReport + "
↳ [appendix]
" // tables do not need extra linebreak // Cybernetics @@ -328,11 +328,10 @@ LAZYADD(cyberimps, cyberimp.examine_title(user)) if(LAZYLEN(cyberimps)) if(!render) - render_list += "
" - render_list += "Detected cybernetic modifications:
" + render_list += span_info(separator_hr("Cybernetic Modifications")) render_list += "[english_list(cyberimps, and_text = ", and ")]
" - render_list += "
" + render_list += span_info(separator_hr("General Information")) //Genetic stability if(advanced && humantarget.has_dna() && humantarget.dna.stability != initial(humantarget.dna.stability)) @@ -431,7 +430,7 @@ if(disease.visibility_flags & HIDDEN_SCANNER) continue if(!disease_hr) - render_list += "
" + render_list += span_info(separator_hr("Disease Information")) disease_hr = TRUE render_list += "\ Warning: [disease.form] detected
\ @@ -444,7 +443,7 @@ // Time of death if(target.station_timestamp_timeofdeath && !target.appears_alive()) - render_list += "
" + render_list += span_info(separator_hr("Mortality Information")) render_list += "Time of Death: [target.station_timestamp_timeofdeath]
" render_list += "Subject died [DisplayTimeText(round(world.time - target.timeofdeath))] ago.
" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6e9990b418a0..fb2049c7d9ea 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -441,7 +441,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) LAZYADD(feedback, "Your quirks have been reset.") all_quirks = list() if(LAZYLEN(feedback)) - to_chat(parent, examine_block(span_greentext(feedback.Join("\n")))) + to_chat(parent, boxed_message(span_greentext(feedback.Join("\n")))) /** diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 6004e6a8cce6..0d12f08578b8 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -463,7 +463,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(rod) info = span_tooltip("boldened are the fish you're more likely to catch with your current setup. The opposite is true for smaller names", info) - examine_text += examine_block(span_info("[info]: [english_list(known_fishes)].")) + examine_text += boxed_message(span_info("[info]: [english_list(known_fishes)].")) /datum/fish_source/proc/spawn_reward_from_explosion(atom/location, severity) if(!explosive_malus) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 6bcb2b0e877f..e65c0d6658a6 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) death_block += "
" death_block += span_danger("Barring complete bodyloss, you can (in most cases) be revived by other players. \ If you do not wish to be brought back, use the \"Do Not Resuscitate\" verb in the ghost tab.") - to_chat(src, examine_block(death_block)) + to_chat(src, boxed_message(death_block)) /mob/living/carbon/human/proc/get_cause_of_death(probable_cause) if(!probable_cause) diff --git a/code/modules/surgery/operations/_operation.dm b/code/modules/surgery/operations/_operation.dm index c28ca6feb8d2..cf084f1de214 100644 --- a/code/modules/surgery/operations/_operation.dm +++ b/code/modules/surgery/operations/_operation.dm @@ -204,7 +204,7 @@ var/list/operations = surgeon.get_available_operations(src, surgeon.get_active_held_item()) if(!length(operations)) - to_chat(surgeon, examine_block(span_info("No available surgeries."))) + to_chat(surgeon, boxed_message(span_info("No available surgeries."))) return var/list/operations_info = list() @@ -213,7 +213,7 @@ var/atom/movable/operating_on = operations[radial_slice][2] operations_info += "[radial_slice]: [operation.name] on [operating_on]" - to_chat(surgeon, examine_block(span_info("Available surgeries:

[jointext(operations_info, "
")]"))) + to_chat(surgeon, boxed_message(span_info("Available surgeries:

[jointext(operations_info, "
")]"))) /// Takes a target zone and returns a list of readable surgery states for that zone. /// Example output may be list("Skin is cut", "Blood vessels are unclamped", "Bone is sawed") diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index b60347d2504f..eb80b39a8368 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -523,7 +523,7 @@ readout += "It fully encloses its occupants, protecting them from the atmosphere or lack thereof." var/formatted_readout = span_notice("PROTECTION CLASSES
[jointext(readout, "\n")]") - to_chat(usr, examine_block(formatted_readout)) + to_chat(usr, boxed_message(formatted_readout)) /obj/vehicle/sealed/mecha/generate_integrity_message() var/examine_text = "" diff --git a/maplestation_modules/code/datums/pain/pain.dm b/maplestation_modules/code/datums/pain/pain.dm index 34a03d8107f4..fe9edc15cf20 100644 --- a/maplestation_modules/code/datums/pain/pain.dm +++ b/maplestation_modules/code/datums/pain/pain.dm @@ -876,7 +876,7 @@ /datum/pain/proc/debug_print_pain() var/list/final_print = list() - final_print += "
DEBUG PRINTOUT PAIN: [REF(src)]" + final_print += "
DEBUG PRINTOUT PAIN: [REF(src)]" final_print += "[parent] has a total pain of [get_total_pain()]." final_print += "[parent] has a traumatic shock of [traumatic_shock]." final_print += "[parent] has a pain modifier of [pain_modifier]." diff --git a/maplestation_modules/code/game/objects/structures/vital_reader.dm b/maplestation_modules/code/game/objects/structures/vital_reader.dm index bd29de46dd32..eb0f96532e35 100644 --- a/maplestation_modules/code/game/objects/structures/vital_reader.dm +++ b/maplestation_modules/code/game/objects/structures/vital_reader.dm @@ -197,7 +197,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/vitals_reader/no_hand, 32) var/entire_printout = "" entire_printout += healthscan(user, patient, mode = /*SCANNER_CONDENSED*/0, advanced = advanced, tochat = FALSE) entire_printout += chemscan(user, patient, tochat = FALSE) - to_chat(user, examine_block(entire_printout), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + to_chat(user, boxed_message(entire_printout), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) #define LOWER_BAR_OFFSET -3 diff --git a/maplestation_modules/code/modules/jobs/job_types/stowaway.dm b/maplestation_modules/code/modules/jobs/job_types/stowaway.dm index bd61ebe8d404..40873b0676a8 100644 --- a/maplestation_modules/code/modules/jobs/job_types/stowaway.dm +++ b/maplestation_modules/code/modules/jobs/job_types/stowaway.dm @@ -45,7 +45,7 @@ . = ..() var/datum/status_effect/backstory/backstory = spawned.apply_status_effect(/datum/status_effect/backstory) var/backstory_ref = "click here" - to_chat(player_client, examine_block("\ + to_chat(player_client, boxed_message("\ [span_boldnotice("You find yourself stown away in [get_area_name(spawned)] on [station_name()].")]\n\ [span_notice("All you have to your name is the clothes on your back, some tools, and a small amount of cash.")]\n\ [span_notice("The crew has no record of your existence.")]\n\ @@ -159,7 +159,7 @@ if(length(backstory_equipment_items) && backstory_equipment) final_info += span_notice("

Additional equipment: [backstory_equipment]") - to_chat(owner, examine_block(span_infoplain(final_info))) + to_chat(owner, boxed_message(span_infoplain(final_info))) for(var/thing in backstory_equipment_items) owner.equip_to_slot_if_possible(new thing(owner.loc), backstory_equipment_items[thing], disable_warning = TRUE, redraw_mob = FALSE, initial = TRUE) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/synth/android_brain.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/synth/android_brain.dm index babb1fe6fa54..da5b5f852b46 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/synth/android_brain.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/synth/android_brain.dm @@ -69,7 +69,7 @@ /obj/item/organ/brain/cybernetic/android/proc/print_laws(top_text = "You are bound by a set of laws") var/law_msg = "[top_text]:
[jointext(law_datum.get_law_list(include_zeroth = TRUE, render_html = TRUE), "
")]" - to_chat(owner, examine_block(span_info(law_msg))) + to_chat(owner, boxed_message(span_info(law_msg))) /obj/item/organ/brain/cybernetic/android/proc/on_ion_storm(...) SIGNAL_HANDLER diff --git a/maplestation_modules/code/modules/radio_emote_helper/emote_helper.dm b/maplestation_modules/code/modules/radio_emote_helper/emote_helper.dm index 4e03f9e97c01..054ed6fae769 100644 --- a/maplestation_modules/code/modules/radio_emote_helper/emote_helper.dm +++ b/maplestation_modules/code/modules/radio_emote_helper/emote_helper.dm @@ -23,4 +23,4 @@ You can also use this to create a custom \"say emote\" (that is, what your messa It will automatically insert a comma for you, so you don't need to worry about that.
"} - to_chat(usr, examine_block("[header]\n[text]")) + to_chat(usr, boxed_message("[header]\n[text]")) From 7e296f7563772d6f9075ac7c4ea75824de3c0f5f Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Sun, 17 May 2026 17:53:41 -0500 Subject: [PATCH 6/6] Autopsy --- .../objects/items/devices/scanners/autopsy_scanner.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index 2ed434342deb..0c2a346c4b5d 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -57,13 +57,13 @@ autopsy_information += "Time of Autopsy - [station_time_timestamp()]" autopsy_information += "Autopsy Coroner - [user.name]" - autopsy_information += "Toxin damage: [CEILING(scanned.getToxLoss(), 1)]" - autopsy_information += "Oxygen damage: [CEILING(scanned.getOxyLoss(), 1)]" + autopsy_information += "TOXICITY: [format_internal_damage(scanned.getToxLoss())]" + autopsy_information += "HYPOXIA: [format_internal_damage(scanned.getOxyLoss())]" autopsy_information += "
Bodypart Data

" for(var/obj/item/bodypart/bodyparts as anything in scanned.bodyparts) autopsy_information += "[bodyparts.name]
" - autopsy_information += "BRUTE: [bodyparts.brute_dam] | BURN: [bodyparts.burn_dam]
" + autopsy_information += "BRUISING: [format_physical_damage(bodyparts.brute_dam)] | BURNING: [format_physical_damage(bodyparts.burn_dam)]
" if(!bodyparts.wounds) continue autopsy_information += "Wounds found:
" @@ -73,7 +73,7 @@ autopsy_information += "
Organ Data
" for(var/obj/item/organ/organs as anything in scanned.organs) - autopsy_information += "[organs.name]: [CEILING(organs.damage, 1)] damage
" + autopsy_information += "[organs.name]: [organs.get_status_text()]
" autopsy_information += "
Chemical Data
" for(var/datum/reagent/scanned_reagents as anything in scanned.reagents.reagent_list)