diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 78a3c993b2c..910e999d61d 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -34,3 +34,5 @@ text = "DEBUG: [msg]") /// 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 + "
") diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 4c4d001ce4c..f655d89511b 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -407,4 +407,4 @@ message = html_encode(message) else message = copytext(message, 2) - to_chat(target, span_purple("Tip of the round: [message]")) + to_chat(target, span_purple(examine_block("Tip of the round: [message]"))) diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 4cabeb9a316..f03f8108b57 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -48,7 +48,7 @@ RegisterSignal(parent, COMSIG_ADD_MOOD_EVENT_RND, .proc/add_event) //Mood events that are only for RnD members /datum/component/mood/proc/print_mood(mob/user) - var/msg = "[span_info("*---------*\nMy current mental status:")]\n" + var/msg = "[span_info("My current mental status:")]\n" msg += span_notice("My current sanity: ") //Long term switch(sanity) if(SANITY_GREAT to INFINITY) @@ -102,7 +102,7 @@ msg += span_boldnicegreen(event.description + "\n") else msg += "[span_grey("I don't have much of a reaction to anything right now.")]\n" - to_chat(user, msg) + to_chat(user, examine_block(msg)) ///Called after moodevent/s have been added/removed. /datum/component/mood/proc/update_mood() diff --git a/code/datums/elements/weapon_description.dm b/code/datums/elements/weapon_description.dm index 32f0e17282f..c2a02491336 100644 --- a/code/datums/elements/weapon_description.dm +++ b/code/datums/elements/weapon_description.dm @@ -62,7 +62,7 @@ SIGNAL_HANDLER if(href_list["examine"]) - to_chat(user, span_notice("[build_label_text(source)]")) + to_chat(user, span_notice(examine_block("[build_label_text(source)]"))) /** * diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 9c5da09c43e..71fc6d6c02c 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -263,12 +263,12 @@ if(!length(shown_skills)) to_chat(user, span_notice("You don't seem to have any particularly outstanding skills.")) return - var/msg = "[span_info("*---------*\nYour skills")]\n" + var/msg = "[span_info("Your skills")]\n" for(var/i in shown_skills) var/datum/skill/the_skill = i msg += "[initial(the_skill.name)] - [get_skill_level_name(the_skill)]\n" msg += "" - to_chat(user, msg) + to_chat(user, examine_block(msg)) /datum/mind/proc/set_death_time() SIGNAL_HANDLER diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c78510508ae..5ef8b69bb01 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -602,10 +602,10 @@ * [COMSIG_ATOM_GET_EXAMINE_NAME] signal */ /atom/proc/get_examine_name(mob/user) - . = "\a [src]" + . = "\a [src]" var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]") if(article) - . = "[article] [src]" + . = "[article] [src]" override[EXAMINE_POSITION_ARTICLE] = article if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) . = override.Join("") @@ -637,7 +637,11 @@ * Produces a signal [COMSIG_PARENT_EXAMINE] */ /atom/proc/examine(mob/user) - . = list("[get_examine_string(user, TRUE)].") + var/examine_string = get_examine_string(user, thats = TRUE) + if(examine_string) + . = list("[examine_string].") + else + . = list() . += get_name_chaser(user) if(desc) @@ -654,7 +658,7 @@ if(length(reagents.reagent_list)) if(user.can_see_reagents()) //Show each individual reagent for(var/datum/reagent/current_reagent as anything in reagents.reagent_list) - . += "[round(current_reagent.volume, 0.01)] units of [current_reagent.name]" + . += "• [round(current_reagent.volume, 0.01)] units of [current_reagent.name]" if(reagents.is_reacting) . += span_warning("It is currently reacting!") . += span_notice("The solution's pH is [round(reagents.ph, 0.01)] and has a temperature of [reagents.chem_temp]K.") diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index 4297245040d..e3f6aab6ad4 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -189,5 +189,5 @@ 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, jointext(message, "\n"), type = MESSAGE_TYPE_INFO) + to_chat(user, examine_block(jointext(message, "\n")), type = MESSAGE_TYPE_INFO) return TRUE diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 996da08d574..68ece23a22d 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -377,7 +377,7 @@ // we handled the last
so we don't need handholding if(tochat) - to_chat(user, jointext(render_list, ""), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) else return(jointext(render_list, "")) @@ -436,7 +436,7 @@ render_list += "[allergies]\n" // we handled the last
so we don't need handholding - to_chat(user, jointext(render_list, ""), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) /obj/item/healthanalyzer/AltClick(mob/user) ..() @@ -475,7 +475,7 @@ else to_chat(user, "No wounds detected in subject.") else - to_chat(user, jointext(render_list, ""), type = MESSAGE_TYPE_INFO) + to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) /obj/item/healthanalyzer/wound name = "first aid analyzer" diff --git a/code/game/objects/items/devices/scanners/slime_scanner.dm b/code/game/objects/items/devices/scanners/slime_scanner.dm index 502a345a558..81b197bfaf8 100644 --- a/code/game/objects/items/devices/scanners/slime_scanner.dm +++ b/code/game/objects/items/devices/scanners/slime_scanner.dm @@ -23,8 +23,7 @@ slime_scan(T, user) /proc/slime_scan(mob/living/simple_animal/slime/T, mob/living/user) - var/to_render = "========================\ - \nSlime scan results:\ + var/to_render = "Slime scan results:\ \n[span_notice("[T.colour] [T.is_adult ? "adult" : "baby"] slime")]\ \nNutrition: [T.nutrition]/[T.get_max_nutrition()]" if (T.nutrition < T.get_starve_nutrition()) @@ -51,4 +50,4 @@ if(T.effectmod) to_render += "\n[span_notice("Core mutation in progress: [T.effectmod]")]\ \n[span_notice("Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]")]" - to_chat(user, to_render + "\n========================") + to_chat(user, examine_block(to_render)) diff --git a/code/modules/hydroponics/grown/weeds/kudzu.dm b/code/modules/hydroponics/grown/weeds/kudzu.dm index b965a5fbffb..45be37cd671 100644 --- a/code/modules/hydroponics/grown/weeds/kudzu.dm +++ b/code/modules/hydroponics/grown/weeds/kudzu.dm @@ -54,7 +54,7 @@ var/output_message = "" for(var/datum/spacevine_mutation/SM in mutations) kudzu_mutations += "[(kudzu_mutations == "") ? "" : ", "][SM.name]" - output_message += "- Plant Mutations: [(kudzu_mutations == "") ? "None." : "[kudzu_mutations]."]" + output_message += "Plant Mutations: [(kudzu_mutations == "") ? "None." : "[kudzu_mutations]."]" return output_message /obj/item/seeds/kudzu/on_chem_reaction(datum/reagents/reagents) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 19ba2b4377f..aa1c3320293 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -74,19 +74,19 @@ */ /obj/item/plant_analyzer/proc/do_plant_stats_scan(atom/scan_target, mob/user) if(istype(scan_target, /obj/machinery/hydroponics)) - to_chat(user, scan_tray_stats(scan_target)) + to_chat(user, examine_block(scan_tray_stats(scan_target))) return TRUE if(istype(scan_target, /obj/structure/glowshroom)) var/obj/structure/glowshroom/shroom_plant = scan_target - to_chat(user, scan_plant_stats(shroom_plant.myseed)) + to_chat(user, examine_block(scan_plant_stats(shroom_plant.myseed))) return TRUE if(istype(scan_target, /obj/item/graft)) - to_chat(user, get_graft_text(scan_target)) + to_chat(user, examine_block(get_graft_text(scan_target))) return TRUE if(isitem(scan_target)) var/obj/item/scanned_object = scan_target if(scanned_object.get_plant_seed() || istype(scanned_object, /obj/item/seeds)) - to_chat(user, scan_plant_stats(scanned_object)) + to_chat(user, examine_block(scan_plant_stats(scanned_object))) return TRUE if(isliving(scan_target)) var/mob/living/L = scan_target @@ -107,19 +107,19 @@ */ /obj/item/plant_analyzer/proc/do_plant_chem_scan(atom/scan_target, mob/user) if(istype(scan_target, /obj/machinery/hydroponics)) - to_chat(user, scan_tray_chems(scan_target)) + to_chat(user, examine_block(scan_tray_chems(scan_target))) return TRUE if(istype(scan_target, /obj/structure/glowshroom)) var/obj/structure/glowshroom/shroom_plant = scan_target - to_chat(user, scan_plant_chems(shroom_plant.myseed)) + to_chat(user, examine_block(scan_plant_chems(shroom_plant.myseed))) return TRUE if(istype(scan_target, /obj/item/graft)) - to_chat(user, get_graft_text(scan_target)) + to_chat(user, examine_block(get_graft_text(scan_target))) return TRUE if(isitem(scan_target)) var/obj/item/scanned_object = scan_target if(scanned_object.get_plant_seed() || istype(scanned_object, /obj/item/seeds)) - to_chat(user, scan_plant_chems(scanned_object)) + to_chat(user, examine_block(scan_plant_chems(scanned_object))) return TRUE if(isliving(scan_target)) var/mob/living/L = scan_target @@ -167,24 +167,24 @@ * Returns the formatted message as text. */ /obj/item/plant_analyzer/proc/scan_tray_stats(obj/machinery/hydroponics/scanned_tray) - var/returned_message = "*---------*\n" + var/returned_message = "" if(scanned_tray.myseed) - returned_message += "*** [span_bold("[scanned_tray.myseed.plantname]")] ***\n" - returned_message += "- Plant Age: [span_notice("[scanned_tray.age]")]\n" - returned_message += "- Plant Health: [span_notice("[scanned_tray.plant_health]")]\n" - returned_message += scan_plant_stats(scanned_tray.myseed) + returned_message += "[span_bold("[scanned_tray.myseed.plantname]")]" + returned_message += "\nPlant Age: [span_notice("[scanned_tray.age]")]" + returned_message += "\nPlant Health: [span_notice("[scanned_tray.plant_health]")]" + returned_message += scan_plant_stats(scanned_tray.myseed, TRUE) + returned_message += "\nGrowth medium" else - returned_message += span_bold("No plant found.\n") + returned_message += span_bold("No plant found.") - returned_message += "- Weed level: [span_notice("[scanned_tray.weedlevel] / [MAX_TRAY_WEEDS]")]\n" - returned_message += "- Pest level: [span_notice("[scanned_tray.pestlevel] / [MAX_TRAY_PESTS]")]\n" - returned_message += "- Toxicity level: [span_notice("[scanned_tray.toxic] / [MAX_TRAY_TOXINS]")]\n" - returned_message += "- Water level: [span_notice("[scanned_tray.waterlevel] / [scanned_tray.maxwater]")]\n" - returned_message += "- Nutrition level: [span_notice("[scanned_tray.reagents.total_volume] / [scanned_tray.maxnutri]")]\n" + returned_message += "\nWeed level: [span_notice("[scanned_tray.weedlevel] / [MAX_TRAY_WEEDS]")]" + returned_message += "\nPest level: [span_notice("[scanned_tray.pestlevel] / [MAX_TRAY_PESTS]")]" + returned_message += "\nToxicity level: [span_notice("[scanned_tray.toxic] / [MAX_TRAY_TOXINS]")]" + returned_message += "\nWater level: [span_notice("[scanned_tray.waterlevel] / [scanned_tray.maxwater]")]" + returned_message += "\nNutrition level: [span_notice("[scanned_tray.reagents.total_volume] / [scanned_tray.maxnutri]")]" if(scanned_tray.yieldmod != 1) - returned_message += "- Yield modifier on harvest: [span_notice("[scanned_tray.yieldmod]x")]\n" + returned_message += "\nYield modifier on harvest: [span_notice("[scanned_tray.yieldmod]x")]" - returned_message += "*---------*" return span_info(returned_message) /** @@ -196,22 +196,21 @@ * Returns the formatted message as text. */ /obj/item/plant_analyzer/proc/scan_tray_chems(obj/machinery/hydroponics/scanned_tray) - var/returned_message = "*---------*\n" + var/returned_message = "" if(scanned_tray.myseed) - returned_message += "*** [span_bold("[scanned_tray.myseed.plantname]")] ***\n" - returned_message += "- Plant Age: [span_notice("[scanned_tray.age]")]\n" - returned_message += scan_plant_chems(scanned_tray.myseed) + returned_message += "[span_bold("[scanned_tray.myseed.plantname]")]" + returned_message += "\nPlant Age: [span_notice("[scanned_tray.age]")]" + returned_message += scan_plant_chems(scanned_tray.myseed, TRUE) else - returned_message += span_bold("No plant found.\n") + returned_message += span_bold("No plant found.") - returned_message += "- Tray contains:\n" + returned_message += "\nGrowth medium contains:" if(scanned_tray.reagents.reagent_list.len) for(var/datum/reagent/reagent_id in scanned_tray.reagents.reagent_list) - returned_message += "- [span_notice("[reagent_id.volume] / [scanned_tray.maxnutri] units of [reagent_id]")]\n" + returned_message += "\n[span_notice("• [reagent_id.volume] / [scanned_tray.maxnutri] units of [reagent_id]")]" else - returned_message += "[span_notice("No reagents found.")]\n" + returned_message += "\n[span_notice("No reagents found.")]" - returned_message += "*---------*" return span_info(returned_message) /** @@ -222,8 +221,12 @@ * * Returns the formatted output as text. */ -/obj/item/plant_analyzer/proc/scan_plant_stats(obj/item/scanned_object) - var/returned_message = "*---------*\nThis is [span_name("\a [scanned_object]")].\n" +/obj/item/plant_analyzer/proc/scan_plant_stats(obj/item/scanned_object, in_tray = FALSE) + var/returned_message = "" + if(!in_tray) + returned_message += "This is [span_name("\a [scanned_object]")]." + else + returned_message += "\nSeed Stats" var/obj/item/seeds/our_seed = scanned_object if(!istype(our_seed)) //if we weren't passed a seed, we were passed a plant with a seed our_seed = scanned_object.get_plant_seed() @@ -231,9 +234,8 @@ if(our_seed && istype(our_seed)) returned_message += get_analyzer_text_traits(our_seed) else - returned_message += "*---------*\nNo genes found.\n*---------*" + returned_message += "\nNo genes found." - returned_message += "\n" return span_info(returned_message) /** @@ -244,8 +246,12 @@ * * Returns the formatted output as text. */ -/obj/item/plant_analyzer/proc/scan_plant_chems(obj/item/scanned_object) - var/returned_message = "*---------*\nThis is [span_name("\a [scanned_object]")].\n" +/obj/item/plant_analyzer/proc/scan_plant_chems(obj/item/scanned_object, in_tray = FALSE) + var/returned_message = "" + if(!in_tray) + returned_message += "This is [span_name("\a [scanned_object]")]." + else + returned_message += "\nSeed Stats" var/obj/item/seeds/our_seed = scanned_object if(!istype(our_seed)) //if we weren't passed a seed, we were passed a plant with a seed our_seed = scanned_object.get_plant_seed() @@ -255,9 +261,8 @@ else if (our_seed.reagents_add?.len) //we have a seed with reagent genes returned_message += get_analyzer_text_chem_genes(our_seed) else - returned_message += "*---------*\nNo reagents found.\n*---------*" + returned_message += "\nNo reagents found." - returned_message += "\n" return span_info(returned_message) /** @@ -270,28 +275,28 @@ /obj/item/plant_analyzer/proc/get_analyzer_text_traits(obj/item/seeds/scanned) var/text = "" if(scanned.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) - text += "- Plant type: [span_notice("Weed. Can grow in nutrient-poor soil.")]\n" + text += "\nPlant type: [span_notice("Weed. Can grow in nutrient-poor soil.")]" else if(scanned.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) - text += "- Plant type: [span_notice("Mushroom. Can grow in dry soil.")]\n" + text += "\nPlant type: [span_notice("Mushroom. Can grow in dry soil.")]" else if(scanned.get_gene(/datum/plant_gene/trait/plant_type/alien_properties)) - text += "- Plant type: [span_warning("UNKNOWN")] \n" + text += "\nPlant type: [span_warning("UNKNOWN")]" else - text += "- Plant type: [span_notice("Normal plant")]\n" + text += "\nPlant type: [span_notice("Normal plant")]" if(scanned.potency != -1) - text += "- Potency: [span_notice("[scanned.potency]")]\n" + text += "\nPotency: [span_notice("[scanned.potency]")]" if(scanned.yield != -1) - text += "- Yield: [span_notice("[scanned.yield]")]\n" - text += "- Maturation speed: [span_notice("[scanned.maturation]")]\n" + text += "\nYield: [span_notice("[scanned.yield]")]" + text += "\nMaturation speed: [span_notice("[scanned.maturation]")]" if(scanned.yield != -1) - text += "- Production speed: [span_notice("[scanned.production]")]\n" - text += "- Endurance: [span_notice("[scanned.endurance]")]\n" - text += "- Lifespan: [span_notice("[scanned.lifespan]")]\n" - text += "- Instability: [span_notice("[scanned.instability]")]\n" - text += "- Weed Growth Rate: [span_notice("[scanned.weed_rate]")]\n" - text += "- Weed Vulnerability: [span_notice("[scanned.weed_chance]")]\n" + text += "\nProduction speed: [span_notice("[scanned.production]")]" + text += "\nEndurance: [span_notice("[scanned.endurance]")]" + text += "\nLifespan: [span_notice("[scanned.lifespan]")]" + text += "\nInstability: [span_notice("[scanned.instability]")]" + text += "\nWeed Growth Rate: [span_notice("[scanned.weed_rate]")]" + text += "\nWeed Vulnerability: [span_notice("[scanned.weed_chance]")]" if(scanned.rarity) - text += "- Species Discovery Value: [span_notice("[scanned.rarity]")]\n" + text += "\nSpecies Discovery Value: [span_notice("[scanned.rarity]")]" var/all_removable_traits = "" var/all_immutable_traits = "" for(var/datum/plant_gene/trait/traits in scanned.genes) @@ -302,17 +307,14 @@ else all_immutable_traits += "[(all_immutable_traits == "") ? "" : ", "][traits.get_name()]" - text += "- Plant Traits: [span_notice("[all_removable_traits? all_removable_traits : "None."]")]\n" - text += "- Core Plant Traits: [span_notice("[all_immutable_traits? all_immutable_traits : "None."]")]\n" + text += "\nPlant Traits: [span_notice("[all_removable_traits? all_removable_traits : "None."]")]" + text += "\nCore Plant Traits: [span_notice("[all_immutable_traits? all_immutable_traits : "None."]")]" var/datum/plant_gene/scanned_graft_result = scanned.graft_gene? new scanned.graft_gene : new /datum/plant_gene/trait/repeated_harvest - text += "- Grafting this plant would give: [span_notice("[scanned_graft_result.get_name()]")]\n" + text += "\nGrafting this plant would give: [span_notice("[scanned_graft_result.get_name()]")]" QDEL_NULL(scanned_graft_result) //graft genes are stored as typepaths so if we want to get their formatted name we need a datum ref - musn't forget to clean up afterwards - text += "*---------*" var/unique_text = scanned.get_unique_analyzer_text() if(unique_text) - text += "\n" - text += unique_text - text += "\n*---------*" + text += "\n[unique_text]" return text /** @@ -323,12 +325,9 @@ * Returns the formatted output as text. */ /obj/item/plant_analyzer/proc/get_analyzer_text_chem_genes(obj/item/seeds/scanned) - var/text = "" - text += "- Plant Reagent Genes -\n" - text += "*---------*\n" + var/text = "\nPlant Reagent Genes:" for(var/datum/plant_gene/reagent/gene in scanned.genes) - text += "- [gene.get_name()] -\n" - text += "*---------*" + text += "\n• [gene.get_name()]" return text /** @@ -341,21 +340,19 @@ /obj/item/plant_analyzer/proc/get_analyzer_text_chem_contents(obj/item/scanned_plant) var/text = "" var/reagents_text = "" - text += "- Plant Reagents -\n" - text += "Maximum reagent capacity: [scanned_plant.reagents.maximum_volume]\n" + text += "\nPlant Reagents:" var/chem_cap = 0 for(var/_reagent in scanned_plant.reagents.reagent_list) var/datum/reagent/reagent = _reagent var/amount = reagent.volume chem_cap += reagent.volume - reagents_text += "\n- [reagent.name]: [amount]" - if(chem_cap > 100) - text += "- [span_danger("Reagent Traits Over 100% Production")]\n" - + reagents_text += "\n• [reagent.name]: [amount]" if(reagents_text) - text += "*---------*" text += reagents_text - text += "\n*---------*" + text += "\nMaximum reagent capacity: [scanned_plant.reagents.maximum_volume]" + if(chem_cap > 100) + text += "\n[span_danger("Reagent Traits Over 100% Production")]" + return text /** @@ -366,19 +363,17 @@ * Returns the formatted output as text. */ /obj/item/plant_analyzer/proc/get_graft_text(obj/item/graft/scanned_graft) - var/text = "*---------*\n- Plant Graft -\n" + var/text = "Plant Graft" if(scanned_graft.parent_name) - text += "- Parent Plant: [span_notice("[scanned_graft.parent_name]")] -\n" + text += "\nParent Plant: [span_notice("[scanned_graft.parent_name]")]" if(scanned_graft.stored_trait) - text += "- Graftable Traits: [span_notice("[scanned_graft.stored_trait.get_name()]")] -\n" - text += "*---------*\n" - text += "- Yield: [span_notice("[scanned_graft.yield]")]\n" - text += "- Production speed: [span_notice("[scanned_graft.production]")]\n" - text += "- Endurance: [span_notice("[scanned_graft.endurance]")]\n" - text += "- Lifespan: [span_notice("[scanned_graft.lifespan]")]\n" - text += "- Weed Growth Rate: [span_notice("[scanned_graft.weed_rate]")]\n" - text += "- Weed Vulnerability: [span_notice("[scanned_graft.weed_chance]")]\n" - text += "*---------*" + text += "\nGraftable Traits: [span_notice("[scanned_graft.stored_trait.get_name()]")]" + text += "\nYield: [span_notice("[scanned_graft.yield]")]" + text += "\nProduction speed: [span_notice("[scanned_graft.production]")]" + text += "\nEndurance: [span_notice("[scanned_graft.endurance]")]" + text += "\nLifespan: [span_notice("[scanned_graft.lifespan]")]" + text += "\nWeed Growth Rate: [span_notice("[scanned_graft.weed_rate]")]" + text += "\nWeed Vulnerability: [span_notice("[scanned_graft.weed_chance]")]" return span_info(text) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 44597895437..7875f8560dd 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -6,7 +6,7 @@ var/t_has = p_have() var/t_is = p_are() - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") + . = list("This is [icon2html(src, user)] \a [src]!>") var/obscured = check_obscured_slots() if (handcuffed) @@ -150,7 +150,7 @@ . += "[t_He] look[p_s()] very happy." if(MOOD_LEVEL_HAPPY4 to INFINITY) . += "[t_He] look[p_s()] ecstatic." - . += "*---------*" + . += "" SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index bbc3b4c7645..ca9c81a2843 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -14,7 +14,7 @@ if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA) || HAS_TRAIT(L, TRAIT_INVISIBLE_MAN)) obscure_name = TRUE - . = list("*---------*\nThis is [!obscure_name ? name : "Unknown"]!") + . = list("This is [!obscure_name ? name : "Unknown"]!") var/obscured = check_obscured_slots() @@ -399,7 +399,7 @@ "\[Add comment\]"), "") else if(isobserver(user)) . += span_info("Traits: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]") - . += "*---------*" + . += "" SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a6e6621b304..d6246f20e6b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -709,8 +709,9 @@ return var/list/combined_msg = list() - visible_message(span_notice("[src] examines [p_them()]self."), \ - span_notice("You check yourself for injuries.")) + visible_message(span_notice("[src] examines [p_them()]self.")) + + combined_msg += span_notice("You check yourself for injuries.") var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) @@ -894,7 +895,7 @@ if(quirks.len) combined_msg += span_notice("You have these quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)].") - to_chat(src, combined_msg.Join("\n")) + to_chat(src, examine_block(combined_msg.Join("\n"))) /mob/living/carbon/human/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) if(damage_type != BRUTE && damage_type != BURN) diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index b66d842fd10..dc2e5e70546 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -7,7 +7,6 @@ return var/list/print_msg = list() - print_msg += span_info("*---------*") print_msg += span_userdanger("As you snap back to consciousness, you recall people messing with your stuff...") afk_thefts = reverse_range(afk_thefts) @@ -28,7 +27,6 @@ if(LAZYLEN(afk_thefts) >= AFK_THEFT_MAX_MESSAGES) print_msg += span_warning("There may have been more, but that's all you can remember...") - print_msg += span_info("*---------*") - to_chat(src, print_msg.Join("\n")) + to_chat(src, examine_block(print_msg.Join("\n"))) LAZYNULL(afk_thefts) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 3202372a897..265ad8144b9 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,5 +1,5 @@ /mob/living/silicon/ai/examine(mob/user) - . = list("*---------*\nThis is [icon2html(src, user)] [src]!") + . = list("This is [icon2html(src, user)] [src]!") if (stat == DEAD) . += span_deadsay("It appears to be powered-down.") else @@ -14,9 +14,12 @@ else . += span_warning("Its casing is melted and heat-warped!") if(deployed_shell) - . += "The wireless networking light is blinking.\n" + . += "The wireless networking light is blinking." else if (!shunted && !client) - . += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n" - . += "*---------*" + . += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem..." + . += "" . += ..() + +/mob/living/silicon/ai/get_examine_string(mob/user, thats = FALSE) + return null diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index e7ba74698ff..eeb46c28b61 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,5 +1,5 @@ /mob/living/silicon/robot/examine(mob/user) - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") + . = list("This is [icon2html(src, user)] [src]!") if(desc) . += "[desc]" @@ -43,6 +43,9 @@ . += span_warning("It doesn't seem to be responding.") if(DEAD) . += span_deadsay("It looks like its system is corrupted and requires a reset.") - . += "*---------*" + . += "" . += ..() + +/mob/living/silicon/robot/get_examine_string(mob/user, thats = FALSE) + return null diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 41901ae5c8c..92840101901 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -92,13 +92,13 @@ text_span = "purple" if(THEME_HOLY) text_span = "blue" - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!\n[desc]") + . = list("This is [icon2html(src, user)] \a [src]!\n[desc]") if(health < maxHealth) if(health >= maxHealth/2) . += span_warning("[t_He] look[t_s] slightly dented.") else . += span_warning("[t_He] look[t_s] severely dented!") - . += "*---------*" + . += "" /mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/user, list/modifiers) if(isconstruct(user)) //is it a construct? diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 3c0006dec05..48547d76359 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -250,7 +250,7 @@ dust() /mob/living/simple_animal/drone/examine(mob/user) - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") + . = list("This is [icon2html(src, user)] \a [src]!") //Hands for(var/obj/item/I in held_items) @@ -286,7 +286,7 @@ . += span_deadsay("A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\".") else . += span_deadsay("A message repeatedly flashes on its display: \"ERROR -- OFFLINE\".") - . += "*---------*" + . += "" /mob/living/simple_animal/drone/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt maintenance drones. diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index 70db007d955..405356b1d96 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -19,13 +19,13 @@ /mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user) if(dextrous) - . = list("*---------*\nThis is [icon2html(src)] \a [src]!\n[desc]") + . = list("This is [icon2html(src)] \a [src]!\n[desc]") for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) . += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]." if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) . += "It is holding [internal_storage.get_examine_string(user)] in its internal storage." - . += "*---------*" + . += "" else return ..() diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index e4dc91172bb..1893a093582 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -438,7 +438,7 @@ return /mob/living/simple_animal/slime/examine(mob/user) - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") + . = list("This is [icon2html(src, user)] \a [src]!") if (stat == DEAD) . += span_deadsay("It is limp and unresponsive.") else @@ -465,7 +465,7 @@ if(10) . += span_warning("It is radiating with massive levels of electrical activity!") - . += "*---------*" + . += "" /mob/living/simple_animal/slime/proc/discipline_slime(mob/user) if(stat) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ffebe9c793f..2cef6524fc8 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -534,7 +534,11 @@ else result = examinify.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist? - to_chat(src, "[result.Join("\n")]") + if(result.len) + for(var/i in 1 to (length(result) - 1)) + result[i] += "\n" + + to_chat(src, examine_block("[result.Join()]")) SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify) diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index b74b499d6b8..7ef5763f7d8 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -887,6 +887,13 @@ em { margin-left: 3em; } +.examine_block { + background: #1b1c1e; + border: 1px solid #a4bad6; + margin: 0.5em; + padding: 0.5em 0.75em; +} + .tooltip { font-style: italic; border-bottom: 1px dashed #fff; diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index 19e4ee550e1..95fdaece4a8 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -919,6 +919,13 @@ h2.alert { margin-left: 3em; } +.examine_block { + background: #f2f7fa; + border: 1px solid #111a27; + margin: 0.5em; + padding: 0.5em 0.75em; +} + .tooltip { font-style: italic; border-bottom: 1px dashed #000;