"
+ parts += span_greentext("You managed to survive the events on [station_name()] as [M.real_name].")
if(M.mind.assigned_role in GLOB.engineering_positions) // We don't actually need to even really do a check to see if assigned_role is set to anything.
SSachievements.unlock_achievement(/datum/achievement/engineering, C)
else if(M.mind.assigned_role in GLOB.supply_positions) // We don't actually need to even really do a check to see if assigned_role is set to anything.
@@ -366,7 +366,7 @@
else
parts += "
"
- parts += "
You did not survive the events on [station_name()]..."
+ parts += span_redtext("You did not survive the events on [station_name()]...")
else
parts += "
"
parts += "
"
@@ -390,10 +390,10 @@
for (var/i in GLOB.ai_list)
var/mob/living/silicon/ai/aiPlayer = i
if(aiPlayer.mind)
- parts += "[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was deactivated"] were:"
+ parts += "[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:"
parts += aiPlayer.laws.get_law_list(include_zeroth=TRUE)
else if(aiPlayer.deployed_shell?.mind)
- parts += "[aiPlayer.name] (Played by: [aiPlayer.deployed_shell.mind.key])'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was deactivated"] were:"
+ parts += "[aiPlayer.name] (Played by: [aiPlayer.deployed_shell.mind.key])'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:"
parts += aiPlayer.laws.get_law_list(include_zeroth=TRUE)
parts += "Total law changes: [aiPlayer.law_change_counter]"
@@ -403,14 +403,14 @@
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
borg_num--
if(robo.mind)
- robolist += "[robo.name] (Played by: [robo.mind.key])[robo.stat == DEAD ? " (Deactivated)" : ""][borg_num ?", ":""]
"
+ robolist += "[robo.name] (Played by: [robo.mind.key])[robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]
"
parts += "[robolist]"
if(!borg_spacer)
borg_spacer = TRUE
for (var/mob/living/silicon/robot/robo in GLOB.silicon_mobs)
if (!robo.connected_ai && robo.mind)
- parts += "[borg_spacer?"
":""][robo.name] (Played by: [robo.mind.key]) [(robo.stat != DEAD)? "survived as an AI-less borg!" : "was unable to survive the rigors of being a cyborg without an AI."] Its laws were:"
+ parts += "[borg_spacer?"
":""][robo.name] (Played by: [robo.mind.key]) [(robo.stat != DEAD)? "[span_greentext("survived")] as an AI-less borg!" : "was [span_redtext("unable to survive")] the rigors of being a cyborg without an AI."] Its laws were:"
if(robo) //How the hell do we lose robo between here and the world messages directly above this?
parts += robo.laws.get_law_list(include_zeroth=TRUE)
@@ -443,22 +443,22 @@
for(var/datum/department_goal/dg in SSYogs.department_goals)
goals[dg.account] += dg.get_result()
- parts += "
"
+ parts += "
[span_header("Engineering department goals:")]
"
parts += goals[ACCOUNT_ENG]
- parts += "
"
+ parts += "
[span_header("Science department goals:")]
"
parts += goals[ACCOUNT_SCI]
- parts += "
"
+ parts += "
[span_header("Medical department goals:")]
"
parts += goals[ACCOUNT_MED]
- parts += "
"
+ parts += "
[span_header("Service department goals:")]
"
parts += goals[ACCOUNT_SRV]
- parts += "
"
+ parts += "
[span_header("Cargo department goals:")]
"
parts += goals[ACCOUNT_CAR]
- parts += "
"
+ parts += "
[span_header("Security department goals:")]
"
parts += goals[ACCOUNT_SEC]
parts += "
"
@@ -467,7 +467,7 @@
/datum/controller/subsystem/ticker/proc/medal_report()
if(GLOB.commendations.len)
var/list/parts = list()
- parts += ""
+ parts += span_header("Medal Commendations:")
for (var/com in GLOB.commendations)
parts += com
return "
[parts.Join("
")]
"
@@ -476,7 +476,7 @@
/datum/controller/subsystem/ticker/proc/mouse_report()
if(GLOB.mouse_food_eaten)
var/list/parts = list()
- parts += ""
+ parts += span_header("Mouse stats:")
parts += "Mice Born: [GLOB.mouse_spawned]"
parts += "Mice Killed: [GLOB.mouse_killed]"
parts += "Trash Eaten: [GLOB.mouse_food_eaten]"
@@ -540,10 +540,10 @@
sec |= player.mind
if (sec.len)
var/list/result = list()
- result += ""
+ result += span_header("Security Officers:
")
for(var/mob/living/carbon/human/player in GLOB.carbon_list)
if(player.mind && (player.mind.assigned_role in GLOB.security_positions))
- result += "
[player.name] (Played by: [player.mind.key]) [(player.stat != DEAD)? "survived as a [player.mind.assigned_role]" : "fell in the line of duty as a [player.mind.assigned_role]"]
"
+ result += "
[player.name] (Played by: [player.mind.key]) [(player.stat != DEAD)? "[span_greentext("survived")] as a [player.mind.assigned_role]" : "[span_redtext("fell in the line of duty")] as a [player.mind.assigned_role]"]
"
return "
"
return ""
@@ -584,17 +584,17 @@
var/text = "
[ply.key] was
[ply.name][jobtext] and"
if(ply.current)
if(ply.current.stat == DEAD)
- text += "
died"
+ text += " [span_redtext("died")]"
else
- text += "
survived"
+ text += " [span_greentext("survived")]"
if(fleecheck)
var/turf/T = get_turf(ply.current)
if(!T || !is_station_level(T.z))
- text += " while
fleeing the station"
+ text += " while [span_redtext("fleeing the station")]"
if(ply.current.real_name != ply.name)
text += " as
[ply.current.real_name]"
else
- text += "
had their body destroyed"
+ text += " [span_redtext("had their body destroyed")]"
return text
/proc/printplayerlist(list/players,fleecheck)
@@ -614,9 +614,9 @@
var/count = 1
for(var/datum/objective/objective in objectives)
if(objective.check_completion())
- objective_parts += "
Objective #[count]: [objective.explanation_text]
Success!"
+ objective_parts += "
Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]"
else
- objective_parts += "
Objective #[count]: [objective.explanation_text]
Fail."
+ objective_parts += "
Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]"
count++
return objective_parts.Join("
")
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 258e767d4ab9..34c9a43238ac 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -339,10 +339,24 @@
/proc/isLeap(y)
return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
-
+/// For finding out what body parts a body zone covers, the inverse of the below basically
+/proc/zone2body_parts_covered(def_zone)
+ switch(def_zone)
+ if(BODY_ZONE_CHEST)
+ return list(CHEST, GROIN)
+ if(BODY_ZONE_HEAD)
+ return list(HEAD)
+ if(BODY_ZONE_L_ARM)
+ return list(ARM_LEFT, HAND_LEFT)
+ if(BODY_ZONE_R_ARM)
+ return list(ARM_RIGHT, HAND_RIGHT)
+ if(BODY_ZONE_L_LEG)
+ return list(LEG_LEFT, FOOT_LEFT)
+ if(BODY_ZONE_R_LEG)
+ return list(LEG_RIGHT, FOOT_RIGHT)
//Turns a Body_parts_covered bitfield into a list of organ/limb names.
-//(I challenge you to find a use for this)
+//(I challenge you to find a use for this)-I found a use for it!!
/proc/body_parts_covered2organ_names(bpc)
var/list/covered_parts = list()
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 895f1dd14714..70e361f48d2e 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -755,12 +755,10 @@ GLOBAL_LIST_INIT(can_embed_types, typecacheof(list(
/proc/can_embed(obj/item/W)
if(W.is_sharp())
- return 1
- if(is_pointed(W))
- return 1
+ return TRUE
if(is_type_in_typecache(W, GLOB.can_embed_types))
- return 1
+ return TRUE
/*
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 0ab7acec900f..3c9e05a00849 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -42,6 +42,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"BEING_REMOVED" = BEING_REMOVED,
"IN_INVENTORY" = IN_INVENTORY,
"FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE,
+ "HAND_ITEM" = HAND_ITEM,
"NEEDS_PERMIT" = NEEDS_PERMIT,
"SLOWS_WHILE_IN_HAND" = SLOWS_WHILE_IN_HAND,
"NO_MAT_REDEMPTION" = NO_MAT_REDEMPTION,
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 9aa097bcab16..8cb7b26f771f 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -45,7 +45,7 @@
return //So there's no point messaging admins
message_admins("[ADMIN_LOOKUPFLW(src)] was kicked because they failed can_see on AI click of [A] (Turf Loc: [ADMIN_VERBOSEJMP(pixel_turf)]))")
log_admin("[key_name(src)] was kicked because they failed can_see on AI click of [A] (Turf Loc: [AREACOORD(pixel_turf)])")
- to_chat(src, "
You have been automatically kicked because you clicked a turf you shouldn't have been able to see as an AI. You should reconnect automatically. If you do not, you can reconnect using the File --> Reconnect button.")
+ to_chat(src, span_reallybig("You have been automatically kicked because you clicked a turf you shouldn't have been able to see as an AI. You should reconnect automatically. If you do not, you can reconnect using the File --> Reconnect button."))
winset(usr, null, "command=.reconnect")
QDEL_IN(client, 3 SECONDS) //fallback if the reconnection doesnt work
return
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index b0185dfde80b..4bed9d06daee 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -25,7 +25,7 @@
return
if((istype(over_object, /obj/screen/movable/action_button) && !istype(over_object, /obj/screen/movable/action_button/hide_toggle)))
if(locked)
- to_chat(usr, "
Action button \"[name]\" is locked, unlock it first.")
+ to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first."))
return
var/obj/screen/movable/action_button/B = over_object
var/list/actions = usr.actions
@@ -45,14 +45,14 @@
var/list/modifiers = params2list(params)
if(modifiers["shift"])
if(locked)
- to_chat(usr, "
Action button \"[name]\" is locked, unlock it first.")
+ to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first."))
return TRUE
moved = 0
usr.update_action_buttons() //redraw buttons that are no longer considered "moved"
return TRUE
if(modifiers["ctrl"])
locked = !locked
- to_chat(usr, "
Action button \"[name]\" [locked ? "" : "un"]locked.")
+ to_chat(usr, span_notice("Action button \"[name]\" [locked ? "" : "un"]locked."))
if(id && usr.client) //try to (un)remember position
usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = locked ? moved : null
return TRUE
@@ -84,14 +84,14 @@
var/list/modifiers = params2list(params)
if(modifiers["shift"])
if(locked)
- to_chat(usr, "
Action button \"[name]\" is locked, unlock it first.")
+ to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first."))
return TRUE
moved = FALSE
usr.update_action_buttons(TRUE)
return TRUE
if(modifiers["ctrl"])
locked = !locked
- to_chat(usr, "
Action button \"[name]\" [locked ? "" : "un"]locked.")
+ to_chat(usr, span_notice("Action button \"[name]\" [locked ? "" : "un"]locked."))
if(id && usr.client) //try to (un)remember position
usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = locked ? moved : null
return TRUE
@@ -108,7 +108,7 @@
if(id && usr.client)
usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = null
usr.update_action_buttons(TRUE)
- to_chat(usr, "
Action button positions have been reset.")
+ to_chat(usr, span_notice("Action button positions have been reset."))
return TRUE
usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden
@@ -128,7 +128,7 @@
if(moved)
moved = FALSE
user.update_action_buttons(TRUE)
- to_chat(user, "
Action button positions have been reset.")
+ to_chat(user, span_notice("Action button positions have been reset."))
/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud)
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index fc4174f50e71..daec3a3a677d 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -227,7 +227,7 @@ or something covering your eyes."
/obj/screen/alert/mind_control/Click()
var/mob/living/L = usr
- to_chat(L, "
[command]")
+ to_chat(L, "[span_mind_control("[command]")]")
/obj/screen/alert/drunk
name = "Drunk"
@@ -292,7 +292,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
RegisterSignal(taker, COMSIG_MOVABLE_MOVED, /obj/screen/alert/give/.proc/removeAlert)
/obj/screen/alert/give/proc/removeAlert()
- to_chat(mob_viewer, "
You moved out of range of [giver]!")
+ to_chat(mob_viewer, span_warning("You moved out of range of [giver]!"))
mob_viewer.clear_alert("[giver]")
/obj/screen/alert/give/Click(location, control, params)
@@ -680,7 +680,7 @@ so as to remain in compliance with the most up-to-date laws."
return
var/paramslist = params2list(params)
if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
- to_chat(usr, "
[name] -
[desc]")
+ to_chat(usr, "[span_boldnotice("[name]")] - [span_info("[desc]")]")
return
if(master)
return usr.client.Click(master, location, control, params)
diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm
index c045223d9838..266061bec9d3 100644
--- a/code/_onclick/hud/pai.dm
+++ b/code/_onclick/hud/pai.dm
@@ -1,4 +1,4 @@
-#define PAI_MISSING_SOFTWARE_MESSAGE "
You must download the required software to use this."
+#define PAI_MISSING_SOFTWARE_MESSAGE span_warning("You must download the required software to use this.")
/obj/screen/pai
icon = 'icons/mob/screen_pai.dmi'
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index ee18f1476807..496f0a5bfb77 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -207,7 +207,7 @@
screenmob.client.screen += module_store_icon //"store" icon
if(!R.module.modules)
- to_chat(usr, "
Selected module has no modules to select")
+ to_chat(usr, span_danger("Selected module has no modules to select"))
return
if(!R.robot_modules_background)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index e5121049b15e..6f02824a50da 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -77,7 +77,7 @@
return TRUE
var/area/A = get_area(usr)
if(!A.outdoors)
- to_chat(usr, "
There is already a defined structure here.")
+ to_chat(usr, span_warning("There is already a defined structure here."))
return TRUE
create_area(usr)
@@ -293,49 +293,49 @@
if(C.internal)
C.internal = null
- to_chat(C, "
You are no longer running on internals.")
+ to_chat(C, span_notice("You are no longer running on internals."))
icon_state = "internal0"
else
if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
if(!istype(C.wear_mask, /obj/item/clothing/mask))
- to_chat(C, "
You are not wearing an internals mask!")
+ to_chat(C, span_warning("You are not wearing an internals mask!"))
return 1
else
var/obj/item/clothing/mask/M = C.wear_mask
if(M.mask_adjusted) // if mask on face but pushed down
M.adjustmask(C) // adjust it back
if( !(M.clothing_flags & MASKINTERNALS) )
- to_chat(C, "
You are not wearing an internals mask!")
+ to_chat(C, span_warning("You are not wearing an internals mask!"))
return
var/obj/item/I = C.is_holding_item_of_type(/obj/item/tank)
if(I)
- to_chat(C, "
You are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))].")
+ to_chat(C, span_notice("You are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))]."))
C.internal = I
else if(ishuman(C))
var/mob/living/carbon/human/H = C
if(istype(H.s_store, /obj/item/tank))
- to_chat(H, "
You are now running on internals from [H.s_store] on your [H.wear_suit.name].")
+ to_chat(H, span_notice("You are now running on internals from [H.s_store] on your [H.wear_suit.name]."))
H.internal = H.s_store
else if(istype(H.belt, /obj/item/tank))
- to_chat(H, "
You are now running on internals from [H.belt] on your belt.")
+ to_chat(H, span_notice("You are now running on internals from [H.belt] on your belt."))
H.internal = H.belt
else if(istype(H.l_store, /obj/item/tank))
- to_chat(H, "
You are now running on internals from [H.l_store] in your left pocket.")
+ to_chat(H, span_notice("You are now running on internals from [H.l_store] in your left pocket."))
H.internal = H.l_store
else if(istype(H.r_store, /obj/item/tank))
- to_chat(H, "
You are now running on internals from [H.r_store] in your right pocket.")
+ to_chat(H, span_notice("You are now running on internals from [H.r_store] in your right pocket."))
H.internal = H.r_store
//Separate so CO2 jetpacks are a little less cumbersome.
if(!C.internal && istype(C.back, /obj/item/tank))
- to_chat(C, "
You are now running on internals from [C.back] on your back.")
+ to_chat(C, span_notice("You are now running on internals from [C.back] on your back."))
C.internal = C.back
if(C.internal)
icon_state = "internal1"
else
- to_chat(C, "
You don't have an oxygen tank!")
+ to_chat(C, span_warning("You don't have an oxygen tank!"))
return
C.update_action_buttons_icon()
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index db1abd0a5e4c..657ef8c1a3bb 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -22,7 +22,7 @@
// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
/obj/item/proc/attack_self(mob/user)
if(HAS_TRAIT(user, TRAIT_NOINTERACT)) //sorry no using grenades
- to_chat(user, "
You can't use things!")
+ to_chat(user, span_notice("You can't use things!"))
return
if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) & COMPONENT_NO_INTERACT)
return
@@ -50,7 +50,7 @@
if(user.a_intent == INTENT_HARM && stat == DEAD && (butcher_results || guaranteed_butcher_results)) //can we butcher it?
var/datum/component/butchering/butchering = I.GetComponent(/datum/component/butchering)
if(butchering && butchering.butchering_enabled)
- to_chat(user, "
You begin to butcher [src]...")
+ to_chat(user, span_notice("You begin to butcher [src]..."))
playsound(loc, butchering.butcher_sound, 50, TRUE, -1)
if(do_mob(user, src, butchering.speed) && Adjacent(I))
butchering.Butcher(user, src)
@@ -69,11 +69,17 @@
return
if(force && HAS_TRAIT(user, TRAIT_PACIFISM))
- to_chat(user, "
You don't want to harm other living beings!")
+ to_chat(user, span_warning("You don't want to harm other living beings!"))
return TRUE
-
+
if((item_flags & SURGICAL_TOOL) && (user.a_intent != INTENT_HARM)) // checks for if harm intent with surgery tool
- to_chat(user, "
You aren't doing surgery!") //yells at you
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ for(var/i in C.all_wounds)
+ var/datum/wound/W = i
+ if(W.try_treating(src, user))
+ return TRUE
+ to_chat(user, span_warning("You aren't doing surgery!")) //yells at you
return TRUE
if(!force)
@@ -106,7 +112,7 @@
/obj/attacked_by(obj/item/I, mob/living/user)
if(I.force)
- visible_message("
[user] has hit [src] with [I]!", null, null, COMBAT_MESSAGE_RANGE)
+ visible_message(span_danger("[user] has hit [src] with [I]!"), null, null, COMBAT_MESSAGE_RANGE)
//only witnesses close by and the victim see a hit message.
log_combat(user, src, "attacked", I)
take_damage(I.force, I.damtype, "melee", 1)
@@ -144,9 +150,9 @@
else
return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
-/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area)
+/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area, obj/item/bodypart/hit_bodypart)
var/message_verb = "attacked"
- if(I.attack_verb && I.attack_verb.len)
+ if(length(I.attack_verb))
message_verb = "[pick(I.attack_verb)]"
else if(!I.force)
return
@@ -156,6 +162,6 @@
var/attack_message = "[src] has been [message_verb][message_hit_area] with [I]."
if(user in viewers(src, null))
attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!"
- visible_message("
[attack_message]",\
- "
[attack_message]", null, COMBAT_MESSAGE_RANGE)
+ visible_message(span_danger("[attack_message]"),\
+ span_userdanger("[attack_message]"), null, COMBAT_MESSAGE_RANGE)
return 1
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 36c80e15b0a6..3ab4a62aefd2 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -1,17 +1,20 @@
/*
- Humans:
+ Humans:
Adds an exception for gloves, to allow special glove types like the ninja ones.
Otherwise pretty standard.
*/
/mob/living/carbon/human/UnarmedAttack(atom/A, proximity)
-
if(HAS_TRAIT(A, TRAIT_NOINTERACT))
- to_chat(A, "
You can't touch things!")
+ to_chat(A, span_notice("You can't touch things!"))
return
if(!has_active_hand()) //can't attack without a hand.
- to_chat(src, "
You look at your arm and sigh.")
+ var/obj/item/bodypart/check_arm = get_active_hand()
+ if(check_arm?.bodypart_disabled)
+ to_chat(src, span_warning("Your [check_arm.name] is in no condition to be used."))
+ return
+ to_chat(src, span_notice("You look at your arm and sigh."))
return
// Special glove functions:
@@ -22,10 +25,9 @@
return
var/override = 0
-
+ override = SEND_SIGNAL(src, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, A) & COMPONENT_NO_ATTACK_HAND
for(var/datum/mutation/human/HM in dna.mutations)
override += HM.on_attack_hand(A, proximity)
-
if(override)
return
@@ -54,12 +56,12 @@
if(!user.can_interact_with(src))
return FALSE
if((interaction_flags_atom & INTERACT_ATOM_REQUIRES_DEXTERITY) && !user.IsAdvancedToolUser())
- to_chat(user, "
You don't have the dexterity to do this!")
+ to_chat(user, span_warning("You don't have the dexterity to do this!"))
return FALSE
if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED) && user.incapacitated((interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED), !(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB)))
return FALSE
if(HAS_TRAIT(user, TRAIT_NOINTERACT))
- to_chat(user, "
You can't touch things!")
+ to_chat(user, span_notice("You can't touch things!"))
return FALSE
return TRUE
@@ -153,15 +155,15 @@
var/armor = ML.run_armor_check(affecting, "melee")
if(prob(75))
ML.apply_damage(rand(1,3), BRUTE, affecting, armor)
- ML.visible_message("
[name] bites [ML]!", \
- "
[name] bites [ML]!")
+ ML.visible_message(span_danger("[name] bites [ML]!"), \
+ span_userdanger("[name] bites [ML]!"))
if(armor >= 2)
return
for(var/thing in diseases)
var/datum/disease/D = thing
ML.ForceContractDisease(D)
else
- ML.visible_message("
[src] has attempted to bite [ML]!")
+ ML.visible_message(span_danger("[src] has attempted to bite [ML]!"))
/*
Aliens
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index 799c118ba29b..5d26a03f702f 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -14,7 +14,7 @@
/atom/proc/attack_tk(mob/user)
if(HAS_TRAIT(user, TRAIT_NOINTERACT))
- to_chat(user, "
You can't touch things, even with your mind!")
+ to_chat(user, span_notice("You can't touch things, even with your mind!"))
return
if(user.stat || !tkMaxRangeCheck(user, src))
return
@@ -195,7 +195,7 @@
focus.plane = old_plane
/obj/item/tk_grab/suicide_act(mob/user)
- user.visible_message("
[user] is using [user.p_their()] telekinesis to choke [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!")
+ user.visible_message(span_suicide("[user] is using [user.p_their()] telekinesis to choke [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!"))
return (OXYLOSS)
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 1e0b6ceadf45..6d8786398d9a 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -20,6 +20,11 @@
/datum/config_entry/flag/auto_deadmin_security
protection = CONFIG_ENTRY_LOCKED
+/datum/config_entry/flag/auto_deadmin_critical
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/number/auto_deadmin_threshold
+ protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/string/servername // server name (the name of the game window)
diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm
index 148822cdd15b..3f5a2bc15f3d 100644
--- a/code/controllers/failsafe.dm
+++ b/code/controllers/failsafe.dm
@@ -56,23 +56,23 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
if(4,5)
--defcon
if(3)
- message_admins("
Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.")
+ message_admins(span_adminnotice("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks."))
--defcon
if(2)
- to_chat(GLOB.admins, "
Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.")
+ to_chat(GLOB.admins, span_boldannounce("Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks."))
--defcon
if(1)
- to_chat(GLOB.admins, "
Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...")
+ to_chat(GLOB.admins, span_boldannounce("Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting..."))
--defcon
var/rtn = Recreate_MC()
if(rtn > 0)
defcon = 4
master_iteration = 0
- to_chat(GLOB.admins, "
MC restarted successfully")
+ to_chat(GLOB.admins, span_adminnotice("MC restarted successfully"))
else if(rtn < 0)
log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0")
- to_chat(GLOB.admins, "
ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.")
+ to_chat(GLOB.admins, span_boldannounce("ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying."))
//if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again
//no need to handle that specially when defcon 0 can handle it
if(0) //DEFCON 0! (mc failed to restart)
@@ -80,7 +80,7 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
if(rtn > 0)
defcon = 4
master_iteration = 0
- to_chat(GLOB.admins, "
MC restarted successfully")
+ to_chat(GLOB.admins, span_adminnotice("MC restarted successfully"))
else
defcon = min(defcon + 1,5)
master_iteration = Master.iteration
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 8fe8aec1b3f8..73730a57e992 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -152,7 +152,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined."
BadBoy.flags |= SS_NO_FIRE
if(msg)
- to_chat(GLOB.admins, "
[msg]")
+ to_chat(GLOB.admins, span_boldannounce("[msg]"))
log_world(msg)
if (istype(Master.subsystems))
@@ -162,7 +162,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
current_runlevel = Master.current_runlevel
StartProcessing(10)
else
- to_chat(world, "
The Master Controller is having some issues, we will need to re-initialize EVERYTHING")
+ to_chat(world, span_boldannounce("The Master Controller is having some issues, we will need to re-initialize EVERYTHING"))
Initialize(20, TRUE)
@@ -180,7 +180,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
if(init_sss)
init_subtypes(/datum/controller/subsystem, subsystems)
- to_chat(world, "
Initializing subsystems...")
+ to_chat(world, span_boldannounce("Initializing subsystems..."))
// Sort subsystems by init_order, so they initialize in the correct order.
sortTim(subsystems, /proc/cmp_subsystem_init)
@@ -197,7 +197,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
var/time = (REALTIMEOFDAY - start_timeofday) / 10
var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!"
- to_chat(world, "
[msg]")
+ to_chat(world, span_boldannounce("[msg]"))
log_world(msg)
//yogs start - webhook support
var/list/webhookData = list(\
diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm
index cbeb56cb4c58..8c0a290d279d 100644
--- a/code/controllers/subsystem.dm
+++ b/code/controllers/subsystem.dm
@@ -165,7 +165,7 @@
SEND_SIGNAL(src, COMSIG_SUBSYSTEM_POST_INITIALIZE, start_timeofday)
var/time = (REALTIMEOFDAY - start_timeofday) / 10
var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!"
- to_chat(world, "
[msg]")
+ to_chat(world, span_boldannounce("[msg]"))
log_world(msg)
return time
diff --git a/code/controllers/subsystem/achievements.dm b/code/controllers/subsystem/achievements.dm
index cd18c9e1c998..3cda6a07e82f 100644
--- a/code/controllers/subsystem/achievements.dm
+++ b/code/controllers/subsystem/achievements.dm
@@ -130,7 +130,7 @@ SUBSYSTEM_DEF(achievements)
qdel(medalQuery)
cached_achievements[C.ckey] += achievement
achievementsEarned[C.ckey] += list(achievement) // Apparently adding a list to a nullvar just makes the var the list. Neat!
- to_chat(C, "
You have unlocked the \"[achievement.name]\" achievement!")
+ to_chat(C, span_greentext("You have unlocked the \"[achievement.name]\" achievement!"))
return TRUE
/**
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 3904143392f7..af1b5fc55645 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -392,7 +392,7 @@ SUBSYSTEM_DEF(air)
CHECK_TICK*/
var/msg = "HEY! LISTEN! [DisplayTimeText(world.timeofday - timer)] were wasted processing [starting_ats] turf(s) (connected to [ending_ats] other turfs) with atmos differences at round start."
- to_chat(world, "
[msg]")
+ to_chat(world, span_boldannounce("[msg]"))
warning(msg)
/turf/open/proc/resolve_active_graph()
diff --git a/code/controllers/subsystem/augury.dm b/code/controllers/subsystem/augury.dm
index 53c86004a6a4..ce8a531dc106 100644
--- a/code/controllers/subsystem/augury.dm
+++ b/code/controllers/subsystem/augury.dm
@@ -67,13 +67,13 @@ SUBSYSTEM_DEF(augury)
/datum/action/innate/augury/Activate()
SSaugury.watchers += owner
- to_chat(owner, "
You are now auto-following debris.")
+ to_chat(owner, span_notice("You are now auto-following debris."))
active = TRUE
UpdateButtonIcon()
/datum/action/innate/augury/Deactivate()
SSaugury.watchers -= owner
- to_chat(owner, "
You are no longer auto-following debris.")
+ to_chat(owner, span_notice("You are no longer auto-following debris."))
active = FALSE
UpdateButtonIcon()
diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm
index fcc3c9dce312..82dd6cae6aad 100644
--- a/code/controllers/subsystem/dbcore.dm
+++ b/code/controllers/subsystem/dbcore.dm
@@ -324,7 +324,7 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table
/datum/DBQuery/proc/warn_execute(async = TRUE)
. = Execute(async)
if(!.)
- to_chat(usr, "
A SQL error occurred during this operation, check the server logs.")
+ to_chat(usr, span_danger("A SQL error occurred during this operation, check the server logs."))
/datum/DBQuery/proc/Execute(async = TRUE, log_error = TRUE)
Activity("Execute")
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 5dafdac0c3f9..8393ce642f2a 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -44,7 +44,7 @@ SUBSYSTEM_DEF(job)
occupations = list()
var/list/all_jobs = subtypesof(/datum/job)
if(!all_jobs.len)
- to_chat(world, "
Error setting up jobs, no job datums found")
+ to_chat(world, span_boldannounce("Error setting up jobs, no job datums found"))
return 0
for(var/J in all_jobs)
@@ -497,7 +497,7 @@ SUBSYSTEM_DEF(job)
to_chat(M, "
Space Law has been updated! Click here to view the updates.")
//YOGS end
if(CONFIG_GET(number/minimal_access_threshold))
- to_chat(M, "
As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.")
+ to_chat(M, span_notice("
As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card."))
var/related_policy = get_policy(rank)
if(related_policy)
to_chat(M,related_policy)
@@ -552,6 +552,21 @@ SUBSYSTEM_DEF(job)
var/datum/map_template/template = SSmapping.station_room_templates[choice]
+ if(isnull(template))
+ message_admins("WARNING: BAR TEMPLATE [choice] FAILED TO LOAD! ATTEMPTING TO LOAD BACKUP")
+ log_game("WARNING: BAR TEMPLATE [choice] FAILED TO LOAD! ATTEMPTING TO LOAD BACKUP")
+ for(var/backup_bar in GLOB.potential_box_bars)
+ template = SSmapping.station_room_templates[backup_bar]
+ if(!isnull(template))
+ break
+ message_admins("WARNING: BAR TEMPLATE [backup_bar] FAILED TO LOAD! ATTEMPTING TO LOAD BACKUP")
+ log_game("WARNING: BAR TEMPLATE [backup_bar] FAILED TO LOAD! ATTEMPTING TO LOAD BACKUP")
+
+ if(isnull(template))
+ message_admins("WARNING: BAR RECOVERY FAILED! THERE WILL BE NO BAR FOR THIS ROUND!")
+ log_game("WARNING: BAR RECOVERY FAILED! THERE WILL BE NO BAR FOR THIS ROUND!")
+ return
+
for(var/obj/effect/landmark/stationroom/box/bar/B in GLOB.landmarks_list)
template.load(B.loc, centered = FALSE)
qdel(B)
@@ -562,6 +577,8 @@ SUBSYSTEM_DEF(job)
var/datum/job/job = GetJob(rank)
if(!job)
return
+ if((job.auto_deadmin_role_flags & DEADMIN_POSITION_CRITICAL) && (CONFIG_GET(flag/auto_deadmin_critical) || (C.prefs?.toggles & DEADMIN_POSITION_CRITICAL)))
+ return C.holder.auto_deadmin()
if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && (CONFIG_GET(flag/auto_deadmin_heads) || (C.prefs?.toggles & DEADMIN_POSITION_HEAD)))
return C.holder.auto_deadmin()
else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && (CONFIG_GET(flag/auto_deadmin_security) || (C.prefs?.toggles & DEADMIN_POSITION_SECURITY)))
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index 67e19fb3db14..fd9be0af713a 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -58,7 +58,7 @@ SUBSYSTEM_DEF(mapping)
var/old_config = config
config = global.config.defaultmap
if(!config || config.defaulted)
- to_chat(world, "
Unable to load next or default map config, defaulting to Box Station")
+ to_chat(world, span_boldannounce("Unable to load next or default map config, defaulting to Box Station"))
config = old_config
loadWorld()
repopulate_sorted_areas()
@@ -80,9 +80,9 @@ SUBSYSTEM_DEF(mapping)
// Load the virtual reality hub
if(CONFIG_GET(flag/virtual_reality))
- to_chat(world, "
Loading virtual reality...")
+ to_chat(world, span_boldannounce("Loading virtual reality..."))
load_new_z_level("_maps/RandomZLevels/VR/vrhub.dmm", "Virtual Reality Hub")
- to_chat(world, "
Virtual reality loaded.")
+ to_chat(world, span_boldannounce("Virtual reality loaded."))
// Generate mining ruins
loading_ruins = TRUE
@@ -212,7 +212,7 @@ SUBSYSTEM_DEF(mapping)
z_list = SSmapping.z_list
-#define INIT_ANNOUNCE(X) to_chat(world, "
[X]"); log_world(X)
+#define INIT_ANNOUNCE(X) to_chat(world, span_boldannounce("[X]")); log_world(X)
/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE)
. = list()
var/start_time = REALTIMEOFDAY
@@ -371,7 +371,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
message_admins("Randomly rotating map to [VM.map_name].")
. = changemap(VM)
if (. && VM.map_name != config.map_name)
- to_chat(world, "
Map rotation has chosen [VM.map_name] for next round!")
+ to_chat(world, span_boldannounce("Map rotation has chosen [VM.map_name] for next round!"))
/datum/controller/subsystem/mapping/proc/changemap(var/datum/map_config/VM)
if(!VM.MakeNextMap())
@@ -471,13 +471,13 @@ GLOBAL_LIST_EMPTY(the_station_areas)
if(!mapfile)
return
away_name = "[mapfile] custom"
- to_chat(usr,"
Loading [away_name]...")
+ to_chat(usr,span_notice("Loading [away_name]..."))
var/datum/map_template/template = new(mapfile, "Away Mission")
away_level = template.load_new_z()
else
if(answer in GLOB.potentialRandomZlevels)
away_name = answer
- to_chat(usr,"
Loading [away_name]...")
+ to_chat(usr,span_notice("Loading [away_name]..."))
var/datum/map_template/template = new(away_name, "Away Mission")
away_level = template.load_new_z()
else
@@ -569,7 +569,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
reserve_turfs(clearing)
/datum/controller/subsystem/mapping/proc/build_minimaps()
- to_chat(world, "
Building minimaps...")
+ to_chat(world, span_boldannounce("Building minimaps..."))
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
station_minimaps += new /datum/minimap(z)
diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index dc7a60918661..fd82007f6587 100644
--- a/code/controllers/subsystem/pai.dm
+++ b/code/controllers/subsystem/pai.dm
@@ -145,7 +145,7 @@ SUBSYSTEM_DEF(pai)
/datum/controller/subsystem/pai/proc/findPAI(obj/item/paicard/p, mob/user)
if(!(GLOB.ghost_role_flags & GHOSTROLE_SILICONS))
- to_chat(user, "
Due to growing incidents of SELF corrupted independent artificial intelligences, freeform personality devices have been temporarily banned in this sector.")
+ to_chat(user, span_warning("Due to growing incidents of SELF corrupted independent artificial intelligences, freeform personality devices have been temporarily banned in this sector."))
return
if(!ghost_spam)
ghost_spam = TRUE
@@ -154,7 +154,7 @@ SUBSYSTEM_DEF(pai)
continue
if(!(ROLE_PAI in G.client.prefs.be_special))
continue
- to_chat(G, "
[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.")
+ to_chat(G, span_ghostalert("[user] is requesting a pAI personality! Use the pAI button to submit yourself as one."))
addtimer(CALLBACK(src, .proc/spam_again), spam_delay)
var/list/available = list()
for(var/datum/paiCandidate/c in SSpai.candidates)
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index a4f4a158411f..7e50c9eb10c8 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -152,6 +152,7 @@ SUBSYSTEM_DEF(persistence)
CollectAntagReputation()
SaveRandomizedRecipes()
SavePaintings()
+ SaveScars()
/datum/controller/subsystem/persistence/proc/GetPhotoAlbums()
var/album_path = file("data/photo_albums.json")
@@ -345,4 +346,16 @@ SUBSYSTEM_DEF(persistence)
var/json_file = file("data/paintings.json")
fdel(json_file)
- WRITE_FILE(json_file, json_encode(paintings))
\ No newline at end of file
+ WRITE_FILE(json_file, json_encode(paintings))
+
+/datum/controller/subsystem/persistence/proc/SaveScars()
+ for(var/i in GLOB.joined_player_list)
+ var/mob/living/carbon/human/ending_human = get_mob_by_ckey(i)
+ if(!istype(ending_human) || !ending_human.mind?.original_character_slot_index || !ending_human.client || !ending_human.client.prefs || !ending_human.client.prefs.persistent_scars)
+ continue
+
+ var/mob/living/carbon/human/original_human = ending_human.mind.original_character
+ if(!original_human || original_human.stat == DEAD || !original_human.all_scars || original_human != ending_human)
+ original_human.save_persistent_scars(TRUE)
+ else
+ original_human.save_persistent_scars()
\ No newline at end of file
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 0396ad18bd18..1f421a3171ab 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -17,7 +17,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
if(!quirks.len)
SetupQuirks()
- quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic","Hypersensitive"),list("Ageusia","Vegetarian","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"),list("Alcohol Tolerance","Light Drinker"),list("Prosthetic Limb (Left Arm)","Prosthetic Limb (Right Arm)","Prosthetic Limb (Left Leg)","Prosthetic Limb (Right Leg)","Prosthetic Limb"))
+ quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic","Hypersensitive"),list("Ageusia","Vegetarian","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"),list("Alcohol Tolerance","Light Drinker"),list("Prosthetic Limb (Left Arm)","Prosthetic Limb"),list("Prosthetic Limb (Right Arm)","Prosthetic Limb"),list("Prosthetic Limb (Left Leg)","Prosthetic Limb"),list("Prosthetic Limb (Right Leg)","Prosthetic Limb"))
return ..()
/datum/controller/subsystem/processing/quirks/proc/SetupQuirks()
diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm
index 1e8e9ae19648..29cf0a5f2cd0 100644
--- a/code/controllers/subsystem/server_maint.dm
+++ b/code/controllers/subsystem/server_maint.dm
@@ -65,7 +65,7 @@ SUBSYSTEM_DEF(server_maint)
var/cmob = C.mob
if (!isnewplayer(cmob) || !SSticker.queued_players.Find(cmob))
log_access("AFK: [key_name(C)]")
- to_chat(C, "
You have been inactive for more than [DisplayTimeText(afk_period)] and have been disconnected.You may reconnect via the button in the file menu or by clicking here to reconnect.")
+ to_chat(C, "[span_userdanger("You have been inactive for more than [DisplayTimeText(afk_period)] and have been disconnected.")]
You may reconnect via the button in the file menu or by clicking here to reconnect.")
QDEL_IN(C, 1) //to ensure they get our message before getting disconnected
continue
@@ -76,7 +76,7 @@ SUBSYSTEM_DEF(server_maint)
return
/datum/controller/subsystem/server_maint/Shutdown()
- kick_clients_in_lobby("
The round came to an end with you in the lobby.", TRUE) //second parameter ensures only afk clients are kicked
+ kick_clients_in_lobby(span_boldannounce("The round came to an end with you in the lobby."), TRUE) //second parameter ensures only afk clients are kicked
var/server = CONFIG_GET(string/server)
for(var/thing in GLOB.clients)
if(!thing)
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index 8f0bafeca1da..c2c4b9f35ced 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -208,7 +208,7 @@ SUBSYSTEM_DEF(shuttle)
var/can_evac_or_fail_reason = SSshuttle.canEvac(user)
if(can_evac_or_fail_reason != TRUE)
- to_chat(user, "
[can_evac_or_fail_reason]")
+ to_chat(user, span_alert("[can_evac_or_fail_reason]"))
return
switch(emergency.mode)
@@ -257,7 +257,7 @@ SUBSYSTEM_DEF(shuttle)
var/area/A = get_area(user)
log_game("[key_name(user)] has called the shuttle.")
- deadchat_broadcast(" has called the shuttle at
[A.name].", "
[user.real_name]", user)
+ deadchat_broadcast(" has called the shuttle at [span_name("[A.name]")].", span_name("[user.real_name]"), user)
if(call_reason)
SSblackbox.record_feedback("text", "shuttle_reason", 1, "[call_reason]")
log_game("Shuttle call reason: [call_reason]")
@@ -295,7 +295,7 @@ SUBSYSTEM_DEF(shuttle)
emergency.cancel(get_area(user))
log_game("[key_name(user)] has recalled the shuttle.")
message_admins("[ADMIN_LOOKUPFLW(user)] has recalled the shuttle.")
- deadchat_broadcast(" has recalled the shuttle from
[get_area_name(user, TRUE)].", "
[user.real_name]", user)
+ deadchat_broadcast(" has recalled the shuttle from [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user)
return 1
/datum/controller/subsystem/shuttle/proc/canRecall()
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index b534e44da916..4ba23dd4df3d 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -117,7 +117,7 @@ SUBSYSTEM_DEF(ticker)
login_music = choose_lobby_music()
if(!login_music)
- to_chat(world, "
Could not load lobby music.") //yogs end
+ to_chat(world, span_boldwarning("Could not load lobby music.")) //yogs end
if(!GLOB.syndicate_code_phrase)
GLOB.syndicate_code_phrase = generate_code_phrase(return_list=TRUE)
@@ -154,7 +154,7 @@ SUBSYSTEM_DEF(ticker)
start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10)
for(var/client/C in GLOB.clients)
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
- to_chat(world, "
Welcome to [station_name()]!")
+ to_chat(world, span_boldnotice("Welcome to [station_name()]!"))
send2chat("New round starting on [SSmapping.config.map_name]!", CONFIG_GET(string/chat_announce_new_game))
current_state = GAME_STATE_PREGAME
//Everyone who wants to be an observer is now spawned
@@ -212,7 +212,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/setup()
- to_chat(world, "
Starting game...")
+ to_chat(world, span_boldannounce("Starting game..."))
var/init_start = world.timeofday
//Create and announce mode
var/list/datum/game_mode/runnable_modes
@@ -226,14 +226,14 @@ SUBSYSTEM_DEF(ticker)
if(runnable_modes.len)
smode = config.pick_mode(GLOB.secret_force_mode)
if(!smode.can_start())
- message_admins("
Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.")
+ message_admins(span_notice("Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed."))
else
mode = smode
if(!mode)
if(!runnable_modes.len)
mode = new /datum/game_mode/extended()
- message_admins("
Unable to choose any non-extended gamemode, running extended.")
+ message_admins(span_notice("Unable to choose any non-extended gamemode, running extended."))
else
mode = pickweight(runnable_modes)
if(!mode) //too few roundtypes all run too recently
@@ -264,7 +264,7 @@ SUBSYSTEM_DEF(ticker)
SSjob.ResetOccupations()
return 0
else
- message_admins("
DEBUG: Bypassing prestart checks...")
+ message_admins(span_notice("DEBUG: Bypassing prestart checks..."))
CHECK_TICK
if(hide_mode)
@@ -297,7 +297,7 @@ SUBSYSTEM_DEF(ticker)
round_start_time = world.time
SSdbcore.SetRoundStart()
- to_chat(world, "
Welcome to [station_name()], enjoy your stay!")
+ to_chat(world, span_notice("
Welcome to [station_name()], enjoy your stay!"))
SEND_SOUND(world, sound(SSstation.announcer.get_rand_welcome_sound()))
current_state = GAME_STATE_PLAYING
@@ -305,7 +305,7 @@ SUBSYSTEM_DEF(ticker)
Master.SetRunLevel(RUNLEVEL_GAME)
if(SSevents.holidays)
- to_chat(world, "
and...")
+ to_chat(world, span_notice("and..."))
for(var/holidayname in SSevents.holidays)
var/datum/holiday/holiday = SSevents.holidays[holidayname]
to_chat(world, "
[holiday.greet()]
")
@@ -452,7 +452,7 @@ SUBSYSTEM_DEF(ticker)
m = pick(memetips)
if(m)
- to_chat(world, "
Tip of the round: [html_encode(m)]")
+ to_chat(world, span_purple("
Tip of the round: [html_encode(m)]"))
/datum/controller/subsystem/ticker/proc/check_queue()
if(!queued_players.len)
@@ -465,7 +465,7 @@ SUBSYSTEM_DEF(ticker)
if(!hpc)
listclearnulls(queued_players)
for (var/mob/dead/new_player/NP in queued_players)
- to_chat(NP, "
The alive players limit has been released!
[html_encode(">>Join Game<<")]")
+ to_chat(NP, span_userdanger("The alive players limit has been released!
[html_encode(">>Join Game<<")]"))
SEND_SOUND(NP, sound('sound/misc/notice1.ogg'))
NP.LateChoices()
queued_players.len = 0
@@ -480,14 +480,14 @@ SUBSYSTEM_DEF(ticker)
listclearnulls(queued_players)
if(living_player_count() < hpc)
if(next_in_line && next_in_line.client)
- to_chat(next_in_line, "
A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<")
+ to_chat(next_in_line, span_userdanger("A slot has opened! You have approximately 20 seconds to join.
\>\>Join Game\<\<"))
SEND_SOUND(next_in_line, sound('sound/misc/notice1.ogg'))
next_in_line.LateChoices()
return
queued_players -= next_in_line //Client disconnected, remove he
queue_delay = 0 //No vacancy: restart timer
if(25 to INFINITY) //No response from the next in line when a vacancy exists, remove he
- to_chat(next_in_line, "
No response received. You have been removed from the line.")
+ to_chat(next_in_line, span_danger("No response received. You have been removed from the line."))
queued_players -= next_in_line
queue_delay = 0
@@ -649,56 +649,53 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/Reboot(reason, end_string, delay, force = FALSE)
set waitfor = FALSE
if(usr && !force)
- if(!check_rights(R_SERVER, TRUE))
+ if(!check_rights(R_ADMIN, TRUE))
return
// yogs end
-
if(!delay)
delay = CONFIG_GET(number/round_end_countdown) * 10
var/skip_delay = check_rights()
if(delay_end && !skip_delay)
- to_chat(world, "
An admin has delayed the round end.")
+ to_chat(world, span_boldannounce("An admin has delayed the round end."))
return
//yogs start - yogs tickets
if(GLOB.ahelp_tickets && GLOB.ahelp_tickets.ticketAmount)
var/list/adm = get_admin_counts(R_BAN)
var/list/activemins = adm["present"]
- if(activemins.len > 0)
- to_chat(world, "
Not all tickets have been resolved. Server restart delayed.")
+ if(activemins.len > 0 && !force) // Ignore tickets if forced
+ to_chat(world, span_boldannounce("Not all tickets have been resolved. Server restart delayed."))
return
else
- to_chat(world, "
Round ended, but there were still active tickets. Please submit a player complaint if you did not receive a response.")
+ to_chat(world, span_boldannounce("Round ended, but there were still active tickets. Please submit a player complaint if you did not receive a response."))
//yogs end - yogs tickets
-
- to_chat(world, "
Rebooting World in [DisplayTimeText(delay)]. [reason]")
+ to_chat(world, span_boldannounce("Rebooting World in [DisplayTimeText(delay)]. [reason]"))
webhook_send_roundstatus("endgame") //yogs - webhook support
-
var/start_wait = world.time
UNTIL(round_end_sound_sent || (world.time - start_wait) > (delay * 2)) //don't wait forever
- sleep(delay - (world.time - start_wait))
-
+ var/newdelay = (delay - (world.time - start_wait) - 10 SECONDS)
+ if(delay > 10 SECONDS) /// JJJJJJJJJJJJJJJJJJJJAAAAAAAAANNNNNNNNKKKKKKKKK
+ sleep(newdelay)
if(delay_end && !skip_delay)
- to_chat(world, "
Reboot was cancelled by an admin.")
+ to_chat(world, span_boldannounce("Reboot was cancelled by an admin."))
return
+ play_roundend()
+ if(newdelay > 0)
+ sleep(10 SECONDS)
+ else
+ sleep(delay - (world.time - start_wait))
if(end_string)
end_state = end_string
-
var/statspage = CONFIG_GET(string/roundstatsurl)
var/gamelogloc = CONFIG_GET(string/gamelogurl)
if(statspage)
- to_chat(world, "
Round statistics and logs can be viewed at this website!")
+ to_chat(world, span_info("Round statistics and logs can be viewed
at this website!"))
else if(gamelogloc)
- to_chat(world, "
Round logs can be located at this website!")
-
- log_game("
Rebooting World. [reason]")
-
+ to_chat(world, span_info("Round logs can be located
at this website!"))
+ log_game(span_boldannounce("Rebooting World. [reason]"))
world.Reboot()
-/datum/controller/subsystem/ticker/Shutdown()
- gather_newscaster() //called here so we ensure the log is created even upon admin reboot
- save_admin_data()
- update_everything_flag_in_db()
+/datum/controller/subsystem/ticker/proc/play_roundend()
if(!round_end_sound)
round_end_sound = pick(\
'sound/roundend/newroundsexy.ogg',
@@ -721,4 +718,10 @@ SUBSYSTEM_DEF(ticker)
)
SEND_SOUND(world, sound(round_end_sound))
+ SStitle.fadeout()
text2file(login_music, "data/last_round_lobby_music.txt")
+
+/datum/controller/subsystem/ticker/Shutdown()
+ gather_newscaster() //called here so we ensure the log is created even upon admin reboot
+ save_admin_data()
+ update_everything_flag_in_db()
diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm
index 5bbc2b45ea6c..18b065ac7670 100644
--- a/code/controllers/subsystem/title.dm
+++ b/code/controllers/subsystem/title.dm
@@ -51,17 +51,18 @@ SUBSYSTEM_DEF(title)
if(splash_turf)
splash_turf.icon = icon
-/datum/controller/subsystem/title/Shutdown()
- if(file_path)
- var/F = file("data/previous_title.dat")
- WRITE_FILE(F, file_path)
-
+/datum/controller/subsystem/title/proc/fadeout()
for(var/thing in GLOB.clients)
if(!thing)
continue
var/obj/screen/splash/S = new(thing, FALSE)
S.Fade(FALSE,FALSE)
+/datum/controller/subsystem/title/Shutdown()
+ if(file_path)
+ var/F = file("data/previous_title.dat")
+ WRITE_FILE(F, file_path)
+
/datum/controller/subsystem/title/Recover()
icon = SStitle.icon
splash_turf = SStitle.splash_turf
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index c0593ea912f7..ce43d30d7bd5 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -166,7 +166,7 @@ SUBSYSTEM_DEF(vote)
if(started_time)
var/next_allowed_time = (started_time + CONFIG_GET(number/vote_delay))
if(mode)
- to_chat(usr, "
There is already a vote in progress! please wait for it to finish.")
+ to_chat(usr, span_warning("There is already a vote in progress! please wait for it to finish."))
return 0
var/lower_admin = FALSE
@@ -175,7 +175,7 @@ SUBSYSTEM_DEF(vote)
lower_admin = TRUE
if(next_allowed_time > world.time && !lower_admin)
- to_chat(usr, "
A vote was initiated recently, you must wait [DisplayTimeText(next_allowed_time-world.time)] before a new vote can be started!")
+ to_chat(usr, span_warning("A vote was initiated recently, you must wait [DisplayTimeText(next_allowed_time-world.time)] before a new vote can be started!"))
return 0
reset()
diff --git a/code/datums/achievements/viewer.dm b/code/datums/achievements/viewer.dm
index 295c5a4ccf13..5aab5e38c25a 100644
--- a/code/datums/achievements/viewer.dm
+++ b/code/datums/achievements/viewer.dm
@@ -84,7 +84,7 @@
set desc = "See all of your achivements"
if(!SSachievements.initialized)
- to_chat(src, "
SSachievements has not initialized yet, please wait.")
+ to_chat(src, span_warning("SSachievements has not initialized yet, please wait."))
return
var/datum/achievement_browser/achievement_browser = SSachievements.get_browser(src)
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 079d7cff0547..543992c13814 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -432,7 +432,7 @@
owner.research_scanner++
else
owner.research_scanner--
- to_chat(owner, "
[target] research scanner has been [active ? "activated" : "deactivated"].")
+ to_chat(owner, span_notice("[target] research scanner has been [active ? "activated" : "deactivated"]."))
return 1
/datum/action/item_action/toggle_research_scanner/Remove(mob/M)
@@ -499,9 +499,9 @@
I.attack_self(owner)
else
if (owner.get_num_arms() <= 0)
- to_chat(owner, "
You dont have any usable hands!")
+ to_chat(owner, span_warning("You dont have any usable hands!"))
else
- to_chat(owner, "
Your hands are full!")
+ to_chat(owner, span_warning("Your hands are full!"))
/datum/action/item_action/agent_box
name = "Deploy Box"
diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm
index 801ba80767d6..e75002079f41 100644
--- a/code/datums/ai_laws.dm
+++ b/code/datums/ai_laws.dm
@@ -78,7 +78,7 @@
id = "robocop"
inherent = list("Serve the public trust.",\
"Protect the innocent.",\
- "Uphold the law.")
+ "Uphold Space Law.")
/datum/ai_laws/cowboy
name = "Talk slowly, think quickly"
@@ -224,7 +224,7 @@
/* Initializers */
/datum/ai_laws/malfunction/New()
..()
- set_zeroth_law("
ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*`&110010")
+ set_zeroth_law(span_danger("ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*`&110010"))
set_laws_config()
/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws.
diff --git a/code/datums/armor.dm b/code/datums/armor.dm
index cbf4b76c60fb..4acdb5baaa78 100644
--- a/code/datums/armor.dm
+++ b/code/datums/armor.dm
@@ -1,9 +1,9 @@
-#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]"
+#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]-[wound]"
-/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
+/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, wound = 0)
. = locate(ARMORID)
if (!.)
- . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic)
+ . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, wound)
/datum/armor
datum_flags = DF_USE_TAG
@@ -17,8 +17,9 @@
var/fire
var/acid
var/magic
+ var/wound
-/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
+/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, wound = 0)
src.melee = melee
src.bullet = bullet
src.laser = laser
@@ -29,15 +30,16 @@
src.fire = fire
src.acid = acid
src.magic = magic
+ src.wound = wound
tag = ARMORID
-/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
- return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic)
+/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, wound = 0)
+ return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic, src.wound+wound)
/datum/armor/proc/modifyAllRatings(modifier = 0)
- return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier)
+ return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier, wound+modifier)
-/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic)
+/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, wound)
return getArmor((isnull(melee) ? src.melee : melee),\
(isnull(bullet) ? src.bullet : bullet),\
(isnull(laser) ? src.laser : laser),\
@@ -47,19 +49,20 @@
(isnull(rad) ? src.rad : rad),\
(isnull(fire) ? src.fire : fire),\
(isnull(acid) ? src.acid : acid),\
- (isnull(magic) ? src.magic : magic))
+ (isnull(magic) ? src.magic : magic),\
+ (isnull(wound) ? src.wound : wound))
/datum/armor/proc/getRating(rating)
return vars[rating]
/datum/armor/proc/getList()
- return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic)
+ return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic, "wound" = wound)
/datum/armor/proc/attachArmor(datum/armor/AA)
- return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic)
+ return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic, wound+AA.wound)
/datum/armor/proc/detachArmor(datum/armor/AA)
- return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic)
+ return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic, wound-AA.wound)
/datum/armor/vv_edit_var(var_name, var_value)
if (var_name == NAMEOF(src, tag))
@@ -67,4 +70,4 @@
. = ..()
tag = ARMORID // update tag in case armor values were edited
-#undef ARMORID
+#undef ARMORID
\ No newline at end of file
diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm
index 1aa1341c9cf9..5026080a843f 100644
--- a/code/datums/brain_damage/brain_trauma.dm
+++ b/code/datums/brain_damage/brain_trauma.dm
@@ -9,8 +9,8 @@
var/scan_desc = "generic brain trauma" //description when detected by a health scanner
var/mob/living/carbon/owner //the poor bastard
var/obj/item/organ/brain/brain //the poor bastard's brain
- var/gain_text = "
You feel traumatized."
- var/lose_text = "
You no longer feel traumatized."
+ var/gain_text = span_notice("You feel traumatized.")
+ var/lose_text = span_notice("You no longer feel traumatized.")
var/can_gain = TRUE
var/random_gain = TRUE //can this be gained through random traumas?
var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure?
diff --git a/code/datums/brain_damage/creepy_trauma.dm b/code/datums/brain_damage/creepy_trauma.dm
index d8ba6f8d6527..0c406e7bc4ff 100644
--- a/code/datums/brain_damage/creepy_trauma.dm
+++ b/code/datums/brain_damage/creepy_trauma.dm
@@ -3,7 +3,7 @@
desc = "Patient has a subtype of delusional disorder, becoming irrationally attached to someone."
scan_desc = "psychotic schizophrenic delusions"
gain_text = "If you see this message, make a github issue report. The trauma initialized wrong."
- lose_text = "
The voices in your head fall silent."
+ lose_text = span_warning("The voices in your head fall silent.")
can_gain = TRUE
random_gain = FALSE
resilience = TRAUMA_RESILIENCE_SURGERY
@@ -27,7 +27,7 @@
qdel(src)
return
obsessedmind = obsession.mind
- gain_text = "
You hear a sickening, raspy voice in your head. It wants one small task of you..."
+ gain_text = span_warning("You hear a sickening, raspy voice in your head. It wants one small task of you...")
owner.mind.add_antag_datum(/datum/antagonist/obsessed)
antagonist = owner.mind.has_antag_datum(/datum/antagonist/obsessed)
antagonist.trauma = src
@@ -95,11 +95,11 @@
owner.dizziness += 10
fail = TRUE
if(3)
- to_chat(owner, "
You feel your heart lurching in your chest...")
+ to_chat(owner, span_userdanger("You feel your heart lurching in your chest..."))
owner.Stun(20)
shake_camera(owner, 15, 1)
if(4)
- to_chat(owner, "
You faint.")
+ to_chat(owner, span_warning("You faint."))
owner.Unconscious(80)
fail = TRUE
return fail
diff --git a/code/datums/brain_damage/hypnosis.dm b/code/datums/brain_damage/hypnosis.dm
index bf24fb6dc418..c1e0baa6321e 100644
--- a/code/datums/brain_damage/hypnosis.dm
+++ b/code/datums/brain_damage/hypnosis.dm
@@ -42,7 +42,7 @@
/datum/brain_trauma/hypnosis/on_lose()
message_admins("[ADMIN_LOOKUPFLW(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
log_game("[key_name(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
- to_chat(owner, "
You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you.")
+ to_chat(owner, span_userdanger("You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you."))
owner.clear_alert("hypnosis")
..()
@@ -53,7 +53,7 @@
if(1)
to_chat(owner, "
...[lowertext(hypnotic_phrase)]...")
if(2)
- new /datum/hallucination/chat(owner, TRUE, FALSE, "
[hypnotic_phrase]")
+ new /datum/hallucination/chat(owner, TRUE, FALSE, span_hypnophrase("[hypnotic_phrase]"))
/datum/brain_trauma/hypnosis/handle_hearing(datum/source, list/hearing_args)
- hearing_args[HEARING_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_MESSAGE], "
$1")
+ hearing_args[HEARING_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_MESSAGE], span_hypnophrase("$1"))
diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm
index 0640c8fa3978..ca44ab1a4512 100644
--- a/code/datums/brain_damage/imaginary_friend.dm
+++ b/code/datums/brain_damage/imaginary_friend.dm
@@ -2,8 +2,8 @@
name = "Imaginary Friend"
desc = "Patient can see and hear an imaginary person."
scan_desc = "partial schizophrenia"
- gain_text = "
You feel in good company, for some reason."
- lose_text = "
You feel lonely again."
+ gain_text = span_notice("You feel in good company, for some reason.")
+ lose_text = span_warning("You feel lonely again.")
var/mob/camera/imaginary_friend/friend
var/friend_initialized = FALSE
@@ -80,9 +80,9 @@
Show()
/mob/camera/imaginary_friend/proc/greet()
- to_chat(src, "
You are the imaginary friend of [owner]!")
- to_chat(src, "
You are absolutely loyal to your friend, no matter what.")
- to_chat(src, "
You cannot directly influence the world around you, but you can see what [owner] cannot.")
+ to_chat(src, span_notice("
You are the imaginary friend of [owner]!"))
+ to_chat(src, span_notice("You are absolutely loyal to your friend, no matter what."))
+ to_chat(src, span_notice("You cannot directly influence the world around you, but you can see what [owner] cannot."))
/mob/camera/imaginary_friend/Initialize(mapload, _trauma)
. = ..()
@@ -159,8 +159,8 @@
src.log_talk(message, LOG_SAY, tag="imaginary friend")
- var/rendered = "
[name] [say_quote(message)]"
- var/dead_rendered = "
[name] (Imaginary friend of [owner]) [say_quote(message)]"
+ var/rendered = "
[span_name("[name]")] [span_message("[say_quote(message)]")]"
+ var/dead_rendered = "
[span_name("[name] (Imaginary friend of [owner])")] [span_message("[say_quote(message)]")]"
to_chat(owner, "[rendered]")
to_chat(src, "[rendered]")
@@ -262,9 +262,9 @@
desc = "The previous host of this body."
/mob/camera/imaginary_friend/trapped/greet()
- to_chat(src, "
You have managed to hold on as a figment of the new host's imagination!")
- to_chat(src, "
All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them.")
- to_chat(src, "
You cannot directly influence the world around you, but you can see what the host cannot.")
+ to_chat(src, span_notice("
You have managed to hold on as a figment of the new host's imagination!"))
+ to_chat(src, span_notice("All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them."))
+ to_chat(src, span_notice("You cannot directly influence the world around you, but you can see what the host cannot."))
/mob/camera/imaginary_friend/trapped/setup_friend()
real_name = "[owner.real_name]?"
diff --git a/code/datums/brain_damage/magic.dm b/code/datums/brain_damage/magic.dm
index 1af6f91d5885..a8920076b464 100644
--- a/code/datums/brain_damage/magic.dm
+++ b/code/datums/brain_damage/magic.dm
@@ -9,8 +9,8 @@
name = "Lumiphobia"
desc = "Patient has an inexplicable adverse reaction to light."
scan_desc = "light hypersensitivity"
- gain_text = "
You feel a craving for darkness."
- lose_text = "
Light no longer bothers you."
+ gain_text = span_warning("You feel a craving for darkness.")
+ lose_text = span_notice("Light no longer bothers you.")
var/next_damage_warning = 0
/datum/brain_trauma/magic/lumiphobia/on_life()
@@ -20,7 +20,7 @@
var/light_amount = T.get_lumcount()
if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
if(world.time > next_damage_warning)
- to_chat(owner, "
The light burns you!")
+ to_chat(owner, span_warning("
The light burns you!"))
next_damage_warning = world.time + 100 //Avoid spamming
owner.take_overall_damage(0,3)
@@ -28,8 +28,8 @@
name = "Poltergeist"
desc = "Patient appears to be targeted by a violent invisible entity."
scan_desc = "paranormal activity"
- gain_text = "
You feel a hateful presence close to you."
- lose_text = "
You feel the hateful presence fade away."
+ gain_text = span_warning("You feel a hateful presence close to you.")
+ lose_text = span_notice("You feel the hateful presence fade away.")
/datum/brain_trauma/magic/poltergeist/on_life()
..()
@@ -49,8 +49,8 @@
name = "Athaumasia"
desc = "Patient is completely inert to magical forces."
scan_desc = "thaumic blank"
- gain_text = "
You realize that magic cannot be real."
- lose_text = "
You realize that magic might be real."
+ gain_text = span_notice("You realize that magic cannot be real.")
+ lose_text = span_notice("You realize that magic might be real.")
/datum/brain_trauma/magic/antimagic/on_gain()
ADD_TRAIT(owner, TRAIT_ANTIMAGIC, TRAUMA_TRAIT)
@@ -64,8 +64,8 @@
name = "Stalking Phantom"
desc = "Patient is stalked by a phantom only they can see."
scan_desc = "extra-sensory paranoia"
- gain_text = "
You feel like something wants to kill you..."
- lose_text = "
You no longer feel eyes on your back."
+ gain_text = span_warning("You feel like something wants to kill you...")
+ lose_text = span_notice("You no longer feel eyes on your back.")
var/obj/effect/hallucination/simple/stalker_phantom/stalker
var/close_stalker = FALSE //For heartbeat
@@ -93,8 +93,8 @@
if(get_dist(owner, stalker) <= 1)
playsound(owner, 'sound/magic/demon_attack1.ogg', 50)
- owner.visible_message("
[owner] is torn apart by invisible claws!", "
Ghostly claws tear your body apart!")
- owner.take_bodypart_damage(rand(20, 45))
+ owner.visible_message(span_warning("[owner] is torn apart by invisible claws!"), span_userdanger("Ghostly claws tear your body apart!"))
+ owner.take_bodypart_damage(rand(20, 45), wound_bonus=CANT_WOUND)
else if(prob(50))
stalker.forceMove(get_step_towards(stalker, owner))
if(get_dist(owner, stalker) <= 8)
@@ -112,4 +112,4 @@
name = "???"
desc = "It's coming closer..."
image_icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
- image_state = "curseblob"
\ No newline at end of file
+ image_state = "curseblob"
diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm
index 0c4ccfde1c48..8a3aba23a4a8 100644
--- a/code/datums/brain_damage/mild.dm
+++ b/code/datums/brain_damage/mild.dm
@@ -95,10 +95,10 @@
if(6 to 9)
owner.slurring += 30
if(10)
- to_chat(owner, "
You forget for a moment what you were doing.")
+ to_chat(owner, span_notice("You forget for a moment what you were doing."))
owner.Stun(20)
if(11)
- to_chat(owner, "
You faint.")
+ to_chat(owner, span_warning("You faint."))
owner.Unconscious(80)
..()
@@ -135,7 +135,7 @@
if(owner.m_intent == MOVE_INTENT_RUN)
fall_chance += 2
if(prob(fall_chance) && (owner.mobility_flags & MOBILITY_STAND))
- to_chat(owner, "
Your leg gives out!")
+ to_chat(owner, span_warning("Your leg gives out!"))
owner.Paralyze(35)
else if(owner.get_active_held_item())
@@ -143,10 +143,10 @@
var/obj/item/I = owner.get_active_held_item()
drop_chance += I.w_class
if(prob(drop_chance) && owner.dropItemToGround(I))
- to_chat(owner, "
You drop [I]!")
+ to_chat(owner, span_warning("You drop [I]!"))
else if(prob(3))
- to_chat(owner, "
You feel a sudden weakness in your muscles!")
+ to_chat(owner, span_warning("You feel a sudden weakness in your muscles!"))
owner.adjustStaminaLoss(50)
..()
@@ -169,8 +169,8 @@
name = "Nervous Cough"
desc = "Patient feels a constant need to cough."
scan_desc = "nervous cough"
- gain_text = "
Your throat itches incessantly..."
- lose_text = "
Your throat stops itching."
+ gain_text = span_warning("Your throat itches incessantly...")
+ lose_text = span_notice("Your throat stops itching.")
/datum/brain_trauma/mild/nervous_cough/on_life()
if(prob(12) && !HAS_TRAIT(owner, TRAIT_SOOTHED_THROAT))
diff --git a/code/datums/brain_damage/mrat.dm b/code/datums/brain_damage/mrat.dm
index 81e30abcefeb..149529a81338 100644
--- a/code/datums/brain_damage/mrat.dm
+++ b/code/datums/brain_damage/mrat.dm
@@ -2,7 +2,7 @@
name = "Epistemania"
desc = "Patient suffers from a manic pursuit of knowlewdge."
scan_desc = "epistemania"
- gain_text = "
Requesting mentor..."
+ gain_text = span_notice("Requesting mentor...")
lose_text = ""
random_gain = FALSE
resilience = TRAUMA_RESILIENCE_ABSOLUTE
@@ -23,9 +23,9 @@
I.Costume()
friend_initialized = TRUE
- to_chat(owner, "
You have acquired the mentor rat [friend.key], ask them any question you like. They will leave your presence when they are done.")
+ to_chat(owner, span_notice("You have acquired the mentor rat [friend.key], ask them any question you like. They will leave your presence when they are done."))
else
- to_chat(owner, "
No mentor responded to your request. Try again later.")
+ to_chat(owner, span_warning("No mentor responded to your request. Try again later."))
qdel(src)
/mob/camera/imaginary_friend/mrat
@@ -100,10 +100,10 @@
SEND_SOUND(src, sound('sound/misc/soggy.ogg', volume = 50))
/mob/camera/imaginary_friend/mrat/greet()
- to_chat(src, "
You are the mentor rat of [owner]!")
- to_chat(src, "
Do not give [owner] any OOC information from your time as a ghost.")
- to_chat(src, "
Your job is to answer [owner]'s question(s) and you are given this form to assist in that.")
- to_chat(src, "
Don't be stupid with this or you will face the consequences.")
+ to_chat(src, span_notice("
You are the mentor rat of [owner]!"))
+ to_chat(src, span_notice("Do not give [owner] any OOC information from your time as a ghost."))
+ to_chat(src, span_notice("Your job is to answer [owner]'s question(s) and you are given this form to assist in that."))
+ to_chat(src, span_notice("Don't be stupid with this or you will face the consequences."))
/mob/camera/imaginary_friend/mrat/Initialize(mapload, _trauma)
. = ..()
@@ -136,13 +136,13 @@
/datum/action/innate/mrat_leave/Activate()
var/mob/camera/imaginary_friend/I = owner
- to_chat(I, "
You have ejected yourself from [I.owner].")
- to_chat(I.owner, "
Your mentor has left.")
+ to_chat(I, span_warning("You have ejected yourself from [I.owner]."))
+ to_chat(I.owner, span_warning("Your mentor has left."))
qdel(I.trauma)
/mob/camera/imaginary_friend/mrat/pointed(atom/A as mob|obj|turf in view())
if(!..())
return FALSE
to_chat(owner, "
[src] points at [A].")
- to_chat(src, "
You point at [A].")
+ to_chat(src, span_notice("You point at [A]."))
return TRUE
diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm
index 034f2baaaf00..ba8dcb3dd379 100644
--- a/code/datums/brain_damage/phobia.dm
+++ b/code/datums/brain_damage/phobia.dm
@@ -2,8 +2,8 @@
name = "Phobia"
desc = "Patient is unreasonably afraid of something."
scan_desc = "phobia"
- gain_text = "
You start finding default values very unnerving..."
- lose_text = "
You no longer feel afraid of default values."
+ gain_text = span_warning("You start finding default values very unnerving...")
+ lose_text = span_notice("You no longer feel afraid of default values.")
var/phobia_type
var/next_check = 0
var/next_scare = 0
@@ -21,8 +21,8 @@
if(!phobia_type)
phobia_type = pick(SStraumas.phobia_types)
- gain_text = "
You start finding [phobia_type] very unnerving..."
- lose_text = "
You no longer feel afraid of [phobia_type]."
+ gain_text = span_warning("You start finding [phobia_type] very unnerving...")
+ lose_text = span_notice("You no longer feel afraid of [phobia_type].")
scan_desc += " of [phobia_type]"
trigger_words = SStraumas.phobia_words[phobia_type]
trigger_mobs = SStraumas.phobia_mobs[phobia_type]
@@ -88,7 +88,7 @@
if(findtext(hearing_args[HEARING_RAW_MESSAGE], reg))
addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message
- hearing_args[HEARING_MESSAGE] = reg.Replace(hearing_args[HEARING_MESSAGE], "
$1")
+ hearing_args[HEARING_MESSAGE] = reg.Replace(hearing_args[HEARING_MESSAGE], span_phobia("$1"))
break
/datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args)
@@ -98,7 +98,7 @@
var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
if(findtext(speech_args[SPEECH_MESSAGE], reg))
- to_chat(owner, "
You can't bring yourself to say the word \"[word]\"!")
+ to_chat(owner, span_warning("You can't bring yourself to say the word \"[span_phobia("[word]")]\"!"))
speech_args[SPEECH_MESSAGE] = ""
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
@@ -107,15 +107,15 @@
return
var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine")
if(reason)
- to_chat(owner, "
Seeing [reason] [message]!")
+ to_chat(owner, span_userdanger("Seeing [reason] [message]!"))
else if(trigger_word)
- to_chat(owner, "
Hearing \"[trigger_word]\" [message]!")
+ to_chat(owner, span_userdanger("Hearing \"[trigger_word]\" [message]!"))
else
- to_chat(owner, "
Something [message]!")
+ to_chat(owner, span_userdanger("Something [message]!"))
var/reaction = rand(1,4)
switch(reaction)
if(1)
- to_chat(owner, "
You are paralyzed with fear!")
+ to_chat(owner, span_warning("You are paralyzed with fear!"))
owner.Stun(70)
owner.Jitter(8)
if(2)
@@ -125,7 +125,7 @@
if(reason)
owner.pointed(reason)
if(3)
- to_chat(owner, "
You shut your eyes in terror!")
+ to_chat(owner, span_warning("You shut your eyes in terror!"))
owner.Jitter(5)
owner.blind_eyes(10)
if(4)
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index 475b12b820ce..3fbd9b383fee 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -41,8 +41,8 @@
name = "Cerebral Blindness"
desc = "Patient's brain is no longer connected to its eyes."
scan_desc = "extensive damage to the brain's occipital lobe"
- gain_text = "
You can't see!"
- lose_text = "
Your vision returns."
+ gain_text = span_warning("You can't see!")
+ lose_text = span_notice("Your vision returns.")
/datum/brain_trauma/severe/blindness/on_gain()
owner.become_blind(TRAUMA_TRAIT)
@@ -97,20 +97,18 @@
subject = "your left leg"
paralysis_traits = list(TRAIT_PARALYSIS_L_LEG)
- gain_text = "
You can't feel [subject] anymore!"
- lose_text = "
You can feel [subject] again!"
+ gain_text = span_warning("You can't feel [subject] anymore!")
+ lose_text = span_notice("You can feel [subject] again!")
/datum/brain_trauma/severe/paralysis/on_gain()
..()
for(var/X in paralysis_traits)
ADD_TRAIT(owner, X, "trauma_paralysis")
- owner.update_disabled_bodyparts()
/datum/brain_trauma/severe/paralysis/on_lose()
..()
for(var/X in paralysis_traits)
REMOVE_TRAIT(owner, X, "trauma_paralysis")
- owner.update_disabled_bodyparts()
/datum/brain_trauma/severe/paralysis/paraplegic
random_gain = FALSE
@@ -134,10 +132,10 @@
if(owner.drowsyness)
sleep_chance += 3
if(prob(sleep_chance))
- to_chat(owner, "
You fall asleep.")
+ to_chat(owner, span_warning("You fall asleep."))
owner.Sleeping(60)
else if(!owner.drowsyness && prob(sleep_chance * 2))
- to_chat(owner, "
You feel tired...")
+ to_chat(owner, span_warning("You feel tired..."))
owner.drowsyness += 10
/datum/brain_trauma/severe/monophobia
@@ -151,9 +149,9 @@
/datum/brain_trauma/severe/monophobia/on_gain()
..()
if(check_alone())
- to_chat(owner, "
You feel really lonely...")
+ to_chat(owner, span_warning("You feel really lonely..."))
else
- to_chat(owner, "
You feel safe, as long as you have people around you.")
+ to_chat(owner, span_notice("You feel safe, as long as you have people around you."))
/datum/brain_trauma/severe/monophobia/on_life()
..()
@@ -182,18 +180,18 @@
switch(rand(1,6))
if(1)
if(!high_stress)
- to_chat(owner, "
You feel sick...")
+ to_chat(owner, span_warning("You feel sick..."))
else
- to_chat(owner, "
You feel really sick at the thought of being alone!")
+ to_chat(owner, span_warning("You feel really sick at the thought of being alone!"))
addtimer(CALLBACK(owner, /mob/living/carbon.proc/vomit, high_stress), 50) //blood vomit if high stress
if(2)
if(!high_stress)
- to_chat(owner, "
You can't stop shaking...")
+ to_chat(owner, span_warning("You can't stop shaking..."))
owner.dizziness += 20
owner.confused += 20
owner.Jitter(20)
else
- to_chat(owner, "
You feel weak and scared! If only you weren't alone...")
+ to_chat(owner, span_warning("You feel weak and scared! If only you weren't alone..."))
owner.dizziness += 20
owner.confused += 20
owner.Jitter(20)
@@ -201,22 +199,22 @@
if(3, 4)
if(!high_stress)
- to_chat(owner, "
You feel really lonely...")
+ to_chat(owner, span_warning("You feel really lonely..."))
else
- to_chat(owner, "
You're going mad with loneliness!")
+ to_chat(owner, span_warning("You're going mad with loneliness!"))
owner.hallucination += 30
if(5)
if(!high_stress)
- to_chat(owner, "
Your heart skips a beat.")
+ to_chat(owner, span_warning("Your heart skips a beat."))
owner.adjustOxyLoss(8)
else
if(prob(15) && ishuman(owner))
var/mob/living/carbon/human/H = owner
H.set_heartattack(TRUE)
- to_chat(H, "
You feel a stabbing pain in your heart!")
+ to_chat(H, span_userdanger("You feel a stabbing pain in your heart!"))
else
- to_chat(owner, "
You feel your heart lurching in your chest...")
+ to_chat(owner, span_userdanger("You feel your heart lurching in your chest..."))
owner.adjustOxyLoss(8)
/datum/brain_trauma/severe/discoordination
diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm
index b2056200e123..28764207dacc 100644
--- a/code/datums/brain_damage/special.dm
+++ b/code/datums/brain_damage/special.dm
@@ -7,8 +7,8 @@
name = "Godwoken Syndrome"
desc = "Patient occasionally and uncontrollably channels an eldritch god when speaking."
scan_desc = "god delusion"
- gain_text = "
You feel a higher power inside your mind..."
- lose_text = "
The divine presence leaves your head, no longer interested."
+ gain_text = span_notice("You feel a higher power inside your mind...")
+ lose_text = span_warning("The divine presence leaves your head, no longer interested.")
/datum/brain_trauma/special/godwoken/on_life()
..()
@@ -51,8 +51,8 @@
name = "Bluespace Prophecy"
desc = "Patient can sense the bob and weave of bluespace around them, showing them passageways no one else can see."
scan_desc = "bluespace attunement"
- gain_text = "
You feel the bluespace pulsing around you..."
- lose_text = "
The faint pulsing of bluespace fades into silence."
+ gain_text = span_notice("You feel the bluespace pulsing around you...")
+ lose_text = span_warning("The faint pulsing of bluespace fades into silence.")
var/next_portal = 0
/datum/brain_trauma/special/bluespace_prophet/on_life()
@@ -114,27 +114,27 @@
"is pulled into an invisible vortex, vanishing from sight")
var/slip_out_message = pick("silently fades in", "leaps out of thin air","appears", "walks out of an invisible doorway",\
"slides out of a fold in spacetime")
- to_chat(user, "
You try to align with the bluespace stream...")
+ to_chat(user, span_notice("You try to align with the bluespace stream..."))
if(do_after(user, 20, target = src))
new /obj/effect/temp_visual/bluespace_fissure(get_turf(src))
new /obj/effect/temp_visual/bluespace_fissure(get_turf(linked_to))
user.forceMove(get_turf(linked_to))
- user.visible_message("
[user] [slip_in_message].", null, null, null, user)
- user.visible_message("
[user] [slip_out_message].", "
...and find your way to the other side.")
+ user.visible_message(span_warning("[user] [slip_in_message]."), null, null, null, user)
+ user.visible_message(span_warning("[user] [slip_out_message]."), span_notice("...and find your way to the other side."))
/datum/brain_trauma/special/psychotic_brawling
name = "Violent Psychosis"
desc = "Patient fights in unpredictable ways, ranging from helping his target to hitting them with brutal strength."
scan_desc = "violent psychosis"
- gain_text = "
You feel unhinged..."
- lose_text = "
You feel more balanced."
+ gain_text = span_warning("You feel unhinged...")
+ lose_text = span_notice("You feel more balanced.")
var/datum/martial_art/psychotic_brawling/psychotic_brawling
/datum/brain_trauma/special/psychotic_brawling/on_gain()
..()
psychotic_brawling = new(null)
if(!psychotic_brawling.teach(owner, TRUE))
- to_chat(owner, "
But your martial knowledge keeps you grounded.")
+ to_chat(owner, span_notice("But your martial knowledge keeps you grounded."))
qdel(src)
/datum/brain_trauma/special/psychotic_brawling/on_lose()
@@ -149,8 +149,8 @@
name = "Tenacity"
desc = "Patient is psychologically unaffected by pain and injuries, and can remain standing far longer than a normal person."
scan_desc = "traumatic neuropathy"
- gain_text = "
You suddenly stop feeling pain."
- lose_text = "
You realize you can feel pain again."
+ gain_text = span_warning("You suddenly stop feeling pain.")
+ lose_text = span_warning("You realize you can feel pain again.")
/datum/brain_trauma/special/tenacity/on_gain()
ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT)
@@ -168,8 +168,8 @@
name = "Functional Cerebral Necrosis"
desc = "Patient's brain is stuck in a functional near-death state, causing occasional moments of lucid hallucinations, which are often interpreted as the voices of the dead."
scan_desc = "chronic functional necrosis"
- gain_text = "
You feel dead inside."
- lose_text = "
You feel alive again."
+ gain_text = span_warning("You feel dead inside.")
+ lose_text = span_notice("You feel alive again.")
var/active = FALSE
/datum/brain_trauma/special/death_whispers/on_life()
@@ -195,8 +195,8 @@
name = "Criminal"
desc = "Patient seems to be a criminal."
scan_desc = "criminal mind"
- gain_text = "
Justice is coming for you."
- lose_text = "
You were absolved for your crimes."
+ gain_text = span_warning("Justice is coming for you.")
+ lose_text = span_notice("You were absolved for your crimes.")
random_gain = FALSE
var/obj/effect/hallucination/simple/securitron/beepsky
@@ -229,7 +229,7 @@
return
if(get_dist(owner, beepsky) <= 1)
owner.playsound_local(owner, 'sound/weapons/egloves.ogg', 50)
- owner.visible_message("
[owner]'s body jerks as if it was shocked.", "
You feel the fist of the LAW.")
+ owner.visible_message(span_warning("[owner]'s body jerks as if it was shocked."), span_userdanger("You feel the fist of the LAW."))
owner.take_bodypart_damage(0,0,rand(40, 70))
QDEL_NULL(beepsky)
if(prob(20) && get_dist(owner, beepsky) <= 8)
@@ -252,7 +252,7 @@
if(prob(60))
forceMove(get_step_towards(src, victim))
if(prob(5))
- to_chat(victim, "
[name] exclaims, \"
Level 10 infraction alert!\"")
+ to_chat(victim, "[span_name("[name]")] exclaims, \"" + span_robotic("Level 10 infraction alert!") + "\"")
/obj/effect/hallucination/simple/securitron/Destroy()
STOP_PROCESSING(SSfastprocess,src)
diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm
index 2ea66e8de8c2..2b723d502768 100644
--- a/code/datums/brain_damage/split_personality.dm
+++ b/code/datums/brain_damage/split_personality.dm
@@ -5,8 +5,8 @@
name = "Split Personality"
desc = "Patient's brain is split into two personalities, which randomly switch control of the body."
scan_desc = "complete lobe separation"
- gain_text = "
You feel like your mind was split in two."
- lose_text = "
You feel alone again."
+ gain_text = span_warning("You feel like your mind was split in two.")
+ lose_text = span_notice("You feel alone again.")
var/current_controller = OWNER
var/initialized = FALSE //to prevent personalities deleting themselves while we wait for ghosts
var/mob/living/split_personality/stranger_backseat //there's two so they can swap without overwriting
@@ -62,8 +62,8 @@
free_backseat = stranger_backseat
log_game("[key_name(current_backseat)] assumed control of [key_name(owner)] due to [src]. (Original owner: [current_controller == OWNER ? owner.key : current_backseat.key])")
- to_chat(owner, "
You feel your control being taken away... your other personality is in charge now!")
- to_chat(current_backseat, "
You manage to take control of your body!")
+ to_chat(owner, span_userdanger("You feel your control being taken away... your other personality is in charge now!"))
+ to_chat(current_backseat, span_userdanger("You manage to take control of your body!"))
//Body to backseat
@@ -135,11 +135,11 @@
/mob/living/split_personality/Login()
..()
- to_chat(src, "
As a split personality, you cannot do anything but observe. However, you will eventually gain control of your body, switching places with the current personality.")
- to_chat(src, "
Do not commit suicide or put the body in a deadly position. Behave like you care about it as much as the owner.")
+ to_chat(src, span_notice("As a split personality, you cannot do anything but observe. However, you will eventually gain control of your body, switching places with the current personality."))
+ to_chat(src, span_warning("
Do not commit suicide or put the body in a deadly position. Behave like you care about it as much as the owner."))
/mob/living/split_personality/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
- to_chat(src, "
You cannot speak, your other self is controlling your body!")
+ to_chat(src, span_warning("You cannot speak, your other self is controlling your body!"))
return FALSE
/mob/living/split_personality/emote(act, m_type = null, message = null, intentional = FALSE)
@@ -152,7 +152,7 @@
desc = "Patient's brain is split into two personalities, which randomly switch control of the body."
scan_desc = "complete lobe separation"
gain_text = ""
- lose_text = "
You are free of your brainwashing."
+ lose_text = span_notice("You are free of your brainwashing.")
can_gain = FALSE
var/codeword
var/objective
@@ -196,7 +196,7 @@
return
var/message = hearing_args[HEARING_MESSAGE]
if(findtext(message, codeword))
- hearing_args[HEARING_MESSAGE] = replacetext(message, codeword, "
[codeword]")
+ hearing_args[HEARING_MESSAGE] = replacetext(message, codeword, span_warning("[codeword]"))
addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10)
/datum/brain_trauma/severe/split_personality/brainwashing/handle_speech(datum/source, list/speech_args)
@@ -211,10 +211,10 @@
/mob/living/split_personality/traitor/Login()
..()
- to_chat(src, "
As a brainwashed personality, you cannot do anything yet but observe. However, you may gain control of your body if you hear the special codeword, switching places with the current personality.")
- to_chat(src, "
Your activation codeword is: [codeword]")
+ to_chat(src, span_notice("As a brainwashed personality, you cannot do anything yet but observe. However, you may gain control of your body if you hear the special codeword, switching places with the current personality."))
+ to_chat(src, span_notice("Your activation codeword is:
[codeword]"))
if(objective)
- to_chat(src, "
Your master left you an objective: [objective]. Follow it at all costs when in control.")
+ to_chat(src, span_notice("Your master left you an objective:
[objective]. Follow it at all costs when in control."))
#undef OWNER
#undef STRANGER
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 8f73eb365804..437141855a31 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -95,7 +95,7 @@
/datum/browser/proc/open(use_onclose = TRUE)
if(isnull(window_id)) //null check because this can potentially nuke goonchat
WARNING("Browser [title] tried to open with a null ID")
- to_chat(user, "
The [title] browser you tried to open failed a sanity check! Please report this on github!")
+ to_chat(user, span_userdanger("The [title] browser you tried to open failed a sanity check! Please report this on github!"))
return
var/window_size = ""
if (width && height)
diff --git a/code/datums/components/archaeology.dm b/code/datums/components/archaeology.dm
index b5740650e9f0..42ca87c7f7e9 100644
--- a/code/datums/components/archaeology.dm
+++ b/code/datums/components/archaeology.dm
@@ -27,17 +27,17 @@
/datum/component/archaeology/proc/Dig(datum/source, obj/item/I, mob/living/user)
if(dug)
- to_chat(user, "
Looks like someone has dug here already.")
+ to_chat(user, span_notice("Looks like someone has dug here already."))
return
if(!isturf(user.loc))
return
if(I.tool_behaviour == TOOL_SHOVEL || I.tool_behaviour == TOOL_MINING)
- to_chat(user, "
You start digging...")
+ to_chat(user, span_notice("You start digging..."))
if(I.use_tool(parent, user, 40, volume=50))
- to_chat(user, "
You dig a hole.")
+ to_chat(user, span_notice("You dig a hole."))
gets_dug()
dug = TRUE
SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm
index 6f1ba6a8392e..4f65d379f331 100644
--- a/code/datums/components/armor_plate.dm
+++ b/code/datums/components/armor_plate.dm
@@ -34,29 +34,29 @@
if(ismecha(parent))
if(amount)
if(amount < maxamount)
- examine_list += "
Its armor is enhanced with [amount] [upgrade_name]."
+ examine_list += span_notice("Its armor is enhanced with [amount] [upgrade_name].")
else
- examine_list += "
It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter."
+ examine_list += span_notice("It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter.")
else
- examine_list += "
It has attachment points for strapping monster hide on for added protection."
+ examine_list += span_notice("It has attachment points for strapping monster hide on for added protection.")
else
if(amount)
- examine_list += "
It has been strengthened with [amount]/[maxamount] [upgrade_name]."
+ examine_list += span_notice("It has been strengthened with [amount]/[maxamount] [upgrade_name].")
else
- examine_list += "
It can be strengthened with up to [maxamount] [upgrade_name]."
+ examine_list += span_notice("It can be strengthened with up to [maxamount] [upgrade_name].")
/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params)
if(!istype(I,upgrade_item))
return
if(amount >= maxamount)
- to_chat(user, "
You can't improve [parent] any further!")
+ to_chat(user, span_warning("You can't improve [parent] any further!"))
return
if(istype(I,/obj/item/stack))
I.use(1)
else
if(length(I.contents))
- to_chat(user, "
[I] cannot be used for armoring while there's something inside!")
+ to_chat(user, span_warning("[I] cannot be used for armoring while there's something inside!"))
return
qdel(I)
@@ -67,9 +67,9 @@
if(ismecha(O))
var/obj/mecha/R = O
R.update_icon()
- to_chat(user, "
You strengthen [R], improving its resistance against melee, bullet and laser damage.")
+ to_chat(user, span_info("You strengthen [R], improving its resistance against melee, bullet and laser damage."))
else
- to_chat(user, "
You strengthen [O], improving its resistance against melee attacks.")
+ to_chat(user, span_info("You strengthen [O], improving its resistance against melee attacks."))
/datum/component/armor_plate/proc/dropplates(datum/source, force)
diff --git a/code/datums/components/art.dm b/code/datums/components/art.dm
index 2a72218aa22c..7ca4b80ceb3a 100644
--- a/code/datums/components/art.dm
+++ b/code/datums/components/art.dm
@@ -18,7 +18,7 @@
/datum/component/art/proc/apply_moodlet(mob/M, impress)
M.visible_message("[M] stops to admire [parent].", \
- "
You take in [parent], admiring the fine craftsmanship.")
+ span_notice("You take in [parent], admiring the fine craftsmanship."))
switch(impress)
if(GREAT_ART to INFINITY)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "artgreat", /datum/mood_event/artgreat)
diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm
index 372fa8e283e6..587e986da296 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -27,10 +27,10 @@
for(var/_i in 1 to amount)
if(!prob(final_effectiveness))
if(butcher)
- to_chat(butcher, "
You fail to harvest some of the [initial(bones.name)] from [meat].")
+ to_chat(butcher, span_warning("You fail to harvest some of the [initial(bones.name)] from [meat]."))
else if(prob(bonus_chance))
if(butcher)
- to_chat(butcher, "
You harvest some extra [initial(bones.name)] from [meat]!")
+ to_chat(butcher, span_info("You harvest some extra [initial(bones.name)] from [meat]!"))
for(var/i in 1 to 2)
new bones (T)
else
@@ -43,7 +43,7 @@
new sinew (T)
meat.guaranteed_butcher_results.Remove(sinew)
if(butcher)
- meat.visible_message("
[butcher] butchers [meat].")
+ meat.visible_message(span_notice("[butcher] butchers [meat]."))
ButcherEffects(meat)
meat.harvest(butcher)
meat.gib(FALSE, FALSE, TRUE)
diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm
index d6804564cb78..7121a0262d02 100644
--- a/code/datums/components/caltrop.dm
+++ b/code/datums/components/caltrop.dm
@@ -48,15 +48,15 @@
var/damage = rand(min_damage, max_damage)
if(HAS_TRAIT(H, TRAIT_LIGHT_STEP))
damage *= 0.75
- H.apply_damage(damage, BRUTE, picked_def_zone)
+ H.apply_damage(damage, BRUTE, picked_def_zone, wound_bonus = CANT_WOUND)
if(cooldown < world.time - 10) //cooldown to avoid message spam.
if(!H.incapacitated(ignore_restraints = TRUE))
- H.visible_message("
[H] steps on [A].", \
- "
You step on [A]!")
+ H.visible_message(span_danger("[H] steps on [A]."), \
+ span_userdanger("You step on [A]!"))
else
- H.visible_message("
[H] slides on [A]!", \
- "
You slide on [A]!")
+ H.visible_message(span_danger("[H] slides on [A]!"), \
+ span_userdanger("You slide on [A]!"))
cooldown = world.time
H.Paralyze(60)
diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm
index c38e9d3b5aec..e124f491e4ce 100644
--- a/code/datums/components/chasm.dm
+++ b/code/datums/components/chasm.dm
@@ -82,7 +82,7 @@
if(istype(H.belt, /obj/item/wormhole_jaunter))
var/obj/item/wormhole_jaunter/J = H.belt
//To freak out any bystanders
- H.visible_message("
[H] falls into [parent]!")
+ H.visible_message(span_boldwarning("[H] falls into [parent]!"))
J.chasm_react(H)
return FALSE
return TRUE
@@ -96,8 +96,8 @@
if(T)
// send to the turf below
- AM.visible_message("
[AM] falls into [parent]!", "
[fall_message]")
- T.visible_message("
[AM] falls from above!")
+ AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[fall_message]"))
+ T.visible_message(span_boldwarning("[AM] falls from above!"))
AM.forceMove(T)
if(isliving(AM))
var/mob/living/L = AM
@@ -107,7 +107,7 @@
else
// send to oblivion
- AM.visible_message("
[AM] falls into [parent]!", "
[oblivion_message]")
+ AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[oblivion_message]"))
if (isliving(AM))
var/mob/living/L = AM
L.notransform = TRUE
@@ -137,7 +137,7 @@
qdel(AM)
if(AM && !QDELETED(AM)) //It's indestructible
var/atom/parent = src.parent
- parent.visible_message("
[parent] spits out [AM]!")
+ parent.visible_message(span_boldwarning("[parent] spits out [AM]!"))
AM.alpha = oldalpha
AM.color = oldcolor
AM.transform = oldtransform
diff --git a/code/datums/components/cleaning.dm b/code/datums/components/cleaning.dm
index 256d4385421e..9693e4ebfd3f 100644
--- a/code/datums/components/cleaning.dm
+++ b/code/datums/components/cleaning.dm
@@ -25,4 +25,4 @@
if(!(cleaned_human.mobility_flags & MOBILITY_STAND))
cleaned_human.wash(CLEAN_WASH)
cleaned_human.regenerate_icons()
- to_chat(cleaned_human, "
[AM] cleans your face!")
+ to_chat(cleaned_human, span_danger("[AM] cleans your face!"))
diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index b54d2d7bc2cd..f8b148232aa0 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -378,9 +378,9 @@
ui_interact(usr)
var/fail_msg = construct_item(usr, TR)
if(!fail_msg)
- to_chat(usr, "
[TR.name] constructed.")
+ to_chat(usr, span_notice("[TR.name] constructed."))
else
- to_chat(usr, "
Construction failed[fail_msg]")
+ to_chat(usr, span_warning("Construction failed[fail_msg]"))
busy = FALSE
if("toggle_recipes")
display_craftable_only = !display_craftable_only
diff --git a/code/datums/components/fantasy/_fantasy.dm b/code/datums/components/fantasy/_fantasy.dm
index 383dd7c10da0..46e8516d1e31 100644
--- a/code/datums/components/fantasy/_fantasy.dm
+++ b/code/datums/components/fantasy/_fantasy.dm
@@ -92,6 +92,8 @@
master.force = max(0, master.force + quality)
master.throwforce = max(0, master.throwforce + quality)
master.armor = master.armor.modifyAllRatings(quality)
+ master.wound_bonus += quality
+ master.bare_wound_bonus += quality
var/newName = originalName
for(var/i in affixes)
@@ -103,7 +105,7 @@
if(canFail && prob((quality - 9)*10))
var/turf/place = get_turf(parent)
- place.visible_message("
[parent] violently glows blue for a while, then evaporates.")
+ place.visible_message(span_danger("[parent] [span_inathneq_large("violently glows blue")] for a while, then evaporates."))
master.burn()
return
else if(announce)
@@ -123,6 +125,8 @@
master.force = max(0, master.force - quality)
master.throwforce = max(0, master.throwforce - quality)
master.armor = master.armor.modifyAllRatings(-quality)
+ master.wound_bonus -= quality
+ master.bare_wound_bonus -= quality
master.name = originalName
@@ -132,9 +136,9 @@
var/effect_description
if(quality >= 0)
span = "
"
- effect_description = "shimmering golden glow"
+ effect_description = "[span_heavy_brass("shimmering golden glow")]"
else
span = ""
- effect_description = "mottled black glow"
+ effect_description = "[span_umbra_emphasis("mottled black glow")]"
- location.visible_message("[span][originalName] is covered by a [effect_description] and then transforms into [parent]!")
\ No newline at end of file
+ location.visible_message("[span][originalName] is covered by a [effect_description] and then transforms into [parent]!")
diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm
index 279d7635f8a8..48504791271f 100644
--- a/code/datums/components/gunpoint.dm
+++ b/code/datums/components/gunpoint.dm
@@ -1,8 +1,16 @@
-#define GUNPOINT_SHOOTER_STRAY_RANGE 3
-#define GUNPOINT_DELAY_STAGE_2 25
-#define GUNPOINT_DELAY_STAGE_3 85 // cumulative with past stages, so 100 deciseconds
+/// How many tiles around the target the shooter can roam without losing their shot
+#define GUNPOINT_SHOOTER_STRAY_RANGE 2
+/// How long it takes from the gunpoint is initiated to reach stage 2
+#define GUNPOINT_DELAY_STAGE_2 2.5 SECONDS
+/// How long it takes from stage 2 starting to move up to stage 3
+#define GUNPOINT_DELAY_STAGE_3 7.5 SECONDS
+/// If the projectile doesn't have a wound_bonus of CANT_WOUND, we add (this * the stage mult) to their wound_bonus and bare_wound_bonus upon triggering
+#define GUNPOINT_BASE_WOUND_BONUS 5
+/// How much the damage and wound bonus mod is multiplied when you're on stage 1
#define GUNPOINT_MULT_STAGE_1 1
+/// As above, for stage 2
#define GUNPOINT_MULT_STAGE_2 2
+/// As above, for stage 3
#define GUNPOINT_MULT_STAGE_3 2.5
@@ -29,13 +37,13 @@
var/mob/living/shooter = parent
target = targ
weapon = wep
+ RegisterSignal(targ, COMSIG_MOVABLE_MOVED, .proc/check_movement, FALSE) //except this one
RegisterSignal(targ, list(COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_FIRED_GUN, COMSIG_MOB_THROW, COMSIG_MOB_ITEM_ATTACK), .proc/trigger_reaction, TRUE) //any actions by the hostage will trigger the shot no exceptions
- RegisterSignal(targ, COMSIG_MOVABLE_MOVED, .proc/trigger_reaction) //except this one
RegisterSignal(weapon, list(COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED), .proc/cancel)
- shooter.visible_message("
[shooter] aims [weapon] point blank at [target]!", \
- "
You aim [weapon] point blank at [target]!", target)
- to_chat(target, "
[shooter] aims [weapon] point blank at you!")
+ shooter.visible_message(span_danger("[shooter] aims [weapon] point blank at [target]!"), \
+ span_danger("You aim [weapon] point blank at [target]!"), target)
+ to_chat(target, span_userdanger("[shooter] aims [weapon] point blank at you!"))
if(!target.has_status_effect(STATUS_EFFECT_NOTSCARED))
target.Immobilize(10) //short immobilize to let them know they're getting shot at
target.apply_status_effect(STATUS_EFFECT_NOTSCARED)//this can only trigger once per minute so you can't use it to meme people a bunch in a fight
@@ -64,38 +72,37 @@
UnregisterSignal(parent, COMSIG_HUMAN_DISARM_HIT)
UnregisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOB_THROW, COMSIG_MOB_FIRED_GUN, COMSIG_MOB_TABLING))
-// if you're gonna try to break away from a holdup, better to do it right away
+///Update the damage multiplier for whatever stage we're entering into
/datum/component/gunpoint/proc/update_stage(new_stage)
stage = new_stage
if(stage == 2)
- to_chat(parent, "
You steady [weapon] on [target].")
- to_chat(target, "
[parent] has steadied [weapon] on you!")
+ to_chat(parent, span_danger("You steady [weapon] on [target]."))
+ to_chat(target, span_userdanger("[parent] has steadied [weapon] on you!"))
damage_mult = GUNPOINT_MULT_STAGE_2
addtimer(CALLBACK(src, .proc/update_stage, 3), GUNPOINT_DELAY_STAGE_3)
else if(stage == 3)
- to_chat(parent, "
You have fully steadied [weapon] on [target].")
- to_chat(target, "
[parent] has fully steadied [weapon] on you!")
+ to_chat(parent, span_danger("You have fully steadied [weapon] on [target]."))
+ to_chat(target, span_userdanger("[parent] has fully steadied [weapon] on you!"))
damage_mult = GUNPOINT_MULT_STAGE_3
/datum/component/gunpoint/proc/check_deescalate()
if(!can_see(parent, target, GUNPOINT_SHOOTER_STRAY_RANGE - 1))
cancel()
-/datum/component/gunpoint/proc/trigger_reaction(var/forced)
+/datum/component/gunpoint/proc/trigger_reaction()
var/mob/living/shooter = parent
-
- if(!forced && shooter.pulling == target) //target won't get shot if they're being moved by the shooter
- return
if(disrupted)
return
if(point_of_no_return)
return
point_of_no_return = TRUE
+ shooter.remove_status_effect(STATUS_EFFECT_HOLDUP) // try doing these before the trigger gets pulled since the target (or shooter even) may not exist after pulling the trigger, dig?
+ target.remove_status_effect(STATUS_EFFECT_HELDUP)
if(!weapon.can_shoot() || !weapon.can_trigger_gun(shooter) || (weapon.weapon_weight == WEAPON_HEAVY && shooter.get_inactive_held_item()))
- shooter.visible_message("
[shooter] fumbles [weapon]!", \
- "
You fumble [weapon] and fail to fire at [target]!", target)
- to_chat(target, "
[shooter] fumbles [weapon] and fails to fire at you!")
+ shooter.visible_message(span_danger("[shooter] fumbles [weapon]!"), \
+ span_danger("You fumble [weapon] and fail to fire at [target]!"), target)
+ to_chat(target, span_userdanger("[shooter] fumbles [weapon] and fails to fire at you!"))
qdel(src)
return
if(weapon.check_botched(shooter))
@@ -103,28 +110,45 @@
if(weapon.chambered && weapon.chambered.BB)
weapon.chambered.BB.damage *= damage_mult
weapon.chambered.BB.stamina *= damage_mult
-
- weapon.process_fire(target, shooter)
+ if(weapon.chambered.BB.wound_bonus != CANT_WOUND)
+ weapon.chambered.BB.wound_bonus += damage_mult * GUNPOINT_BASE_WOUND_BONUS
+ weapon.chambered.BB.bare_wound_bonus += damage_mult * GUNPOINT_BASE_WOUND_BONUS
+
+ var/fired = weapon.process_fire(target, shooter)
+ if(!fired && weapon.chambered?.BB)
+ weapon.chambered.BB.damage /= damage_mult
+ if(weapon.chambered.BB.wound_bonus != CANT_WOUND)
+ weapon.chambered.BB.wound_bonus -= damage_mult * GUNPOINT_BASE_WOUND_BONUS
+ weapon.chambered.BB.bare_wound_bonus -= damage_mult * GUNPOINT_BASE_WOUND_BONUS
qdel(src)
+///called if the shooter does anything that would cause the target to move, preventing a charged shot from being fired for a short duration
/datum/component/gunpoint/proc/noshooted()
if(!disrupted)
disrupted = TRUE
addtimer(CALLBACK(src, .proc/reshooted), 5)
- to_chat(parent, "
You lose your aim for a second, try not to bump into things or throw stuff.")
+ to_chat(parent, span_boldwarning("You lose your aim for a second, try not to bump into things or throw stuff."))
/datum/component/gunpoint/proc/reshooted()
disrupted = FALSE
/datum/component/gunpoint/proc/cancel()
var/mob/living/shooter = parent
- shooter.visible_message("
[shooter] breaks [shooter.p_their()] aim on [target]!", \
- "
You are no longer aiming [weapon] at [target].", target)
- to_chat(target, "
[shooter] breaks [shooter.p_their()] aim on you!")
+ shooter.visible_message(span_danger("[shooter] breaks [shooter.p_their()] aim on [target]!"), \
+ span_danger("You are no longer aiming [weapon] at [target]."), target)
+ to_chat(target, span_userdanger("[shooter] breaks [shooter.p_their()] aim on you!"))
qdel(src)
-/datum/component/gunpoint/proc/flinch(damage, damagetype, def_zone)
+/datum/component/gunpoint/proc/check_movement()
var/mob/living/shooter = parent
+ if(!(shooter.pulling == target)) //target won't get shot if they're being moved by the shooter
+ trigger_reaction()
+
+///If the shooter is hit by an attack, they have a 50% chance to flinch and fire. If it hit the arm holding the trigger, it's an 80% chance to fire instead
+/datum/component/gunpoint/proc/flinch(attacker, damage, damagetype, def_zone)
+ var/mob/living/shooter = parent
+ if(attacker == shooter)
+ return // somehow this wasn't checked for months but no one tried punching themselves to initiate the shot, amazing
var/flinch_chance = 50
var/gun_hand = LEFT_HANDS
@@ -136,9 +160,9 @@
flinch_chance = 80
if(prob(flinch_chance))
- shooter.visible_message("
[shooter] flinches!", \
- "
You flinch!")
- trigger_reaction(TRUE) //flinching will always result in firing at the target
+ shooter.visible_message(span_danger("[shooter] flinches!"), \
+ span_danger("You flinch!"))
+ trigger_reaction() //flinching will always result in firing at the target
/datum/component/gunpoint/proc/flinch_disarm(attacker,zone_targeted)
var/mob/living/shooter = parent
@@ -153,13 +177,14 @@
flinch_chance = 80
if(prob(flinch_chance))
- shooter.visible_message("
[shooter] flinches!", \
- "
You flinch!")
+ shooter.visible_message(span_danger("[shooter] flinches!"), \
+ span_danger("You flinch!"))
trigger_reaction(TRUE) //flinching will always result in firing at the target
#undef GUNPOINT_SHOOTER_STRAY_RANGE
#undef GUNPOINT_DELAY_STAGE_2
#undef GUNPOINT_DELAY_STAGE_3
+#undef GUNPOINT_BASE_WOUND_BONUS
#undef GUNPOINT_MULT_STAGE_1
#undef GUNPOINT_MULT_STAGE_2
#undef GUNPOINT_MULT_STAGE_3
diff --git a/code/datums/components/heirloom.dm b/code/datums/components/heirloom.dm
index 72b28b125dd6..fcc56ab05100 100644
--- a/code/datums/components/heirloom.dm
+++ b/code/datums/components/heirloom.dm
@@ -13,10 +13,10 @@
/datum/component/heirloom/proc/examine(datum/source, mob/user, list/examine_list)
if(user.mind == owner)
- examine_list += "
It is your precious [family_name] family heirloom. Keep it safe!"
+ examine_list += span_notice("It is your precious [family_name] family heirloom. Keep it safe!")
else if(isobserver(user))
- examine_list += "
It is the [family_name] family heirloom, belonging to [owner]."
+ examine_list += span_notice("It is the [family_name] family heirloom, belonging to [owner].")
else
var/datum/antagonist/obsessed/creeper = user.mind.has_antag_datum(/datum/antagonist/obsessed)
if(creeper && creeper.trauma.obsession == owner)
- examine_list += "
This must be [owner]'s family heirloom! It smells just like them..."
+ examine_list += span_nicegreen("This must be [owner]'s family heirloom! It smells just like them...")
diff --git a/code/datums/components/jousting.dm b/code/datums/components/jousting.dm
index ae96fcb4d0b0..ac725967be87 100644
--- a/code/datums/components/jousting.dm
+++ b/code/datums/components/jousting.dm
@@ -56,7 +56,7 @@
target.buckled.unbuckle_mob(target)
target.Paralyze(knockdown_time)
if(length(msg))
- user.visible_message("
[msg]!")
+ user.visible_message(span_danger("[msg]!"))
/datum/component/jousting/proc/mob_move(datum/source, newloc, dir)
if(!current_holder || (requires_mount && ((requires_mob_riding && !ismob(current_holder.buckled)) || (!current_holder.buckled))))
diff --git a/code/datums/components/knockoff.dm b/code/datums/components/knockoff.dm
index a36169e6dfd3..699db4a7bdef 100644
--- a/code/datums/components/knockoff.dm
+++ b/code/datums/components/knockoff.dm
@@ -30,7 +30,7 @@
if(!wearer.dropItemToGround(I))
return
- wearer.visible_message("
[attacker] knocks off [wearer]'s [I.name]!","
[attacker] knocks off your [I.name]!")
+ wearer.visible_message(span_warning("[attacker] knocks off [wearer]'s [I.name]!"),span_userdanger("[attacker] knocks off your [I.name]!"))
/datum/component/knockoff/proc/OnEquipped(datum/source, mob/living/carbon/human/H,slot)
if(!istype(H))
diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm
index f4f07d2a5be0..32333a428fa5 100644
--- a/code/datums/components/material_container.dm
+++ b/code/datums/components/material_container.dm
@@ -51,7 +51,7 @@
var/datum/material/M = I
var/amt = materials[I]
if(amt)
- to_chat(user, "
It has [amt] units of [lowertext(M.name)] stored.")
+ to_chat(user, span_notice("It has [amt] units of [lowertext(M.name)] stored."))
/// Proc that allows players to fill the parent with mats
/datum/component/material_container/proc/OnAttackBy(datum/source, obj/item/I, mob/living/user)
@@ -63,7 +63,7 @@
if(I.item_flags & ABSTRACT)
return
if((I.flags_1 & HOLOGRAM_1) || (I.item_flags & NO_MAT_REDEMPTION) || (tc && !is_type_in_typecache(I, tc)))
- to_chat(user, "
[parent] won't accept [I]!")
+ to_chat(user, span_warning("[parent] won't accept [I]!"))
return
. = COMPONENT_NO_AFTERATTACK
var/datum/callback/pc = precondition
@@ -71,10 +71,10 @@
return
var/material_amount = get_item_material_amount(I)
if(!material_amount)
- to_chat(user, "
[I] does not contain sufficient amounts of metal or glass to be accepted by [parent].")
+ to_chat(user, span_warning("[I] does not contain sufficient amounts of metal or glass to be accepted by [parent]."))
return
if(!has_space(material_amount))
- to_chat(user, "
[parent] is full. Please remove metal or glass from [parent] in order to insert more.")
+ to_chat(user, span_warning("[parent] is full. Please remove metal or glass from [parent] in order to insert more."))
return
user_insert(I, user)
@@ -92,18 +92,18 @@
if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || user.physical_can_use_topic(current_parent) < UI_INTERACTIVE || user.get_active_held_item() != active_held)
return
if(!user.temporarilyRemoveItemFromInventory(I))
- to_chat(user, "
[I] is stuck to you and cannot be placed into [parent].")
+ to_chat(user, span_warning("[I] is stuck to you and cannot be placed into [parent]."))
return
var/inserted = insert_item(I, stack_amt = requested_amount)
if(inserted)
if(istype(I, /obj/item/stack))
var/obj/item/stack/S = I
- to_chat(user, "
You insert [inserted] [S.singular_name][inserted>1 ? "s" : ""] into [parent].")
+ to_chat(user, span_notice("You insert [inserted] [S.singular_name][inserted>1 ? "s" : ""] into [parent]."))
if(!QDELETED(I) && I == active_held && !user.put_in_hands(I))
stack_trace("Warning: User could not put object back in hand during material container insertion, line [__LINE__]! This can lead to issues.")
I.forceMove(user.drop_location())
else
- to_chat(user, "
You insert a material total of [inserted] into [parent].")
+ to_chat(user, span_notice("You insert a material total of [inserted] into [parent]."))
qdel(I)
if(after_insert)
after_insert.Invoke(I.type, last_inserted_id, inserted)
diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index 240d651aab7a..949f8943690d 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -36,7 +36,7 @@
/datum/component/mood/proc/print_mood(mob/user)
var/msg = "
*---------*\nYour current mood\n"
- msg += "My mental status: " //Long term
+ msg += span_notice("My mental status: ") //Long term
switch(sanity)
if(SANITY_GREAT to INFINITY)
msg += "My mind feels like a temple!\n"
@@ -45,13 +45,13 @@
if(SANITY_DISTURBED to SANITY_NEUTRAL)
msg += "I have felt quite decent lately.\n"
if(SANITY_UNSTABLE to SANITY_DISTURBED)
- msg += "I'm feeling a little bit unhinged...\n"
+ msg += "[span_warning("I'm feeling a little bit unhinged...")]\n"
if(SANITY_CRAZY to SANITY_UNSTABLE)
- msg += "I'm freaking out!!\n"
+ msg += "[span_boldwarning("I'm freaking out!!")]\n"
if(SANITY_INSANE to SANITY_CRAZY)
- msg += "AHAHAHAHAHAHAHAHAHAH!!\n"
+ msg += "[span_boldwarning("AHAHAHAHAHAHAHAHAHAH!!")]\n"
- msg += "My current mood: " //Short term
+ msg += span_notice("My current mood: ") //Short term
switch(mood_level)
if(1)
msg += "I wish I was dead!\n"
@@ -72,7 +72,7 @@
if(9)
msg += "I love life!\n"
- msg += "Moodlets:\n"//All moodlets
+ msg += span_notice("Moodlets:\n")//All moodlets
if(mood_events.len)
for(var/i in mood_events)
var/datum/mood_event/event = mood_events[i]
diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm
index 458753d44c07..6d8611e07713 100644
--- a/code/datums/components/nanites.dm
+++ b/code/datums/components/nanites.dm
@@ -269,23 +269,23 @@
/datum/component/nanites/proc/nanite_scan(datum/source, mob/user, full_scan)
if(!full_scan)
if(!stealth)
- to_chat(user, "Nanites Detected")
- to_chat(user, "Saturation: [nanite_volume]/[max_nanites]")
+ to_chat(user, span_notice("Nanites Detected"))
+ to_chat(user, span_notice("Saturation: [nanite_volume]/[max_nanites]"))
return TRUE
else
- to_chat(user, "NANITES DETECTED")
- to_chat(user, "================")
- to_chat(user, "Saturation: [nanite_volume]/[max_nanites]")
- to_chat(user, "Safety Threshold: [safety_threshold]")
- to_chat(user, "Cloud ID: [cloud_id ? cloud_id : "Disabled"]")
- to_chat(user, "================")
- to_chat(user, "Program List:")
+ to_chat(user, span_info("NANITES DETECTED"))
+ to_chat(user, span_info("================"))
+ to_chat(user, span_info("Saturation: [nanite_volume]/[max_nanites]"))
+ to_chat(user, span_info("Safety Threshold: [safety_threshold]"))
+ to_chat(user, span_info("Cloud ID: [cloud_id ? cloud_id : "Disabled"]"))
+ to_chat(user, span_info("================"))
+ to_chat(user, span_info("Program List:"))
if(stealth)
- to_chat(user, "%#$ENCRYPTED&^@")
+ to_chat(user, span_alert("%#$ENCRYPTED&^@"))
else
for(var/X in programs)
var/datum/nanite_program/NP = X
- to_chat(user, "[NP.name] | [NP.activated ? "Active" : "Inactive"]")
+ to_chat(user, span_info("[NP.name] | [NP.activated ? "Active" : "Inactive"]"))
return TRUE
/datum/component/nanites/proc/nanite_ui_data(datum/source, list/data, scan_level)
diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm
index 9ba5f5fa29ad..0ddcfd94b9d0 100644
--- a/code/datums/components/orbiter.dm
+++ b/code/datums/components/orbiter.dm
@@ -90,7 +90,7 @@
//we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
orbiter.forceMove(get_turf(parent))
- to_chat(orbiter, "Now orbiting [parent].")
+ to_chat(orbiter, span_notice("Now orbiting [parent]."))
/datum/component/orbiter/proc/end_orbit(atom/movable/orbiter, refreshing=FALSE)
if(!orbiters[orbiter])
diff --git a/code/datums/components/paintable.dm b/code/datums/components/paintable.dm
index 756c42aa9dab..eb284f004638 100644
--- a/code/datums/components/paintable.dm
+++ b/code/datums/components/paintable.dm
@@ -17,7 +17,7 @@
return
. = COMPONENT_NO_AFTERATTACK
if(spraycan.is_capped)
- to_chat(user, "Take the cap off first!")
+ to_chat(user, span_warning("Take the cap off first!"))
return
RemoveCurrentCoat()
if(spraycan.use_charges(user, 2))
@@ -26,4 +26,4 @@
var/atom/A = parent
A.add_atom_colour(colour, FIXED_COLOUR_PRIORITY)
playsound(spraycan, 'sound/effects/spray.ogg', 5, 1, 5)
- to_chat(user, "You spray [spraycan] on [A], painting it.")
+ to_chat(user, span_notice("You spray [spraycan] on [A], painting it."))
diff --git a/code/datums/components/religious_tool.dm b/code/datums/components/religious_tool.dm
index d55e83896b95..2483fa1c0ed5 100644
--- a/code/datums/components/religious_tool.dm
+++ b/code/datums/components/religious_tool.dm
@@ -138,10 +138,10 @@
return
if(!easy_access_sect)
if(operation_flags & RELIGION_TOOL_SECTSELECT)
- examine_list += "This looks like it can be used to select a sect."
+ examine_list += span_notice("This looks like it can be used to select a sect.")
return
- examine_list += "The sect currently has [round(easy_access_sect.favor)] favor with [GLOB.deity].[(operation_flags & RELIGION_TOOL_SACRIFICE) ? "Desired items can be used on this to increase favor." : ""]"
+ examine_list += span_notice("The sect currently has [round(easy_access_sect.favor)] favor with [GLOB.deity].[(operation_flags & RELIGION_TOOL_SACRIFICE) ? "Desired items can be used on this to increase favor." : ""]")
if(!easy_access_sect.rites_list)
return //if we dont have rites it doesnt do us much good if the object can be used to invoke them!
if(operation_flags & RELIGION_TOOL_INVOKE)
diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm
index 08d452017412..5eea6e8e5f59 100644
--- a/code/datums/components/remote_materials.dm
+++ b/code/datums/components/remote_materials.dm
@@ -80,7 +80,7 @@ handles linking back and forth.
var/obj/item/multitool/M = I
if (!QDELETED(M.buffer) && istype(M.buffer, /obj/machinery/ore_silo))
if (silo == M.buffer)
- to_chat(user, "[parent] is already connected to [silo].")
+ to_chat(user, span_notice("[parent] is already connected to [silo]."))
return COMPONENT_NO_AFTERATTACK
if (silo)
silo.connected -= src
@@ -92,7 +92,7 @@ handles linking back and forth.
silo.connected += src
silo.updateUsrDialog()
mat_container = silo.GetComponent(/datum/component/material_container)
- to_chat(user, "You connect [parent] to [silo] from the multitool's buffer.")
+ to_chat(user, span_notice("You connect [parent] to [silo] from the multitool's buffer."))
return COMPONENT_NO_AFTERATTACK
else if (silo && istype(I, /obj/item/stack))
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index 8ea36096a58d..6a0c2c967221 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -69,7 +69,7 @@
var/atom/movable/AM = parent
var/mob/AMM = AM
if((ride_check_rider_restrained && M.restrained(TRUE)) || (ride_check_rider_incapacitated && M.incapacitated(FALSE, TRUE)) || (ride_check_ridden_incapacitated && istype(AMM) && AMM.incapacitated(FALSE, TRUE)))
- AM.visible_message("[M] falls off of [AM]!")
+ AM.visible_message(span_warning("[M] falls off of [AM]!"))
AM.unbuckle_mob(M)
return TRUE
@@ -192,7 +192,7 @@
handle_vehicle_layer(direction)
handle_vehicle_offsets()
else
- to_chat(user, "You'll need the keys in one of your hands to [drive_verb] [AM].")
+ to_chat(user, span_notice("You'll need the keys in one of your hands to [drive_verb] [AM]."))
/datum/component/riding/proc/Unbuckle(atom/movable/M)
addtimer(CALLBACK(parent, /atom/movable/.proc/unbuckle_mob, M), 0, TIMER_UNIQUE)
@@ -263,7 +263,7 @@
var/atom/movable/AM = parent
AM.unbuckle_mob(user)
user.Knockdown(60)
- user.visible_message("[AM] pushes [user] off of [AM.p_them()]!")
+ user.visible_message(span_warning("[AM] pushes [user] off of [AM.p_them()]!"))
/datum/component/riding/cyborg
del_on_unbuckle_all = TRUE
@@ -277,14 +277,14 @@
if(R.module && R.module.ride_allow_incapacitated)
kick = FALSE
if(kick)
- to_chat(user, "You fall off of [AM]!")
+ to_chat(user, span_userdanger("You fall off of [AM]!"))
Unbuckle(user)
return
if(iscarbon(user))
var/mob/living/carbon/carbonuser = user
if(!carbonuser.get_num_arms())
Unbuckle(user)
- to_chat(user, "You can't grab onto [AM] with no hands!")
+ to_chat(user, span_userdanger("You can't grab onto [AM] with no hands!"))
return
/datum/component/riding/cyborg/handle_vehicle_layer(dir)
@@ -323,7 +323,7 @@
var/turf/target = get_edge_target_turf(AM, AM.dir)
var/turf/targetm = get_step(get_turf(AM), AM.dir)
M.Move(targetm)
- M.visible_message("[M] is thrown clear of [AM]!")
+ M.visible_message(span_warning("[M] is thrown clear of [AM]!"))
M.throw_at(target, 14, 5, AM)
M.Paralyze(60)
S.throwcooldown = TRUE
@@ -339,6 +339,9 @@
else
inhand.rider = riding_target_override
inhand.parent = AM
+ for(var/obj/item/I in user.held_items) // delete any hand items like slappers that could still totally be used to grab on
+ if((I.obj_flags & HAND_ITEM))
+ qdel(I)
if(user.put_in_hands(inhand, TRUE))
amount_equipped++
else
diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm
index afec8fee998e..436f00c280b2 100644
--- a/code/datums/components/rotation.dm
+++ b/code/datums/components/rotation.dm
@@ -100,7 +100,7 @@
/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user, list/examine_list)
if(rotation_flags & ROTATION_ALTCLICK)
- examine_list += "Alt-click to rotate it clockwise."
+ examine_list += span_notice("Alt-click to rotate it clockwise.")
/datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction)
if(!can_be_rotated.Invoke(user, rotation) || !can_user_rotate.Invoke(user, rotation))
@@ -137,7 +137,7 @@
return !AM.anchored
/datum/component/simple_rotation/proc/default_after_rotation(mob/user, rotation_type)
- to_chat(user,"You [rotation_type == ROTATION_FLIP ? "flip" : "rotate"] [parent].")
+ to_chat(user,span_notice("You [rotation_type == ROTATION_FLIP ? "flip" : "rotate"] [parent]."))
/atom/movable/proc/simple_rotate_clockwise()
set name = "Rotate Clockwise"
diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm
index d03ed7cd7222..0769e90523d2 100644
--- a/code/datums/components/spawner.dm
+++ b/code/datums/components/spawner.dm
@@ -48,4 +48,4 @@
spawned_mobs += L
L.nest = src
L.faction = src.faction
- P.visible_message("[L] [spawn_text] [P].")
+ P.visible_message(span_danger("[L] [spawn_text] [P]."))
diff --git a/code/datums/components/spooky.dm b/code/datums/components/spooky.dm
index cb7eea70a42b..b1dd475a367b 100644
--- a/code/datums/components/spooky.dm
+++ b/code/datums/components/spooky.dm
@@ -38,7 +38,7 @@
if((H.getStaminaLoss() > 95) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly)))
H.Paralyze(20)
H.set_species(/datum/species/skeleton)
- H.visible_message("[H] has given up on life as a mortal.")
+ H.visible_message(span_warning("[H] has given up on life as a mortal."))
var/T = get_turf(H)
if(too_spooky)
if(prob(30))
diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm
index 377609c26a6e..deb32f0c7c54 100644
--- a/code/datums/components/stationloving.dm
+++ b/code/datums/components/stationloving.dm
@@ -33,7 +33,7 @@
var/atom/movable/AM = parent
AM.forceMove(targetturf)
- to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...")
+ to_chat(get(parent, /mob), span_danger("You can't help but feel that you just lost something back there..."))
// move the disc, so ghosts remain orbiting it even if it's "destroyed"
return targetturf
diff --git a/code/datums/components/storage/concrete/bag_of_holding.dm b/code/datums/components/storage/concrete/bag_of_holding.dm
index 7eb3d2ec7495..9b31106b8975 100644
--- a/code/datums/components/storage/concrete/bag_of_holding.dm
+++ b/code/datums/components/storage/concrete/bag_of_holding.dm
@@ -16,12 +16,12 @@
return
var/turf/loccheck = get_turf(A)
if(is_reebe(loccheck.z))
- user.visible_message("An unseen force knocks [user] to the ground!", "\"I think not!\"")
+ user.visible_message(span_warning("An unseen force knocks [user] to the ground!"), "[span_big_brass("\"I think not!\"")]")
user.Paralyze(60)
return
if(istype(loccheck.loc, /area/fabric_of_reality))
- to_chat(user, "You can't do that here!")
- to_chat(user, "The Bluespace interfaces of the two devices catastrophically malfunction!")
+ to_chat(user, span_danger("You can't do that here!"))
+ to_chat(user, span_danger("The Bluespace interfaces of the two devices catastrophically malfunction!"))
qdel(W)
playsound(loccheck,'sound/effects/supermatter.ogg', 200, 1)
@@ -40,7 +40,7 @@
var/mob/living/M = AT
M.take_overall_damage(85)
if(M.movement_type & FLYING)
- M.visible_message("The bluespace collapse crushes the air towards it, pulling [M] towards the ground...")
+ M.visible_message(span_danger("The bluespace collapse crushes the air towards it, pulling [M] towards the ground..."))
M.Paralyze(5, TRUE, TRUE) //Overrides stun absorbs.
T.TerraformTurf(/turf/open/chasm/magic, /turf/open/chasm/magic)
for(var/fabricarea in get_areas(/area/fabric_of_reality))
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 24770008d157..73b7c131dd13 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -8,9 +8,9 @@
. = ..()
if(. && silent && !prevent_warning)
if(quickdraw)
- to_chat(user, "You discreetly slip [I] into [parent]. Alt-click [parent] to remove it.")
+ to_chat(user, span_notice("You discreetly slip [I] into [parent]. Alt-click [parent] to remove it."))
else
- to_chat(user, "You discreetly slip [I] into [parent].")
+ to_chat(user, span_notice("You discreetly slip [I] into [parent]."))
/datum/component/storage/concrete/pockets
max_w_class = WEIGHT_CLASS_NORMAL
diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm
index 455eb985f090..a6ffb79e93af 100644
--- a/code/datums/components/storage/concrete/rped.dm
+++ b/code/datums/components/storage/concrete/rped.dm
@@ -12,7 +12,7 @@
. = ..()
if(!I.get_part_rating())
if (!stop_messages)
- to_chat(M, "[parent] only accepts machine parts!")
+ to_chat(M, span_warning("[parent] only accepts machine parts!"))
return FALSE
/datum/component/storage/concrete/bluespace/rped
@@ -29,5 +29,5 @@
. = ..()
if(!I.get_part_rating())
if (!stop_messages)
- to_chat(M, "[parent] only accepts machine parts!")
+ to_chat(M, span_warning("[parent] only accepts machine parts!"))
return FALSE
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index b7af031d8b7d..298b57be7c65 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -135,7 +135,7 @@
var/obj/item/valid_item = valid_type
desc += "\a [initial(valid_item.name)]"
- return "\n\t[desc.Join("\n\t")]"
+ return "\n\t[span_notice("[desc.Join("\n\t")]")]"
/datum/component/storage/proc/update_actions()
QDEL_NULL(modeswitch_action)
@@ -187,7 +187,7 @@
/datum/component/storage/proc/attack_self(datum/source, mob/M)
if(locked)
- to_chat(M, "[parent] seems to be locked!")
+ to_chat(M, span_warning("[parent] seems to be locked!"))
return FALSE
if((M.get_active_held_item() == parent) && allow_quick_empty)
quick_empty(M)
@@ -197,7 +197,7 @@
return FALSE
. = COMPONENT_NO_ATTACK
if(locked)
- to_chat(M, "[parent] seems to be locked!")
+ to_chat(M, span_warning("[parent] seems to be locked!"))
return FALSE
var/obj/item/I = O
if(collection_mode == COLLECT_ONE)
@@ -211,14 +211,14 @@
things = typecache_filter_list(things, typecacheof(I.type))
var/len = length(things)
if(!len)
- to_chat(M, "You failed to pick up anything with [parent].")
+ to_chat(M, span_notice("You failed to pick up anything with [parent]."))
return
var/datum/progressbar/progress = new(M, len, I.loc)
var/list/rejections = list()
while(do_after(M, 10, TRUE, parent, FALSE, CALLBACK(src, .proc/handle_mass_pickup, things, I.loc, rejections, progress)))
stoplag(1)
qdel(progress)
- to_chat(M, "You put everything you could [insert_preposition] [parent].")
+ to_chat(M, span_notice("You put everything you could [insert_preposition] [parent]."))
/datum/component/storage/proc/handle_mass_item_insertion(list/things, datum/component/storage/src_object, mob/user, datum/progressbar/progress)
var/atom/source_real_location = src_object.real_location()
@@ -266,10 +266,10 @@
if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated())
return
if(locked)
- to_chat(M, "[parent] seems to be locked!")
+ to_chat(M, span_warning("[parent] seems to be locked!"))
return FALSE
A.add_fingerprint(M)
- to_chat(M, "You start dumping out [parent].")
+ to_chat(M, span_notice("You start dumping out [parent]."))
var/turf/T = get_turf(A)
var/list/things = contents()
var/datum/progressbar/progress = new(M, length(things), T)
@@ -481,7 +481,7 @@
var/atom/dump_destination = dest_object.get_dumping_location()
if(A.Adjacent(M) && dump_destination && M.Adjacent(dump_destination))
if(locked)
- to_chat(M, "[parent] seems to be locked!")
+ to_chat(M, span_warning("[parent] seems to be locked!"))
return FALSE
if(dump_destination.storage_contents_dump_act(src, M))
playsound(A, "rustle", 50, 1, -5)
@@ -529,7 +529,7 @@
handle_show_valid_items(source, user)
/datum/component/storage/proc/handle_show_valid_items(datum/source, user)
- to_chat(user, "[source] can hold: [can_hold_description]")
+ to_chat(user, span_notice("[source] can hold: [can_hold_description]"))
/datum/component/storage/proc/mousedrop_onto(datum/source, atom/over_object, mob/M)
set waitfor = FALSE
@@ -563,7 +563,7 @@
return FALSE
A.add_fingerprint(M)
if(locked && !force)
- to_chat(M, "[parent] seems to be locked!")
+ to_chat(M, span_warning("[parent] seems to be locked!"))
return FALSE
if(force || M.CanReach(parent, view_only = TRUE))
show_to(M)
@@ -591,46 +591,46 @@
if(locked)
if(M && !stop_messages)
host.add_fingerprint(M)
- to_chat(M, "[host] seems to be locked!")
+ to_chat(M, span_warning("[host] seems to be locked!"))
return FALSE
if(real_location.contents.len >= max_items)
if(!stop_messages)
- to_chat(M, "[host] is full, make some space!")
+ to_chat(M, span_warning("[host] is full, make some space!"))
return FALSE //Storage item is full
if(length(can_hold))
if(!is_type_in_typecache(I, can_hold))
if(!stop_messages)
- to_chat(M, "[host] cannot hold [I]!")
+ to_chat(M, span_warning("[host] cannot hold [I]!"))
return FALSE
if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold.
if(!stop_messages)
- to_chat(M, "[host] cannot hold [I]!")
+ to_chat(M, span_warning("[host] cannot hold [I]!"))
return FALSE
if(I.w_class > max_w_class && !is_type_in_typecache(I, exception_hold))
if(!stop_messages)
- to_chat(M, "[I] is too big for [host]!")
+ to_chat(M, span_warning("[I] is too big for [host]!"))
return FALSE
var/sum_w_class = I.w_class
for(var/obj/item/_I in real_location)
sum_w_class += _I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it.
if(sum_w_class > max_combined_w_class)
if(!stop_messages)
- to_chat(M, "[I] won't fit in [host], make some space!")
+ to_chat(M, span_warning("[I] won't fit in [host], make some space!"))
return FALSE
if(isitem(host))
var/obj/item/IP = host
var/datum/component/storage/STR_I = I.GetComponent(/datum/component/storage)
if((I.w_class >= IP.w_class) && STR_I && !allow_big_nesting)
if(!stop_messages)
- to_chat(M, "[IP] cannot hold [I] as it's a storage item of the same size!")
+ to_chat(M, span_warning("[IP] cannot hold [I] as it's a storage item of the same size!"))
return FALSE //To prevent the stacking of same sized storage items.
if(HAS_TRAIT(I, TRAIT_NO_STORAGE))
if(!stop_messages)
- to_chat(M, "\the [I] can't seem to fit in \the [host]!")
+ to_chat(M, span_warning("\the [I] can't seem to fit in \the [host]!"))
return FALSE
if(HAS_TRAIT(I, TRAIT_NODROP)) //SHOULD be handled in unEquip, but better safe than sorry.
if(!stop_messages)
- to_chat(M, "\the [I] is stuck to your hand, you can't put it in \the [host]!")
+ to_chat(M, span_warning("\the [I] is stuck to your hand, you can't put it in \the [host]!"))
return FALSE
var/datum/component/storage/concrete/master = master()
if(!istype(master))
@@ -661,11 +661,11 @@
playsound(parent, "rustle", 50, 1, -5)
for(var/mob/viewing in viewers(user, null))
if(M == viewing)
- to_chat(usr, "You put [I] [insert_preposition]to [parent].")
+ to_chat(usr, span_notice("You put [I] [insert_preposition]to [parent]."))
else if(in_range(M, viewing)) //If someone is standing close enough, they can tell what it is...
- viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", MSG_VISUAL)
+ viewing.show_message(span_notice("[M] puts [I] [insert_preposition]to [parent]."), MSG_VISUAL)
else if(I && I.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
- viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", MSG_VISUAL)
+ viewing.show_message(span_notice("[M] puts [I] [insert_preposition]to [parent]."), MSG_VISUAL)
/datum/component/storage/proc/update_icon()
if(isobj(parent))
@@ -751,7 +751,7 @@
if(A.loc == user)
. = COMPONENT_NO_ATTACK_HAND
if(locked)
- to_chat(user, "[parent] seems to be locked!")
+ to_chat(user, span_warning("[parent] seems to be locked!"))
else
show_to(user)
@@ -780,7 +780,7 @@
if(locked)
if(istype(parent, /obj/item/storage/lockbox))
return
- to_chat(user, "[parent] seems to be locked!")
+ to_chat(user, span_warning("[parent] seems to be locked!"))
return
var/atom/A = parent
@@ -797,9 +797,9 @@
A.add_fingerprint(user)
remove_from_storage(I, get_turf(user))
if(!user.put_in_hands(I))
- to_chat(user, "You fumble for [I] and it falls on the floor.")
+ to_chat(user, span_notice("You fumble for [I] and it falls on the floor."))
return
- user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].")
+ user.visible_message(span_warning("[user] draws [I] from [parent]!"), span_notice("You draw [I] from [parent]."))
return
/datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source)
diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm
index 2eaceb257ed5..8228f465de5e 100644
--- a/code/datums/components/summoning.dm
+++ b/code/datums/components/summoning.dm
@@ -62,7 +62,7 @@
L.faction = faction
RegisterSignal(L, COMSIG_MOB_DEATH, .proc/on_spawned_death) // so we can remove them from the list, etc (for mobs with corpses)
playsound(spawn_location,spawn_sound, 50, 1)
- spawn_location.visible_message("[L] [spawn_text].")
+ spawn_location.visible_message(span_danger("[L] [spawn_text]."))
/datum/component/summoning/proc/on_spawned_death(mob/killed, gibbed)
spawned_mobs -= killed
\ No newline at end of file
diff --git a/code/datums/components/tether.dm b/code/datums/components/tether.dm
index faa6182208af..05c6343b7dea 100644
--- a/code/datums/components/tether.dm
+++ b/code/datums/components/tether.dm
@@ -18,7 +18,7 @@
/datum/component/tether/proc/checkTether(mob/mover, newloc)
if (get_dist(mover,newloc) > max_dist)
- to_chat(mover, "The [tether_name] runs out of slack and prevents you from moving!")
+ to_chat(mover, span_userdanger("The [tether_name] runs out of slack and prevents you from moving!"))
return COMPONENT_MOVABLE_BLOCK_PRE_MOVE
var/atom/blocker
@@ -33,5 +33,5 @@
blocker = A
break out
if (blocker)
- to_chat(mover, "The [tether_name] catches on [blocker] and prevents you from moving!")
+ to_chat(mover, span_userdanger("The [tether_name] catches on [blocker] and prevents you from moving!"))
return COMPONENT_MOVABLE_BLOCK_PRE_MOVE
diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm
index 13a17a0fecf4..8b347e9a3946 100644
--- a/code/datums/components/uplink.dm
+++ b/code/datums/components/uplink.dm
@@ -88,7 +88,7 @@ GLOBAL_LIST_EMPTY(uplinks)
/datum/component/uplink/proc/LoadTC(mob/user, obj/item/stack/telecrystal/TC, silent = FALSE)
if(!silent)
- to_chat(user, "You slot [TC] into [parent] and charge its internal uplink.")
+ to_chat(user, span_notice("You slot [TC] into [parent] and charge its internal uplink."))
var/amt = TC.amount
telecrystals += amt
TC.use(amt)
@@ -118,7 +118,7 @@ GLOBAL_LIST_EMPTY(uplinks)
telecrystals += cost
if(purchase_log)
purchase_log.total_spent -= cost
- to_chat(user, "[I] refunded.")
+ to_chat(user, span_notice("[I] refunded."))
qdel(I)
/datum/component/uplink/proc/interact(datum/source, mob/user)
@@ -301,7 +301,7 @@ GLOBAL_LIST_EMPTY(uplinks)
previous_attempts.Cut()
master.degrees = 0
interact(null, user)
- to_chat(user, "Your pen makes a clicking noise, before quickly rotating back to 0 degrees!")
+ to_chat(user, span_warning("Your pen makes a clicking noise, before quickly rotating back to 0 degrees!"))
else if(compare_list(previous_attempts, failsafe_code))
failsafe()
diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm
index 3cdb7b569339..c7e338ca2f6a 100644
--- a/code/datums/dash_weapon.dm
+++ b/code/datums/dash_weapon.dm
@@ -51,4 +51,4 @@
holder.update_action_buttons_icon()
if(recharge_sound)
playsound(dashing_item, recharge_sound, 50, 1)
- to_chat(holder, "[src] now has [current_charges]/[max_charges] charges.")
+ to_chat(holder, span_notice("[src] now has [current_charges]/[max_charges] charges."))
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index e79b3af975d6..0b203e7a6d73 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -43,7 +43,7 @@
var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round.
if(!usr.client || !usr.client.holder) //The usr vs src abuse in this proc is intentional and must not be changed
- to_chat(usr, "You need to be an administrator to access this.")
+ to_chat(usr, span_danger("You need to be an administrator to access this."))
return
if(!D)
@@ -465,10 +465,10 @@
var/item
if (isnull(value))
- item = "[VV_HTML_ENCODE(name)] = null"
+ item = "[VV_HTML_ENCODE(name)] = [span_value("null")]"
else if (istext(value))
- item = "[VV_HTML_ENCODE(name)] = \"[VV_HTML_ENCODE(value)]\""
+ item = "[VV_HTML_ENCODE(name)] = [span_value("\"[VV_HTML_ENCODE(value)]\"")]"
else if (isicon(value))
#ifdef VARSICON
@@ -476,13 +476,13 @@
var/rnd = rand(1,10000)
var/rname = "tmp[REF(I)][rnd].png"
usr << browse_rsc(I, rname)
- item = "[VV_HTML_ENCODE(name)] = ([value])
"
+ item = "[VV_HTML_ENCODE(name)] = ([span_value("[value]")])
"
#else
- item = "[VV_HTML_ENCODE(name)] = /icon ([value])"
+ item = "[VV_HTML_ENCODE(name)] = /icon ([span_value("[value]")])"
#endif
else if (isfile(value))
- item = "[VV_HTML_ENCODE(name)] = '[value]'"
+ item = "[VV_HTML_ENCODE(name)] = [span_value("'[value]'")]"
else if(istype(value,/matrix)) // Needs to be before datum
var/matrix/M = value
@@ -498,7 +498,7 @@
else if(isappearance(value))
var/image/I = value
- item = "[VV_HTML_ENCODE(name)] [REF(value)] = appearance([I.icon], \"[I.icon_state]\")"
+ item = "[VV_HTML_ENCODE(name)] [REF(value)] = appearance([span_value("[I.icon]")], [span_value("\"[I.icon_state]\"")])"
else if (istype(value, /datum))
var/datum/D = value
@@ -534,7 +534,7 @@
flags += i
item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(jointext(flags, ", "))]"
else
- item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(value)]"
+ item = "[VV_HTML_ENCODE(name)] = [span_value("[VV_HTML_ENCODE(value)]")]"
return "[header][item]"
@@ -937,7 +937,7 @@
fire = text2num(result["values"]["fire"]),\
acid = text2num(result["values"]["acid"]))
log_admin("[key_name(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]")
- message_admins("[key_name_admin(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]")
+ message_admins(span_notice("[key_name_admin(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]"))
else
return
@@ -973,7 +973,7 @@
to_chat(usr, "No objects of this type exist")
return
log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")
- message_admins("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")
+ message_admins(span_notice("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) "))
if("Type and subtypes")
var/i = 0
for(var/obj/Obj in world)
@@ -985,7 +985,7 @@
to_chat(usr, "No objects of this type exist")
return
log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
- message_admins("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
+ message_admins(span_notice("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) "))
else if(href_list["addreagent"])
if(!check_rights(NONE))
@@ -1012,7 +1012,7 @@
if(ID == chosen_id)
valid_id = 1
if(!valid_id)
- to_chat(usr, "A reagent with that ID doesn't exist!")
+ to_chat(usr, span_warning("A reagent with that ID doesn't exist!"))
if("Choose ID")
chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in reagent_options
if(chosen_id)
@@ -1020,7 +1020,7 @@
if(amount)
A.reagents.add_reagent(chosen_id, amount)
log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to \the [A]")
- message_admins("[key_name(usr)] has added [amount] units of [chosen_id] to \the [A]")
+ message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to \the [A]"))
else if(href_list["explode"])
if(!check_rights(R_FUN))
@@ -1131,7 +1131,7 @@
var/datum/martial_art/MA = new chosenart
MA.teach(C)
log_admin("[key_name(usr)] has taught [MA] to [key_name(C)].")
- message_admins("[key_name_admin(usr)] has taught [MA] to [key_name_admin(C)].")
+ message_admins(span_notice("[key_name_admin(usr)] has taught [MA] to [key_name_admin(C)]."))
else if(href_list["givetrauma"])
if(!check_rights(NONE))
@@ -1156,7 +1156,7 @@
var/datum/brain_trauma/BT = C.gain_trauma(result)
if(BT)
log_admin("[key_name(usr)] has traumatized [key_name(C)] with [BT.name]")
- message_admins("[key_name_admin(usr)] has traumatized [key_name_admin(C)] with [BT.name].")
+ message_admins(span_notice("[key_name_admin(usr)] has traumatized [key_name_admin(C)] with [BT.name]."))
else if(href_list["curetraumas"])
if(!check_rights(NONE))
@@ -1169,7 +1169,7 @@
C.cure_all_traumas(TRAUMA_RESILIENCE_ABSOLUTE)
log_admin("[key_name(usr)] has cured all traumas from [key_name(C)].")
- message_admins("[key_name_admin(usr)] has cured all traumas from [key_name_admin(C)].")
+ message_admins(span_notice("[key_name_admin(usr)] has cured all traumas from [key_name_admin(C)]."))
else if(href_list["hallucinate"])
if(!check_rights(NONE))
@@ -1399,7 +1399,7 @@
to_chat(usr, "Mob doesn't exist anymore")
return
H.cluwneify()
- message_admins("[key_name(usr)] has made [key_name(H)] into a Cluwne.")
+ message_admins(span_notice("[key_name(usr)] has made [key_name(H)] into a Cluwne."))
return // yogs end
else if(href_list["makepacman"])
@@ -1508,7 +1508,7 @@
var/mob/user = usr
if(!P.persistence_id || !P.C)
- to_chat(user,"This is not a persistent painting.")
+ to_chat(user,span_warning("This is not a persistent painting."))
return
var/md5 = md5(P.C.get_data_string())
var/author = P.C.author_ckey
@@ -1523,4 +1523,4 @@
if(PA.C && md5(PA.C.get_data_string()) == md5)
QDEL_NULL(PA.C)
log_admin("[key_name(user)] has deleted a persistent painting made by [author].")
- message_admins("[key_name_admin(user)] has deleted persistent painting made by [author].")
+ message_admins(span_notice("[key_name_admin(user)] has deleted persistent painting made by [author]."))
diff --git a/code/datums/diseases/advance/symptoms/beard.dm b/code/datums/diseases/advance/symptoms/beard.dm
index 533c57a67c36..a01ea5cd10d5 100644
--- a/code/datums/diseases/advance/symptoms/beard.dm
+++ b/code/datums/diseases/advance/symptoms/beard.dm
@@ -37,7 +37,7 @@ BONUS
var/mob/living/carbon/human/H = M
var/index = min(max(beard_order.Find(H.facial_hair_style)+1, A.stage-1), beard_order.len)
if(index > 0 && H.facial_hair_style != beard_order[index])
- to_chat(H, "Your chin itches.")
+ to_chat(H, span_warning("Your chin itches."))
H.facial_hair_style = beard_order[index]
H.update_hair()
diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm
index 631a63ca83c6..f7074b3f2c74 100644
--- a/code/datums/diseases/advance/symptoms/choking.dm
+++ b/code/datums/diseases/advance/symptoms/choking.dm
@@ -51,16 +51,16 @@ Bonus
switch(A.stage)
if(1, 2)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You're having difficulty breathing.", "Your breathing becomes heavy.")]")
+ to_chat(M, span_warning("[pick("You're having difficulty breathing.", "Your breathing becomes heavy.")]"))
if(3, 4)
if(!suppress_warning)
- to_chat(M, "[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]")
+ to_chat(M, span_warning("[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]"))
else
- to_chat(M, "You feel very [pick("dizzy","woozy","faint")].") //fake bloodloss messages
+ to_chat(M, span_warning("You feel very [pick("dizzy","woozy","faint")].")) //fake bloodloss messages
Choke_stage_3_4(M, A)
M.emote("gasp")
else
- to_chat(M, "[pick("You're choking!", "You can't breathe!")]")
+ to_chat(M, span_userdanger("[pick("You're choking!", "You can't breathe!")]"))
Choke(M, A)
M.emote("gasp")
@@ -125,15 +125,15 @@ Bonus
var/mob/living/M = A.affected_mob
switch(A.stage)
if(3, 4)
- to_chat(M, "[pick("Your windpipe feels thin.", "Your lungs feel small.")]")
+ to_chat(M, span_warning("[pick("Your windpipe feels thin.", "Your lungs feel small.")]"))
Asphyxiate_stage_3_4(M, A)
M.emote("gasp")
if(5)
- to_chat(M, "[pick("Your lungs hurt!", "It hurts to breathe!")]")
+ to_chat(M, span_userdanger("[pick("Your lungs hurt!", "It hurts to breathe!")]"))
Asphyxiate(M, A)
M.emote("gasp")
if(M.getOxyLoss() >= 120)
- M.visible_message("[M] stops breathing, as if their lungs have totally collapsed!")
+ M.visible_message(span_warning("[M] stops breathing, as if their lungs have totally collapsed!"))
Asphyxiate_death(M, A)
return
diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm
index 316eae1c7e31..dafa7e688fc1 100644
--- a/code/datums/diseases/advance/symptoms/confusion.dm
+++ b/code/datums/diseases/advance/symptoms/confusion.dm
@@ -54,9 +54,9 @@ Bonus
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("Your head hurts.", "Your mind blanks for a moment.")]")
+ to_chat(M, span_warning("[pick("Your head hurts.", "Your mind blanks for a moment.")]"))
else
- to_chat(M, "You can't think straight!")
+ to_chat(M, span_userdanger("You can't think straight!"))
M.confused = min(100 * power, M.confused + 8)
if(brain_damage)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN,3 * power, 80)
diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm
index 92aa51d2f853..049bbb68e897 100644
--- a/code/datums/diseases/advance/symptoms/deafness.dm
+++ b/code/datums/diseases/advance/symptoms/deafness.dm
@@ -49,14 +49,14 @@ Bonus
switch(A.stage)
if(3, 4)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You hear a ringing in your ear.", "Your ears pop.")]")
+ to_chat(M, span_warning("[pick("You hear a ringing in your ear.", "Your ears pop.")]"))
if(5)
if(power >= 2)
var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS)
if(istype(ears) && ears.damage < ears.maxHealth)
- to_chat(M, "Your ears pop painfully and start bleeding!")
+ to_chat(M, span_userdanger("Your ears pop painfully and start bleeding!"))
ears.damage = max(ears.damage, ears.maxHealth)
M.emote("scream")
else
- to_chat(M, "Your ears pop and begin ringing loudly!")
+ to_chat(M, span_userdanger("Your ears pop and begin ringing loudly!"))
M.minimumDeafTicks(20)
diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm
index 965d5f372746..8fa08acc78bc 100644
--- a/code/datums/diseases/advance/symptoms/dizzy.dm
+++ b/code/datums/diseases/advance/symptoms/dizzy.dm
@@ -49,9 +49,9 @@ Bonus
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You feel dizzy.", "Your head spins.")]")
+ to_chat(M, span_warning("[pick("You feel dizzy.", "Your head spins.")]"))
else
- to_chat(M, "A wave of dizziness washes over you!")
+ to_chat(M, span_userdanger("A wave of dizziness washes over you!"))
M.Dizzy(5)
if(power >= 2)
M.set_drugginess(5)
diff --git a/code/datums/diseases/advance/symptoms/fever.dm b/code/datums/diseases/advance/symptoms/fever.dm
index a5a56e867536..ad8c4fdfa45b 100644
--- a/code/datums/diseases/advance/symptoms/fever.dm
+++ b/code/datums/diseases/advance/symptoms/fever.dm
@@ -49,9 +49,9 @@ Bonus
return
var/mob/living/carbon/M = A.affected_mob
if(!unsafe || A.stage < 4)
- to_chat(M, "[pick("You feel hot.", "You feel like you're burning.")]")
+ to_chat(M, span_warning("[pick("You feel hot.", "You feel like you're burning.")]"))
else
- to_chat(M, "[pick("You feel too hot.", "You feel like your blood is boiling.")]")
+ to_chat(M, span_userdanger("[pick("You feel too hot.", "You feel like your blood is boiling.")]"))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT || unsafe)
Heat(M, A)
diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm
index aa902d919eac..1a1c6aed2b54 100644
--- a/code/datums/diseases/advance/symptoms/fire.dm
+++ b/code/datums/diseases/advance/symptoms/fire.dm
@@ -57,16 +57,16 @@ Bonus
switch(A.stage)
if(3)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")]")
+ to_chat(M, span_warning("[pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")]"))
if(4)
Firestacks_stage_4(M, A)
M.IgniteMob()
- to_chat(M, "Your skin bursts into flames!")
+ to_chat(M, span_userdanger("Your skin bursts into flames!"))
M.emote("scream")
if(5)
Firestacks_stage_5(M, A)
M.IgniteMob()
- to_chat(M, "Your skin erupts into an inferno!")
+ to_chat(M, span_userdanger("Your skin erupts into an inferno!"))
M.emote("scream")
/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A)
@@ -143,19 +143,19 @@ Bonus
switch(A.stage)
if(3)
if(prob(base_message_chance))
- to_chat(M, "[pick("Your veins boil.", "You feel hot.", "You smell meat cooking.")]")
+ to_chat(M, span_warning("[pick("Your veins boil.", "You feel hot.", "You smell meat cooking.")]"))
if(4)
Alkali_fire_stage_4(M, A)
M.IgniteMob()
- to_chat(M, "Your sweat bursts into flames!")
+ to_chat(M, span_userdanger("Your sweat bursts into flames!"))
M.emote("scream")
if(5)
Alkali_fire_stage_5(M, A)
M.IgniteMob()
- to_chat(M, "Your skin erupts into an inferno!")
+ to_chat(M, span_userdanger("Your skin erupts into an inferno!"))
M.emote("scream")
if(M.fire_stacks < 0)
- M.visible_message("[M]'s sweat sizzles and pops on contact with water!")
+ M.visible_message(span_warning("[M]'s sweat sizzles and pops on contact with water!"))
explosion(get_turf(M),0,0,2 * explosion_power)
Alkali_fire_stage_5(M, A)
diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm
index b180b72f4e7f..b75867fe10f5 100644
--- a/code/datums/diseases/advance/symptoms/flesh_eating.dm
+++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm
@@ -48,9 +48,9 @@ Bonus
switch(A.stage)
if(2,3)
if(prob(base_message_chance))
- to_chat(M, "[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]")
+ to_chat(M, span_warning("[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]"))
if(4,5)
- to_chat(M, "[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]")
+ to_chat(M, span_userdanger("[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]"))
Flesheat(M, A)
/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A)
@@ -61,7 +61,8 @@ Bonus
if(bleed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate += 5 * power
+ var/obj/item/bodypart/random_part = pick(H.bodyparts)
+ random_part.generic_bleedstacks += 5 * power
return 1
/*
@@ -114,10 +115,10 @@ Bonus
switch(A.stage)
if(2,3)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You feel your body break apart.", "Your skin rubs off like dust.")]")
+ to_chat(M, span_warning("[pick("You feel your body break apart.", "Your skin rubs off like dust.")]"))
if(4,5)
if(prob(base_message_chance / 2)) //reduce spam
- to_chat(M, "[pick("You feel your muscles weakening.", "Some of your skin detaches itself.", "You feel sandy.")]")
+ to_chat(M, span_userdanger("[pick("You feel your muscles weakening.", "Some of your skin detaches itself.", "You feel sandy.")]"))
Flesh_death(M, A)
/datum/symptom/flesh_death/proc/Flesh_death(mob/living/M, datum/disease/advance/A)
diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm
index c3c58092d7e2..20e6bfd8961f 100644
--- a/code/datums/diseases/advance/symptoms/hallucigen.dm
+++ b/code/datums/diseases/advance/symptoms/hallucigen.dm
@@ -54,16 +54,16 @@ Bonus
if(1, 2)
if(prob(base_message_chance))
if(!fake_healthy)
- to_chat(M, "[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whisper with no source.", "Your head aches.")]")
+ to_chat(M, span_notice("[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whisper with no source.", "Your head aches.")]"))
else
- to_chat(M, "[pick(healthy_messages)]")
+ to_chat(M, span_notice("[pick(healthy_messages)]"))
if(3, 4)
if(prob(base_message_chance))
if(!fake_healthy)
- to_chat(M, "[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]")
+ to_chat(M, span_danger("[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]"))
else
- to_chat(M, "[pick(healthy_messages)]")
+ to_chat(M, span_notice("[pick(healthy_messages)]"))
else
if(prob(base_message_chance))
- to_chat(M, "[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]")
+ to_chat(M, span_userdanger("[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]"))
M.hallucination += (45 * power)
diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/advance/symptoms/headache.dm
index 6541639d055e..d9d25962dc0b 100644
--- a/code/datums/diseases/advance/symptoms/headache.dm
+++ b/code/datums/diseases/advance/symptoms/headache.dm
@@ -55,10 +55,10 @@ BONUS
var/mob/living/M = A.affected_mob
if(power < 2)
if(prob(base_message_chance) || A.stage >=4)
- to_chat(M, "[pick("Your head hurts.", "Your head pounds.")]")
+ to_chat(M, span_warning("[pick("Your head hurts.", "Your head pounds.")]"))
if(power >= 2 && A.stage >= 4)
- to_chat(M, "[pick("Your head hurts a lot.", "Your head pounds incessantly.")]")
+ to_chat(M, span_warning("[pick("Your head hurts a lot.", "Your head pounds incessantly.")]"))
M.adjustStaminaLoss(25)
if(power >= 3 && A.stage >= 5)
- to_chat(M, "[pick("Your head hurts!", "You feel a burning knife inside your brain!", "A wave of pain fills your head!")]")
+ to_chat(M, span_userdanger("[pick("Your head hurts!", "You feel a burning knife inside your brain!", "A wave of pain fills your head!")]"))
M.Stun(35)
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 00acb17cfb55..bd8b4ff37956 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -56,7 +56,7 @@
stage_speed = 0
transmittable = 1
level = 6
- passive_message = "You miss the feeling of starlight on your skin."
+ passive_message = span_notice("You miss the feeling of starlight on your skin.")
var/nearspace_penalty = 0.3
threshold_descs = list(
"Stage Speed 6" = "Increases healing speed.",
@@ -84,7 +84,7 @@
/datum/symptom/heal/starlight/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = actual_power
if(M.getToxLoss() && prob(5))
- to_chat(M, "Your skin tingles as the starlight seems to heal you.")
+ to_chat(M, span_notice("Your skin tingles as the starlight seems to heal you."))
M.adjustToxLoss(-(4 * heal_amt)) //most effective on toxins
@@ -132,7 +132,7 @@
if(food_conversion)
M.adjust_nutrition(0.3)
if(prob(2))
- to_chat(M, "You feel a mild warmth as your blood purifies itself.")
+ to_chat(M, span_notice("You feel a mild warmth as your blood purifies itself."))
return 1
@@ -172,7 +172,7 @@
var/lost_nutrition = 9 - (reduced_hunger * 5)
C.adjust_nutrition(-lost_nutrition * HUNGER_FACTOR) //Hunger depletes at 10x the normal speed
if(prob(2))
- to_chat(C, "You feel an odd gurgle in your stomach, as if it was working much faster than normal.")
+ to_chat(C, span_notice("You feel an odd gurgle in your stomach, as if it was working much faster than normal."))
return 1
/datum/symptom/heal/darkness
@@ -183,7 +183,7 @@
stage_speed = -2
transmittable = -1
level = 6
- passive_message = "You feel tingling on your skin as light passes over it."
+ passive_message = span_notice("You feel tingling on your skin as light passes over it.")
threshold_descs = list(
"Stage Speed 8" = "Doubles healing speed.",
)
@@ -213,7 +213,7 @@
return
if(prob(5))
- to_chat(M, "The darkness soothes and mends your wounds.")
+ to_chat(M, span_notice("The darkness soothes and mends your wounds."))
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len * 0.5, null, BODYPART_ORGANIC)) //more effective on brute
@@ -233,7 +233,7 @@
stage_speed = -3
transmittable = -2
level = 8
- passive_message = "The pain from your wounds makes you feel oddly sleepy..."
+ passive_message = span_notice("The pain from your wounds makes you feel oddly sleepy...")
var/deathgasp = FALSE
var/active_coma = FALSE //to prevent multiple coma procs
threshold_descs = list(
@@ -262,7 +262,7 @@
else if(M.IsSleeping())
return power * 0.25
else if(M.getBruteLoss() + M.getFireLoss() >= 70 && !active_coma)
- to_chat(M, "You feel yourself slip into a regenerative coma...")
+ to_chat(M, span_warning("You feel yourself slip into a regenerative coma..."))
active_coma = TRUE
addtimer(CALLBACK(src, .proc/coma, M), 60)
@@ -312,7 +312,7 @@
stage_speed = 0
transmittable = 1
level = 6
- passive_message = "Your skin feels oddly dry..."
+ passive_message = span_notice("Your skin feels oddly dry...")
var/absorption_coeff = 1
threshold_descs = list(
"Resistance 5" = "Water is consumed at a much slower rate.",
@@ -350,7 +350,7 @@
return
if(prob(5))
- to_chat(M, "You feel yourself absorbing the water around you to soothe your damaged skin.")
+ to_chat(M, span_notice("You feel yourself absorbing the water around you to soothe your damaged skin."))
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len * 0.5, heal_amt/parts.len, null, BODYPART_ORGANIC))
@@ -371,7 +371,7 @@
stage_speed = -2
transmittable = -2
level = 8
- passive_message = "You feel an odd attraction to plasma."
+ passive_message = span_notice("You feel an odd attraction to plasma.")
var/temp_rate = 1
threshold_descs = list(
"Transmission 6" = "Increases temperature adjustment rate.",
@@ -405,16 +405,16 @@
var/heal_amt = 4 * actual_power
if(prob(5))
- to_chat(M, "You feel yourself absorbing plasma inside and around you...")
+ to_chat(M, span_notice("You feel yourself absorbing plasma inside and around you..."))
if(M.bodytemperature > BODYTEMP_NORMAL)
M.adjust_bodytemperature(-20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT,BODYTEMP_NORMAL)
if(prob(5))
- to_chat(M, "You feel less hot.")
+ to_chat(M, span_notice("You feel less hot."))
else if(M.bodytemperature < (BODYTEMP_NORMAL + 1))
M.adjust_bodytemperature(20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT,0,BODYTEMP_NORMAL)
if(prob(5))
- to_chat(M, "You feel warmer.")
+ to_chat(M, span_notice("You feel warmer."))
M.adjustToxLoss(-heal_amt)
@@ -422,7 +422,7 @@
if(!parts.len)
return
if(prob(5))
- to_chat(M, "The pain from your wounds fades rapidly.")
+ to_chat(M, span_notice("The pain from your wounds fades rapidly."))
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len, null, BODYPART_ORGANIC))
M.update_damage_overlays()
@@ -439,7 +439,7 @@
level = 6
symptom_delay_min = 1
symptom_delay_max = 1
- passive_message = "Your skin glows faintly for a moment."
+ passive_message = span_notice("Your skin glows faintly for a moment.")
var/cellular_damage = FALSE
threshold_descs = list(
"Transmission 6" = "Additionally heals cellular damage.",
@@ -485,7 +485,7 @@
return
if(prob(4))
- to_chat(M, "Your skin glows faintly, and you feel your wounds mending themselves.")
+ to_chat(M, span_notice("Your skin glows faintly, and you feel your wounds mending themselves."))
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len, null, BODYPART_ORGANIC))
diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm
index f88497bfbcf3..c146ae316aa2 100644
--- a/code/datums/diseases/advance/symptoms/itching.dm
+++ b/code/datums/diseases/advance/symptoms/itching.dm
@@ -53,6 +53,6 @@ BONUS
var/obj/item/bodypart/bodypart = M.get_bodypart(picked_bodypart)
if(bodypart && bodypart.status == BODYPART_ORGANIC && !bodypart.is_pseudopart) //robotic limbs will mean less scratching overall
var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart)
- M.visible_message("[can_scratch ? "[M] scratches [M.p_their()] [bodypart.name]." : ""]", "Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]")
+ M.visible_message("[can_scratch ? span_warning("[M] scratches [M.p_their()] [bodypart.name].") : ""]", span_warning("Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]"))
if(can_scratch)
bodypart.receive_damage(0.5)
diff --git a/code/datums/diseases/advance/symptoms/narcolepsy.dm b/code/datums/diseases/advance/symptoms/narcolepsy.dm
index 73daf3e7120a..322bed7af642 100644
--- a/code/datums/diseases/advance/symptoms/narcolepsy.dm
+++ b/code/datums/diseases/advance/symptoms/narcolepsy.dm
@@ -65,28 +65,28 @@ Bonus
switch(A.stage)
if(1)
if(prob(10))
- to_chat(M, "You feel tired.")
+ to_chat(M, span_warning("You feel tired."))
if(2)
if(prob(10))
- to_chat(M, "You feel very tired.")
+ to_chat(M, span_warning("You feel very tired."))
sleepy_ticks += rand(10,14)
if(stamina)
M.adjustStaminaLoss(10)
if(3)
if(prob(15))
- to_chat(M, "You try to focus on staying awake.")
+ to_chat(M, span_warning("You try to focus on staying awake."))
sleepy_ticks += rand(10,14)
if(stamina)
M.adjustStaminaLoss(15)
if(4)
if(prob(20))
- to_chat(M, "You nod off for a moment.")
+ to_chat(M, span_warning("You nod off for a moment."))
sleepy_ticks += rand(10,14)
if(stamina)
M.adjustStaminaLoss(20)
if(5)
if(prob(25))
- to_chat(M, "[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]")
+ to_chat(M, span_warning("[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]"))
M.drowsyness = max(M.drowsyness, 2)
sleepy_ticks += rand(10,14)
if(stamina)
diff --git a/code/datums/diseases/advance/symptoms/necropolis.dm b/code/datums/diseases/advance/symptoms/necropolis.dm
index 413f22b2a7f4..ba7849270486 100644
--- a/code/datums/diseases/advance/symptoms/necropolis.dm
+++ b/code/datums/diseases/advance/symptoms/necropolis.dm
@@ -40,12 +40,12 @@
if(tendrils)
tendril(A)
if(prob(base_message_chance))
- to_chat(M, "Your skin feels scaly")
+ to_chat(M, span_notice("Your skin feels scaly"))
if(3, 4)
if(tendrils)
tendril(A)
if(prob(base_message_chance))
- to_chat(M, "[pick("Your skin is hard.", "You feel stronger.", "You feel powerful.")]")
+ to_chat(M, span_notice("[pick("Your skin is hard.", "You feel stronger.", "You feel powerful.")]"))
if(5)
if(tendrils)
tendril(A)
@@ -64,7 +64,7 @@
M.weather_immunities |= "lava"
else
if(prob(base_message_chance))
- to_chat(M, "[pick("Your skin has become a hardened carapace", "Your strength is superhuman.", "You feel invincible.")]")
+ to_chat(M, span_notice("[pick("Your skin has become a hardened carapace", "Your strength is superhuman.", "You feel invincible.")]"))
if(tendrils)
tendril(A)
return
@@ -91,7 +91,7 @@
if(!.)
return
var/mob/living/carbon/M = A.affected_mob
- to_chat(M, "You feel weakened as the necropolis' blessing leaves your body.")
+ to_chat(M, span_danger("You feel weakened as the necropolis' blessing leaves your body."))
M.remove_movespeed_modifier(MOVESPEED_ID_NECRO_VIRUS_SLOWDOWN)
M.dna.species.punchdamagelow = initial(M.dna.species.punchdamagelow)
M.dna.species.punchdamagehigh = initial(M.dna.species.punchdamagehigh)
diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm
index 7e7ba9fffeb3..07ca376b2097 100644
--- a/code/datums/diseases/advance/symptoms/oxygen.dm
+++ b/code/datums/diseases/advance/symptoms/oxygen.dm
@@ -52,7 +52,7 @@ Bonus
M.blood_volume += 1
else
if(prob(base_message_chance))
- to_chat(M, "[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]")
+ to_chat(M, span_notice("[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]"))
return
/datum/symptom/oxygen/on_stage_change(new_stage, datum/disease/advance/A)
diff --git a/code/datums/diseases/advance/symptoms/radiation.dm b/code/datums/diseases/advance/symptoms/radiation.dm
index ee0723be3e3f..e2af3edc46f9 100644
--- a/code/datums/diseases/advance/symptoms/radiation.dm
+++ b/code/datums/diseases/advance/symptoms/radiation.dm
@@ -33,10 +33,10 @@
switch(A.stage)
if(1)
if(prob(10))
- to_chat(M, "You feel off...")
+ to_chat(M, span_notice("You feel off..."))
if(2, 3)
if(prob(10))
- to_chat(M, "You feel like the atoms inside you are beginning to split...")
+ to_chat(M, span_danger("You feel like the atoms inside you are beginning to split..."))
if(4, 5)
if(fastrads)
radiate(M, 3)
@@ -44,12 +44,12 @@
radiate(M, 10)
if(radothers && A.stage == 5)
if(prob(5))
- M.visible_message("[M] glows green for a moment!", \
- "You feel a massive wave of pain flow through you!")
+ M.visible_message(span_danger("[M] glows green for a moment!"), \
+ span_userdanger("You feel a massive wave of pain flow through you!"))
radiation_pulse(M, 20)
/datum/symptom/radiation/proc/radiate(mob/living/carbon/M, chance)
if(prob(chance))
- to_chat(M, "You feel a wave of pain throughout your body!")
+ to_chat(M, span_danger("You feel a wave of pain throughout your body!"))
M.radiation += 4
diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm
index eaeebd0c4668..2118dd5f6612 100644
--- a/code/datums/diseases/advance/symptoms/sensory.dm
+++ b/code/datums/diseases/advance/symptoms/sensory.dm
@@ -92,13 +92,13 @@
if(HAS_TRAIT_FROM(M, TRAIT_BLIND, EYE_DAMAGE))
if(prob(20))
- to_chat(M, "Your vision slowly returns...")
+ to_chat(M, span_notice("Your vision slowly returns..."))
M.cure_blind(EYE_DAMAGE)
M.cure_nearsighted(EYE_DAMAGE)
M.blur_eyes(35)
else if(HAS_TRAIT_FROM(M, TRAIT_NEARSIGHT, EYE_DAMAGE))
- to_chat(M, "You can finally focus your eyes on distant objects.")
+ to_chat(M, span_notice("You can finally focus your eyes on distant objects."))
M.cure_nearsighted(EYE_DAMAGE)
M.blur_eyes(10)
@@ -109,4 +109,4 @@
eyes.applyOrganDamage(-1)
else
if(prob(base_message_chance))
- to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]")
+ to_chat(M, span_notice("[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]"))
diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm
index fd06d093f269..e758205063aa 100644
--- a/code/datums/diseases/advance/symptoms/shedding.dm
+++ b/code/datums/diseases/advance/symptoms/shedding.dm
@@ -34,17 +34,17 @@ BONUS
var/mob/living/M = A.affected_mob
if(prob(base_message_chance))
- to_chat(M, "[pick("Your scalp itches.", "Your skin feels flaky.")]")
+ to_chat(M, span_warning("[pick("Your scalp itches.", "Your skin feels flaky.")]"))
if(ishuman(M))
var/mob/living/carbon/human/H = M
switch(A.stage)
if(3, 4)
if(!(H.hair_style == "Bald") && !(H.hair_style == "Balding Hair"))
- to_chat(H, "Your hair starts to fall out in clumps...")
+ to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
addtimer(CALLBACK(src, .proc/Shed, H, FALSE), 50)
if(5)
if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald"))
- to_chat(H, "Your hair starts to fall out in clumps...")
+ to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50)
/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald)
diff --git a/code/datums/diseases/advance/symptoms/shivering.dm b/code/datums/diseases/advance/symptoms/shivering.dm
index 2c19ad69c1c3..ea2bbb43ad7a 100644
--- a/code/datums/diseases/advance/symptoms/shivering.dm
+++ b/code/datums/diseases/advance/symptoms/shivering.dm
@@ -48,9 +48,9 @@ Bonus
return
var/mob/living/carbon/M = A.affected_mob
if(!unsafe || A.stage < 4)
- to_chat(M, "[pick("You feel cold.", "You shiver.")]")
+ to_chat(M, span_warning("[pick("You feel cold.", "You shiver.")]"))
else
- to_chat(M, "[pick("You feel your blood run cold.", "You feel ice in your veins.", "You feel like you can't heat up.", "You shiver violently." )]")
+ to_chat(M, span_userdanger("[pick("You feel your blood run cold.", "You feel ice in your veins.", "You feel like you can't heat up.", "You shiver violently." )]"))
if(M.bodytemperature > BODYTEMP_COLD_DAMAGE_LIMIT || unsafe)
Chill(M, A)
diff --git a/code/datums/diseases/advance/symptoms/skin.dm b/code/datums/diseases/advance/symptoms/skin.dm
index bd166b0e8888..22972ce9e44d 100644
--- a/code/datums/diseases/advance/symptoms/skin.dm
+++ b/code/datums/diseases/advance/symptoms/skin.dm
@@ -53,7 +53,7 @@ BONUS
H.dna.features["mcolor"] = "EEE" //pure white.
H.regenerate_icons()
else
- H.visible_message("[H] looks a bit pale...", "Your skin suddenly appears lighter...")
+ H.visible_message(span_warning("[H] looks a bit pale..."), span_notice("Your skin suddenly appears lighter..."))
/datum/symptom/vitiligo/End(datum/disease/advance/A)
. = ..()
@@ -120,7 +120,7 @@ BONUS
H.dna.features["mcolor"] = "000" //pure black.
H.regenerate_icons()
else
- H.visible_message("[H] looks a bit dark...", "Your skin suddenly appears darker...")
+ H.visible_message(span_warning("[H] looks a bit dark..."), span_notice("Your skin suddenly appears darker..."))
/datum/symptom/revitiligo/End(datum/disease/advance/A)
. = ..()
@@ -171,4 +171,4 @@ BONUS
M.reagents.add_reagent(color, 5)
else
if (prob(50)) // spam
- M.visible_message("[M] looks rather vibrant...", "The colors, man, the colors...")
+ M.visible_message(span_warning("[M] looks rather vibrant..."), span_notice("The colors, man, the colors..."))
diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm
index 74c332e0a5a7..bf35cb63bf23 100644
--- a/code/datums/diseases/advance/symptoms/vision.dm
+++ b/code/datums/diseases/advance/symptoms/vision.dm
@@ -53,9 +53,9 @@ Bonus
switch(A.stage)
if(1, 2)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "Your eyes itch.")
+ to_chat(M, span_warning("Your eyes itch."))
if(3, 4)
- to_chat(M, "Your eyes burn!")
+ to_chat(M, span_warning("Your eyes burn!"))
M.blur_eyes(10)
eyes.applyOrganDamage(1)
else
@@ -66,11 +66,11 @@ Bonus
if(prob(eyes.damage - 10 + 1))
if(!remove_eyes)
if(!HAS_TRAIT(M, TRAIT_BLIND))
- to_chat(M, "You go blind!")
+ to_chat(M, span_userdanger("You go blind!"))
eyes.applyOrganDamage(eyes.maxHealth)
else
- M.visible_message("[M]'s eyes fall out of their sockets!", "Your eyes fall out of their sockets!")
+ M.visible_message(span_warning("[M]'s eyes fall out of their sockets!"), span_userdanger("Your eyes fall out of their sockets!"))
eyes.Remove(M)
eyes.forceMove(get_turf(M))
else
- to_chat(M, "Your eyes burn horrifically!")
+ to_chat(M, span_userdanger("Your eyes burn horrifically!"))
diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm
index 1026388aa0d4..6d570ed2b8ba 100644
--- a/code/datums/diseases/advance/symptoms/voice_change.dm
+++ b/code/datums/diseases/advance/symptoms/voice_change.dm
@@ -57,7 +57,7 @@ Bonus
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("Your throat hurts.", "You clear your throat.")]")
+ to_chat(M, span_warning("[pick("Your throat hurts.", "You clear your throat.")]"))
else
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm
index 4077aef5e74f..660ed4d1f0ff 100644
--- a/code/datums/diseases/advance/symptoms/vomit.dm
+++ b/code/datums/diseases/advance/symptoms/vomit.dm
@@ -59,7 +59,7 @@ Bonus
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You feel nauseated.", "You feel like you're going to throw up!")]")
+ to_chat(M, span_warning("[pick("You feel nauseated.", "You feel like you're going to throw up!")]"))
else
vomit(M)
diff --git a/code/datums/diseases/advance/symptoms/weight.dm b/code/datums/diseases/advance/symptoms/weight.dm
index 6e11f043868d..45ad97cbfbfd 100644
--- a/code/datums/diseases/advance/symptoms/weight.dm
+++ b/code/datums/diseases/advance/symptoms/weight.dm
@@ -48,8 +48,8 @@ Bonus
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance))
- to_chat(M, "[pick("You feel hungry.", "You crave for food.")]")
+ to_chat(M, span_warning("[pick("You feel hungry.", "You crave for food.")]"))
else
- to_chat(M, "[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]")
+ to_chat(M, span_warning("[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]"))
M.overeatduration = max(M.overeatduration - 100, 0)
M.adjust_nutrition(-100)
diff --git a/code/datums/diseases/advance/symptoms/youth.dm b/code/datums/diseases/advance/symptoms/youth.dm
index da10b8331718..16c2aeffd9a3 100644
--- a/code/datums/diseases/advance/symptoms/youth.dm
+++ b/code/datums/diseases/advance/symptoms/youth.dm
@@ -40,20 +40,20 @@ BONUS
if(1)
if(H.age > 41)
H.age = 41
- to_chat(H, "You haven't had this much energy in years!")
+ to_chat(H, span_notice("You haven't had this much energy in years!"))
if(2)
if(H.age > 36)
H.age = 36
- to_chat(H, "You're suddenly in a good mood.")
+ to_chat(H, span_notice("You're suddenly in a good mood."))
if(3)
if(H.age > 31)
H.age = 31
- to_chat(H, "You begin to feel more lithe.")
+ to_chat(H, span_notice("You begin to feel more lithe."))
if(4)
if(H.age > 26)
H.age = 26
- to_chat(H, "You feel reinvigorated.")
+ to_chat(H, span_notice("You feel reinvigorated."))
if(5)
if(H.age > 21)
H.age = 21
- to_chat(H, "You feel like you can take on the world!")
+ to_chat(H, span_notice("You feel like you can take on the world!"))
diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm
index 20ecceb224c2..22a453894f1a 100644
--- a/code/datums/diseases/anxiety.dm
+++ b/code/datums/diseases/anxiety.dm
@@ -16,26 +16,26 @@
switch(stage)
if(2) //also changes say, see say.dm
if(prob(5))
- to_chat(affected_mob, "You feel anxious.")
+ to_chat(affected_mob, span_notice("You feel anxious."))
if(3)
if(prob(10))
- to_chat(affected_mob, "Your stomach flutters.")
+ to_chat(affected_mob, span_notice("Your stomach flutters."))
if(prob(5))
- to_chat(affected_mob, "You feel panicky.")
+ to_chat(affected_mob, span_notice("You feel panicky."))
if(prob(2))
- to_chat(affected_mob, "You're overtaken with panic!")
+ to_chat(affected_mob, span_danger("You're overtaken with panic!"))
affected_mob.confused += (rand(2,3))
if(4)
if(prob(10))
- to_chat(affected_mob, "You feel butterflies in your stomach.")
+ to_chat(affected_mob, span_danger("You feel butterflies in your stomach."))
if(prob(5))
- affected_mob.visible_message("[affected_mob] stumbles around in a panic.", \
- "You have a panic attack!")
+ affected_mob.visible_message(span_danger("[affected_mob] stumbles around in a panic."), \
+ span_userdanger("You have a panic attack!"))
affected_mob.confused += (rand(6,8))
affected_mob.jitteriness += (rand(6,8))
if(prob(2))
- affected_mob.visible_message("[affected_mob] coughs up butterflies!", \
- "You cough up butterflies!")
+ affected_mob.visible_message(span_danger("[affected_mob] coughs up butterflies!"), \
+ span_userdanger("You cough up butterflies!"))
new /mob/living/simple_animal/butterfly(affected_mob.loc)
new /mob/living/simple_animal/butterfly(affected_mob.loc)
return
\ No newline at end of file
diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm
index 31f102efd511..b73182fece91 100644
--- a/code/datums/diseases/appendicitis.dm
+++ b/code/datums/diseases/appendicitis.dm
@@ -27,7 +27,7 @@
A.inflamed = 1
A.update_icon()
if(prob(3))
- to_chat(affected_mob, "You feel a stabbing pain in your abdomen!")
+ to_chat(affected_mob, span_warning("You feel a stabbing pain in your abdomen!"))
affected_mob.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 5)
affected_mob.Stun(rand(40,60))
affected_mob.adjustToxLoss(1)
diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm
index 074bda0560f8..6d944640415e 100644
--- a/code/datums/diseases/beesease.dm
+++ b/code/datums/diseases/beesease.dm
@@ -17,23 +17,23 @@
switch(stage)
if(2) //also changes say, see say.dm
if(prob(2))
- to_chat(affected_mob, "You taste honey in your mouth.")
+ to_chat(affected_mob, span_notice("You taste honey in your mouth."))
if(3)
if(prob(10))
- to_chat(affected_mob, "Your stomach rumbles.")
+ to_chat(affected_mob, span_notice("Your stomach rumbles."))
if(prob(2))
- to_chat(affected_mob, "Your stomach stings painfully.")
+ to_chat(affected_mob, span_danger("Your stomach stings painfully."))
if(prob(20))
affected_mob.adjustToxLoss(2)
affected_mob.updatehealth()
if(4)
if(prob(10))
- affected_mob.visible_message("[affected_mob] buzzes.", \
- "Your stomach buzzes violently!")
+ affected_mob.visible_message(span_danger("[affected_mob] buzzes."), \
+ span_userdanger("Your stomach buzzes violently!"))
if(prob(5))
- to_chat(affected_mob, "You feel something moving in your throat.")
+ to_chat(affected_mob, span_danger("You feel something moving in your throat."))
if(prob(1))
- affected_mob.visible_message("[affected_mob] coughs up a swarm of bees!", \
- "You cough up a swarm of bees!")
+ affected_mob.visible_message(span_danger("[affected_mob] coughs up a swarm of bees!"), \
+ span_userdanger("You cough up a swarm of bees!"))
new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
return
\ No newline at end of file
diff --git a/code/datums/diseases/brainrot.dm b/code/datums/diseases/brainrot.dm
index 57628efe3627..cbeb91cce3fa 100644
--- a/code/datums/diseases/brainrot.dm
+++ b/code/datums/diseases/brainrot.dm
@@ -22,7 +22,7 @@
if(prob(2))
affected_mob.emote("yawn")
if(prob(2))
- to_chat(affected_mob, "You don't feel like yourself.")
+ to_chat(affected_mob, span_danger("You don't feel like yourself."))
if(prob(5))
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 170)
affected_mob.updatehealth()
@@ -35,7 +35,7 @@
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, 170)
affected_mob.updatehealth()
if(prob(2))
- to_chat(affected_mob, "Your try to remember something important...but can't.")
+ to_chat(affected_mob, span_danger("Your try to remember something important...but can't."))
if(4)
if(prob(2))
@@ -46,10 +46,10 @@
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 170)
affected_mob.updatehealth()
if(prob(2))
- to_chat(affected_mob, "Strange buzzing fills your head, removing all thoughts.")
+ to_chat(affected_mob, span_danger("Strange buzzing fills your head, removing all thoughts."))
if(prob(3))
- to_chat(affected_mob, "You lose consciousness...")
- affected_mob.visible_message("[affected_mob] suddenly collapses")
+ to_chat(affected_mob, span_danger("You lose consciousness..."))
+ affected_mob.visible_message(span_warning("[affected_mob] suddenly collapses"))
affected_mob.Unconscious(rand(100,200))
if(prob(1))
affected_mob.emote("snore")
diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm
index 7115a570591a..8e04f4663ab5 100644
--- a/code/datums/diseases/cold.dm
+++ b/code/datums/diseases/cold.dm
@@ -15,11 +15,11 @@
switch(stage)
if(2)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(40)) //changed FROM prob(10) until sleeping is fixed
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(1) && prob(5))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(1))
@@ -27,16 +27,16 @@
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
+ to_chat(affected_mob, span_danger("Your throat feels sore."))
if(prob(1))
- to_chat(affected_mob, "Mucous runs down the back of your throat.")
+ to_chat(affected_mob, span_danger("Mucous runs down the back of your throat."))
if(3)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(25)) //changed FROM prob(5) until sleeping is fixed
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(1) && prob(1))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(1))
@@ -44,9 +44,9 @@
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
+ to_chat(affected_mob, span_danger("Your throat feels sore."))
if(prob(1))
- to_chat(affected_mob, "Mucous runs down the back of your throat.")
+ to_chat(affected_mob, span_danger("Mucous runs down the back of your throat."))
if(prob(1) && prob(50))
if(!affected_mob.disease_resistances.Find(/datum/disease/flu))
var/datum/disease/Flu = new /datum/disease/flu()
diff --git a/code/datums/diseases/cold9.dm b/code/datums/diseases/cold9.dm
index 47f391ecf78d..049c3c98876c 100644
--- a/code/datums/diseases/cold9.dm
+++ b/code/datums/diseases/cold9.dm
@@ -16,7 +16,7 @@
if(2)
affected_mob.adjust_bodytemperature(-10)
if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(1))
@@ -24,9 +24,9 @@
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
+ to_chat(affected_mob, span_danger("Your throat feels sore."))
if(prob(5))
- to_chat(affected_mob, "You feel stiff.")
+ to_chat(affected_mob, span_danger("You feel stiff."))
if(3)
affected_mob.adjust_bodytemperature(-20)
if(prob(1))
@@ -34,6 +34,6 @@
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
+ to_chat(affected_mob, span_danger("Your throat feels sore."))
if(prob(10))
- to_chat(affected_mob, "You feel stiff.")
\ No newline at end of file
+ to_chat(affected_mob, span_danger("You feel stiff."))
\ No newline at end of file
diff --git a/code/datums/diseases/decloning.dm b/code/datums/diseases/decloning.dm
index d6522dda3aea..1ee7e82204c4 100644
--- a/code/datums/diseases/decloning.dm
+++ b/code/datums/diseases/decloning.dm
@@ -32,7 +32,7 @@
if(prob(3))
affected_mob.adjustCloneLoss(1)
if(prob(2))
- to_chat(affected_mob, "Your skin feels strange.")
+ to_chat(affected_mob, span_danger("Your skin feels strange."))
if(4)
if(prob(2))
@@ -50,10 +50,10 @@
if(prob(2))
affected_mob.emote("drool")
if(prob(5))
- to_chat(affected_mob, "Your skin starts degrading!")
+ to_chat(affected_mob, span_danger("Your skin starts degrading!"))
if(prob(10))
affected_mob.adjustCloneLoss(5)
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, 170)
if(affected_mob.cloneloss >= 100)
- affected_mob.visible_message("[affected_mob] skin turns to dust!", "Your skin turns to dust!")
+ affected_mob.visible_message(span_danger("[affected_mob] skin turns to dust!"), "Your skin turns to dust!")
affected_mob.dust()
\ No newline at end of file
diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm
index 3a67230d36ec..1d469c79bcfc 100644
--- a/code/datums/diseases/dna_spread.dm
+++ b/code/datums/diseases/dna_spread.dm
@@ -36,11 +36,11 @@
if(prob(8))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your muscles ache.")
+ to_chat(affected_mob, span_danger("Your muscles ache."))
if(prob(20))
affected_mob.take_bodypart_damage(1)
if(prob(1))
- to_chat(affected_mob, "Your stomach hurts.")
+ to_chat(affected_mob, span_danger("Your stomach hurts."))
if(prob(20))
affected_mob.adjustToxLoss(2)
affected_mob.updatehealth()
@@ -50,7 +50,7 @@
original_dna = new affected_mob.dna.type
affected_mob.dna.copy_dna(original_dna)
- to_chat(affected_mob, "You don't feel like yourself..")
+ to_chat(affected_mob, span_danger("You don't feel like yourself.."))
var/datum/dna/transform_dna = strain_data["dna"]
transform_dna.transfer_identity(affected_mob, transfer_SE = 1)
@@ -70,5 +70,5 @@
affected_mob.updateappearance(mutcolor_update=1)
affected_mob.domutcheck()
- to_chat(affected_mob, "You feel more like yourself.")
+ to_chat(affected_mob, span_notice("You feel more like yourself."))
return ..()
diff --git a/code/datums/diseases/fake_gbs.dm b/code/datums/diseases/fake_gbs.dm
index 37628a5502f1..a5450165029f 100644
--- a/code/datums/diseases/fake_gbs.dm
+++ b/code/datums/diseases/fake_gbs.dm
@@ -22,7 +22,7 @@
else if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
- to_chat(affected_mob, "You're starting to feel very weak...")
+ to_chat(affected_mob, span_danger("You're starting to feel very weak..."))
if(4)
if(prob(10))
affected_mob.emote("cough")
diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm
index 62bb3de8df41..2a650b355e37 100644
--- a/code/datums/diseases/flu.dm
+++ b/code/datums/diseases/flu.dm
@@ -16,7 +16,7 @@
switch(stage)
if(2)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(20))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
stage--
return
if(prob(1))
@@ -24,18 +24,18 @@
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your muscles ache.")
+ to_chat(affected_mob, span_danger("Your muscles ache."))
if(prob(20))
affected_mob.take_bodypart_damage(1)
if(prob(1))
- to_chat(affected_mob, "Your stomach hurts.")
+ to_chat(affected_mob, span_danger("Your stomach hurts."))
if(prob(20))
affected_mob.adjustToxLoss(1)
affected_mob.updatehealth()
if(3)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(15))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
stage--
return
if(prob(1))
@@ -43,11 +43,11 @@
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "Your muscles ache.")
+ to_chat(affected_mob, span_danger("Your muscles ache."))
if(prob(20))
affected_mob.take_bodypart_damage(1)
if(prob(1))
- to_chat(affected_mob, "Your stomach hurts.")
+ to_chat(affected_mob, span_danger("Your stomach hurts."))
if(prob(20))
affected_mob.adjustToxLoss(1)
affected_mob.updatehealth()
diff --git a/code/datums/diseases/fluspanish.dm b/code/datums/diseases/fluspanish.dm
index 3297877fe910..8a4e3edf4e38 100644
--- a/code/datums/diseases/fluspanish.dm
+++ b/code/datums/diseases/fluspanish.dm
@@ -21,7 +21,7 @@
if(prob(5))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "You're burning in your own skin!")
+ to_chat(affected_mob, span_danger("You're burning in your own skin!"))
affected_mob.take_bodypart_damage(0,5)
if(3)
@@ -31,6 +31,6 @@
if(prob(5))
affected_mob.emote("cough")
if(prob(5))
- to_chat(affected_mob, "You're burning in your own skin!")
+ to_chat(affected_mob, span_danger("You're burning in your own skin!"))
affected_mob.take_bodypart_damage(0,5)
return
diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm
index b4b51258424f..9f1ba1be626d 100644
--- a/code/datums/diseases/gastrolisis.dm
+++ b/code/datums/diseases/gastrolisis.dm
@@ -34,8 +34,8 @@
if(!eyes && prob(5))
var/obj/item/organ/eyes/snail/new_eyes = new()
new_eyes.Insert(affected_mob, drop_if_replaced = TRUE)
- affected_mob.visible_message("[affected_mob]'s eyes fall out, with snail eyes taking its place!", \
- "You scream in pain as your eyes are pushed out by your new snail eyes!")
+ affected_mob.visible_message(span_warning("[affected_mob]'s eyes fall out, with snail eyes taking its place!"), \
+ span_userdanger("You scream in pain as your eyes are pushed out by your new snail eyes!"))
affected_mob.emote("scream")
return
var/obj/item/shell = affected_mob.get_item_by_slot(SLOT_BACK)
@@ -44,20 +44,20 @@
if(!shell && prob(5))
if(affected_mob.dropItemToGround(affected_mob.get_item_by_slot(SLOT_BACK)))
affected_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(affected_mob), SLOT_BACK)
- affected_mob.visible_message("[affected_mob] grows a grotesque shell on their back!", \
- "You scream in pain as a shell pushes itself out from under your skin!")
+ affected_mob.visible_message(span_warning("[affected_mob] grows a grotesque shell on their back!"), \
+ span_userdanger("You scream in pain as a shell pushes itself out from under your skin!"))
affected_mob.emote("scream")
return
var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.internal_organs
if(!tongue && prob(5))
var/obj/item/organ/tongue/snail/new_tongue = new()
new_tongue.Insert(affected_mob)
- to_chat(affected_mob, "You feel your speech slow down")
+ to_chat(affected_mob, span_userdanger("You feel your speech slow down"))
return
if(shell && eyes && tongue && prob(5))
affected_mob.set_species(/datum/species/snail)
- affected_mob.visible_message("[affected_mob] turns into a snail!", \
- "You turned into a snail person! You feel an urge to cccrrraaawwwlll...")
+ affected_mob.visible_message(span_warning("[affected_mob] turns into a snail!"), \
+ span_boldnotice("You turned into a snail person! You feel an urge to cccrrraaawwwlll..."))
cure()
if(prob(10))
affected_mob.emote("gag")
diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm
index 8ac199685570..f9adaf149974 100644
--- a/code/datums/diseases/gbs.dm
+++ b/code/datums/diseases/gbs.dm
@@ -22,9 +22,9 @@
if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
- to_chat(affected_mob, "Your body hurts all over!")
+ to_chat(affected_mob, span_danger("Your body hurts all over!"))
if(4)
- to_chat(affected_mob, "Your body feels as if it's trying to rip itself apart!")
+ to_chat(affected_mob, span_userdanger("Your body feels as if it's trying to rip itself apart!"))
if(prob(50))
affected_mob.gib()
else
diff --git a/code/datums/diseases/heart_failure.dm b/code/datums/diseases/heart_failure.dm
index 68cadb44cbef..f48ec0702b2b 100644
--- a/code/datums/diseases/heart_failure.dm
+++ b/code/datums/diseases/heart_failure.dm
@@ -30,25 +30,25 @@
switch(stage)
if(1 to 2)
if(prob(2))
- to_chat(H, "You feel [pick("discomfort", "pressure", "a burning sensation", "pain")] in your chest.")
+ to_chat(H, span_warning("You feel [pick("discomfort", "pressure", "a burning sensation", "pain")] in your chest."))
if(prob(2))
- to_chat(H, "You feel dizzy.")
+ to_chat(H, span_warning("You feel dizzy."))
H.confused += 6
if(prob(3))
- to_chat(H, "You feel [pick("full", "nauseated", "sweaty", "weak", "tired", "short on breath", "uneasy")].")
+ to_chat(H, span_warning("You feel [pick("full", "nauseated", "sweaty", "weak", "tired", "short on breath", "uneasy")]."))
if(3 to 4)
if(!sound)
H.playsound_local(H, 'sound/health/slowbeat.ogg',40,0, channel = CHANNEL_HEARTBEAT)
sound = TRUE
if(prob(3))
- to_chat(H, "You feel a sharp pain in your chest!")
+ to_chat(H, span_danger("You feel a sharp pain in your chest!"))
if(prob(25))
affected_mob.vomit(95)
H.emote("cough")
H.Paralyze(40)
H.losebreath += 4
if(prob(3))
- to_chat(H, "You feel very weak and dizzy...")
+ to_chat(H, span_danger("You feel very weak and dizzy..."))
H.confused += 8
H.adjustStaminaLoss(40)
H.emote("cough")
@@ -56,7 +56,7 @@
H.stop_sound_channel(CHANNEL_HEARTBEAT)
H.playsound_local(H, 'sound/effects/singlebeat.ogg', 100, 0)
if(H.stat == CONSCIOUS)
- H.visible_message("[H] clutches at [H.p_their()] chest as if [H.p_their()] heart is stopping!")
+ H.visible_message(span_userdanger("[H] clutches at [H.p_their()] chest as if [H.p_their()] heart is stopping!"))
H.adjustStaminaLoss(60)
H.set_heartattack(TRUE)
H.reagents.add_reagent(/datum/reagent/medicine/corazone, 3) // To give the victim a final chance to shock their heart before losing consciousness
diff --git a/code/datums/diseases/jitters.dm b/code/datums/diseases/jitters.dm
index 3096c138f785..3dc80b31ec09 100644
--- a/code/datums/diseases/jitters.dm
+++ b/code/datums/diseases/jitters.dm
@@ -22,13 +22,13 @@
if(prob(20))
affected_mob.Jitter(2)
if(prob(10))
- to_chat(affected_mob, "You feel ants in your legs.")
+ to_chat(affected_mob, span_notice("You feel ants in your legs."))
if(3)
if(prob(40))
affected_mob.Jitter(2)
if(prob(20))
- to_chat(affected_mob, "You feel a million pricks on your legs!")
+ to_chat(affected_mob, span_danger("You feel a million pricks on your legs!"))
if((affected_mob.mobility_flags & MOBILITY_MOVE) && prob(15))
affected_mob.throw_at(target, 4, 3, spin = FALSE, diagonals_first = TRUE)
playsound(affected_mob, 'sound/weapons/fwoosh.ogg', 50, 1, 1)
- affected_mob.visible_message("[affected_mob] uncontrollably leaps forward!")
+ affected_mob.visible_message(span_warning("[affected_mob] uncontrollably leaps forward!"))
diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm
index 29e6657e1313..bb79356abb39 100644
--- a/code/datums/diseases/magnitis.dm
+++ b/code/datums/diseases/magnitis.dm
@@ -18,7 +18,7 @@
switch(stage)
if(2)
if(prob(2))
- to_chat(affected_mob, "You feel a slight shock course through your body.")
+ to_chat(affected_mob, span_danger("You feel a slight shock course through your body."))
if(prob(2))
for(var/obj/M in orange(2,affected_mob))
if(!M.anchored && (M.flags_1 & CONDUCT_1))
@@ -29,9 +29,9 @@
step_towards(S,affected_mob)
if(3)
if(prob(2))
- to_chat(affected_mob, "You feel a strong shock course through your body.")
+ to_chat(affected_mob, span_danger("You feel a strong shock course through your body."))
if(prob(2))
- to_chat(affected_mob, "You feel like clowning around.")
+ to_chat(affected_mob, span_danger("You feel like clowning around."))
if(prob(4))
for(var/obj/M in orange(4,affected_mob))
if(!M.anchored && (M.flags_1 & CONDUCT_1))
@@ -48,9 +48,9 @@
step_towards(S,affected_mob)
if(4)
if(prob(2))
- to_chat(affected_mob, "You feel a powerful shock course through your body.")
+ to_chat(affected_mob, span_danger("You feel a powerful shock course through your body."))
if(prob(2))
- to_chat(affected_mob, "You query upon the nature of miracles.")
+ to_chat(affected_mob, span_danger("You query upon the nature of miracles."))
if(prob(8))
for(var/obj/M in orange(6,affected_mob))
if(!M.anchored && (M.flags_1 & CONDUCT_1))
diff --git a/code/datums/diseases/parrotpossession.dm b/code/datums/diseases/parrotpossession.dm
index 68e962055aa4..7598d9444e0f 100644
--- a/code/datums/diseases/parrotpossession.dm
+++ b/code/datums/diseases/parrotpossession.dm
@@ -26,5 +26,5 @@
/datum/disease/parrot_possession/cure()
if(parrot && parrot.loc == affected_mob)
parrot.forceMove(affected_mob.drop_location())
- affected_mob.visible_message("[parrot] is violently driven out of [affected_mob]!", "[parrot] bursts out of your chest!")
+ affected_mob.visible_message(span_danger("[parrot] is violently driven out of [affected_mob]!"), span_userdanger("[parrot] bursts out of your chest!"))
..()
diff --git a/code/datums/diseases/pierrot_throat.dm b/code/datums/diseases/pierrot_throat.dm
index 24ccf6d7f847..3b0e7f9ff896 100644
--- a/code/datums/diseases/pierrot_throat.dm
+++ b/code/datums/diseases/pierrot_throat.dm
@@ -16,13 +16,13 @@
switch(stage)
if(1)
if(prob(10))
- to_chat(affected_mob, "You feel a little silly.")
+ to_chat(affected_mob, span_danger("You feel a little silly."))
if(2)
if(prob(10))
- to_chat(affected_mob, "You start seeing rainbows.")
+ to_chat(affected_mob, span_danger("You start seeing rainbows."))
if(3)
if(prob(10))
- to_chat(affected_mob, "Your thoughts are interrupted by a loud HONK!")
+ to_chat(affected_mob, span_danger("Your thoughts are interrupted by a loud HONK!"))
if(4)
if(prob(5))
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) , forced = "pierrot's throat")
diff --git a/code/datums/diseases/retrovirus.dm b/code/datums/diseases/retrovirus.dm
index c8ffe012981d..81cb105cda5e 100644
--- a/code/datums/diseases/retrovirus.dm
+++ b/code/datums/diseases/retrovirus.dm
@@ -32,38 +32,38 @@
if(1)
if(restcure)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(30))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if (prob(8))
- to_chat(affected_mob, "Your head hurts.")
+ to_chat(affected_mob, span_danger("Your head hurts."))
if (prob(9))
to_chat(affected_mob, "You feel a tingling sensation in your chest.")
if (prob(9))
- to_chat(affected_mob, "You feel angry.")
+ to_chat(affected_mob, span_danger("You feel angry."))
if(2)
if(restcure)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(20))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if (prob(8))
- to_chat(affected_mob, "Your skin feels loose.")
+ to_chat(affected_mob, span_danger("Your skin feels loose."))
if (prob(10))
to_chat(affected_mob, "You feel very strange.")
if (prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head!")
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head!"))
affected_mob.Unconscious(40)
if (prob(4))
- to_chat(affected_mob, "Your stomach churns.")
+ to_chat(affected_mob, span_danger("Your stomach churns."))
if(3)
if(restcure)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(20))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if (prob(10))
- to_chat(affected_mob, "Your entire body vibrates.")
+ to_chat(affected_mob, span_danger("Your entire body vibrates."))
if (prob(35))
if(prob(50))
@@ -74,7 +74,7 @@
if(4)
if(restcure)
if(!(affected_mob.mobility_flags & MOBILITY_STAND) && prob(5))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if (prob(60))
diff --git a/code/datums/diseases/rhumba_beat.dm b/code/datums/diseases/rhumba_beat.dm
index de9b66f27e46..db8266bf04f8 100644
--- a/code/datums/diseases/rhumba_beat.dm
+++ b/code/datums/diseases/rhumba_beat.dm
@@ -21,14 +21,14 @@
affected_mob.adjustFireLoss(5)
affected_mob.updatehealth()
if(prob(1))
- to_chat(affected_mob, "You feel strange...")
+ to_chat(affected_mob, span_danger("You feel strange..."))
if(3)
if(prob(5))
- to_chat(affected_mob, "You feel the urge to dance...")
+ to_chat(affected_mob, span_danger("You feel the urge to dance..."))
else if(prob(5))
affected_mob.emote("gasp")
else if(prob(10))
- to_chat(affected_mob, "You feel the need to chick chicky boom...")
+ to_chat(affected_mob, span_danger("You feel the need to chick chicky boom..."))
if(4)
if(prob(20))
if (prob(50))
@@ -36,9 +36,9 @@
affected_mob.IgniteMob()
else
affected_mob.emote("gasp")
- to_chat(affected_mob, "You feel a burning beat inside...")
+ to_chat(affected_mob, span_danger("You feel a burning beat inside..."))
if(5)
- to_chat(affected_mob, "Your body is unable to contain the Rhumba Beat...")
+ to_chat(affected_mob, span_danger("Your body is unable to contain the Rhumba Beat..."))
if(prob(50))
explosion(get_turf(affected_mob), -1, 0, 2, 3, 0, 2) // This is equivalent to a lvl 1 fireball
else
diff --git a/code/datums/diseases/sleepy.dm b/code/datums/diseases/sleepy.dm
index c39fb54d544e..8e61dd03c574 100644
--- a/code/datums/diseases/sleepy.dm
+++ b/code/datums/diseases/sleepy.dm
@@ -20,15 +20,15 @@
if(prob(5))
affected_mob.emote("yawn")
if(prob(3))
- to_chat(affected_mob, "Your muscles feel tired.")
+ to_chat(affected_mob, span_danger("Your muscles feel tired."))
if(prob(20))
affected_mob.adjustStaminaLoss(5)
if(prob(5))
- to_chat(affected_mob, "A nap would be good right about now.")
+ to_chat(affected_mob, span_danger("A nap would be good right about now."))
if(prob(10))
affected_mob.adjustStaminaLoss(3)
if(prob(3))
- to_chat(affected_mob, "You feel numb.")
+ to_chat(affected_mob, span_danger("You feel numb."))
if(prob(20))
affected_mob.adjustStaminaLoss(8)
@@ -36,27 +36,27 @@
if(prob(8))
affected_mob.emote("yawn")
if(prob(3))
- to_chat(affected_mob, "Your muscles feel very weak.")
+ to_chat(affected_mob, span_danger("Your muscles feel very weak."))
affected_mob.adjustStaminaLoss(10)
if(prob(2))
- to_chat(affected_mob, "Your legs buckle beneath you.")
+ to_chat(affected_mob, span_danger("Your legs buckle beneath you."))
affected_mob.Knockdown(40)
if(prob(3))
- to_chat(affected_mob, "You close your eyes... just for a moment.")
+ to_chat(affected_mob, span_danger("You close your eyes... just for a moment."))
affected_mob.blind_eyes(6)
if(prob(3))
- to_chat(affected_mob, "Your legs feel weak.")
+ to_chat(affected_mob, span_danger("Your legs feel weak."))
affected_mob.confused = max(affected_mob.confused, 4)
affected_mob.adjustStaminaLoss(10)
if(prob(3))
- to_chat(affected_mob, "Your eyes feel strained.")
+ to_chat(affected_mob, span_danger("Your eyes feel strained."))
affected_mob.blur_eyes(6)
if(prob(3))
- to_chat(affected_mob, "[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]")
+ to_chat(affected_mob, span_warning("[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]"))
affected_mob.blur_eyes(6)
affected_mob.confused = max(affected_mob.confused, 4)
affected_mob.adjustStaminaLoss(15)
if(prob(5))
- to_chat(affected_mob, "Just a little nap...")
+ to_chat(affected_mob, span_danger("Just a little nap..."))
affected_mob.SetSleeping(80)
return
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
index 2154abb29094..5f1c86f4260e 100644
--- a/code/datums/diseases/transformation.dm
+++ b/code/datums/diseases/transformation.dm
@@ -112,9 +112,9 @@
stage1 = list()
stage2 = list()
stage3 = list()
- stage4 = list("Your back hurts.", "You breathe through your mouth.",
- "You have a craving for bananas.", "Your mind feels clouded.")
- stage5 = list("You feel like monkeying around.")
+ stage4 = list(span_warning("Your back hurts."), span_warning("You breathe through your mouth."),
+ span_warning("You have a craving for bananas."), span_warning("Your mind feels clouded."))
+ stage5 = list(span_warning("You feel like monkeying around."))
/datum/disease/transformation/jungle_fever/do_disease_transformation(mob/living/carbon/affected_mob)
if(affected_mob.mind && !is_monkey(affected_mob.mind))
@@ -129,10 +129,10 @@
switch(stage)
if(2)
if(prob(2))
- to_chat(affected_mob, "Your [pick("back", "arm", "leg", "elbow", "head")] itches.")
+ to_chat(affected_mob, span_notice("Your [pick("back", "arm", "leg", "elbow", "head")] itches."))
if(3)
if(prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head.")
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head."))
affected_mob.confused += 10
if(4)
if(prob(3))
@@ -164,10 +164,10 @@
severity = DISEASE_SEVERITY_BIOHAZARD
visibility_flags = 0
stage1 = list()
- stage2 = list("Your joints feel stiff.", "Beep...boop..")
- stage3 = list("Your joints feel very stiff.", "Your skin feels loose.", "You can feel something move...inside.")
- stage4 = list("Your skin feels very loose.", "You can feel... something...inside you.")
- stage5 = list("Your skin feels as if it's about to burst off!")
+ stage2 = list("Your joints feel stiff.", span_danger("Beep...boop.."))
+ stage3 = list(span_danger("Your joints feel very stiff."), "Your skin feels loose.", span_danger("You can feel something move...inside."))
+ stage4 = list(span_danger("Your skin feels very loose."), span_danger("You can feel... something...inside you."))
+ stage5 = list(span_danger("Your skin feels as if it's about to burst off!"))
new_form = /mob/living/silicon/robot
infectable_biotypes = list(MOB_ORGANIC, MOB_UNDEAD, MOB_ROBOTIC)
bantype = "Cyborg"
@@ -179,7 +179,7 @@
if (prob(8))
affected_mob.say(pick("Beep, boop", "beep, beep!", "Boop...bop"), forced = "robotic transformation")
if (prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head.")
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head."))
affected_mob.Unconscious(40)
if(4)
if (prob(20))
@@ -197,10 +197,10 @@
severity = DISEASE_SEVERITY_BIOHAZARD
visibility_flags = 0
stage1 = list()
- stage2 = list("Your throat feels scratchy.", "Kill...")
- stage3 = list("Your throat feels very scratchy.", "Your skin feels tight.", "You can feel something move...inside.")
- stage4 = list("Your skin feels very tight.", "Your blood boils!", "You can feel... something...inside you.")
- stage5 = list("Your skin feels as if it's about to burst off!")
+ stage2 = list("Your throat feels scratchy.", span_danger("Kill..."))
+ stage3 = list(span_danger("Your throat feels very scratchy."), "Your skin feels tight.", span_danger("You can feel something move...inside."))
+ stage4 = list(span_danger("Your skin feels very tight."), span_danger("Your blood boils!"), span_danger("You can feel... something...inside you."))
+ stage5 = list(span_danger("Your skin feels as if it's about to burst off!"))
new_form = /mob/living/carbon/alien/humanoid/hunter
bantype = ROLE_ALIEN
@@ -209,7 +209,7 @@
switch(stage)
if(3)
if (prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head.")
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head."))
affected_mob.Unconscious(40)
if(4)
if (prob(20))
@@ -227,9 +227,9 @@
visibility_flags = 0
stage1 = list("You don't feel very well.")
stage2 = list("Your skin feels a little slimy.")
- stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.")
- stage4 = list("You are turning into a slime.")
- stage5 = list("You have become a slime.")
+ stage3 = list(span_danger("Your appendages are melting away."), span_danger("Your limbs begin to lose their shape."))
+ stage4 = list(span_danger("You are turning into a slime."))
+ stage5 = list(span_danger("You have become a slime."))
new_form = /mob/living/simple_animal/slime/random
/datum/disease/transformation/slime/stage_act()
@@ -255,9 +255,9 @@
visibility_flags = 0
stage1 = list("BARK.")
stage2 = list("You feel the need to wear silly hats.")
- stage3 = list("Must... eat... chocolate....", "YAP")
- stage4 = list("Visions of washing machines assail your mind!")
- stage5 = list("AUUUUUU!!!")
+ stage3 = list(span_danger("Must... eat... chocolate...."), span_danger("YAP"))
+ stage4 = list(span_danger("Visions of washing machines assail your mind!"))
+ stage5 = list(span_danger("AUUUUUU!!!"))
new_form = /mob/living/simple_animal/pet/dog/corgi
/datum/disease/transformation/corgi/stage_act()
@@ -281,9 +281,9 @@
visibility_flags = 0
stage1 = list("Your stomach rumbles.")
stage2 = list("Your skin feels saggy.")
- stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.")
- stage4 = list("You're ravenous.")
- stage5 = list("You have become a morph.")
+ stage3 = list(span_danger("Your appendages are melting away."), span_danger("Your limbs begin to lose their shape."))
+ stage4 = list(span_danger("You're ravenous."))
+ stage5 = list(span_danger("You have become a morph."))
new_form = /mob/living/simple_animal/hostile/morph
infectable_biotypes = list(MOB_ORGANIC, MOB_INORGANIC, MOB_UNDEAD) //magic!
@@ -298,9 +298,9 @@
visibility_flags = 0
stage1 = list("Your stomach rumbles.")
stage2 = list("Your body feels tired")
- stage3 = list("Your skin starts to look transparent", "Your limbs begin to lose their shape.")
- stage4 = list("your organs seems to suddenly disappear.")
- stage5 = list("You have become a ghost.")
+ stage3 = list(span_danger("Your skin starts to look transparent"), span_danger("Your limbs begin to lose their shape."))
+ stage4 = list(span_danger("your organs seems to suddenly disappear."))
+ stage5 = list(span_danger("You have become a ghost."))
new_form = /mob/living/simple_animal/hostile/retaliate/ghost
infectable_biotypes = list(MOB_ORGANIC, MOB_INORGANIC, MOB_UNDEAD) //magic!
@@ -316,9 +316,9 @@
visibility_flags = 0
stage1 = list("You seem a little lighter in your step.")
stage2 = list("You catch yourself smiling for no reason.")
- stage3 = list("A cruel sense of calm overcomes you.", "You can't feel your arms!", "You let go of the urge to hurt clowns.")
- stage4 = list("You can't feel your arms. It does not bother you anymore.", "You forgive the clown for hurting you.")
- stage5 = list("You have become a Gondola.")
+ stage3 = list(span_danger("A cruel sense of calm overcomes you."), span_danger("You can't feel your arms!"), span_danger("You let go of the urge to hurt clowns."))
+ stage4 = list(span_danger("You can't feel your arms. It does not bother you anymore."), span_danger("You forgive the clown for hurting you."))
+ stage5 = list(span_danger("You have become a Gondola."))
new_form = /mob/living/simple_animal/pet/gondola
/datum/disease/transformation/gondola/stage_act()
@@ -340,6 +340,6 @@
if (prob(20))
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
if (prob(2))
- to_chat(affected_mob, "You let go of what you were holding.")
+ to_chat(affected_mob, span_danger("You let go of what you were holding."))
var/obj/item/I = affected_mob.get_active_held_item()
affected_mob.dropItemToGround(I)
diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm
index 1059e4a8e00b..25816c909b0b 100644
--- a/code/datums/diseases/tuberculosis.dm
+++ b/code/datums/diseases/tuberculosis.dm
@@ -19,42 +19,42 @@
if(2)
if(prob(2))
affected_mob.emote("cough")
- to_chat(affected_mob, "Your chest hurts.")
+ to_chat(affected_mob, span_danger("Your chest hurts."))
if(prob(2))
- to_chat(affected_mob, "Your stomach violently rumbles!")
+ to_chat(affected_mob, span_danger("Your stomach violently rumbles!"))
if(prob(5))
- to_chat(affected_mob, "You feel a cold sweat form.")
+ to_chat(affected_mob, span_danger("You feel a cold sweat form."))
if(4)
if(prob(2))
- to_chat(affected_mob, "You see four of everything")
+ to_chat(affected_mob, span_userdanger("You see four of everything"))
affected_mob.Dizzy(5)
if(prob(2))
- to_chat(affected_mob, "You feel a sharp pain from your lower chest!")
+ to_chat(affected_mob, span_danger("You feel a sharp pain from your lower chest!"))
affected_mob.adjustOxyLoss(5)
affected_mob.emote("gasp")
if(prob(10))
- to_chat(affected_mob, "You feel air escape from your lungs painfully.")
+ to_chat(affected_mob, span_danger("You feel air escape from your lungs painfully."))
affected_mob.adjustOxyLoss(25)
affected_mob.emote("gasp")
if(5)
if(prob(2))
- to_chat(affected_mob, "[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]")
+ to_chat(affected_mob, span_userdanger("[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]"))
affected_mob.adjustStaminaLoss(70)
if(prob(10))
affected_mob.adjustStaminaLoss(100)
- affected_mob.visible_message("[affected_mob] faints!", "You surrender yourself and feel at peace...")
+ affected_mob.visible_message(span_warning("[affected_mob] faints!"), span_userdanger("You surrender yourself and feel at peace..."))
affected_mob.AdjustSleeping(100)
if(prob(2))
- to_chat(affected_mob, "You feel your mind relax and your thoughts drift!")
+ to_chat(affected_mob, span_userdanger("You feel your mind relax and your thoughts drift!"))
affected_mob.confused = min(100, affected_mob.confused + 8)
if(prob(10))
affected_mob.vomit(20)
if(prob(3))
- to_chat(affected_mob, "[pick("Your stomach silently rumbles...", "Your stomach seizes up and falls limp, muscles dead and lifeless.", "You could eat a crayon")]")
+ to_chat(affected_mob, span_warning("[pick("Your stomach silently rumbles...", "Your stomach seizes up and falls limp, muscles dead and lifeless.", "You could eat a crayon")]"))
affected_mob.overeatduration = max(affected_mob.overeatduration - 100, 0)
affected_mob.adjust_nutrition(-100)
if(prob(15))
- to_chat(affected_mob, "[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]")
+ to_chat(affected_mob, span_danger("[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]"))
affected_mob.adjust_bodytemperature(40)
return
diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm
index 230a074bb146..f5936d2baf6b 100644
--- a/code/datums/diseases/wizarditis.dm
+++ b/code/datums/diseases/wizarditis.dm
@@ -31,14 +31,14 @@ STI KALY - blind
if(prob(1)&&prob(50))
affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlins beard!", "Feel the power of the Dark Side!"), forced = "wizarditis")
if(prob(1)&&prob(50))
- to_chat(affected_mob, "You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].")
+ to_chat(affected_mob, span_danger("You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")]."))
if(3)
if(prob(1)&&prob(50))
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"), forced = "wizarditis")
if(prob(1)&&prob(50))
- to_chat(affected_mob, "You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].")
+ to_chat(affected_mob, span_danger("You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")]."))
if(4)
@@ -46,7 +46,7 @@ STI KALY - blind
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!","STI KALY!","EI NATH!"), forced = "wizarditis")
return
if(prob(1)&&prob(50))
- to_chat(affected_mob, "You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")].")
+ to_chat(affected_mob, span_danger("You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")]."))
spawn_wizard_clothes(50)
if(prob(1)&&prob(1))
teleport()
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 6245fb7c3cd4..fc2db9ead5b9 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -241,17 +241,17 @@
if(alert)
switch(stability)
if(70 to 90)
- message = "You shiver."
+ message = span_warning("You shiver.")
if(60 to 69)
- message = "You feel cold."
+ message = span_warning("You feel cold.")
if(40 to 59)
- message = "You feel sick."
+ message = span_warning("You feel sick.")
if(20 to 39)
- message = "It feels like your skin is moving."
+ message = span_warning("It feels like your skin is moving.")
if(1 to 19)
- message = "You can feel your cells burning."
+ message = span_warning("You can feel your cells burning.")
if(-INFINITY to 0)
- message = "You can feel your DNA exploding, we need to do something fast!"
+ message = span_boldwarning("You can feel your DNA exploding, we need to do something fast!")
if(stability <= 0)
holder.apply_status_effect(STATUS_EFFECT_DNA_MELT)
if(message)
@@ -600,21 +600,21 @@
if(1)
gain_trauma(/datum/brain_trauma/severe/paralysis/paraplegic)
new/obj/vehicle/ridden/wheelchair(get_turf(src)) //don't buckle, because I can't imagine to plethora of things to go through that could otherwise break
- to_chat(src, "My flesh turned into a wheelchair and I can't feel my legs.")
+ to_chat(src, span_warning("My flesh turned into a wheelchair and I can't feel my legs."))
if(2)
corgize()
if(3)
- to_chat(src, "Oh, I actually feel quite alright!")
+ to_chat(src, span_notice("Oh, I actually feel quite alright!"))
if(4)
- to_chat(src, "Oh, I actually feel quite alright!") //you thought
+ to_chat(src, span_notice("Oh, I actually feel quite alright!")) //you thought
physiology.damage_resistance = -20000
if(5)
- to_chat(src, "Oh, I actually feel quite alright!")
+ to_chat(src, span_notice("Oh, I actually feel quite alright!"))
reagents.add_reagent(/datum/reagent/aslimetoxin, 10)
if(6)
apply_status_effect(STATUS_EFFECT_GO_AWAY)
if(7)
- to_chat(src, "Oh, I actually feel quite alright!")
+ to_chat(src, span_notice("Oh, I actually feel quite alright!"))
ForceContractDisease(new/datum/disease/decloning()) //slow acting, non-viral clone damage based GBS
if(8)
var/list/elligible_organs = list()
@@ -624,13 +624,13 @@
if(elligible_organs.len)
var/obj/item/organ/O = pick(elligible_organs)
O.Remove(src)
- visible_message("[src] vomits up their [O.name]!", "You vomit up your [O.name]") //no "vomit up your the heart"
+ visible_message(span_danger("[src] vomits up their [O.name]!"), "You vomit up your [O.name]") //no "vomit up your the heart"
O.forceMove(drop_location())
if(prob(20))
O.animate_atom_living()
if(9 to 10)
ForceContractDisease(new/datum/disease/gastrolosis())
- to_chat(src, "Oh, I actually feel quite alright!")
+ to_chat(src, span_notice("Oh, I actually feel quite alright!"))
else
switch(rand(0,5))
if(0)
@@ -651,7 +651,7 @@
else
set_species(/datum/species/dullahan)
if(4)
- visible_message("[src]'s skin melts off!", "Your skin melts off!")
+ visible_message(span_warning("[src]'s skin melts off!"), span_boldwarning("Your skin melts off!"))
spawn_gibs()
set_species(/datum/species/skeleton)
if(prob(90))
@@ -659,7 +659,7 @@
if(mind)
mind.hasSoul = FALSE
if(5)
- to_chat(src, "LOOK UP!")
+ to_chat(src, span_phobia("LOOK UP!"))
addtimer(CALLBACK(src, .proc/something_horrible_mindmelt), 30)
@@ -670,5 +670,5 @@
return
eyes.Remove(src)
qdel(eyes)
- visible_message("[src] looks up and their eyes melt away!", "='userdanger'>I understand now.")
+ visible_message(span_notice("[src] looks up and their eyes melt away!"), "='userdanger'>I understand now.")
addtimer(CALLBACK(src, .proc/adjustOrganLoss, ORGAN_SLOT_BRAIN, 200), 20)
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index bd3c61efa291..fa3c4fe736f2 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -135,11 +135,11 @@
return FALSE
switch(user.stat)
if(SOFT_CRIT)
- to_chat(user, "You cannot [key] while in a critical condition.")
+ to_chat(user, span_notice("You cannot [key] while in a critical condition."))
if(UNCONSCIOUS)
- to_chat(user, "You cannot [key] while unconscious.")
+ to_chat(user, span_notice("You cannot [key] while unconscious."))
if(DEAD)
- to_chat(user, "You cannot [key] while dead.")
+ to_chat(user, span_notice("You cannot [key] while dead."))
return FALSE
if(restraint_check)
if(isliving(user))
@@ -147,12 +147,12 @@
if(L.IsParalyzed() || L.IsStun())
if(!intentional)
return FALSE
- to_chat(user, "You cannot [key] while stunned.")
+ to_chat(user, span_notice("You cannot [key] while stunned."))
return FALSE
if(restraint_check && user.restrained())
if(!intentional)
return FALSE
- to_chat(user, "You cannot [key] while restrained.")
+ to_chat(user, span_notice("You cannot [key] while restrained."))
return FALSE
if(isliving(user))
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 79c2fd65eef0..0c2d036dd48f 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -44,7 +44,7 @@
precision = max(rand(1,100)*bagholding.len,100)
if(isliving(teleatom))
var/mob/living/MM = teleatom
- to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!")
+ to_chat(MM, span_warning("The bluespace interface on your bag of holding interferes with the teleport!"))
// if effects are not specified and not explicitly disabled, sparks
if ((!effectin || !effectout) && !no_effects)
diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm
index db39ff081d3a..fe46bf75f01c 100644
--- a/code/datums/holocall.dm
+++ b/code/datums/holocall.dm
@@ -252,10 +252,10 @@
record.caller_image = holodiskOriginal.record.caller_image
record.entries = holodiskOriginal.record.entries.Copy()
record.language = holodiskOriginal.record.language
- to_chat(user, "You copy the record from [holodiskOriginal] to [src] by connecting the ports!")
+ to_chat(user, span_notice("You copy the record from [holodiskOriginal] to [src] by connecting the ports!"))
name = holodiskOriginal.name
else
- to_chat(user, "[holodiskOriginal] has no record on it!")
+ to_chat(user, span_warning("[holodiskOriginal] has no record on it!"))
..()
/obj/item/disk/holodisk/proc/build_record()
diff --git a/code/datums/martial.dm b/code/datums/martial.dm
index e1dc8c6430cf..16623bfcaf50 100644
--- a/code/datums/martial.dm
+++ b/code/datums/martial.dm
@@ -116,8 +116,8 @@
if(!damage)
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
- D.visible_message("[A] has attempted to [atk_verb] [D]!", \
- "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE)
+ D.visible_message(span_warning("[A] has attempted to [atk_verb] [D]!"), \
+ span_userdanger("[A] has attempted to [atk_verb] [D]!"), null, COMBAT_MESSAGE_RANGE)
log_combat(A, D, "attempted to [atk_verb]")
return FALSE
@@ -125,16 +125,16 @@
var/armor_block = D.run_armor_check(affecting, "melee")
playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1)
- D.visible_message("[A] has [atk_verb]ed [D]!", \
- "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE)
+ D.visible_message(span_danger("[A] has [atk_verb]ed [D]!"), \
+ span_userdanger("[A] has [atk_verb]ed [D]!"), null, COMBAT_MESSAGE_RANGE)
D.apply_damage(damage, A.dna.species.attack_type, affecting, armor_block)
log_combat(A, D, "punched")
if((D.stat != DEAD) && damage >= A.dna.species.punchstunthreshold)
- D.visible_message("[A] has knocked [D] down!!", \
- "[A] has knocked [D] down!")
+ D.visible_message(span_danger("[A] has knocked [D] down!!"), \
+ span_userdanger("[A] has knocked [D] down!"))
D.apply_effect(40, EFFECT_KNOCKDOWN, armor_block)
D.forcesay(GLOB.hit_appends)
else if(!(D.mobility_flags & MOBILITY_STAND))
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 2663403db4a3..1abb1fef4d2b 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -4,11 +4,11 @@
nonlethal = TRUE
/datum/martial_art/boxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- to_chat(A, "Can't disarm while boxing!")
+ to_chat(A, span_warning("Can't disarm while boxing!"))
return 1
/datum/martial_art/boxing/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- to_chat(A, "Can't grab while boxing!")
+ to_chat(A, span_warning("Can't grab while boxing!"))
return 1
/datum/martial_art/boxing/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -20,8 +20,8 @@
var/damage = rand(5, 8) + A.dna.species.punchdamagelow
if(!damage)
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
- D.visible_message("[A] has attempted to [atk_verb] [D]!", \
- "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE)
+ D.visible_message(span_warning("[A] has attempted to [atk_verb] [D]!"), \
+ span_userdanger("[A] has attempted to [atk_verb] [D]!"), null, COMBAT_MESSAGE_RANGE)
log_combat(A, D, "attempted to hit", atk_verb)
return 0
@@ -31,16 +31,16 @@
playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1)
- D.visible_message("[A] has [atk_verb]ed [D]!", \
- "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE)
+ D.visible_message(span_danger("[A] has [atk_verb]ed [D]!"), \
+ span_userdanger("[A] has [atk_verb]ed [D]!"), null, COMBAT_MESSAGE_RANGE)
D.apply_damage(damage, STAMINA, affecting, armor_block)
log_combat(A, D, "punched (boxing) ")
if(D.getStaminaLoss() > 50)
var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
if((D.stat != DEAD) && prob(knockout_prob))
- D.visible_message("[A] has knocked [D] out with a haymaker!", \
- "[A] has knocked [D] out with a haymaker!")
+ D.visible_message(span_danger("[A] has knocked [D] out with a haymaker!"), \
+ span_userdanger("[A] has knocked [D] out with a haymaker!"))
D.apply_effect(200,EFFECT_KNOCKDOWN,armor_block)
D.SetSleeping(100)
D.forcesay(GLOB.hit_appends)
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index 416bd3e8a82c..478c3729ecad 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -85,8 +85,8 @@
if(!can_use(A))
return FALSE
if(D.mobility_flags & MOBILITY_STAND)
- D.visible_message("[A] slams [D] into the ground!", \
- "[A] slams you into the ground!")
+ D.visible_message(span_warning("[A] slams [D] into the ground!"), \
+ span_userdanger("[A] slams you into the ground!"))
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) //using hit_kick because for some stupid reason slam.ogg is delayed
A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
D.apply_damage(15, STAMINA)
@@ -106,8 +106,8 @@
return FALSE
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
if(!D.stat && (D.mobility_flags & MOBILITY_STAND))
- D.visible_message("[A] kicks [D] back!", \
- "[A] kicks you back!")
+ D.visible_message(span_warning("[A] kicks [D] back!"), \
+ span_userdanger("[A] kicks you back!"))
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
step(D, A.dir)
D.apply_damage(15, STAMINA)
@@ -116,8 +116,8 @@
addtimer(CALLBACK(D, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
if(!(D.mobility_flags & MOBILITY_STAND) && !D.stat)
log_combat(A, D, "prone-kicked(CQC)")
- D.visible_message("[A] firmly kicks [D] in the abdomen!", \
- "[A] kicks you in the abdomen!")
+ D.visible_message(span_warning("[A] firmly kicks [D] in the abdomen!"), \
+ span_userdanger("[A] kicks you in the abdomen!"))
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
D.Paralyze(5)
D.apply_damage(40, STAMINA)
@@ -142,7 +142,7 @@
var/hit_limb = D.get_bodypart(selected_zone)
if(!hit_limb)
return FALSE
- D.visible_message("[A] dislocates [D]'s [hit_limb]!", \
+ D.visible_message(span_warning("[A] dislocates [D]'s [hit_limb]!"), \
"[A] dislocates your [hit_limb]!")
D.drop_all_held_items()
D.apply_damage(50, STAMINA, selected_zone)
@@ -162,8 +162,8 @@
return FALSE
if(!D.stat)
log_combat(A, D, "restrained (CQC)")
- D.visible_message("[A] locks [D] into a restraining position!", \
- "[A] locks you into a restraining position!")
+ D.visible_message(span_warning("[A] locks [D] into a restraining position!"), \
+ span_userdanger("[A] locks you into a restraining position!"))
D.Stun(20)
if(!(A.pulling == D))
D.grabbedby(A, 1)
@@ -183,8 +183,8 @@
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
if(D.mobility_flags & MOBILITY_STAND)
log_combat(A, D, "consecutive CQC'd (CQC)")
- D.visible_message("[A] delivers a firm blow to [D]'s head, knocking them down!", \
- "[A] delivers a firm blow to your head, causing you to fall over!")
+ D.visible_message(span_warning("[A] delivers a firm blow to [D]'s head, knocking them down!"), \
+ span_userdanger("[A] delivers a firm blow to your head, causing you to fall over!"))
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
D.Paralyze(50)
D.Knockdown(100)
@@ -218,13 +218,13 @@
var/bonus_damage = 15
D.apply_damage(bonus_damage, STAMINA)
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
- D.visible_message("[A] [picked_hit_type] [D]!", \
- "[A] [picked_hit_type] you!")
+ D.visible_message(span_danger("[A] [picked_hit_type] [D]!"), \
+ span_userdanger("[A] [picked_hit_type] you!"))
D.Immobilize(15)
log_combat(A, D, "[picked_hit_type] (CQC)")
if(!(A.mobility_flags & MOBILITY_STAND) && (D.mobility_flags & MOBILITY_STAND))
D.visible_message("[A] leg sweeps [D]!", \
- "[A] leg sweeps you!")
+ span_userdanger("[A] leg sweeps you!"))
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.Paralyze(10)
D.Knockdown(30)
@@ -245,39 +245,39 @@
if(!D.stat && !D.IsParalyzed() && !restraining)
if(prob(65))
I = D.get_active_held_item()
- D.visible_message("[A] quickly grabs [D]'s arm and and chops it, disarming them!", \
- "[A] grabs your arm and chops it, disarming you!")
+ D.visible_message(span_warning("[A] quickly grabs [D]'s arm and and chops it, disarming them!"), \
+ span_userdanger("[A] grabs your arm and chops it, disarming you!"))
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
if(I && D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I)
D.Jitter(2)
D.apply_damage(5, STAMINA)
else
- D.visible_message("[A] grabs at [D]'s arm, but misses!", \
- "[A] grabs at your arm, but misses!")
+ D.visible_message(span_danger("[A] grabs at [D]'s arm, but misses!"), \
+ span_userdanger("[A] grabs at your arm, but misses!"))
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]")
if(restraining && A.pulling == D)
if(chokehold_active)
return TRUE
log_combat(A, D, "began to chokehold(CQC)")
- D.visible_message("[A] puts [D] into a chokehold!", \
- "[A] puts you into a chokehold!")
+ D.visible_message(span_danger("[A] puts [D] into a chokehold!"), \
+ span_userdanger("[A] puts you into a chokehold!"))
if(handle_chokehold(A, D))
D.Unconscious(400)
if(A.grab_state < GRAB_NECK)
A.grab_state = GRAB_NECK
- A.visible_message("[A] relaxes their grip on [D].", \
- "You relax your grip on [D].") //visible message comes from attacker since defender is unconscious and therefore can't see
+ A.visible_message(span_danger("[A] relaxes their grip on [D]."), \
+ span_danger("You relax your grip on [D].")) //visible message comes from attacker since defender is unconscious and therefore can't see
else
if(A.grab_state) //honestly with the way current grabs work this doesn't really do all that much
A.grab_state = min(1, A.grab_state - 1) //immediately lose grab power...
if(!A.grab_state || prob(BASE_GRAB_RESIST_CHANCE/A.grab_state)) //...and have a chance to lose the entire grab
- A.visible_message("[A] is put off balance, losing their grip on [D]!", \
- "You are put off balance, and you lose your grip on [D]!")
+ A.visible_message(span_danger("[A] is put off balance, losing their grip on [D]!"), \
+ span_danger("You are put off balance, and you lose your grip on [D]!"))
A.stop_pulling()
else
- A.visible_message("[A] is put off balance, and struggles to maintain their grip on [D]!", \
+ A.visible_message(span_danger("[A] is put off balance, and struggles to maintain their grip on [D]!"), \
"[user] grabs [attacker]'s arm as they attack and throws them to the ground!", \
- "[user] grabs your arm as you attack and throws you to the ground!")
+ attacker.visible_message(span_warning("[user] grabs [attacker]'s arm as they attack and throws them to the ground!"), \
+ span_userdanger("[user] grabs your arm as you attack and throws you to the ground!"))
playsound(get_turf(attacker), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
var/obj/item/I = attacker.get_active_held_item()
if(I && attacker.temporarilyRemoveItemFromInventory(I))
@@ -330,16 +330,16 @@
set category = "CQC"
to_chat(usr, "You try to remember some of the basics of CQC.")
- to_chat(usr, "All of your unarmed attacks deal stamina damage instead of your normal physical damage type")
+ to_chat(usr, span_notice("All of your unarmed attacks deal stamina damage instead of your normal physical damage type"))
- to_chat(usr, "Disarm Intent Has a chance to disarm the opponent's main hand, and immediately pick up the item if successful")
- to_chat(usr, "Grab Intent Will stun opponents for a short second, allowing you to quickly increase the strength of your grabs")
- to_chat(usr, "Harm Intent Will deal a competitive amount of stamina damage, and hitting a standing opponent while you are prone will both knock them down and stand you up")
+ to_chat(usr, span_notice("Disarm Intent Has a chance to disarm the opponent's main hand, and immediately pick up the item if successful"))
+ to_chat(usr, span_notice("Grab Intent Will stun opponents for a short second, allowing you to quickly increase the strength of your grabs"))
+ to_chat(usr, span_notice("Harm Intent Will deal a competitive amount of stamina damage, and hitting a standing opponent while you are prone will both knock them down and stand you up"))
- to_chat(usr, "Slam: Grab Harm. Slam opponent into the ground, knocking them down and dealing decent stamina damage.")
- to_chat(usr, "CQC Kick: Disarm Harm. Knocks opponent away and slows them. Deals heavy stamina damage to prone opponents.")
- to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, making your grab harder to break out of. Disarm to begin a chokehold which deal gradual oxygen damage until the opponent is unconscious, with the damage increasing based on their stamina damage. Failing to complete the chokehold will weaken and possibly break your grab.")
- to_chat(usr, "Pressure: Disarm Grab. Disables the targetted limb or a random limb if the head or chest are targetted, as well as forcing the target to drop anything they are holding.")
- to_chat(usr, "Consecutive CQC: Harm Harm Harm Harm Harm. Offensive move, deals bonus stamina damage and knocking down on the last hit.")
+ to_chat(usr, "[span_notice("Slam")]: Grab Harm. Slam opponent into the ground, knocking them down and dealing decent stamina damage.")
+ to_chat(usr, "[span_notice("CQC Kick")]: Disarm Harm. Knocks opponent away and slows them. Deals heavy stamina damage to prone opponents.")
+ to_chat(usr, "[span_notice("Restrain")]: Grab Grab. Locks opponents into a restraining position, making your grab harder to break out of. Disarm to begin a chokehold which deal gradual oxygen damage until the opponent is unconscious, with the damage increasing based on their stamina damage. Failing to complete the chokehold will weaken and possibly break your grab.")
+ to_chat(usr, "[span_notice("Pressure")]: Disarm Grab. Disables the targetted limb or a random limb if the head or chest are targetted, as well as forcing the target to drop anything they are holding.")
+ to_chat(usr, "[span_notice("Consecutive CQC")]: Harm Harm Harm Harm Harm. Offensive move, deals bonus stamina damage and knocking down on the last hit.")
to_chat(usr, "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to counter attacks done to you.")
diff --git a/code/datums/martial/flying_fang.dm b/code/datums/martial/flying_fang.dm
index 257e75b0fa6d..9d2e888af02f 100644
--- a/code/datums/martial/flying_fang.dm
+++ b/code/datums/martial/flying_fang.dm
@@ -42,8 +42,8 @@
playsound(D, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
D.apply_damage(25, STAMINA, selected_zone, armor_block)
D.apply_damage(15, A.dna.species.attack_type, selected_zone, armor_block)
- D.visible_message("[A] slams into [D], knocking them off balance!", \
- "[A] slams into you, knocking you off balance!")
+ D.visible_message(span_danger("[A] slams into [D], knocking them off balance!"), \
+ span_userdanger("[A] slams into you, knocking you off balance!"))
D.add_movespeed_modifier("tail slap", update=TRUE, priority=101, multiplicative_slowdown=0.9)
addtimer(CALLBACK(D, /mob.proc/remove_movespeed_modifier, "tail slap"), 5 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE)
log_combat(A, D, "slammed (Flying Fang)")
@@ -55,14 +55,14 @@
A.emote("spin")
var/obj/item/organ/tail = A.getorganslot(ORGAN_SLOT_TAIL)
if(!istype(tail, /obj/item/organ/tail/lizard))
- A.visible_message("[A] spins around.", \
- "You spin around like a doofus.")
+ A.visible_message(span_danger("[A] spins around."), \
+ span_userdanger("You spin around like a doofus."))
return
playsound(get_turf(A), 'sound/weapons/slap.ogg', 50, TRUE, -1)
for(var/obj/item/I in D.held_items)
if(I.block_chance)
- D.visible_message("[A] tail slaps [I] out of [D]'s hands!", \
- "[A] tail slaps your [I] out of your hands!")
+ D.visible_message(span_danger("[A] tail slaps [I] out of [D]'s hands!"), \
+ span_userdanger("[A] tail slaps your [I] out of your hands!"))
D.dropItemToGround(I)
var/atom/throw_target = get_edge_target_turf(D, get_dir(A, get_step_away(D, A)))
I.safe_throw_at(throw_target, 5, 2)
@@ -75,8 +75,8 @@
D.apply_damage(10, A.dna.species.attack_type, selected_zone, armor_block)
D.Knockdown(5 SECONDS)
D.Paralyze(2 SECONDS)
- D.visible_message("[A] tail slaps [D]!", \
- "[A] tail slaps you!")
+ D.visible_message(span_danger("[A] tail slaps [D]!"), \
+ span_userdanger("[A] tail slaps you!"))
log_combat(A, D, "tail slapped (Flying Fang)")
/datum/martial_art/flyingfang/proc/remove_bonk(mob/living/carbon/human/D)
@@ -92,11 +92,11 @@
A.do_attack_animation(D, ATTACK_EFFECT_BITE)
playsound(D, 'sound/weapons/bite.ogg', 50, TRUE, -1)
D.apply_damage(30, A.dna.species.attack_type, BODY_ZONE_HEAD, armor_block)
- D.bleed_rate += 10
- D.visible_message("[A] takes a large bite out of [D]'s neck!", \
- "[A] takes a large bite out of your neck!")
+ // D.bleed_rate += 10
+ D.visible_message(span_danger("[A] takes a large bite out of [D]'s neck!"), \
+ span_userdanger("[A] takes a large bite out of your neck!"))
if(D.health > 0)
- to_chat(A, "You feel reinvigorated!")
+ to_chat(A, span_boldwarning("You feel reinvigorated!"))
A.heal_overall_damage(25, 25)
A.adjustToxLoss(-8)
A.adjustStaminaLoss(-50)
@@ -122,8 +122,8 @@
if(!istype(D.head, /obj/item/clothing/head/helmet))
ADD_TRAIT(D, TRAIT_POOR_AIM, "martial")
addtimer(CALLBACK(src, .proc/remove_bonk, D), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE)
- D.visible_message("[A] headbutts [D]!", \
- "[A] headbutts you!")
+ D.visible_message(span_danger("[A] headbutts [D]!"), \
+ span_userdanger("[A] headbutts you!"))
log_combat(A, D, "headbutted (Flying Fang)")
/datum/martial_art/flyingfang/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -145,8 +145,8 @@
playsound(D, 'sound/weapons/slash.ogg', 50, TRUE, -1)
D.apply_damage(12, A.dna.species.attack_type, selected_zone, armor_block) //need wounds for sharpness to actually matter here
var/atk_verb = pick("rends", "claws", "slices", "tears at")
- D.visible_message("[A] [atk_verb] [D]!", \
- "[A] [atk_verb] you!")
+ D.visible_message(span_danger("[A] [atk_verb] [D]!"), \
+ span_userdanger("[A] [atk_verb] you!"))
return TRUE
/datum/action/innate/lizard_leap
@@ -176,14 +176,14 @@
/datum/action/innate/lizard_leap/Activate(silent)
if(!silent)
- owner.visible_message("[owner] prepares to pounce!", "You will now pounce as your next attack.")
+ owner.visible_message(span_danger("[owner] prepares to pounce!"), "You will now pounce as your next attack.")
owner.click_intercept = src
active = TRUE
background_icon_state = "bg_default_on"
/datum/action/innate/lizard_leap/Deactivate(silent)
if(!silent)
- owner.visible_message("[owner] assumes a neutral stance.", "You will no longer pounce on attack.")
+ owner.visible_message(span_danger("[owner] assumes a neutral stance."), "You will no longer pounce on attack.")
owner.click_intercept = null
active = FALSE
background_icon_state = "bg_default"
@@ -237,14 +237,14 @@
set category = "Flying Fang"
to_chat(usr, "You try to remember some of the basics of Flying Fang.")
- to_chat(usr, "Your training has rendered you more resistant to pain, allowing you to keep fighting effectively for longer and reducing the effectiveness of stun and stamina weapons by about a third.")
- to_chat(usr, "However, the primitive instincts gained through this training prevent you from using guns, stun weapons, or armor.")
- to_chat(usr, "All of your unarmed attacks deal increased brute damage with a small amount of armor piercing")
+ to_chat(usr, span_notice("Your training has rendered you more resistant to pain, allowing you to keep fighting effectively for longer and reducing the effectiveness of stun and stamina weapons by about a third."))
+ to_chat(usr, span_warning("However, the primitive instincts gained through this training prevent you from using guns, stun weapons, or armor."))
+ to_chat(usr, span_notice("All of your unarmed attacks deal increased brute damage with a small amount of armor piercing"))
- to_chat(usr, "Disarm Intent: Headbutt your enemy, Deals minor stamina and brute damage, as well as causing eye blurriness. Prevents the target from using ranged weapons effectively for a few seconds if they are not wearing a helmet.")
+ to_chat(usr, "[span_notice("Disarm Intent")]: Headbutt your enemy, Deals minor stamina and brute damage, as well as causing eye blurriness. Prevents the target from using ranged weapons effectively for a few seconds if they are not wearing a helmet.")
- to_chat(usr, "Tail Slap: Disarm Disarm Disarm. High armor piercing attack that causes a short slow followed by a knockdown. Deals heavy stamina damage.")
- to_chat(usr, "Neck Bite: Grab Harm. Target must be prone. Stuns you and your target for a short period, dealing heavy brute damage and bleeding. If the target is not in crit, this attack will heal you.")
+ to_chat(usr, "[span_notice("Tail Slap")]: Disarm Disarm Disarm. High armor piercing attack that causes a short slow followed by a knockdown. Deals heavy stamina damage.")
+ to_chat(usr, "[span_notice("Neck Bite")]: Grab Harm. Target must be prone. Stuns you and your target for a short period, dealing heavy brute damage and bleeding. If the target is not in crit, this attack will heal you.")
to_chat(usr, "Leap: Action: Jump at a target, with a successful hit stunning them and preventing you from moving for a few seconds.")
/datum/martial_art/flyingfang/teach(mob/living/carbon/human/H,make_temporary=0)
diff --git a/code/datums/martial/knifeboxing.dm b/code/datums/martial/knifeboxing.dm
index 10a4e6627783..97af6b0dc775 100644
--- a/code/datums/martial/knifeboxing.dm
+++ b/code/datums/martial/knifeboxing.dm
@@ -2,11 +2,11 @@
name = "Knife-boxing"
/datum/martial_art/knifeboxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- to_chat(A, "Can't disarm while knife-boxing!")
+ to_chat(A, span_warning("Can't disarm while knife-boxing!"))
return TRUE
/datum/martial_art/knifeboxing/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- to_chat(A, "Can't grab while knife-boxing!")
+ to_chat(A, span_warning("Can't grab while knife-boxing!"))
return TRUE
/datum/martial_art/knifeboxing/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -18,8 +18,8 @@
var/damage = rand(8, 12) + A.dna.species.punchdamagelow
if(!damage)
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
- D.visible_message("[A] has attempted to [atk_verb] [D]!", \
- "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE)
+ D.visible_message(span_warning("[A] has attempted to [atk_verb] [D]!"), \
+ span_userdanger("[A] has attempted to [atk_verb] [D]!"), null, COMBAT_MESSAGE_RANGE)
log_combat(A, D, "attempted to punch (knifeboxing)")
return FALSE
@@ -28,8 +28,8 @@
playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1)
- D.visible_message("[A] has [atk_verb]ed [D]!", \
- "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE)
+ D.visible_message(span_danger("[A] has [atk_verb]ed [D]!"), \
+ span_userdanger("[A] has [atk_verb]ed [D]!"), null, COMBAT_MESSAGE_RANGE)
D.apply_damage(damage, BRUTE, affecting, armor_block)
log_combat(A, D, "punched (knifeboxing")
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 0f3d4e661c8a..425c0c5983ac 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -12,14 +12,14 @@
/datum/action/neck_chop/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't use [name] while you're incapacitated.")
+ to_chat(owner, span_warning("You can't use [name] while you're incapacitated."))
return
var/mob/living/carbon/human/H = owner
if (H.mind.martial_art.streak == "neck_chop")
- owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.")
+ owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.")
H.mind.martial_art.streak = ""
else
- owner.visible_message("[owner] assumes the Neck Chop stance!", "Your next attack will be a Neck Chop.")
+ owner.visible_message(span_danger("[owner] assumes the Neck Chop stance!"), "Your next attack will be a Neck Chop.")
H.mind.martial_art.streak = "neck_chop"
/datum/action/leg_sweep
@@ -29,14 +29,14 @@
/datum/action/leg_sweep/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't use [name] while you're incapacitated.")
+ to_chat(owner, span_warning("You can't use [name] while you're incapacitated."))
return
var/mob/living/carbon/human/H = owner
if (H.mind.martial_art.streak == "leg_sweep")
- owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.")
+ owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.")
H.mind.martial_art.streak = ""
else
- owner.visible_message("[owner] assumes the Leg Sweep stance!", "Your next attack will be a Leg Sweep.")
+ owner.visible_message(span_danger("[owner] assumes the Leg Sweep stance!"), "Your next attack will be a Leg Sweep.")
H.mind.martial_art.streak = "leg_sweep"
/datum/action/lung_punch//referred to internally as 'quick choke'
@@ -46,14 +46,14 @@
/datum/action/lung_punch/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't use [name] while you're incapacitated.")
+ to_chat(owner, span_warning("You can't use [name] while you're incapacitated."))
return
var/mob/living/carbon/human/H = owner
if (H.mind.martial_art.streak == "quick_choke")
- owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.")
+ owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.")
H.mind.martial_art.streak = ""
else
- owner.visible_message("[owner] assumes the Lung Punch stance!", "Your next attack will be a Lung Punch.")
+ owner.visible_message(span_danger("[owner] assumes the Lung Punch stance!"), "Your next attack will be a Lung Punch.")
H.mind.martial_art.streak = "quick_choke"//internal name for lung punch
/datum/martial_art/krav_maga/teach(mob/living/carbon/human/H,make_temporary=0)
@@ -89,8 +89,8 @@
/datum/martial_art/krav_maga/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(D.stat || D.IsParalyzed())
return 0
- D.visible_message("[A] leg sweeps [D]!", \
- "[A] leg sweeps you!")
+ D.visible_message(span_warning("[A] leg sweeps [D]!"), \
+ span_userdanger("[A] leg sweeps you!"))
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE)
D.Paralyze(40)
@@ -98,8 +98,8 @@
return 1
/datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
- D.visible_message("[A] pounds [D] on the chest!", \
- "[A] slams your chest! You can't breathe!")
+ D.visible_message(span_warning("[A] pounds [D] on the chest!"), \
+ span_userdanger("[A] slams your chest! You can't breathe!"))
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
if(D.losebreath <= 10)
D.losebreath = clamp(D.losebreath + 5, 0, 10)
@@ -108,8 +108,8 @@
return 1
/datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- D.visible_message("[A] karate chops [D]'s neck!", \
- "[A] karate chops your neck, rendering you unable to speak!")
+ D.visible_message(span_warning("[A] karate chops [D]'s neck!"), \
+ span_userdanger("[A] karate chops your neck, rendering you unable to speak!"))
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
D.apply_damage(5, A.dna.species.attack_type)
if(D.silent <= 10)
@@ -133,8 +133,8 @@
else
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, 1, -1)
- D.visible_message("[A] [picked_hit_type] [D]!", \
- "[A] [picked_hit_type] you!")
+ D.visible_message(span_danger("[A] [picked_hit_type] [D]!"), \
+ span_userdanger("[A] [picked_hit_type] you!"))
log_combat(A, D, "[picked_hit_type] with [name]")
return 1
@@ -147,12 +147,12 @@
if(I)
if(D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I)
- D.visible_message("[A] has disarmed [D]!", \
- "[A] has disarmed [D]!")
+ D.visible_message(span_danger("[A] has disarmed [D]!"), \
+ span_userdanger("[A] has disarmed [D]!"))
playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
else
- D.visible_message("[A] attempted to disarm [D]!", \
- "[A] attempted to disarm [D]!")
+ D.visible_message(span_danger("[A] attempted to disarm [D]!"), \
+ span_userdanger("[A] attempted to disarm [D]!"))
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
log_combat(A, D, "disarmed (Krav Maga)", "[I ? " removing \the [I]" : ""]")
return 1
diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm
index aec4ccb968fd..65d6038992ef 100644
--- a/code/datums/martial/mushpunch.dm
+++ b/code/datums/martial/mushpunch.dm
@@ -4,14 +4,14 @@
/datum/martial_art/mushpunch/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
var/atk_verb
- to_chat(A, "You begin to wind up an attack...")
+ to_chat(A, span_spider("You begin to wind up an attack..."))
if(!do_after(A, 25, target = D))
- to_chat(A, "Your attack was interrupted!")
+ to_chat(A, span_spider("Your attack was interrupted!"))
return TRUE //martial art code was a mistake
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
atk_verb = pick("punches", "smashes", "ruptures", "cracks")
- D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \
- "[A] [atk_verb] you with inhuman strength, sending you flying backwards!")
+ D.visible_message(span_danger("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!"), \
+ span_userdanger("[A] [atk_verb] you with inhuman strength, sending you flying backwards!"))
D.apply_damage(rand(15,30), A.dna.species.attack_type)
playsound(D, 'sound/effects/meteorimpact.ogg', 25, 1, -1)
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
@@ -30,9 +30,9 @@
/obj/item/mushpunch/attack_self(mob/living/carbon/human/user)
if(!istype(user) || !user)
return
- var/message = "You devour [src], and a confluence of skill and power from the mushroom enhances your punches! You do need a short moment to charge these powerful punches."
+ var/message = span_spider("You devour [src], and a confluence of skill and power from the mushroom enhances your punches! You do need a short moment to charge these powerful punches.")
to_chat(user, message)
var/datum/martial_art/mushpunch/mush = new(null)
mush.teach(user)
qdel(src)
- visible_message("[user] devours [src].")
+ visible_message(span_warning("[user] devours [src]."))
diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm
index e38a011db031..6082aa553c52 100644
--- a/code/datums/martial/plasma_fist.dm
+++ b/code/datums/martial/plasma_fist.dm
@@ -44,8 +44,8 @@
return
/datum/martial_art/plasma_fist/proc/Throwback(mob/living/carbon/human/A, mob/living/carbon/human/D)
- D.visible_message("[A] has hit [D] with Plasma Punch!", \
- "[A] has hit [D] with Plasma Punch!")
+ D.visible_message(span_danger("[A] has hit [D] with Plasma Punch!"), \
+ span_userdanger("[A] has hit [D] with Plasma Punch!"))
playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A)))
D.throw_at(throw_target, 200, 4,A)
@@ -57,8 +57,8 @@
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
A.say("PLASMA FIST!", forced="plasma fist")
- D.visible_message("[A] has hit [D] with THE PLASMA FIST TECHNIQUE!", \
- "[A] has hit [D] with THE PLASMA FIST TECHNIQUE!")
+ D.visible_message(span_danger("[A] has hit [D] with THE PLASMA FIST TECHNIQUE!"), \
+ span_userdanger("[A] has hit [D] with THE PLASMA FIST TECHNIQUE!"))
D.gib()
log_combat(A, D, "gibbed (Plasma Fist)")
return
@@ -90,6 +90,6 @@
set category = "Plasma Fist"
to_chat(usr, "You clench your fists and have a flashback of knowledge...")
- to_chat(usr, "Tornado Sweep: Harm Harm Disarm. Repulses target and everyone back.")
- to_chat(usr, "Throwback: Disarm Harm Disarm. Throws the target and an item at them.")
- to_chat(usr, "The Plasma Fist: Harm Disarm Disarm Disarm Harm. Knocks the brain out of the opponent and gibs their body.")
+ to_chat(usr, "[span_notice("Tornado Sweep")]: Harm Harm Disarm. Repulses target and everyone back.")
+ to_chat(usr, "[span_notice("Throwback")]: Disarm Harm Disarm. Throws the target and an item at them.")
+ to_chat(usr, "[span_notice("The Plasma Fist")]: Harm Disarm Disarm Disarm Harm. Knocks the brain out of the opponent and gibs their body.")
diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm
index 41f79dc6dbfd..9f944832fdc5 100644
--- a/code/datums/martial/psychotic_brawl.dm
+++ b/code/datums/martial/psychotic_brawl.dm
@@ -31,8 +31,8 @@
D.stop_pulling()
if(A.a_intent == INTENT_GRAB)
log_combat(A, D, "grabbed", addition="aggressively")
- D.visible_message("[A] violently grabs [D]!", \
- "[A] violently grabs you!")
+ D.visible_message(span_warning("[A] violently grabs [D]!"), \
+ span_userdanger("[A] violently grabs you!"))
A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab
else
log_combat(A, D, "grabbed", addition="passively")
@@ -40,8 +40,8 @@
if(4)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
atk_verb = "headbutts"
- D.visible_message("[A] [atk_verb] [D]!", \
- "[A] [atk_verb] you!")
+ D.visible_message(span_danger("[A] [atk_verb] [D]!"), \
+ span_userdanger("[A] [atk_verb] you!"))
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1)
D.apply_damage(rand(5,10), A.dna.species.attack_type, BODY_ZONE_HEAD)
A.apply_damage(rand(5,10), A.dna.species.attack_type, BODY_ZONE_HEAD)
@@ -52,8 +52,8 @@
if(5,6)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
atk_verb = pick("punches", "kicks", "hits", "slams into")
- D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \
- "[A] [atk_verb] you with inhuman strength, sending you flying backwards!")
+ D.visible_message(span_danger("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!"), \
+ span_userdanger("[A] [atk_verb] you with inhuman strength, sending you flying backwards!"))
D.apply_damage(rand(15,30), A.dna.species.attack_type)
playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1)
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index 69a0352a1688..dbd0ccb84c4d 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -41,12 +41,12 @@
if(!D.stat && !D.IsStun() && !D.IsParalyzed())
log_combat(A, D, "wrist wrenched (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
- D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \
- "[A] grabs your wrist and violently wrenches it to the side!")
+ D.visible_message(span_warning("[A] grabs [D]'s wrist and wrenches it sideways!"), \
+ span_userdanger("[A] grabs your wrist and violently wrenches it to the side!"))
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.emote("scream")
D.dropItemToGround(D.get_active_held_item())
- D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
+ D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM), wound_bonus = CANT_WOUND)
D.Stun(60)
return TRUE
@@ -57,24 +57,24 @@
if(A.dir == D.dir)
log_combat(A, D, "back-kicked (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
- D.visible_message("[A] kicks [D] in the back!", \
- "[A] kicks you in the back, making you stumble and fall!")
+ D.visible_message(span_warning("[A] kicks [D] in the back!"), \
+ span_userdanger("[A] kicks you in the back, making you stumble and fall!"))
step_to(D,get_step(D,D.dir),1)
D.Paralyze(80)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return TRUE
else
log_combat(A, D, "missed a back-kick (Sleeping Carp) on")
- D.visible_message("[A] tries to kick [D] in the back, but misses!", \
- "[A] tries to kick you in the back, but misses!")
+ D.visible_message(span_warning("[A] tries to kick [D] in the back, but misses!"), \
+ span_userdanger("[A] tries to kick you in the back, but misses!"))
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsParalyzed())
log_combat(A, D, "stomach kneed (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
- D.visible_message("[A] knees [D] in the stomach!", \
- "[A] winds you with a knee in the stomach!")
+ D.visible_message(span_warning("[A] knees [D] in the stomach!"), \
+ span_userdanger("[A] winds you with a knee in the stomach!"))
D.audible_message("[D] gags!")
D.losebreath += 3
D.Stun(40)
@@ -86,9 +86,9 @@
if(!D.stat && !D.IsParalyzed())
log_combat(A, D, "head kicked (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
- D.visible_message("[A] kicks [D] in the head!", \
- "[A] kicks you in the jaw!")
- D.apply_damage(20, A.dna.species.attack_type, BODY_ZONE_HEAD)
+ D.visible_message(span_warning("[A] kicks [D] in the head!"), \
+ span_userdanger("[A] kicks you in the jaw!"))
+ D.apply_damage(20, A.dna.species.attack_type, BODY_ZONE_HEAD, wound_bonus = CANT_WOUND)
D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Stun(80)
@@ -99,11 +99,11 @@
if(!(D.mobility_flags & MOBILITY_STAND))
log_combat(A, D, "elbow dropped (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
- D.visible_message("[A] elbow drops [D]!", \
- "[A] piledrives you with their elbow!")
+ D.visible_message(span_warning("[A] elbow drops [D]!"), \
+ span_userdanger("[A] piledrives you with their elbow!"))
if(D.stat)
D.death() //FINISH HIM!
- D.apply_damage(50, A.dna.species.attack_type, BODY_ZONE_CHEST)
+ D.apply_damage(50, A.dna.species.attack_type, BODY_ZONE_CHEST, wound_bonus = CANT_WOUND)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
return TRUE
return basic_hit(A,D)
@@ -119,8 +119,8 @@
D.drop_all_held_items()
A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
log_combat(A, D, "grabbed", addition="aggressively")
- D.visible_message("[A] violently grabs [D]!", \
- "[A] violently grabs you!")
+ D.visible_message(span_warning("[A] violently grabs [D]!"), \
+ span_userdanger("[A] violently grabs you!"))
return TRUE
else
return FALSE
@@ -131,12 +131,12 @@
return TRUE
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams")
- D.visible_message("[A] [atk_verb] [D]!", \
- "[A] [atk_verb] you!")
- D.apply_damage(rand(10,15), BRUTE)
+ D.visible_message(span_danger("[A] [atk_verb] [D]!"), \
+ span_userdanger("[A] [atk_verb] you!"))
+ D.apply_damage(rand(10,15), BRUTE, wound_bonus = CANT_WOUND)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, 1, -1)
if(prob(D.getBruteLoss()) && (D.mobility_flags & MOBILITY_STAND))
- D.visible_message("[D] stumbles and falls!", "The blow sends you to the ground!")
+ D.visible_message(span_warning("[D] stumbles and falls!"), span_userdanger("The blow sends you to the ground!"))
D.Paralyze(80)
log_combat(A, D, "[atk_verb] (Sleeping Carp)")
return TRUE
@@ -155,11 +155,11 @@
to_chat(usr, "You retreat inward and recall the teachings of the Sleeping Carp...")
- to_chat(usr, "Wrist Wrench: Disarm Disarm. Forces opponent to drop item in hand.")
- to_chat(usr, "Back Kick: Harm Grab. Opponent must be facing away. Knocks down.")
- to_chat(usr, "Stomach Knee: Grab Harm. Knocks the wind out of opponent and stuns.")
- to_chat(usr, "Head Kick: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand.")
- to_chat(usr, "Elbow Drop: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition.")
+ to_chat(usr, "[span_notice("Wrist Wrench")]: Disarm Disarm. Forces opponent to drop item in hand.")
+ to_chat(usr, "[span_notice("Back Kick")]: Harm Grab. Opponent must be facing away. Knocks down.")
+ to_chat(usr, "[span_notice("Stomach Knee")]: Grab Harm. Knocks the wind out of opponent and stuns.")
+ to_chat(usr, "[span_notice("Head Kick")]: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand.")
+ to_chat(usr, "[span_notice("Elbow Drop")]: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition.")
to_chat(usr, "You will only deflect projectiles while throwmode is enabled.")
@@ -200,7 +200,7 @@
return ..()
var/mob/living/carbon/C = target
if(C.stat)
- to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.")
+ to_chat(user, span_warning("It would be dishonorable to attack a foe while they cannot retaliate."))
return
if(user.a_intent == INTENT_DISARM)
if(!wielded)
@@ -214,8 +214,8 @@
"[user] smashes [H]'s head with [src]!", \
"[user] beats [H] with the front of [src]!", \
"[user] twirls and slams [H] with [src]!")
- H.visible_message("[pick(fluffmessages)]", \
- "[pick(fluffmessages)]")
+ H.visible_message(span_warning("[pick(fluffmessages)]"), \
+ span_userdanger("[pick(fluffmessages)]"))
playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1)
playsound(get_turf(user), 'sound/effects/hit_kick.ogg', 75, 1, -1)
SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, H, user)
@@ -231,8 +231,8 @@
if(H.staminaloss && !H.IsSleeping())
var/total_health = (H.health - H.staminaloss)
if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat)
- H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold!", \
- "[user] knocks you unconscious!")
+ H.visible_message(span_warning("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold!"), \
+ span_userdanger("[user] knocks you unconscious!"))
H.SetSleeping(300)
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150)
else
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index bffc0cae13de..322c171501e6 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -4,9 +4,9 @@
set category = "Wrestling"
to_chat(usr, "You flex your muscles and have a revelation...")
- to_chat(usr, "Clinch: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.")
- to_chat(usr, "Suplex: Disarm someone you are grabbing. Suplexes your target to the floor. Greatly injures them and leaves both you and your target on the floor.")
- to_chat(usr, "Advanced grab: Grab. Passively causes stamina damage when grabbing someone.")
+ to_chat(usr, "[span_notice("Clinch")]: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.")
+ to_chat(usr, "[span_notice("Suplex")]: Disarm someone you are grabbing. Suplexes your target to the floor. Greatly injures them and leaves both you and your target on the floor.")
+ to_chat(usr, "[span_notice("Advanced grab")]: Grab. Passively causes stamina damage when grabbing someone.")
/datum/martial_art/wrestling
name = "Wrestling"
@@ -47,9 +47,9 @@
/datum/action/slam/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
+ to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT."))
return
- owner.visible_message("[owner] prepares to BODY SLAM!", "Your next attack will be a BODY SLAM.")
+ owner.visible_message(span_danger("[owner] prepares to BODY SLAM!"), "Your next attack will be a BODY SLAM.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "slam"
@@ -59,9 +59,9 @@
/datum/action/throw_wrassle/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
+ to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT."))
return
- owner.visible_message("[owner] prepares to THROW!", "Your next attack will be a THROW.")
+ owner.visible_message(span_danger("[owner] prepares to THROW!"), "Your next attack will be a THROW.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "throw"
@@ -71,9 +71,9 @@
/datum/action/kick/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
+ to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT."))
return
- owner.visible_message("[owner] prepares to KICK!", "Your next attack will be a KICK.")
+ owner.visible_message(span_danger("[owner] prepares to KICK!"), "Your next attack will be a KICK.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "kick"
@@ -83,9 +83,9 @@
/datum/action/strike/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
+ to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT."))
return
- owner.visible_message("[owner] prepares to STRIKE!", "Your next attack will be a STRIKE.")
+ owner.visible_message(span_danger("[owner] prepares to STRIKE!"), "Your next attack will be a STRIKE.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "strike"
@@ -95,9 +95,9 @@
/datum/action/drop/Trigger()
if(owner.incapacitated())
- to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
+ to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT."))
return
- owner.visible_message("[owner] prepares to LEG DROP!", "Your next attack will be a LEG DROP.")
+ owner.visible_message(span_danger("[owner] prepares to LEG DROP!"), "Your next attack will be a LEG DROP.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "drop"
@@ -436,8 +436,8 @@
if(A.pulling == D)
return 1
A.start_pulling(D)
- D.visible_message("[A] gets [D] in a cinch!", \
- "[A] gets [D] in a cinch!")
+ D.visible_message(span_danger("[A] gets [D] in a cinch!"), \
+ span_userdanger("[A] gets [D] in a cinch!"))
D.Stun(rand(60,100))
log_combat(A, D, "cinched")
return 1
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 15543bbcb108..7248ba0ddf73 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -73,6 +73,14 @@
var/flavour_text = null
///Are we zombified/uncloneable?
var/zombified = FALSE
+ ///What character we joined in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not
+ var/mob/original_character
+ /// What scar slot we have loaded, so we don't have to constantly check the savefile
+ var/current_scar_slot
+ /// The index for what character slot, if any, we were loaded from, so we can track persistent scars on a per-character basis. Each character slot gets PERSISTENT_SCAR_SLOTS scar slots
+ var/original_character_slot_index
+ /// The index for our current scar slot, so we don't have to constantly check the savefile (unlike the slots themselves, this index is independent of selected char slot, and increments whenever a valid char is joined with)
+ var/current_scar_slot_index
/datum/mind/New(key)
src.key = key
@@ -94,6 +102,7 @@
return language_holder
/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0)
+ original_character = null
var/mood_was_enabled = FALSE//Yogs -- Mood Preferences
if(current) // remove ourself from our old body's mind variable
// Yogs start -- Mood preferences
@@ -148,6 +157,7 @@
new_character.key = key //now transfer the key to link the client to our new body
if(new_character.client)
new_character.client.init_verbs() // re-initialize character specific verbs
+ LAZYCLEARLIST(new_character.client.recent_examines)
current.update_atom_languages()
/datum/mind/proc/set_death_time()
@@ -373,7 +383,7 @@
if(creator.mind.special_role)
message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.")
- to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed.")
+ to_chat(current, span_userdanger("Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed."))
/datum/mind/proc/show_memory(mob/recipient, window=1)
if(!recipient)
@@ -417,7 +427,7 @@
if(href_list["remove_antag"])
var/datum/antagonist/A = locate(href_list["remove_antag"]) in antag_datums
if(!istype(A))
- to_chat(usr,"Invalid antagonist ref to be removed.")
+ to_chat(usr,span_warning("Invalid antagonist ref to be removed."))
return
A.admin_remove(usr)
@@ -569,7 +579,7 @@
log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].")
if("uplink")
if(!equip_traitor())
- to_chat(usr, "Equipping a syndicate failed!")
+ to_chat(usr, span_danger("Equipping a syndicate failed!"))
log_admin("[key_name(usr)] tried and failed to give [current] an uplink.")
else
log_admin("[key_name(usr)] gave [current] an uplink.")
@@ -598,7 +608,7 @@
/datum/mind/proc/announce_objectives()
var/obj_count = 1
- to_chat(current, "Your current objectives:")
+ to_chat(current, span_notice("Your current objectives:"))
for(var/objective in get_all_objectives())
var/datum/objective/O = objective
to_chat(current, "Objective #[obj_count]: [O.explanation_text]")
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index 1072c8c6491a..670be33752ee 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -138,7 +138,7 @@
timeout = 3 MINUTES
/datum/mood_event/religiously_comforted
- description = "You are comforted by the presence of a holy person."
+ description = span_nicegreen("You are comforted by the presence of a holy person.")
mood_change = 3
timeout = 5 MINUTES
diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm
index 47b8e920ac0f..36c019e6e618 100644
--- a/code/datums/mutations/actions.dm
+++ b/code/datums/mutations/actions.dm
@@ -2,8 +2,8 @@
name = "Telepathy"
desc = "A rare mutation that allows the user to telepathically communicate to others."
quality = POSITIVE
- text_gain_indication = "You can hear your own voice echoing in your mind!"
- text_lose_indication = "You don't hear your mind echo anymore."
+ text_gain_indication = span_notice("You can hear your own voice echoing in your mind!")
+ text_lose_indication = span_notice("You don't hear your mind echo anymore.")
difficulty = 12
power = /obj/effect/proc_holder/spell/targeted/telepathy
instability = 10
@@ -15,8 +15,8 @@
desc = "Your sense of smell is comparable to that of a canine."
quality = POSITIVE
difficulty = 12
- text_gain_indication = "Smells begin to make more sense..."
- text_lose_indication = "Your sense of smell goes back to normal."
+ text_gain_indication = span_notice("Smells begin to make more sense...")
+ text_lose_indication = span_notice("Your sense of smell goes back to normal.")
power = /obj/effect/proc_holder/spell/targeted/olfaction
instability = 30
synchronizer_coeff = 1
@@ -45,7 +45,7 @@
var/datum/gas_mixture/air = user.loc.return_air()
if(air.get_moles(/datum/gas/miasma) >= 0.1)
user.adjust_disgust(sensitivity * 45)
- to_chat(user, "With your overly sensitive nose, you get a whiff of stench and feel sick! Try moving to a cleaner area!")
+ to_chat(user, span_warning("With your overly sensitive nose, you get a whiff of stench and feel sick! Try moving to a cleaner area!"))
return
var/atom/sniffed = user.get_active_held_item()
@@ -57,43 +57,43 @@
if(prints[md5(C.dna.uni_identity)])
possible |= C
if(!length(possible))
- to_chat(user,"Despite your best efforts, there are no scents to be found on [sniffed]...")
+ to_chat(user,span_warning("Despite your best efforts, there are no scents to be found on [sniffed]..."))
return
tracking_target = input(user, "Choose a scent to remember.", "Scent Tracking") as null|anything in possible
if(!tracking_target)
if(!old_target)
- to_chat(user,"You decide against remembering any scents. Instead, you notice your own nose in your peripheral vision. This goes on to remind you of that one time you started breathing manually and couldn't stop. What an awful day that was.")
+ to_chat(user,span_warning("You decide against remembering any scents. Instead, you notice your own nose in your peripheral vision. This goes on to remind you of that one time you started breathing manually and couldn't stop. What an awful day that was."))
return
tracking_target = old_target
on_the_trail(user)
return
- to_chat(user,"You pick up the scent of [tracking_target]. The hunt begins.")
+ to_chat(user,span_notice("You pick up the scent of [tracking_target]. The hunt begins."))
on_the_trail(user)
return
if(!tracking_target)
- to_chat(user,"You're not holding anything to smell, and you haven't smelled anything you can track. You smell your skin instead; it's kinda salty.")
+ to_chat(user,span_warning("You're not holding anything to smell, and you haven't smelled anything you can track. You smell your skin instead; it's kinda salty."))
return
on_the_trail(user)
/obj/effect/proc_holder/spell/targeted/olfaction/proc/on_the_trail(mob/living/user)
if(!tracking_target)
- to_chat(user,"You're not tracking a scent, but the game thought you were. Something's gone wrong! Report this as a bug.")
+ to_chat(user,span_warning("You're not tracking a scent, but the game thought you were. Something's gone wrong! Report this as a bug."))
return
if(tracking_target == user)
- to_chat(user,"You smell out the trail to yourself. Yep, it's you.")
+ to_chat(user,span_warning("You smell out the trail to yourself. Yep, it's you."))
return
var/turf/pos = get_turf(tracking_target)
if(usr.z < pos.z)
- to_chat(user,"The trail leads... way up above you? Huh. They must be really, really far away.")
+ to_chat(user,span_warning("The trail leads... way up above you? Huh. They must be really, really far away."))
return
else if(usr.z > pos.z)
- to_chat(user,"The trail leads... way down below you? Huh. They must be really, really far away.")
+ to_chat(user,span_warning("The trail leads... way down below you? Huh. They must be really, really far away."))
return
var/direction_text = "[dir2text(get_dir(usr, pos))]"
if(direction_text)
- to_chat(user,"You consider [tracking_target]'s scent. The trail leads [direction_text].")
+ to_chat(user,span_notice("You consider [tracking_target]'s scent. The trail leads [direction_text]."))
/datum/mutation/human/firebreath
name = "Fire Breath"
@@ -101,8 +101,8 @@
quality = POSITIVE
difficulty = 12
locked = TRUE
- text_gain_indication = "Your throat is burning!"
- text_lose_indication = "Your throat is cooling down."
+ text_gain_indication = span_notice("Your throat is burning!")
+ text_lose_indication = span_notice("Your throat is cooling down.")
power = /obj/effect/proc_holder/spell/aimed/firebreath
instability = 30
energy_coeff = 1
@@ -137,7 +137,7 @@
if(C.is_mouth_covered())
C.adjust_fire_stacks(2)
C.IgniteMob()
- to_chat(C,"Something in front of your mouth caught fire!")
+ to_chat(C,span_warning("Something in front of your mouth caught fire!"))
return FALSE
/obj/effect/proc_holder/spell/aimed/firebreath/ready_projectile(obj/item/projectile/P, atom/target, mob/user, iteration)
@@ -162,7 +162,7 @@ obj/effect/proc_holder/spell/aimed/firebreath/fire_projectile(mob/user)
name = "Void Magnet"
desc = "A rare genome that attracts odd forces not usually observed."
quality = MINOR_NEGATIVE //upsides and downsides
- text_gain_indication = "You feel a heavy, dull force just beyond the walls watching you."
+ text_gain_indication = span_notice("You feel a heavy, dull force just beyond the walls watching you.")
instability = 30
power = /obj/effect/proc_holder/spell/self/void
energy_coeff = 1
diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm
index 7bd01edf323c..ce909d157ec6 100644
--- a/code/datums/mutations/antenna.dm
+++ b/code/datums/mutations/antenna.dm
@@ -2,8 +2,8 @@
name = "Antenna"
desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively."
quality = POSITIVE
- text_gain_indication = "You feel an antenna sprout from your forehead."
- text_lose_indication = "Your antenna shrinks back down."
+ text_gain_indication = span_notice("You feel an antenna sprout from your forehead.")
+ text_lose_indication = span_notice("Your antenna shrinks back down.")
instability = 10
difficulty = 8
var/obj/item/implant/radio/antenna/radio
@@ -32,8 +32,8 @@
name = "Mind Reader"
desc = "The affected person can look into the recent memories of others."
quality = POSITIVE
- text_gain_indication = "You hear distant voices at the corners of your mind."
- text_lose_indication = "The distant voices fade."
+ text_gain_indication = span_notice("You hear distant voices at the corners of your mind.")
+ text_lose_indication = span_notice("The distant voices fade.")
power = /obj/effect/proc_holder/spell/targeted/mindread
instability = 40
difficulty = 8
@@ -51,15 +51,15 @@
/obj/effect/proc_holder/spell/targeted/mindread/cast(list/targets, mob/living/carbon/human/user = usr)
for(var/mob/living/M in targets)
if(usr.anti_magic_check(FALSE, FALSE, TRUE, 0) || M.anti_magic_check(FALSE, FALSE, TRUE, 0))
- to_chat(usr, "As you reach out with your mind, you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled.")
+ to_chat(usr, span_warning("As you reach out with your mind, you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled."))
return
if(M.stat == DEAD)
- to_chat(user, "[M] is dead!")
+ to_chat(user, span_boldnotice("[M] is dead!"))
return
if(M.mind)
- to_chat(user, "You plunge into [M]'s mind...")
+ to_chat(user, span_boldnotice("You plunge into [M]'s mind..."))
if(prob(20))
- to_chat(M, "You feel something foreign enter your mind.")//chance to alert the read-ee
+ to_chat(M, span_danger("You feel something foreign enter your mind."))//chance to alert the read-ee
var/list/recent_speech = list()
var/list/say_log = list()
var/log_source = M.logging
@@ -77,17 +77,17 @@
if(prob(50))
recent_speech[spoken_memory] = say_log[spoken_memory]
if(recent_speech.len)
- to_chat(user, "You catch some drifting memories of their past conversations...")
+ to_chat(user, span_boldnotice("You catch some drifting memories of their past conversations..."))
for(var/spoken_memory in recent_speech)
- to_chat(user, "[recent_speech[spoken_memory]]")
+ to_chat(user, span_notice("[recent_speech[spoken_memory]]"))
if(iscarbon(M))
var/mob/living/carbon/human/H = M
- to_chat(user, "You find that their intent is to [H.a_intent]...")
+ to_chat(user, span_boldnotice("You find that their intent is to [H.a_intent]..."))
var/datum/dna/the_dna = H.has_dna()
if(the_dna)
- to_chat(user, "You uncover that [H.p_their()] true identity is [the_dna.real_name].")
+ to_chat(user, span_boldnotice("You uncover that [H.p_their()] true identity is [the_dna.real_name]."))
else
- to_chat(user, "You can't find a mind to read inside of [M].")
+ to_chat(user, span_boldnotice("You can't find a mind to read inside of [M]."))
/datum/mutation/human/mindreader/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
..()
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index 1b8b8679e4ee..c5fc04f0fcad 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -5,13 +5,13 @@
name = "Epilepsy"
desc = "A genetic defect that sporadically causes seizures."
quality = NEGATIVE
- text_gain_indication = "You get a headache."
+ text_gain_indication = span_danger("You get a headache.")
synchronizer_coeff = 1
power_coeff = 1
/datum/mutation/human/epilepsy/on_life()
if(prob(1 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS)
- owner.visible_message("[owner] starts having a seizure!", "You have a seizure!")
+ owner.visible_message(span_danger("[owner] starts having a seizure!"), span_userdanger("You have a seizure!"))
owner.Unconscious(200 * GET_MUTATION_POWER(src))
owner.Jitter(1000 * GET_MUTATION_POWER(src))
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy)
@@ -27,7 +27,7 @@
name = "Unstable DNA"
desc = "Strange mutation that causes the holder to randomly mutate."
quality = NEGATIVE
- text_gain_indication = "You feel strange."
+ text_gain_indication = span_danger("You feel strange.")
locked = TRUE
/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
@@ -53,7 +53,7 @@
name = "Cough"
desc = "A chronic cough."
quality = MINOR_NEGATIVE
- text_gain_indication = "You start coughing."
+ text_gain_indication = span_danger("You start coughing.")
synchronizer_coeff = 1
power_coeff = 1
@@ -70,7 +70,7 @@
name = "Paranoia"
desc = "Subject is easily terrified, and may suffer from hallucinations."
quality = NEGATIVE
- text_gain_indication = "You feel screams echo through your mind..."
+ text_gain_indication = span_danger("You feel screams echo through your mind...")
text_lose_indication = "The screaming in your mind fades."
/datum/mutation/human/paranoia/on_life()
@@ -94,14 +94,14 @@
return
owner.transform = owner.transform.Scale(1, 0.8)
passtable_on(owner, GENETIC_MUTATION)
- owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..")
+ owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow.."))
/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
if(..())
return
owner.transform = owner.transform.Scale(1, 1.25)
passtable_off(owner, GENETIC_MUTATION)
- owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..")
+ owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
//Clumsiness has a very large amount of small drawbacks depending on item.
@@ -109,7 +109,7 @@
name = "Clumsiness"
desc = "A genome that inhibits certain brain functions, causing the holder to appear clumsy. Honk!"
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel lightheaded."
+ text_gain_indication = span_danger("You feel lightheaded.")
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -127,7 +127,7 @@
name = "Tourette's Syndrome"
desc = "A chronic twitch that forces the user to scream bad words." //definitely needs rewriting
quality = NEGATIVE
- text_gain_indication = "You twitch."
+ text_gain_indication = span_danger("You twitch.")
synchronizer_coeff = 1
/datum/mutation/human/tourettes/on_life()
@@ -151,7 +151,7 @@
name = "Deafness"
desc = "The holder of this genome is completely deaf."
quality = NEGATIVE
- text_gain_indication = "You can't seem to hear anything."
+ text_gain_indication = span_danger("You can't seem to hear anything.")
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -185,7 +185,7 @@
name = "Glowy"
desc = "You permanently emit a light with a random color and intensity."
quality = POSITIVE
- text_gain_indication = "Your skin begins to glow softly."
+ text_gain_indication = span_notice("Your skin begins to glow softly.")
instability = 5
var/obj/effect/dummy/luminescent_glow/glowth //shamelessly copied from luminescents
var/glow = 2.5
@@ -215,7 +215,7 @@
/datum/mutation/human/glow/anti
name = "Anti-Glow"
desc = "Your skin seems to attract and absorb nearby light creating 'darkness' around you."
- text_gain_indication = "Your light around you seems to disappear."
+ text_gain_indication = span_notice("Your light around you seems to disappear.")
glow = -3.5 //Slightly stronger, since negating light tends to be harder than making it.
conflicts = list(/datum/mutation/human/glow)
locked = TRUE
@@ -224,8 +224,8 @@
name = "Thick skin"
desc = "The user's skin acquires a leathery texture, and becomes more resilient to harm."
quality = POSITIVE
- text_gain_indication = "Your skin feels dry and heavy."
- text_lose_indication = "Your skin feels soft again..."
+ text_gain_indication = span_notice("Your skin feels dry and heavy.")
+ text_lose_indication = span_notice("Your skin feels soft again...")
difficulty = 18
instability = 30
var/brutemodbefore
@@ -248,8 +248,8 @@
name = "Strength"
desc = "The user's muscles slightly expand, allowing them to move faster while carrying people."
quality = POSITIVE
- text_gain_indication = "You feel strong!"
- text_lose_indication = "You feel fairly weak."
+ text_gain_indication = span_notice("You feel strong!")
+ text_lose_indication = span_notice("You feel fairly weak.")
difficulty = 12
instability = 10
@@ -257,8 +257,8 @@
name = "Insulated"
desc = "The affected person does not conduct electricity."
quality = POSITIVE
- text_gain_indication = "Your fingertips go numb."
- text_lose_indication = "Your fingertips regain feeling."
+ text_gain_indication = span_notice("Your fingertips go numb.")
+ text_lose_indication = span_notice("Your fingertips regain feeling.")
difficulty = 16
instability = 25
@@ -276,7 +276,7 @@
name = "Fiery Sweat"
desc = "The user's skin will randomly combust, but is generally a lot more resilient to burning."
quality = NEGATIVE
- text_gain_indication = "You feel hot."
+ text_gain_indication = span_warning("You feel hot.")
text_lose_indication = "You feel a lot cooler."
difficulty = 14
synchronizer_coeff = 1
@@ -301,7 +301,7 @@
name = "Spatial Instability"
desc = "The victim of the mutation has a very weak link to spatial reality, and may be displaced. Often causes extreme nausea."
quality = NEGATIVE
- text_gain_indication = "The space around you twists sickeningly."
+ text_gain_indication = span_warning("The space around you twists sickeningly.")
text_lose_indication = "The space around you settles back to normal."
difficulty = 18//high so it's hard to unlock and abuse
instability = 10
@@ -313,17 +313,17 @@
/datum/mutation/human/badblink/on_life()
if(prob(warpchance) && isturf(owner.loc)) //checks if the owner is inside something so they can't teleport out of the cloner
var/warpmessage = pick(
- "With a sickening 720-degree twist of [owner.p_their()] back, [owner] vanishes into thin air.",
- "[owner] does some sort of strange backflip into another dimension. It looks pretty painful.",
- "[owner] does a jump to the left, a step to the right, and warps out of reality.",
- "[owner]'s torso starts folding inside out until it vanishes from reality, taking [owner] with it.",
- "One moment, you see [owner]. The next, [owner] is gone.")
- owner.visible_message(warpmessage, "You feel a wave of nausea as you fall through reality!")
+ span_warning("With a sickening 720-degree twist of [owner.p_their()] back, [owner] vanishes into thin air."),
+ span_warning("[owner] does some sort of strange backflip into another dimension. It looks pretty painful."),
+ span_warning("[owner] does a jump to the left, a step to the right, and warps out of reality."),
+ span_warning("[owner]'s torso starts folding inside out until it vanishes from reality, taking [owner] with it."),
+ span_warning("One moment, you see [owner]. The next, [owner] is gone."))
+ owner.visible_message(warpmessage, span_userdanger("You feel a wave of nausea as you fall through reality!"))
var/warpdistance = rand(10,15) * GET_MUTATION_POWER(src)
do_teleport(owner, get_turf(owner), warpdistance, channel = TELEPORT_CHANNEL_FREE)
owner.adjust_disgust(GET_MUTATION_SYNCHRONIZER(src) * (warpchance * warpdistance))
warpchance = 0
- owner.visible_message("[owner] appears out of nowhere!")
+ owner.visible_message(span_danger("[owner] appears out of nowhere!"))
else
warpchance += 0.25 * GET_MUTATION_ENERGY(src)
@@ -331,7 +331,7 @@
name = "Acidic Flesh"
desc = "Subject has acidic chemicals building up underneath the skin. This is often lethal."
quality = NEGATIVE
- text_gain_indication = "A horrible burning sensation envelops you as your flesh turns to acid!"
+ text_gain_indication = span_userdanger("A horrible burning sensation envelops you as your flesh turns to acid!")
text_lose_indication = "A feeling of relief fills you as your flesh goes back to normal."
difficulty = 18//high so it's hard to unlock and use on others
var/msgcooldown = 0
@@ -339,11 +339,11 @@
/datum/mutation/human/acidflesh/on_life()
if(prob(25))
if(world.time > msgcooldown)
- to_chat(owner, "Your acid flesh bubbles...")
+ to_chat(owner, span_danger("Your acid flesh bubbles..."))
msgcooldown = world.time + 200
if(prob(15))
owner.acid_act(rand(30,50), 10)
- owner.visible_message("[owner]'s skin bubbles and pops.", "Your bubbling flesh pops! It burns!")
+ owner.visible_message(span_warning("[owner]'s skin bubbles and pops."), span_userdanger("Your bubbling flesh pops! It burns!"))
playsound(owner,'sound/weapons/sear.ogg', 50, 1)
/datum/mutation/human/gigantism
@@ -358,20 +358,20 @@
return
owner.resize = 1.25
owner.update_transform()
- owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..")
+ owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
/datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner)
if(..())
return
owner.resize = 0.8
owner.update_transform()
- owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..")
+ owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow.."))
/datum/mutation/human/spastic
name = "Spastic"
desc = "Subject suffers from muscle spasms."
quality = NEGATIVE
- text_gain_indication = "You flinch."
+ text_gain_indication = span_warning("You flinch.")
text_lose_indication = "Your flinching subsides."
difficulty = 16
@@ -389,7 +389,7 @@
name = "Two Left Feet"
desc = "A mutation that replaces the right foot with another left foot. It makes standing up after getting knocked down very difficult."
quality = NEGATIVE
- text_gain_indication = "Your right foot feels... left."
+ text_gain_indication = span_warning("Your right foot feels... left.")
text_lose_indication = "Your right foot feels alright."
difficulty = 16
var/stun_cooldown = 0
@@ -399,5 +399,5 @@
if(owner.AmountKnockdown() || owner.AmountStun())
owner.SetKnockdown(owner.AmountKnockdown()*2)
owner.SetStun(owner.AmountStun()*2)
- owner.visible_message("[owner] tries to stand up, but trips!", "You trip over your own feet!")
+ owner.visible_message(span_danger("[owner] tries to stand up, but trips!"), span_userdanger("You trip over your own feet!"))
stun_cooldown = world.time + 300
diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm
index a6fd5cab3ec2..fe25de933aa2 100644
--- a/code/datums/mutations/chameleon.dm
+++ b/code/datums/mutations/chameleon.dm
@@ -4,8 +4,8 @@
desc = "A genome that causes the holder's skin to become transparent over time."
quality = POSITIVE
difficulty = 16
- text_gain_indication = "You feel one with your surroundings."
- text_lose_indication = "You feel oddly exposed."
+ text_gain_indication = span_notice("You feel one with your surroundings.")
+ text_lose_indication = span_notice("You feel oddly exposed.")
time_coeff = 5
instability = 25
diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm
index fdfba18f9a28..908d0373c659 100644
--- a/code/datums/mutations/cold.dm
+++ b/code/datums/mutations/cold.dm
@@ -2,7 +2,7 @@
name = "Geladikinesis"
desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
quality = POSITIVE
- text_gain_indication = "Your hand feels cold."
+ text_gain_indication = span_notice("Your hand feels cold.")
instability = 10
difficulty = 10
synchronizer_coeff = 1
@@ -22,7 +22,7 @@
name = "Cryokinesis"
desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will."
quality = POSITIVE //upsides and downsides
- text_gain_indication = "Your hand feels cold."
+ text_gain_indication = span_notice("Your hand feels cold.")
instability = 20
difficulty = 12
synchronizer_coeff = 1
diff --git a/code/datums/mutations/heat_adaptation.dm b/code/datums/mutations/heat_adaptation.dm
index 31157ce9a435..d8818962457c 100644
--- a/code/datums/mutations/heat_adaptation.dm
+++ b/code/datums/mutations/heat_adaptation.dm
@@ -4,7 +4,7 @@
desc = "A strange mutation that renders the host immune to the heat of a plasma fire. Does not grant immunity to fire itself."
quality = POSITIVE
difficulty = 16
- text_gain_indication = "Your body feels cold!"
+ text_gain_indication = span_notice("Your body feels cold!")
time_coeff = 5
instability = 40
conflicts = list(SPACEMUT)
diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm
index 9691ed587907..3fa10e8904bb 100644
--- a/code/datums/mutations/hulk.dm
+++ b/code/datums/mutations/hulk.dm
@@ -5,7 +5,7 @@
quality = POSITIVE
locked = TRUE
difficulty = 16
- text_gain_indication = "Your muscles hurt!"
+ text_gain_indication = span_notice("Your muscles hurt!")
species_allowed = list("human") //no skeleton/lizard hulk
health_req = 25
instability = 65
@@ -28,7 +28,7 @@
/datum/mutation/human/hulk/on_life()
if(owner.health < 0)
on_losing(owner)
- to_chat(owner, "You suddenly feel very weak.")
+ to_chat(owner, span_danger("You suddenly feel very weak."))
/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
if(..())
@@ -52,7 +52,7 @@
quality = POSITIVE
get_chance = 10
lowest_value = 256 * 14
- text_gain_indication = "You suddenly feel very angry."
+ text_gain_indication = span_notice("You suddenly feel very angry.")
species_allowed = list("human") //no skeleton/lizard hulk
health_req = 25
@@ -61,7 +61,7 @@
quality = POSITIVE
class = MUT_OTHER
locked = TRUE
- text_gain_indication = "Your muscles hurt!"
+ text_gain_indication = span_notice("Your muscles hurt!")
species_allowed = list("human") //no skeleton/lizard hulk
health_req = 1
var/health_based = 0
@@ -79,7 +79,7 @@
if(istype(owner.w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/U = owner.w_uniform
if(owner.canUnEquip(U))
- owner.visible_message("[U] falls apart!", "You tear your clothes up in anger!")
+ owner.visible_message("[U] falls apart!", span_warning("You tear your clothes up in anger!"))
qdel(U)
if(istype(owner.wear_suit, /obj/item/clothing/suit))
var/obj/item/clothing/suit/S = owner.wear_suit
diff --git a/code/datums/mutations/radioactive.dm b/code/datums/mutations/radioactive.dm
index 00155ad0a171..c394e48c3e6d 100644
--- a/code/datums/mutations/radioactive.dm
+++ b/code/datums/mutations/radioactive.dm
@@ -2,7 +2,7 @@
name = "Radioactivity"
desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings."
quality = NEGATIVE
- text_gain_indication = "You can feel it in your bones!"
+ text_gain_indication = span_warning("You can feel it in your bones!")
time_coeff = 5
instability = 5
difficulty = 8
diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm
index ea6c661ab8a0..e8e4f13b2cdb 100644
--- a/code/datums/mutations/sight.dm
+++ b/code/datums/mutations/sight.dm
@@ -3,7 +3,7 @@
name = "Near Sightness"
desc = "The holder of this mutation has poor eyesight."
quality = MINOR_NEGATIVE
- text_gain_indication = "You can't see very well."
+ text_gain_indication = span_danger("You can't see very well.")
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -21,7 +21,7 @@
name = "Blindness"
desc = "Renders the subject completely blind."
quality = NEGATIVE
- text_gain_indication = "You can't seem to see anything."
+ text_gain_indication = span_danger("You can't seem to see anything.")
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -39,7 +39,7 @@
desc = "The user of this genome can visually percieve the unique human thermal signature."
quality = POSITIVE
difficulty = 18
- text_gain_indication = "You can see the heat rising off of your skin..."
+ text_gain_indication = span_notice("You can see the heat rising off of your skin...")
time_coeff = 2
locked = TRUE
instability = 40
@@ -62,7 +62,7 @@
/datum/mutation/human/thermal/x_ray
name = "X Ray Vision"
desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb
- text_gain_indication = "The walls suddenly disappear!"
+ text_gain_indication = span_notice("The walls suddenly disappear!")
instability = 35
locked = TRUE
visionflag = TRAIT_XRAY_VISION
@@ -74,7 +74,7 @@
quality = POSITIVE
locked = TRUE
difficulty = 16
- text_gain_indication = "You feel pressure building up behind your eyes."
+ text_gain_indication = span_notice("You feel pressure building up behind your eyes.")
layer_used = FRONT_MUTATIONS_LAYER
limb_req = BODY_ZONE_HEAD
diff --git a/code/datums/mutations/space_adaptation.dm b/code/datums/mutations/space_adaptation.dm
index 8fbaa59d2fc8..8a9cd5b9adcd 100644
--- a/code/datums/mutations/space_adaptation.dm
+++ b/code/datums/mutations/space_adaptation.dm
@@ -4,7 +4,7 @@
desc = "A strange mutation that renders the host immune to the vacuum of space. Will still need an oxygen supply."
quality = POSITIVE
difficulty = 16
- text_gain_indication = "Your body feels warm!"
+ text_gain_indication = span_notice("Your body feels warm!")
time_coeff = 5
instability = 40
conflicts = list(HEATMUT)
diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm
index 0a9734079612..822467e50b02 100644
--- a/code/datums/mutations/speech.dm
+++ b/code/datums/mutations/speech.dm
@@ -5,7 +5,7 @@
name = "Nervousness"
desc = "Causes the holder to stutter."
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel nervous."
+ text_gain_indication = span_danger("You feel nervous.")
/datum/mutation/human/nervousness/on_life()
if(prob(10))
@@ -16,8 +16,8 @@
name = "Wacky"
desc = "Unknown."
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel an off sensation in your voicebox."
- text_lose_indication = "The off sensation passes."
+ text_gain_indication = span_sans("You feel an off sensation in your voicebox.")
+ text_lose_indication = span_notice("The off sensation passes.")
/datum/mutation/human/wacky/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -36,8 +36,8 @@
name = "Mute"
desc = "Completely inhibits the vocal section of the brain."
quality = NEGATIVE
- text_gain_indication = "You feel unable to express yourself at all."
- text_lose_indication = "You feel able to speak freely again."
+ text_gain_indication = span_danger("You feel unable to express yourself at all.")
+ text_lose_indication = span_danger("You feel able to speak freely again.")
/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -54,8 +54,8 @@
name = "Smile"
desc = "Causes the user to be in constant mania."
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel so happy. Nothing can be wrong with anything. :)"
- text_lose_indication = "Everything is terrible again. :("
+ text_gain_indication = span_notice("You feel so happy. Nothing can be wrong with anything. :)")
+ text_lose_indication = span_notice("Everything is terrible again. :(")
/datum/mutation/human/smile/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -123,8 +123,8 @@
name = "Unintelligible"
desc = "Partially inhibits the vocal center of the brain, severely distorting speech."
quality = NEGATIVE
- text_gain_indication = "You can't seem to form any coherent thoughts!"
- text_lose_indication = "Your mind feels more clear."
+ text_gain_indication = span_danger("You can't seem to form any coherent thoughts!")
+ text_lose_indication = span_danger("Your mind feels more clear.")
/datum/mutation/human/unintelligible/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -140,8 +140,8 @@
name = "Swedish"
desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037."
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel Swedish, however that works."
- text_lose_indication = "The feeling of Swedishness passes."
+ text_gain_indication = span_notice("You feel Swedish, however that works.")
+ text_lose_indication = span_notice("The feeling of Swedishness passes.")
/datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -170,8 +170,8 @@
name = "Chav"
desc = "Unknown"
quality = MINOR_NEGATIVE
- text_gain_indication = "Ye feel like a reet prat like, innit?"
- text_lose_indication = "You no longer feel like being rude and sassy."
+ text_gain_indication = span_notice("Ye feel like a reet prat like, innit?")
+ text_lose_indication = span_notice("You no longer feel like being rude and sassy.")
/datum/mutation/human/chav/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -216,8 +216,8 @@
desc = "A terrifying mutation named after its 'patient-zero'."
quality = MINOR_NEGATIVE
locked = TRUE
- text_gain_indication = "You feel pretty good, honeydoll."
- text_lose_indication = "You feel a little less conversation would be great."
+ text_gain_indication = span_notice("You feel pretty good, honeydoll.")
+ text_lose_indication = span_notice("You feel a little less conversation would be great.")
/datum/mutation/human/elvis/on_life()
switch(pick(1,2))
@@ -262,8 +262,8 @@
desc = "A common mutation that severely decreases intelligence."
quality = NEGATIVE
locked = TRUE
- text_gain_indication = "You feel...totally chill, man!"
- text_lose_indication = "You feel like you have a better sense of time."
+ text_gain_indication = span_notice("You feel...totally chill, man!")
+ text_lose_indication = span_notice("You feel like you have a better sense of time.")
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
..()
diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm
index 30c206408afa..9e330f867715 100644
--- a/code/datums/mutations/telekinesis.dm
+++ b/code/datums/mutations/telekinesis.dm
@@ -4,7 +4,7 @@
desc = "A strange mutation that allows the holder to interact with objects through thought."
quality = POSITIVE
difficulty = 18
- text_gain_indication = "You feel smarter!"
+ text_gain_indication = span_notice("You feel smarter!")
limb_req = BODY_ZONE_HEAD
instability = 40
diff --git a/code/datums/mutations/touch.dm b/code/datums/mutations/touch.dm
index af5b22373e54..d8197ead111c 100644
--- a/code/datums/mutations/touch.dm
+++ b/code/datums/mutations/touch.dm
@@ -4,8 +4,8 @@
quality = POSITIVE
locked = TRUE
difficulty = 16
- text_gain_indication = "You feel power flow through your hands."
- text_lose_indication = "The energy in your hands subsides."
+ text_gain_indication = span_notice("You feel power flow through your hands.")
+ text_lose_indication = span_notice("The energy in your hands subsides.")
power = /obj/effect/proc_holder/spell/targeted/touch/shock
instability = 20
locked = TRUE
@@ -40,17 +40,17 @@
C.dropItemToGround(C.get_active_held_item())
C.dropItemToGround(C.get_inactive_held_item())
C.confused += 15
- C.visible_message("[user] electrocutes [target]!","[user] electrocutes you!")
+ C.visible_message(span_danger("[user] electrocutes [target]!"),span_userdanger("[user] electrocutes you!"))
return ..()
else
- user.visible_message("[user] fails to electrocute [target]!")
+ user.visible_message(span_warning("[user] fails to electrocute [target]!"))
return ..()
else if(isliving(target))
var/mob/living/L = target
L.electrocute_act(15, src, 1, FALSE, FALSE, FALSE, FALSE)
user.Beam(L, icon_state="red_lightning", time=15)
- L.visible_message("[user] electrocutes [target]!","[user] electrocutes you!")
+ L.visible_message(span_danger("[user] electrocutes [target]!"),span_userdanger("[user] electrocutes you!"))
return ..()
else
- to_chat(user,"The electricity doesn't seem to affect [target]...")
+ to_chat(user,span_warning("The electricity doesn't seem to affect [target]..."))
return ..()
diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm
index 6fd8552e18f0..e25688723f3c 100644
--- a/code/datums/saymode.dm
+++ b/code/datums/saymode.dm
@@ -17,7 +17,7 @@
/datum/saymode/changeling/handle_message(mob/living/user, message, datum/language/language)
switch(user.lingcheck())
if(LINGHIVE_LINK)
- var/msg = "[user.mind]: [message]"
+ var/msg = span_changeling("[user.mind]: [message]")
for(var/_M in GLOB.player_list)
var/mob/M = _M
if(M in GLOB.dead_mob_list)
@@ -33,13 +33,13 @@
to_chat(M, msg)
if(LINGHIVE_OUTSIDER)
if(prob(40))
- to_chat(M, "We can faintly sense an outsider trying to communicate through the hivemind...")
+ to_chat(M, span_changeling("We can faintly sense an outsider trying to communicate through the hivemind..."))
if(LINGHIVE_LING)
if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE))
- to_chat(user, "The poison in the air hinders our ability to interact with the hivemind.")
+ to_chat(user, span_warning("The poison in the air hinders our ability to interact with the hivemind."))
return FALSE
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
- var/msg = "[changeling.changelingID]: [message]"
+ var/msg = span_changeling("[changeling.changelingID]: [message]")
user.log_talk(message, LOG_SAY, tag="changeling [changeling.changelingID]")
for(var/_M in GLOB.player_list)
var/mob/M = _M
@@ -56,9 +56,9 @@
to_chat(M, msg)
if(LINGHIVE_OUTSIDER)
if(prob(40))
- to_chat(M, "We can faintly sense another of our kind trying to communicate through the hivemind...")
+ to_chat(M, span_changeling("We can faintly sense another of our kind trying to communicate through the hivemind..."))
if(LINGHIVE_OUTSIDER)
- to_chat(user, "Our senses have not evolved enough to be able to communicate this way...")
+ to_chat(user, span_changeling("Our senses have not evolved enough to be able to communicate this way..."))
return FALSE
@@ -131,7 +131,7 @@
if(is_monkey_leader(mind) || (ismonkey(user) && is_monkey(mind)))
user.log_talk(message, LOG_SAY, tag="monkey")
if(prob(75) && ismonkey(user))
- user.visible_message("\The [user] chimpers.")
+ user.visible_message(span_notice("\The [user] chimpers."))
var/msg = "\[[is_monkey_leader(mind) ? "Monkey Leader" : "Monkey"]\] [user]: [message]"
for(var/_M in GLOB.mob_list)
var/mob/M = _M
@@ -152,7 +152,7 @@
return TRUE
if(is_darkspawn_or_veil(user))
user.log_talk(message, LOG_SAY, tag="darkspawn")
- var/msg = "\[Mindlink\] [user.real_name]: \"[message]\""
+ var/msg = span_velvet("\[Mindlink\] [user.real_name]: \"[message]\"")
for(var/mob/M in GLOB.player_list)
if(M in GLOB.dead_mob_list)
var/link = FOLLOW_LINK(M, user)
@@ -162,7 +162,7 @@
var/turf/sender = get_turf(user)
if(receiver.z != sender.z)
if(prob(25))
- to_chat(M, "Your mindlink trembles with words, but they are too far to make out...")
+ to_chat(M, span_warning("Your mindlink trembles with words, but they are too far to make out..."))
continue
to_chat(M, msg)
return FALSE //yogs end
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 460bdff3cd82..9b11f26ad2c7 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -11,7 +11,7 @@
icon_state = "shadow_mend"
/datum/status_effect/shadow_mend/on_apply()
- owner.visible_message("Violet light wraps around [owner]'s body!", "Violet light wraps around your body!")
+ owner.visible_message(span_notice("Violet light wraps around [owner]'s body!"), span_notice("Violet light wraps around your body!"))
playsound(owner, 'sound/magic/teleport_app.ogg', 50, 1)
return ..()
@@ -20,7 +20,7 @@
owner.adjustFireLoss(-15)
/datum/status_effect/shadow_mend/on_remove()
- owner.visible_message("The violet light around [owner] glows black!", "The tendrils around you cinch tightly and reap their toll...")
+ owner.visible_message(span_warning("The violet light around [owner] glows black!"), span_warning("The tendrils around you cinch tightly and reap their toll..."))
playsound(owner, 'sound/magic/teleport_diss.ogg', 50, 1)
owner.apply_status_effect(STATUS_EFFECT_VOID_PRICE)
@@ -72,7 +72,7 @@
/datum/status_effect/vanguard_shield/on_apply()
owner.log_message("gained Vanguard stun immunity", LOG_ATTACK)
owner.add_stun_absorption("vanguard", INFINITY, 1, "'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!", " radiating with a soft yellow light!")
- owner.visible_message("[owner] begins to faintly glow!", "You will absorb all stuns for the next twenty seconds.")
+ owner.visible_message(span_warning("[owner] begins to faintly glow!"), span_brass("You will absorb all stuns for the next twenty seconds."))
owner.SetStun(0, FALSE)
owner.SetKnockdown(0, FALSE)
owner.SetParalyzed(0, FALSE)
@@ -92,21 +92,21 @@
stuns_blocked = FLOOR(min(vanguard["stuns_absorbed"] * 0.25, 400), 1)
vanguard["end_time"] = 0 //so it doesn't absorb the stuns we're about to apply
if(owner.stat != DEAD)
- var/message_to_owner = "You feel your Vanguard quietly fade..."
+ var/message_to_owner = span_warning("You feel your Vanguard quietly fade...")
var/otheractiveabsorptions = FALSE
for(var/i in owner.stun_absorption)
if(owner.stun_absorption[i]["end_time"] > world.time && owner.stun_absorption[i]["priority"] > vanguard["priority"])
otheractiveabsorptions = TRUE
if(!GLOB.ratvar_awakens && stuns_blocked && !otheractiveabsorptions)
owner.Paralyze(stuns_blocked)
- message_to_owner = "The weight of the Vanguard's protection crashes down upon you!"
+ message_to_owner = span_boldwarning("The weight of the Vanguard's protection crashes down upon you!")
if(stuns_blocked >= 300)
- message_to_owner += "\nYou faint from the exertion!"
+ message_to_owner += "\n[span_userdanger("You faint from the exertion!")]"
stuns_blocked *= 2
owner.Unconscious(stuns_blocked)
else
stuns_blocked = 0 //so logging is correct in cases where there were stuns blocked but we didn't stun for other reasons
- owner.visible_message("[owner]'s glowing aura fades!", message_to_owner)
+ owner.visible_message(span_warning("[owner]'s glowing aura fades!"), message_to_owner)
owner.log_message("lost Vanguard stun immunity[stuns_blocked ? "and was stunned for [stuns_blocked]":""]", LOG_ATTACK)
@@ -123,7 +123,7 @@
/datum/status_effect/inathneqs_endowment/on_apply()
owner.log_message("gained Inath-neq's invulnerability", LOG_ATTACK)
- owner.visible_message("[owner] shines with azure light!", "You feel Inath-neq's power flow through you! You're invincible!")
+ owner.visible_message(span_warning("[owner] shines with azure light!"), span_notice("You feel Inath-neq's power flow through you! You're invincible!"))
var/oldcolor = owner.color
owner.color = "#1E8CE1"
owner.fully_heal()
@@ -136,7 +136,7 @@
/datum/status_effect/inathneqs_endowment/on_remove()
owner.log_message("lost Inath-neq's invulnerability", LOG_ATTACK)
- owner.visible_message("The light around [owner] flickers and dissipates!", "You feel Inath-neq's power fade from your body!")
+ owner.visible_message(span_warning("The light around [owner] flickers and dissipates!"), span_boldwarning("You feel Inath-neq's power fade from your body!"))
owner.status_flags &= ~GODMODE
playsound(owner, 'sound/magic/ethereal_exit.ogg', 50, 1)
@@ -223,12 +223,12 @@
alert_type = /obj/screen/alert/status_effect/wish_granters_gift
/datum/status_effect/wish_granters_gift/on_apply()
- to_chat(owner, "Death is not your end! The Wish Granter's energy suffuses you, and you begin to rise...")
+ to_chat(owner, span_notice("Death is not your end! The Wish Granter's energy suffuses you, and you begin to rise..."))
return ..()
/datum/status_effect/wish_granters_gift/on_remove()
owner.revive(full_heal = TRUE, admin_revive = TRUE)
- owner.visible_message("[owner] appears to wake from the dead, having healed all wounds!", "You have regenerated.")
+ owner.visible_message(span_warning("[owner] appears to wake from the dead, having healed all wounds!"), span_notice("You have regenerated."))
owner.update_mobility()
/obj/screen/alert/status_effect/wish_granters_gift
@@ -251,7 +251,7 @@
if(isliving(B.current))
var/mob/living/M = B.current
SEND_SOUND(M, sound('sound/hallucinations/veryfar_noise.ogg'))
- to_chat(M, "The Cult's Master, [owner], has fallen in \the [A]!")
+ to_chat(M, span_cultlarge("The Cult's Master, [owner], has fallen in \the [A]!"))
/datum/status_effect/cult_master/tick()
if(owner.stat != DEAD && !alive)
@@ -312,7 +312,7 @@
/datum/status_effect/sword_spin/on_apply()
- owner.visible_message("[owner] begins swinging the sword with inhuman strength!")
+ owner.visible_message(span_danger("[owner] begins swinging the sword with inhuman strength!"))
var/oldcolor = owner.color
owner.color = "#ff0000"
owner.add_stun_absorption("bloody bastard sword", duration, 2, "doesn't even flinch as the sword's power courses through them!", "You shrug off the stun!", " glowing with a blazing red aura!")
@@ -331,7 +331,7 @@
slashy.attack(M, owner)
/datum/status_effect/sword_spin/on_remove()
- owner.visible_message("[owner]'s inhuman strength dissipates and the sword's runes grow cold!")
+ owner.visible_message(span_warning("[owner]'s inhuman strength dissipates and the sword's runes grow cold!"))
//Used by changelings to rapidly heal
@@ -348,7 +348,7 @@
var/mob/living/carbon/human/H = owner
prot = H.get_thermal_protection()
-
+
if(owner.on_fire && (prot < FIRE_IMMUNITY_MAX_TEMP_PROTECT))
linked_alert.icon_state = "fleshmend_fire"
return
@@ -357,6 +357,10 @@
owner.adjustBruteLoss(-10, FALSE)
owner.adjustFireLoss(-5, FALSE)
owner.adjustOxyLoss(-10)
+ if(!iscarbon(owner))
+ return
+ var/mob/living/carbon/C = owner
+ QDEL_LIST(C.all_scars)
/obj/screen/alert/status_effect/fleshmend
name = "Fleshmend"
@@ -383,7 +387,7 @@
status_type = STATUS_EFFECT_UNIQUE
duration = -1
tick_interval = 25
- examine_text = "They seem to have an aura of healing and helpfulness about them."
+ examine_text = span_notice("They seem to have an aura of healing and helpfulness about them.")
alert_type = null
var/hand
var/deathTick = 0
@@ -433,11 +437,11 @@
var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_L_ARM, FALSE, FALSE)
L.attach_limb(itemUser)
itemUser.put_in_hand(newRod, hand, forced = TRUE)
- to_chat(itemUser, "Your arm suddenly grows back with the Rod of Asclepius still attached!")
+ to_chat(itemUser, span_notice("Your arm suddenly grows back with the Rod of Asclepius still attached!"))
else
//Otherwise get rid of whatever else is in their hand and return the rod to said hand
itemUser.put_in_hand(newRod, hand, forced = TRUE)
- to_chat(itemUser, "The Rod of Asclepius suddenly grows back out of your arm!")
+ to_chat(itemUser, span_notice("The Rod of Asclepius suddenly grows back out of your arm!"))
//Because a servant of medicines stops at nothing to help others, lets keep them on their toes and give them an additional boost.
if(itemUser.health < itemUser.maxHealth)
new /obj/effect/temp_visual/heal(get_turf(itemUser), "#375637")
@@ -506,10 +510,10 @@
/datum/status_effect/antimagic
id = "antimagic"
duration = 10 SECONDS
- examine_text = "They seem to be covered in a dull, grey aura."
+ examine_text = span_notice("They seem to be covered in a dull, grey aura.")
/datum/status_effect/antimagic/on_apply()
- owner.visible_message("[owner] is coated with a dull aura!")
+ owner.visible_message(span_notice("[owner] is coated with a dull aura!"))
ADD_TRAIT(owner, TRAIT_ANTIMAGIC, MAGIC_TRAIT)
//glowing wings overlay
playsound(owner, 'sound/weapons/fwoosh.ogg', 75, 0)
@@ -517,13 +521,13 @@
/datum/status_effect/antimagic/on_remove()
REMOVE_TRAIT(owner, TRAIT_ANTIMAGIC, MAGIC_TRAIT)
- owner.visible_message("[owner]'s dull aura fades away...")
+ owner.visible_message(span_warning("[owner]'s dull aura fades away..."))
/datum/status_effect/creep //allows darkspawn to move through lights without lightburn damage //yogs start: darkspawn
id = "creep"
duration = -1
alert_type = /obj/screen/alert/status_effect/creep
- examine_text = "SUBJECTPRONOUN is surrounded by velvety, gently-waving black shadows!"
+ examine_text = span_warning("SUBJECTPRONOUN is surrounded by velvety, gently-waving black shadows!")
var/datum/antagonist/darkspawn/darkspawn
/datum/status_effect/creep/on_creation(mob/living/owner, datum/antagonist/darkspawn)
@@ -537,7 +541,7 @@
qdel(src)
return
if(!darkspawn.has_psi(1)) //ticks 5 times per second, 5 Psi lost per second
- to_chat(owner, "Without the Psi to maintain it, your protective aura vanishes!")
+ to_chat(owner, span_warning("Without the Psi to maintain it, your protective aura vanishes!"))
qdel(src)
return
darkspawn.use_psi(1)
@@ -553,7 +557,7 @@
id = "time_dilation"
duration = 600
alert_type = /obj/screen/alert/status_effect/time_dilation
- examine_text = "SUBJECTPRONOUN is moving jerkily and unpredictably!"
+ examine_text = span_warning("SUBJECTPRONOUN is moving jerkily and unpredictably!")
/datum/status_effect/time_dilation/on_apply()
owner.next_move_modifier *= 0.5
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 1d68f53f48ec..9d6a2274d1b8 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -146,11 +146,11 @@
/obj/screen/alert/status_effect/strandling/Click(location, control, params)
. = ..()
- to_chat(mob_viewer, "You attempt to remove the durathread strand from around your neck.")
+ to_chat(mob_viewer, span_notice("You attempt to remove the durathread strand from around your neck."))
if(do_after(mob_viewer, 35, null, mob_viewer))
if(isliving(mob_viewer))
var/mob/living/L = mob_viewer
- to_chat(mob_viewer, "You succesfuly remove the durathread strand.")
+ to_chat(mob_viewer, span_notice("You succesfuly remove the durathread strand."))
L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
@@ -242,9 +242,9 @@
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, BODY_ZONE_R_LEG)
if(owner.m_intent != MOVE_INTENT_WALK)
if(!iscultist(owner))
- to_chat(owner, "Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!")
+ to_chat(owner, span_warning("Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!"))
else //Cultists take extra burn damage
- to_chat(owner, "Your leg[number_legs > 1 ? "s burn":" burns"] with pain!")
+ to_chat(owner, span_warning("Your leg[number_legs > 1 ? "s burn":" burns"] with pain!"))
owner.toggle_move_intent()
return TRUE
return FALSE
@@ -601,15 +601,15 @@
var/health_difference = old_health - owner.health
if(!health_difference)
return
- owner.visible_message("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed!", \
- "The dazzling lights dim as you're harmed!")
+ owner.visible_message(span_warning("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed!"), \
+ span_boldannounce("The dazzling lights dim as you're harmed!"))
health_difference *= 2 //so 10 health difference translates to 20 deciseconds of stun reduction
duration -= health_difference
old_health = owner.health
/datum/status_effect/kindle/on_remove()
- owner.visible_message("The light in [owner]'s eyes fades!", \
- "You snap out of your daze!")
+ owner.visible_message(span_warning("The light in [owner]'s eyes fades!"), \
+ span_boldannounce("You snap out of your daze!"))
/obj/screen/alert/status_effect/kindle
name = "Dazzling Lights"
@@ -623,17 +623,17 @@
id = "ichorial_stain"
status_type = STATUS_EFFECT_UNIQUE
duration = 600
- examine_text = "SUBJECTPRONOUN is drenched in thick, blue ichor!"
+ examine_text = span_warning("SUBJECTPRONOUN is drenched in thick, blue ichor!")
alert_type = /obj/screen/alert/status_effect/ichorial_stain
/datum/status_effect/ichorial_stain/on_apply()
- owner.visible_message("[owner] gets back up, [owner.p_their()] body dripping blue ichor!", \
- "Thick blue ichor covers your body; you can't be revived like this again until it dries!")
+ owner.visible_message(span_danger("[owner] gets back up, [owner.p_their()] body dripping blue ichor!"), \
+ span_userdanger("Thick blue ichor covers your body; you can't be revived like this again until it dries!"))
return TRUE
/datum/status_effect/ichorial_stain/on_remove()
- owner.visible_message("The blue ichor on [owner]'s body dries out!", \
- "The ichor on your body is dry - you can now be revived by vitality matrices again!")
+ owner.visible_message(span_danger("The blue ichor on [owner]'s body dries out!"), \
+ span_boldnotice("The ichor on your body is dry - you can now be revived by vitality matrices again!"))
/obj/screen/alert/status_effect/ichorial_stain
name = "Ichorial Stain"
@@ -651,7 +651,7 @@
ADD_TRAIT(owner, TRAIT_PACIFISM, "gonbolaPacify")
ADD_TRAIT(owner, TRAIT_MUTE, "gonbolaMute")
ADD_TRAIT(owner, TRAIT_JOLLY, "gonbolaJolly")
- to_chat(owner, "You suddenly feel at peace and feel no need to make any sudden or rash actions...")
+ to_chat(owner, span_notice("You suddenly feel at peace and feel no need to make any sudden or rash actions..."))
return ..()
/datum/status_effect/gonbolaPacify/on_remove()
@@ -664,7 +664,7 @@
status_type = STATUS_EFFECT_UNIQUE
duration = 300
tick_interval = 10
- examine_text = "SUBJECTPRONOUN seems slow and unfocused."
+ examine_text = span_warning("SUBJECTPRONOUN seems slow and unfocused.")
var/stun = TRUE
alert_type = /obj/screen/alert/status_effect/trance
@@ -685,8 +685,8 @@
ADD_TRAIT(owner, TRAIT_MUTE, "trance")
if(!owner.has_quirk(/datum/quirk/monochromatic))
owner.add_client_colour(/datum/client_colour/monochrome)
- owner.visible_message("[stun ? "[owner] stands still as [owner.p_their()] eyes seem to focus on a distant point." : ""]", \
- "[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]")
+ owner.visible_message("[stun ? span_warning("[owner] stands still as [owner.p_their()] eyes seem to focus on a distant point.") : ""]", \
+ span_warning("[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]"))
return TRUE
/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE)
@@ -700,7 +700,7 @@
owner.dizziness = 0
if(!owner.has_quirk(/datum/quirk/monochromatic))
owner.remove_client_colour(/datum/client_colour/monochrome)
- to_chat(owner, "You snap out of your trance!")
+ to_chat(owner, span_warning("You snap out of your trance!"))
/datum/status_effect/trance/proc/hypnotize(datum/source, list/hearing_args)
if(!owner.can_hear())
@@ -723,14 +723,14 @@
switch(rand(1,5))
if(1)
if((owner.mobility_flags & MOBILITY_MOVE) && isturf(owner.loc))
- to_chat(owner, "Your leg spasms!")
+ to_chat(owner, span_warning("Your leg spasms!"))
step(owner, pick(GLOB.cardinals))
if(2)
if(owner.incapacitated())
return
var/obj/item/I = owner.get_active_held_item()
if(I)
- to_chat(owner, "Your fingers spasm!")
+ to_chat(owner, span_warning("Your fingers spasm!"))
owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK)
I.attack_self(owner)
if(3)
@@ -746,14 +746,14 @@
if(isliving(M))
targets += M
if(LAZYLEN(targets))
- to_chat(owner, "Your arm spasms!")
+ to_chat(owner, span_warning("Your arm spasms!"))
owner.log_message(" attacked someone due to a Muscle Spasm", LOG_ATTACK) //the following attack will log itself
owner.ClickOn(pick(targets))
owner.a_intent = prev_intent
if(4)
var/prev_intent = owner.a_intent
owner.a_intent = INTENT_HARM
- to_chat(owner, "Your arm spasms!")
+ to_chat(owner, span_warning("Your arm spasms!"))
owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK)
owner.ClickOn(owner)
owner.a_intent = prev_intent
@@ -765,7 +765,7 @@
for(var/turf/T in oview(owner, 3))
targets += T
if(LAZYLEN(targets) && I)
- to_chat(owner, "Your arm spasms!")
+ to_chat(owner, span_warning("Your arm spasms!"))
owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK)
owner.throw_item(pick(targets))
@@ -778,7 +778,7 @@
/datum/status_effect/dna_melt/on_creation(mob/living/new_owner, set_duration, updating_canmove)
. = ..()
- to_chat(new_owner, "My body can't handle the mutations! I need to get my mutations removed fast!")
+ to_chat(new_owner, span_boldwarning("My body can't handle the mutations! I need to get my mutations removed fast!"))
/datum/status_effect/dna_melt/on_remove()
if(!ishuman(owner))
@@ -821,7 +821,7 @@
status_type = STATUS_EFFECT_UNIQUE
tick_interval = 5
duration = 300
- examine_text = "SUBJECTPRONOUN is in a deep, deathlike sleep, with no signs of awareness to anything around them."
+ examine_text = span_deadsay("SUBJECTPRONOUN is in a deep, deathlike sleep, with no signs of awareness to anything around them.")
alert_type = /obj/screen/alert/status_effect/broken_will
var/old_health
@@ -832,8 +832,8 @@
var/health_difference = old_health - owner.health
if(!health_difference)
return
- owner.visible_message("[owner] jerks in their sleep as they're harmed!")
- to_chat(owner, "Something hits you, pulling you towards wakefulness!")
+ owner.visible_message(span_warning("[owner] jerks in their sleep as they're harmed!"))
+ to_chat(owner, span_boldannounce("Something hits you, pulling you towards wakefulness!"))
health_difference *= 10 //1 point of damage = 1 second = 10 deciseconds
duration -= health_difference
old_health = owner.health
@@ -885,10 +885,11 @@
effect_sprite = "emark1"
/datum/status_effect/eldritch/flesh/on_effect()
-
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
- H.bleed_rate += 10
+ var/obj/item/bodypart/bodypart = pick(H.bodyparts)
+ var/datum/wound/slash/severe/crit_wound = new
+ crit_wound.apply_wound(bodypart)
return ..()
/datum/status_effect/eldritch/ash
@@ -935,7 +936,7 @@
/datum/status_effect/corrosion_curse/on_creation(mob/living/new_owner, ...)
. = ..()
- to_chat(owner, "Your feel your body starting to break apart...")
+ to_chat(owner, span_danger("Your feel your body starting to break apart..."))
/datum/status_effect/corrosion_curse/tick()
. = ..()
@@ -974,7 +975,7 @@
/datum/status_effect/amok/on_apply(mob/living/afflicted)
. = ..()
- to_chat(owner, "Your feel filled with a rage that is not your own!")
+ to_chat(owner, span_boldwarning("Your feel filled with a rage that is not your own!"))
/datum/status_effect/amok/tick()
. = ..()
diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm
index 608dbb2d7a11..80b7a676ec0a 100644
--- a/code/datums/status_effects/gas.dm
+++ b/code/datums/status_effects/gas.dm
@@ -14,7 +14,7 @@
/datum/status_effect/freon/on_apply()
RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist)
if(!owner.stat)
- to_chat(owner, "You become frozen in a cube!")
+ to_chat(owner, span_userdanger("You become frozen in a cube!"))
cube = icon('icons/effects/freeze.dmi', "ice_cube")
owner.add_overlay(cube)
owner.update_mobility()
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index d6288b070d3d..94ba2bbfaac2 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -97,7 +97,7 @@
rewarded = caster
/datum/status_effect/bounty/on_apply()
- to_chat(owner, "You hear something behind you talking... You have been marked for death by [rewarded]. If you die, they will be rewarded.")
+ to_chat(owner, "[span_boldnotice("You hear something behind you talking...")] [span_notice("You have been marked for death by [rewarded]. If you die, they will be rewarded.")]")
playsound(owner, 'sound/weapons/shotgunpump.ogg', 75, 0)
return ..()
@@ -108,9 +108,9 @@
/datum/status_effect/bounty/proc/rewards()
if(rewarded && rewarded.mind && rewarded.stat != DEAD)
- to_chat(owner, "You hear something behind you talking... Bounty claimed.")
+ to_chat(owner, "[span_boldnotice("You hear something behind you talking...")] [span_notice("Bounty claimed.")]")
playsound(owner, 'sound/weapons/shotgunshot.ogg', 75, 0)
- to_chat(rewarded, "You feel a surge of mana flow into you!")
+ to_chat(rewarded, span_greentext("You feel a surge of mana flow into you!"))
for(var/obj/effect/proc_holder/spell/spell in rewarded.mind.spell_list)
spell.charge_counter = spell.charge_max
spell.recharging = FALSE
@@ -162,9 +162,9 @@
/datum/status_effect/tagalong/on_remove()
if(owner.loc == shadowing)
owner.forceMove(cached_location ? cached_location : get_turf(owner))
- shadowing.visible_message("[owner] breaks away from [shadowing]'s shadow!", \
- "You feel a sense of freezing cold pass through you!")
- to_chat(owner, "You break away from [shadowing].")
+ shadowing.visible_message(span_warning("[owner] breaks away from [shadowing]'s shadow!"), \
+ span_userdanger("You feel a sense of freezing cold pass through you!"))
+ to_chat(owner, span_velvet("You break away from [shadowing]."))
playsound(owner, 'yogstation/sound/magic/devour_will_form.ogg', 50, TRUE)
owner.setDir(SOUTH)
@@ -176,15 +176,15 @@
cached_location = get_turf(shadowing)
if(cached_location.get_lumcount() < DARKSPAWN_DIM_LIGHT)
owner.forceMove(cached_location)
- shadowing.visible_message("[owner] suddenly appears from the dark!")
- to_chat(owner, "You are forced out of [shadowing]'s shadow!")
+ shadowing.visible_message(span_warning("[owner] suddenly appears from the dark!"))
+ to_chat(owner, span_warning("You are forced out of [shadowing]'s shadow!"))
owner.Knockdown(30)
qdel(src)
var/obj/item/I = owner.get_active_held_item()
if(I)
- to_chat(owner, "Equipping an item forces you out!")
+ to_chat(owner, span_userdanger("Equipping an item forces you out!"))
if(istype(I, /obj/item/dark_bead))
- to_chat(owner, "[I] crackles with feedback, briefly disorienting you!")
+ to_chat(owner, span_userdanger("[I] crackles with feedback, briefly disorienting you!"))
owner.Stun(5) //short delay so they can't click as soon as they're out
qdel(src)
diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm
index d6377c115e75..a23cf4390fdd 100644
--- a/code/datums/status_effects/status_effect.dm
+++ b/code/datums/status_effects/status_effect.dm
@@ -70,6 +70,10 @@
return
duration = world.time + original_duration
+//do_after modifier!
+/datum/status_effect/proc/interact_speed_modifier()
+ return 1
+
//clickdelay/nextmove modifiers!
/datum/status_effect/proc/nextmove_modifier()
return 1
diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm
new file mode 100644
index 000000000000..b3751b29310a
--- /dev/null
+++ b/code/datums/status_effects/wound_effects.dm
@@ -0,0 +1,196 @@
+
+// The shattered remnants of your broken limbs fill you with determination!
+/obj/screen/alert/status_effect/determined
+ name = "Determined"
+ desc = "The serious wounds you've sustained have put your body into fight-or-flight mode! Now's the time to look for an exit!"
+ icon_state = "regenerative_core"
+
+/datum/status_effect/determined
+ id = "determined"
+ alert_type = /obj/screen/alert/status_effect/determined
+
+/datum/status_effect/determined/on_apply()
+ . = ..()
+ owner.visible_message(span_danger("[owner]'s body tenses up noticeably, gritting against [owner.p_their()] pain!"), span_notice("Your senses sharpen as your body tenses up from the wounds you've sustained!"), \
+ vision_distance=COMBAT_MESSAGE_RANGE)
+ if(ishuman(owner))
+ var/mob/living/carbon/human/human_owner = owner
+ human_owner.physiology.bleed_mod *= WOUND_DETERMINATION_BLEED_MOD
+
+/datum/status_effect/determined/on_remove()
+ owner.visible_message(span_danger("[owner]'s body slackens noticeably!"), span_warning("Your adrenaline rush dies off, and the pain from your wounds come aching back in..."), vision_distance=COMBAT_MESSAGE_RANGE)
+ if(ishuman(owner))
+ var/mob/living/carbon/human/human_owner = owner
+ human_owner.physiology.bleed_mod /= WOUND_DETERMINATION_BLEED_MOD
+ return ..()
+
+/datum/status_effect/limp
+ id = "limp"
+ status_type = STATUS_EFFECT_REPLACE
+ tick_interval = 10
+ alert_type = /obj/screen/alert/status_effect/limp
+ var/msg_stage = 0//so you dont get the most intense messages immediately
+ /// The left leg of the limping person
+ var/obj/item/bodypart/l_leg/left
+ /// The right leg of the limping person
+ var/obj/item/bodypart/r_leg/right
+ /// Which leg we're limping with next
+ var/obj/item/bodypart/next_leg
+ /// How many deciseconds we limp for on the left leg
+ var/slowdown_left = 0
+ /// How many deciseconds we limp for on the right leg
+ var/slowdown_right = 0
+
+/datum/status_effect/limp/on_apply()
+ if(!iscarbon(owner))
+ return FALSE
+ var/mob/living/carbon/C = owner
+ left = C.get_bodypart(BODY_ZONE_L_LEG)
+ right = C.get_bodypart(BODY_ZONE_R_LEG)
+ update_limp()
+ RegisterSignal(C, COMSIG_MOVABLE_MOVED, .proc/check_step)
+ RegisterSignal(C, list(COMSIG_CARBON_GAIN_WOUND, COMSIG_CARBON_LOSE_WOUND, COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB), .proc/update_limp)
+ return TRUE
+
+/datum/status_effect/limp/on_remove()
+ UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_GAIN_WOUND, COMSIG_CARBON_LOSE_WOUND, COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB))
+
+/obj/screen/alert/status_effect/limp
+ name = "Limping"
+ desc = "One or more of your legs has been wounded, slowing down steps with that leg! Get it fixed, or at least in a sling of gauze!"
+
+/datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced)
+ if(!owner.client || !(owner.mobility_flags & MOBILITY_STAND) || !owner.has_gravity() || (owner.movement_type & FLYING) || forced || owner.buckled)
+ return
+ // less limping while we have determination still
+ var/determined_mod = owner.has_status_effect(STATUS_EFFECT_DETERMINED) ? 0.25 : 1
+
+ if(next_leg == left)
+ owner.client.move_delay += slowdown_left * determined_mod
+ next_leg = right
+ else
+ owner.client.move_delay += slowdown_right * determined_mod
+ next_leg = left
+
+/datum/status_effect/limp/proc/update_limp()
+ var/mob/living/carbon/C = owner
+ left = C.get_bodypart(BODY_ZONE_L_LEG)
+ right = C.get_bodypart(BODY_ZONE_R_LEG)
+
+ if(!left && !right)
+ C.remove_status_effect(src)
+ return
+
+ slowdown_left = 0
+ slowdown_right = 0
+
+ if(left)
+ for(var/thing in left.wounds)
+ var/datum/wound/W = thing
+ slowdown_left += W.limp_slowdown
+
+ if(right)
+ for(var/thing in right.wounds)
+ var/datum/wound/W = thing
+ slowdown_right += W.limp_slowdown
+
+ // this handles losing your leg with the limp and the other one being in good shape as well
+ if(!slowdown_left && !slowdown_right)
+ C.remove_status_effect(src)
+ return
+
+
+/////////////////////////
+//////// WOUNDS /////////
+/////////////////////////
+
+// wound alert
+/obj/screen/alert/status_effect/wound
+ name = "Wounded"
+ desc = "Your body has sustained serious damage, click here to inspect yourself."
+
+/obj/screen/alert/status_effect/wound/Click()
+ var/mob/living/carbon/human/H = usr
+ H.check_self_for_injuries()
+
+// wound status effect base
+/datum/status_effect/wound
+ id = "wound"
+ status_type = STATUS_EFFECT_MULTIPLE
+ var/obj/item/bodypart/linked_limb
+ var/datum/wound/linked_wound
+ alert_type = NONE
+
+/datum/status_effect/wound/on_creation(mob/living/new_owner, incoming_wound)
+ . = ..()
+ linked_wound = incoming_wound
+ linked_limb = linked_wound.limb
+
+/datum/status_effect/wound/on_remove()
+ linked_wound = null
+ linked_limb = null
+ UnregisterSignal(owner, COMSIG_CARBON_LOSE_WOUND)
+
+/datum/status_effect/wound/on_apply()
+ if(!iscarbon(owner))
+ return FALSE
+ RegisterSignal(owner, COMSIG_CARBON_LOSE_WOUND, .proc/check_remove)
+ return TRUE
+
+/// check if the wound getting removed is the wound we're tied to
+/datum/status_effect/wound/proc/check_remove(mob/living/L, datum/wound/W)
+ if(W == linked_wound)
+ qdel(src)
+
+
+// bones
+/datum/status_effect/wound/blunt
+
+/datum/status_effect/wound/blunt/interact_speed_modifier()
+ var/mob/living/carbon/C = owner
+
+ if(C.get_active_hand() == linked_limb)
+ to_chat(C, span_warning("The [lowertext(linked_wound)] in your [linked_limb.name] slows your progress!"))
+ return linked_wound.interaction_efficiency_penalty
+
+ return 1
+
+/datum/status_effect/wound/blunt/nextmove_modifier()
+ var/mob/living/carbon/C = owner
+
+ if(C.get_active_hand() == linked_limb)
+ return linked_wound.interaction_efficiency_penalty
+
+ return 1
+
+// blunt
+/datum/status_effect/wound/blunt/moderate
+ id = "disjoint"
+/datum/status_effect/wound/blunt/severe
+ id = "hairline"
+/datum/status_effect/wound/blunt/critical
+ id = "compound"
+
+// slash
+/datum/status_effect/wound/slash/moderate
+ id = "abrasion"
+/datum/status_effect/wound/slash/severe
+ id = "laceration"
+/datum/status_effect/wound/slash/critical
+ id = "avulsion"
+
+// pierce
+/datum/status_effect/wound/pierce/moderate
+ id = "breakage"
+/datum/status_effect/wound/pierce/severe
+ id = "puncture"
+/datum/status_effect/wound/pierce/critical
+ id = "rupture"
+
+// burns
+/datum/status_effect/wound/burn/moderate
+ id = "seconddeg"
+/datum/status_effect/wound/burn/severe
+ id = "thirddeg"
+/datum/status_effect/wound/burn/critical
+ id = "fourthdeg"
diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm
index 1fb16fd53c2b..9ba132d376ae 100644
--- a/code/datums/traits/_quirk.dm
+++ b/code/datums/traits/_quirk.dm
@@ -124,8 +124,8 @@ Use this as a guideline
///You'll need to use "HAS_TRAIT_FROM(src, X, sources)" checks around the code to check this; for instance, the Ageusia trait is checked in taste code
///If you need help finding where to put it, the declaration finder on GitHub is the best way to locate it
- gain_text = "Things far away from you start looking blurry."
- lose_text = "You start seeing faraway things normally again."
+ gain_text = span_danger("Things far away from you start looking blurry.")
+ lose_text = span_notice("You start seeing faraway things normally again.")
medical_record_text = "Subject has permanent nearsightedness."
///These three are self-explanatory
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index bb622e000279..eb3997942c21 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -6,8 +6,8 @@
desc = "You can't taste anything! Toxic food will still poison you."
value = 1
mob_trait = TRAIT_AGEUSIA
- gain_text = "You can't taste anything!"
- lose_text = "You can taste again!"
+ gain_text = span_notice("You can't taste anything!")
+ lose_text = span_notice("You can taste again!")
medical_record_text = "Patient suffers from ageusia and is incapable of tasting food or reagents."
/datum/quirk/alcohol_tolerance
@@ -15,8 +15,8 @@
desc = "You become drunk more slowly and suffer fewer drawbacks from alcohol."
value = 1
mob_trait = TRAIT_ALCOHOL_TOLERANCE
- gain_text = "You feel like you could drink a whole keg!"
- lose_text = "You don't feel as resistant to alcohol anymore. Somehow."
+ gain_text = span_notice("You feel like you could drink a whole keg!")
+ lose_text = span_danger("You don't feel as resistant to alcohol anymore. Somehow.")
medical_record_text = "Patient demonstrates a high tolerance for alcohol."
/datum/quirk/apathetic
@@ -42,8 +42,8 @@
desc = "Nothing like a good drink to make you feel on top of the world. Whenever you're drunk, you slowly recover from injuries."
value = 2
mob_trait = TRAIT_DRUNK_HEALING
- gain_text = "You feel like a drink would do you good."
- lose_text = "You no longer feel like drinking would ease your pain."
+ gain_text = span_notice("You feel like a drink would do you good.")
+ lose_text = span_danger("You no longer feel like drinking would ease your pain.")
medical_record_text = "Patient has unusually efficient liver metabolism and can slowly regenerate wounds by drinking alcoholic beverages."
/datum/quirk/empath
@@ -51,8 +51,8 @@
desc = "Whether it's a sixth sense or careful study of body language, it only takes you a quick glance at someone to understand how they feel."
value = 2
mob_trait = TRAIT_EMPATH
- gain_text = "You feel in tune with those around you."
- lose_text = "You feel isolated from others."
+ gain_text = span_notice("You feel in tune with those around you.")
+ lose_text = span_danger("You feel isolated from others.")
medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed."
/datum/quirk/freerunning
@@ -60,8 +60,8 @@
desc = "You're great at quick moves! You can climb tables more quickly."
value = 2
mob_trait = TRAIT_FREERUNNING
- gain_text = "You feel lithe on your feet!"
- lose_text = "You feel clumsy again."
+ gain_text = span_notice("You feel lithe on your feet!")
+ lose_text = span_danger("You feel clumsy again.")
medical_record_text = "Patient scored highly on cardio tests."
/datum/quirk/friendly
@@ -69,8 +69,8 @@
desc = "You give the best hugs, especially when you're in the right mood."
value = 1
mob_trait = TRAIT_FRIENDLY
- gain_text = "You want to hug someone."
- lose_text = "You no longer feel compelled to hug others."
+ gain_text = span_notice("You want to hug someone.")
+ lose_text = span_danger("You no longer feel compelled to hug others.")
mood_quirk = TRUE
medical_record_text = "Patient demonstrates low-inhibitions for physical contact and well-developed arms. Requesting another doctor take over this case."
@@ -87,8 +87,8 @@
desc = "You walk with a gentle step; stepping on sharp objects is quieter, less painful and you won't leave footprints behind you."
value = 1
mob_trait = TRAIT_LIGHT_STEP
- gain_text = "You walk with a little more litheness."
- lose_text = "You start tromping around like a barbarian."
+ gain_text = span_notice("You walk with a little more litheness.")
+ lose_text = span_danger("You start tromping around like a barbarian.")
medical_record_text = "Patient's dexterity belies a strong capacity for stealth."
/datum/quirk/musician
@@ -96,8 +96,8 @@
desc = "You can tune handheld musical instruments to play melodies that clear certain negative effects and soothe the soul."
value = 1
mob_trait = TRAIT_MUSICIAN
- gain_text = "You know everything about musical instruments."
- lose_text = "You forget how musical instruments work."
+ gain_text = span_notice("You know everything about musical instruments.")
+ lose_text = span_danger("You forget how musical instruments work.")
medical_record_text = "Patient brain scans show a highly-developed auditory pathway."
/datum/quirk/musician/on_spawn()
@@ -114,8 +114,8 @@
desc = "You can see slightly more clearly in full darkness than most people."
value = 1
mob_trait = TRAIT_NIGHT_VISION
- gain_text = "The shadows seem a little less dark."
- lose_text = "Everything seems a little darker."
+ gain_text = span_notice("The shadows seem a little less dark.")
+ lose_text = span_danger("Everything seems a little darker.")
medical_record_text = "Patient's eyes show above-average acclimation to darkness."
/datum/quirk/night_vision/on_spawn()
@@ -130,8 +130,8 @@
desc = "You know how to handle a camera, shortening the delay between each shot."
value = 1
mob_trait = TRAIT_PHOTOGRAPHER
- gain_text = "You know everything about photography."
- lose_text = "You forget how photo cameras work."
+ gain_text = span_notice("You know everything about photography.")
+ lose_text = span_danger("You forget how photo cameras work.")
medical_record_text = "Patient mentions photography as a stress-relieving hobby."
/datum/quirk/photographer/on_spawn()
@@ -160,8 +160,8 @@
desc = "You hold a spiritual belief, whether in God, nature or the arcane rules of the universe. You gain comfort from the presence of holy people, and believe that your prayers are more special than others."
value = 1
mob_trait = TRAIT_SPIRITUAL
- gain_text = "You have faith in a higher power."
- lose_text = "You lose faith!"
+ gain_text = span_notice("You have faith in a higher power.")
+ lose_text = span_danger("You lose faith!")
medical_record_text = "Patient reports a belief in a higher power."
/datum/quirk/spiritual/on_spawn()
@@ -174,8 +174,8 @@
desc = "You're an experienced artist. While drawing graffiti, you can get twice as many uses out of drawing supplies."
value = 1
mob_trait = TRAIT_TAGGER
- gain_text = "You know how to tag walls efficiently."
- lose_text = "You forget how to tag walls properly."
+ gain_text = span_notice("You know how to tag walls efficiently.")
+ lose_text = span_danger("You forget how to tag walls properly.")
medical_record_text = "Patient was recently seen for possible paint huffing incident."
/datum/quirk/tagger/on_spawn()
@@ -190,6 +190,6 @@
desc = "Nothing gets between you and your food. You eat faster and can binge on junk food! Being fat suits you just fine."
value = 1
mob_trait = TRAIT_VORACIOUS
- gain_text = "You feel HONGRY."
- lose_text = "You no longer feel HONGRY."
+ gain_text = span_notice("You feel HONGRY.")
+ lose_text = span_danger("You no longer feel HONGRY.")
medical_record_text = "Patient demonstrates a disturbing capacity for eating."
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 7344e3013950..b1cb74261eb3 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -5,8 +5,8 @@
desc = "Thanks to your poor posture, backpacks and other bags never sit right on your back. More evenly weighted objects are fine, though."
value = -2
mood_quirk = TRUE
- gain_text = "Your back REALLY hurts!"
- lose_text = "Your back feels better."
+ gain_text = span_danger("Your back REALLY hurts!")
+ lose_text = span_notice("Your back feels better.")
medical_record_text = "Patient scans indicate severe and chronic back pain."
/datum/quirk/badback/on_process()
@@ -20,8 +20,8 @@
name = "Blood Deficiency"
desc = "Your body can't produce enough blood to sustain itself."
value = -2
- gain_text = "You feel your vigor slowly fading away."
- lose_text = "You feel vigorous again."
+ gain_text = span_danger("You feel your vigor slowly fading away.")
+ lose_text = span_notice("You feel vigorous again.")
medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood."
/datum/quirk/blooddeficiency/on_process()
@@ -36,8 +36,8 @@
name = "Blind"
desc = "You are completely blind, nothing can counteract this."
value = -4
- gain_text = "You can't see anything."
- lose_text = "You miraculously gain back your vision."
+ gain_text = span_danger("You can't see anything.")
+ lose_text = span_notice("You miraculously gain back your vision.")
medical_record_text = "Patient has permanent blindness."
/datum/quirk/blindness/add()
@@ -54,8 +54,8 @@
name = "Brain Tumor"
desc = "You have a little friend in your brain that is slowly destroying it. Better bring some mannitol!"
value = -3
- gain_text = "You feel smooth."
- lose_text = "You feel wrinkled again."
+ gain_text = span_danger("You feel smooth.")
+ lose_text = span_notice("You feel wrinkled again.")
medical_record_text = "Patient has a tumor in their brain that is slowly driving them to brain death."
var/where = "at your feet"
@@ -73,15 +73,15 @@
where = H.equip_in_one_of_slots(mannitolpills, slots, FALSE) || "at your feet"
/datum/quirk/brainproblems/post_add()
- to_chat(quirk_holder, "There is a pill bottle of mannitol [where]. You're going to need it.")
+ to_chat(quirk_holder, span_boldnotice("There is a pill bottle of mannitol [where]. You're going to need it."))
/datum/quirk/deafness
name = "Deaf"
desc = "You are incurably deaf."
value = -2
mob_trait = TRAIT_DEAF
- gain_text = "You can't hear anything."
- lose_text = "You're able to hear again!"
+ gain_text = span_danger("You can't hear anything.")
+ lose_text = span_notice("You're able to hear again!")
medical_record_text = "Patient's cochlear nerve is incurably damaged."
/datum/quirk/depression
@@ -89,8 +89,8 @@
desc = "You sometimes just hate life."
mob_trait = TRAIT_DEPRESSION
value = -1
- gain_text = "You start feeling depressed."
- lose_text = "You no longer feel depressed." //if only it were that easy!
+ gain_text = span_danger("You start feeling depressed.")
+ lose_text = span_notice("You no longer feel depressed.") //if only it were that easy!
medical_record_text = "Patient has a mild mood disorder, causing them to experience episodes of depression."
mood_quirk = TRUE
@@ -195,7 +195,7 @@
var/mob/living/carbon/human/H = quirk_holder
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
- to_chat(quirk_holder, "There is a precious family [heirloom.name] [where], passed down from generation to generation. Keep it safe!")
+ to_chat(quirk_holder, span_boldnotice("There is a precious family [heirloom.name] [where], passed down from generation to generation. Keep it safe!"))
var/list/names = splittext(quirk_holder.real_name, " ")
var/family_name = names[names.len]
@@ -221,16 +221,16 @@
desc = "You sleep like a rock! Whenever you're put to sleep or knocked unconscious, you take a little bit longer to wake up and cant see anything."
value = -2
mob_trait = TRAIT_HEAVY_SLEEPER
- gain_text = "You feel sleepy."
- lose_text = "You feel awake again."
+ gain_text = span_danger("You feel sleepy.")
+ lose_text = span_notice("You feel awake again.")
medical_record_text = "Patient has abnormal sleep study results and is difficult to wake up."
/datum/quirk/hypersensitive
name = "Hypersensitive"
desc = "For better or worse, everything seems to affect your mood more than it should."
value = -1
- gain_text = "You seem to make a big deal out of everything."
- lose_text = "You don't seem to make a big deal out of everything anymore."
+ gain_text = span_danger("You seem to make a big deal out of everything.")
+ lose_text = span_notice("You don't seem to make a big deal out of everything anymore.")
mood_quirk = TRUE //yogs
medical_record_text = "Patient demonstrates a high level of emotional volatility."
@@ -250,16 +250,16 @@
desc = "You just can't handle your drinks and get drunk very quickly."
value = -1
mob_trait = TRAIT_LIGHT_DRINKER
- gain_text = "Just the thought of drinking alcohol makes your head spin."
- lose_text = "You're no longer severely affected by alcohol."
+ gain_text = span_notice("Just the thought of drinking alcohol makes your head spin.")
+ lose_text = span_danger("You're no longer severely affected by alcohol.")
medical_record_text = "Patient demonstrates a low tolerance for alcohol. (Wimp)"
/datum/quirk/nearsighted //t. errorage
name = "Nearsighted"
desc = "You are nearsighted without prescription glasses, but spawn with a pair."
value = -1
- gain_text = "Things far away from you start looking blurry."
- lose_text = "You start seeing faraway things normally again."
+ gain_text = span_danger("Things far away from you start looking blurry.")
+ lose_text = span_notice("You start seeing faraway things normally again.")
medical_record_text = "Patient requires prescription glasses in order to counteract nearsightedness."
/datum/quirk/nearsighted/add()
@@ -288,7 +288,7 @@
return
if(lums <= 0.2)
if(quirk_holder.m_intent == MOVE_INTENT_RUN)
- to_chat(quirk_holder, "Easy, easy, take it slow... you're in the dark...")
+ to_chat(quirk_holder, span_warning("Easy, easy, take it slow... you're in the dark..."))
quirk_holder.toggle_move_intent()
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "nyctophobia", /datum/mood_event/nyctophobia)
else
@@ -299,8 +299,8 @@
desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone."
value = -2
mob_trait = TRAIT_PACIFISM
- gain_text = "You feel repulsed by the thought of violence!"
- lose_text = "You think you can defend yourself again."
+ gain_text = span_danger("You feel repulsed by the thought of violence!")
+ lose_text = span_notice("You think you can defend yourself again.")
medical_record_text = "Patient is unusually pacifistic and cannot bring themselves to cause physical harm."
@@ -415,8 +415,8 @@
desc = "You suffer from a severe disorder that causes very vivid hallucinations. Mindbreaker toxin can suppress its effects, and you are immune to mindbreaker's hallucinogenic properties. This is not a license to grief."
value = -2
//no mob trait because it's handled uniquely
- gain_text = "..."
- lose_text = "You feel in tune with the world again."
+ gain_text = span_userdanger("...")
+ lose_text = span_notice("You feel in tune with the world again.")
medical_record_text = "Patient suffers from acute Reality Dissociation Syndrome and experiences vivid hallucinations."
/datum/quirk/insanity/on_process()
@@ -439,8 +439,8 @@
name = "Social Anxiety"
desc = "Talking to people is very difficult for you, and you often stutter or even lock up."
value = -1
- gain_text = "You start worrying about what you're saying."
- lose_text = "You feel easier about talking again." //if only it were that easy!
+ gain_text = span_danger("You start worrying about what you're saying.")
+ lose_text = span_notice("You feel easier about talking again.") //if only it were that easy!
medical_record_text = "Patient is usually anxious in social encounters and prefers to avoid them."
var/dumb_thing = TRUE
@@ -453,10 +453,10 @@
if(prob(2 + nearby_people))
H.stuttering = max(3, H.stuttering)
else if(prob(min(3, nearby_people)) && !H.silent)
- to_chat(H, "You retreat into yourself. You really don't feel up to talking.")
+ to_chat(H, span_danger("You retreat into yourself. You really don't feel up to talking."))
H.silent = max(10, H.silent)
else if(prob(0.5) && dumb_thing)
- to_chat(H, "You think of a dumb thing you said a long time ago and scream internally.")
+ to_chat(H, span_userdanger("You think of a dumb thing you said a long time ago and scream internally."))
dumb_thing = FALSE //only once per life
if(prob(1))
new/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato(get_turf(H)) //now that's what I call spaghetti code
@@ -466,8 +466,8 @@
name = "Junkie"
desc = "You can't get enough of hard drugs."
value = -2
- gain_text = "You suddenly feel the craving for drugs."
- lose_text = "You feel like you should kick your drug habit."
+ gain_text = span_danger("You suddenly feel the craving for drugs.")
+ lose_text = span_notice("You feel like you should kick your drug habit.")
medical_record_text = "Patient has a history of hard drugs."
var/drug_list = list(/datum/reagent/drug/crank, /datum/reagent/drug/krokodil, /datum/reagent/medicine/morphine, /datum/reagent/drug/happiness, /datum/reagent/drug/methamphetamine, /datum/reagent/drug/ketamine) //List of possible IDs
var/reagent_id //ID picked from list
@@ -518,7 +518,7 @@
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
/datum/quirk/junkie/proc/announce_drugs()
- to_chat(quirk_holder, "There is a [drug_instance.name] of [reagent_instance.name] [where_drug]. Better hope you don't run out...")
+ to_chat(quirk_holder, span_boldnotice("There is a [drug_instance.name] of [reagent_instance.name] [where_drug]. Better hope you don't run out..."))
/datum/quirk/junkie/on_process()
var/mob/living/carbon/human/H = quirk_holder
@@ -531,7 +531,7 @@
if(!in_list)
H.reagents.addiction_list += reagent_instance
reagent_instance.addiction_stage = 0
- to_chat(quirk_holder, "You thought you kicked it, but you suddenly feel like you need [reagent_instance.name] again...")
+ to_chat(quirk_holder, span_danger("You thought you kicked it, but you suddenly feel like you need [reagent_instance.name] again..."))
tick_counter = 0
else
++tick_counter
@@ -552,8 +552,8 @@
desc = "Sometimes you just really want a smoke. Probably not great for your lungs."
value = -1
mood_quirk = TRUE
- gain_text = "You could really go for a smoke right about now."
- lose_text = "You feel like you should quit smoking."
+ gain_text = span_danger("You could really go for a smoke right about now.")
+ lose_text = span_notice("You feel like you should quit smoking.")
medical_record_text = "Patient is a current smoker."
reagent_type = /datum/reagent/drug/nicotine
accessory_type = /obj/item/lighter/greyscale
@@ -570,7 +570,7 @@
. = ..()
/datum/quirk/junkie/smoker/announce_drugs()
- to_chat(quirk_holder, "There is a [drug_instance.name] [where_drug], and a lighter [where_accessory]. Make sure you get your favorite brand when you run out.")
+ to_chat(quirk_holder, span_boldnotice("There is a [drug_instance.name] [where_drug], and a lighter [where_accessory]. Make sure you get your favorite brand when you run out."))
/datum/quirk/junkie/smoker/on_process()
@@ -590,17 +590,17 @@
value = -2
mood_quirk = TRUE
mob_trait = TRAIT_UNSTABLE
- gain_text = "There's a lot on your mind right now."
- lose_text = "Your mind finally feels calm."
+ gain_text = span_danger("There's a lot on your mind right now.")
+ lose_text = span_notice("Your mind finally feels calm.")
medical_record_text = "Patient's mind is in a vulnerable state, and cannot recover from traumatic events."
/datum/quirk/sheltered
name = "Sheltered"
- desc = "You never learned galactic common."
- value = -3
+ desc = "You never learned to speak galactic common."
+ value = -1
mob_trait = TRAIT_SHELTERED
- gain_text = "You do not understand galactic common."
- lose_text = "You start to put together what people are saying in galactic common."
+ gain_text = span_danger("You do not speak galactic common.")
+ lose_text = span_notice("You start to put together how to speak galactic common.")
medical_record_text = "Patient looks perplexed when questioned in galactic common."
@@ -615,8 +615,8 @@
desc = "You have had an allergic reaction to medicine in the past. Better stay away from it!"
value = -1
mob_trait = TRAIT_ALLERGIC
- gain_text = "You remember your allergic reaction to a common medicine."
- lose_text = "You no longer are allergic to medicine."
+ gain_text = span_danger("You remember your allergic reaction to a common medicine.")
+ lose_text = span_notice("You no longer are allergic to medicine.")
medical_record_text = "Patient has a severe allergic reaction to a common medicine."
var/allergy_chem_list = list( /datum/reagent/medicine/inacusiate,
/datum/reagent/medicine/silver_sulfadiazine,
@@ -635,14 +635,14 @@
/datum/quirk/allergic/on_spawn()
reagent_id = pick(allergy_chem_list)
var/datum/reagent/allergy = GLOB.chemical_reagents_list[reagent_id]
- to_chat(quirk_holder, "You remember you are allergic to [allergy.name].")
+ to_chat(quirk_holder, span_danger("You remember you are allergic to [allergy.name]."))
quirk_holder.allergies += allergy
/datum/quirk/allergic/on_process()
var/mob/living/carbon/H = quirk_holder
var/datum/reagent/allergy = GLOB.chemical_reagents_list[reagent_id]
if(cooldown == FALSE && H.reagents.has_reagent(reagent_id))
- to_chat(quirk_holder, "You forgot you were allergic to [allergy.name]!")
+ to_chat(quirk_holder, span_danger("You forgot you were allergic to [allergy.name]!"))
H.reagents.add_reagent(/datum/reagent/toxin/histamine, rand(5,10))
cooldown = TRUE
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), cooldown_time)
@@ -652,8 +652,8 @@
desc = "You have an uncontrollable urge to pick up things you see. Even things that don't belong to you."
value = -1
mob_trait = TRAIT_KLEPTOMANIAC
- gain_text = "You have an unmistakeable urge to grab nearby objects."
- lose_text = "You no feel the urge to steal."
+ gain_text = span_danger("You have an unmistakeable urge to grab nearby objects.")
+ lose_text = span_notice("You no feel the urge to steal.")
medical_record_text = "Patient has an uncontrollable urge to steal."
/datum/quirk/kleptomaniac/on_process()
@@ -667,7 +667,7 @@
if(!(L.mobility_flags & MOBILITY_PICKUP))
return
if(!H.get_active_held_item())
- to_chat(quirk_holder, "You can't keep your eyes off [I.name].")
+ to_chat(quirk_holder, span_danger("You can't keep your eyes off [I.name]."))
H.UnarmedAttack(I)
/datum/quirk/ineloquent
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 91afe641e07c..18be90aedaa5 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -5,8 +5,8 @@
name = "Vegetarian"
desc = "You find the idea of eating meat morally and physically repulsive."
value = 0
- gain_text = "You feel repulsion at the idea of eating meat."
- lose_text = "You feel like eating meat isn't that bad."
+ gain_text = span_notice("You feel repulsion at the idea of eating meat.")
+ lose_text = span_notice("You feel like eating meat isn't that bad.")
medical_record_text = "Patient reports a vegetarian diet."
/datum/quirk/vegetarian/add()
@@ -28,8 +28,8 @@
name = "Ananas Affinity"
desc = "You find yourself greatly enjoying fruits of the ananas genus. You can't seem to ever get enough of their sweet goodness!"
value = 0
- gain_text = "You feel an intense craving for pineapple."
- lose_text = "Your feelings towards pineapples seem to return to a lukewarm state."
+ gain_text = span_notice("You feel an intense craving for pineapple.")
+ lose_text = span_notice("Your feelings towards pineapples seem to return to a lukewarm state.")
medical_record_text = "Patient demonstrates a pathological love of pineapple."
/datum/quirk/pineapple_liker/add()
@@ -47,8 +47,8 @@
name = "Ananas Aversion"
desc = "You find yourself greatly detesting fruits of the ananas genus. Serious, how the hell can anyone say these things are good? And what kind of madman would even dare putting it on a pizza!?"
value = 0
- gain_text = "You find yourself pondering what kind of idiot actually enjoys pineapples..."
- lose_text = "Your feelings towards pineapples seem to return to a lukewarm state."
+ gain_text = span_notice("You find yourself pondering what kind of idiot actually enjoys pineapples...")
+ lose_text = span_notice("Your feelings towards pineapples seem to return to a lukewarm state.")
medical_record_text = "Patient is correct to think that pineapple is disgusting."
/datum/quirk/pineapple_hater/add()
@@ -66,8 +66,8 @@
name = "Deviant Tastes"
desc = "You dislike food that most people enjoy, and find delicious what they don't."
value = 0
- gain_text = "You start craving something that tastes strange."
- lose_text = "You feel like eating normal food again."
+ gain_text = span_notice("You start craving something that tastes strange.")
+ lose_text = span_notice("You feel like eating normal food again.")
medical_record_text = "Patient demonstrates irregular nutrition preferences."
/datum/quirk/deviant_tastes/add()
@@ -95,7 +95,7 @@
/datum/quirk/monochromatic/post_add()
if(quirk_holder.mind.assigned_role == "Detective")
- to_chat(quirk_holder, "Mmm. Nothing's ever clear on this station. It's all shades of gray...")
+ to_chat(quirk_holder, span_boldannounce("Mmm. Nothing's ever clear on this station. It's all shades of gray..."))
quirk_holder.playsound_local(quirk_holder, 'sound/ambience/ambidet1.ogg', 50, FALSE)
/datum/quirk/monochromatic/remove()
@@ -107,8 +107,8 @@
desc = "You have developed a random accent."
value = 0
mob_trait = TRAIT_RANDOM_ACCENT
- gain_text = "You have developed an accent."
- lose_text = "You have better control of how you pronounce your words."
+ gain_text = span_danger("You have developed an accent.")
+ lose_text = span_notice("You have better control of how you pronounce your words.")
medical_record_text = "Patient is difficult to understand."
/datum/quirk/random_accent/post_add()
diff --git a/code/datums/voice_announcements.dm b/code/datums/voice_announcements.dm
index 04cc6257b121..8e31ff48ae95 100644
--- a/code/datums/voice_announcements.dm
+++ b/code/datums/voice_announcements.dm
@@ -167,7 +167,7 @@ GLOBAL_LIST_EMPTY(voice_announce_list)
var/z_level = console_turf.z
SScommunications.nonsilicon_message_cooldown = world.time + 300
var/mob/living/user = client.mob
- deadchat_broadcast(" made a priority announcement from [get_area_name(user, TRUE)].", "[user.real_name]", user)
+ deadchat_broadcast(" made a priority announcement from [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user)
var/sound/sound1 = sound('sound/misc/announce.ogg')
var/sound/sound2 = sound(snd, channel = CHANNEL_VOICE_ANNOUNCE, volume = 70)
do_announce_sound(sound1, sound2, 15, z_level)
diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm
index 665217e40681..3881574827de 100644
--- a/code/datums/weather/weather.dm
+++ b/code/datums/weather/weather.dm
@@ -4,12 +4,12 @@
var/name = "space wind"
var/desc = "Heavy gusts of wind blanket the area, periodically knocking down anyone caught in the open."
- var/telegraph_message = "The wind begins to pick up." //The message displayed in chat to foreshadow the weather's beginning
+ var/telegraph_message = span_warning("The wind begins to pick up.") //The message displayed in chat to foreshadow the weather's beginning
var/telegraph_duration = 300 //In deciseconds, how long from the beginning of the telegraph until the weather begins
var/telegraph_sound //The sound file played to everyone on an affected z-level
var/telegraph_overlay //The overlay applied to all tiles on the z-level
- var/weather_message = "The wind begins to blow ferociously!" //Displayed in chat once the weather begins in earnest
+ var/weather_message = span_userdanger("The wind begins to blow ferociously!") //Displayed in chat once the weather begins in earnest
var/weather_duration = 1200 //In deciseconds, how long the weather lasts once it begins
var/weather_duration_lower = 1200 //See above - this is the lowest possible duration
var/weather_duration_upper = 1500 //See above - this is the highest possible duration
@@ -17,7 +17,7 @@
var/weather_overlay
var/weather_color = null
- var/end_message = "The wind relents its assault." //Displayed once the weather is over
+ var/end_message = span_danger("The wind relents its assault.") //Displayed once the weather is over
var/end_duration = 300 //In deciseconds, how long the "wind-down" graphic will appear before vanishing entirely
var/end_sound
var/end_overlay
diff --git a/code/datums/weather/weather_types/acid_rain.dm b/code/datums/weather/weather_types/acid_rain.dm
index a1ec4871d5b7..86614ac0c240 100644
--- a/code/datums/weather/weather_types/acid_rain.dm
+++ b/code/datums/weather/weather_types/acid_rain.dm
@@ -4,17 +4,17 @@
desc = "The planet's thunderstorms are by nature acidic, and will incinerate anyone standing beneath them without protection."
telegraph_duration = 400
- telegraph_message = "Thunder rumbles far above. You hear droplets drumming against the canopy. Seek shelter."
+ telegraph_message = span_boldwarning("Thunder rumbles far above. You hear droplets drumming against the canopy. Seek shelter.")
telegraph_sound = 'sound/ambience/acidrain_start.ogg'
- weather_message = "Acidic rain pours down around you! Get inside!"
+ weather_message = span_userdanger("Acidic rain pours down around you! Get inside!")
weather_overlay = "acid_rain"
weather_duration_lower = 600
weather_duration_upper = 1500
weather_sound = 'sound/ambience/acidrain_mid.ogg'
end_duration = 100
- end_message = "The downpour gradually slows to a light shower. It should be safe outside now."
+ end_message = span_boldannounce("The downpour gradually slows to a light shower. It should be safe outside now.")
end_sound = 'sound/ambience/acidrain_end.ogg'
area_type = /area
diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm
index 53d9f4805ba1..570cfb9249be 100644
--- a/code/datums/weather/weather_types/ash_storm.dm
+++ b/code/datums/weather/weather_types/ash_storm.dm
@@ -3,16 +3,16 @@
name = "ash storm"
desc = "An intense atmospheric storm lifts ash off of the planet's surface and billows it down across the area, dealing intense fire damage to the unprotected."
- telegraph_message = "An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter."
+ telegraph_message = span_boldwarning("An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter.")
telegraph_duration = 300
telegraph_overlay = "light_ash"
- weather_message = "Smoldering clouds of scorching ash billow down around you! Get inside!"
+ weather_message = span_userdanger("Smoldering clouds of scorching ash billow down around you! Get inside!")
weather_duration_lower = 600
weather_duration_upper = 1200
weather_overlay = "ash_storm"
- end_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now."
+ end_message = span_boldannounce("The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now.")
end_duration = 300
end_overlay = "light_ash"
@@ -102,10 +102,10 @@
name = "emberfall"
desc = "A passing ash storm blankets the area in harmless embers."
- weather_message = "Gentle embers waft down around you like grotesque snow. The storm seems to have passed you by..."
+ weather_message = span_notice("Gentle embers waft down around you like grotesque snow. The storm seems to have passed you by...")
weather_overlay = "light_ash"
- end_message = "The emberfall slows, stops. Another layer of hardened soot to the basalt beneath your feet."
+ end_message = span_notice("The emberfall slows, stops. Another layer of hardened soot to the basalt beneath your feet.")
end_sound = null
aesthetic = TRUE
diff --git a/code/datums/weather/weather_types/floor_is_lava.dm b/code/datums/weather/weather_types/floor_is_lava.dm
index ad7d9c8ff361..81e0c7bff6f7 100644
--- a/code/datums/weather/weather_types/floor_is_lava.dm
+++ b/code/datums/weather/weather_types/floor_is_lava.dm
@@ -3,15 +3,15 @@
name = "the floor is lava"
desc = "The ground turns into surprisingly cool lava, lightly damaging anything on the floor."
- telegraph_message = "You feel the ground beneath you getting hot. Waves of heat distort the air."
+ telegraph_message = span_warning("You feel the ground beneath you getting hot. Waves of heat distort the air.")
telegraph_duration = 150
- weather_message = "The floor is lava! Get on top of something!"
+ weather_message = span_userdanger("The floor is lava! Get on top of something!")
weather_duration_lower = 300
weather_duration_upper = 600
weather_overlay = "lava"
- end_message = "The ground cools and returns to its usual form."
+ end_message = span_danger("The ground cools and returns to its usual form.")
end_duration = 0
area_type = /area
diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index 72752abfe4e6..b60614c8e2db 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -4,9 +4,9 @@
desc = "A cloud of intense radiation passes through the area dealing rad damage to those who are unprotected."
telegraph_duration = 400
- telegraph_message = "The air begins to grow warm."
+ telegraph_message = span_danger("The air begins to grow warm.")
- weather_message = "You feel waves of heat wash over you! Find shelter!"
+ weather_message = span_userdanger("You feel waves of heat wash over you! Find shelter!")
weather_overlay = "ash_storm"
weather_duration_lower = 600
weather_duration_upper = 1500
@@ -14,7 +14,7 @@
weather_sound = 'sound/misc/bloblarm.ogg'
end_duration = 100
- end_message = "The air seems to be cooling off again."
+ end_message = span_notice("The air seems to be cooling off again.")
area_type = /area
protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer,
diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm
index 8ab4839cdbd3..505391464631 100644
--- a/code/datums/weather/weather_types/snow_storm.dm
+++ b/code/datums/weather/weather_types/snow_storm.dm
@@ -3,17 +3,17 @@
desc = "Harsh snowstorms roam the topside of this arctic planet, burying any area unfortunate enough to be in its path."
probability = 90
- telegraph_message = "Drifting particles of snow begin to dust the surrounding area.."
+ telegraph_message = span_warning("Drifting particles of snow begin to dust the surrounding area..")
telegraph_duration = 300
telegraph_overlay = "light_snow"
- weather_message = "Harsh winds pick up as dense snow begins to fall from the sky! Seek shelter!"
+ weather_message = span_userdanger("Harsh winds pick up as dense snow begins to fall from the sky! Seek shelter!")
weather_overlay = "snow_storm"
weather_duration_lower = 600
weather_duration_upper = 1500
end_duration = 100
- end_message = "The snowfall dies down, it should be safe to go outside again."
+ end_message = span_boldannounce("The snowfall dies down, it should be safe to go outside again.")
area_type = /area
protect_indoors = TRUE
diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm
index dbaffb517a56..10ebab692b1c 100644
--- a/code/datums/wires/_wires.dm
+++ b/code/datums/wires/_wires.dm
@@ -284,7 +284,7 @@
cut_color(target_wire)
. = TRUE
else
- to_chat(L, "You need wirecutters!")
+ to_chat(L, span_warning("You need wirecutters!"))
if("pulse")
I = L.is_holding_tool_quality(TOOL_MULTITOOL)
if(I || IsAdminGhost(usr))
@@ -293,7 +293,7 @@
pulse_color(target_wire, L)
. = TRUE
else
- to_chat(L, "You need a multitool!")
+ to_chat(L, span_warning("You need a multitool!"))
if("attach")
if(is_attached(target_wire))
I = detach_assembly(target_wire)
@@ -311,6 +311,6 @@
A.forceMove(L.drop_location())
. = TRUE
else
- to_chat(L, "You need an attachable assembly!")
+ to_chat(L, span_warning("You need an attachable assembly!"))
#undef MAXIMUM_EMP_WIRES
\ No newline at end of file
diff --git a/code/datums/wires/mulebot.dm b/code/datums/wires/mulebot.dm
index e7e40274e612..9376e9493efd 100644
--- a/code/datums/wires/mulebot.dm
+++ b/code/datums/wires/mulebot.dm
@@ -21,12 +21,12 @@
var/mob/living/simple_animal/bot/mulebot/M = holder
switch(wire)
if(WIRE_POWER1, WIRE_POWER2)
- holder.visible_message("[icon2html(M, viewers(holder))] The charge light flickers.")
+ holder.visible_message(span_notice("[icon2html(M, viewers(holder))] The charge light flickers."))
if(WIRE_AVOIDANCE)
- holder.visible_message("[icon2html(M, viewers(holder))] The external warning lights flash briefly.")
+ holder.visible_message(span_notice("[icon2html(M, viewers(holder))] The external warning lights flash briefly."))
if(WIRE_LOADCHECK)
- holder.visible_message("[icon2html(M, viewers(holder))] The load platform clunks.")
+ holder.visible_message(span_notice("[icon2html(M, viewers(holder))] The load platform clunks."))
if(WIRE_MOTOR1, WIRE_MOTOR2)
- holder.visible_message("[icon2html(M, viewers(holder))] The drive motor whines briefly.")
+ holder.visible_message(span_notice("[icon2html(M, viewers(holder))] The drive motor whines briefly."))
else
- holder.visible_message("[icon2html(M, viewers(holder))] You hear a radio crackle.")
\ No newline at end of file
+ holder.visible_message(span_notice("[icon2html(M, viewers(holder))] You hear a radio crackle."))
\ No newline at end of file
diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm
index 30718540c0d1..3c448934b589 100644
--- a/code/datums/wires/syndicatebomb.dm
+++ b/code/datums/wires/syndicatebomb.dm
@@ -20,24 +20,24 @@
switch(wire)
if(WIRE_BOOM)
if(B.active)
- holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-")
+ holder.visible_message(span_danger("[icon2html(B, viewers(holder))] An alarm sounds! It's go-"))
B.explode_now = TRUE
tell_admins(B)
else
- holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] Nothing happens."))
if(WIRE_UNBOLT)
- holder.visible_message("[icon2html(B, viewers(holder))] The bolts spin in place for a moment.")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] The bolts spin in place for a moment."))
if(WIRE_DELAY)
if(B.delayedbig)
- holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] Nothing happens."))
else
- holder.visible_message("[icon2html(B, viewers(holder))] The bomb chirps.")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] The bomb chirps."))
playsound(B, 'sound/machines/chime.ogg', 30, 1)
B.detonation_timer += 300
if(B.active)
B.delayedbig = TRUE
if(WIRE_PROCEED)
- holder.visible_message("[icon2html(B, viewers(holder))] The bomb buzzes ominously!")
+ holder.visible_message(span_danger("[icon2html(B, viewers(holder))] The bomb buzzes ominously!"))
playsound(B, 'sound/machines/buzz-sigh.ogg', 30, 1)
var/seconds = B.seconds_remaining()
if(seconds >= 61) // Long fuse bombs can suddenly become more dangerous if you tinker with them.
@@ -48,13 +48,13 @@
B.detonation_timer = world.time + 100
if(WIRE_ACTIVATE)
if(!B.active)
- holder.visible_message("[icon2html(B, viewers(holder))] You hear the bomb start ticking!")
+ holder.visible_message(span_danger("[icon2html(B, viewers(holder))] You hear the bomb start ticking!"))
B.activate()
B.update_icon()
else if(B.delayedlittle)
- holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] Nothing happens."))
else
- holder.visible_message("[icon2html(B, viewers(holder))] The bomb seems to hesitate for a moment.")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] The bomb seems to hesitate for a moment."))
B.detonation_timer += 100
B.delayedlittle = TRUE
@@ -63,22 +63,22 @@
switch(wire)
if(WIRE_BOOM)
if(!mend && B.active)
- holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-")
+ holder.visible_message(span_danger("[icon2html(B, viewers(holder))] An alarm sounds! It's go-"))
B.explode_now = TRUE
tell_admins(B)
if(WIRE_UNBOLT)
if(!mend && B.anchored)
- holder.visible_message("[icon2html(B, viewers(holder))] The bolts lift out of the ground!")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] The bolts lift out of the ground!"))
playsound(B, 'sound/effects/stealthoff.ogg', 30, 1)
B.anchored = FALSE
if(WIRE_PROCEED)
if(!mend && B.active)
- holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-")
+ holder.visible_message(span_danger("[icon2html(B, viewers(holder))] An alarm sounds! It's go-"))
B.explode_now = TRUE
tell_admins(B)
if(WIRE_ACTIVATE)
if(!mend && B.active)
- holder.visible_message("[icon2html(B, viewers(holder))] The timer stops! The bomb has been defused!")
+ holder.visible_message(span_notice("[icon2html(B, viewers(holder))] The timer stops! The bomb has been defused!"))
B.active = FALSE
B.delayedlittle = FALSE
B.delayedbig = FALSE
diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm
index 1e1438eaea3a..11f314b02b2e 100644
--- a/code/datums/world_topic.dm
+++ b/code/datums/world_topic.dm
@@ -70,7 +70,7 @@
if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND)
return
- var/final_composed = "PR: [input[keyword]]"
+ var/final_composed = span_announce("PR: [input[keyword]]")
for(var/client/C in GLOB.clients)
C.AnnouncePR(final_composed)
@@ -79,7 +79,7 @@
require_comms_key = TRUE
/datum/world_topic/ahelp_relay/Run(list/input)
- relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]")
+ relay_msg_admins(span_adminnotice("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]"))
/datum/world_topic/comms_console
keyword = "Comms_Console"
@@ -119,7 +119,7 @@
sentmsg = oocmsg_toadmins // Get the admin one
else
sentmsg = oocmsg
- sentmsg = "RELAY: [input["source"]] " + sentmsg
+ sentmsg = "[span_prefix("RELAY: [input["source"]]")] " + sentmsg
//no pinging across servers, thats intentional
to_chat(C,sentmsg)
diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm
new file mode 100644
index 000000000000..f91b124e8d41
--- /dev/null
+++ b/code/datums/wounds/_wounds.dm
@@ -0,0 +1,376 @@
+/*
+ Wounds are specific medical complications that can arise and be applied to (currently) carbons, with a focus on humans. All of the code for and related to this is heavily WIP,
+ and the documentation will be slanted towards explaining what each part/piece is leading up to, until such a time as I finish the core implementations. The original design doc
+ can be found at https://hackmd.io/@Ryll/r1lb4SOwU
+
+ Wounds are datums that operate like a mix of diseases, brain traumas, and components, and are applied to a /obj/item/bodypart (preferably attached to a carbon) when they take large spikes of damage
+ or under other certain conditions (thrown hard against a wall, sustained exposure to plasma fire, etc). Wounds are categorized by the three following criteria:
+ 1. Severity: Either MODERATE, SEVERE, or CRITICAL. See the hackmd for more details
+ 2. Viable zones: What body parts the wound is applicable to. Generic wounds like broken bones and severe burns can apply to every zone, but you may want to add special wounds for certain limbs
+ like a twisted ankle for legs only, or open air exposure of the organs for particularly gruesome chest wounds. Wounds should be able to function for every zone they are marked viable for.
+ 3. Damage type: Currently either BRUTE or BURN. Again, see the hackmd for a breakdown of my plans for each type.
+
+ When a body part suffers enough damage to get a wound, the severity (determined by a roll or something, worse damage leading to worse wounds), affected limb, and damage type sustained are factored into
+ deciding what specific wound will be applied. I'd like to have a few different types of wounds for at least some of the choices, but I'm just doing rough generals for now. Expect polishing
+*/
+
+/datum/wound
+ /// What it's named
+ var/name = "Wound"
+ /// The description shown on the scanners
+ var/desc = ""
+ /// The basic treatment suggested by health analyzers
+ var/treat_text = ""
+ /// What the limb looks like on a cursory examine
+ var/examine_desc = "is badly hurt"
+
+ /// needed for "your arm has a compound fracture" vs "your arm has some third degree burns"
+ var/a_or_from = "a"
+ /// The visible message when this happens
+ var/occur_text = ""
+ /// This sound will be played upon the wound being applied
+ var/sound_effect
+
+ /// Either WOUND_SEVERITY_TRIVIAL (meme wounds like stubbed toe), WOUND_SEVERITY_MODERATE, WOUND_SEVERITY_SEVERE, or WOUND_SEVERITY_CRITICAL (or maybe WOUND_SEVERITY_LOSS)
+ var/severity = WOUND_SEVERITY_MODERATE
+ /// The list of wounds it belongs in, WOUND_LIST_BLUNT, WOUND_LIST_SLASH, or WOUND_LIST_BURN
+ var/wound_type
+
+ /// What body zones can we affect
+ var/list/viable_zones = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
+ /// Who owns the body part that we're wounding
+ var/mob/living/carbon/victim = null
+ /// The bodypart we're parented to
+ var/obj/item/bodypart/limb = null
+
+ /// Specific items such as bandages or sutures that can try directly treating this wound
+ var/list/treatable_by
+ /// Specific items such as bandages or sutures that can try directly treating this wound only if the user has the victim in an aggressive grab or higher
+ var/list/treatable_by_grabbed
+ /// Tools with the specified tool flag will also be able to try directly treating this wound
+ var/treatable_tool
+ /// How long it will take to treat this wound with a standard effective tool, assuming it doesn't need surgery
+ var/base_treat_time = 5 SECONDS
+
+ /// Using this limb in a do_after interaction will multiply the length by this duration (arms)
+ var/interaction_efficiency_penalty = 1
+ /// Incoming damage on this limb will be multiplied by this, to simulate tenderness and vulnerability (mostly burns).
+ var/damage_mulitplier_penalty = 1
+ /// If set and this wound is applied to a leg, we take this many deciseconds extra per step on this leg
+ var/limp_slowdown
+ /// How much we're contributing to this limb's bleed_rate
+ var/blood_flow
+
+ /// The minimum we need to roll on [/obj/item/bodypart/proc/check_wounding] to begin suffering this wound, see check_wounding_mods() for more
+ var/threshold_minimum
+ /// How much having this wound will add to all future check_wounding() rolls on this limb, to allow progression to worse injuries with repeated damage
+ var/threshold_penalty
+ /// If we need to process each life tick
+ var/processes = FALSE
+
+ /// If having this wound makes currently makes the parent bodypart unusable
+ var/disabling
+
+ /// What status effect we assign on application
+ var/status_effect_type
+ /// The status effect we're linked to
+ var/datum/status_effect/linked_status_effect
+ /// If we're operating on this wound and it gets healed, we'll nix the surgery too
+ var/datum/surgery/attached_surgery
+ /// if you're a lazy git and just throw them in cryo, the wound will go away after accumulating severity * 25 power
+ var/cryo_progress
+
+ /// What kind of scars this wound will create description wise once healed
+ var/scar_keyword = "generic"
+ /// If we've already tried scarring while removing (since remove_wound calls qdel, and qdel calls remove wound, .....) TODO: make this cleaner
+ var/already_scarred = FALSE
+ /// If we forced this wound through badmin smite, we won't count it towards the round totals
+ var/from_smite
+
+ /// What flags apply to this wound
+ var/wound_flags = (FLESH_WOUND | BONE_WOUND | ACCEPTS_GAUZE)
+
+/datum/wound/Destroy()
+ if(attached_surgery)
+ QDEL_NULL(attached_surgery)
+ if(limb?.wounds && (src in limb.wounds)) // destroy can call remove_wound() and remove_wound() calls qdel, so we check to make sure there's anything to remove first
+ remove_wound()
+ set_limb(null)
+ victim = null
+ return ..()
+
+/**
+ * apply_wound() is used once a wound type is instantiated to assign it to a bodypart, and actually come into play.
+ *
+ *
+ * Arguments:
+ * * L: The bodypart we're wounding, we don't care about the person, we can get them through the limb
+ * * silent: Not actually necessary I don't think, was originally used for demoting wounds so they wouldn't make new messages, but I believe old_wound took over that, I may remove this shortly
+ * * old_wound: If our new wound is a replacement for one of the same time (promotion or demotion), we can reference the old one just before it's removed to copy over necessary vars
+ * * smited- If this is a smite, we don't care about this wound for stat tracking purposes (not yet implemented)
+ */
+/datum/wound/proc/apply_wound(obj/item/bodypart/L, silent = FALSE, datum/wound/old_wound = null, smited = FALSE)
+ if(!istype(L) || !L.owner || !(L.body_zone in viable_zones) || isalien(L.owner) || !L.is_organic_limb())
+ qdel(src)
+ return
+
+ if(ishuman(L.owner))
+ var/mob/living/carbon/human/H = L.owner
+ if(((wound_flags & BONE_WOUND) && !(HAS_BONE in H.dna.species.species_traits)) || ((wound_flags & FLESH_WOUND) && !(HAS_FLESH in H.dna.species.species_traits)))
+ qdel(src)
+ return
+
+ // we accept promotions and demotions, but no point in redundancy. This should have already been checked wherever the wound was rolled and applied for (see: bodypart damage code), but we do an extra check
+ // in case we ever directly add wounds
+ for(var/i in L.wounds)
+ var/datum/wound/preexisting_wound = i
+ if((preexisting_wound.type == type) && (preexisting_wound != old_wound))
+ qdel(src)
+ return
+
+ victim = L.owner
+ set_limb(L)
+ LAZYADD(victim.all_wounds, src)
+ LAZYADD(limb.wounds, src)
+ limb.update_wounds()
+ if(status_effect_type)
+ linked_status_effect = victim.apply_status_effect(status_effect_type, src)
+ SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb)
+ if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds
+ victim.throw_alert("wound", /obj/screen/alert/status_effect/wound)
+
+ var/demoted
+ if(old_wound)
+ demoted = (severity <= old_wound.severity)
+
+ if(severity == WOUND_SEVERITY_TRIVIAL)
+ return
+
+ if(!(silent || demoted))
+ var/msg = span_danger("[victim]'s [limb.name] [occur_text]!")
+ var/vis_dist = COMBAT_MESSAGE_RANGE
+
+ if(severity != WOUND_SEVERITY_MODERATE)
+ msg = "[msg]"
+ vis_dist = DEFAULT_MESSAGE_RANGE
+
+ victim.visible_message(msg, span_userdanger("Your [limb.name] [occur_text]!"), vision_distance = vis_dist)
+ if(sound_effect)
+ playsound(L.owner, sound_effect, 70 + 20 * severity, TRUE)
+
+ if(!demoted)
+ wound_injury(old_wound)
+ second_wind()
+
+/// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim
+/datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE)
+ //TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff
+ set_disabling(FALSE)
+ if(limb && !already_scarred && !replaced)
+ already_scarred = TRUE
+ var/datum/scar/new_scar = new
+ new_scar.generate(limb, src)
+ if(victim)
+ LAZYREMOVE(victim.all_wounds, src)
+ if(!victim.all_wounds)
+ victim.clear_alert("wound")
+ SEND_SIGNAL(victim, COMSIG_CARBON_LOSE_WOUND, src, limb)
+ if(limb && !ignore_limb)
+ LAZYREMOVE(limb.wounds, src)
+ limb.update_wounds(replaced)
+ if(limb?.can_be_disabled)
+ limb.update_disabled()
+
+/**
+ * replace_wound() is used when you want to replace the current wound with a new wound, presumably of the same category, just of a different severity (either up or down counts)
+ *
+ * This proc actually instantiates the new wound based off the specific type path passed, then returns the new instantiated wound datum.
+ *
+ * Arguments:
+ * * new_type- The TYPE PATH of the wound you want to replace this, like /datum/wound/slash/severe
+ * * smited- If this is a smite, we don't care about this wound for stat tracking purposes (not yet implemented)
+ */
+/datum/wound/proc/replace_wound(new_type, smited = FALSE)
+ var/datum/wound/new_wound = new new_type
+ already_scarred = TRUE
+ remove_wound(replaced=TRUE)
+ new_wound.apply_wound(limb, old_wound = src, smited = smited)
+ . = new_wound
+ qdel(src)
+
+/// The immediate negative effects faced as a result of the wound
+/datum/wound/proc/wound_injury(datum/wound/old_wound = null)
+ return
+
+/// Proc called to change the variable `limb` and react to the event.
+/datum/wound/proc/set_limb(new_value)
+ if(limb == new_value)
+ return FALSE //Limb can either be a reference to something or `null`. Returning the number variable makes it clear no change was made.
+ . = limb
+ limb = new_value
+ if(. && disabling)
+ var/obj/item/bodypart/old_limb = .
+ REMOVE_TRAIT(old_limb, TRAIT_PARALYSIS, src)
+ REMOVE_TRAIT(old_limb, TRAIT_DISABLED_BY_WOUND, src)
+ if(limb)
+ if(disabling)
+ ADD_TRAIT(limb, TRAIT_PARALYSIS, src)
+ ADD_TRAIT(limb, TRAIT_DISABLED_BY_WOUND, src)
+
+
+/// Proc called to change the variable `disabling` and react to the event.
+/datum/wound/proc/set_disabling(new_value)
+ if(disabling == new_value)
+ return
+ . = disabling
+ disabling = new_value
+ if(disabling)
+ if(!. && limb) //Gained disabling.
+ ADD_TRAIT(limb, TRAIT_PARALYSIS, src)
+ ADD_TRAIT(limb, TRAIT_DISABLED_BY_WOUND, src)
+ else if(. && limb) //Lost disabling.
+ REMOVE_TRAIT(limb, TRAIT_PARALYSIS, src)
+ REMOVE_TRAIT(limb, TRAIT_DISABLED_BY_WOUND, src)
+
+/// Additional beneficial effects when the wound is gained, in case you want to give a temporary boost to allow the victim to try an escape or last stand
+/datum/wound/proc/second_wind()
+ switch(severity)
+ if(WOUND_SEVERITY_MODERATE)
+ victim.reagents.add_reagent(/datum/reagent/determination, WOUND_DETERMINATION_MODERATE)
+ if(WOUND_SEVERITY_SEVERE)
+ victim.reagents.add_reagent(/datum/reagent/determination, WOUND_DETERMINATION_SEVERE)
+ if(WOUND_SEVERITY_CRITICAL)
+ victim.reagents.add_reagent(/datum/reagent/determination, WOUND_DETERMINATION_CRITICAL)
+ if(WOUND_SEVERITY_LOSS)
+ victim.reagents.add_reagent(/datum/reagent/determination, WOUND_DETERMINATION_LOSS)
+
+/**
+ * try_treating() is an intercept run from [/mob/living/carbon/proc/attackby] right after surgeries but before anything else. Return TRUE here if the item is something that is relevant to treatment to take over the interaction.
+ *
+ * This proc leads into [/datum/wound/proc/treat] and probably shouldn't be added onto in children types. You can specify what items or tools you want to be intercepted
+ * with var/list/treatable_by and var/treatable_tool, then if an item fulfills one of those requirements and our wound claims it first, it goes over to treat() and treat_self().
+ *
+ * Arguments:
+ * * I: The item we're trying to use
+ * * user: The mob trying to use it on us
+ */
+/datum/wound/proc/try_treating(obj/item/I, mob/user)
+ // first we weed out if we're not dealing with our wound's bodypart, or if it might be an attack
+ if(QDELETED(I) || limb.body_zone != user.zone_selected || (I.force && user.a_intent != INTENT_HELP))
+ return FALSE
+
+ var/allowed = FALSE
+
+ // check if we have a valid treatable tool
+ if(I.tool_behaviour == treatable_tool)
+ allowed = TRUE
+ else if((treatable_tool == TOOL_CAUTERY && I.get_temperature() || istype(I, /obj/item/gun/energy/laser)) && user == victim) // allow improvised cauterization on yourself without an aggro grab allowed = TRUE
+ allowed = TRUE
+ // failing that, see if we're aggro grabbing them and if we have an item that works for aggro grabs only
+ else if(user.pulling == victim && user.grab_state >= GRAB_AGGRESSIVE && check_grab_treatments(I, user))
+ allowed = TRUE
+ // failing THAT, we check if we have a generally allowed item
+ else
+ for(var/allowed_type in treatable_by)
+ if(istype(I, allowed_type))
+ allowed = TRUE
+ break
+
+ // if none of those apply, we return false to avoid interrupting
+ if(!allowed)
+ return FALSE
+
+ // now that we've determined we have a valid attempt at treating, we can stomp on their dreams if we're already interacting with the patient
+ if(INTERACTING_WITH(user, victim))
+ to_chat(user, span_warning("You're already interacting with [victim]!"))
+ return TRUE
+
+ if(!victim.can_inject(user, TRUE))
+ return TRUE
+
+ // lastly, treat them
+ treat(I, user)
+ return TRUE
+
+/// Return TRUE if we have an item that can only be used while aggro grabbed (unhanded aggro grab treatments go in [/datum/wound/proc/try_handling]). Treatment is still is handled in [/datum/wound/proc/treat]
+/datum/wound/proc/check_grab_treatments(obj/item/I, mob/user)
+ return FALSE
+
+/// Like try_treating() but for unhanded interactions from humans, used by joint dislocations for manual bodypart chiropractice for example. Ignores thick material checks since you can pop an arm into place through a thick suit unlike using sutures
+/datum/wound/proc/try_handling(mob/living/carbon/human/user)
+ return FALSE
+
+/// Someone is using something that might be used for treating the wound on this limb
+/datum/wound/proc/treat(obj/item/I, mob/user)
+ return
+
+/// If var/processing is TRUE, this is run on each life tick
+/datum/wound/proc/handle_process()
+ return
+
+/// For use in do_after callback checks
+/datum/wound/proc/still_exists()
+ return (!QDELETED(src) && limb)
+
+/// When our parent bodypart is hurt
+/datum/wound/proc/receive_damage(wounding_type, wounding_dmg, wound_bonus)
+ return
+
+/// Called from cryoxadone and pyroxadone when they're proc'ing. Wounds will slowly be fixed separately from other methods when these are in effect. crappy name but eh
+/datum/wound/proc/on_xadone(power)
+ cryo_progress += power
+ if(cryo_progress > 33 * severity)
+ qdel(src)
+
+/// When synthflesh is applied to the victim, we call this. No sense in setting up an entire chem reaction system for wounds when we only care for a few chems. Probably will change in the future
+/datum/wound/proc/on_synthflesh(power)
+ return
+
+/// Called when the patient is undergoing stasis, so that having fully treated a wound doesn't make you sit there helplessly until you think to unbuckle them
+/datum/wound/proc/on_stasis()
+ return
+
+/// Called when we're crushed in an airlock or firedoor, for one of the improvised joint dislocation fixes
+/datum/wound/proc/crush()
+ return
+
+/// Used when we're being dragged while bleeding, the value we return is how much bloodloss this wound causes from being dragged. Since it's a proc, you can let bandages soak some of the blood
+/datum/wound/proc/drag_bleed_amount()
+ return
+
+
+/**
+ * get_bleed_rate_of_change() is used in [/mob/living/carbon/proc/bleed_warn] to gauge whether this wound (if bleeding) is becoming worse, better, or staying the same over time
+ *
+ * Returns BLOOD_FLOW_STEADY if we're not bleeding or there's no change (like piercing), BLOOD_FLOW_DECREASING if we're clotting (non-critical slashes, gauzed, coagulant, etc), BLOOD_FLOW_INCREASING if we're opening up (crit slashes/heparin)
+ */
+/datum/wound/proc/get_bleed_rate_of_change()
+ if(blood_flow && HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
+ return BLOOD_FLOW_INCREASING
+ return BLOOD_FLOW_STEADY
+
+/**
+ * get_examine_description() is used in carbon/examine and human/examine to show the status of this wound. Useful if you need to show some status like the wound being splinted or bandaged.
+ *
+ * Return the full string line you want to show, note that we're already dealing with the 'warning' span at this point, and that \n is already appended for you in the place this is called from
+ *
+ * Arguments:
+ * * mob/user: The user examining the wound's owner, if that matters
+ */
+/datum/wound/proc/get_examine_description(mob/user)
+ . = "[victim.p_their(TRUE)] [limb.name] [examine_desc]"
+ . = severity <= WOUND_SEVERITY_MODERATE ? "[.]." : "[.]!"
+
+/datum/wound/proc/get_scanner_description(mob/user)
+ return "Type: [name]\nSeverity: [severity_text()]\nDescription: [desc]\nRecommended Treatment: [treat_text]"
+
+/datum/wound/proc/severity_text()
+ switch(severity)
+ if(WOUND_SEVERITY_TRIVIAL)
+ return "Trivial"
+ if(WOUND_SEVERITY_MODERATE)
+ return "Moderate"
+ if(WOUND_SEVERITY_SEVERE)
+ return "Severe"
+ if(WOUND_SEVERITY_CRITICAL)
+ return "Critical"
diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm
new file mode 100644
index 000000000000..67e2d8a4775c
--- /dev/null
+++ b/code/datums/wounds/bones.dm
@@ -0,0 +1,437 @@
+
+/*
+ Blunt/Bone wounds
+*/
+// TODO: well, a lot really, but i'd kill to get overlays and a bonebreaking effect like Blitz: The League, similar to electric shock skeletons
+
+/*
+ Base definition
+*/
+/datum/wound/blunt
+ name = "Blunt (Bone) Wound"
+ sound_effect = 'sound/effects/wounds/crack1.ogg'
+ wound_type = WOUND_BLUNT
+ wound_flags = (BONE_WOUND | ACCEPTS_GAUZE)
+
+ /// Have we been taped?
+ var/taped
+ /// Have we been bone gel'd?
+ var/gelled
+ /// If we did the gel + surgical tape healing method for fractures, how many ticks does it take to heal by default
+ var/regen_ticks_needed
+ /// Our current counter for gel + surgical tape regeneration
+ var/regen_ticks_current
+ /// If we suffer severe head booboos, we can get brain traumas tied to them
+ var/datum/brain_trauma/active_trauma
+ /// What brain trauma group, if any, we can draw from for head wounds
+ var/brain_trauma_group
+ /// If we deal brain traumas, when is the next one due?
+ var/next_trauma_cycle
+ /// How long do we wait +/- 20% for the next trauma?
+ var/trauma_cycle_cooldown
+ /// If this is a chest wound and this is set, we have this chance to cough up blood when hit in the chest
+ var/internal_bleeding_chance = 0
+
+/*
+ Overwriting of base procs
+*/
+/datum/wound/blunt/wound_injury(datum/wound/old_wound = null)
+ // hook into gaining/losing gauze so crit bone wounds can re-enable/disable depending if they're slung or not
+ RegisterSignal(limb, list(COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_GAUZE_DESTROYED), .proc/update_inefficiencies)
+
+ if(limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group)
+ processes = TRUE
+ active_trauma = victim.gain_trauma_type(brain_trauma_group, TRAUMA_RESILIENCE_WOUND)
+ next_trauma_cycle = world.time + (rand(100-WOUND_BONE_HEAD_TIME_VARIANCE, 100+WOUND_BONE_HEAD_TIME_VARIANCE) * 0.01 * trauma_cycle_cooldown)
+
+ RegisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, .proc/attack_with_hurt_hand)
+ if(limb.held_index && victim.get_item_for_held_index(limb.held_index) && (disabling || prob(30 * severity)))
+ var/obj/item/I = victim.get_item_for_held_index(limb.held_index)
+ if(istype(I, /obj/item/twohanded/offhand))
+ I = victim.get_inactive_held_item()
+
+ if(I && victim.dropItemToGround(I))
+ victim.visible_message(span_danger("[victim] drops [I] in shock!"), span_warning("The force on your [limb.name] causes you to drop [I]!"), vision_distance=COMBAT_MESSAGE_RANGE)
+
+ update_inefficiencies()
+
+/datum/wound/blunt/remove_wound(ignore_limb, replaced)
+ limp_slowdown = 0
+ QDEL_NULL(active_trauma)
+ if(limb)
+ UnregisterSignal(limb, list(COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_GAUZE_DESTROYED))
+ if(victim)
+ UnregisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK)
+ return ..()
+
+/datum/wound/blunt/handle_process()
+ . = ..()
+ if(limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group && world.time > next_trauma_cycle)
+ if(active_trauma)
+ QDEL_NULL(active_trauma)
+ else
+ active_trauma = victim.gain_trauma_type(brain_trauma_group, TRAUMA_RESILIENCE_WOUND)
+ next_trauma_cycle = world.time + (rand(100-WOUND_BONE_HEAD_TIME_VARIANCE, 100+WOUND_BONE_HEAD_TIME_VARIANCE) * 0.01 * trauma_cycle_cooldown)
+
+ if(!gelled)
+ return
+
+ regen_ticks_current++
+ if(!(victim.mobility_flags & MOBILITY_STAND))
+ if(prob(50))
+ regen_ticks_current += 0.5
+ if(victim.IsSleeping() && prob(50))
+ regen_ticks_current += 0.5
+
+ if(prob(severity * 3))
+ victim.take_bodypart_damage(rand(1, severity * 2), stamina=rand(2, severity * 2.5), wound_bonus=CANT_WOUND)
+ if(prob(33))
+ to_chat(victim, span_danger("You feel a sharp pain in your body as your bones are reforming!"))
+
+ if(regen_ticks_current > regen_ticks_needed)
+ if(!victim || !limb)
+ qdel(src)
+ return
+ to_chat(victim, span_green("Your [limb.name] has recovered from your fracture!"))
+ remove_wound()
+
+/// If we're a human who's punching something with a broken arm, we might hurt ourselves doing so
+/datum/wound/blunt/proc/attack_with_hurt_hand(mob/M, atom/target, proximity)
+ if(victim.get_active_hand() != limb || victim.a_intent == INTENT_HELP || !ismob(target) || severity <= WOUND_SEVERITY_MODERATE)
+ return
+
+ // With a severe or critical wound, you have a 15% or 30% chance to proc pain on hit
+ if(prob((severity - 1) * 15))
+ // And you have a 70% or 50% chance to actually land the blow, respectively
+ if(prob(70 - 20 * (severity - 1)))
+ to_chat(victim, span_userdanger("The fracture in your [limb.name] shoots with pain as you strike [target]!"))
+ limb.receive_damage(brute=rand(1,5))
+ else
+ victim.visible_message(span_danger("[victim] weakly strikes [target] with [victim.p_their()] broken [limb.name], recoiling from pain!"), \
+ span_userdanger("You fail to strike [target] as the fracture in your [limb.name] lights up in unbearable pain!"), vision_distance=COMBAT_MESSAGE_RANGE)
+ victim.emote("scream")
+ victim.Stun(0.5 SECONDS)
+ limb.receive_damage(brute=rand(3,7))
+ return COMPONENT_NO_ATTACK_HAND
+
+/datum/wound/blunt/receive_damage(wounding_type, wounding_dmg, wound_bonus)
+ if(!victim || wounding_dmg < WOUND_MINIMUM_DAMAGE)
+ return
+ if(ishuman(victim))
+ var/mob/living/carbon/human/human_victim = victim
+ if(NOBLOOD in human_victim.dna?.species.species_traits)
+ return
+
+ if(victim.stat != DEAD && limb.body_zone == BODY_ZONE_CHEST && victim.blood_volume && prob(internal_bleeding_chance + wounding_dmg))
+ var/blood_bled = rand(1, wounding_dmg * (severity == WOUND_SEVERITY_CRITICAL ? 2 : 1.5)) // 12 brute toolbox can cause up to 18/24 bleeding with a severe/critical chest wound
+ switch(blood_bled)
+ if(1 to 6)
+ victim.bleed(blood_bled, TRUE)
+ if(7 to 13)
+ victim.visible_message(span_smalldanger("[victim] coughs up a bit of blood from the blow to [victim.p_their()] chest."), span_danger("You cough up a bit of blood from the blow to your chest."), vision_distance=COMBAT_MESSAGE_RANGE)
+ victim.bleed(blood_bled, TRUE)
+ if(14 to 19)
+ victim.visible_message(span_smalldanger("[victim] spits out a string of blood from the blow to [victim.p_their()] chest!"), span_danger("You spit out a string of blood from the blow to your chest!"), vision_distance=COMBAT_MESSAGE_RANGE)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
+ victim.bleed(blood_bled)
+ if(20 to INFINITY)
+ victim.visible_message(span_danger("[victim] chokes up a spray of blood from the blow to [victim.p_their()] chest!"), span_danger("You choke up on a spray of blood from the blow to your chest!"), vision_distance=COMBAT_MESSAGE_RANGE)
+ victim.bleed(blood_bled)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
+ victim.add_splatter_floor(get_step(victim.loc, victim.dir))
+
+
+/datum/wound/blunt/get_examine_description(mob/user)
+ if(!limb.current_gauze && !gelled && !taped)
+ return ..()
+
+ var/list/msg = list()
+ if(!limb.current_gauze)
+ msg += "[victim.p_their(TRUE)] [limb.name] [examine_desc]"
+ else
+ var/sling_condition = ""
+ // how much life we have left in these bandages
+ switch(limb.current_gauze.absorption_capacity)
+ if(0 to 1.25)
+ sling_condition = "just barely"
+ if(1.25 to 2.75)
+ sling_condition = "loosely"
+ if(2.75 to 4)
+ sling_condition = "mostly"
+ if(4 to INFINITY)
+ sling_condition = "tightly"
+
+ msg += "[victim.p_their(TRUE)] [limb.name] is [sling_condition] fastened in a sling of [limb.current_gauze.name]"
+
+ if(taped)
+ msg += ", and appears to be reforming itself under some surgical tape!"
+ else if(gelled)
+ msg += ", with fizzing flecks of blue bone gel sparking off the bone!"
+ else
+ msg += "!"
+ return "[msg.Join()]"
+
+/*
+ New common procs for /datum/wound/blunt/
+*/
+
+/datum/wound/blunt/proc/update_inefficiencies()
+ if(limb.body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
+ if(limb.current_gauze)
+ limp_slowdown = initial(limp_slowdown) * limb.current_gauze.splint_factor
+ else
+ limp_slowdown = initial(limp_slowdown)
+ victim.apply_status_effect(STATUS_EFFECT_LIMP)
+ else if(limb.body_zone in list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
+ if(limb.current_gauze)
+ interaction_efficiency_penalty = 1 + ((interaction_efficiency_penalty - 1) * limb.current_gauze.splint_factor)
+ else
+ interaction_efficiency_penalty = interaction_efficiency_penalty
+
+ if(initial(disabling))
+ set_disabling(!limb.current_gauze)
+
+ limb.update_wounds()
+
+/// Joint Dislocation (Moderate Blunt)
+
+/datum/wound/blunt/moderate
+ name = "Joint Dislocation"
+ desc = "Patient's bone has been unset from socket, causing pain and reduced motor function."
+ treat_text = "Recommended application of bonesetter to affected limb, though manual relocation by applying an aggressive grab to the patient and helpfully interacting with afflicted limb may suffice."
+ examine_desc = "is awkwardly jammed out of place"
+ occur_text = "jerks violently and becomes unseated"
+ severity = WOUND_SEVERITY_MODERATE
+ viable_zones = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
+ interaction_efficiency_penalty = 1.5
+ limp_slowdown = 3
+ threshold_minimum = 35
+ threshold_penalty = 15
+ treatable_tool = TOOL_BONESET
+ wound_flags = (BONE_WOUND)
+ status_effect_type = /datum/status_effect/wound/blunt/moderate
+ scar_keyword = "bluntmoderate"
+
+/datum/wound/blunt/moderate/crush()
+ if(prob(33))
+ victim.visible_message(span_danger("[victim]'s dislocated [limb.name] pops back into place!"), span_userdanger("Your dislocated [limb.name] pops back into place! Ow!"))
+ remove_wound()
+
+/datum/wound/blunt/moderate/try_handling(mob/living/carbon/human/user)
+ if(user.pulling != victim || user.zone_selected != limb.body_zone || user.a_intent == INTENT_GRAB)
+ return FALSE
+
+ if(user.grab_state == GRAB_PASSIVE)
+ to_chat(user, span_warning("You must have [victim] in an aggressive grab to manipulate [victim.p_their()] [lowertext(name)]!"))
+ return TRUE
+
+ if(user.grab_state >= GRAB_AGGRESSIVE)
+ user.visible_message(span_danger("[user] begins twisting and straining [victim]'s dislocated [limb.name]!"), span_notice("You begin twisting and straining [victim]'s dislocated [limb.name]..."), ignored_mobs=victim)
+ to_chat(victim, span_userdanger("[user] begins twisting and straining your dislocated [limb.name]!"))
+ if(user.a_intent == INTENT_HELP)
+ chiropractice(user)
+ else
+ malpractice(user)
+ return TRUE
+
+/// If someone is snapping our dislocated joint back into place by hand with an aggro grab and help intent
+/datum/wound/blunt/moderate/proc/chiropractice(mob/living/carbon/human/user)
+ var/time = base_treat_time
+
+ if(!do_after(user, time, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+
+ if(prob(65))
+ user.visible_message(span_danger("[user] snaps [victim]'s dislocated [limb.name] back into place!"), span_notice("You snap [victim]'s dislocated [limb.name] back into place!"), ignored_mobs=victim)
+ to_chat(victim, span_userdanger("[user] snaps your dislocated [limb.name] back into place!"))
+ victim.emote("scream")
+ limb.receive_damage(brute=20, wound_bonus=CANT_WOUND)
+ qdel(src)
+ else
+ user.visible_message(span_danger("[user] wrenches [victim]'s dislocated [limb.name] around painfully!"), span_danger("You wrench [victim]'s dislocated [limb.name] around painfully!"), ignored_mobs=victim)
+ to_chat(victim, span_userdanger("[user] wrenches your dislocated [limb.name] around painfully!"))
+ limb.receive_damage(brute=10, wound_bonus=CANT_WOUND)
+ chiropractice(user)
+
+/// If someone is snapping our dislocated joint into a fracture by hand with an aggro grab and harm or disarm intent
+/datum/wound/blunt/moderate/proc/malpractice(mob/living/carbon/human/user)
+ var/time = base_treat_time
+
+ if(!do_after(user, time, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+
+ if(prob(65))
+ user.visible_message(span_danger("[user] snaps [victim]'s dislocated [limb.name] with a sickening crack!"), span_danger("You snap [victim]'s dislocated [limb.name] with a sickening crack!"), ignored_mobs=victim)
+ to_chat(victim, span_userdanger("[user] snaps your dislocated [limb.name] with a sickening crack!"))
+ victim.emote("scream")
+ limb.receive_damage(brute=25, wound_bonus=30)
+ else
+ user.visible_message(span_danger("[user] wrenches [victim]'s dislocated [limb.name] around painfully!"), span_danger("You wrench [victim]'s dislocated [limb.name] around painfully!"), ignored_mobs=victim)
+ to_chat(victim, span_userdanger("[user] wrenches your dislocated [limb.name] around painfully!"))
+ limb.receive_damage(brute=10, wound_bonus=CANT_WOUND)
+ malpractice(user)
+
+
+/datum/wound/blunt/moderate/treat(obj/item/I, mob/user)
+ if(victim == user)
+ victim.visible_message(span_danger("[user] begins resetting [victim.p_their()] [limb.name] with [I]."), span_warning("You begin resetting your [limb.name] with [I]..."))
+ else
+ user.visible_message(span_danger("[user] begins resetting [victim]'s [limb.name] with [I]."), span_notice("You begin resetting [victim]'s [limb.name] with [I]..."))
+
+ if(!do_after(user, base_treat_time * (user == victim ? 1.5 : 1), target = victim, extra_checks=CALLBACK(src, .proc/still_exists)))
+ return
+
+ if(victim == user)
+ limb.receive_damage(brute=15, wound_bonus=CANT_WOUND)
+ victim.visible_message(span_danger("[user] finishes resetting [victim.p_their()] [limb.name]!"), span_userdanger("You reset your [limb.name]!"))
+ else
+ limb.receive_damage(brute=10, wound_bonus=CANT_WOUND)
+ user.visible_message(span_danger("[user] finishes resetting [victim]'s [limb.name]!"), span_nicegreen("You finish resetting [victim]'s [limb.name]!"), victim)
+ to_chat(victim, span_userdanger("[user] resets your [limb.name]!"))
+
+ victim.emote("scream")
+ qdel(src)
+
+/*
+ Severe (Hairline Fracture)
+*/
+
+/datum/wound/blunt/severe
+ name = "Hairline Fracture"
+ desc = "Patient's bone has suffered a crack in the foundation, causing serious pain and reduced limb functionality."
+ treat_text = "Recommended light surgical application of bone gel, though a sling of medical gauze will prevent worsening situation."
+ examine_desc = "appears grotesquely swollen, its attachment weakened"
+ occur_text = "sprays chips of bone and develops a nasty looking bruise"
+
+ severity = WOUND_SEVERITY_SEVERE
+ interaction_efficiency_penalty = 2
+ limp_slowdown = 6
+ threshold_minimum = 60
+ threshold_penalty = 30
+ treatable_by = list(/obj/item/stack/medical/bone_gel)
+ status_effect_type = /datum/status_effect/wound/blunt/severe
+ scar_keyword = "bluntsevere"
+ brain_trauma_group = BRAIN_TRAUMA_MILD
+ trauma_cycle_cooldown = 1.5 MINUTES
+ internal_bleeding_chance = 40
+ wound_flags = (BONE_WOUND | ACCEPTS_GAUZE | MANGLES_BONE)
+ regen_ticks_needed = 120 // ticks every 2 seconds, 240 seconds, so roughly 4 minutes default
+
+/// Compound Fracture (Critical Blunt)
+/datum/wound/blunt/critical
+ name = "Compound Fracture"
+ desc = "Patient's bones have suffered multiple gruesome fractures, causing significant pain and near uselessness of limb."
+ treat_text = "Immediate binding of affected limb, followed by surgical intervention ASAP."
+ examine_desc = "is mangled and pulped, seemingly held together by tissue alone"
+ occur_text = "cracks apart, exposing broken bones to open air"
+
+ severity = WOUND_SEVERITY_CRITICAL
+ interaction_efficiency_penalty = 4
+ limp_slowdown = 9
+ sound_effect = 'sound/effects/wounds/crack2.ogg'
+ threshold_minimum = 115
+ threshold_penalty = 50
+ disabling = TRUE
+ treatable_by = list(/obj/item/stack/medical/bone_gel)
+ status_effect_type = /datum/status_effect/wound/blunt/critical
+ scar_keyword = "bluntcritical"
+ brain_trauma_group = BRAIN_TRAUMA_SEVERE
+ trauma_cycle_cooldown = 2.5 MINUTES
+ internal_bleeding_chance = 60
+ wound_flags = (BONE_WOUND | ACCEPTS_GAUZE | MANGLES_BONE)
+ regen_ticks_needed = 240 // ticks every 2 seconds, 480 seconds, so roughly 8 minutes default
+
+// doesn't make much sense for "a" bone to stick out of your head
+/datum/wound/blunt/critical/apply_wound(obj/item/bodypart/L, silent, datum/wound/old_wound, smited)
+ if(L.body_zone == BODY_ZONE_HEAD)
+ occur_text = "splits open, exposing a bare, cracked skull through the flesh and blood"
+ examine_desc = "has an unsettling indent, with bits of skull poking out"
+ . = ..()
+
+/// if someone is using bone gel on our wound
+/datum/wound/blunt/proc/gel(obj/item/stack/medical/bone_gel/I, mob/user)
+ if(gelled)
+ to_chat(user, span_warning("[user == victim ? "Your" : "[victim]'s"] [limb.name] is already coated with bone gel!"))
+ return
+
+ user.visible_message(span_danger("[user] begins hastily applying [I] to [victim]'s' [limb.name]..."), span_warning("You begin hastily applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.name], disregarding the warning label..."))
+
+ if(!do_after(user, base_treat_time * 1.5 * (user == victim ? 1.5 : 1), target = victim, extra_checks=CALLBACK(src, .proc/still_exists)))
+ return
+
+ I.use(1)
+ victim.emote("scream")
+ if(user != victim)
+ user.visible_message(span_notice("[user] finishes applying [I] to [victim]'s [limb.name], emitting a fizzing noise!"), span_notice("You finish applying [I] to [victim]'s [limb.name]!"), ignored_mobs=victim)
+ to_chat(victim, span_userdanger("[user] finishes applying [I] to your [limb.name], and you can feel the bones exploding with pain as they begin melting and reforming!"))
+ else
+ var/painkiller_bonus = 0
+ if(victim.drunkenness > 10)
+ painkiller_bonus += 10
+ if(victim.reagents?.has_reagent(/datum/reagent/medicine/morphine))
+ painkiller_bonus += 20
+ if(victim.reagents?.has_reagent(/datum/reagent/determination))
+ painkiller_bonus += 10
+
+ if(prob(25 + (20 * (severity - 2)) - painkiller_bonus)) // 25%/45% chance to fail self-applying with severe and critical wounds, modded by painkillers
+ victim.visible_message(span_danger("[victim] fails to finish applying [I] to [victim.p_their()] [limb.name], passing out from the pain!"), span_notice("You black out from the pain of applying [I] to your [limb.name] before you can finish!"))
+ victim.AdjustUnconscious(5 SECONDS)
+ return
+ regen_ticks_needed *= 1.5
+ victim.visible_message(span_notice("[victim] finishes applying [I] to [victim.p_their()] [limb.name], grimacing from the pain!"), span_notice("You finish applying [I] to your [limb.name], and your bones explode in pain!"))
+
+ limb.receive_damage(25, stamina=100, wound_bonus=CANT_WOUND)
+ if(!gelled)
+ gelled = TRUE
+ taped = TRUE
+ processes = TRUE
+
+/// if someone is using surgical tape on our wound
+/*datum/wound/blunt/proc/tape(obj/item/stack/sticky_tape/surgical/I, mob/user)
+ if(!gelled)
+ to_chat(user, span_warning("[user == victim ? "Your" : "[victim]'s"] [limb.name] must be coated with bone gel to perform this emergency operation!"))
+ return
+ if(taped)
+ to_chat(user, span_warning("[user == victim ? "Your" : "[victim]'s"] [limb.name] is already wrapped in [I.name] and reforming!"))
+ return
+
+ user.visible_message(span_danger("[user] begins applying [I] to [victim]'s' [limb.name]..."), span_warning("You begin applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]..."))
+
+ if(!do_after(user, base_treat_time * (user == victim ? 1.5 : 1), target = victim, extra_checks=CALLBACK(src, .proc/still_exists)))
+ return
+
+ if(victim == user)
+ regen_ticks_needed *= 1.5
+ I.use(1)
+ if(user != victim)
+ user.visible_message(span_notice("[user] finishes applying [I] to [victim]'s [limb.name], emitting a fizzing noise!"), span_notice("You finish applying [I] to [victim]'s [limb.name]!"), ignored_mobs=victim)
+ to_chat(victim, span_green("[user] finishes applying [I] to your [limb.name], you immediately begin to feel your bones start to reform!"))
+ else
+ victim.visible_message(span_notice("[victim] finishes applying [I] to [victim.p_their()] [limb.name], !"), span_green("You finish applying [I] to your [limb.name], and you immediately begin to feel your bones start to reform!"))
+
+ taped = TRUE
+ processes = TRUE*/
+
+/datum/wound/blunt/treat(obj/item/I, mob/user)
+ if(istype(I, /obj/item/stack/medical/bone_gel))
+ gel(I, user)
+ /*else if(istype(I, /obj/item/stack/sticky_tape/surgical))
+ tape(I, user)*/
+
+/datum/wound/blunt/get_scanner_description(mob/user)
+ . = ..()
+
+ . += ""
+
+ if(!gelled)
+ . += "Alternative Treatment: Apply bone gel directly to injured limb. This is both excruciatingly painful and slow, and only recommended in dire circumstances.\n"
+ //else if(!taped)
+ //. += "Continue Alternative Treatment: Apply surgical tape directly to injured limb to begin bone regeneration. Note, this is both excruciatingly painful and slow.\n"
+ else
+ . += "Note: Bone regeneration in effect. Bone is round [(regen_ticks_current*100/regen_ticks_needed)]% regenerated.\n"
+
+ if(limb.body_zone == BODY_ZONE_HEAD)
+ . += "Cranial Trauma Detected: Patient will suffer random bouts of [severity == WOUND_SEVERITY_SEVERE ? "mild" : "severe"] brain traumas until bone is repaired."
+ else if(limb.body_zone == BODY_ZONE_CHEST && victim.blood_volume)
+ . += "Ribcage Trauma Detected: Further trauma to chest is likely to worsen internal bleeding until bone is repaired."
+ . += "
"
diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm
new file mode 100644
index 000000000000..44e039eb54ee
--- /dev/null
+++ b/code/datums/wounds/burns.dm
@@ -0,0 +1,309 @@
+
+/*
+ Burn wounds
+*/
+
+// TODO: well, a lot really, but specifically I want to add potential fusing of clothing/equipment on the affected area, and limb infections, though those may go in body part code
+/datum/wound/burn
+ name = "Burn Wound"
+ a_or_from = "from"
+ wound_type = WOUND_BURN
+ processes = TRUE
+ sound_effect = 'sound/effects/wounds/sizzle1.ogg'
+ wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE)
+
+ treatable_by = list(/obj/item/stack/medical/ointment, /obj/item/stack/medical/mesh) // sterilizer and alcohol will require reagent treatments, coming soon
+
+ // Flesh damage vars
+ /// How much damage to our flesh we currently have. Once both this and infestation reach 0, the wound is considered healed
+ var/flesh_damage = 5
+ /// Our current counter for how much flesh regeneration we have stacked from regenerative mesh/synthflesh/whatever, decrements each tick and lowers flesh_damage
+ var/flesh_healing = 0
+
+ // Infestation vars (only for severe and critical)
+ /// How quickly infection breeds on this burn if we don't have disinfectant
+ var/infestation_rate = 0
+ /// Our current level of infection
+ var/infestation = 0
+ /// Our current level of sanitization/anti-infection, from disinfectants/alcohol/UV lights. While positive, totally pauses and slowly reverses infestation effects each tick
+ var/sanitization = 0
+
+ /// Once we reach infestation beyond WOUND_INFESTATION_SEPSIS, we get this many warnings before the limb is completely paralyzed (you'd have to ignore a really bad burn for a really long time for this to happen)
+ var/strikes_to_lose_limb = 4
+
+
+/datum/wound/burn/handle_process()
+ . = ..()
+ if(strikes_to_lose_limb == 0) // we've already hit sepsis, nothing more to do
+ victim.adjustToxLoss(0.5)
+ if(prob(1))
+ victim.visible_message(span_danger("The infection on the remnants of [victim]'s [limb.name] shift and bubble nauseatingly!"), span_warning("You can feel the infection on the remnants of your [limb.name] coursing through your veins!"), vision_distance = COMBAT_MESSAGE_RANGE)
+ return
+
+ if(victim.reagents)
+ if(victim.reagents.has_reagent(/datum/reagent/consumable/honey))
+ sanitization += 2
+ if(victim.reagents.has_reagent(/datum/reagent/medicine/spaceacillin))
+ sanitization += 0.9
+ if(victim.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine/))
+ sanitization += 0.9
+ if(victim.reagents.has_reagent(/datum/reagent/medicine/mine_salve))
+ sanitization += 0.3
+ flesh_healing += 0.5
+
+ if(limb.current_gauze)
+ limb.seep_gauze(WOUND_BURN_SANITIZATION_RATE)
+
+ if(flesh_healing > 0) // good bandages multiply the length of flesh healing
+ var/bandage_factor = (limb.current_gauze ? limb.current_gauze.splint_factor : 1)
+ flesh_damage = max(0, flesh_damage - 1)
+ flesh_healing = max(0, flesh_healing - bandage_factor)
+
+ // if we have little/no infection, the limb doesn't have much burn damage, and our nutrition is good, heal some flesh
+ if(infestation <= WOUND_INFECTION_MODERATE && (limb.burn_dam < 5) && (victim.nutrition >= NUTRITION_LEVEL_FED))
+ flesh_healing += 0.2
+
+ // here's the check to see if we're cleared up
+ if((flesh_damage <= 0) && (infestation <= WOUND_INFECTION_MODERATE))
+ to_chat(victim, span_green("The burns on your [limb.name] have cleared up!"))
+ qdel(src)
+ return
+
+ // sanitization is checked after the clearing check but before the actual ill-effects, because we freeze the effects of infection while we have sanitization
+ if(sanitization > 0)
+ var/bandage_factor = (limb.current_gauze ? limb.current_gauze.splint_factor : 1)
+ infestation = max(0, infestation - WOUND_BURN_SANITIZATION_RATE)
+ sanitization = max(0, sanitization - (WOUND_BURN_SANITIZATION_RATE * bandage_factor))
+ return
+
+ infestation += infestation_rate
+
+ switch(infestation)
+ if(0 to WOUND_INFECTION_MODERATE)
+ if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
+ if(prob(30))
+ victim.adjustToxLoss(0.2)
+ if(prob(6))
+ to_chat(victim, span_warning("The blisters on your [limb.name] ooze a strange pus..."))
+ if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
+ if(!disabling && prob(2))
+ to_chat(victim, span_warning("Your [limb.name] completely locks up, as you struggle for control against the infection!"))
+ set_disabling(TRUE)
+ else if(disabling && prob(8))
+ to_chat(victim, span_notice("You regain sensation in your [limb.name], but it's still in terrible shape!"))
+ set_disabling(FALSE)
+ else if(prob(20))
+ victim.adjustToxLoss(0.5)
+ if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
+ if(!disabling && prob(3))
+ to_chat(victim, span_warning("You suddenly lose all sensation of the festering infection in your [limb.name]!"))
+ set_disabling(TRUE)
+ else if(disabling && prob(3))
+ to_chat(victim, span_notice("You can barely feel your [limb.name] again, and you have to strain to retain motor control!"))
+ set_disabling(FALSE)
+ else if(prob(1))
+ to_chat(victim, span_warning("You contemplate life without your [limb.name]..."))
+ victim.adjustToxLoss(0.75)
+ else if(prob(4))
+ victim.adjustToxLoss(1)
+ if(WOUND_INFECTION_SEPTIC to INFINITY)
+ if(prob(0.5 * infestation))
+ strikes_to_lose_limb--
+ switch(strikes_to_lose_limb)
+ if(3 to INFINITY)
+ to_chat(victim, span_deadsay("The skin on your [limb.name] is literally dripping off, you feel awful!"))
+ if(2)
+ to_chat(victim, span_deadsay("The infection in your [limb.name] is literally dripping off, you feel horrible!"))
+ if(1)
+ to_chat(victim, span_deadsay("Infection has just about completely claimed your [limb.name]!"))
+ if(0)
+ to_chat(victim, span_deadsay("The last of the nerve endings in your [limb.name] wither away, as the infection completely paralyzes your joint connector."))
+ threshold_penalty = 120 // piss easy to destroy
+ var/datum/brain_trauma/severe/paralysis/sepsis = new (limb.body_zone)
+ victim.gain_trauma(sepsis)
+
+/datum/wound/burn/get_examine_description(mob/user)
+ if(strikes_to_lose_limb <= 0)
+ return span_deadsay("[victim.p_their(TRUE)] [limb.name] has locked up completely and is non-functional.")
+
+ var/list/condition = list("[victim.p_their(TRUE)] [limb.name] [examine_desc]")
+ if(limb.current_gauze)
+ var/bandage_condition
+ switch(limb.current_gauze.absorption_capacity)
+ if(0 to 1.25)
+ bandage_condition = "nearly ruined"
+ if(1.25 to 2.75)
+ bandage_condition = "badly worn"
+ if(2.75 to 4)
+ bandage_condition = "slightly pus-stained"
+ if(4 to INFINITY)
+ bandage_condition = "clean"
+
+ condition += " underneath a dressing of [bandage_condition] [limb.current_gauze.name]"
+ else
+ switch(infestation)
+ if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
+ condition += ", with early signs of infection."
+ if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
+ condition += ", with growing clouds of infection."
+ if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
+ condition += ", with streaks of rotten, pulsating infection!"
+ if(WOUND_INFECTION_SEPTIC to INFINITY)
+ return span_deadsay("[victim.p_their(TRUE)] [limb.name] is a mess of charred skin and infected rot!")
+ else
+ condition += "!"
+
+ return "[condition.Join()]"
+
+/datum/wound/burn/get_scanner_description(mob/user)
+ if(strikes_to_lose_limb == 0)
+ var/oopsie = "Type: [name]\nSeverity: [severity_text()]"
+ oopsie += "Infection Level: The bodypart has suffered complete sepsis and must be removed. Amputate or augment limb immediately.
"
+ return oopsie
+
+ . = ..()
+ . += ""
+
+ if(infestation <= sanitization && flesh_damage <= flesh_healing)
+ . += "No further treatment required: Burns will heal shortly."
+ else
+ switch(infestation)
+ if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
+ . += "Infection Level: Moderate\n"
+ if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
+ . += "Infection Level: Severe\n"
+ if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
+ . += "Infection Level: CRITICAL\n"
+ if(WOUND_INFECTION_SEPTIC to INFINITY)
+ . += "Infection Level: LOSS IMMINENT\n"
+ if(infestation > sanitization)
+ . += "\tSurgical debridement, antiobiotics/sterilizers, or regenerative mesh will rid infection. Paramedic UV penlights are also effective.\n"
+
+ if(flesh_damage > 0)
+ . += "Flesh damage detected: Application of ointment, regenerative mesh, Synthflesh, or ingestion of \"Miner's Salve\" will repair damaged flesh. Good nutrition, rest, and keeping the wound clean can also slowly repair flesh.\n"
+ . += "
"
+
+/*
+ new burn common procs
+*/
+
+/// if someone is using ointment on our burns
+/datum/wound/burn/proc/ointment(obj/item/stack/medical/ointment/I, mob/user)
+ user.visible_message(span_notice("[user] begins applying [I] to [victim]'s [limb.name]..."), span_notice("You begin applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]..."))
+ if(!do_after(user, (user == victim ? I.self_delay : I.other_delay), extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+
+ limb.heal_damage(I.heal_brute, I.heal_burn)
+ user.visible_message(span_green("[user] applies [I] to [victim]."), span_green("You apply [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]."))
+ I.use(1)
+ sanitization += I.sanitization
+ flesh_healing += I.flesh_regeneration
+
+ if((infestation <= 0 || sanitization >= infestation) && (flesh_damage <= 0 || flesh_healing > flesh_damage))
+ to_chat(user, span_notice("You've done all you can with [I], now you must wait for the flesh on [victim]'s [limb.name] to recover."))
+ else
+ try_treating(I, user)
+
+/// if someone is using mesh on our burns
+/datum/wound/burn/proc/mesh(obj/item/stack/medical/mesh/I, mob/user)
+ if(!I.is_open)
+ to_chat(user, span_warning("You need to open [I] first."))
+ return
+ user.visible_message(span_notice("[user] begins wrapping [victim]'s [limb.name] with [I]..."), span_notice("You begin wrapping [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]..."))
+ if(!do_after(user, (user == victim ? I.self_delay : I.other_delay), target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+
+ limb.heal_damage(I.heal_brute, I.heal_burn)
+ user.visible_message(span_green("[user] applies [I] to [victim]."), span_green("You apply [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]."))
+ I.use(1)
+ sanitization += I.sanitization
+ flesh_healing += I.flesh_regeneration
+
+ if(sanitization >= infestation && flesh_healing > flesh_damage)
+ to_chat(user, span_notice("You've done all you can with [I], now you must wait for the flesh on [victim]'s [limb.name] to recover."))
+ else
+ try_treating(I, user)
+
+/// Paramedic UV penlights
+/datum/wound/burn/proc/uv(obj/item/flashlight/pen/paramedic/I, mob/user)
+ if(!COOLDOWN_FINISHED(I, uv_cooldown))
+ to_chat(user, span_notice("[I] is still recharging!"))
+ return
+ if(infestation <= 0 || infestation < sanitization)
+ to_chat(user, span_notice("There's no infection to treat on [victim]'s [limb.name]!"))
+ return
+
+ user.visible_message(span_notice("[user] flashes the burns on [victim]'s [limb] with [I]."), span_notice("You flash the burns on [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]."), vision_distance=COMBAT_MESSAGE_RANGE)
+ sanitization += I.uv_power
+ COOLDOWN_START(I, uv_cooldown, I.uv_cooldown_length)
+
+/datum/wound/burn/treat(obj/item/I, mob/user)
+ if(istype(I, /obj/item/stack/medical/ointment))
+ ointment(I, user)
+ else if(istype(I, /obj/item/stack/medical/mesh))
+ mesh(I, user)
+ else if(istype(I, /obj/item/flashlight/pen/paramedic))
+ uv(I, user)
+
+// people complained about burns not healing on stasis beds, so in addition to checking if it's cured, they also get the special ability to very slowly heal on stasis beds if they have the healing effects stored
+/datum/wound/burn/on_stasis()
+ . = ..()
+ if(flesh_healing > 0)
+ flesh_damage = max(0, flesh_damage - 0.2)
+ if((flesh_damage <= 0) && (infestation <= 1))
+ to_chat(victim, span_green("The burns on your [limb.name] have cleared up!"))
+ qdel(src)
+ return
+ if(sanitization > 0)
+ infestation = max(0, infestation - WOUND_BURN_SANITIZATION_RATE * 0.2)
+
+/datum/wound/burn/on_synthflesh(amount)
+ flesh_healing += amount * 0.5 // 20u patch will heal 10 flesh standard
+
+// we don't even care about first degree burns, straight to second
+/datum/wound/burn/moderate
+ name = "Second Degree Burns"
+ desc = "Patient is suffering considerable burns with mild skin penetration, weakening limb integrity and increased burning sensations."
+ treat_text = "Recommended application of topical ointment or regenerative mesh to affected region."
+ examine_desc = "is badly burned and breaking out in blisters"
+ occur_text = "breaks out with violent red burns"
+ severity = WOUND_SEVERITY_MODERATE
+ damage_mulitplier_penalty = 1.1
+ threshold_minimum = 40
+ threshold_penalty = 30 // burns cause significant decrease in limb integrity compared to other wounds
+ status_effect_type = /datum/status_effect/wound/burn/moderate
+ flesh_damage = 5
+ scar_keyword = "burnmoderate"
+
+/datum/wound/burn/severe
+ name = "Third Degree Burns"
+ desc = "Patient is suffering extreme burns with full skin penetration, creating serious risk of infection and greatly reduced limb integrity."
+ treat_text = "Recommended immediate disinfection and excision of any infected skin, followed by bandaging and ointment."
+ examine_desc = "appears seriously charred, with aggressive red splotches"
+ occur_text = "chars rapidly, exposing ruined tissue and spreading angry red burns"
+ severity = WOUND_SEVERITY_SEVERE
+ damage_mulitplier_penalty = 1.2
+ threshold_minimum = 80
+ threshold_penalty = 40
+ status_effect_type = /datum/status_effect/wound/burn/severe
+ treatable_by = list(/obj/item/flashlight/pen/paramedic, /obj/item/stack/medical/ointment, /obj/item/stack/medical/mesh)
+ infestation_rate = 0.07 // appx 9 minutes to reach sepsis without any treatment
+ flesh_damage = 12.5
+ scar_keyword = "burnsevere"
+
+/datum/wound/burn/critical
+ name = "Catastrophic Burns"
+ desc = "Patient is suffering near complete loss of tissue and significantly charred muscle and bone, creating life-threatening risk of infection and negligible limb integrity."
+ treat_text = "Immediate surgical debriding of any infected skin, followed by potent tissue regeneration formula and bandaging."
+ examine_desc = "is a ruined mess of blanched bone, melted fat, and charred tissue"
+ occur_text = "vaporizes as flesh, bone, and fat melt together in a horrifying mess"
+ severity = WOUND_SEVERITY_CRITICAL
+ damage_mulitplier_penalty = 1.3
+ sound_effect = 'sound/effects/wounds/sizzle2.ogg'
+ threshold_minimum = 140
+ threshold_penalty = 80
+ status_effect_type = /datum/status_effect/wound/burn/critical
+ treatable_by = list(/obj/item/flashlight/pen/paramedic, /obj/item/stack/medical/ointment, /obj/item/stack/medical/mesh)
+ infestation_rate = 0.15 // appx 4.33 minutes to reach sepsis without any treatment
+ flesh_damage = 20
+ scar_keyword = "burncritical"
diff --git a/code/datums/wounds/loss.dm b/code/datums/wounds/loss.dm
new file mode 100644
index 000000000000..e037183157b9
--- /dev/null
+++ b/code/datums/wounds/loss.dm
@@ -0,0 +1,53 @@
+
+/datum/wound/loss
+ name = "Dismemberment Wound"
+ desc = "oof ouch!!"
+
+ sound_effect = 'sound/effects/dismember.ogg'
+ severity = WOUND_SEVERITY_LOSS
+ threshold_minimum = WOUND_DISMEMBER_OUTRIGHT_THRESH // not actually used since dismembering is handled differently, but may as well assign it since we got it
+ status_effect_type = null
+ scar_keyword = "dismember"
+ wound_flags = null
+ already_scarred = TRUE // We manually assign scars for dismembers through endround missing limbs and aheals
+
+/// Our special proc for our special dismembering, the wounding type only matters for what text we have
+/datum/wound/loss/proc/apply_dismember(obj/item/bodypart/dismembered_part, wounding_type=WOUND_SLASH, outright = FALSE)
+ if(!istype(dismembered_part) || !dismembered_part.owner || !(dismembered_part.body_zone in viable_zones) || isalien(dismembered_part.owner) || !dismembered_part.can_dismember())
+ qdel(src)
+ return
+
+ if(dismembered_part.body_zone == BODY_ZONE_CHEST)
+ occur_text = "is split open, causing [victim.p_their()] internals organs to spill out!"
+ else if(outright)
+ switch(wounding_type)
+ if(WOUND_BLUNT)
+ occur_text = "is outright smashed to a gross pulp, severing it completely!"
+ if(WOUND_SLASH)
+ occur_text = "is outright slashed off, severing it completely!"
+ if(WOUND_PIERCE)
+ occur_text = "is outright blasted apart, severing it completely!"
+ if(WOUND_BURN)
+ occur_text = "is outright incinerated, falling to dust!"
+ else
+ switch(wounding_type)
+ if(WOUND_BLUNT)
+ occur_text = "is shattered through the last bone holding it together, severing it completely!"
+ if(WOUND_SLASH)
+ occur_text = "is slashed through the last tissue holding it together, severing it completely!"
+ if(WOUND_PIERCE)
+ occur_text = "is pierced through the last tissue holding it together, severing it completely!"
+ if(WOUND_BURN)
+ occur_text = "is completely incinerated, falling to dust!"
+ victim = dismembered_part.owner
+
+ var/msg = span_bolddanger("[victim]'s [dismembered_part.name] [occur_text]!")
+
+ victim.visible_message(msg, span_userdanger("Your [dismembered_part.name] [occur_text]!"))
+
+ set_limb(dismembered_part)
+ second_wind()
+ log_wound(victim, src)
+ dismembered_part.dismember(wounding_type == WOUND_BURN ? BURN : BRUTE)
+ qdel(src)
+ return TRUE
diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm
new file mode 100644
index 000000000000..850cb4e3c5d7
--- /dev/null
+++ b/code/datums/wounds/pierce.dm
@@ -0,0 +1,186 @@
+
+/*
+ Piercing wounds
+*/
+
+/datum/wound/pierce
+ name = "Piercing Wound"
+ sound_effect = 'sound/weapons/slice.ogg'
+ processes = TRUE
+ wound_type = WOUND_PIERCE
+ treatable_by = list(/obj/item/stack/medical/suture)
+ treatable_tool = TOOL_CAUTERY
+ base_treat_time = 3 SECONDS
+ wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE)
+
+ /// How much blood we start losing when this wound is first applied
+ var/initial_flow
+ /// If gauzed, what percent of the internal bleeding actually clots of the total absorption rate
+ var/gauzed_clot_rate
+
+ /// When hit on this bodypart, we have this chance of losing some blood + the incoming damage
+ var/internal_bleeding_chance
+ /// If we let off blood when hit, the max blood lost is this * the incoming damage
+ var/internal_bleeding_coefficient
+
+/datum/wound/pierce/wound_injury(datum/wound/old_wound)
+ blood_flow = initial_flow
+
+/datum/wound/pierce/receive_damage(wounding_type, wounding_dmg, wound_bonus)
+ if(victim.stat == DEAD || wounding_dmg < 5)
+ return
+ if(victim.blood_volume && prob(internal_bleeding_chance + wounding_dmg))
+ if(limb.current_gauze && limb.current_gauze.splint_factor)
+ wounding_dmg *= (1 - limb.current_gauze.splint_factor)
+ var/blood_bled = rand(1, wounding_dmg * internal_bleeding_coefficient) // 12 brute toolbox can cause up to 15/18/21 bloodloss on mod/sev/crit
+ switch(blood_bled)
+ if(1 to 6)
+ victim.bleed(blood_bled, TRUE)
+ if(7 to 13)
+ victim.visible_message(span_smalldanger("Blood droplets fly from the hole in [victim]'s [limb.name]."), span_danger("You cough up a bit of blood from the blow to your [limb.name]."), vision_distance=COMBAT_MESSAGE_RANGE)
+ victim.bleed(blood_bled, TRUE)
+ if(14 to 19)
+ victim.visible_message(span_smalldanger("A small stream of blood spurts from the hole in [victim]'s [limb.name]!"), span_danger("You spit out a string of blood from the blow to your [limb.name]!"), vision_distance=COMBAT_MESSAGE_RANGE)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
+ victim.bleed(blood_bled)
+ if(20 to INFINITY)
+ victim.visible_message(span_danger("A spray of blood streams from the gash in [victim]'s [limb.name]!"), span_danger("You choke up on a spray of blood from the blow to your [limb.name]!"), vision_distance=COMBAT_MESSAGE_RANGE)
+ victim.bleed(blood_bled)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
+ victim.add_splatter_floor(get_step(victim.loc, victim.dir))
+
+/datum/wound/pierce/get_bleed_rate_of_change()
+ if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
+ return BLOOD_FLOW_INCREASING
+ if(limb.current_gauze)
+ return BLOOD_FLOW_DECREASING
+ return BLOOD_FLOW_STEADY
+
+/datum/wound/pierce/handle_process()
+ blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
+
+ if(victim.bodytemperature < (BODYTEMP_NORMAL - 10))
+ blood_flow -= 0.2
+ if(prob(5))
+ to_chat(victim, span_notice("You feel the [lowertext(name)] in your [limb.name] firming up from the cold!"))
+
+ if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
+ blood_flow += 0.5 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
+
+ if(limb.current_gauze)
+ blood_flow -= limb.current_gauze.absorption_rate * gauzed_clot_rate
+ limb.current_gauze.absorption_capacity -= limb.current_gauze.absorption_rate
+
+ if(blood_flow <= 0)
+ qdel(src)
+
+/datum/wound/pierce/on_stasis()
+ . = ..()
+ if(blood_flow <= 0)
+ qdel(src)
+
+/datum/wound/pierce/check_grab_treatments(obj/item/I, mob/user)
+ if(I.get_temperature()) // if we're using something hot but not a cautery, we need to be aggro grabbing them first, so we don't try treating someone we're eswording
+ return TRUE
+
+/datum/wound/pierce/treat(obj/item/I, mob/user)
+ if(istype(I, /obj/item/stack/medical/suture))
+ suture(I, user)
+ else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature() > 300)
+ tool_cauterize(I, user)
+
+/datum/wound/pierce/on_xadone(power)
+ . = ..()
+ blood_flow -= 0.03 * power // i think it's like a minimum of 3 power, so .09 blood_flow reduction per tick is pretty good for 0 effort
+
+/datum/wound/pierce/on_synthflesh(power)
+ . = ..()
+ blood_flow -= 0.05 * power // 20u * 0.05 = -1 blood flow, less than with slashes but still good considering smaller bleed rates
+
+/// If someone is using a suture to close this puncture
+/datum/wound/pierce/proc/suture(obj/item/stack/medical/suture/I, mob/user)
+ var/self_penalty_mult = (user == victim ? 1.4 : 1)
+ user.visible_message(span_notice("[user] begins stitching [victim]'s [limb.name] with [I]..."), span_notice("You begin stitching [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]..."))
+ if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+ user.visible_message(span_green("[user] stitches up some of the bleeding on [victim]."), span_green("You stitch up some of the bleeding on [user == victim ? "yourself" : "[victim]"]."))
+ var/blood_sutured = I.stop_bleeding / self_penalty_mult
+ blood_flow -= blood_sutured
+ limb.heal_damage(I.heal_brute, I.heal_burn)
+ I.use(1)
+
+ if(blood_flow > 0)
+ try_treating(I, user)
+ else
+ to_chat(user, span_green("You successfully close the hole in [user == victim ? "your" : "[victim]'s"] [limb.name]."))
+
+/// If someone is using either a cautery tool or something with heat to cauterize this pierce
+/datum/wound/pierce/proc/tool_cauterize(obj/item/I, mob/user)
+ var/improv_penalty_mult = (I.tool_behaviour == TOOL_CAUTERY ? 1 : 1.25) // 25% longer and less effective if you don't use a real cautery
+ var/self_penalty_mult = (user == victim ? 1.5 : 1) // 50% longer and less effective if you do it to yourself
+
+ user.visible_message(span_danger("[user] begins cauterizing [victim]'s [limb.name] with [I]..."), span_warning("You begin cauterizing [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]..."))
+ if(!do_after(user, base_treat_time * self_penalty_mult * improv_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+
+ user.visible_message(span_green("[user] cauterizes some of the bleeding on [victim]."), span_green("You cauterize some of the bleeding on [victim]."))
+ limb.receive_damage(burn = 2 + severity, wound_bonus = CANT_WOUND)
+ if(prob(30))
+ victim.emote("scream")
+ var/blood_cauterized = (0.6 / (self_penalty_mult * improv_penalty_mult))
+ blood_flow -= blood_cauterized
+
+ if(blood_flow > 0)
+ try_treating(I, user)
+
+/datum/wound/pierce/moderate
+ name = "Minor Breakage"
+ desc = "Patient's skin has been broken open, causing severe bruising and minor internal bleeding in affected area."
+ treat_text = "Treat affected site with bandaging or exposure to extreme cold. In dire cases, brief exposure to vacuum may suffice." // space is cold in ss13, so it's like an ice pack!
+ examine_desc = "has a small, circular hole, gently bleeding"
+ occur_text = "spurts out a thin stream of blood"
+ sound_effect = 'sound/effects/wounds/pierce1.ogg'
+ severity = WOUND_SEVERITY_MODERATE
+ initial_flow = 1.5
+ gauzed_clot_rate = 0.8
+ internal_bleeding_chance = 30
+ internal_bleeding_coefficient = 1.25
+ threshold_minimum = 30
+ threshold_penalty = 2
+ status_effect_type = /datum/status_effect/wound/pierce/moderate
+ scar_keyword = "piercemoderate"
+
+/datum/wound/pierce/severe
+ name = "Open Puncture"
+ desc = "Patient's internal tissue is penetrated, causing sizeable internal bleeding and reduced limb stability."
+ treat_text = "Repair punctures in skin by suture or cautery, extreme cold may also work."
+ examine_desc = "is pierced clear through, with bits of tissue obscuring the open hole"
+ occur_text = "looses a violent spray of blood, revealing a pierced wound"
+ sound_effect = 'sound/effects/wounds/pierce2.ogg'
+ severity = WOUND_SEVERITY_SEVERE
+ initial_flow = 2.25
+ gauzed_clot_rate = 0.6
+ internal_bleeding_chance = 60
+ internal_bleeding_coefficient = 1.5
+ threshold_minimum = 50
+ threshold_penalty = 35
+ status_effect_type = /datum/status_effect/wound/pierce/severe
+ scar_keyword = "piercesevere"
+
+/datum/wound/pierce/critical
+ name = "Ruptured Cavity"
+ desc = "Patient's internal tissue and circulatory system is shredded, causing significant internal bleeding and damage to internal organs."
+ treat_text = "Surgical repair of puncture wound, followed by supervised resanguination."
+ examine_desc = "is ripped clear through, barely held together by exposed bone"
+ occur_text = "blasts apart, sending chunks of viscera flying in all directions"
+ sound_effect = 'sound/effects/wounds/pierce3.ogg'
+ severity = WOUND_SEVERITY_CRITICAL
+ initial_flow = 3
+ gauzed_clot_rate = 0.4
+ internal_bleeding_chance = 80
+ internal_bleeding_coefficient = 1.75
+ threshold_minimum = 100
+ threshold_penalty = 50
+ status_effect_type = /datum/status_effect/wound/pierce/critical
+ scar_keyword = "piercecritical"
+ wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE | MANGLES_FLESH)
diff --git a/code/datums/wounds/scars/_scars.dm b/code/datums/wounds/scars/_scars.dm
new file mode 100644
index 000000000000..21cb09b201d7
--- /dev/null
+++ b/code/datums/wounds/scars/_scars.dm
@@ -0,0 +1,163 @@
+/**
+ * scars are cosmetic datums that are assigned to bodyparts once they recover from wounds. Each wound type and severity have their own descriptions for what the scars
+ * look like, and then each body part has a list of "specific locations" like your elbow or wrist or wherever the scar can appear, to make it more interesting than "right arm"
+ *
+ *
+ * Arguments:
+ * *
+ */
+/datum/scar
+ var/obj/item/bodypart/limb
+ var/mob/living/carbon/victim
+ /// The severity of the scar, derived from the worst severity a wound was at before it was healed (see: slashes), determines how visible/bold the scar description is
+ var/severity
+ /// The description of the scar for examining
+ var/description
+ /// A string detailing the specific part of the bodypart the scar is on, for fluff purposes. See [/datum/scar/proc/generate]
+ var/precise_location
+
+ /// These scars are assumed to come from changeling disguises, rather than from persistence or wounds. As such, they are deleted by dropping changeling disguises, and are ignored by persistence
+ var/fake=FALSE
+
+ /// How many tiles away someone can see this scar, goes up with severity. Clothes covering this limb will decrease visibility by 1 each, except for the head/face which is a binary "is mask obscuring face" check
+ var/visibility = 2
+ /// Whether this scar can actually be covered up by clothing
+ var/coverable = TRUE
+ /// Obviously, scars that describe damaged flesh wouldn't apply to a skeleton (in some cases like bone wounds, there can be different descriptions for skeletons and fleshy humanoids)
+ var/biology = BIO_FLESH_BONE
+ /// If we're a persistent scar or may become one, we go in this character slot
+ var/persistent_character_slot = 0
+
+/datum/scar/Destroy(force, ...)
+ if(limb)
+ LAZYREMOVE(limb.scars, src)
+ if(victim)
+ LAZYREMOVE(victim.all_scars, src)
+ . = ..()
+
+/**
+ * generate() is used to actually fill out the info for a scar, according to the limb and wound it is provided.
+ *
+ * After creating a scar, call this on it while targeting the scarred bodypart with a given wound to apply the scar.
+ *
+ * Arguments:
+ * * BP- The bodypart being targeted
+ * * W- The wound being used to generate the severity and description info
+ * * add_to_scars- Should always be TRUE unless you're just storing a scar for later usage, like how cuts want to store a scar for the highest severity of cut, rather than the severity when the wound is fully healed (probably demoted to moderate)
+ */
+/datum/scar/proc/generate(obj/item/bodypart/BP, datum/wound/W, add_to_scars=TRUE)
+ limb = BP
+ severity = W.severity
+ if(limb.owner)
+ victim = limb.owner
+ persistent_character_slot = victim.mind?.original_character_slot_index
+ if(add_to_scars)
+ LAZYADD(limb.scars, src)
+ if(victim)
+ LAZYADD(victim.all_scars, src)
+
+ biology = victim?.get_biological_state() || BIO_FLESH_BONE
+
+ if(biology == BIO_JUST_BONE)
+ description = pick_list(BONE_SCAR_FILE, W.scar_keyword) || "general disfigurement"
+ else // no specific support for flesh w/o bone scars since it's not really useful
+ description = pick_list(FLESH_SCAR_FILE, W.scar_keyword) || "general disfigurement"
+
+ precise_location = pick_list_replacements(SCAR_LOC_FILE, limb.body_zone)
+ switch(W.severity)
+ if(WOUND_SEVERITY_MODERATE)
+ visibility = 2
+ if(WOUND_SEVERITY_SEVERE)
+ visibility = 3
+ if(WOUND_SEVERITY_CRITICAL)
+ visibility = 5
+ if(WOUND_SEVERITY_LOSS)
+ visibility = 7
+ precise_location = "amputation"
+
+/// Used when we finalize a scar from a healing cut
+/datum/scar/proc/lazy_attach(obj/item/bodypart/BP, datum/wound/W)
+ LAZYADD(BP.scars, src)
+ if(BP.owner)
+ victim = BP.owner
+ LAZYADD(victim.all_scars, src)
+
+/// Used to "load" a persistent scar
+/datum/scar/proc/load(obj/item/bodypart/BP, version, description, specific_location, severity=WOUND_SEVERITY_SEVERE, biology=BIO_FLESH_BONE, char_slot)
+ if(!BP.is_organic_limb())
+ qdel(src)
+ return
+
+ limb = BP
+ if(limb.owner)
+ victim = limb.owner
+ if(victim.get_biological_state() != biology)
+ qdel(src)
+ return
+ LAZYADD(victim.all_scars, src)
+
+ src.severity = severity
+ src.biology = biology
+ persistent_character_slot = char_slot
+ LAZYADD(limb.scars, src)
+
+ src.description = description
+ precise_location = specific_location
+ switch(severity)
+ if(WOUND_SEVERITY_MODERATE)
+ visibility = 2
+ if(WOUND_SEVERITY_SEVERE)
+ visibility = 3
+ if(WOUND_SEVERITY_CRITICAL)
+ visibility = 5
+ if(WOUND_SEVERITY_LOSS)
+ visibility = 7
+ return src
+
+/// What will show up in examine_more() if this scar is visible
+/datum/scar/proc/get_examine_description(mob/viewer)
+ if(!victim || !is_visible(viewer))
+ return
+
+ var/msg = "[victim.p_they(TRUE)] [victim.p_have()] [description] on [victim.p_their()] [precise_location]."
+ switch(severity)
+ if(WOUND_SEVERITY_MODERATE)
+ msg = span_tinynoticeital("[msg]")
+ if(WOUND_SEVERITY_SEVERE)
+ msg = span_smallnoticeital("[msg]")
+ if(WOUND_SEVERITY_CRITICAL)
+ msg = span_smallnoticeital("[msg]")
+ if(WOUND_SEVERITY_LOSS)
+ msg = "[victim.p_their(TRUE)] [limb.name] [description]." // different format
+ msg = span_notice("[msg]")
+ return "\t[msg]"
+
+/// Whether a scar can currently be seen by the viewer
+/datum/scar/proc/is_visible(mob/viewer)
+ if(!victim || !viewer)
+ return
+ if(get_dist(viewer, victim) > visibility)
+ return
+
+ if(!ishuman(victim) || isobserver(viewer) || victim == viewer)
+ return TRUE
+
+ var/mob/living/carbon/human/human_victim = victim
+ if(istype(limb, /obj/item/bodypart/head))
+ if((human_victim.wear_mask && (human_victim.wear_mask.flags_inv & HIDEFACE)) || (human_victim.head && (human_victim.head.flags_inv & HIDEFACE)))
+ return FALSE
+ else if(limb.scars_covered_by_clothes)
+ var/num_covers = LAZYLEN(human_victim.clothingonpart(limb))
+ if(num_covers + get_dist(viewer, victim) >= visibility)
+ return FALSE
+
+ return TRUE
+
+/// Used to format a scar to save for either persistent scars, or for changeling disguises
+/datum/scar/proc/format()
+ return fake ? null : "[SCAR_CURRENT_VERSION]|[limb.body_zone]|[description]|[precise_location]|[severity]|[biology]|[persistent_character_slot]"
+
+/// Used to format a scar to save in preferences for persistent scars
+/datum/scar/proc/format_amputated(body_zone)
+ description = pick_list(FLESH_SCAR_FILE, "dismemberment")
+ return "[SCAR_CURRENT_VERSION]|[body_zone]|[description]|amputated|[WOUND_SEVERITY_LOSS]|[BIO_FLESH_BONE]|[persistent_character_slot]"
diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm
new file mode 100644
index 000000000000..253efffca442
--- /dev/null
+++ b/code/datums/wounds/slash.dm
@@ -0,0 +1,299 @@
+
+/*
+ Slashing wounds
+*/
+
+/datum/wound/slash
+ name = "Slashing (Cut) Wound"
+ sound_effect = 'sound/weapons/slice.ogg'
+ processes = TRUE
+ wound_type = WOUND_SLASH
+ treatable_by = list(/obj/item/stack/medical/suture)
+ treatable_by_grabbed = list(/obj/item/gun/energy/laser)
+ treatable_tool = TOOL_CAUTERY
+ base_treat_time = 3 SECONDS
+ wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE)
+
+ /// How much blood we start losing when this wound is first applied
+ var/initial_flow
+ /// When we have less than this amount of flow, either from treatment or clotting, we demote to a lower cut or are healed of the wound
+ var/minimum_flow
+ /// How much our blood_flow will naturally decrease per tick, not only do larger cuts bleed more blood faster, they clot slower (higher number = clot quicker, negative = opening up)
+ var/clot_rate
+
+ /// Once the blood flow drops below minimum_flow, we demote it to this type of wound. If there's none, we're all better
+ var/demotes_to
+
+ /// The maximum flow we've had so far
+ var/highest_flow
+
+ /// A bad system I'm using to track the worst scar we earned (since we can demote, we want the biggest our wound has been, not what it was when it was cured (probably moderate))
+ var/datum/scar/highest_scar
+
+/datum/wound/slash/wound_injury(datum/wound/slash/old_wound = null)
+ blood_flow = initial_flow
+ if(old_wound)
+ blood_flow = max(old_wound.blood_flow, initial_flow)
+ if(old_wound.severity > severity && old_wound.highest_scar)
+ highest_scar = old_wound.highest_scar
+ old_wound.highest_scar = null
+
+ if(!highest_scar)
+ highest_scar = new
+ highest_scar.generate(limb, src, add_to_scars=FALSE)
+
+/datum/wound/slash/remove_wound(ignore_limb, replaced)
+ if(!replaced && highest_scar)
+ already_scarred = TRUE
+ highest_scar.lazy_attach(limb)
+ return ..()
+
+/datum/wound/slash/get_examine_description(mob/user)
+ if(!limb.current_gauze)
+ return ..()
+
+ var/list/msg = list("The cuts on [victim.p_their()] [limb.name] are wrapped with ")
+ // how much life we have left in these bandages
+ switch(limb.current_gauze.absorption_capacity)
+ if(0 to 1.25)
+ msg += "nearly ruined "
+ if(1.25 to 2.75)
+ msg += "badly worn "
+ if(2.75 to 4)
+ msg += "slightly bloodied "
+ if(4 to INFINITY)
+ msg += "clean "
+ msg += "[limb.current_gauze.name]!"
+
+ return "[msg.Join()]"
+
+/datum/wound/slash/receive_damage(wounding_type, wounding_dmg, wound_bonus)
+ if(victim.stat != DEAD && wounding_type == WOUND_SLASH) // can't stab dead bodies to make it bleed faster this way
+ blood_flow += 0.05 * wounding_dmg
+
+/datum/wound/slash/drag_bleed_amount()
+ // say we have 3 severe cuts with 3 blood flow each, pretty reasonable
+ // compare with being at 100 brute damage before, where you bled (brute/100 * 2), = 2 blood per tile
+ var/bleed_amt = min(blood_flow * 0.1, 1) // 3 * 3 * 0.1 = 0.9 blood total, less than before! the share here is .3 blood of course.
+
+ if(limb.current_gauze) // gauze stops all bleeding from dragging on this limb, but wears the gauze out quicker
+ limb.seep_gauze(bleed_amt * 0.33)
+ return
+
+ return bleed_amt
+
+/datum/wound/slash/get_bleed_rate_of_change()
+ if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
+ return BLOOD_FLOW_INCREASING
+ if(limb.current_gauze || clot_rate > 0)
+ return BLOOD_FLOW_DECREASING
+ if(clot_rate < 0)
+ return BLOOD_FLOW_INCREASING
+
+/datum/wound/slash/handle_process()
+ if(victim.stat == DEAD)
+ blood_flow -= max(clot_rate, WOUND_SLASH_DEAD_CLOT_MIN)
+ if(blood_flow < minimum_flow)
+ if(demotes_to)
+ replace_wound(demotes_to)
+ return
+ qdel(src)
+ return
+
+ blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
+
+ if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
+ blood_flow += 0.5 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
+ if(limb.current_gauze)
+ if(clot_rate > 0)
+ blood_flow -= clot_rate
+ blood_flow -= limb.current_gauze.absorption_rate
+ limb.seep_gauze(limb.current_gauze.absorption_rate)
+ else
+ blood_flow -= clot_rate
+
+ if(blood_flow > highest_flow)
+ highest_flow = blood_flow
+
+ if(blood_flow < minimum_flow)
+ if(demotes_to)
+ replace_wound(demotes_to)
+ else
+ to_chat(victim, span_green("The cut on your [limb.name] has stopped bleeding!"))
+ qdel(src)
+
+
+/datum/wound/slash/on_stasis()
+ if(blood_flow >= minimum_flow)
+ return
+ if(demotes_to)
+ replace_wound(demotes_to)
+ return
+ qdel(src)
+
+/* BEWARE, THE BELOW NONSENSE IS MADNESS. bones.dm looks more like what I have in mind and is sufficiently clean, don't pay attention to this messiness */
+
+/datum/wound/slash/check_grab_treatments(obj/item/I, mob/user)
+ if(istype(I, /obj/item/gun/energy/laser))
+ return TRUE
+ if(I.get_temperature()) // if we're using something hot but not a cautery, we need to be aggro grabbing them first, so we don't try treating someone we're eswording
+ return TRUE
+
+/datum/wound/slash/treat(obj/item/I, mob/user)
+ if(istype(I, /obj/item/gun/energy/laser))
+ las_cauterize(I, user)
+ else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature())
+ tool_cauterize(I, user)
+ else if(istype(I, /obj/item/stack/medical/suture))
+ suture(I, user)
+
+/datum/wound/slash/try_handling(mob/living/carbon/human/user)
+ if(user.pulling != victim || user.zone_selected != limb.body_zone || user.a_intent == INTENT_GRAB || !iscatperson(user) || !victim.can_inject(user, TRUE))
+ return FALSE
+
+ if(INTERACTING_WITH(user, victim))
+ to_chat(user, span_warning("You're already interacting with [victim]!"))
+ return
+ if(user.is_mouth_covered())
+ to_chat(user, span_warning("Your mouth is covered, you can't lick [victim]'s wounds!"))
+ return
+ if(!user.getorganslot(ORGAN_SLOT_TONGUE))
+ to_chat(user, span_warning("You can't lick wounds without a tongue!")) // f in chat
+ return
+ lick_wounds(user)
+ return TRUE
+
+/// if a felinid is licking this cut to reduce bleeding
+/datum/wound/slash/proc/lick_wounds(mob/living/carbon/human/user)
+ // transmission is one way patient -> felinid since google said cat saliva is antiseptic or whatever, and also because felinids are already risking getting beaten for this even without people suspecting they're spreading a deathvirus
+ for(var/datum/disease/D in victim.diseases)
+ user.ForceContractDisease(D)
+
+ user.visible_message(span_notice("[user] begins licking the wounds on [victim]'s [limb.name]."), span_notice("You begin licking the wounds on [victim]'s [limb.name]..."), ignored_mobs=victim)
+ to_chat(victim, "[user] begins to lick the wounds on your [limb.name].[user] licks the wounds on your [limb.name]! minimum_flow)
+ try_handling(user)
+ else if(demotes_to)
+ to_chat(user, span_green("You successfully lower the severity of [victim]'s cuts."))
+
+/datum/wound/slash/on_xadone(power)
+ . = ..()
+ blood_flow -= 0.03 * power // i think it's like a minimum of 3 power, so .09 blood_flow reduction per tick is pretty good for 0 effort
+
+/datum/wound/slash/on_synthflesh(power)
+ . = ..()
+ blood_flow -= 0.075 * power // 20u * 0.075 = -1.5 blood flow, pretty good for how little effort it is
+
+/// If someone's putting a laser gun up to our cut to cauterize it
+/datum/wound/slash/proc/las_cauterize(obj/item/gun/energy/laser/lasgun, mob/user)
+ var/self_penalty_mult = (user == victim ? 1.25 : 1)
+ user.visible_message(span_warning("[user] begins aiming [lasgun] directly at [victim]'s [limb.name]..."), span_userdanger("You begin aiming [lasgun] directly at [user == victim ? "your" : "[victim]'s"] [limb.name]..."))
+ if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+ var/damage = lasgun.chambered.BB.damage
+ lasgun.chambered.BB.bare_wound_bonus = 0
+ lasgun.chambered.BB.wound_bonus -= 30
+ lasgun.chambered.BB.damage *= self_penalty_mult
+ if(!lasgun.process_fire(victim, victim, TRUE, null, limb.body_zone))
+ return
+ victim.emote("scream")
+ blood_flow -= damage / (5 * self_penalty_mult) // 20 / 5 = 4 bloodflow removed, p good
+ victim.visible_message(span_warning("The cuts on [victim]'s [limb.name] scar over!"))
+
+/// If someone is using either a cautery tool or something with heat to cauterize this cut
+/datum/wound/slash/proc/tool_cauterize(obj/item/I, mob/user)
+ var/improv_penalty_mult = (I.tool_behaviour == TOOL_CAUTERY ? 1 : 1.25) // 25% longer and less effective if you don't use a real cautery
+ var/self_penalty_mult = (user == victim ? 1.5 : 1) // 50% longer and less effective if you do it to yourself
+
+ user.visible_message(span_danger("[user] begins cauterizing [victim]'s [limb.name] with [I]..."), span_warning("You begin cauterizing [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]..."))
+ if(!do_after(user, base_treat_time * self_penalty_mult * improv_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+
+ user.visible_message(span_green("[user] cauterizes some of the bleeding on [victim]."), span_green("You cauterize some of the bleeding on [victim]."))
+ limb.receive_damage(burn = 2 + severity, wound_bonus = CANT_WOUND)
+ if(prob(30))
+ victim.emote("scream")
+ var/blood_cauterized = (0.6 / (self_penalty_mult * improv_penalty_mult))
+ blood_flow -= blood_cauterized
+
+ if(blood_flow > minimum_flow)
+ try_treating(I, user)
+ else if(demotes_to)
+ to_chat(user, span_green("You successfully lower the severity of [user == victim ? "your" : "[victim]'s"] cuts."))
+
+/// If someone is using a suture to close this cut
+/datum/wound/slash/proc/suture(obj/item/stack/medical/suture/I, mob/user)
+ var/self_penalty_mult = (user == victim ? 1.4 : 1)
+ user.visible_message(span_notice("[user] begins stitching [victim]'s [limb.name] with [I]..."), span_notice("You begin stitching [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]..."))
+
+ if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
+ return
+ user.visible_message(span_green("[user] stitches up some of the bleeding on [victim]."), span_green("You stitch up some of the bleeding on [user == victim ? "yourself" : "[victim]"]."))
+ var/blood_sutured = I.stop_bleeding / self_penalty_mult
+ blood_flow -= blood_sutured
+ limb.heal_damage(I.heal_brute, I.heal_burn)
+ I.use(1)
+
+ if(blood_flow > minimum_flow)
+ try_treating(I, user)
+ else if(demotes_to)
+ to_chat(user, span_green("You successfully lower the severity of [user == victim ? "your" : "[victim]'s"] cuts."))
+
+
+/datum/wound/slash/moderate
+ name = "Rough Abrasion"
+ desc = "Patient's skin has been badly scraped, generating moderate blood loss."
+ treat_text = "Application of clean bandages or first-aid grade sutures, followed by food and rest."
+ examine_desc = "has an open cut"
+ occur_text = "is cut open, slowly leaking blood"
+ sound_effect = 'sound/effects/wounds/blood1.ogg'
+ severity = WOUND_SEVERITY_MODERATE
+ initial_flow = 2
+ minimum_flow = 0.5
+ clot_rate = 0.12
+ threshold_minimum = 20
+ threshold_penalty = 10
+ status_effect_type = /datum/status_effect/wound/slash/moderate
+ scar_keyword = "slashmoderate"
+
+/datum/wound/slash/severe
+ name = "Open Laceration"
+ desc = "Patient's skin is ripped clean open, allowing significant blood loss."
+ treat_text = "Speedy application of first-aid grade sutures and clean bandages, followed by vitals monitoring to ensure recovery."
+ examine_desc = "has a severe cut"
+ occur_text = "is ripped open, veins spurting blood"
+ sound_effect = 'sound/effects/wounds/blood2.ogg'
+ severity = WOUND_SEVERITY_SEVERE
+ initial_flow = 3.25
+ minimum_flow = 2.75
+ clot_rate = 0.06
+ threshold_minimum = 50
+ threshold_penalty = 25
+ demotes_to = /datum/wound/slash/moderate
+ status_effect_type = /datum/status_effect/wound/slash/severe
+ scar_keyword = "slashsevere"
+
+/datum/wound/slash/critical
+ name = "Weeping Avulsion"
+ desc = "Patient's skin is completely torn open, along with significant loss of tissue. Extreme blood loss will lead to quick death without intervention."
+ treat_text = "Immediate bandaging and either suturing or cauterization, followed by supervised resanguination."
+ examine_desc = "is carved down to the bone, spraying blood wildly"
+ occur_text = "is torn open, spraying blood wildly"
+ sound_effect = 'sound/effects/wounds/blood3.ogg'
+ severity = WOUND_SEVERITY_CRITICAL
+ initial_flow = 4.25
+ minimum_flow = 4
+ clot_rate = -0.05 // critical cuts actively get worse instead of better
+ threshold_minimum = 80
+ threshold_penalty = 40
+ demotes_to = /datum/wound/slash/severe
+ status_effect_type = /datum/status_effect/wound/slash/critical
+ scar_keyword = "slashcritical"
+ wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE | MANGLES_FLESH)
diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm
index 3ef76f97cb2b..c4e3621c2b77 100644
--- a/code/game/area/Space_Station_13_areas.dm
+++ b/code/game/area/Space_Station_13_areas.dm
@@ -446,7 +446,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon_state = "bar"
minimap_color = "#5ac866"
mood_bonus = 5
- mood_message = "I love being in the bar!\n"
+ mood_message = span_nicegreen("I love being in the bar!\n")
airlock_wires = /datum/wires/airlock/service
/area/crew_quarters/bar/Initialize(mapload)
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 37dd6b54d27c..69cc8ef0c204 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -43,7 +43,7 @@
/// Bonus mood for being in this area
var/mood_bonus = 0
/// Mood message for being here, only shows up if mood_bonus != 0
- var/mood_message = "This area is pretty nice!\n"
+ var/mood_message = span_nicegreen("This area is pretty nice!\n")
var/power_equip = TRUE
var/power_light = TRUE
diff --git a/code/game/area/areas/ruins/icemoon.dm b/code/game/area/areas/ruins/icemoon.dm
index f64699119925..a9932e2dca33 100644
--- a/code/game/area/areas/ruins/icemoon.dm
+++ b/code/game/area/areas/ruins/icemoon.dm
@@ -8,7 +8,7 @@
name = "Bath House"
icon_state = "dk_yellow"
mood_bonus = 10
- mood_message = "This place is like paradise, I don't ever want to leave!\n"
+ mood_message = span_nicegreen("This place is like paradise, I don't ever want to leave!\n")
/area/ruin/powered/inn
name = "Inn"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 138b2fb400fb..e8d40ee44a69 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -223,7 +223,7 @@
LAZYREMOVE(M.do_afters, src)
targeted_by = null
-
+
QDEL_NULL(light)
return ..()
@@ -491,12 +491,26 @@
. += "Nothing."
else if(reagents.flags & AMOUNT_VISIBLE)
if(reagents.total_volume)
- . += "It has [reagents.total_volume] unit\s left."
+ . += span_notice("It has [reagents.total_volume] unit\s left.")
else
- . += "It's empty."
+ . += span_danger("It's empty.")
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
+/**
+ * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_TIME (default 1.5 seconds)
+ *
+ * This is where you can put extra information on something that may be superfluous or not important in critical gameplay
+ * moments, while allowing people to manually double-examine to take a closer look
+ *
+ * Produces a signal [COMSIG_PARENT_EXAMINE_MORE]
+ */
+/atom/proc/examine_more(mob/user)
+ . = list()
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE_MORE, user, .)
+ if(!LAZYLEN(.)) // lol ..length
+ return FALSE
+
/**
* An atom we are buckled or is contained within us has tried to move
*
@@ -506,7 +520,7 @@
/atom/proc/relaymove(mob/user)
if(buckle_message_cooldown <= world.time)
buckle_message_cooldown = world.time + 50
- to_chat(user, "You can't move while buckled to [src]!")
+ to_chat(user, span_warning("You can't move while buckled to [src]!"))
return
/// Handle what happens when your contents are exploded by a bomb
@@ -744,13 +758,13 @@
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
//yogs start -- stops things from dumping into themselves
if(STR == src_object)
- to_chat(user,"You can't dump the contents of [src_object.parent] into itself!")
+ to_chat(user,span_warning("You can't dump the contents of [src_object.parent] into itself!"))
return
//yogs end
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
stoplag(1)
qdel(progress)
- to_chat(user, "You dump as much of [src_object.parent]'s contents into [STR.insert_preposition]to [src] as you can.")
+ to_chat(user, span_notice("You dump as much of [src_object.parent]'s contents into [STR.insert_preposition]to [src] as you can."))
STR.orient2hud(user)
src_object.orient2hud(user)
if(user.active_storage) //refresh the HUD to show the transfered contents
@@ -983,7 +997,7 @@
/atom/proc/multitool_check_buffer(user, obj/item/I, silent = FALSE)
if(!istype(I, /obj/item/multitool))
if(user && !silent)
- to_chat(user, "[I] has no data buffer!")
+ to_chat(user, span_warning("[I] has no data buffer!"))
return FALSE
return TRUE
@@ -1110,6 +1124,40 @@
var/reverse_message = "has been [what_done] by [ssource][postfix]"
target.log_message(reverse_message, LOG_ATTACK, color="orange", log_globally=FALSE)
+/**
+ * log_wound() is for when someone is *attacked* and suffers a wound. Note that this only captures wounds from damage, so smites/forced wounds aren't logged, as well as demotions like cuts scabbing over
+ *
+ * Note that this has no info on the attack that dealt the wound: information about where damage came from isn't passed to the bodypart's damaged proc. When in doubt, check the attack log for attacks at that same time
+ * TODO later: Add logging for healed wounds, though that will require some rewriting of healing code to prevent admin heals from spamming the logs. Not high priority
+ *
+ * Arguments:
+ * * victim- The guy who got wounded
+ * * suffered_wound- The wound, already applied, that we're logging. It has to already be attached so we can get the limb from it
+ * * dealt_damage- How much damage is associated with the attack that dealt with this wound.
+ * * dealt_wound_bonus- The wound_bonus, if one was specified, of the wounding attack
+ * * dealt_bare_wound_bonus- The bare_wound_bonus, if one was specified *and applied*, of the wounding attack. Not shown if armor was present
+ * * base_roll- Base wounding ability of an attack is a random number from 1 to (dealt_damage ** WOUND_DAMAGE_EXPONENT). This is the number that was rolled in there, before mods
+ */
+/proc/log_wound(atom/victim, datum/wound/suffered_wound, dealt_damage, dealt_wound_bonus, dealt_bare_wound_bonus, base_roll)
+ if(QDELETED(victim) || !suffered_wound)
+ return
+ var/message = "has suffered: [suffered_wound][suffered_wound.limb ? " to [suffered_wound.limb.name]" : null]"// maybe indicate if it's a promote/demote?
+
+ if(dealt_damage)
+ message += " | Damage: [dealt_damage]"
+ // The base roll is useful since it can show how lucky someone got with the given attack. For example, dealing a cut
+ if(base_roll)
+ message += "(rolled [base_roll]/[dealt_damage ** WOUND_DAMAGE_EXPONENT])"
+
+ if(dealt_wound_bonus)
+ message += " | WB: [dealt_wound_bonus]"
+
+ if(dealt_bare_wound_bonus)
+ message += " | BWB: [dealt_bare_wound_bonus]"
+
+ victim.log_message(message, LOG_ATTACK, color="blue")
+
+
/atom/movable/proc/add_filter(name,priority,list/params)
if(!filter_data)
filter_data = list()
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index d4621d620531..96652a4a50e1 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -182,7 +182,7 @@
var/mob/M = AM
log_combat(src, M, "grabbed", addition="passive grab")
if(!supress_message)
- visible_message("[src] has grabbed [M] passively!")
+ visible_message(span_warning("[src] has grabbed [M] passively!"))
return TRUE
/atom/movable/proc/stop_pulling()
@@ -705,12 +705,12 @@
/atom/movable/proc/force_push(atom/movable/AM, force = move_force, direction, silent = FALSE)
. = AM.force_pushed(src, force, direction)
if(!silent && .)
- visible_message("[src] forcefully pushes against [AM]!", "You forcefully push against [AM]!")
+ visible_message(span_warning("[src] forcefully pushes against [AM]!"), span_warning("You forcefully push against [AM]!"))
/atom/movable/proc/move_crush(atom/movable/AM, force = move_force, direction, silent = FALSE)
. = AM.move_crushed(src, force, direction)
if(!silent && .)
- visible_message("[src] crushes past [AM]!", "You crush [AM]!")
+ visible_message(span_danger("[src] crushes past [AM]!"), span_danger("You crush [AM]!"))
/atom/movable/proc/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return FALSE
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 13742025ca49..69929b66c9d1 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -118,6 +118,12 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
user.update_body()
user.domutcheck()
+ // get rid of any scars from previous changeling-ing
+ for(var/i in user.all_scars)
+ var/datum/scar/iter_scar = i
+ if(iter_scar.fake)
+ qdel(iter_scar)
+
//vars hackery. not pretty, but better than the alternative.
for(var/slot in GLOB.slots)
if(istype(user.vars[slot], GLOB.slot2type[slot]) && !(chosen_prof.exists_list[slot])) //remove unnecessary flesh items
@@ -144,6 +150,10 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
C.item_state = chosen_prof.item_state_list[slot]
if(equip)
user.equip_to_slot_or_del(C, GLOB.slot2slot[slot])
+ for(var/stored_scar_line in chosen_prof.stored_scars)
+ var/datum/scar/attempted_fake_scar = user.load_scar(stored_scar_line)
+ if(attempted_fake_scar)
+ attempted_fake_scar.fake = TRUE
user.regenerate_icons()
@@ -162,4 +172,4 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
round_credits += "
"
round_credits += ..()
- return round_credits
+ return round_credits
\ No newline at end of file
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index a96b293153d6..37c159eff2be 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -84,7 +84,7 @@ Credit where due:
if(R.deployed)
var/mob/living/silicon/ai/AI = R.mainframe
R.undeploy()
- to_chat(AI, "Anomaly Detected. Returned to core!") //The AI needs to be in its core to properly be converted
+ to_chat(AI, span_userdanger("Anomaly Detected. Returned to core!")) //The AI needs to be in its core to properly be converted
. = L.mind.add_antag_datum(C)
@@ -100,7 +100,7 @@ Credit where due:
Ratvar, the Clockwork Justiciar, [GLOB.ratvar_awakens ? "has been freed from his eternal prison" : "lies in exile, derelict and forgotten in an unseen realm"].")
flash_color(L, flash_color = list("#BE8700", "#BE8700", "#BE8700", rgb(0,0,0)), flash_time = 50)
else
- L.visible_message("[L] seems to resist an unseen force!", null, null, 7, L)
+ L.visible_message(span_boldwarning("[L] seems to resist an unseen force!"), null, null, 7, L)
to_chat(L, "The world before you suddenly glows a brilliant yellow. [issilicon(L) ? "You cannot compute this truth!" : \
"Your mind is racing!"] You hear the whooshing steam and cl[pick("ank", "ink", "unk", "ang")]ing cogs of a billion billion machines, and the sound \
is a meaningless cacophony.
\
@@ -201,9 +201,9 @@ Credit where due:
if(!M)
return 0
to_chat(M, "You are a servant of Ratvar, the Clockwork Justiciar!")
- to_chat(M, "You have approximately [ark_time] minutes until the Ark activates.")
- to_chat(M, "Unlock Script scripture by converting a new servant.")
- to_chat(M, "Application scripture will be unlocked halfway until the Ark's activation.")
+ to_chat(M, span_brass("You have approximately [ark_time] minutes until the Ark activates."))
+ to_chat(M, span_brass("Unlock Script scripture by converting a new servant."))
+ to_chat(M, span_brass("Application scripture will be unlocked halfway until the Ark's activation."))
M.playsound_local(get_turf(M), 'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, pressure_affected = FALSE)
return 1
@@ -354,7 +354,7 @@ Credit where due:
/obj/item/paper/servant_primer/examine(mob/user)
. = ..()
if(!is_servant_of_ratvar(user) && !isobserver(user))
- . += "You can't understand any of the words on [src]."
+ . += span_danger("You can't understand any of the words on [src].")
/obj/effect/spawner/lootdrop/clockcult
name = "clock tile"
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 3881490d7334..9d67cdc93938 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -64,7 +64,7 @@
hitsound = null
attack_verb_on = list("slipped")
clumsy_check = FALSE
- sharpness = IS_BLUNT
+ sharpness = SHARP_NONE
item_color = "yellow"
heat = 0
light_color = "#ffff00"
@@ -107,7 +107,7 @@
/obj/item/melee/transforming/energy/sword/bananium/suicide_act(mob/user)
if(!active)
transform_weapon(user, TRUE)
- user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku, but the blade slips off of [user.p_them()] harmlessly!")
+ user.visible_message(span_suicide("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku, but the blade slips off of [user.p_them()] harmlessly!"))
var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery)
slipper.Slip(src, user)
return SHAME
@@ -194,7 +194,7 @@
QDEL_NULL(bomb)
/obj/item/grown/bananapeel/bombanana/suicide_act(mob/user)
- user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.")
+ user.visible_message(span_suicide("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide."))
playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1)
bomb.preprime(user, 0, FALSE)
return (BRUTELOSS)
diff --git a/code/game/gamemodes/clown_ops/honkmother.dm b/code/game/gamemodes/clown_ops/honkmother.dm
index d673074cbbc9..f4ca2f97247f 100644
--- a/code/game/gamemodes/clown_ops/honkmother.dm
+++ b/code/game/gamemodes/clown_ops/honkmother.dm
@@ -25,7 +25,7 @@
/obj/structure/destructible/honkmother/Initialize()
. = ..()
START_PROCESSING(SSobj, src)
- send_to_playing_players("HONK!")
+ send_to_playing_players(span_clown("HONK!"))
//mine now bitch
sound_to_playing_players('sound/effects/ratvar_reveal.ogg')
var/mutable_appearance/alert_overlay = mutable_appearance('icons/obj/items_and_weapons.dmi', "bike_horn")
@@ -41,7 +41,7 @@
return FALSE
var/type = pick(typesof(/mob/living/simple_animal/hostile/retaliate/clown))
var/mob/R = new type(get_turf(src))
- R.visible_message("[R] awakens!")
+ R.visible_message(span_warning("[R] awakens!"))
R.key = O.key
//moves and turns things into BANANIUM
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 9bcebbdf5f1c..37ed5f4c4dc7 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -232,13 +232,13 @@
continue
cultist.playsound_local(cultist, 'sound/magic/demon_dies.ogg', 75, FALSE)
if(isconstruct(cultist))
- to_chat(cultist, "You feel your form lose some of its density, becoming more fragile!")
+ to_chat(cultist, span_cultbold("You feel your form lose some of its density, becoming more fragile!"))
cultist.maxHealth *= 0.75
cultist.health *= 0.75
else
cultist.Stun(20)
cultist.confused += 15 //30 seconds of confusion
- to_chat(cultist, "Your mind is flooded with pain as the last bloodstone is destroyed!")
+ to_chat(cultist, span_narsiesmall("Your mind is flooded with pain as the last bloodstone is destroyed!"))
/datum/game_mode/proc/cult_loss_anchor()
priority_announce("Whatever you did worked. Veil density has returned to a safe level. Shuttle locks lifted.","Central Command Higher Dimensional Affairs")
@@ -252,23 +252,23 @@
continue
cultist.playsound_local(cultist, 'sound/effects/screech.ogg', 75, FALSE)
if(isconstruct(cultist))
- to_chat(cultist, "You feel your form lose most of its density, becoming incredibly fragile!")
+ to_chat(cultist, span_cultbold("You feel your form lose most of its density, becoming incredibly fragile!"))
cultist.maxHealth *= 0.5
cultist.health *= 0.5
else
cultist.Stun(40)
cultist.confused += 30 //one minute of confusion
- to_chat(cultist, "You feel a bleakness as the destruction of the anchor cuts off your connection to Nar-Sie!")
+ to_chat(cultist, span_narsiesmall("You feel a bleakness as the destruction of the anchor cuts off your connection to Nar-Sie!"))
/datum/game_mode/proc/disable_bloodstone_cooldown()
bloodstone_cooldown = FALSE
for(var/datum/mind/M in cult)
var/mob/living/L = M.current
if(L)
- to_chat(M, "The veil has weakened enough for another attempt, prepare the summoning!")
+ to_chat(M, span_narsiesmall("The veil has weakened enough for another attempt, prepare the summoning!"))
if(isconstruct(L))
L.maxHealth = initial(L.maxHealth)
- to_chat(L, "Your form regains its original durability!")
+ to_chat(L, span_cult("Your form regains its original durability!"))
//send message to cultists saying they can do stuff again
/datum/game_mode/cult/generate_credit_text()
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index 03673aacdc10..ee302fd29b02 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -558,9 +558,9 @@
if(!M)
return 0
to_chat(M, "You are a servant of Ratvar, the Clockwork Justiciar!")
- to_chat(M, "You have approximately [ark_time] minutes until the Ark activates.")
- to_chat(M, "Unlock Script scripture by converting a new servant.")
- to_chat(M, "Application scripture will be unlocked halfway until the Ark's activation.")
+ to_chat(M, span_brass("You have approximately [ark_time] minutes until the Ark activates."))
+ to_chat(M, span_brass("Unlock Script scripture by converting a new servant."))
+ to_chat(M, span_brass("Application scripture will be unlocked halfway until the Ark's activation."))
M.playsound_local(get_turf(M), 'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, pressure_affected = FALSE)
return 1
diff --git a/code/game/gamemodes/dynamic/ruleset_picking.dm b/code/game/gamemodes/dynamic/ruleset_picking.dm
index 9221e4a3c152..692887b4dca6 100644
--- a/code/game/gamemodes/dynamic/ruleset_picking.dm
+++ b/code/game/gamemodes/dynamic/ruleset_picking.dm
@@ -93,7 +93,7 @@
/// Fired when an admin cancels the current midround injection.
/datum/game_mode/dynamic/proc/admin_cancel_midround(mob/user, timer_id)
if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id))
- to_chat(user, "Too late!")
+ to_chat(user, span_notice("Too late!"))
return
dynamic_log("[key_name(user)] cancelled the next midround injection.")
@@ -103,7 +103,7 @@
/// Fired when an admin requests a different midround injection.
/datum/game_mode/dynamic/proc/admin_different_midround(mob/user, timer_id)
if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id))
- to_chat(user, "Too late!")
+ to_chat(user, span_notice("Too late!"))
return
midround_injection_timer_id = null
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index ab0a0547604a..8c667cebbcf1 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -84,7 +84,7 @@
return FALSE
return TRUE
else
- message_admins("DEBUG: GAME STARTING WITHOUT PLAYER NUMBER CHECKS, THIS WILL PROBABLY BREAK SHIT.")
+ message_admins(span_notice("DEBUG: GAME STARTING WITHOUT PLAYER NUMBER CHECKS, THIS WILL PROBABLY BREAK SHIT."))
return TRUE
@@ -414,7 +414,7 @@
//yogs start -- quiet mode
if(mind.quiet_round)
- to_chat(mind.current,"There aren't enough antag volunteers, so your quiet round setting will not be considered!")
+ to_chat(mind.current,span_userdanger("There aren't enough antag volunteers, so your quiet round setting will not be considered!"))
//yogs end
return mind
@@ -567,7 +567,7 @@
//Reports player logouts//
//////////////////////////
/proc/display_roundstart_logout_report()
- var/list/msg = list("Roundstart logout report\n\n")
+ var/list/msg = list(span_boldnotice("Roundstart logout report\n\n"))
for(var/i in GLOB.mob_living_list)
var/mob/living/L = i
var/mob/living/carbon/C = L
@@ -585,7 +585,7 @@
failed = TRUE //AFK client
if(!failed && L.stat)
if(L.suiciding) //Suicider
- msg += "[L.name] ([L.key]), the [L.job] (Suicide)\n"
+ msg += "[L.name] ([L.key]), the [L.job] ([span_boldannounce("Suicide")])\n"
failed = TRUE //Disconnected client
if(!failed && L.stat == UNCONSCIOUS)
msg += "[L.name] ([L.key]), the [L.job] (Dying)\n"
@@ -608,7 +608,7 @@
if(D.mind && D.mind.current == L)
if(L.stat == DEAD)
if(L.suiciding) //Suicider
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Suicide)\n"
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Suicide")])\n"
continue //Disconnected client
else
msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n"
@@ -617,7 +617,7 @@
if(D.can_reenter_corpse)
continue //Adminghost, or cult/wizard ghost
else
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n"
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Ghosted")])\n"
continue //Ghosted while alive
diff --git a/code/game/gamemodes/hivemind/radar.dm b/code/game/gamemodes/hivemind/radar.dm
index bb5827cdc2c0..27c1154d8d6a 100644
--- a/code/game/gamemodes/hivemind/radar.dm
+++ b/code/game/gamemodes/hivemind/radar.dm
@@ -50,7 +50,7 @@
else
scan_target = null
if(!trackable_targets_exist)
- to_chat(owner, "The psychic energies eminating from afar have died down... for now")
+ to_chat(owner, span_assimilator("The psychic energies eminating from afar have died down... for now"))
owner.remove_status_effect(STATUS_EFFECT_HIVE_RADAR)
//"Trackable" status effect
diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm
index 588f690e8d9a..8bd3c4055e75 100644
--- a/code/game/gamemodes/meteor/meteor.dm
+++ b/code/game/gamemodes/meteor/meteor.dm
@@ -41,11 +41,11 @@
++survivors
if(player.onCentCom())
- survivor_list += "[player.real_name] escaped to the safety of CentCom."
+ survivor_list += span_greentext("[player.real_name] escaped to the safety of CentCom.")
else if(player.onSyndieBase())
- survivor_list += "[player.real_name] escaped to the (relative) safety of Syndicate Space."
+ survivor_list += span_greentext("[player.real_name] escaped to the (relative) safety of Syndicate Space.")
else
- survivor_list += "[player.real_name] survived but is stranded without any hope of rescue."
+ survivor_list += span_neutraltext("[player.real_name] survived but is stranded without any hope of rescue.")
if(survivors)
return "
[survivor_list.Join("
")]
"
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index eecdfeeee9fd..612efe7a78b2 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
continue
if(isliving(thing))
var/mob/living/living_thing = thing
- living_thing.visible_message("[src] slams into [living_thing].", "[src] slams into you!.")
+ living_thing.visible_message(span_warning("[src] slams into [living_thing]."), span_userdanger("[src] slams into you!."))
switch(hitpwr)
if(EXPLODE_DEVASTATE)
SSexplosions.high_mov_atom += thing
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 89935e0b7eb6..944d0a398ef1 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -863,7 +863,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
var/mob/new_target = input(admin,"Select target:", "Objective target") as null|anything in possible_targets
target = new_target.mind
else
- to_chat(admin, "No active AIs with minds!")
+ to_chat(admin, span_warning("No active AIs with minds!"))
update_explanation_text()
/datum/objective/destroy/internal
@@ -1147,7 +1147,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return
pet = selected_pet
else
- to_chat(admin, "No living pets!")
+ to_chat(admin, span_warning("No living pets!"))
update_explanation_text()
/datum/objective/minor/pet/update_explanation_text()
diff --git a/code/game/golf/golf.dm b/code/game/golf/golf.dm
index d439f598d90f..6d2db074b112 100644
--- a/code/game/golf/golf.dm
+++ b/code/game/golf/golf.dm
@@ -15,33 +15,33 @@
icon_state = icon_state + "_w"
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
user.visible_message("[user.name] secures [src] to the floor.", \
- "You secure [src] to the floor.", \
- " You hear a ratchet")
+ span_notice("You secure [src] to the floor."), \
+ " [span_italics("You hear a ratchet")]")
src.anchored = 1
if(1)
anchored = 0
icon_state = initial(icon_state)
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
user.visible_message("[user.name] unsecures [src] from the floor.", \
- "You unwrench [src] from the floor.", \
- "You hear a ratchet.")
+ span_notice("You unwrench [src] from the floor."), \
+ span_italics("You hear a ratchet."))
src.anchored = 0
/obj/machinery/golfhole/Cross(atom/movable/mover, turf/target)
. = ..()
if (istype(mover,/obj/item/golfball) && mover.throwing && anchored)
if (contents.len >= 3)
- visible_message("The golf hole is full! Try removing golfballs from the hole.")
+ visible_message(span_notice("The golf hole is full! Try removing golfballs from the hole."))
return FALSE
var/obj/item/golfball = mover
if(prob(75))
golfball.loc = src
- visible_message("The golfball lands in [src].")
+ visible_message(span_notice("The golfball lands in [src]."))
update_icon()
else
- visible_message("The golfball bounces out of [src]!")
+ visible_message(span_notice("The golfball bounces out of [src]!"))
return FALSE
else
return ..()
@@ -50,14 +50,14 @@
/obj/machinery/golfhole/attack_hand(atom, mob/user)
var/obj/item/golfball/ball = locate(/obj/item/golfball) in contents
if (ball)
- visible_message("The golfball is removed from the hole.")
+ visible_message(span_notice("The golfball is removed from the hole."))
ball.loc = get_turf(src.loc)
/obj/machinery/golfhole/proc/hole_place_item_in(obj/item/golfball, mob/user)
golfball.loc = src
user.visible_message("[user.name] knocks the golfball into [src].", \
- "You knock the golfball into [src].")
+ span_notice("You knock the golfball into [src]."))
/obj/machinery/golfhole/blue
icon = 'yogstation/icons/code/game/golf/golfstuff.dmi'
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index 5068fe6ef1a0..578981580bb7 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -70,7 +70,7 @@
else if(istype(O, /obj/item/pda))
if(storedpda)
- to_chat(user, "There is already a PDA inside!")
+ to_chat(user, span_warning("There is already a PDA inside!"))
return
else if(!user.transferItemToLoc(O, src))
return
@@ -83,17 +83,17 @@
if(!O.tool_start_check(user, amount=0))
return
user.visible_message("[user] is repairing [src].", \
- "You begin repairing [src]...", \
- "You hear welding.")
+ span_notice("You begin repairing [src]..."), \
+ span_italics("You hear welding."))
if(O.use_tool(src, user, 40, volume=50))
if(!(stat & BROKEN))
return
- to_chat(user, "You repair [src].")
+ to_chat(user, span_notice("You repair [src]."))
stat &= ~BROKEN
obj_integrity = max_integrity
update_icon()
else
- to_chat(user, "[src] does not need repairs.")
+ to_chat(user, span_notice("[src] does not need repairs."))
else
return ..()
@@ -122,7 +122,7 @@
ejectpda()
else
- to_chat(user, "[src] is empty.")
+ to_chat(user, span_notice("[src] is empty."))
/obj/machinery/pdapainter/verb/ejectpda()
@@ -138,4 +138,4 @@
storedpda = null
update_icon()
else
- to_chat(usr, "[src] is empty!")
+ to_chat(usr, span_warning("[src] is empty!"))
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 5cb6f5908857..b347ca6107bd 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -25,7 +25,7 @@
)
var/list/chem_buttons //Used when emagged to scramble which chem is used, eg: mutadone -> morphine
var/scrambled_chems = FALSE //Are chem buttons scrambled? used as a warning
- var/enter_message = "You feel cool air surround you. You go numb as your senses turn inward."
+ var/enter_message = span_notice("You feel cool air surround you. You go numb as your senses turn inward.")
payment_department = ACCOUNT_MED
fair_market_price = 5
@@ -57,8 +57,8 @@
icon_state = initial(icon_state)
/obj/machinery/sleeper/container_resist(mob/living/user)
- visible_message("[occupant] emerges from [src]!",
- "You climb out of [src]!")
+ visible_message(span_notice("[occupant] emerges from [src]!"),
+ span_notice("You climb out of [src]!"))
open_machine()
/obj/machinery/sleeper/Exited(atom/movable/user)
@@ -103,10 +103,10 @@
if(..())
return
if(occupant)
- to_chat(user, "[src] is currently occupied!")
+ to_chat(user, span_warning("[src] is currently occupied!"))
return
if(state_open)
- to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")
+ to_chat(user, span_warning("[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!"))
return
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
return
@@ -128,7 +128,7 @@
. = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
if(.)
I.play_tool_sound(src, 50)
- visible_message("[usr] pries open [src].", "You pry open [src].")
+ visible_message(span_notice("[usr] pries open [src]."), span_notice("You pry open [src]."))
open_machine()
/obj/machinery/sleeper/ui_state(mob/user)
@@ -152,7 +152,7 @@
/obj/machinery/sleeper/examine(mob/user)
. = ..()
- . += "Alt-click [src] to [state_open ? "close" : "open"] it."
+ . += span_notice("Alt-click [src] to [state_open ? "close" : "open"] it.")
/obj/machinery/sleeper/process()
..()
@@ -225,11 +225,11 @@
if(inject_chem(chem, usr))
. = TRUE
if(scrambled_chems && prob(5))
- to_chat(usr, "Chemical system re-route detected, results may not be as expected!")
+ to_chat(usr, span_warning("Chemical system re-route detected, results may not be as expected!"))
/obj/machinery/sleeper/emag_act(mob/user)
scramble_chem_buttons()
- to_chat(user, "You scramble the sleeper's user interface!")
+ to_chat(user, span_warning("You scramble the sleeper's user interface!"))
/obj/machinery/sleeper/proc/inject_chem(chem, mob/user)
if((chem in available_chems) && chem_allowed(chem))
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index a7d40547b021..8b02fea64e09 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -125,6 +125,10 @@ Class Procs:
var/payment_department = ACCOUNT_ENG
/// For storing and overriding ui id
var/tgui_id // ID of TGUI interface
+ var/climbable = FALSE
+ var/climb_time = 20
+ var/climb_stun = 20
+ var/mob/living/machineclimber
/obj/machinery/Initialize()
if(!armor)
@@ -255,7 +259,7 @@ Class Procs:
return FALSE
var/mob/living/carbon/H = user
if(istype(H) && H.has_dna() && H.dna.check_mutation(ACTIVE_HULK))
- to_chat(H, "HULK NOT NERD. HULK SMASH!!!")
+ to_chat(H, span_warning("HULK NOT NERD. HULK SMASH!!!"))
return FALSE
if(!Adjacent(user))
if(!(istype(H) && H.has_dna() && H.dna.check_mutation(TK)))
@@ -321,7 +325,7 @@ Class Procs:
else
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
- user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE)
+ user.visible_message(span_danger("[user.name] smashes against \the [src.name] with its paws."), null, null, COMBAT_MESSAGE_RANGE)
take_damage(4, BRUTE, "melee", 1)
/obj/machinery/attack_robot(mob/user)
@@ -353,7 +357,7 @@ Class Procs:
. = !(state_open || panel_open || is_operational() || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
if(.)
I.play_tool_sound(src, 50)
- visible_message("[usr] pries open \the [src].", "You pry open \the [src].")
+ visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open \the [src]."))
open_machine()
/obj/machinery/proc/default_deconstruction_crowbar(obj/item/I, ignore_panel = 0)
@@ -405,11 +409,11 @@ Class Procs:
if(!panel_open)
panel_open = TRUE
icon_state = icon_state_open
- to_chat(user, "You open the maintenance hatch of [src].")
+ to_chat(user, span_notice("You open the maintenance hatch of [src]."))
else
panel_open = FALSE
icon_state = icon_state_closed
- to_chat(user, "You close the maintenance hatch of [src].")
+ to_chat(user, span_notice("You close the maintenance hatch of [src]."))
return 1
return 0
@@ -417,13 +421,13 @@ Class Procs:
if(panel_open && I.tool_behaviour == TOOL_WRENCH)
I.play_tool_sound(src, 50)
setDir(turn(dir,-90))
- to_chat(user, "You rotate [src].")
+ to_chat(user, span_notice("You rotate [src]."))
return 1
return 0
/obj/proc/can_be_unfasten_wrench(mob/user, silent) //if we can unwrench this object; returns SUCCESSFUL_UNFASTEN and FAILED_UNFASTEN, which are both TRUE, or CANT_UNFASTEN, which isn't.
if(!(isfloorturf(loc) || istype(loc, /turf/open/indestructible)) && !anchored)
- to_chat(user, "[src] needs to be on the floor to be secured!")
+ to_chat(user, span_warning("[src] needs to be on the floor to be secured!"))
return FAILED_UNFASTEN
return SUCCESSFUL_UNFASTEN
@@ -433,12 +437,12 @@ Class Procs:
if(!can_be_unfasten || can_be_unfasten == FAILED_UNFASTEN)
return can_be_unfasten
if(time)
- to_chat(user, "You begin [anchored ? "un" : ""]securing [src]...")
+ to_chat(user, span_notice("You begin [anchored ? "un" : ""]securing [src]..."))
I.play_tool_sound(src, 50)
var/prev_anchored = anchored
//as long as we're the same anchored state and we're either on a floor or are anchored, toggle our anchored state
if(I.use_tool(src, user, time, extra_checks = CALLBACK(src, .proc/unfasten_wrench_check, prev_anchored, user)))
- to_chat(user, "You [anchored ? "un" : ""]secure [src].")
+ to_chat(user, span_notice("You [anchored ? "un" : ""]secure [src]."))
setAnchored(!anchored)
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
return SUCCESSFUL_UNFASTEN
@@ -493,7 +497,7 @@ Class Procs:
B.moveToNullspace()
SEND_SIGNAL(W, COMSIG_TRY_STORAGE_INSERT, A, null, null, TRUE)
component_parts -= A
- to_chat(user, "[capitalize(A.name)] replaced with [B.name].")
+ to_chat(user, span_notice("[capitalize(A.name)] replaced with [B.name]."))
shouldplaysound = 1 //Only play the sound when parts are actually replaced!
break
RefreshParts()
@@ -506,18 +510,18 @@ Class Procs:
/obj/machinery/proc/display_parts(mob/user)
. = list()
- . += "It contains the following parts:"
+ . += span_notice("It contains the following parts:")
for(var/obj/item/C in component_parts)
- . += "[icon2html(C, user)] \A [C]."
+ . += span_notice("[icon2html(C, user)] \A [C].")
. = jointext(., "")
/obj/machinery/examine(mob/user)
. = ..()
if(stat & BROKEN)
- . += "It looks broken and non-functional."
+ . += span_notice("It looks broken and non-functional.")
if(!(resistance_flags & INDESTRUCTIBLE))
if(resistance_flags & ON_FIRE)
- . += "It's on fire!"
+ . += span_warning("It's on fire!")
var/healthpercent = (obj_integrity/max_integrity) * 100
switch(healthpercent)
if(50 to 99)
@@ -525,7 +529,7 @@ Class Procs:
if(25 to 50)
. += "It appears heavily damaged."
if(0 to 25)
- . += "It's falling apart!"
+ . += span_warning("It's falling apart!")
if(user.research_scanner && component_parts)
. += display_parts(user, TRUE)
@@ -580,3 +584,52 @@ Class Procs:
/obj/machinery/rust_heretic_act()
take_damage(500, BRUTE, "melee", 1)
+
+/obj/machinery/MouseDrop_T(atom/movable/O, mob/user)
+ . = ..()
+ if(!climbable)
+ return
+ if(user == O && iscarbon(O))
+ var/mob/living/carbon/C = O
+ if(C.mobility_flags & MOBILITY_MOVE)
+ climb_machine(user)
+ return
+ if(!istype(O, /obj/item) || user.get_active_held_item() != O)
+ return
+ if(iscyborg(user))
+ return
+ if(!user.dropItemToGround(O))
+ return
+ if (O.loc != src.loc)
+ step(O, get_dir(O, src))
+
+/obj/machinery/proc/do_climb(atom/movable/A)
+ if(climbable)
+ density = FALSE
+ . = step(A,get_dir(A,src.loc))
+ density = TRUE
+
+/obj/machinery/proc/climb_machine(mob/living/user)
+ src.add_fingerprint(user)
+ user.visible_message("[user] starts climbing onto [src].", \
+ "You start climbing onto [src]...")
+ var/adjusted_climb_time = climb_time
+ if(user.restrained()) //climbing takes twice as long when restrained.
+ adjusted_climb_time *= 2
+ if(isalien(user))
+ adjusted_climb_time *= 0.25 //aliens are terrifyingly fast
+ if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am???
+ adjusted_climb_time *= 0.8
+ machineclimber = user
+ if(do_mob(user, user, adjusted_climb_time))
+ if(src.loc) //Checking if structure has been destroyed
+ if(do_climb(user))
+ user.visible_message("[user] climbs onto [src].", \
+ "You climb onto [src].")
+ log_combat(user, src, "climbed onto")
+ if(climb_stun)
+ user.Stun(climb_stun)
+ . = 1
+ else
+ to_chat(user, "You fail to climb onto [src].")
+ machineclimber = null
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index b52cef12ac19..51773e1cea6d 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -15,7 +15,7 @@
/obj/machinery/ai_slipper/examine(mob/user)
. = ..()
- . += "It has [uses] uses of foam remaining."
+ . += span_notice("It has [uses] uses of foam remaining.")
/obj/machinery/ai_slipper/update_icon()
if(stat & BROKEN)
@@ -27,17 +27,17 @@
/obj/machinery/ai_slipper/interact(mob/user)
if(!allowed(user))
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
return
if(!uses)
- to_chat(user, "[src] is out of foam and cannot be activated.")
+ to_chat(user, span_danger("[src] is out of foam and cannot be activated."))
return
if(cooldown_time > world.time)
- to_chat(user, "[src] cannot be activated for [DisplayTimeText(world.time - cooldown_time)].")
+ to_chat(user, span_danger("[src] cannot be activated for [DisplayTimeText(world.time - cooldown_time)]."))
return
new /obj/effect/particle_effect/foam(loc)
uses--
- to_chat(user, "You activate [src]. It now has [uses] uses of foam remaining.")
+ to_chat(user, span_notice("You activate [src]. It now has [uses] uses of foam remaining."))
cooldown = world.time + cooldown_time
power_change()
addtimer(CALLBACK(src, .proc/power_change), cooldown_time)
diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm
index f9302c01902f..ab4ba9fe0910 100644
--- a/code/game/machinery/airlock_cycle_control.dm
+++ b/code/game/machinery/airlock_cycle_control.dm
@@ -437,7 +437,7 @@
if(2)
if(W.tool_behaviour == TOOL_WIRECUTTER && panel_open && wires.is_all_cut())
W.play_tool_sound(src)
- to_chat(user, "You cut the final wires.")
+ to_chat(user, span_notice("You cut the final wires."))
new /obj/item/stack/cable_coil(loc, 5)
buildstage = 1
update_icon()
@@ -445,7 +445,7 @@
else if(W.tool_behaviour == TOOL_SCREWDRIVER) // Opening that up.
W.play_tool_sound(src)
panel_open = !panel_open
- to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"].")
+ to_chat(user, span_notice("The wires have been [panel_open ? "exposed" : "unexposed"]."))
update_icon()
return
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))// trying to unlock the interface with an ID card
@@ -457,11 +457,11 @@
if(1)
if(W.tool_behaviour == TOOL_CROWBAR)
user.visible_message("[user.name] removes the electronics from [src.name].",\
- "You start prying out the circuit...")
+ span_notice("You start prying out the circuit..."))
W.play_tool_sound(src)
if (W.use_tool(src, user, 20))
if (buildstage == 1)
- to_chat(user, "You remove the airlock controller electronics.")
+ to_chat(user, span_notice("You remove the airlock controller electronics."))
new /obj/item/electronics/advanced_airlock_controller( src.loc )
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
buildstage = 0
@@ -471,14 +471,14 @@
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/cable = W
if(cable.get_amount() < 5)
- to_chat(user, "You need five lengths of cable to wire the airlock controller!")
+ to_chat(user, span_warning("You need five lengths of cable to wire the airlock controller!"))
return
user.visible_message("[user.name] wires the airlock controller.", \
- "You start wiring the airlock controller...")
+ span_notice("You start wiring the airlock controller..."))
if (do_after(user, 20, target = src))
if (cable.get_amount() >= 5 && buildstage == 1)
cable.use(5)
- to_chat(user, "You wire the airlock controller.")
+ to_chat(user, span_notice("You wire the airlock controller."))
wires.repair()
aidisabled = 0
locked = FALSE
@@ -491,7 +491,7 @@
if(0)
if(istype(W, /obj/item/electronics/advanced_airlock_controller))
if(user.temporarilyRemoveItemFromInventory(W))
- to_chat(user, "You insert the circuit.")
+ to_chat(user, span_notice("You insert the circuit."))
buildstage = 1
update_icon()
qdel(W)
@@ -501,14 +501,14 @@
var/obj/item/electroadaptive_pseudocircuit/P = W
if(!P.adapt_circuit(user, 25))
return
- user.visible_message("[user] fabricates a circuit and places it into [src].", \
- "You adapt an airlock controller circuit and slot it into the assembly.")
+ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
+ span_notice("You adapt an airlock controller circuit and slot it into the assembly."))
buildstage = 1
update_icon()
return
if(W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You detach \the [src] from the wall.")
+ to_chat(user, span_notice("You detach \the [src] from the wall."))
W.play_tool_sound(src)
new /obj/item/wallframe/advanced_airlock_controller( user.loc )
qdel(src)
@@ -674,7 +674,7 @@
if(!A.allowed(usr))
if(is_allowed)
is_allowed = FALSE
- to_chat(usr, "Access denied.")
+ to_chat(usr, span_danger("Access denied."))
if(A.density)
spawn()
A.do_animate("deny")
@@ -771,15 +771,15 @@
/obj/machinery/advanced_airlock_controller/proc/togglelock(mob/living/user)
if(stat & (NOPOWER|BROKEN))
- to_chat(user, "It does nothing!")
+ to_chat(user, span_warning("It does nothing!"))
else
if(src.allowed(usr) && !wires.is_cut(WIRE_IDSCAN))
locked = !locked
update_icon()
- to_chat(user, "You [ locked ? "lock" : "unlock"] the airlock controller interface.")
+ to_chat(user, span_notice("You [ locked ? "lock" : "unlock"] the airlock controller interface."))
updateUsrDialog()
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
return
/obj/machinery/advanced_airlock_controller/power_change()
@@ -790,7 +790,7 @@
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
- visible_message("Sparks fly out of [src]!", "You emag [src], disabling its safeties.")
+ visible_message(span_warning("Sparks fly out of [src]!"), span_notice("You emag [src], disabling its safeties."))
playsound(src, "sparks", 50, 1)
/obj/machinery/advanced_airlock_controller/obj_break(damage_flag)
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index 03827ac882ef..1a7697f1d43e 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -59,12 +59,12 @@ GLOBAL_LIST_EMPTY(announcement_systems)
if(P.tool_behaviour == TOOL_SCREWDRIVER)
P.play_tool_sound(src)
panel_open = !panel_open
- to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].")
+ to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src]."))
update_icon()
else if(default_deconstruction_crowbar(P))
return
else if(P.tool_behaviour == TOOL_MULTITOOL && panel_open && (stat & BROKEN))
- to_chat(user, "You reset [src]'s firmware.")
+ to_chat(user, span_notice("You reset [src]'s firmware."))
stat &= ~BROKEN
update_icon()
else
@@ -121,7 +121,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
if(!usr.canUseTopic(src, !issilicon(usr)))
return
if(stat & BROKEN)
- visible_message("[src] buzzes.", "You hear a faint buzz.")
+ visible_message(span_warning("[src] buzzes."), span_italics("You hear a faint buzz."))
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1)
return
switch(action)
@@ -154,7 +154,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
if(!user.canUseTopic(src, !issilicon(user)))
return
if(stat & BROKEN)
- to_chat(user, "[src]'s firmware appears to be malfunctioning!")
+ to_chat(user, span_warning("[src]'s firmware appears to be malfunctioning!"))
return
interact(user)
diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm
index 3d1de53b49d4..03f682bc68b9 100644
--- a/code/game/machinery/aug_manipulator.dm
+++ b/code/game/machinery/aug_manipulator.dm
@@ -13,7 +13,7 @@
/obj/machinery/aug_manipulator/examine(mob/user)
. = ..()
if(storedpart)
- . += "Alt-click to eject the limb."
+ . += span_notice("Alt-click to eject the limb.")
/obj/machinery/aug_manipulator/Initialize()
initial_icon_state = initial(icon_state)
@@ -60,10 +60,10 @@
else if(istype(O, /obj/item/bodypart))
var/obj/item/bodypart/B = O
if(B.status != BODYPART_ROBOTIC)
- to_chat(user, "The machine only accepts cybernetics!")
+ to_chat(user, span_warning("The machine only accepts cybernetics!"))
return
if(storedpart)
- to_chat(user, "There is already something inside!")
+ to_chat(user, span_warning("There is already something inside!"))
return
else
O = user.get_active_held_item()
@@ -79,18 +79,18 @@
return
user.visible_message("[user] begins repairing [src].", \
- "You begin repairing [src]...", \
- "You hear welding.")
+ span_notice("You begin repairing [src]..."), \
+ span_italics("You hear welding."))
if(O.use_tool(src, user, 40, volume=50))
if(!(stat & BROKEN))
return
- to_chat(user, "You repair [src].")
+ to_chat(user, span_notice("You repair [src]."))
stat &= ~BROKEN
obj_integrity = max(obj_integrity, max_integrity)
update_icon()
else
- to_chat(user, "[src] does not need repairs.")
+ to_chat(user, span_notice("[src] does not need repairs."))
else
return ..()
@@ -112,7 +112,7 @@
eject_part(user)
else
- to_chat(user, "\The [src] is empty.")
+ to_chat(user, span_notice("\The [src] is empty."))
/obj/machinery/aug_manipulator/proc/eject_part(mob/living/user)
if(storedpart)
@@ -120,7 +120,7 @@
storedpart = null
update_icon()
else
- to_chat(user, "[src] is empty.")
+ to_chat(user, span_notice("[src] is empty."))
/obj/machinery/aug_manipulator/AltClick(mob/living/user)
..()
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 12e434160274..73496e8308c2 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -140,11 +140,11 @@
if((autoqueue.len + 1) < queue_max_len)
add_to_queue(request, multiplier) // Add item to queue for processing
else
- to_chat(usr, "The autolathe queue is full!")
+ to_chat(usr, span_warning("The autolathe queue is full!"))
if("eject")
request = stored_research.isDesignResearchedID(params["item_id"])
if(processing_queue)
- to_chat(usr, "The autolathe queue is processing, please stop before ejecting material")
+ to_chat(usr, span_warning("The autolathe queue is processing, please stop before ejecting material"))
if(!request)
return
var/multiplier = text2num(params["multiplier"])
diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm
index cb50e31bb1cb..c5b77c174b91 100644
--- a/code/game/machinery/bank_machine.dm
+++ b/code/game/machinery/bank_machine.dm
@@ -34,7 +34,7 @@
var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR)
if(D)
D.adjust_money(value)
- to_chat(user, "You deposit [I]. The Cargo Budget is now $[D.account_balance].")
+ to_chat(user, span_notice("You deposit [I]. The Cargo Budget is now $[D.account_balance]."))
qdel(I)
return
return ..()
diff --git a/code/game/machinery/bounty_board.dm b/code/game/machinery/bounty_board.dm
index bbd745ef41d0..97490cae0d42 100644
--- a/code/game/machinery/bounty_board.dm
+++ b/code/game/machinery/bounty_board.dm
@@ -48,16 +48,16 @@ GLOBAL_LIST_EMPTY(request_list)
to_chat(user, "There's no account assigned with this ID.")
return TRUE
if(I.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start [anchored ? "un" : ""]securing [name]...")
+ to_chat(user, span_notice("You start [anchored ? "un" : ""]securing [name]..."))
I.play_tool_sound(src)
if(I.use_tool(src, user, 30))
playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
if(stat & BROKEN)
- to_chat(user, "The broken remains of [src] fall on the ground.")
+ to_chat(user, span_warning("The broken remains of [src] fall on the ground."))
new /obj/item/stack/sheet/metal(loc, 3)
new /obj/item/shard(loc)
else
- to_chat(user, "You [anchored ? "un" : ""]secure [name].")
+ to_chat(user, span_notice("You [anchored ? "un" : ""]secure [name]."))
new /obj/item/wallframe/bounty_board(loc)
qdel(src)
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 6ac722f12192..f9c590ed5be3 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -63,34 +63,34 @@
default_deconstruction_screwdriver(user, "button-open", "[skin]",W)
update_icon()
else
- to_chat(user, "Maintenance Access Denied")
+ to_chat(user, span_danger("Maintenance Access Denied"))
flick("[skin]-denied", src)
return
if(panel_open)
if(!device && istype(W, /obj/item/assembly))
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to you!")
+ to_chat(user, span_warning("\The [W] is stuck to you!"))
return
device = W
- to_chat(user, "You add [W] to the button.")
+ to_chat(user, span_notice("You add [W] to the button."))
if(!board && istype(W, /obj/item/electronics/airlock))
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to you!")
+ to_chat(user, span_warning("\The [W] is stuck to you!"))
return
board = W
if(board.one_access)
req_one_access = board.accesses
else
req_access = board.accesses
- to_chat(user, "You add [W] to the button.")
+ to_chat(user, span_notice("You add [W] to the button."))
if(!device && !board && W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start unsecuring the button frame...")
+ to_chat(user, span_notice("You start unsecuring the button frame..."))
W.play_tool_sound(src)
if(W.use_tool(src, user, 4 SECONDS))
- to_chat(user, "You unsecure the button frame.")
+ to_chat(user, span_notice("You unsecure the button frame."))
transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src)))
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
qdel(src)
@@ -100,19 +100,19 @@
var/obj/item/multitool/P = W
if(!id) // Generate New ID if none exists
id = rand(1, 25565) // rare enough that ids should never conflict
- to_chat(user, "No ID found. Generating New ID")
+ to_chat(user, span_notice("No ID found. Generating New ID"))
P.buffer = id
- to_chat(user, "You link the button to the [P].")
+ to_chat(user, span_notice("You link the button to the [P]."))
setup_device() // Has to be done. It sets the signaller up
else
- to_chat(user, "No blast door controller found")
+ to_chat(user, span_warning("No blast door controller found"))
if(board && W.tool_behaviour == TOOL_WIRECUTTER)
- to_chat(user, "You start wiping the button's ID...")
+ to_chat(user, span_warning("You start wiping the button's ID..."))
W.play_tool_sound(src)
if(W.use_tool(src, user, 4 SECONDS)) // To make sure they're not doing this unintentionally
- to_chat(user, "You wipe the button's ID.")
+ to_chat(user, span_notice("You wipe the button's ID."))
id = null
update_icon()
@@ -165,14 +165,14 @@
req_one_access = list()
board = null
update_icon()
- to_chat(user, "You remove electronics from the button frame.")
+ to_chat(user, span_notice("You remove electronics from the button frame."))
else
if(skin == "doorctrl")
skin = "launcher"
else
skin = "doorctrl"
- to_chat(user, "You change the button frame's front panel.")
+ to_chat(user, span_notice("You change the button frame's front panel."))
return
if((stat & (NOPOWER|BROKEN)))
@@ -182,7 +182,7 @@
return
if(!allowed(user))
- to_chat(user, "Access Denied")
+ to_chat(user, span_danger("Access Denied"))
flick("[skin]-denied", src)
return
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 8807d488aff7..8798b5b55945 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -110,24 +110,24 @@
if(isEmpProof(TRUE)) //don't reveal it's upgraded if was done via MALF AI Upgrade Camera Network ability
. += "It has electromagnetic interference shielding installed."
else
- . += "It can be shielded against electromagnetic interference with some plasma."
+ . += span_info("It can be shielded against electromagnetic interference with some plasma.")
if(isXRay(TRUE)) //don't reveal it's upgraded if was done via MALF AI Upgrade Camera Network ability
. += "It has an X-ray photodiode installed."
else
- . += "It can be upgraded with an X-ray photodiode with an analyzer."
+ . += span_info("It can be upgraded with an X-ray photodiode with an analyzer.")
if(isMotion())
. += "It has a proximity sensor installed."
else
- . += "It can be upgraded with a proximity sensor."
+ . += span_info("It can be upgraded with a proximity sensor.")
if(!status)
- . += "It's currently deactivated."
+ . += span_info("It's currently deactivated.")
if(!panel_open && powered())
- . += "You'll need to open its maintenance panel with a screwdriver to turn it back on."
+ . += span_notice("You'll need to open its maintenance panel with a screwdriver to turn it back on.")
if(panel_open)
- . += "Its maintenance panel is currently open."
+ . += span_info("Its maintenance panel is currently open.")
if(!status && powered())
- . += "It can reactivated with wirecutters."
+ . += span_info("It can reactivated with wirecutters.")
/obj/machinery/camera/emp_act(severity)
. = ..()
@@ -186,7 +186,7 @@
if(..())
return TRUE
panel_open = !panel_open
- to_chat(user, "You screw the camera's panel [panel_open ? "open" : "closed"].")
+ to_chat(user, span_notice("You screw the camera's panel [panel_open ? "open" : "closed"]."))
I.play_tool_sound(src)
update_icon()
return TRUE
@@ -204,7 +204,7 @@
return FALSE
setViewRange((view_range == initial(view_range)) ? short_range : initial(view_range))
- to_chat(user, "You [(view_range == initial(view_range)) ? "restore" : "mess up"] the camera's focus.")
+ to_chat(user, span_notice("You [(view_range == initial(view_range)) ? "restore" : "mess up"] the camera's focus."))
return TRUE
/obj/machinery/camera/welder_act(mob/living/user, obj/item/I)
@@ -214,10 +214,10 @@
if(!I.tool_start_check(user, amount=0))
return TRUE
- to_chat(user, "You start to weld [src]...")
+ to_chat(user, span_notice("You start to weld [src]..."))
if(I.use_tool(src, user, 100, volume=50))
- user.visible_message("[user] unwelds [src], leaving it as just a frame bolted to the wall.",
- "You unweld [src], leaving it as just a frame bolted to the wall")
+ user.visible_message(span_warning("[user] unwelds [src], leaving it as just a frame bolted to the wall."),
+ span_warning("You unweld [src], leaving it as just a frame bolted to the wall"))
deconstruct(TRUE)
return TRUE
@@ -230,19 +230,19 @@
if(!user.temporarilyRemoveItemFromInventory(I))
return
upgradeXRay(FALSE, TRUE)
- to_chat(user, "You attach [I] into [assembly]'s inner circuits.")
+ to_chat(user, span_notice("You attach [I] into [assembly]'s inner circuits."))
qdel(I)
else
- to_chat(user, "[src] already has that upgrade!")
+ to_chat(user, span_notice("[src] already has that upgrade!"))
return
else if(istype(I, /obj/item/stack/sheet/mineral/plasma))
if(!isEmpProof(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability
if(I.use_tool(src, user, 0, amount=1))
upgradeEmpProof(FALSE, TRUE)
- to_chat(user, "You attach [I] into [assembly]'s inner circuits.")
+ to_chat(user, span_notice("You attach [I] into [assembly]'s inner circuits."))
else
- to_chat(user, "[src] already has that upgrade!")
+ to_chat(user, span_notice("[src] already has that upgrade!"))
return
else if(istype(I, /obj/item/assembly/prox_sensor))
@@ -250,10 +250,10 @@
if(!user.temporarilyRemoveItemFromInventory(I))
return
upgradeMotion()
- to_chat(user, "You attach [I] into [assembly]'s inner circuits.")
+ to_chat(user, span_notice("You attach [I] into [assembly]'s inner circuits."))
qdel(I)
else
- to_chat(user, "[src] already has that upgrade!")
+ to_chat(user, span_notice("[src] already has that upgrade!"))
return
// OTHER
@@ -272,7 +272,7 @@
P = I
itemname = P.name
info = P.notehtml
- to_chat(U, "You hold \the [itemname] up to the camera...")
+ to_chat(U, span_notice("You hold \the [itemname] up to the camera..."))
U.changeNext_move(CLICK_CD_MELEE)
for(var/mob/O in GLOB.player_list)
if(isAI(O))
@@ -291,14 +291,14 @@
else if(istype(I, /obj/item/camera_bug))
if(!can_use())
- to_chat(user, "Camera non-functional.")
+ to_chat(user, span_notice("Camera non-functional."))
return
if(bug)
- to_chat(user, "Camera bug removed.")
+ to_chat(user, span_notice("Camera bug removed."))
bug.bugged_cameras -= src.c_tag
bug = null
else
- to_chat(user, "Camera bugged.")
+ to_chat(user, span_notice("Camera bugged."))
bug = I
bug.bugged_cameras[src.c_tag] = src
return
@@ -371,10 +371,10 @@
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
if(displaymessage)
if(user)
- visible_message("[user] [change_msg] [src]!")
+ visible_message(span_danger("[user] [change_msg] [src]!"))
add_hiddenprint(user)
else
- visible_message("\The [src] [change_msg]!")
+ visible_message(span_danger("\The [src] [change_msg]!"))
playsound(src, 'sound/items/wirecutter.ogg', 100, TRUE)
update_icon() //update Initialize() if you remove this.
diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm
index a20facc7a5b7..f69ec7ca6b95 100644
--- a/code/game/machinery/camera/camera_assembly.dm
+++ b/code/game/machinery/camera/camera_assembly.dm
@@ -37,30 +37,30 @@
. += "It has electromagnetic interference shielding installed."
has_upgrades = TRUE
else if(state == STATE_WIRED)
- . += "It can be shielded against electromagnetic interference with some plasma."
+ . += span_info("It can be shielded against electromagnetic interference with some plasma.")
if(xray_module)
. += "It has an X-ray photodiode installed."
has_upgrades = TRUE
else if(state == STATE_WIRED)
- . += "It can be upgraded with an X-ray photodiode with an analyzer."
+ . += span_info("It can be upgraded with an X-ray photodiode with an analyzer.")
if(proxy_module)
. += "It has a proximity sensor installed."
has_upgrades = TRUE
else if(state == STATE_WIRED)
- . += "It can be upgraded with a proximity sensor."
+ . += span_info("It can be upgraded with a proximity sensor.")
//construction states
switch(state)
if(STATE_WRENCHED)
- . += "You can secure it in place with a welder, or removed with a wrench."
+ . += span_info("You can secure it in place with a welder, or removed with a wrench.")
if(STATE_WELDED)
- . += "You can add wires to it, or unweld it from the wall."
+ . += span_info("You can add wires to it, or unweld it from the wall.")
if(STATE_WIRED)
if(has_upgrades)
- . += "You can remove the contained upgrades with a crowbar."
- . += "You can complete it with a screwdriver, or unwire it to start removal."
+ . += span_info("You can remove the contained upgrades with a crowbar.")
+ . += span_info("You can complete it with a screwdriver, or unwire it to start removal.")
if(STATE_FINISHED)
- . += "You shouldn't be seeing this, tell a coder!"
+ . += span_boldwarning("You shouldn't be seeing this, tell a coder!")
/obj/structure/camera_assembly/Initialize(mapload, ndir, building)
. = ..()
@@ -125,7 +125,7 @@
if(STATE_WRENCHED)
if(W.tool_behaviour == TOOL_WELDER)
if(weld(W, user))
- to_chat(user, "You weld [src] securely into place.")
+ to_chat(user, span_notice("You weld [src] securely into place."))
setAnchored(TRUE)
state = STATE_WELDED
return
@@ -134,17 +134,17 @@
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if(C.use(2))
- to_chat(user, "You add wires to [src].")
+ to_chat(user, span_notice("You add wires to [src]."))
state = STATE_WIRED
else
- to_chat(user, "You need two lengths of cable to wire a camera!")
+ to_chat(user, span_warning("You need two lengths of cable to wire a camera!"))
return
return
else if(W.tool_behaviour == TOOL_WELDER)
if(weld(W, user))
- to_chat(user, "You unweld [src] from its place.")
+ to_chat(user, span_notice("You unweld [src] from its place."))
state = STATE_WRENCHED
setAnchored(TRUE)
return
@@ -152,7 +152,7 @@
if(STATE_WIRED) // Upgrades!
if(istype(W, /obj/item/stack/sheet/mineral/plasma)) //emp upgrade
if(emp_module)
- to_chat(user, "[src] already contains a [emp_module]!")
+ to_chat(user, span_warning("[src] already contains a [emp_module]!"))
return
if(!W.use_tool(src, user, 0, amount=1)) //only use one sheet, otherwise the whole stack will be consumed.
return
@@ -160,16 +160,16 @@
if(malf_xray_firmware_active)
malf_xray_firmware_active = FALSE //flavor reason: MALF AI Upgrade Camera Network ability's firmware is incompatible with the new part
//real reason: make it a normal upgrade so the finished camera's icons and examine texts are restored.
- to_chat(user, "You attach [W] into [src]'s inner circuits.")
+ to_chat(user, span_notice("You attach [W] into [src]'s inner circuits."))
return
else if(istype(W, /obj/item/analyzer)) //xray upgrade
if(xray_module)
- to_chat(user, "[src] already contains a [xray_module]!")
+ to_chat(user, span_warning("[src] already contains a [xray_module]!"))
return
if(!user.transferItemToLoc(W, src))
return
- to_chat(user, "You attach [W] into [src]'s inner circuits.")
+ to_chat(user, span_notice("You attach [W] into [src]'s inner circuits."))
xray_module = W
if(malf_xray_firmware_active)
malf_xray_firmware_active = FALSE //flavor reason: MALF AI Upgrade Camera Network ability's firmware is incompatible with the new part
@@ -179,11 +179,11 @@
else if(istype(W, /obj/item/assembly/prox_sensor)) //motion sensing upgrade
if(proxy_module)
- to_chat(user, "[src] already contains a [proxy_module]!")
+ to_chat(user, span_warning("[src] already contains a [proxy_module]!"))
return
if(!user.transferItemToLoc(W, src))
return
- to_chat(user, "You attach [W] into [src]'s inner circuits.")
+ to_chat(user, span_notice("You attach [W] into [src]'s inner circuits."))
proxy_module = W
return
@@ -204,7 +204,7 @@
var/obj/item/choice = input(user, "Select a part to remove:", src) as null|obj in droppable_parts
if(!choice || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
- to_chat(user, "You remove [choice] from [src].")
+ to_chat(user, span_notice("You remove [choice] from [src]."))
drop_upgrade(choice)
tool.play_tool_sound(src)
return TRUE
@@ -219,11 +219,11 @@
tool.play_tool_sound(src)
var/input = stripped_input(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13")
if(!input)
- to_chat(user, "No input found, please hang up and try your call again!")
+ to_chat(user, span_warning("No input found, please hang up and try your call again!"))
return
var/list/tempnetwork = splittext(input, ",")
if(tempnetwork.len < 1)
- to_chat(user, "No network found, please hang up and try your call again!")
+ to_chat(user, span_warning("No network found, please hang up and try your call again!"))
return
for(var/i in tempnetwork)
tempnetwork -= i
@@ -244,7 +244,7 @@
new /obj/item/stack/cable_coil(drop_location(), 2)
I.play_tool_sound(src)
- to_chat(user, "You cut the wires from the circuits.")
+ to_chat(user, span_notice("You cut the wires from the circuits."))
state = STATE_WELDED
return TRUE
@@ -252,7 +252,7 @@
if(state != STATE_WRENCHED)
return FALSE
I.play_tool_sound(src)
- to_chat(user, "You detach [src] from its place.")
+ to_chat(user, span_notice("You detach [src] from its place."))
new /obj/item/wallframe/camera(drop_location())
//drop upgrades
if(xray_module)
@@ -268,7 +268,7 @@
/obj/structure/camera_assembly/proc/weld(obj/item/weldingtool/W, mob/living/user)
if(!W.tool_start_check(user, amount=3))
return FALSE
- to_chat(user, "You start to weld [src]...")
+ to_chat(user, span_notice("You start to weld [src]..."))
if(W.use_tool(src, user, 20, amount=3, volume = 50))
return TRUE
return FALSE
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index af5093d6caf9..3481dc985f3a 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -66,7 +66,7 @@
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
if (status)
aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src)
- visible_message("A red light flashes on the [src]!")
+ visible_message(span_warning("A red light flashes on the [src]!"))
detectTime = -1
return TRUE
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index d6e5a7f0436b..0b69224d12f1 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -80,11 +80,11 @@
U.tracking = 1
if(!target || !target.can_track(usr))
- to_chat(U, "Target is not near any active cameras.")
+ to_chat(U, span_warning("Target is not near any active cameras."))
U.cameraFollow = null
return
- to_chat(U, "Now tracking [target.get_visible_name()] on camera.")
+ to_chat(U, span_notice("Now tracking [target.get_visible_name()] on camera."))
var/cameraticks = 0
spawn(0)
@@ -95,11 +95,11 @@
if(!target.can_track(usr))
U.tracking = 1
if(!cameraticks)
- to_chat(U, "Target is not near any active cameras. Attempting to reacquire...")
+ to_chat(U, span_warning("Target is not near any active cameras. Attempting to reacquire..."))
cameraticks++
if(cameraticks > 9)
U.cameraFollow = null
- to_chat(U, "Unable to reacquire, cancelling track...")
+ to_chat(U, span_warning("Unable to reacquire, cancelling track..."))
tracking = 0
return
else
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index cb5aa575b432..a20aa05f6520 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -34,26 +34,26 @@
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
if(stat & BROKEN)
- to_chat(user, "[src] is broken!")
+ to_chat(user, span_warning("[src] is broken!"))
return
if(!anchored)
- to_chat(user, "[src] isn't attached to the ground!")
+ to_chat(user, span_warning("[src] isn't attached to the ground!"))
return
if(charging)
- to_chat(user, "There is already a cell in the charger!")
+ to_chat(user, span_warning("There is already a cell in the charger!"))
return
else
var/area/a = loc.loc // Gets our locations location, like a dream within a dream
if(!isarea(a))
return
if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power!
- to_chat(user, "[src] blinks red as you try to insert the cell!")
+ to_chat(user, span_warning("[src] blinks red as you try to insert the cell!"))
return
if(!user.transferItemToLoc(W,src))
return
charging = W
- user.visible_message("[user] inserts a cell into [src].", "You insert a cell into [src].")
+ user.visible_message("[user] inserts a cell into [src].", span_notice("You insert a cell into [src]."))
chargelevel = -1
update_icon()
else
@@ -90,7 +90,7 @@
user.put_in_hands(charging)
charging.add_fingerprint(user)
- user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].")
+ user.visible_message("[user] removes [charging] from [src].", span_notice("You remove [charging] from [src]."))
removecell()
@@ -99,7 +99,7 @@
return
charging.forceMove(loc)
- to_chat(user, "You telekinetically remove [charging] from [src].")
+ to_chat(user, span_notice("You telekinetically remove [charging] from [src]."))
removecell()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index e02d4e418f6f..a16db0ca56ab 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -89,7 +89,7 @@ GLOBAL_VAR_INIT(clones, 0)
/obj/machinery/clonepod/examine(mob/user)
. = ..()
- . += "The linking device can be scanned with a multitool."
+ . += span_notice("The linking device can be scanned with a multitool.")
if(in_range(user, src) || isobserver(user))
. += "The status display reads: Cloning speed at [speed_coeff*50]%.
Predicted amount of cellular damage: [100-heal_level]%."
. += "The status display reads: Biomass levels at [biomass]%" // read out the amount of biomass if you examine
@@ -115,7 +115,7 @@ GLOBAL_VAR_INIT(clones, 0)
/obj/item/disk/data/attack_self(mob/user)
read_only = !read_only
- to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].")
+ to_chat(user, span_notice("You flip the write-protect tab to [read_only ? "protected" : "unprotected"]."))
/obj/item/disk/data/examine(mob/user)
. = ..()
@@ -267,11 +267,11 @@ GLOBAL_VAR_INIT(clones, 0)
if(grab_ghost_when == CLONER_FRESH_CLONE)
H.grab_ghost()
- to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?")
+ to_chat(H, span_notice("Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?"))
if(grab_ghost_when == CLONER_MATURE_CLONE)
H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost
- to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.")
+ to_chat(H.get_ghost(TRUE), span_notice("Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete."))
if(H)
H.faction |= factions
@@ -410,10 +410,10 @@ GLOBAL_VAR_INIT(clones, 0)
var/mob/living/mob_occupant = occupant
if(W.GetID())
if(!check_access(W))
- to_chat(user, "Access Denied.")
+ to_chat(user, span_danger("Access Denied."))
return
if(!(mob_occupant || mess))
- to_chat(user, "Error: Pod has no occupant.")
+ to_chat(user, span_danger("Error: Pod has no occupant."))
return
else
add_fingerprint(user)
@@ -421,7 +421,7 @@ GLOBAL_VAR_INIT(clones, 0)
log_combat(user, mob_occupant, "ejected", W, "from [src]")
connected_message("Emergency Ejection")
SPEAK("An emergency ejection of [clonemind.name] has occurred. Survival not guaranteed.")
- to_chat(user, "You force an emergency ejection. ")
+ to_chat(user, span_notice("You force an emergency ejection. "))
go_out()
else
return ..()
@@ -429,7 +429,7 @@ GLOBAL_VAR_INIT(clones, 0)
/obj/machinery/clonepod/emag_act(mob/user)
if(!occupant)
return
- to_chat(user, "You corrupt the genetic compiler.")
+ to_chat(user, span_warning("You corrupt the genetic compiler."))
malfunction()
add_fingerprint(user)
log_cloning("[key_name(user)] emagged [src] at [AREACOORD(src)], causing it to malfunction.")
@@ -460,7 +460,7 @@ GLOBAL_VAR_INIT(clones, 0)
unattached_flesh.Cut()
mess = FALSE
new /obj/effect/gibspawner/generic(get_turf(src), mob_occupant)
- audible_message("You hear a splat.")
+ audible_message(span_italics("You hear a splat."))
icon_state = "pod_0"
return
@@ -476,8 +476,8 @@ GLOBAL_VAR_INIT(clones, 0)
if(grab_ghost_when == CLONER_MATURE_CLONE)
mob_occupant.grab_ghost()
- to_chat(occupant, "There is a bright flash!
You feel like a new being.")
- to_chat(occupant, "You do not remember your death, how you died, or who killed you. See rule 1.6.") //yogs
+ to_chat(occupant, span_notice("There is a bright flash!
You feel like a new being."))
+ to_chat(occupant, span_notice("You do not remember your death, how you died, or who killed you. See rule 1.6.")) //yogs
mob_occupant.flash_act()
GLOB.clones++
@@ -504,7 +504,7 @@ GLOBAL_VAR_INIT(clones, 0)
clonemind.transfer_to(mob_occupant)
mob_occupant.grab_ghost() // We really just want to make you suffer.
flash_color(mob_occupant, flash_color="#960000", flash_time=100)
- to_chat(mob_occupant, "Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is.")
+ to_chat(mob_occupant, span_warning("Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is."))
playsound(src, 'sound/machines/warning-buzzer.ogg', 50)
SEND_SOUND(mob_occupant, sound('sound/hallucinations/veryfar_noise.ogg',0,1,50))
log_cloning("[key_name(mob_occupant)] destroyed within [src] at [AREACOORD(src)] due to malfunction.")
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index 60e5ad879ba0..e9ca42a8ddc6 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -106,7 +106,7 @@
if(..())
return TRUE
if(circuit && !(flags_1&NODECONSTRUCT_1))
- to_chat(user, "You start to disconnect the monitor...")
+ to_chat(user, span_notice("You start to disconnect the monitor..."))
if(I.use_tool(src, user, time_to_scewdrive, volume=50))
deconstruct(TRUE, user)
return TRUE
@@ -151,7 +151,7 @@
A.setAnchored(TRUE)
if(stat & BROKEN)
if(user)
- to_chat(user, "The broken glass falls out.")
+ to_chat(user, span_notice("The broken glass falls out."))
else
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
new /obj/item/shard(drop_location())
@@ -160,7 +160,7 @@
A.icon_state = "3"
else
if(user)
- to_chat(user, "You disconnect the monitor.")
+ to_chat(user, span_notice("You disconnect the monitor."))
A.state = 4
A.icon_state = "4"
circuit = null
diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm
index 8fa0a34b6c38..cc72c13010af 100644
--- a/code/game/machinery/computer/aifixer.dm
+++ b/code/game/machinery/computer/aifixer.dm
@@ -14,9 +14,9 @@
/obj/machinery/computer/aifixer/screwdriver_act(mob/living/user, obj/item/I)
if(occupier)
if(stat & (NOPOWER|BROKEN))
- to_chat(user, "The screws on [name]'s screen won't budge.")
+ to_chat(user, span_warning("The screws on [name]'s screen won't budge."))
else
- to_chat(user, "The screws on [name]'s screen won't budge and it emits a warning beep.")
+ to_chat(user, span_warning("The screws on [name]'s screen won't budge and it emits a warning beep."))
else
return ..()
@@ -53,7 +53,7 @@
switch(action)
if("PRG_beginReconstruction")
if(occupier?.health < 100)
- to_chat(usr, "Reconstruction in progress. This will take several minutes.")
+ to_chat(usr, span_notice("Reconstruction in progress. This will take several minutes."))
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE)
restoring = TRUE
occupier.notify_ghost_cloning("Your core files are being restored!", source = src)
@@ -106,22 +106,22 @@
AI.control_disabled = TRUE
AI.radio_enabled = FALSE
to_chat(AI, "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here.")
- to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
+ to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
card.AI = null
update_icon()
else //Uploading AI from terminal to card
if(occupier && !restoring)
- to_chat(occupier, "You have been downloaded to a mobile storage device. Still no remote access.")
- to_chat(user, "Transfer successful: [occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.")
+ to_chat(occupier, span_notice("You have been downloaded to a mobile storage device. Still no remote access."))
+ to_chat(user, "[span_notice("Transfer successful")]: [occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.")
occupier.forceMove(card)
card.AI = occupier
occupier = null
update_icon()
else if (restoring)
- to_chat(user, "ERROR: Reconstruction in progress.")
+ to_chat(user, span_alert("ERROR: Reconstruction in progress."))
else if (!occupier)
- to_chat(user, "ERROR: Unable to locate artificial intelligence.")
+ to_chat(user, "[span_boldannounce("ERROR")]: Unable to locate artificial intelligence.")
/obj/machinery/computer/aifixer/on_deconstruction()
if(occupier)
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 63c8d3bd8cdd..d94d0827de9c 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -32,7 +32,7 @@
/obj/machinery/computer/apc_control/attack_ai(mob/user)
if(!IsAdminGhost(user))
- to_chat(user,"[src] does not support AI control.") //You already have APC access, cheater!
+ to_chat(user,span_warning("[src] does not support AI control.")) //You already have APC access, cheater!
return
..()
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 3d1642fee1b8..0edf270b0356 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -101,7 +101,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
new prizeselect(src)
var/atom/movable/the_prize = pick(contents)
- visible_message("[src] dispenses [the_prize]!", "You hear a chime and a clunk.")
+ visible_message(span_notice("[src] dispenses [the_prize]!"), span_notice("You hear a chime and a clunk."))
the_prize.forceMove(get_turf(src))
@@ -134,13 +134,13 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
var/obj/item/stack/arcadeticket/T = O
var/amount = T.get_amount()
if(amount <2)
- to_chat(user, "You need 2 tickets to claim a prize!")
+ to_chat(user, span_warning("You need 2 tickets to claim a prize!"))
return
prizevend(user)
T.pay_tickets()
T.update_icon()
O = T
- to_chat(user, "You turn in 2 tickets to the [src] and claim a prize!")
+ to_chat(user, span_notice("You turn in 2 tickets to the [src] and claim a prize!"))
return
// ** BATTLE ** //
@@ -330,7 +330,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
/obj/machinery/computer/arcade/battle/emag_act(mob/user)
if(obj_flags & EMAGGED)
return
- to_chat(user, "A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!")
+ to_chat(user, span_warning("A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!"))
temp = "If you die in the game, you die for real!"
player_hp = 30
player_mp = 10
@@ -467,17 +467,17 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
dat += "
You ran out of food and starved."
if(obj_flags & EMAGGED)
user.set_nutrition(0) //yeah you pretty hongry
- to_chat(user, "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.")
+ to_chat(user, span_userdanger("Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor."))
if(fuel <= 0)
dat += "
You ran out of fuel, and drift, slowly, into a star."
if(obj_flags & EMAGGED)
var/mob/living/M = user
M.adjust_fire_stacks(5)
M.IgniteMob() //flew into a star, so you're on fire
- to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.")
+ to_chat(user, span_userdanger("You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames."))
if(obj_flags & EMAGGED)
- to_chat(user, "You're never going to make it to Orion...")
+ to_chat(user, span_userdanger("You're never going to make it to Orion..."))
user.death()
obj_flags &= ~EMAGGED //removes the emagged status after you lose
gameStatus = ORION_STATUS_START
@@ -545,21 +545,21 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
switch(event)
if(ORION_TRAIL_RAIDERS)
if(prob(50))
- to_chat(usr, "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?")
+ to_chat(usr, span_userdanger("You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?"))
M.hallucination += 30
else
- to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...")
+ to_chat(usr, span_userdanger("Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..."))
M.take_bodypart_damage(30)
playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1)
if(ORION_TRAIL_ILLNESS)
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
if(severity == 1)
- to_chat(M, "You suddenly feel slightly nauseated." )
+ to_chat(M, span_userdanger("You suddenly feel slightly nauseated.") )
if(severity == 2)
- to_chat(usr, "You suddenly feel extremely nauseated and hunch over until it passes.")
+ to_chat(usr, span_userdanger("You suddenly feel extremely nauseated and hunch over until it passes."))
M.Stun(60)
if(severity >= 3) //you didn't pray hard enough
- to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.")
+ to_chat(M, span_warning("An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit."))
M.Stun(100)
sleep(30)
M.vomit(10, distance = 5)
@@ -570,7 +570,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
M.take_bodypart_damage(25)
playsound(loc, 'sound/weapons/genhit.ogg', 100, 1)
else
- to_chat(M, "A violent gale blows past you, and you barely manage to stay standing!")
+ to_chat(M, span_userdanger("A violent gale blows past you, and you barely manage to stay standing!"))
if(ORION_TRAIL_COLLISION) //by far the most damaging event
if(prob(90))
playsound(loc, 'sound/effects/bang.ogg', 100, 1)
@@ -590,7 +590,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
playsound(loc, 'sound/effects/bang.ogg', 50, 1)
if(ORION_TRAIL_MALFUNCTION)
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
- visible_message("[src] malfunctions, randomizing in-game stats!")
+ visible_message(span_danger("[src] malfunctions, randomizing in-game stats!"))
var/oldfood = food
var/oldfuel = fuel
food = rand(10,80) / rand(1,2)
@@ -598,9 +598,9 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
if(electronics)
sleep(10)
if(oldfuel > fuel && oldfood > food)
- audible_message("[src] lets out a somehow reassuring chime.")
+ audible_message(span_danger("[src] lets out a somehow reassuring chime."))
else if(oldfuel < fuel || oldfood < food)
- audible_message("[src] lets out a somehow ominous chime.")
+ audible_message(span_danger("[src] lets out a somehow ominous chime."))
food = oldfood
fuel = oldfuel
playsound(loc, 'sound/machines/chime.ogg', 50, 1)
@@ -1086,7 +1086,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user)
if(obj_flags & EMAGGED)
return
- to_chat(user, "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.")
+ to_chat(user, span_notice("You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode."))
name = "The Orion Trail: Realism Edition"
desc = "Learn how our ancestors got to Orion, and try not to die in the process!"
newgame()
@@ -1112,9 +1112,9 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
if(!(in_range(user, src)))
return
if(!active)
- . += "There's a little switch on the bottom. It's flipped down."
+ . += span_notice("There's a little switch on the bottom. It's flipped down.")
else
- . += "There's a little switch on the bottom. It's flipped up."
+ . += span_notice("There's a little switch on the bottom. It's flipped up.")
/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse
if(active)
@@ -1122,19 +1122,19 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
log_bomber(usr, "primed an explosive", src, "for detonation")
- to_chat(user, "You flip the switch on the underside of [src].")
+ to_chat(user, span_warning("You flip the switch on the underside of [src]."))
active = 1
- visible_message("[src] softly beeps and whirs to life!")
+ visible_message(span_notice("[src] softly beeps and whirs to life!"))
playsound(loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1)
say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.")
sleep(20)
- visible_message("[src] begins to vibrate...")
+ visible_message(span_warning("[src] begins to vibrate..."))
say("Uh, Port? Having some issues with our reactor, could you check it out? Over.")
sleep(30)
say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-")
playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, 1)
sleep(3.6)
- visible_message("[src] explodes!")
+ visible_message(span_userdanger("[src] explodes!"))
explosion(loc, 2,4,8, flame_range = 16)
qdel(src)
@@ -1152,9 +1152,9 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
var/mob/living/carbon/c_user = user
if(!c_user.get_bodypart(BODY_ZONE_L_ARM) && !c_user.get_bodypart(BODY_ZONE_R_ARM))
return
- to_chat(c_user, "You move your hand towards the machine, and begin to hesitate as a bloodied guillotine emerges from inside of it...")
+ to_chat(c_user, span_warning("You move your hand towards the machine, and begin to hesitate as a bloodied guillotine emerges from inside of it..."))
if(do_after(c_user, 50, target = src))
- to_chat(c_user, "The guillotine drops on your arm, and the machine sucks it in!")
+ to_chat(c_user, span_userdanger("The guillotine drops on your arm, and the machine sucks it in!"))
playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
var/which_hand = BODY_ZONE_L_ARM
if(!(c_user.active_hand_index % 2))
@@ -1166,7 +1166,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
for(var/i=1; i<=rand(3,5); i++)
prizevend(user)
else
- to_chat(c_user, "You (wisely) decide against putting your hand in the machine.")
+ to_chat(c_user, span_notice("You (wisely) decide against putting your hand in the machine."))
#undef ORION_TRAIL_WINTURN
#undef ORION_TRAIL_RAIDERS
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 0467515c7185..7cabc9b4c943 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -242,7 +242,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
var/list/text = splittext(U.id, "_")
IO |= text[1]
if(!IO.len)
- to_chat(user, "No machinery detected.")
+ to_chat(user, span_alert("No machinery detected."))
var/S = input("Select the device set: ", "Selection", IO[1]) as anything in IO
if(src)
src.input_tag = "[S]_in"
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 7e7fec58e098..6c022460a1f9 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -8,9 +8,9 @@
switch(state)
if(0)
if(P.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start wrenching the frame into place...")
+ to_chat(user, span_notice("You start wrenching the frame into place..."))
if(P.use_tool(src, user, 20, volume=50))
- to_chat(user, "You wrench the frame into place.")
+ to_chat(user, span_notice("You wrench the frame into place."))
setAnchored(TRUE)
state = 1
return
@@ -18,18 +18,18 @@
if(!P.tool_start_check(user, amount=0))
return
- to_chat(user, "You start deconstructing the frame...")
+ to_chat(user, span_notice("You start deconstructing the frame..."))
if(P.use_tool(src, user, 20, volume=50))
- to_chat(user, "You deconstruct the frame.")
+ to_chat(user, span_notice("You deconstruct the frame."))
var/obj/item/stack/sheet/metal/M = new (drop_location(), 5)
M.add_fingerprint(user)
qdel(src)
return
if(1)
if(P.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start to unfasten the frame...")
+ to_chat(user, span_notice("You start to unfasten the frame..."))
if(P.use_tool(src, user, 20, volume=50))
- to_chat(user, "You unfasten the frame.")
+ to_chat(user, span_notice("You unfasten the frame."))
setAnchored(FALSE)
state = 0
return
@@ -37,24 +37,24 @@
if(!user.transferItemToLoc(P, src))
return
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
- to_chat(user, "You place [P] inside the frame.")
+ to_chat(user, span_notice("You place [P] inside the frame."))
icon_state = "1"
circuit = P
circuit.add_fingerprint(user)
return
else if(istype(P, /obj/item/circuitboard) && !circuit)
- to_chat(user, "This frame does not accept circuit boards of this type!")
+ to_chat(user, span_warning("This frame does not accept circuit boards of this type!"))
return
if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit)
P.play_tool_sound(src)
- to_chat(user, "You screw [circuit] into place.")
+ to_chat(user, span_notice("You screw [circuit] into place."))
state = 2
icon_state = "2"
return
if(P.tool_behaviour == TOOL_CROWBAR && circuit)
P.play_tool_sound(src)
- to_chat(user, "You remove [circuit].")
+ to_chat(user, span_notice("You remove [circuit]."))
state = 1
icon_state = "0"
circuit.forceMove(drop_location())
@@ -64,25 +64,25 @@
if(2)
if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit)
P.play_tool_sound(src)
- to_chat(user, "You unfasten the circuit board.")
+ to_chat(user, span_notice("You unfasten the circuit board."))
state = 1
icon_state = "1"
return
if(istype(P, /obj/item/stack/cable_coil))
if(!P.tool_start_check(user, amount=5))
return
- to_chat(user, "You start adding cables to the frame...")
+ to_chat(user, span_notice("You start adding cables to the frame..."))
if(P.use_tool(src, user, 20, volume=50, amount=5))
if(state != 2)
return
- to_chat(user, "You add cables to the frame.")
+ to_chat(user, span_notice("You add cables to the frame."))
state = 3
icon_state = "3"
return
if(3)
if(P.tool_behaviour == TOOL_WIRECUTTER)
P.play_tool_sound(src)
- to_chat(user, "You remove the cables.")
+ to_chat(user, span_notice("You remove the cables."))
state = 2
icon_state = "2"
var/obj/item/stack/cable_coil/A = new (drop_location(), 5)
@@ -93,18 +93,18 @@
if(!P.tool_start_check(user, amount=2))
return
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
- to_chat(user, "You start to put in the glass panel...")
+ to_chat(user, span_notice("You start to put in the glass panel..."))
if(P.use_tool(src, user, 20, amount=2))
if(state != 3)
return
- to_chat(user, "You put in the glass panel.")
+ to_chat(user, span_notice("You put in the glass panel."))
state = 4
src.icon_state = "4"
return
if(4)
if(P.tool_behaviour == TOOL_CROWBAR)
P.play_tool_sound(src)
- to_chat(user, "You remove the glass panel.")
+ to_chat(user, span_notice("You remove the glass panel."))
state = 3
icon_state = "3"
var/obj/item/stack/sheet/glass/G = new(drop_location(), 2)
@@ -112,7 +112,7 @@
return
if(P.tool_behaviour == TOOL_SCREWDRIVER)
P.play_tool_sound(src)
- to_chat(user, "You connect the monitor.")
+ to_chat(user, span_notice("You connect the monitor."))
var/obj/B = new circuit.build_path (loc, circuit)
B.setDir(dir)
transfer_fingerprints_to(B)
@@ -137,7 +137,7 @@
return
if(anchored)
- to_chat(usr, "You must unwrench [src] before rotating it!")
+ to_chat(usr, span_warning("You must unwrench [src] before rotating it!"))
return
setDir(turn(dir, -90))
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index cd36149b9092..10818c303d0e 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -311,10 +311,10 @@
/obj/machinery/computer/camera_advanced/ratvar/can_use(mob/living/user)
if(!is_servant_of_ratvar(user))
- to_chat(user, "[src]'s keys are in a language foreign to you, and you don't understand anything on its screen.")
+ to_chat(user, span_warning("[src]'s keys are in a language foreign to you, and you don't understand anything on its screen."))
return
if(clockwork_ark_active())
- to_chat(user, "The Ark is active, and [src] has shut down.")
+ to_chat(user, span_warning("The Ark is active, and [src] has shut down."))
return
. = ..()
@@ -343,31 +343,31 @@
if(!is_reebe(user.z) || !is_station_level(T.z))
return
if(isclosedturf(T))
- to_chat(user, "You can't teleport into a wall.")
+ to_chat(user, "[span_sevtug_small("You can't teleport into a wall.")]")
return
else if(isspaceturf(T))
- to_chat(user, "[prob(1) ? "Servant cannot into space." : "You can't teleport into space."]")
+ to_chat(user, "[span_sevtug_small("[prob(1) ? "Servant cannot into space." : "You can't teleport into space."]")]")
return
else if(T.flags_1 & NOJAUNT_1)
- to_chat(user, "This tile is blessed by strange energies and deflects the warp.")
+ to_chat(user, "[span_sevtug_small("This tile is blessed by strange energies and deflects the warp.")]")
return
else if(locate(/obj/effect/blessing, T))
- to_chat(user, "This tile is blessed by holy water and deflects the warp.")
+ to_chat(user, "[span_sevtug_small("This tile is blessed by holy water and deflects the warp.")]")
return
var/area/AR = get_area(T)
if(!AR.clockwork_warp_allowed)
- to_chat(user, "[AR.clockwork_warp_fail]")
+ to_chat(user, "[span_sevtug_small("[AR.clockwork_warp_fail]")]")
return
if(alert(user, "Are you sure you want to warp to [AR]?", target.name, "Warp", "Cancel") == "Cancel" || QDELETED(R) || !user.canUseTopic(R))
return
do_sparks(5, TRUE, user)
do_sparks(5, TRUE, T)
- user.visible_message("[user]'s [target.name] flares!", "You begin warping to [AR]...")
+ user.visible_message(span_warning("[user]'s [target.name] flares!"), "You begin warping to [AR]...")
button_icon_state = "warp_cancel"
owner.update_action_buttons()
var/warp_time = 50
if(!istype(T, /turf/open/floor/clockwork) && GLOB.clockwork_hardmode_active)
- to_chat(user, "The [target.name]'s inner machinery protests vehemently as it attempts to warp you to a non-brass tile, this will take time...")
+ to_chat(user, "[span_sevtug_small("The [target.name]'s inner machinery protests vehemently as it attempts to warp you to a non-brass tile, this will take time...")]")
warp_time = 300
warping = new(T, user, warp_time)
if(!do_after(user, warp_time, target = warping, extra_checks = CALLBACK(src, .proc/is_canceled)))
@@ -379,7 +379,7 @@
return
button_icon_state = "warp_down"
owner.update_action_buttons()
- T.visible_message("[user] warps in!")
+ T.visible_message(span_warning("[user] warps in!"))
playsound(user, 'sound/magic/magic_missile.ogg', 50, TRUE)
playsound(T, 'sound/magic/magic_missile.ogg', 50, TRUE)
user.forceMove(get_turf(T))
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 4e7ec1263aac..4688a4607cf0 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -57,7 +57,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/examine(mob/user)
. = ..()
if(modify)
- . += "Alt-click to eject the ID card."
+ . += span_notice("Alt-click to eject the ID card.")
/obj/machinery/computer/card/Initialize()
. = ..()
@@ -370,7 +370,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(region_access)
authenticated = 1
else if ((!( authenticated ) && issilicon(usr)) && (!modify))
- to_chat(usr, "You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.")
+ to_chat(usr, span_warning("You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in."))
if ("logout")
region_access = null
head_subordinates = null
@@ -407,11 +407,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
updateUsrDialog()
break
if(!jobdatum)
- to_chat(usr, "No log exists for this job.")
+ to_chat(usr, span_warning("No log exists for this job."))
updateUsrDialog()
return
if(!isnull(modify.registered_age) && modify.registered_age < jobdatum.minimal_character_age)
- to_chat(usr, "This individual is too young to hold that Job, per Nanotrasen guidelines. Suggest aborting Job Assignment!")
+ to_chat(usr, span_warning("This individual is too young to hold that Job, per Nanotrasen guidelines. Suggest aborting Job Assignment!"))
if(modify.registered_account)
modify.registered_account.account_job = jobdatum // this is a terrible idea and people will grief but sure whatever
@@ -425,7 +425,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
modify.assignment = "Unassigned"
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
- to_chat(usr, "You are not authorized to demote this position.")
+ to_chat(usr, span_error("You are not authorized to demote this position."))
if ("reg")
if (authenticated)
var/t2 = modify
@@ -435,7 +435,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
modify.registered_age = newAge
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
else if(!isnull(newAge))
- to_chat(usr, "Invalid age entered- age not updated.")
+ to_chat(usr, span_alert("Invalid age entered- age not updated."))
updateUsrDialog()
var/newName = reject_bad_name(href_list["reg"])
@@ -443,7 +443,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
modify.registered_name = newName
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
- to_chat(usr, "Invalid name entered.")
+ to_chat(usr, span_error("Invalid name entered."))
updateUsrDialog()
return
if ("mode")
@@ -502,12 +502,12 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
SSjob.prioritized_jobs -= j
priority = FALSE
else if(j.total_positions <= j.current_positions)
- to_chat(usr, "[j.title] has had all positions filled. Open up more slots before prioritizing it.")
+ to_chat(usr, span_notice("[j.title] has had all positions filled. Open up more slots before prioritizing it."))
updateUsrDialog()
return
else
SSjob.prioritized_jobs += j
- to_chat(usr, "[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.")
+ to_chat(usr, span_notice("[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request."))
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if ("print")
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 5e3557c16a18..a1afc9915064 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -138,7 +138,7 @@
if (!user.transferItemToLoc(W,src))
return
diskette = W
- to_chat(user, "You insert [W].")
+ to_chat(user, span_notice("You insert [W]."))
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
updateUsrDialog()
else if(W.tool_behaviour == TOOL_MULTITOOL)
@@ -177,7 +177,7 @@
else
dat += "Stop autoprocess"
else
- dat += "Autoprocess"
+ dat += span_linkOff("Autoprocess")
dat += "Cloning Pod Status
"
dat += "[temp]
"
switch(menu)
@@ -214,14 +214,14 @@
dat += "Body-Only Scan"
dat += "
[scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
else
- dat += "Start Scan"
+ dat += span_linkOff("Start Scan")
// Database
dat += "Database Functions
"
if (records.len && records.len > 0)
dat += "View Records ([records.len])
"
else
- dat += "View Records (0)
"
+ dat += "[span_linkOff("View Records (0)")]
"
if (diskette)
dat += "Eject Disk
"
@@ -252,7 +252,7 @@
else
dat += "Unable to locate Health Implant.
"
- dat += "Unique Identifier:
[active_record.fields["UI"]]
"
+ dat += "Unique Identifier:
[span_highlight("[active_record.fields["UI"]]")]
"
dat += "Structural Enzymes:
"
for(var/key in active_record.fields["SE"])
if(key != RACEMUT)
@@ -282,7 +282,7 @@
if(can_load)
dat += "
Load From Disk"
else
- dat += "Cannot Load From Disk: Access Denied"
+ dat += span_linkOff("Cannot Load From Disk: Access Denied")
if(diskette.fields["SE"])
if(!include_se)
dat += "
Currently Excluding SE"
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 2f5d10f94dfb..015398197738 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -81,7 +81,7 @@
obj_flags |= EMAGGED
if (authenticated)
authorize_access = get_all_accesses()
- to_chat(user, "You scramble the communication routing circuits!")
+ to_chat(user, span_danger("You scramble the communication routing circuits!"))
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
/obj/machinery/computer/communications/ui_act(action, list/params)
@@ -131,11 +131,11 @@
var/obj/item/held_item = usr.get_active_held_item()
var/obj/item/card/id/id_card = held_item?.GetID()
if (!istype(id_card))
- to_chat(usr, "You need to swipe your ID!")
+ to_chat(usr, span_warning("You need to swipe your ID!"))
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE)
return
if (!(ACCESS_CAPTAIN in id_card.access))
- to_chat(usr, "You are not authorized to do this!")
+ to_chat(usr, span_warning("You are not authorized to do this!"))
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE)
return
@@ -147,13 +147,13 @@
set_security_level(new_sec_level)
- to_chat(usr, "Authorization confirmed. Modifying security level.")
+ to_chat(usr, span_notice("Authorization confirmed. Modifying security level."))
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
// Only notify people if an actual change happened
log_game("[key_name(usr)] has changed the security level to [params["newSecurityLevel"]] with [src] at [AREACOORD(usr)].")
message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [params["newSecurityLevel"]] with [src] at [AREACOORD(usr)].")
- deadchat_broadcast(" has changed the security level to [params["newSecurityLevel"]] with [src] at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr)
+ deadchat_broadcast(" has changed the security level to [params["newSecurityLevel"]] with [src] at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr)
alert_level_tick += 1
if ("deleteMessage")
@@ -183,27 +183,27 @@
var/emagged = obj_flags & EMAGGED
if (emagged)
message_syndicate(message, usr)
- to_chat(usr, "SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.")
+ to_chat(usr, span_danger("SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND."))
else
message_centcom(message, usr)
- to_chat(usr, "Message transmitted to Central Command.")
+ to_chat(usr, span_notice("Message transmitted to Central Command."))
var/associates = emagged ? "the Syndicate": "CentCom"
usr.log_talk(message, LOG_SAY, tag = "message to [associates]")
- deadchat_broadcast(" has messaged [associates], \"[message]\" at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr)
+ deadchat_broadcast(" has messaged [associates], \"[message]\" at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr)
COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN)
if ("purchaseShuttle")
var/can_buy_shuttles_or_fail_reason = can_buy_shuttles(usr)
if (can_buy_shuttles_or_fail_reason != TRUE)
if (can_buy_shuttles_or_fail_reason != FALSE)
- to_chat(usr, "[can_buy_shuttles_or_fail_reason]")
+ to_chat(usr, span_alert("[can_buy_shuttles_or_fail_reason]"))
return
var/list/shuttles = flatten_list(SSmapping.shuttle_templates)
var/datum/map_template/shuttle/shuttle = locate(params["shuttle"]) in shuttles
if (!istype(shuttle))
return
if (!shuttle.prerequisites_met())
- to_chat(usr, "You have not met the requirements for purchasing this shuttle.")
+ to_chat(usr, span_alert("You have not met the requirements for purchasing this shuttle."))
return
if(shuttle.emag_buy && !(obj_flags & EMAGGED))
return //return silently, only way this could happen is an attempted href exploit
@@ -233,7 +233,7 @@
return
var/reason = trim(html_encode(params["reason"]), MAX_MESSAGE_LEN)
nuke_request(reason, usr)
- to_chat(usr, "Request sent.")
+ to_chat(usr, span_notice("Request sent."))
usr.log_message("has requested the nuclear codes from CentCom with reason \"[reason]\"", LOG_SAY)
priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self-Destruct Codes Requested", SSstation.announcer.get_rand_report_sound())
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, FALSE)
@@ -243,7 +243,7 @@
return
if (!(obj_flags & EMAGGED))
return
- to_chat(usr, "Backup routing data restored.")
+ to_chat(usr, span_notice("Backup routing data restored."))
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
obj_flags &= ~EMAGGED
if ("sendToOtherSector")
@@ -308,7 +308,7 @@
authenticated = TRUE
authorize_access = get_all_accesses()
authorize_name = "Unknown"
- to_chat(usr, "[src] lets out a quiet alarm as its login is overridden.")
+ to_chat(usr, span_warning("[src] lets out a quiet alarm as its login is overridden."))
playsound(src, 'sound/machines/terminal_alert.ogg', 25, FALSE)
else if (IsAdminGhost(usr))
authenticated = TRUE
@@ -330,12 +330,12 @@
revoke_maint_all_access()
log_game("[key_name(usr)] disabled emergency maintenance access.")
message_admins("[ADMIN_LOOKUPFLW(usr)] disabled emergency maintenance access.")
- deadchat_broadcast(" disabled emergency maintenance access at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr)
+ deadchat_broadcast(" disabled emergency maintenance access at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr)
else
make_maint_all_access()
log_game("[key_name(usr)] enabled emergency maintenance access.")
message_admins("[ADMIN_LOOKUPFLW(usr)] enabled emergency maintenance access.")
- deadchat_broadcast(" enabled emergency maintenance access at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr)
+ deadchat_broadcast(" enabled emergency maintenance access at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr)
if ("printSpare")
if (authenticated_as_non_silicon_head(usr))
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
@@ -498,17 +498,17 @@
/obj/machinery/computer/communications/proc/make_announcement(mob/living/user)
var/is_ai = issilicon(user)
if(!SScommunications.can_announce(user, is_ai))
- to_chat(user, "Intercomms recharging. Please stand by.")
+ to_chat(user, span_alert("Intercomms recharging. Please stand by."))
return
var/input = stripped_multiline_input(user, "Please choose a message to announce to the station crew.", "What?")
if(!input || !user.canUseTopic(src, !issilicon(usr)))
return
SScommunications.make_announcement(user, is_ai, input)
- deadchat_broadcast(" made a priority announcement from [get_area_name(usr, TRUE)].", "[user.real_name]", user)
+ deadchat_broadcast(" made a priority announcement from [span_name("[get_area_name(usr, TRUE)]")].", span_name("[user.real_name]"), user)
/obj/machinery/computer/communications/proc/make_voice_announcement(mob/living/user)
if(!SScommunications.can_announce(user, FALSE))
- to_chat(user, "Intercomms recharging. Please stand by.")
+ to_chat(user, span_alert("Intercomms recharging. Please stand by."))
return
var/datum/voice_announce/command/announce_datum = new(user.client, src)
announce_datum.open()
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index bd93664bc2cc..8db8055080a7 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -147,7 +147,7 @@
if (istype(I, /obj/item/chromosome))
I.forceMove(src)
stored_chromosomes += I
- to_chat(user, "You insert [I].")
+ to_chat(user, span_notice("You insert [I]."))
return
// Insert data disk if console disk slot is empty
@@ -159,7 +159,7 @@
diskette.forceMove(drop_location())
diskette = null
diskette = I
- to_chat(user, "You insert [I].")
+ to_chat(user, span_notice("You insert [I]."))
return
// Recycle non-activator used injectors
@@ -167,15 +167,15 @@
if(istype(I, /obj/item/dnainjector/activator))
var/obj/item/dnainjector/activator/A = I
if(A.used)
- to_chat(user,"Recycled [I].")
+ to_chat(user,span_notice("Recycled [I]."))
if(A.research)
if(prob(60))
var/c_typepath = generate_chromosome()
var/obj/item/chromosome/CM = new c_typepath (src)
stored_chromosomes += CM
- to_chat(user,"[capitalize(CM.name)] added to storage.")
+ to_chat(user,span_notice("[capitalize(CM.name)] added to storage."))
else
- to_chat(user, "There was not enough genetic data to extract a viable chromosome.")
+ to_chat(user, span_notice("There was not enough genetic data to extract a viable chromosome."))
qdel(I)
return
@@ -385,7 +385,7 @@
scanner_occupant.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA))
scanner_occupant.dna.generate_dna_blocks()
scrambleready = world.time + SCRAMBLE_TIMEOUT
- to_chat(usr,"DNA scrambled.")
+ to_chat(usr,span_notice("DNA scrambled."))
scanner_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER*50/(connected_scanner.damage_coeff ** 2)
return
@@ -459,7 +459,7 @@
// GUARD CHECK - Is the occupant currently undergoing some form of
// transformation? If so, we don't want to be pulsing genes.
if(scanner_occupant.transformation_timer)
- to_chat(usr,"Gene pulse failed: The scanner occupant undergoing a transformation.")
+ to_chat(usr,span_warning("Gene pulse failed: The scanner occupant undergoing a transformation."))
return
// Resolve mutation's BYOND path from the alias
@@ -656,7 +656,7 @@
var/datum/mutation/human/A = new HM.type()
A.copy_mutation(HM)
stored_mutations += A
- to_chat(usr,"Mutation successfully stored.")
+ to_chat(usr,span_notice("Mutation successfully stored."))
return
// Save a mutation to the diskette's storage buffer.
@@ -674,13 +674,13 @@
// GUARD CHECK - Make sure the disk is not full
if(LAZYLEN(diskette.mutations) >= diskette.max_mutations)
- to_chat(usr,"Disk storage is full.")
+ to_chat(usr,span_warning("Disk storage is full."))
return
// GUARD CHECK - Make sure the disk isn't set to read only, as we're
// attempting to write to it
if(diskette.read_only)
- to_chat(usr,"Disk is set to read only mode.")
+ to_chat(usr,span_warning("Disk is set to read only mode."))
return
var/search_flags = 0
@@ -706,7 +706,7 @@
var/datum/mutation/human/A = new HM.type()
A.copy_mutation(HM)
diskette.mutations += A
- to_chat(usr,"Mutation successfully stored to disk.")
+ to_chat(usr,span_notice("Mutation successfully stored to disk."))
return
// Completely removes a MUT_EXTRA mutation or mutation with corrupt gene
@@ -759,7 +759,7 @@
// GUARD CHECK - Make sure the disk isn't set to read only, as we're
// attempting to write to it (via deletion)
if(diskette.read_only)
- to_chat(usr,"Disk is set to read only mode.")
+ to_chat(usr,span_warning("Disk is set to read only mode."))
return
var/bref = params["mutref"]
@@ -820,7 +820,7 @@
// If we got a new type, add it to our storage
stored_mutations += new result_path()
- to_chat(usr, "Success! New mutation has been added to console storage.")
+ to_chat(usr, span_boldnotice("Success! New mutation has been added to console storage."))
// If it's already discovered, end here. Otherwise, add it to the list of
// discovered mutations.
@@ -846,13 +846,13 @@
// GUARD CHECK - Make sure the disk is not full.
if(LAZYLEN(diskette.mutations) >= diskette.max_mutations)
- to_chat(usr,"Disk storage is full.")
+ to_chat(usr,span_warning("Disk storage is full."))
return
// GUARD CHECK - Make sure the disk isn't set to read only, as we're
// attempting to write to it
if(diskette.read_only)
- to_chat(usr,"Disk is set to read only mode.")
+ to_chat(usr,span_warning("Disk is set to read only mode."))
return
// GUARD CHECK - We're running a research-type operation. If, for some
@@ -882,7 +882,7 @@
// If we got a new type, add it to our storage
diskette.mutations += new result_path()
- to_chat(usr, "Success! New mutation has been added to the disk.")
+ to_chat(usr, span_boldnotice("Success! New mutation has been added to the disk."))
// If it's already discovered, end here. Otherwise, add it to the list of
// discovered mutations
@@ -926,7 +926,7 @@
// GUARD CHECK - Make sure the disk isn't set to read only, as we're
// attempting to write to it
if(diskette.read_only)
- to_chat(usr,"Disk is set to read only mode.")
+ to_chat(usr,span_warning("Disk is set to read only mode."))
return
// Convert the index to a number and clamp within the array range
@@ -975,7 +975,7 @@
// GUARD CHECK - Make sure the disk isn't set to read only, as we're
// attempting to write (via deletion) to it
if(diskette.read_only)
- to_chat(usr,"Disk is set to read only mode.")
+ to_chat(usr,span_warning("Disk is set to read only mode."))
return
diskette.genetic_makeup_buffer.Cut()
@@ -1070,7 +1070,7 @@
// However, if this is the case, we can't make a complete injector and
// this catches that edge case
if(!buffer_slot["UI"])
- to_chat(usr,"Genetic data corrupted, unable to create injector.")
+ to_chat(usr,span_warning("Genetic data corrupted, unable to create injector."))
return
I = new /obj/item/dnainjector/timed(loc)
@@ -1085,7 +1085,7 @@
// However, if this is the case, we can't make a complete injector and
// this catches that edge case
if(!buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"])
- to_chat(usr,"Genetic data corrupted, unable to create injector.")
+ to_chat(usr,span_warning("Genetic data corrupted, unable to create injector."))
return
I = new /obj/item/dnainjector/timed(loc)
@@ -1100,7 +1100,7 @@
// However, if this is the case, we can't make a complete injector and
// this catches that edge case
if(!buffer_slot["UI"] || !buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"])
- to_chat(usr,"Genetic data corrupted, unable to create injector.")
+ to_chat(usr,span_warning("Genetic data corrupted, unable to create injector."))
return
I = new /obj/item/dnainjector/timed(loc)
@@ -1315,7 +1315,7 @@
// GUARD CHECK - Make sure we limit the number of mutations appropriately
if(LAZYLEN(injector_selection[adv_inj]) >= max_injector_mutations)
- to_chat(usr,"Advanced injector mutation storage is full.")
+ to_chat(usr,span_warning("Advanced injector mutation storage is full."))
return
var/mut_source = params["source"]
@@ -1352,7 +1352,7 @@
// If this would take us over the max instability, we inform the user.
if(instability_total > max_injector_instability)
- to_chat(usr,"Extra mutation would make the advanced injector too instable.")
+ to_chat(usr,span_warning("Extra mutation would make the advanced injector too instable."))
return
// If we've got here, all our checks are passed and we can successfully
@@ -1360,7 +1360,7 @@
var/datum/mutation/human/A = new HM.type()
A.copy_mutation(HM)
injector_selection[adv_inj] += A
- to_chat(usr,"Mutation successfully added to advanced injector.")
+ to_chat(usr,span_notice("Mutation successfully added to advanced injector."))
return
// Deletes a mutation from an advanced injector
@@ -1420,7 +1420,7 @@
// However, if this is the case, we can't make a complete injector and
// this catches that edge case
if(!buffer_slot["UI"])
- to_chat(usr,"Genetic data corrupted, unable to apply genetic data.")
+ to_chat(usr,span_warning("Genetic data corrupted, unable to apply genetic data."))
return FALSE
scanner_occupant.dna.uni_identity = buffer_slot["UI"]
scanner_occupant.updateappearance(mutations_overlay_update=1)
@@ -1432,7 +1432,7 @@
// However, if this is the case, we can't make a complete injector and
// this catches that edge case
if(!buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"])
- to_chat(usr,"Genetic data corrupted, unable to apply genetic data.")
+ to_chat(usr,span_warning("Genetic data corrupted, unable to apply genetic data."))
return FALSE
scanner_occupant.real_name = buffer_slot["name"]
scanner_occupant.name = buffer_slot["name"]
@@ -1446,7 +1446,7 @@
// However, if this is the case, we can't make a complete injector and
// this catches that edge case
if(!buffer_slot["UI"] || !buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"])
- to_chat(usr,"Genetic data corrupted, unable to apply genetic data.")
+ to_chat(usr,span_warning("Genetic data corrupted, unable to apply genetic data."))
return FALSE
scanner_occupant.dna.uni_identity = buffer_slot["UI"]
scanner_occupant.updateappearance(mutations_overlay_update=1)
@@ -1551,7 +1551,7 @@
var/type = delayed_action["type"]
var/buffer_slot = delayed_action["buffer_slot"]
if(apply_genetic_makeup(type, buffer_slot))
- to_chat(connected_scanner.occupant, "[src] activates!")
+ to_chat(connected_scanner.occupant, span_notice("[src] activates!"))
delayed_action = null
/**
diff --git a/code/game/machinery/computer/gulag_teleporter.dm b/code/game/machinery/computer/gulag_teleporter.dm
index 1d62e3f219c3..2a843719e91c 100644
--- a/code/game/machinery/computer/gulag_teleporter.dm
+++ b/code/game/machinery/computer/gulag_teleporter.dm
@@ -30,10 +30,10 @@
if (!user.transferItemToLoc(W,src))
return
id = W
- to_chat(user, "You insert [W].")
+ to_chat(user, span_notice("You insert [W]."))
return
else
- to_chat(user, "There's an ID inserted already.")
+ to_chat(user, span_notice("There's an ID inserted already."))
return ..()
/obj/machinery/computer/gulag_teleporter_computer/ui_interact(mob/user, datum/tgui/ui)
@@ -82,7 +82,7 @@
if(..())
return
if(!allowed(usr))
- to_chat(usr, "Access denied.")
+ to_chat(usr, span_warning("Access denied."))
return
switch(action)
if("scan_teleporter")
@@ -152,7 +152,7 @@
playsound(src, 'sound/weapons/emitter.ogg', 50, 1)
prisoner.forceMove(get_turf(beacon))
prisoner.Paralyze(40) // small travel dizziness
- to_chat(prisoner, "The teleportation makes you a little dizzy.")
+ to_chat(prisoner, span_warning("The teleportation makes you a little dizzy."))
new /obj/effect/particle_effect/sparks(get_turf(prisoner))
playsound(src, "sparks", 50, 1)
if(teleporter.locked)
diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm
index a9b8224cf9f1..aabfe3dbac16 100644
--- a/code/game/machinery/computer/launchpad_control.dm
+++ b/code/game/machinery/computer/launchpad_control.dm
@@ -14,7 +14,7 @@
. = ..()
/obj/machinery/computer/launchpad/attack_paw(mob/user)
- to_chat(user, "You are too primitive to use this computer!")
+ to_chat(user, span_warning("You are too primitive to use this computer!"))
return
/obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params)
@@ -26,9 +26,9 @@
if(LAZYLEN(launchpads) < maximum_pads)
launchpads |= M.buffer
M.buffer = null
- to_chat(user, "You upload the data from the [W.name]'s buffer.")
+ to_chat(user, span_notice("You upload the data from the [W.name]'s buffer."))
else
- to_chat(user, "[src] cannot handle any more connections!")
+ to_chat(user, span_warning("[src] cannot handle any more connections!"))
else
return ..()
@@ -40,10 +40,10 @@
/obj/machinery/computer/launchpad/proc/teleport(mob/user, obj/machinery/launchpad/pad, sending)
if(QDELETED(pad))
- to_chat(user, "ERROR: Launchpad not responding. Check launchpad integrity.")
+ to_chat(user, span_warning("ERROR: Launchpad not responding. Check launchpad integrity."))
return
if(!pad.isAvailable())
- to_chat(user, "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered.")
+ to_chat(user, span_warning("ERROR: Launchpad not operative. Make sure the launchpad is ready and powered."))
return
pad.doteleport(user, sending)
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
index 2b56af897770..f6e962b83fae 100644
--- a/code/game/machinery/computer/law.dm
+++ b/code/game/machinery/computer/law.dm
@@ -27,15 +27,15 @@
if(stat & (NOPOWER|BROKEN|MAINT))
return
if(!current)
- to_chat(user, "You haven't selected anything to transmit laws to!")
+ to_chat(user, span_caution("You haven't selected anything to transmit laws to!"))
return
if(!can_upload_to(current))
- to_chat(user, "Upload failed! Check to make sure [current.name] is functioning properly.")
+ to_chat(user, "[span_caution("Upload failed!")] Check to make sure [current.name] is functioning properly.")
current = null
return
var/turf/currentloc = get_turf(current)
if(currentloc && user.z != currentloc.z)
- to_chat(user, "Upload failed! Unable to establish a connection to [current.name]. You're too far away!")
+ to_chat(user, "[span_caution("Upload failed!")] Unable to establish a connection to [current.name]. You're too far away!")
current = null
return
M.install(current.laws, user)
@@ -56,7 +56,7 @@
current = select_active_ai(user)
if (!current)
- to_chat(user, "No active AIs detected!")
+ to_chat(user, span_caution("No active AIs detected!"))
else
to_chat(user, "[current.name] selected for law changes.")
@@ -77,7 +77,7 @@
current = select_active_free_borg(user)
if(!current)
- to_chat(user, "No active unslaved cyborgs detected!")
+ to_chat(user, span_caution("No active unslaved cyborgs detected!"))
else
to_chat(user, "[current.name] selected for law changes.")
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 868e803f8f06..325ac0c799a1 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -29,7 +29,7 @@
if(!user.transferItemToLoc(O, src))
return
scan = O
- to_chat(user, "You insert [O].")
+ to_chat(user, span_notice("You insert [O]."))
else
return ..()
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 021c39ea58a9..42ce0d6da944 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -42,7 +42,7 @@
/obj/machinery/computer/pod/ui_interact(mob/user)
. = ..()
if(!allowed(user))
- to_chat(user, "Access denied.")
+ to_chat(user, span_warning("Access denied."))
return
var/dat = ""
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index a02727913ef7..b151b37604cc 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -93,7 +93,7 @@
return
inserted_id = I
else
- to_chat(usr, "No valid ID.")
+ to_chat(usr, span_danger("No valid ID."))
else if(inserted_id)
switch(href_list["id"])
if("eject")
@@ -134,7 +134,7 @@
var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants
if(I && istype(I) && I.imp_in)
var/mob/living/R = I.imp_in
- to_chat(R, "You hear a voice in your head saying: '[warning]'")
+ to_chat(R, span_italics("You hear a voice in your head saying: '[warning]'"))
log_directed_talk(usr, R, warning, LOG_SAY, "implant message")
src.add_fingerprint(usr)
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 700092ed3e1f..12e7d89c1a57 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -82,25 +82,25 @@
var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs
if(can_control(usr, R) && !..())
var/turf/T = get_turf(R)
- message_admins("[ADMIN_LOOKUPFLW(usr)] detonated [key_name_admin(R, R.client)] at [ADMIN_VERBOSEJMP(T)]!")
- log_game("\[key_name(usr)] detonated [key_name(R)]!")
+ message_admins(span_notice("[ADMIN_LOOKUPFLW(usr)] detonated [key_name_admin(R, R.client)] at [ADMIN_VERBOSEJMP(T)]!"))
+ log_game("[span_notice("[key_name(usr)] detonated [key_name(R)]!")]")
if(R.connected_ai)
- to_chat(R.connected_ai, "
ALERT - Cyborg detonation detected: [R.name]
")
+ to_chat(R.connected_ai, "
[span_alert("ALERT - Cyborg detonation detected: [R.name]")]
")
R.self_destruct()
else
- to_chat(usr, "Access Denied.")
+ to_chat(usr, span_danger("Access Denied."))
if("stopbot")
if(allowed(usr))
var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs
if(can_control(usr, R) && !..())
- message_admins("[ADMIN_LOOKUPFLW(usr)] [!R.lockcharge ? "locked down" : "released"] [ADMIN_LOOKUPFLW(R)]!")
+ message_admins(span_notice("[ADMIN_LOOKUPFLW(usr)] [!R.lockcharge ? "locked down" : "released"] [ADMIN_LOOKUPFLW(R)]!"))
log_game("[key_name(usr)] [!R.lockcharge ? "locked down" : "released"] [key_name(R)]!")
R.SetLockdown(!R.lockcharge)
- to_chat(R, "[!R.lockcharge ? "Your lockdown has been lifted!" : "You have been locked down!"]")
+ to_chat(R, !R.lockcharge ? span_notice("Your lockdown has been lifted!") : span_alert("You have been locked down!"))
if(R.connected_ai)
to_chat(R.connected_ai, "[!R.lockcharge ? "NOTICE - Cyborg lockdown lifted" : "ALERT - Cyborg lockdown detected"]: [R.name]
")
else
- to_chat(usr, "Access Denied.")
+ to_chat(usr, span_danger("Access Denied."))
if("magbot")
var/mob/living/silicon/S = usr
if((istype(S) && S.hack_software) || IsAdminGhost(usr))
@@ -113,7 +113,7 @@
if(allowed(usr))
var/mob/living/simple_animal/drone/D = locate(params["ref"]) in GLOB.mob_list
if(D.hacked)
- to_chat(usr, "ERROR: [D] is not responding to external commands.")
+ to_chat(usr, span_danger("ERROR: [D] is not responding to external commands."))
else
var/turf/T = get_turf(D)
message_admins("[ADMIN_LOOKUPFLW(usr)] detonated [key_name_admin(D)] at [ADMIN_VERBOSEJMP(T)]!")
@@ -121,5 +121,5 @@
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, TRUE, D)
s.start()
- D.visible_message("\the [D] self destructs!")
+ D.visible_message(span_danger("\the [D] self destructs!"))
D.gib()
\ No newline at end of file
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index d934e074f40e..4d9d55645511 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -656,7 +656,7 @@
var/name = stripped_input(usr, "Please input citation crime:", "Security Records", "")
var/fine = FLOOR(input(usr, "Please input citation fine:", "Security Records", 50) as num, 1)
if(!fine || fine < 0)
- to_chat(usr, "You're pretty sure that's not how money works.")
+ to_chat(usr, span_warning("You're pretty sure that's not how money works."))
return
fine = min(fine, maxFine)
if(!valid_record_change(usr, name, null, active_security_record))
diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm
index fbfd4c2113b8..a5a7d91f8398 100644
--- a/code/game/machinery/computer/teleporter.dm
+++ b/code/game/machinery/computer/teleporter.dm
@@ -146,7 +146,7 @@
var/area/A = get_area(R)
L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R
if(!L.len)
- to_chat(user, "No active connected stations located.")
+ to_chat(user, span_alert("No active connected stations located."))
return
var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L
var/obj/machinery/teleport/station/target_station = L[desc]
diff --git a/code/game/machinery/computer/warrant.dm b/code/game/machinery/computer/warrant.dm
index b761ce8dbe63..137d7a6e7669 100644
--- a/code/game/machinery/computer/warrant.dm
+++ b/code/game/machinery/computer/warrant.dm
@@ -117,17 +117,17 @@
if(C && istype(C))
var/pay = C.get_item_credit_value()
if(!pay)
- to_chat(M, "[C] doesn't seem to be worth anything!")
+ to_chat(M, span_warning("[C] doesn't seem to be worth anything!"))
else
var/diff = p.fine - p.paid
GLOB.data_core.payCitation(current.fields["id"], text2num(href_list["cdataid"]), pay)
- to_chat(M, "You have paid [pay] credit\s towards your fine")
+ to_chat(M, span_notice("You have paid [pay] credit\s towards your fine"))
if (pay == diff || pay > diff || pay >= diff)
investigate_log("Citation Paid off: [p.crimeName] Fine: [p.fine] | Paid off by [key_name(usr)]", INVESTIGATE_RECORDS)
- to_chat(M, "The fine has been paid in full")
+ to_chat(M, span_notice("The fine has been paid in full"))
qdel(C)
playsound(src, "terminal_type", 25, 0)
else
- to_chat(M, "Fines can only be paid with holochips")
+ to_chat(M, span_warning("Fines can only be paid with holochips"))
updateUsrDialog()
add_fingerprint(M)
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 7d7092be5bfe..7738828acd45 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -77,57 +77,57 @@
switch(state)
if(1)
if(istype(P, /obj/item/circuitboard/machine))
- to_chat(user, "The frame needs wiring first!")
+ to_chat(user, span_warning("The frame needs wiring first!"))
return
else if(istype(P, /obj/item/circuitboard))
- to_chat(user, "This frame does not accept circuit boards of this type!")
+ to_chat(user, span_warning("This frame does not accept circuit boards of this type!"))
return
if(istype(P, /obj/item/stack/cable_coil))
if(!P.tool_start_check(user, amount=5))
return
- to_chat(user, "You start to add cables to the frame...")
+ to_chat(user, span_notice("You start to add cables to the frame..."))
if(P.use_tool(src, user, 20, volume=50, amount=5))
- to_chat(user, "You add cables to the frame.")
+ to_chat(user, span_notice("You add cables to the frame."))
state = 2
icon_state = "box_1"
return
if(P.tool_behaviour == TOOL_SCREWDRIVER && !anchored)
- user.visible_message("[user] disassembles the frame.", \
- "You start to disassemble the frame...", "You hear banging and clanking.")
+ user.visible_message(span_warning("[user] disassembles the frame."), \
+ span_notice("You start to disassemble the frame..."), "You hear banging and clanking.")
if(P.use_tool(src, user, 40, volume=50))
if(state == 1)
- to_chat(user, "You disassemble the frame.")
+ to_chat(user, span_notice("You disassemble the frame."))
var/obj/item/stack/sheet/metal/M = new (loc, 5)
M.add_fingerprint(user)
qdel(src)
return
if(P.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start [anchored ? "un" : ""]securing [name]...")
+ to_chat(user, span_notice("You start [anchored ? "un" : ""]securing [name]..."))
if(P.use_tool(src, user, 40, volume=75))
if(state == 1)
- to_chat(user, "You [anchored ? "un" : ""]secure [name].")
+ to_chat(user, span_notice("You [anchored ? "un" : ""]secure [name]."))
setAnchored(!anchored)
return
if(2)
if(P.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start [anchored ? "un" : ""]securing [name]...")
+ to_chat(user, span_notice("You start [anchored ? "un" : ""]securing [name]..."))
if(P.use_tool(src, user, 40, volume=75))
- to_chat(user, "You [anchored ? "un" : ""]secure [name].")
+ to_chat(user, span_notice("You [anchored ? "un" : ""]secure [name]."))
setAnchored(!anchored)
return
if(istype(P, /obj/item/circuitboard/machine))
var/obj/item/circuitboard/machine/B = P
if(!anchored && B.needs_anchored)
- to_chat(user, "The frame needs to be secured first!")
+ to_chat(user, span_warning("The frame needs to be secured first!"))
return
if(!user.transferItemToLoc(B, src))
return
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
- to_chat(user, "You add the circuit board to the frame.")
+ to_chat(user, span_notice("You add the circuit board to the frame."))
circuit = B
icon_state = "box_2"
state = 3
@@ -137,12 +137,12 @@
return
else if(istype(P, /obj/item/circuitboard))
- to_chat(user, "This frame does not accept circuit boards of this type!")
+ to_chat(user, span_warning("This frame does not accept circuit boards of this type!"))
return
if(P.tool_behaviour == TOOL_WIRECUTTER)
P.play_tool_sound(src)
- to_chat(user, "You remove the cables.")
+ to_chat(user, span_notice("You remove the cables."))
state = 1
icon_state = "box_0"
new /obj/item/stack/cable_coil(drop_location(), 5)
@@ -156,9 +156,9 @@
components.Remove(circuit)
circuit = null
if(components.len == 0)
- to_chat(user, "You remove the circuit board.")
+ to_chat(user, span_notice("You remove the circuit board."))
else
- to_chat(user, "You remove the circuit board and other components.")
+ to_chat(user, span_notice("You remove the circuit board and other components."))
for(var/atom/movable/AM in components)
AM.forceMove(drop_location())
desc = initial(desc)
@@ -168,9 +168,9 @@
return
if(P.tool_behaviour == TOOL_WRENCH && !circuit.needs_anchored)
- to_chat(user, "You start [anchored ? "un" : ""]securing [name]...")
+ to_chat(user, span_notice("You start [anchored ? "un" : ""]securing [name]..."))
if(P.use_tool(src, user, 40, volume=75))
- to_chat(user, "You [anchored ? "un" : ""]secure [name].")
+ to_chat(user, span_notice("You [anchored ? "un" : ""]secure [name]."))
setAnchored(!anchored)
return
@@ -235,7 +235,7 @@
S.merge(NS)
if(!QDELETED(part)) //If we're a stack and we merged we might not exist anymore
components += part
- to_chat(user, "[part.name] applied.")
+ to_chat(user, span_notice("[part.name] applied."))
if(added_components.len)
replacer.play_rped_sound()
return
@@ -257,15 +257,15 @@
NS.add(used_amt)
req_components[I] -= used_amt
- to_chat(user, "You add [P] to [src].")
+ to_chat(user, span_notice("You add [P] to [src]."))
return
if(!user.transferItemToLoc(P, src))
break
- to_chat(user, "You add [P] to [src].")
+ to_chat(user, span_notice("You add [P] to [src]."))
components += P
req_components[I]--
return 1
- to_chat(user, "You cannot add that to the machine!")
+ to_chat(user, span_warning("You cannot add that to the machine!"))
return 0
if(user.a_intent == INTENT_HARM)
return ..()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 2366b90a15c9..3da8f7a08887 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -114,14 +114,14 @@ GLOBAL_LIST_INIT(typecache_cryoitems, typecacheof(list(
else if(href_list["item"])
if(!allowed(user))
- to_chat(user, "Access Denied.")
+ to_chat(user, span_warning("Access Denied."))
return
if(!allow_items)
return
if(frozen_items.len == 0)
- to_chat(user, "There is nothing to recover from storage.")
+ to_chat(user, span_notice("There is nothing to recover from storage."))
return
var/obj/item/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items
@@ -129,24 +129,24 @@ GLOBAL_LIST_INIT(typecache_cryoitems, typecacheof(list(
return
if(!(I in frozen_items))
- to_chat(user, "\The [I] is no longer in storage.")
+ to_chat(user, span_notice("\The [I] is no longer in storage."))
return
- visible_message("The console beeps happily as it disgorges \the [I].")
+ visible_message(span_notice("The console beeps happily as it disgorges \the [I]."))
I.forceMove(drop_location())
frozen_items -= I
else if(href_list["allitems"])
if(!allowed(user))
- to_chat(user, "Access Denied.")
+ to_chat(user, span_warning("Access Denied."))
return
if(!allow_items) return
if(frozen_items.len == 0)
- to_chat(user, "There is nothing to recover from storage.")
+ to_chat(user, span_notice("There is nothing to recover from storage."))
return
- visible_message("The console beeps happily as it disgorges the desired objects.")
+ visible_message(span_notice("The console beeps happily as it disgorges the desired objects."))
for(var/obj/item/I in frozen_items)
I.forceMove(drop_location())
@@ -219,7 +219,7 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
icon_state = "cryopod"
var/mob/living/mob_occupant = occupant
if(mob_occupant && mob_occupant.stat != DEAD)
- to_chat(occupant, "You feel cool air surround you. You go numb as your senses turn inward.")
+ to_chat(occupant, span_boldnotice("You feel cool air surround you. You go numb as your senses turn inward."))
if(!occupant) //Check they still exist
return
if(mob_occupant.client)//if they're logged in
@@ -239,8 +239,8 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
name = initial(name)
/obj/machinery/cryopod/container_resist(mob/living/user)
- visible_message("[occupant] emerges from [src]!",
- "You climb out of [src]!")
+ visible_message(span_notice("[occupant] emerges from [src]!"),
+ span_notice("You climb out of [src]!"))
open_machine()
/obj/machinery/cryopod/relaymove(mob/user)
@@ -271,7 +271,7 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
O.team.objectives -= O
qdel(O)
for(var/datum/mind/M in O.team.members)
- to_chat(M.current, "
Your target is no longer within reach. Objective removed!")
+ to_chat(M.current, "
[span_userdanger("Your target is no longer within reach. Objective removed!")]")
M.announce_objectives()
else if(O.target == mob_occupant.mind)
O.target = null
@@ -285,7 +285,7 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
for(var/M in owners)
var/datum/mind/own = M
- to_chat(own.current, "
You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!")
+ to_chat(own.current, "
[span_userdanger("You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!")]")
O.owner.announce_objectives()
// This function can not be undone; do not call this unless you are sure
@@ -323,7 +323,7 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
if(GLOB.announcement_systems.len)
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
announcer.announce("CRYOSTORAGE", mob_occupant.real_name, announce_rank, list())
- visible_message("\The [src] hums and hisses as it moves [mob_occupant.real_name] into storage.")
+ visible_message(span_notice("\The [src] hums and hisses as it moves [mob_occupant.real_name] into storage."))
for(var/obj/item/W in mob_occupant.GetAllContents())
if(QDELETED(W))
@@ -362,26 +362,26 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
return
if(!GLOB.cryopods_enabled)
- to_chat(user, "[src] is currently disabled. It will be enabled in [round(((30 MINUTES) - world.time) / (1 MINUTES))] minutes")
+ to_chat(user, span_boldnotice("[src] is currently disabled. It will be enabled in [round(((30 MINUTES) - world.time) / (1 MINUTES))] minutes"))
return
if(occupant)
- to_chat(user, "The cryo pod is already occupied!")
+ to_chat(user, span_boldnotice("The cryo pod is already occupied!"))
return
if(target.stat == DEAD)
- to_chat(user, "Dead people can not be put into cryo.")
+ to_chat(user, span_notice("Dead people can not be put into cryo."))
return
if(findtext(target.ckey, "@") || !target.mind)
- to_chat(user, "This person cannot be put in cryogenic storage!")
+ to_chat(user, span_notice("This person cannot be put in cryogenic storage!"))
return
if(target.client && user != target)
if(iscyborg(target))
- to_chat(user, "You can't put [target] into [src]. They're online.")
+ to_chat(user, span_danger("You can't put [target] into [src]. They're online."))
else
- to_chat(user, "You can't put [target] into [src]. They're conscious.")
+ to_chat(user, span_danger("You can't put [target] into [src]. They're conscious."))
return
else if(target.client)
if(alert(target,"Would you like to enter cryosleep?",,"Yes","No") == "No")
@@ -407,7 +407,7 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
//rerun the checks in case of shenanigans
if(occupant)
- to_chat(user, "\The [src] is in use.")
+ to_chat(user, span_boldnotice("\The [src] is in use."))
return
if(target == user)
@@ -415,8 +415,8 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE)
else
visible_message("[user] starts putting [target] into the cryo pod.")
close_machine(target)
- to_chat(target, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")
+ to_chat(target, span_boldnotice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round."))
name = "[name] ([occupant.name])"
- log_admin("[key_name(target)] entered a stasis pod.")
+ log_admin(span_notice("[key_name(target)] entered a stasis pod."))
message_admins("[key_name_admin(target)] entered a stasis pod. (JMP)")
add_fingerprint(target)
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index 563115376eb6..fe097fe5f34c 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -69,10 +69,10 @@
if(!active && !(flags_1 & NODECONSTRUCT_1))
if(O.tool_behaviour == TOOL_WRENCH)
if(!anchored && !isinspace())
- to_chat(user,"You secure [src] to the floor.")
+ to_chat(user,span_notice("You secure [src] to the floor."))
setAnchored(TRUE)
else if(anchored)
- to_chat(user,"You unsecure and disconnect [src].")
+ to_chat(user,span_notice("You unsecure and disconnect [src]."))
setAnchored(FALSE)
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
return
@@ -86,14 +86,14 @@
/obj/machinery/jukebox/ui_status(mob/user)
if(!anchored)
- to_chat(user,"This device must be anchored by a wrench!")
+ to_chat(user,span_warning("This device must be anchored by a wrench!"))
return UI_CLOSE
if(!allowed(user) && !isobserver(user))
- to_chat(user,"Error: Access Denied.")
+ to_chat(user,span_warning("Error: Access Denied."))
user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE)
return UI_CLOSE
if(!songs.len && !isobserver(user))
- to_chat(user,"Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")
+ to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue."))
playsound(src, 'sound/misc/compiler-failure.ogg', 25, TRUE)
return UI_CLOSE
return ..()
@@ -134,7 +134,7 @@
return
if(!active)
if(stop > world.time)
- to_chat(usr, "Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].")
+ to_chat(usr, span_warning("Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)]."))
playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE)
return
activate_music()
@@ -145,7 +145,7 @@
return TRUE
if("select_track")
if(active)
- to_chat(usr, "Error: You cannot change the song until the current one is over.")
+ to_chat(usr, span_warning("Error: You cannot change the song until the current one is over."))
return
var/list/available = list()
for(var/datum/track/S in songs)
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index 46cec39392a6..4bc87338e217 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -28,9 +28,9 @@
if(defib)
. += "There is a defib unit hooked up. Alt-click to remove it."
if(GLOB.security_level >= SEC_LEVEL_RED)
- . += "Due to a security situation, its locking clamps can be toggled by swiping any ID."
+ . += span_notice("Due to a security situation, its locking clamps can be toggled by swiping any ID.")
else
- . += "Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access."
+ . += span_notice("Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access.")
/obj/machinery/defibrillator_mount/process()
if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge && is_operational())
@@ -57,23 +57,23 @@
//defib interaction
/obj/machinery/defibrillator_mount/attack_hand(mob/living/user)
if(!defib)
- to_chat(user, "There's no defibrillator unit loaded!")
+ to_chat(user, span_warning("There's no defibrillator unit loaded!"))
return
if(defib.paddles.loc != defib)
- to_chat(user, "[defib.paddles.loc == user ? "You are already" : "Someone else is"] holding [defib]'s paddles!")
+ to_chat(user, span_warning("[defib.paddles.loc == user ? "You are already" : "Someone else is"] holding [defib]'s paddles!"))
return
user.put_in_hands(defib.paddles)
/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/defibrillator))
if(defib)
- to_chat(user, "There's already a defibrillator in [src]!")
+ to_chat(user, span_warning("There's already a defibrillator in [src]!"))
return
if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src))
- to_chat(user, "[I] is stuck to your hand!")
+ to_chat(user, span_warning("[I] is stuck to your hand!"))
return
- user.visible_message("[user] hooks up [I] to [src]!", \
- "You press [I] into the mount, and it clicks into place.")
+ user.visible_message(span_notice("[user] hooks up [I] to [src]!"), \
+ span_notice("You press [I] into the mount, and it clicks into place."))
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
defib = I
update_icon()
@@ -85,30 +85,30 @@
if(id)
if(check_access(id) || GLOB.security_level >= SEC_LEVEL_RED) //anyone can toggle the clamps in red alert!
if(!defib)
- to_chat(user, "You can't engage the clamps on a defibrillator that isn't there.")
+ to_chat(user, span_warning("You can't engage the clamps on a defibrillator that isn't there."))
return
clamps_locked = !clamps_locked
- to_chat(user, "Clamps [clamps_locked ? "" : "dis"]engaged.")
+ to_chat(user, span_notice("Clamps [clamps_locked ? "" : "dis"]engaged."))
update_icon()
else
- to_chat(user, "Insufficient access.")
+ to_chat(user, span_warning("Insufficient access."))
return
..()
/obj/machinery/defibrillator_mount/multitool_act(mob/living/user, obj/item/multitool)
if(!defib)
- to_chat(user, "There isn't any defibrillator to clamp in!")
+ to_chat(user, span_warning("There isn't any defibrillator to clamp in!"))
return TRUE
if(!clamps_locked)
- to_chat(user, "[src]'s clamps are disengaged!")
+ to_chat(user, span_warning("[src]'s clamps are disengaged!"))
return TRUE
- user.visible_message("[user] presses [multitool] into [src]'s ID slot...", \
- "You begin overriding the clamps on [src]...")
+ user.visible_message(span_notice("[user] presses [multitool] into [src]'s ID slot..."), \
+ span_notice("You begin overriding the clamps on [src]..."))
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
if(!do_after(user, 100, target = src) || !clamps_locked)
return
- user.visible_message("[user] pulses [multitool], and [src]'s clamps slide up.", \
- "You override the locking clamps on [src]!")
+ user.visible_message(span_notice("[user] pulses [multitool], and [src]'s clamps slide up."), \
+ span_notice("You override the locking clamps on [src]!"))
playsound(src, 'sound/machines/locktoggle.ogg', 50, TRUE)
clamps_locked = FALSE
update_icon()
@@ -118,16 +118,16 @@
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
return
if(!defib)
- to_chat(user, "It'd be hard to remove a defib unit from a mount that has none.")
+ to_chat(user, span_warning("It'd be hard to remove a defib unit from a mount that has none."))
return
if(clamps_locked)
- to_chat(user, "You try to tug out [defib], but the mount's clamps are locked tight!")
+ to_chat(user, span_warning("You try to tug out [defib], but the mount's clamps are locked tight!"))
return
if(!user.put_in_hands(defib))
- to_chat(user, "You need a free hand!")
+ to_chat(user, span_warning("You need a free hand!"))
return
- user.visible_message("[user] unhooks [defib] from [src].", \
- "You slide out [defib] from [src] and unhook the charging cables.")
+ user.visible_message(span_notice("[user] unhooks [defib] from [src]."), \
+ span_notice("You slide out [defib] from [src] and unhook the charging cables."))
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
defib = null
update_icon()
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 60d35634c0e3..e04d296ca5d5 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -32,7 +32,7 @@
if(!I.tool_start_check(user, amount=0))
return
- to_chat(user, "You begin repairing [src]...")
+ to_chat(user, span_notice("You begin repairing [src]..."))
if(I.use_tool(src, user, 40, volume=40))
obj_integrity = clamp(obj_integrity + 20, 0, max_integrity)
else
@@ -68,10 +68,10 @@
if(istype(I,/obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/sheet/mineral/wood/W = I
if(W.amount < 5)
- to_chat(user, "You need at least five wooden planks to make a wall!")
+ to_chat(user, span_warning("You need at least five wooden planks to make a wall!"))
return
else
- to_chat(user, "You start adding [I] to [src]...")
+ to_chat(user, span_notice("You start adding [I] to [src]..."))
if(do_after(user, 50, target=src))
W.use(5)
new /turf/closed/wall/mineral/wood/nonmetal(get_turf(src))
@@ -79,9 +79,9 @@
return
else if(I.tool_behaviour == TOOL_CROWBAR && user.a_intent != INTENT_HARM)
user.visible_message("[user.name] starts prying [src.name] apart.", \
- "You start prying the barricade apart")
+ span_notice("You start prying the barricade apart"))
if(I.use_tool(src, user, 190, volume=50))
- to_chat(user, "You disassemble the barricade.")
+ to_chat(user, span_notice("You disassemble the barricade."))
new /obj/item/stack/sheet/mineral/wood(user.loc, 5)
qdel(src)
else
@@ -99,9 +99,9 @@
/obj/structure/barricade/wooden/crude/attackby(obj/item/I, mob/user) // Make it so you cant turn crude planks into walls
if(I.tool_behaviour == TOOL_CROWBAR && user.a_intent != INTENT_HARM)
user.visible_message("[user.name] starts prying [src.name] apart.", \
- "You start prying the barricade apart")
+ span_notice("You start prying the barricade apart"))
if(I.use_tool(src, user, 190, volume=50))
- to_chat(user, "You disassemble the barricade.")
+ to_chat(user, span_notice("You disassemble the barricade."))
new /obj/item/stack/sheet/mineral/wood(user.loc, 5)
qdel(src)
@@ -151,7 +151,7 @@
density = TRUE
anchored = TRUE
if(deploy_message)
- visible_message("[src] deploys!")
+ visible_message(span_warning("[src] deploys!"))
/obj/item/grenade/barrier
@@ -165,7 +165,7 @@
/obj/item/grenade/barrier/examine(mob/user)
. = ..()
- . += "Alt-click to toggle modes."
+ . += span_notice("Alt-click to toggle modes.")
/obj/item/grenade/barrier/AltClick(mob/living/carbon/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index f6e4e8cdc668..a66dccc96c8f 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -34,15 +34,15 @@
/obj/machinery/dish_drive/examine(mob/user)
. = ..()
if(user.Adjacent(src))
- . += "Alt-click it to beam its contents to any nearby disposal bins."
+ . += span_notice("Alt-click it to beam its contents to any nearby disposal bins.")
/obj/machinery/dish_drive/attack_hand(mob/living/user)
if(!contents.len)
- to_chat(user, "There's nothing in [src]!")
+ to_chat(user, span_warning("There's nothing in [src]!"))
return
var/obj/item/I = contents[contents.len] //the most recently-added item
user.put_in_hands(I)
- to_chat(user, "You take out [I] from [src].")
+ to_chat(user, span_notice("You take out [I] from [src]."))
playsound(src, 'sound/items/pshoom.ogg', 50, TRUE)
flick("synthesizer_beam", src)
@@ -50,7 +50,7 @@
if(is_type_in_list(I, collectable_items) && user.a_intent != INTENT_HARM)
if(!user.transferItemToLoc(I, src))
return
- to_chat(user, "You put [I] in [src], and it's beamed into energy!")
+ to_chat(user, span_notice("You put [I] in [src], and it's beamed into energy!"))
playsound(src, 'sound/items/pshoom.ogg', 50, TRUE)
flick("synthesizer_beam", src)
return
@@ -88,7 +88,7 @@
for(var/obj/item/I in view(4, src))
if(is_type_in_list(I, collectable_items) && I.loc != src && (!I.reagents || !I.reagents.total_volume))
if(I.Adjacent(src))
- visible_message("[src] beams up [I]!")
+ visible_message(span_notice("[src] beams up [I]!"))
I.forceMove(src)
playsound(src, 'sound/items/pshoom.ogg', 50, TRUE)
flick("synthesizer_beam", src)
@@ -98,7 +98,7 @@
/obj/machinery/dish_drive/attack_ai(mob/living/user)
if(stat)
return
- to_chat(user, "You send a disposal transmission signal to [src].")
+ to_chat(user, span_notice("You send a disposal transmission signal to [src]."))
do_the_dishes(TRUE)
/obj/machinery/dish_drive/AltClick(mob/living/user)
@@ -111,7 +111,7 @@
var/obj/machinery/disposal/bin/bin = locate() in view(7, src)
if(!bin)
if(manual)
- visible_message("[src] buzzes. There are no disposal bins in range!")
+ visible_message(span_warning("[src] buzzes. There are no disposal bins in range!"))
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE)
return
var/disposed = 0
@@ -121,7 +121,7 @@
use_power(active_power_usage)
disposed++
if (disposed)
- visible_message("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and beams [disposed] stored item\s into the nearby [bin.name].")
+ visible_message(span_notice("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and beams [disposed] stored item\s into the nearby [bin.name]."))
playsound(src, 'sound/items/pshoom.ogg', 50, TRUE)
playsound(bin, 'sound/items/pshoom.ogg', 50, TRUE)
Beam(bin, icon_state = "rped_upgrade", time = 5)
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index bec9d3e4ada2..72b16c05f8f5 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -56,7 +56,7 @@
/obj/machinery/dna_scannernew/proc/toggle_open(mob/user)
if(panel_open)
- to_chat(user, "Close the maintenance panel first.")
+ to_chat(user, span_notice("Close the maintenance panel first."))
return
if(state_open)
@@ -64,7 +64,7 @@
return
else if(locked)
- to_chat(user, "The bolts are locked down, securing the door shut.")
+ to_chat(user, span_notice("The bolts are locked down, securing the door shut."))
return
open_machine()
@@ -75,15 +75,15 @@
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- user.visible_message("You see [user] kicking against the door of [src]!", \
- "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \
- "You hear a metallic creaking from [src].")
+ user.visible_message(span_notice("You see [user] kicking against the door of [src]!"), \
+ span_notice("You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)"), \
+ span_italics("You hear a metallic creaking from [src]."))
if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
return
locked = FALSE
- user.visible_message("[user] successfully broke out of [src]!", \
- "You successfully break out of [src]!")
+ user.visible_message(span_warning("[user] successfully broke out of [src]!"), \
+ span_notice("You successfully break out of [src]!"))
open_machine()
/obj/machinery/dna_scannernew/proc/locate_computer(type_)
@@ -121,7 +121,7 @@
if(user.stat || locked)
if(message_cooldown <= world.time)
message_cooldown = world.time + 50
- to_chat(user, "[src]'s door won't budge!")
+ to_chat(user, span_warning("[src]'s door won't budge!"))
return
open_machine()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index e17c2afe8343..fc1fc26b8616 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -375,7 +375,7 @@
return
locked = TRUE
playsound(src,boltDown,30,0,3)
- audible_message("You hear a click from the bottom of the door.", null, 1)
+ audible_message(span_italics("You hear a click from the bottom of the door."), null, 1)
update_icon()
/obj/machinery/door/airlock/unlock()
@@ -386,7 +386,7 @@
return
locked = FALSE
playsound(src,boltUp,30,0,3)
- audible_message("You hear a click from the bottom of the door.", null, 1)
+ audible_message(span_italics("You hear a click from the bottom of the door."), null, 1)
update_icon()
/obj/machinery/door/airlock/narsie_act()
@@ -771,11 +771,11 @@
/obj/machinery/door/airlock/examine(mob/user)
. = ..()
if(obj_flags & EMAGGED)
- . += "Its access panel is smoking slightly."
+ . += span_warning("Its access panel is smoking slightly.")
if(charge && !panel_open && in_range(user, src))
- . += "The maintenance panel seems haphazardly fastened."
+ . += span_warning("The maintenance panel seems haphazardly fastened.")
if(charge && panel_open)
- . += "Something is wired up to the airlock's electronics!"
+ . += span_warning("Something is wired up to the airlock's electronics!")
if(note)
if(!in_range(user, src))
. += "There's a [note.name] pinned to the front. You can't read it from here."
@@ -806,10 +806,10 @@
. += "It looks very robust."
if(issilicon(user) && !(stat & BROKEN))
- . += "Shift-click [src] to [ density ? "open" : "close"] it."
- . += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts."
- . += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it."
- . += "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access."
+ . += span_notice("Shift-click [src] to [ density ? "open" : "close"] it.")
+ . += span_notice("Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts.")
+ . += span_notice("Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it.")
+ . += span_notice("Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access.")
/obj/machinery/door/airlock/attack_ai(mob/user)
if(!canAIControl(user))
@@ -817,12 +817,12 @@
hack(user)
return
else
- to_chat(user, "Airlock AI control has been blocked with a firewall. Unable to hack.")
+ to_chat(user, span_warning("Airlock AI control has been blocked with a firewall. Unable to hack."))
if(obj_flags & EMAGGED)
- to_chat(user, "Unable to interface: Airlock is unresponsive.")
+ to_chat(user, span_warning("Unable to interface: Airlock is unresponsive."))
return
if(detonated)
- to_chat(user, "Unable to interface. Airlock control panel damaged.")
+ to_chat(user, span_warning("Unable to interface. Airlock control panel damaged."))
return
ui_interact(user)
@@ -900,16 +900,16 @@
if((HAS_TRAIT(H, TRAIT_DUMB)) && Adjacent(user))
playsound(src, 'sound/effects/bang.ogg', 25, TRUE)
if(!istype(H.head, /obj/item/clothing/head/helmet))
- H.visible_message("[user] headbutts the airlock.", \
- "You headbutt the airlock!")
+ H.visible_message(span_danger("[user] headbutts the airlock."), \
+ span_userdanger("You headbutt the airlock!"))
H.Paralyze(100)
H.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
else
- visible_message("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.")
+ visible_message(span_danger("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet."))
/obj/machinery/door/airlock/attempt_wire_interaction(mob/user)
if(security_level)
- to_chat(user, "Wires are protected!")
+ to_chat(user, span_warning("Wires are protected!"))
return WIRE_INTERACTION_FAIL
return ..()
@@ -960,28 +960,28 @@
if(istype(C, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/S = C
if(S.get_amount() < 2)
- to_chat(user, "You need at least 2 metal sheets to reinforce [src].")
+ to_chat(user, span_warning("You need at least 2 metal sheets to reinforce [src]."))
return
- to_chat(user, "You start reinforcing [src].")
+ to_chat(user, span_notice("You start reinforcing [src]."))
if(do_after(user, 20, TRUE, src))
if(!panel_open || !S.use(2))
return
- user.visible_message("[user] reinforces \the [src] with metal.",
- "You reinforce \the [src] with metal.")
+ user.visible_message(span_notice("[user] reinforces \the [src] with metal."),
+ span_notice("You reinforce \the [src] with metal."))
security_level = AIRLOCK_SECURITY_METAL
update_icon()
return
else if(istype(C, /obj/item/stack/sheet/plasteel))
var/obj/item/stack/sheet/plasteel/S = C
if(S.get_amount() < 2)
- to_chat(user, "You need at least 2 plasteel sheets to reinforce [src].")
+ to_chat(user, span_warning("You need at least 2 plasteel sheets to reinforce [src]."))
return
- to_chat(user, "You start reinforcing [src].")
+ to_chat(user, span_notice("You start reinforcing [src]."))
if(do_after(user, 20, TRUE, src))
if(!panel_open || !S.use(2))
return
- user.visible_message("[user] reinforces \the [src] with plasteel.",
- "You reinforce \the [src] with plasteel.")
+ user.visible_message(span_notice("[user] reinforces \the [src] with plasteel."),
+ span_notice("You reinforce \the [src] with plasteel."))
security_level = AIRLOCK_SECURITY_PLASTEEL
modify_max_integrity(normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER)
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R
@@ -991,13 +991,13 @@
if(C.tool_behaviour == TOOL_WELDER)
if(!C.tool_start_check(user, amount=2))
return
- to_chat(user, "You begin cutting the panel's shielding...")
+ to_chat(user, span_notice("You begin cutting the panel's shielding..."))
if(C.use_tool(src, user, 40, volume=50, amount = 2))
if(!panel_open)
return
- user.visible_message("[user] cuts through \the [src]'s shielding.",
- "You cut through \the [src]'s shielding.",
- "You hear welding.")
+ user.visible_message(span_notice("[user] cuts through \the [src]'s shielding."),
+ span_notice("You cut through \the [src]'s shielding."),
+ span_italics("You hear welding."))
security_level = AIRLOCK_SECURITY_NONE
spawn_atom_to_turf(/obj/item/stack/sheet/metal, user.loc, 2)
update_icon()
@@ -1005,14 +1005,14 @@
if(AIRLOCK_SECURITY_PLASTEEL_I_S)
if(C.tool_behaviour == TOOL_CROWBAR)
var/obj/item/crowbar/W = C
- to_chat(user, "You start removing the inner layer of shielding...")
+ to_chat(user, span_notice("You start removing the inner layer of shielding..."))
if(W.use_tool(src, user, 40, volume=100))
if(!panel_open)
return
if(security_level != AIRLOCK_SECURITY_PLASTEEL_I_S)
return
- user.visible_message("[user] remove \the [src]'s shielding.",
- "You remove \the [src]'s inner shielding.")
+ user.visible_message(span_notice("[user] remove \the [src]'s shielding."),
+ span_notice("You remove \the [src]'s inner shielding."))
security_level = AIRLOCK_SECURITY_NONE
modify_max_integrity(normal_integrity)
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N
@@ -1023,25 +1023,25 @@
if(C.tool_behaviour == TOOL_WELDER)
if(!C.tool_start_check(user, amount=2))
return
- to_chat(user, "You begin cutting the inner layer of shielding...")
+ to_chat(user, span_notice("You begin cutting the inner layer of shielding..."))
if(C.use_tool(src, user, 40, volume=50, amount=2))
if(!panel_open)
return
- user.visible_message("[user] cuts through \the [src]'s shielding.",
- "You cut through \the [src]'s shielding.",
- "You hear welding.")
+ user.visible_message(span_notice("[user] cuts through \the [src]'s shielding."),
+ span_notice("You cut through \the [src]'s shielding."),
+ span_italics("You hear welding."))
security_level = AIRLOCK_SECURITY_PLASTEEL_I_S
return
if(AIRLOCK_SECURITY_PLASTEEL_O_S)
if(C.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "You start removing outer layer of shielding...")
+ to_chat(user, span_notice("You start removing outer layer of shielding..."))
if(C.use_tool(src, user, 40, volume=100))
if(!panel_open)
return
if(security_level != AIRLOCK_SECURITY_PLASTEEL_O_S)
return
- user.visible_message("[user] remove \the [src]'s shielding.",
- "You remove \the [src]'s shielding.")
+ user.visible_message(span_notice("[user] remove \the [src]'s shielding."),
+ span_notice("You remove \the [src]'s shielding."))
security_level = AIRLOCK_SECURITY_PLASTEEL_I
spawn_atom_to_turf(/obj/item/stack/sheet/plasteel, user.loc, 1)
return
@@ -1049,37 +1049,37 @@
if(C.tool_behaviour == TOOL_WELDER)
if(!C.tool_start_check(user, amount=2))
return
- to_chat(user, "You begin cutting the outer layer of shielding...")
+ to_chat(user, span_notice("You begin cutting the outer layer of shielding..."))
if(C.use_tool(src, user, 40, volume=50, amount=2))
if(!panel_open)
return
- user.visible_message("[user] cuts through \the [src]'s shielding.",
- "You cut through \the [src]'s shielding.",
- "You hear welding.")
+ user.visible_message(span_notice("[user] cuts through \the [src]'s shielding."),
+ span_notice("You cut through \the [src]'s shielding."),
+ span_italics("You hear welding."))
security_level = AIRLOCK_SECURITY_PLASTEEL_O_S
return
if(AIRLOCK_SECURITY_PLASTEEL)
if(C.tool_behaviour == TOOL_WIRECUTTER)
if(hasPower() && shock(user, 60)) // Protective grille of wiring is electrified
return
- to_chat(user, "You start cutting through the outer grille.")
+ to_chat(user, span_notice("You start cutting through the outer grille."))
if(C.use_tool(src, user, 10, volume=100))
if(!panel_open)
return
- user.visible_message("[user] cut through \the [src]'s outer grille.",
- "You cut through \the [src]'s outer grille.")
+ user.visible_message(span_notice("[user] cut through \the [src]'s outer grille."),
+ span_notice("You cut through \the [src]'s outer grille."))
security_level = AIRLOCK_SECURITY_PLASTEEL_O
return
if(C.tool_behaviour == TOOL_SCREWDRIVER)
if(panel_open && detonated)
- to_chat(user, "[src] has no maintenance panel!")
+ to_chat(user, span_warning("[src] has no maintenance panel!"))
return
panel_open = !panel_open
- to_chat(user, "You [panel_open ? "open":"close"] the maintenance panel of the airlock.")
+ to_chat(user, span_notice("You [panel_open ? "open":"close"] the maintenance panel of the airlock."))
C.play_tool_sound(src)
update_icon()
else if((C.tool_behaviour == TOOL_WIRECUTTER) && note)
- user.visible_message("[user] cuts down [note] from [src].", "You remove [note] from [src].")
+ user.visible_message(span_notice("[user] cuts down [note] from [src]."), span_notice("You remove [note] from [src]."))
C.play_tool_sound(src)
note.forceMove(get_turf(user))
note = null
@@ -1097,29 +1097,29 @@
S.show_access(src, user) //yogs end
else if(istype(C, /obj/item/doorCharge))
if(!panel_open || security_level)
- to_chat(user, "The maintenance panel must be open to apply [C]!")
+ to_chat(user, span_warning("The maintenance panel must be open to apply [C]!"))
return
if(obj_flags & EMAGGED)
return
if(charge && !detonated)
- to_chat(user, "There's already a charge hooked up to this door!")
+ to_chat(user, span_warning("There's already a charge hooked up to this door!"))
return
if(detonated)
- to_chat(user, "The maintenance panel is destroyed!")
+ to_chat(user, span_warning("The maintenance panel is destroyed!"))
return
- to_chat(user, "You apply [C]. Next time someone opens the door, it will explode.")
+ to_chat(user, span_warning("You apply [C]. Next time someone opens the door, it will explode."))
panel_open = FALSE
update_icon()
user.transferItemToLoc(C, src, TRUE)
charge = C
else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo))
if(note)
- to_chat(user, "There's already something pinned to this airlock! Use wirecutters to remove it.")
+ to_chat(user, span_warning("There's already something pinned to this airlock! Use wirecutters to remove it."))
return
if(!user.transferItemToLoc(C, src))
- to_chat(user, "For some reason, you can't attach [C]!")
+ to_chat(user, span_warning("For some reason, you can't attach [C]!"))
return
- user.visible_message("[user] pins [C] to [src].", "You pin [C] to [src].")
+ user.visible_message(span_notice("[user] pins [C] to [src]."), span_notice("You pin [C] to [src]."))
note = C
update_icon()
else if(istype(C, /obj/item/brace)) //yogs
@@ -1129,7 +1129,7 @@
if(!density)
return
if(locked || welded)
- to_chat(user, "Your [C.name] can't force open locked doors without smashing them down [src].")
+ to_chat(user, span_warning("Your [C.name] can't force open locked doors without smashing them down [src]."))
return
open(2)
var/obj/item/umbral_tendrils/T = C
@@ -1138,9 +1138,9 @@
else if(user.a_intent == INTENT_DISARM && density)
if(!locked && !welded)
if(!T.darkspawn.has_psi(15))
- to_chat(user, "You need at least 15 Psi to force open an airlock!")
+ to_chat(user, span_warning("You need at least 15 Psi to force open an airlock!"))
return
- user.visible_message("[user] starts forcing open [src]!", "ueahz
You begin forcing open [src]...")
+ user.visible_message(span_warning("[user] starts forcing open [src]!"), span_velvet("ueahz
You begin forcing open [src]..."))
playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE)
if(!T.twin)
if(!do_after(user, 75, target = src))
@@ -1150,13 +1150,13 @@
return
open(2)
if(density && !open(2))
- to_chat(user, "Despite your attempts, [src] refuses to open!")
+ to_chat(user, span_warning("Despite your attempts, [src] refuses to open!"))
T.darkspawn.use_psi(15)
else
if(!T.darkspawn.has_psi(30))
- to_chat(user, "You need at least 30 Psi to smash down an airlock!")
+ to_chat(user, span_warning("You need at least 30 Psi to smash down an airlock!"))
return
- user.visible_message("[user] starts slamming [T] into [src]!", \
+ user.visible_message(span_boldwarning("[user] starts slamming [T] into [src]!"), \
"You loudly begin smashing down [src].")
while(obj_integrity > max_integrity * 0.25)
if(T.twin)
@@ -1173,7 +1173,7 @@
take_damage(max_integrity / rand(8, 15))
to_chat(user, "klaj.")
ex_act(EXPLODE_DEVASTATE)
- user.visible_message("[user] slams down [src]!", "KLAJ.")
+ user.visible_message(span_boldwarning("[user] slams down [src]!"), "KLAJ.")
T.darkspawn.use_psi(30)
qdel(T)
else
@@ -1186,28 +1186,28 @@
if(!W.tool_start_check(user, amount=0))
return
user.visible_message("[user] is [welded ? "unwelding":"welding"] the airlock.", \
- "You begin [welded ? "unwelding":"welding"] the airlock...", \
- "You hear welding.")
+ span_notice("You begin [welded ? "unwelding":"welding"] the airlock..."), \
+ span_italics("You hear welding."))
if(W.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, .proc/weld_checks, W, user)))
welded = !welded
user.visible_message("[user.name] has [welded? "welded shut":"unwelded"] [src].", \
- "You [welded ? "weld the airlock shut":"unweld the airlock"].")
+ span_notice("You [welded ? "weld the airlock shut":"unweld the airlock"]."))
update_icon()
else
if(obj_integrity < max_integrity)
if(!W.tool_start_check(user, amount=0))
return
user.visible_message("[user] is welding the airlock.", \
- "You begin repairing the airlock...", \
- "You hear welding.")
+ span_notice("You begin repairing the airlock..."), \
+ span_italics("You hear welding."))
if(W.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, .proc/weld_checks, W, user)))
obj_integrity = max_integrity
stat &= ~BROKEN
user.visible_message("[user.name] has repaired [src].", \
- "You finish repairing the airlock.")
+ span_notice("You finish repairing the airlock."))
update_icon()
else
- to_chat(user, "The airlock doesn't need repairing.")
+ to_chat(user, span_notice("The airlock doesn't need repairing."))
/obj/machinery/door/airlock/proc/weld_checks(obj/item/weldingtool/W, mob/user)
return !operating && density
@@ -1219,33 +1219,33 @@
else
beingcrowbarred = 0
if(panel_open && charge)
- to_chat(user, "You carefully start removing [charge] from [src]...")
+ to_chat(user, span_notice("You carefully start removing [charge] from [src]..."))
if(!I.use_tool(src, user, 150, volume=50))
- to_chat(user, "You slip and [charge] detonates!")
+ to_chat(user, span_warning("You slip and [charge] detonates!"))
user.Paralyze(60)
return blow_charge()
- user.visible_message("[user] removes [charge] from [src].", \
- "You gently pry out [charge] from [src] and unhook its wires.")
+ user.visible_message(span_notice("[user] removes [charge] from [src]."), \
+ span_notice("You gently pry out [charge] from [src] and unhook its wires."))
charge.forceMove(get_turf(user))
charge = null
return
if(!security_level && (beingcrowbarred && panel_open && ((obj_flags & EMAGGED) || (density && welded && !operating && !hasPower() && !locked))))
user.visible_message("[user] removes the electronics from the airlock assembly.", \
- "You start to remove electronics from the airlock assembly...")
+ span_notice("You start to remove electronics from the airlock assembly..."))
if(I.use_tool(src, user, 40, volume=100))
deconstruct(TRUE, user)
return
else if(hasPower())
- to_chat(user, "The airlock's motors resist your efforts to force it!")
+ to_chat(user, span_warning("The airlock's motors resist your efforts to force it!"))
else if(locked)
- to_chat(user, "The airlock's bolts prevent it from being forced!")
+ to_chat(user, span_warning("The airlock's bolts prevent it from being forced!"))
else if(brace)
- to_chat(user, "The airlock won't budge!")
+ to_chat(user, span_warning("The airlock won't budge!"))
else if( !welded && !operating)
if(istype(I, /obj/item/twohanded/fireaxe)) //being fireaxe'd
var/obj/item/twohanded/fireaxe/F = I
if(!F.wielded)
- to_chat(user, "You need to be wielding the fire axe to do that!")
+ to_chat(user, span_warning("You need to be wielding the fire axe to do that!"))
return
INVOKE_ASYNC(src, (density ? .proc/open : .proc/close), 2)
@@ -1258,15 +1258,15 @@
return
if(locked)
- to_chat(user, "The bolts are down, it won't budge!")
+ to_chat(user, span_warning("The bolts are down, it won't budge!"))
return
if(welded)
- to_chat(user, "It's welded, it won't budge!")
+ to_chat(user, span_warning("It's welded, it won't budge!"))
return
if(brace)
- to_chat(user, "The airlock won't budge!")
+ to_chat(user, span_warning("The airlock won't budge!"))
return
var/time_to_open = 5
@@ -1285,7 +1285,7 @@
time_to_open = 15
else
if(user)
- to_chat(user, "You do not have enough charge in the [J] for this. You need at least [J.pump_cost]% ")
+ to_chat(user, span_warning("You do not have enough charge in the [J] for this. You need at least [J.pump_cost]% "))
return
playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) //is it aliens or just the CE being a dick?
@@ -1293,7 +1293,7 @@
if(do_after(user, time_to_open, TRUE, src))
open(2)
if(density && !open(2))
- to_chat(user, "Despite your attempts, [src] refuses to open.")
+ to_chat(user, span_warning("Despite your attempts, [src] refuses to open."))
prying_so_hard = FALSE
@@ -1308,15 +1308,15 @@
return
if(welded && !locked)
- to_chat(user, "It's welded, this will take a while...")
+ to_chat(user, span_warning("It's welded, this will take a while..."))
time_to_open = 100 * door_time_multiplier
if(locked && !welded)
- to_chat(user, "The bolts are down, it won't budge! Forcing the bolts will take a while...")
+ to_chat(user, span_warning("The bolts are down, it won't budge! Forcing the bolts will take a while..."))
time_to_open = 80 * door_time_multiplier
if(locked && welded)
- to_chat(user, "The bolts are down, and it's welded.Forcing the bolts and breaking the seal will take a long while...")
+ to_chat(user, span_warning("The bolts are down, and it's welded.Forcing the bolts and breaking the seal will take a long while..."))
time_to_open = 200 * door_time_multiplier
if(brace)
@@ -1327,7 +1327,7 @@
if(do_after(user, time_to_open, TRUE, src))
open(2)
if(density && !open(2))
- to_chat(user, "Despite your attempts, [src] refuses to open.")
+ to_chat(user, span_warning("Despite your attempts, [src] refuses to open."))
/obj/machinery/door/airlock/open(forced=0)
@@ -1438,7 +1438,7 @@
/obj/machinery/door/airlock/proc/change_paintjob(obj/item/airlock_painter/painter, mob/user)
if(!can_repaint)
- to_chat(user, "The airlock painter does not support this airlock.")
+ to_chat(user, span_warning("The airlock painter does not support this airlock."))
return
if((!in_range(src, user) && loc != user) || !painter.can_use(user)) // user should be adjacent to the airlock, and the painter should have a toner cartridge that isn't empty
@@ -1454,7 +1454,7 @@
var/obj/structure/door_assembly/assembly = initial(airlock.assemblytype)
if(airlock_material == "glass" && initial(assembly.noglass)) // prevents painting glass airlocks with a paint job that doesn't have a glass version, such as the freezer
- to_chat(user, "This paint job can only be applied to non-glass airlocks.")
+ to_chat(user, span_warning("This paint job can only be applied to non-glass airlocks."))
return
// applies the user-chosen airlock's icon, overlays and assemblytype to the src airlock
@@ -1492,11 +1492,11 @@
if(!density) //Already open
return
if(locked || welded) //Extremely generic, as aliens only understand the basics of how airlocks work.
- to_chat(user, "[src] refuses to budge!")
+ to_chat(user, span_warning("[src] refuses to budge!"))
return
- user.visible_message("[user] begins prying open [src].",\
- "You begin digging your claws into [src] with all your might!",\
- "You hear groaning metal...")
+ user.visible_message(span_warning("[user] begins prying open [src]."),\
+ span_noticealien("You begin digging your claws into [src] with all your might!"),\
+ span_warning("You hear groaning metal..."))
var/time_to_open = 5
if(hasPower())
time_to_open = 50 //Powered airlocks take longer to open, and are loud.
@@ -1505,7 +1505,7 @@
if(do_after(user, time_to_open, TRUE, src))
if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
- to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!")
+ to_chat(user, span_warning("Despite your efforts, [src] managed to resist your attempts to open it!"))
/obj/machinery/door/airlock/hostile_lockdown(mob/origin)
// Must be powered and have working AI wire.
@@ -1580,10 +1580,10 @@
A.obj_integrity = A.max_integrity * 0.5
else if(obj_flags & EMAGGED)
if(user)
- to_chat(user, "You discard the damaged electronics.")
+ to_chat(user, span_warning("You discard the damaged electronics."))
else
if(user)
- to_chat(user, "You remove the airlock electronics.")
+ to_chat(user, span_notice("You remove the airlock electronics."))
var/obj/item/electronics/airlock/ae
if(!electronics)
@@ -1604,7 +1604,7 @@
switch(the_rcd.mode)
if(RCD_DECONSTRUCT)
if(security_level != AIRLOCK_SECURITY_NONE)
- to_chat(user, "[src]'s reinforcement needs to be removed first.")
+ to_chat(user, span_notice("[src]'s reinforcement needs to be removed first."))
return FALSE
return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 32)
return FALSE
@@ -1612,7 +1612,7 @@
/obj/machinery/door/airlock/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
if(RCD_DECONSTRUCT)
- to_chat(user, "You deconstruct the airlock.")
+ to_chat(user, span_notice("You deconstruct the airlock."))
qdel(src)
return TRUE
return FALSE
@@ -1756,11 +1756,11 @@
if(!user_allowed(user))
return
if(wires.is_cut(WIRE_BOLTS))
- to_chat(user, "The door bolt drop wire is cut - you can't toggle the door bolts.")
+ to_chat(user, span_warning("The door bolt drop wire is cut - you can't toggle the door bolts."))
return
if(locked)
if(!hasPower())
- to_chat(user, "The door has no power - you can't raise the door bolts.")
+ to_chat(user, span_warning("The door has no power - you can't raise the door bolts."))
else
unbolt()
to_chat(user, "Door bolts raised.")
@@ -1789,7 +1789,7 @@
/obj/machinery/door/airlock/proc/blow_charge()
panel_open = TRUE
update_icon(AIRLOCK_OPENING)
- visible_message("[src]'s panel is blown off in a spray of deadly shrapnel!")
+ visible_message(span_warning("[src]'s panel is blown off in a spray of deadly shrapnel!"))
charge.forceMove(drop_location())
charge.ex_act(EXPLODE_DEVASTATE)
detonated = TRUE
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index b5ea06cc9260..7bf3fefe4449 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -9,7 +9,7 @@
/obj/item/electronics/airlock/examine(mob/user)
. = ..()
- . += "Has a neat selection menu for modifying airlock access levels."
+ . += span_notice("Has a neat selection menu for modifying airlock access levels.")
/obj/item/electronics/airlock/ui_state(mob/user)
return GLOB.always_state
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 0e8db90345d5..cc067f320c31 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -584,9 +584,9 @@
var/gear_text = "The cogwheel is flickering and twisting wildly. Report this to a coder."
switch(construction_state)
if(GEAR_SECURE)
- gear_text = "The cogwheel is solidly wrenched to the brass around it."
+ gear_text = span_brass("The cogwheel is solidly wrenched to the brass around it.")
if(GEAR_LOOSE)
- gear_text = "The cogwheel has been loosened, but remains connected loosely to the door!"
+ gear_text = span_alloy("The cogwheel has been loosened, but remains connected loosely to the door!")
. += gear_text
/obj/machinery/door/airlock/clockwork/emp_act(severity)
@@ -638,30 +638,30 @@
return 0
else if(I.tool_behaviour == TOOL_WRENCH)
if(construction_state == GEAR_SECURE)
- user.visible_message("[user] begins loosening [src]'s cogwheel...", "You begin loosening [src]'s cogwheel...")
+ user.visible_message(span_notice("[user] begins loosening [src]'s cogwheel..."), span_notice("You begin loosening [src]'s cogwheel..."))
if(!I.use_tool(src, user, 75, volume=50) || construction_state != GEAR_SECURE)
return 1
- user.visible_message("[user] loosens [src]'s cogwheel!", "[src]'s cogwheel pops off and dangles loosely.")
+ user.visible_message(span_notice("[user] loosens [src]'s cogwheel!"), span_notice("[src]'s cogwheel pops off and dangles loosely."))
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
construction_state = GEAR_LOOSE
else if(construction_state == GEAR_LOOSE)
- user.visible_message("[user] begins tightening [src]'s cogwheel...", "You begin tightening [src]'s cogwheel into place...")
+ user.visible_message(span_notice("[user] begins tightening [src]'s cogwheel..."), span_notice("You begin tightening [src]'s cogwheel into place..."))
if(!I.use_tool(src, user, 75, volume=50) || construction_state != GEAR_LOOSE)
return 1
- user.visible_message("[user] tightens [src]'s cogwheel!", "You firmly tighten [src]'s cogwheel into place.")
+ user.visible_message(span_notice("[user] tightens [src]'s cogwheel!"), span_notice("You firmly tighten [src]'s cogwheel into place."))
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
construction_state = GEAR_SECURE
return 1
else if(I.tool_behaviour == TOOL_CROWBAR)
if(construction_state == GEAR_SECURE)
- to_chat(user, "[src]'s cogwheel is too tightly secured! Your [I.name] can't reach under it!")
+ to_chat(user, span_warning("[src]'s cogwheel is too tightly secured! Your [I.name] can't reach under it!"))
return 1
else if(construction_state == GEAR_LOOSE)
- user.visible_message("[user] begins slowly lifting off [src]'s cogwheel...", "You slowly begin lifting off [src]'s cogwheel...")
+ user.visible_message(span_notice("[user] begins slowly lifting off [src]'s cogwheel..."), span_notice("You slowly begin lifting off [src]'s cogwheel..."))
if(!I.use_tool(src, user, 75, volume=50) || construction_state != GEAR_LOOSE)
return 1
- user.visible_message("[user] lifts off [src]'s cogwheel, causing it to fall apart!", \
- "You lift off [src]'s cogwheel, causing it to fall apart!")
+ user.visible_message(span_notice("[user] lifts off [src]'s cogwheel, causing it to fall apart!"), \
+ span_notice("You lift off [src]'s cogwheel, causing it to fall apart!"))
deconstruct(TRUE)
return 1
return 0
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 6b9232160b1e..a20f491636ad 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -209,7 +209,7 @@
. = TRUE
if(!allowed(usr))
- to_chat(usr, "Access denied.")
+ to_chat(usr, span_warning("Access denied."))
return FALSE
switch(action)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 665ff85b222e..4abd3b29a4c1 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -60,16 +60,16 @@
. = ..()
if(red_alert_access)
if(GLOB.security_level >= SEC_LEVEL_RED)
- . += "Due to a security threat, its access requirements have been lifted!"
+ . += span_notice("Due to a security threat, its access requirements have been lifted!")
else
- . += "In the event of a red alert, its access requirements will automatically lift."
+ . += span_notice("In the event of a red alert, its access requirements will automatically lift.")
if(!poddoor)
- . += "Its maintenance panel is screwed in place."
+ . += span_notice("Its maintenance panel is screwed in place.")
if(!isdead(user))
var/userDir = turn(get_dir(src, user), 180)
var/turf/T = get_step(src, userDir)
var/areaName = T.loc.name
- . += "It leads into [areaName]."
+ . += span_notice("It leads into [areaName].")
/obj/machinery/door/check_access_list(list/access_list)
if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED)
@@ -370,7 +370,12 @@
/obj/machinery/door/proc/crush()
for(var/mob/living/L in get_turf(src))
- L.visible_message("[src] closes on [L], crushing [L.p_them()]!", "[src] closes on you and crushes you!")
+ L.visible_message(span_warning("[src] closes on [L], crushing [L.p_them()]!"), span_userdanger("[src] closes on you and crushes you!"))
+ if(iscarbon(L))
+ var/mob/living/carbon/C = L
+ for(var/i in C.all_wounds) // should probably replace with signal
+ var/datum/wound/W = i
+ W.crush(DOOR_CRUSH_DAMAGE)
if(isalien(L)) //For xenos
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans.
L.emote("roar")
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 6c182091eaea..bcca67f909e0 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -38,13 +38,13 @@
/obj/machinery/door/firedoor/examine(mob/user)
. = ..()
if(!density)
- . += "It is open, but could be pried closed."
+ . += span_notice("It is open, but could be pried closed.")
else if(!welded)
- . += "It is closed, but could be pried open. Deconstruction would require it to be welded shut."
+ . += span_notice("It is closed, but could be pried open. Deconstruction would require it to be welded shut.")
else if(boltslocked)
- . += "It is welded shut. The floor bolts have been locked by screws."
+ . += span_notice("It is welded shut. The floor bolts have been locked by screws.")
else
- . += "The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor."
+ . += span_notice("The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor.")
/obj/machinery/door/firedoor/proc/CalculateAffectingAreas()
remove_from_areas()
@@ -121,21 +121,21 @@
if(welded)
if(C.tool_behaviour == TOOL_WRENCH)
if(boltslocked)
- to_chat(user, "There are screws locking the bolts in place!")
+ to_chat(user, span_notice("There are screws locking the bolts in place!"))
return
C.play_tool_sound(src)
- user.visible_message("[user] starts undoing [src]'s bolts...", \
- "You start unfastening [src]'s floor bolts...")
+ user.visible_message(span_notice("[user] starts undoing [src]'s bolts..."), \
+ span_notice("You start unfastening [src]'s floor bolts..."))
if(!C.use_tool(src, user, 50))
return
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
- user.visible_message("[user] unfastens [src]'s bolts.", \
- "You undo [src]'s floor bolts.")
+ user.visible_message(span_notice("[user] unfastens [src]'s bolts."), \
+ span_notice("You undo [src]'s floor bolts."))
deconstruct(TRUE)
return
if(C.tool_behaviour == TOOL_SCREWDRIVER)
- user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts.", \
- "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts.")
+ user.visible_message(span_notice("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts."), \
+ span_notice("You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts."))
C.play_tool_sound(src)
boltslocked = !boltslocked
return
@@ -148,10 +148,10 @@
/obj/machinery/door/firedoor/try_to_weld(obj/item/weldingtool/W, mob/user)
if(!W.tool_start_check(user, amount=0))
return
- user.visible_message("[user] starts [welded ? "unwelding" : "welding"] [src].", "You start welding [src].")
+ user.visible_message(span_notice("[user] starts [welded ? "unwelding" : "welding"] [src]."), span_notice("You start welding [src]."))
if(W.use_tool(src, user, 40, volume=50))
welded = !welded
- to_chat(user, "[user] [welded?"welds":"unwelds"] [src].", "You [welded ? "weld" : "unweld"] [src].")
+ to_chat(user, span_danger("[user] [welded?"welds":"unwelds"] [src]."), span_notice("You [welded ? "weld" : "unweld"] [src]."))
update_icon()
/obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user)
@@ -161,7 +161,7 @@
if(density)
if(is_holding_pressure())
// tell the user that this is a bad idea, and have a do_after as well
- to_chat(user, "As you begin crowbarring \the [src] a gush of air blows in your face... maybe you should reconsider?")
+ to_chat(user, span_warning("As you begin crowbarring \the [src] a gush of air blows in your face... maybe you should reconsider?"))
if(!do_after(user, 15, TRUE, src)) // give them a few seconds to reconsider their decision.
return
log_game("[key_name_admin(user)] has opened a firelock with a pressure difference at [AREACOORD(loc)]") // there bibby I made it logged just for you. Enjoy.
@@ -196,7 +196,7 @@
/obj/machinery/door/firedoor/attack_alien(mob/user)
add_fingerprint(user)
if(welded)
- to_chat(user, "[src] refuses to budge!")
+ to_chat(user, span_warning("[src] refuses to budge!"))
return
if(user.a_intent == INTENT_HARM)
return ..()
@@ -326,7 +326,7 @@
if(M.stat == CONSCIOUS && M.pulling && M.pulling.loc == T2 && !M.pulling.anchored && M.pulling.move_resist <= M.move_force)
var/mob/living/M2 = M.pulling
if(!istype(M2) || !M2.buckled || !M2.buckled.buckle_prevents_pull)
- to_chat(M, "You pull [M.pulling] through [src] right as it closes")
+ to_chat(M, span_notice("You pull [M.pulling] through [src] right as it closes"))
M.pulling.forceMove(T1)
M.start_pulling(M2)
@@ -334,7 +334,7 @@
if(M.stat == CONSCIOUS && M.pulling && M.pulling.loc == T1 && !M.pulling.anchored && M.pulling.move_resist <= M.move_force)
var/mob/living/M2 = M.pulling
if(!istype(M2) || !M2.buckled || !M2.buckled.buckle_prevents_pull)
- to_chat(M, "You pull [M.pulling] through [src] right as it closes")
+ to_chat(M, span_notice("You pull [M.pulling] through [src] right as it closes"))
M.pulling.forceMove(T2)
M.start_pulling(M2)
. = ..()
@@ -351,7 +351,7 @@
var/status1 = check_door_side(T)
var/status2 = check_door_side(T2)
if((status1 == 1 && status2 == -1) || (status1 == -1 && status2 == 1))
- to_chat(user, "Access denied. Try closing another firedoor to minimize decompression, or using a crowbar.")
+ to_chat(user, span_warning("Access denied. Try closing another firedoor to minimize decompression, or using a crowbar."))
return FALSE
return TRUE
@@ -460,15 +460,15 @@
. = ..()
switch(constructionStep)
if(CONSTRUCTION_PANEL_OPEN)
- . += "It is unbolted from the floor. A small loosely connected metal plate is covering the wires."
+ . += span_notice("It is unbolted from the floor. A small loosely connected metal plate is covering the wires.")
if(!reinforced)
- . += "It could be reinforced with plasteel."
+ . += span_notice("It could be reinforced with plasteel.")
if(CONSTRUCTION_WIRES_EXPOSED)
- . += "The maintenance plate has been pried away, and wires are trailing."
+ . += span_notice("The maintenance plate has been pried away, and wires are trailing.")
if(CONSTRUCTION_GUTTED)
- . += "The maintenance panel is missing wires and the circuit board is loosely connected."
+ . += span_notice("The maintenance panel is missing wires and the circuit board is loosely connected.")
if(CONSTRUCTION_NOCIRCUIT)
- . += "There are no firelock electronics in the frame. The frame could be cut apart."
+ . += span_notice("There are no firelock electronics in the frame. The frame could be cut apart.")
/obj/structure/firelock_frame/update_icon()
..()
@@ -481,7 +481,7 @@
/obj/structure/firelock_frame/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
if(passed_mode == RCD_DECONSTRUCT)
- to_chat(user, "You deconstruct [src].")
+ to_chat(user, span_notice("You deconstruct [src]."))
qdel(src)
return TRUE
return FALSE
@@ -491,31 +491,31 @@
if(CONSTRUCTION_PANEL_OPEN)
if(C.tool_behaviour == TOOL_CROWBAR)
C.play_tool_sound(src)
- user.visible_message("[user] starts prying something out from [src]...", \
- "You begin prying out the wire cover...")
+ user.visible_message(span_notice("[user] starts prying something out from [src]..."), \
+ span_notice("You begin prying out the wire cover..."))
if(!C.use_tool(src, user, 50))
return
if(constructionStep != CONSTRUCTION_PANEL_OPEN)
return
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
- user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \
- "You remove the cover plate from [src], exposing the wires.")
+ user.visible_message(span_notice("[user] pries out a metal plate from [src], exposing the wires."), \
+ span_notice("You remove the cover plate from [src], exposing the wires."))
constructionStep = CONSTRUCTION_WIRES_EXPOSED
update_icon()
return
if(C.tool_behaviour == TOOL_WRENCH)
if(locate(/obj/machinery/door/firedoor) in get_turf(src))
- to_chat(user, "There's already a firelock there.")
+ to_chat(user, span_warning("There's already a firelock there."))
return
C.play_tool_sound(src)
- user.visible_message("[user] starts bolting down [src]...", \
- "You begin bolting [src]...")
+ user.visible_message(span_notice("[user] starts bolting down [src]..."), \
+ span_notice("You begin bolting [src]..."))
if(!C.use_tool(src, user, 30))
return
if(locate(/obj/machinery/door/firedoor) in get_turf(src))
return
- user.visible_message("[user] finishes the firelock.", \
- "You finish the firelock.")
+ user.visible_message(span_notice("[user] finishes the firelock."), \
+ span_notice("You finish the firelock."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
if(border)
new /obj/machinery/door/firedoor/border_only(get_turf(src), dir)
@@ -528,22 +528,22 @@
if(istype(C, /obj/item/stack/sheet/plasteel))
var/obj/item/stack/sheet/plasteel/P = C
if(border)
- to_chat(user, "[src] cannot be reinforced.")
+ to_chat(user, span_warning("[src] cannot be reinforced."))
return
if(reinforced)
- to_chat(user, "[src] is already reinforced.")
+ to_chat(user, span_warning("[src] is already reinforced."))
return
if(P.get_amount() < 2)
- to_chat(user, "You need more plasteel to reinforce [src].")
+ to_chat(user, span_warning("You need more plasteel to reinforce [src]."))
return
- user.visible_message("[user] begins reinforcing [src]...", \
- "You begin reinforcing [src]...")
+ user.visible_message(span_notice("[user] begins reinforcing [src]..."), \
+ span_notice("You begin reinforcing [src]..."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
if(do_after(user, 60, target = src))
if(constructionStep != CONSTRUCTION_PANEL_OPEN || reinforced || P.get_amount() < 2 || !P)
return
- user.visible_message("[user] reinforces [src].", \
- "You reinforce [src].")
+ user.visible_message(span_notice("[user] reinforces [src]."), \
+ span_notice("You reinforce [src]."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
P.use(2)
reinforced = 1
@@ -552,42 +552,42 @@
if(CONSTRUCTION_WIRES_EXPOSED)
if(C.tool_behaviour == TOOL_WIRECUTTER)
C.play_tool_sound(src)
- user.visible_message("[user] starts cutting the wires from [src]...", \
- "You begin removing [src]'s wires...")
+ user.visible_message(span_notice("[user] starts cutting the wires from [src]..."), \
+ span_notice("You begin removing [src]'s wires..."))
if(!C.use_tool(src, user, 60))
return
if(constructionStep != CONSTRUCTION_WIRES_EXPOSED)
return
- user.visible_message("[user] removes the wires from [src].", \
- "You remove the wiring from [src], exposing the circuit board.")
+ user.visible_message(span_notice("[user] removes the wires from [src]."), \
+ span_notice("You remove the wiring from [src], exposing the circuit board."))
new/obj/item/stack/cable_coil(get_turf(src), 5)
constructionStep = CONSTRUCTION_GUTTED
update_icon()
return
if(C.tool_behaviour == TOOL_CROWBAR)
C.play_tool_sound(src)
- user.visible_message("[user] starts prying a metal plate into [src]...", \
- "You begin prying the cover plate back onto [src]...")
+ user.visible_message(span_notice("[user] starts prying a metal plate into [src]..."), \
+ span_notice("You begin prying the cover plate back onto [src]..."))
if(!C.use_tool(src, user, 80))
return
if(constructionStep != CONSTRUCTION_WIRES_EXPOSED)
return
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
- user.visible_message("[user] pries the metal plate into [src].", \
- "You pry [src]'s cover plate into place, hiding the wires.")
+ user.visible_message(span_notice("[user] pries the metal plate into [src]."), \
+ span_notice("You pry [src]'s cover plate into place, hiding the wires."))
constructionStep = CONSTRUCTION_PANEL_OPEN
update_icon()
return
if(CONSTRUCTION_GUTTED)
if(C.tool_behaviour == TOOL_CROWBAR)
- user.visible_message("[user] begins removing the circuit board from [src]...", \
- "You begin prying out the circuit board from [src]...")
+ user.visible_message(span_notice("[user] begins removing the circuit board from [src]..."), \
+ span_notice("You begin prying out the circuit board from [src]..."))
if(!C.use_tool(src, user, 50, volume=50))
return
if(constructionStep != CONSTRUCTION_GUTTED)
return
- user.visible_message("[user] removes [src]'s circuit board.", \
- "You remove the circuit board from [src].")
+ user.visible_message(span_notice("[user] removes [src]'s circuit board."), \
+ span_notice("You remove the circuit board from [src]."))
new /obj/item/electronics/firelock(drop_location())
constructionStep = CONSTRUCTION_NOCIRCUIT
update_icon()
@@ -595,16 +595,16 @@
if(istype(C, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/B = C
if(B.get_amount() < 5)
- to_chat(user, "You need more wires to add wiring to [src].")
+ to_chat(user, span_warning("You need more wires to add wiring to [src]."))
return
- user.visible_message("[user] begins wiring [src]...", \
- "You begin adding wires to [src]...")
+ user.visible_message(span_notice("[user] begins wiring [src]..."), \
+ span_notice("You begin adding wires to [src]..."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
if(do_after(user, 60, target = src))
if(constructionStep != CONSTRUCTION_GUTTED || B.get_amount() < 5 || !B)
return
- user.visible_message("[user] adds wires to [src].", \
- "You wire [src].")
+ user.visible_message(span_notice("[user] adds wires to [src]."), \
+ span_notice("You wire [src]."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
B.use(5)
constructionStep = CONSTRUCTION_WIRES_EXPOSED
@@ -614,14 +614,14 @@
if(C.tool_behaviour == TOOL_WELDER)
if(!C.tool_start_check(user, amount=1))
return
- user.visible_message("[user] begins cutting apart [src]'s frame...", \
- "You begin slicing [src] apart...")
+ user.visible_message(span_notice("[user] begins cutting apart [src]'s frame..."), \
+ span_notice("You begin slicing [src] apart..."))
if(C.use_tool(src, user, 40, volume=50, amount=1))
if(constructionStep != CONSTRUCTION_NOCIRCUIT)
return
- user.visible_message("[user] cuts apart [src]!", \
- "You cut [src] into metal.")
+ user.visible_message(span_notice("[user] cuts apart [src]!"), \
+ span_notice("You cut [src] into metal."))
var/turf/T = get_turf(src)
new /obj/item/stack/sheet/metal(T, 3)
if(reinforced)
@@ -629,16 +629,16 @@
qdel(src)
return
if(istype(C, /obj/item/electronics/firelock))
- user.visible_message("[user] starts adding [C] to [src]...", \
- "You begin adding a circuit board to [src]...")
+ user.visible_message(span_notice("[user] starts adding [C] to [src]..."), \
+ span_notice("You begin adding a circuit board to [src]..."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
if(!do_after(user, 40, target = src))
return
if(constructionStep != CONSTRUCTION_NOCIRCUIT)
return
qdel(C)
- user.visible_message("[user] adds a circuit to [src].", \
- "You insert and secure [C].")
+ user.visible_message(span_notice("[user] adds a circuit to [src]."), \
+ span_notice("You insert and secure [C]."))
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
constructionStep = CONSTRUCTION_GUTTED
update_icon()
@@ -647,8 +647,8 @@
var/obj/item/electroadaptive_pseudocircuit/P = C
if(!P.adapt_circuit(user, 30))
return
- user.visible_message("[user] fabricates a circuit and places it into [src].", \
- "You adapt a firelock circuit and slot it into the assembly.")
+ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
+ span_notice("You adapt a firelock circuit and slot it into the assembly."))
constructionStep = CONSTRUCTION_GUTTED
update_icon()
return
@@ -662,8 +662,8 @@
/obj/structure/firelock_frame/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
if(RCD_UPGRADE_SIMPLE_CIRCUITS)
- user.visible_message("[user] fabricates a circuit and places it into [src].", \
- "You adapt a firelock circuit and slot it into the assembly.")
+ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
+ span_notice("You adapt a firelock circuit and slot it into the assembly."))
constructionStep = CONSTRUCTION_GUTTED
update_icon()
return TRUE
diff --git a/code/game/machinery/doors/ministile.dm b/code/game/machinery/doors/ministile.dm
new file mode 100644
index 000000000000..50ab911a34e8
--- /dev/null
+++ b/code/game/machinery/doors/ministile.dm
@@ -0,0 +1,48 @@
+/obj/machinery/ministile
+ name = "ministile"
+ desc = "A mechanical door that permits one-way access to an area."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "ministile_map"
+ power_channel = ENVIRON
+ density = TRUE
+ obj_integrity = 150
+ max_integrity = 150
+ //Smaller turnstile easier to smash
+ armor = list("melee" = 30, "bullet" = 20, "laser" = 0, "energy" = 60, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50)
+ anchored = TRUE
+ use_power = FALSE
+ idle_power_usage = 2
+ resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ layer = OPEN_DOOR_LAYER
+ climbable = TRUE
+
+/obj/machinery/ministile/hop
+ name = "HOP line turnstile"
+ req_one_access = list(ACCESS_HEADS)
+
+/obj/machinery/ministile/Initialize()
+ . = ..()
+ icon_state = "ministile"
+
+/obj/machinery/ministile/CanAtmosPass(turf/T)
+ return TRUE
+
+/obj/machinery/ministile/Cross(atom/movable/mover)
+ . = ..()
+ if(istype(mover) && (mover.pass_flags & PASSGLASS))
+ return TRUE
+ if(!isliving(mover))
+ return TRUE
+ var/allowed = allowed(mover)
+ //Sec can drag you out unceremoniously.
+ if(!allowed && mover.pulledby)
+ allowed = allowed(mover.pulledby)
+
+ if(get_dir(loc, mover.loc) == dir || allowed || mover==machineclimber) //Make sure looking at appropriate border, loc is first so the turnstyle faces the mover
+ flick("ministile_operate", src)
+ playsound(src,'sound/items/ratchet.ogg',50,0,3)
+ return TRUE
+ else
+ flick("ministile_deny", src)
+ playsound(src,'sound/machines/deniedbeep.ogg',50,0,3)
+ return FALSE
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index b7b028284bb9..6678e30019fa 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -105,22 +105,22 @@
/obj/machinery/door/poddoor/attackby(obj/item/W, mob/user, params)
. = ..()
if(special && W.tool_behaviour == TOOL_SCREWDRIVER) // No Cheesing
- to_chat(user, "This door appears to have a different screw.")
+ to_chat(user, span_warning("This door appears to have a different screw."))
return
if(W.tool_behaviour == TOOL_SCREWDRIVER)
if(density)
- to_chat(user, "You need to open [src] before opening its maintenance panel.")
+ to_chat(user, span_warning("You need to open [src] before opening its maintenance panel."))
return
else if(default_deconstruction_screwdriver(user, icon_state, icon_state, W))
- to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].")
+ to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src]."))
return TRUE
if(panel_open)
if(W.tool_behaviour == TOOL_MULTITOOL && constructionstate == INTACT)
if(id != null)
- to_chat(user, "This door is already linked. Unlink it first!")
+ to_chat(user, span_warning("This door is already linked. Unlink it first!"))
return
if(!multitool_check_buffer(user, W))
@@ -128,34 +128,34 @@
var/obj/item/multitool/P = W
id = P.buffer
- to_chat(user, "You link the button to the [src].")
+ to_chat(user, span_notice("You link the button to the [src]."))
return
if(W.tool_behaviour == TOOL_WIRECUTTER)
if(id != null)
- to_chat(user, "You start to unlink the door.")
+ to_chat(user, span_notice("You start to unlink the door."))
if(do_after(user, 10 SECONDS, target = src))
- to_chat(user, "You unlink the door.")
+ to_chat(user, span_notice("You unlink the door."))
id = null
else
- to_chat(user, "This door is already unlinked.")
+ to_chat(user, span_warning("This door is already unlinked."))
return
if(W.tool_behaviour == TOOL_WELDER && constructionstate == INTACT)
- to_chat(user, "You start to remove the outer plasteel cover.")
+ to_chat(user, span_notice("You start to remove the outer plasteel cover."))
playsound(src.loc, 'sound/items/welder.ogg', 50, 1)
if(do_after(user, 10 SECONDS, target = src))
- to_chat(user, "You remove the outer plasteel cover.")
+ to_chat(user, span_notice("You remove the outer plasteel cover."))
constructionstate = CUT_COVER
id = null // Effectivley breaks the door
new /obj/item/stack/sheet/plasteel(loc, 5)
return
else
- to_chat(user, "The cover is already off.")
+ to_chat(user, span_warning("The cover is already off."))
if(W.tool_behaviour == TOOL_CROWBAR && constructionstate == CUT_COVER)
- to_chat(user, "You start to remove all of the internal components")
+ to_chat(user, span_notice("You start to remove all of the internal components"))
if(do_after(user, 15 SECONDS, target = src))
if(istype(src, /obj/machinery/door/poddoor/shutters)) // Simplified Code
new /obj/item/stack/sheet/plasteel(loc, 5)
@@ -171,7 +171,7 @@
if(istype(W, /obj/item/stack/sheet/plasteel))
var/obj/item/stack/sheet/plasteel/P = W
if(P.use(5))
- to_chat(user, "You need 5 plasteel sheets to put the plating back on.")
+ to_chat(user, span_warning("You need 5 plasteel sheets to put the plating back on."))
return
constructionstate = INTACT
@@ -180,5 +180,5 @@
/obj/machinery/door/poddoor/examine(mob/user)
. = ..()
if(panel_open)
- . += "The maintenance panel is [panel_open ? "opened" : "closed"]."
+ . += "Its access panel is smoking slightly."
+ desc += "
[span_warning("Its access panel is smoking slightly.")]"
open(2)
/obj/machinery/door/window/attackby(obj/item/I, mob/living/user, params)
@@ -235,17 +235,17 @@
if(!(flags_1&NODECONSTRUCT_1))
if(I.tool_behaviour == TOOL_SCREWDRIVER)
if(density || operating)
- to_chat(user, "You need to open the door to access the maintenance panel!")
+ to_chat(user, span_warning("You need to open the door to access the maintenance panel!"))
return
I.play_tool_sound(src)
panel_open = !panel_open
- to_chat(user, "You [panel_open ? "open":"close"] the maintenance panel of the [name].")
+ to_chat(user, span_notice("You [panel_open ? "open":"close"] the maintenance panel of the [name]."))
return
if(I.tool_behaviour == TOOL_CROWBAR)
if(panel_open && !density && !operating)
user.visible_message("[user] removes the electronics from the [name].", \
- "You start to remove electronics from the [name]...")
+ span_notice("You start to remove electronics from the [name]..."))
if(I.use_tool(src, user, 40, volume=50))
if(panel_open && !density && !operating && loc)
var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(loc)
@@ -268,11 +268,11 @@
WA.created_name = name
if(obj_flags & EMAGGED)
- to_chat(user, "You discard the damaged electronics.")
+ to_chat(user, span_warning("You discard the damaged electronics."))
qdel(src)
return
- to_chat(user, "You remove the airlock electronics.")
+ to_chat(user, span_notice("You remove the airlock electronics."))
var/obj/item/electronics/airlock/ae
if(!electronics)
@@ -305,7 +305,7 @@
else
close(2)
else
- to_chat(user, "The door's motors resist your efforts to force it!")
+ to_chat(user, span_warning("The door's motors resist your efforts to force it!"))
/obj/machinery/door/window/do_animate(animation)
switch(animation)
@@ -355,7 +355,7 @@
/obj/machinery/door/window/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
if(RCD_DECONSTRUCT)
- to_chat(user, "You deconstruct the windoor.")
+ to_chat(user, span_notice("You deconstruct the windoor."))
qdel(src)
return TRUE
return FALSE
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 33a5d3b9980a..86d8e41a9d61 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -21,7 +21,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
/obj/machinery/doppler_array/examine(mob/user)
..()
- to_chat(user, "Its dish is facing to the [dir2text(dir)].")
+ to_chat(user, span_notice("Its dish is facing to the [dir2text(dir)]."))
/obj/machinery/doppler_array/process()
return PROCESS_KILL
@@ -31,17 +31,17 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
if(!anchored && !isinspace())
anchored = TRUE
power_change()
- to_chat(user, "You fasten [src].")
+ to_chat(user, span_notice("You fasten [src]."))
else if(anchored)
anchored = FALSE
power_change()
- to_chat(user, "You unfasten [src].")
+ to_chat(user, span_notice("You unfasten [src]."))
I.play_tool_sound(src)
else
return ..()
/obj/machinery/doppler_array/proc/rot_message(mob/user)
- to_chat(user, "You adjust [src]'s dish to face to the [dir2text(dir)].")
+ to_chat(user, span_notice("You adjust [src]'s dish to face to the [dir2text(dir)]."))
playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
/obj/machinery/doppler_array/proc/sense_explosion(datum/source, turf/epicenter, devastation_range, heavy_impact_range, light_impact_range,
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index f31b8fc73104..75cedc1c1bba 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -109,7 +109,7 @@
/obj/machinery/droneDispenser/examine(mob/user)
. = ..()
if((mode == DRONE_RECHARGING) && !stat && recharging_text)
- . += "[recharging_text]"
+ . += span_warning("[recharging_text]")
/obj/machinery/droneDispenser/process()
..()
@@ -130,7 +130,7 @@
if(maximum_idle && (count_shells() >= maximum_idle))
return // then do nothing; check again next tick
if(begin_create_message)
- visible_message("[src] [begin_create_message]")
+ visible_message(span_notice("[src] [begin_create_message]"))
if(work_sound)
playsound(src, work_sound, 50, 1)
mode = DRONE_PRODUCTION
@@ -148,7 +148,7 @@
if(create_sound)
playsound(src, create_sound, 50, 1)
if(end_create_message)
- visible_message("[src] [end_create_message]")
+ visible_message(span_notice("[src] [end_create_message]"))
mode = DRONE_RECHARGING
timer = world.time + cooldownTime
@@ -158,7 +158,7 @@
if(recharge_sound)
playsound(src, recharge_sound, 50, 1)
if(recharge_message)
- visible_message("[src] [recharge_message]")
+ visible_message(span_notice("[src] [recharge_message]"))
mode = DRONE_READY
update_icon()
@@ -184,26 +184,26 @@
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.retrieve_all()
I.play_tool_sound(src)
- to_chat(user, "You retrieve the materials from [src].")
+ to_chat(user, span_notice("You retrieve the materials from [src]."))
else if(I.tool_behaviour == TOOL_WELDER)
if(!(stat & BROKEN))
- to_chat(user, "[src] doesn't need repairs.")
+ to_chat(user, span_warning("[src] doesn't need repairs."))
return
if(!I.tool_start_check(user, amount=1))
return
user.visible_message(
- "[user] begins patching up [src] with [I].",
- "You begin restoring the damage to [src]...")
+ span_notice("[user] begins patching up [src] with [I]."),
+ span_notice("You begin restoring the damage to [src]..."))
if(!I.use_tool(src, user, 40, volume=50, amount=1))
return
user.visible_message(
- "[user] fixes [src]!",
- "You restore [src] to operation.")
+ span_notice("[user] fixes [src]!"),
+ span_notice("You restore [src] to operation."))
stat &= ~BROKEN
obj_integrity = max_integrity
@@ -216,7 +216,7 @@
if(!.)
return
if(break_message)
- audible_message("[src] [break_message]")
+ audible_message(span_warning("[src] [break_message]"))
if(break_sound)
playsound(src, break_sound, 50, TRUE)
diff --git a/code/game/machinery/electrolyzer.dm b/code/game/machinery/electrolyzer.dm
index 46f754513013..d18fba7d8929 100644
--- a/code/game/machinery/electrolyzer.dm
+++ b/code/game/machinery/electrolyzer.dm
@@ -118,23 +118,23 @@
return
if(istype(I, /obj/item/stock_parts/cell))
if(!panel_open)
- to_chat(user, "The hatch must be open to insert a power cell!")
+ to_chat(user, span_warning("The hatch must be open to insert a power cell!"))
return
if(cell)
- to_chat(user, "There is already a power cell inside!")
+ to_chat(user, span_warning("There is already a power cell inside!"))
return
if(!user.transferItemToLoc(I, src))
return
cell = I
I.add_fingerprint(usr)
- user.visible_message("\The [user] inserts a power cell into \the [src].", "You insert the power cell into \the [src].")
+ user.visible_message(span_notice("\The [user] inserts a power cell into \the [src]."), span_notice("You insert the power cell into \the [src]."))
SStgui.update_uis(src)
return
if(I.tool_behaviour == TOOL_SCREWDRIVER)
panel_open = !panel_open
- user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", "You [panel_open ? "open" : "close"] the hatch on \the [src].")
+ user.visible_message(span_notice("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src]."), span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src]."))
update_icon()
return
if(default_deconstruction_crowbar(I))
@@ -167,7 +167,7 @@
if("power")
on = !on
mode = ELECTROLYZER_MODE_STANDBY
- usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", "You switch [on ? "on" : "off"] \the [src].")
+ usr.visible_message(span_notice("[usr] switches [on ? "on" : "off"] \the [src]."), span_notice("You switch [on ? "on" : "off"] \the [src]."))
update_icon()
if (on)
START_PROCESSING(SSmachines, src)
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index afb5f188b7f6..f4ec0aa85a09 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -32,7 +32,7 @@
req_access = list()
req_one_access = list()
playsound(src, "sparks", 100, 1)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
/obj/machinery/doorButtons/proc/removeMe()
return
@@ -61,7 +61,7 @@
if(busy)
return
if(!allowed(user))
- to_chat(user, "Access denied.")
+ to_chat(user, span_warning("Access denied."))
return
if(controller && !controller.busy && door)
if(controller.stat & NOPOWER)
@@ -129,7 +129,7 @@
if(busy)
return
if(!allowed(usr))
- to_chat(usr, "Access denied.")
+ to_chat(usr, span_warning("Access denied."))
return
switch(href_list["command"])
if("close_exterior")
diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm
index 9f1ebe67a9c2..2d4ddc48a190 100644
--- a/code/game/machinery/embedded_controller/airlock_controller.dm
+++ b/code/game/machinery/embedded_controller/airlock_controller.dm
@@ -285,20 +285,20 @@
if(AIRLOCK_STATE_INOPEN)
state_options = {"Close Interior Airlock
Cycle to Exterior Airlock
"}
- current_status = "Interior Airlock Open
Chamber Pressurized"
+ current_status = "Interior Airlock Open
[span_good("Chamber Pressurized")]"
if(AIRLOCK_STATE_PRESSURIZE)
state_options = "Abort Cycling
"
- current_status = "Cycling to Interior Airlock
Chamber Pressurizing"
+ current_status = "Cycling to Interior Airlock
[span_average("Chamber Pressurizing")]"
if(AIRLOCK_STATE_CLOSED)
state_options = {"Open Interior Airlock
Open Exterior Airlock
"}
if(AIRLOCK_STATE_DEPRESSURIZE)
state_options = "Abort Cycling
"
- current_status = "Cycling to Exterior Airlock
Chamber Depressurizing"
+ current_status = "Cycling to Exterior Airlock
[span_average("Chamber Depressurizing")]"
if(AIRLOCK_STATE_OUTOPEN)
state_options = {"Cycle to Interior Airlock
Close Exterior Airlock
"}
- current_status = "Exterior Airlock Open
Chamber Depressurized"
+ current_status = "Exterior Airlock Open
[span_bad("Chamber Depressurized")]"
var/output = {"Airlock Status
diff --git a/code/game/machinery/exp_cloner.dm b/code/game/machinery/exp_cloner.dm
index 5cdd5aa5f527..416c43047ac2 100644
--- a/code/game/machinery/exp_cloner.dm
+++ b/code/game/machinery/exp_cloner.dm
@@ -57,11 +57,11 @@
if(grab_ghost_when == CLONER_FRESH_CLONE)
H.grab_ghost()
- to_chat(H, "
Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?")
+ to_chat(H, span_notice("
Consciousness slowly creeps over you as your body regenerates.So this is what cloning feels like?"))
if(grab_ghost_when == CLONER_MATURE_CLONE)
H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost
- to_chat(H.get_ghost(TRUE), "
Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.")
+ to_chat(H.get_ghost(TRUE), span_notice("Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete."))
if(H)
H.faction |= factions
@@ -212,7 +212,7 @@
dat += "
Clone"
dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
else
- dat += "
Clone"
+ dat += span_linkOff("Clone")
var/datum/browser/popup = new(user, "cloning", "Prototype Cloning System Control")
popup.set_content(dat)
diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm
index e72929885da5..b69f50b6c10d 100644
--- a/code/game/machinery/fat_sucker.dm
+++ b/code/game/machinery/fat_sucker.dm
@@ -42,13 +42,13 @@
/obj/machinery/fat_sucker/examine(mob/user)
. = ..()
- . += {"
Alt-Click to toggle the safety hatch.
-
Removing [bite_size] nutritional units per operation.
-
Requires [nutrient_to_meat] nutritional units per meat slab."}
+ . += {"[span_notice("Alt-Click to toggle the safety hatch.")]
+ [span_notice("Removing [bite_size] nutritional units per operation.")]
+ [span_notice("Requires [nutrient_to_meat] nutritional units per meat slab.")]"}
/obj/machinery/fat_sucker/close_machine(mob/user)
if(panel_open)
- to_chat(user, "
You need to close the maintenance hatch first!")
+ to_chat(user, span_warning("You need to close the maintenance hatch first!"))
return
..()
playsound(src, 'sound/machines/click.ogg', 50)
@@ -57,7 +57,7 @@
occupant.forceMove(drop_location())
occupant = null
return
- to_chat(occupant, "
You enter [src]")
+ to_chat(occupant, span_notice("You enter [src]"))
addtimer(CALLBACK(src, .proc/start_extracting), 20, TIMER_OVERRIDE|TIMER_UNIQUE)
update_icon()
@@ -70,18 +70,18 @@
/obj/machinery/fat_sucker/container_resist(mob/living/user)
if(!free_exit || state_open)
- to_chat(user, "
The emergency release is not responding! You start pushing against the hull!")
+ to_chat(user, span_notice("The emergency release is not responding! You start pushing against the hull!"))
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- user.visible_message("
You see [user] kicking against the door of [src]!", \
- "
You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \
- "
You hear a metallic creaking from [src].")
+ user.visible_message(span_notice("You see [user] kicking against the door of [src]!"), \
+ span_notice("You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)"), \
+ span_italics("You hear a metallic creaking from [src]."))
if(do_after(user, breakout_time, target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
return
free_exit = TRUE
- user.visible_message("
[user] successfully broke out of [src]!", \
- "
You successfully break out of [src]!")
+ user.visible_message(span_warning("[user] successfully broke out of [src]!"), \
+ span_notice("You successfully break out of [src]!"))
open_machine()
return
open_machine()
@@ -92,19 +92,19 @@
else if(!processing || free_exit)
open_machine()
else
- to_chat(user, "
The safety hatch has been disabled!")
+ to_chat(user, span_warning("The safety hatch has been disabled!"))
/obj/machinery/fat_sucker/AltClick(mob/living/user)
if(!user.canUseTopic(src, BE_CLOSE))
return
if(user == occupant)
- to_chat(user, "
You can't reach the controls from inside!")
+ to_chat(user, span_warning("You can't reach the controls from inside!"))
return
if(!(obj_flags & EMAGGED) && !allowed(user))
- to_chat(user, "
You lack the required access.")
+ to_chat(user, span_warning("You lack the required access."))
return
free_exit = !free_exit
- to_chat(user, "
Safety hatch [free_exit ? "unlocked" : "locked"].")
+ to_chat(user, span_notice("Safety hatch [free_exit ? "unlocked" : "locked"]."))
/obj/machinery/fat_sucker/update_icon()
overlays.Cut()
@@ -189,10 +189,10 @@
if(..())
return
if(occupant)
- to_chat(user, "
[src] is currently occupied!")
+ to_chat(user, span_warning("[src] is currently occupied!"))
return
if(state_open)
- to_chat(user, "
[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")
+ to_chat(user, span_warning("[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!"))
return
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
update_icon()
@@ -208,5 +208,5 @@
return
start_at = 100
stop_at = 0
- to_chat(user, "
You remove the access restrictions and lower the automatic ejection threshold!")
+ to_chat(user, span_notice("You remove the access restrictions and lower the automatic ejection threshold!"))
obj_flags |= EMAGGED
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 475b421c1143..9a7ec3f04e5c 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -111,8 +111,8 @@
obj_flags |= EMAGGED
update_icon()
if(user)
- user.visible_message("
Sparks fly out of [src]!",
- "
You emag [src], disabling its thermal sensors.")
+ user.visible_message(span_warning("Sparks fly out of [src]!"),
+ span_notice("You emag [src], disabling its thermal sensors."))
playsound(src, "sparks", 50, 1)
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
@@ -160,7 +160,7 @@
if(W.tool_behaviour == TOOL_SCREWDRIVER && buildstage == 2)
W.play_tool_sound(src)
panel_open = !panel_open
- to_chat(user, "
The wires have been [panel_open ? "exposed" : "unexposed"].")
+ to_chat(user, span_notice("The wires have been [panel_open ? "exposed" : "unexposed"]."))
update_icon()
return
@@ -171,12 +171,12 @@
if(!W.tool_start_check(user, amount=0))
return
- to_chat(user, "
You begin repairing [src]...")
+ to_chat(user, span_notice("You begin repairing [src]..."))
if(W.use_tool(src, user, 40, volume=50))
obj_integrity = max_integrity
- to_chat(user, "
You repair [src].")
+ to_chat(user, span_notice("You repair [src]."))
else
- to_chat(user, "
[src] is already in good condition!")
+ to_chat(user, span_warning("[src] is already in good condition!"))
return
switch(buildstage)
@@ -184,16 +184,16 @@
if(W.tool_behaviour == TOOL_MULTITOOL)
detecting = !detecting
if (src.detecting)
- user.visible_message("[user] has reconnected [src]'s detecting unit!", "
You reconnect [src]'s detecting unit.")
+ user.visible_message("[user] has reconnected [src]'s detecting unit!", span_notice("You reconnect [src]'s detecting unit."))
else
- user.visible_message("[user] has disconnected [src]'s detecting unit!", "
You disconnect [src]'s detecting unit.")
+ user.visible_message("[user] has disconnected [src]'s detecting unit!", span_notice("You disconnect [src]'s detecting unit."))
return
else if(W.tool_behaviour == TOOL_WIRECUTTER)
buildstage = 1
W.play_tool_sound(src)
new /obj/item/stack/cable_coil(user.loc, 5)
- to_chat(user, "
You cut the wires from \the [src].")
+ to_chat(user, span_notice("You cut the wires from \the [src]."))
update_icon()
return
@@ -208,31 +208,31 @@
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/coil = W
if(coil.get_amount() < 5)
- to_chat(user, "
You need more cable for this!")
+ to_chat(user, span_warning("You need more cable for this!"))
else
coil.use(5)
buildstage = 2
- to_chat(user, "
You wire \the [src].")
+ to_chat(user, span_notice("You wire \the [src]."))
update_icon()
return
else if(W.tool_behaviour == TOOL_CROWBAR)
user.visible_message("[user.name] removes the electronics from [src.name].", \
- "
You start prying out the circuit...")
+ span_notice("You start prying out the circuit..."))
if(W.use_tool(src, user, 20, volume=50))
if(buildstage == 1)
if(stat & BROKEN)
- to_chat(user, "
You remove the destroyed circuit.")
+ to_chat(user, span_notice("You remove the destroyed circuit."))
stat &= ~BROKEN
else
- to_chat(user, "
You pry out the circuit.")
+ to_chat(user, span_notice("You pry out the circuit."))
new /obj/item/electronics/firealarm(user.loc)
buildstage = 0
update_icon()
return
if(0)
if(istype(W, /obj/item/electronics/firealarm))
- to_chat(user, "
You insert the circuit.")
+ to_chat(user, span_notice("You insert the circuit."))
qdel(W)
buildstage = 1
update_icon()
@@ -242,15 +242,15 @@
var/obj/item/electroadaptive_pseudocircuit/P = W
if(!P.adapt_circuit(user, 15))
return
- user.visible_message("
[user] fabricates a circuit and places it into [src].", \
- "
You adapt a fire alarm circuit and slot it into the assembly.")
+ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
+ span_notice("You adapt a fire alarm circuit and slot it into the assembly."))
buildstage = 1
update_icon()
return
else if(W.tool_behaviour == TOOL_WRENCH)
user.visible_message("[user] removes the fire alarm assembly from the wall.", \
- "
You remove the fire alarm assembly from the wall.")
+ span_notice("You remove the fire alarm assembly from the wall."))
var/obj/item/wallframe/firealarm/frame = new /obj/item/wallframe/firealarm()
frame.forceMove(user.drop_location())
W.play_tool_sound(src)
@@ -268,8 +268,8 @@
/obj/machinery/firealarm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
if(RCD_UPGRADE_SIMPLE_CIRCUITS)
- user.visible_message("
[user] fabricates a circuit and places it into [src].", \
- "
You adapt a fire alarm circuit and slot it into the assembly.")
+ user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
+ span_notice("You adapt a fire alarm circuit and slot it into the assembly."))
buildstage = 1
update_icon()
return TRUE
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index a12e99f7220f..03fa24d167ac 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -57,9 +57,9 @@
add_fingerprint(user)
if (W.tool_behaviour == TOOL_WIRECUTTER)
if (bulb)
- user.visible_message("[user] begins to disconnect [src]'s flashbulb.", "
You begin to disconnect [src]'s flashbulb...")
+ user.visible_message("[user] begins to disconnect [src]'s flashbulb.", span_notice("You begin to disconnect [src]'s flashbulb..."))
if(W.use_tool(src, user, 30, volume=50) && bulb)
- user.visible_message("[user] has disconnected [src]'s flashbulb!", "
You disconnect [src]'s flashbulb.")
+ user.visible_message("[user] has disconnected [src]'s flashbulb!", span_notice("You disconnect [src]'s flashbulb."))
bulb.forceMove(loc)
bulb = null
power_change()
@@ -68,20 +68,20 @@
if (!bulb)
if(!user.transferItemToLoc(W, src))
return
- user.visible_message("[user] installs [W] into [src].", "
You install [W] into [src].")
+ user.visible_message("[user] installs [W] into [src].", span_notice("You install [W] into [src]."))
bulb = W
power_change()
else
- to_chat(user, "
A flashbulb is already installed in [src]!")
+ to_chat(user, span_warning("A flashbulb is already installed in [src]!"))
else if (W.tool_behaviour == TOOL_WRENCH)
if(!bulb)
- to_chat(user, "
You start unsecuring the flasher frame...")
+ to_chat(user, span_notice("You start unsecuring the flasher frame..."))
if(W.use_tool(src, user, 40, volume=50))
- to_chat(user, "
You unsecure the flasher frame.")
+ to_chat(user, span_notice("You unsecure the flasher frame."))
deconstruct(TRUE)
else
- to_chat(user, "
Remove a flashbulb from [src] first!")
+ to_chat(user, span_warning("Remove a flashbulb from [src] first!"))
else
return ..()
@@ -173,13 +173,13 @@
W.play_tool_sound(src, 100)
if (!anchored && !isinspace())
- to_chat(user, "
[src] is now secured.")
+ to_chat(user, span_notice("[src] is now secured."))
add_overlay("[base_state]-s")
setAnchored(TRUE)
power_change()
proximity_monitor.SetRange(range)
else
- to_chat(user, "
[src] can now be moved.")
+ to_chat(user, span_notice("[src] can now be moved."))
cut_overlays()
setAnchored(FALSE)
power_change()
@@ -198,7 +198,7 @@
/obj/item/wallframe/flasher/examine(mob/user)
. = ..()
- . += "
Its channel ID is '[id]'."
+ . += span_notice("Its channel ID is '[id]'.")
/obj/item/wallframe/flasher/after_attach(var/obj/O)
..()
diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm
index b31ecb1ea30a..428b2e6f4f09 100644
--- a/code/game/machinery/gulag_item_reclaimer.dm
+++ b/code/game/machinery/gulag_item_reclaimer.dm
@@ -35,10 +35,10 @@
if(!user.transferItemToLoc(I, src))
return
inserted_id = I
- to_chat(user, "
You insert [I].")
+ to_chat(user, span_notice("You insert [I]."))
return
else
- to_chat(user, "
There's an ID inserted already.")
+ to_chat(user, span_notice("There's an ID inserted already."))
return ..()
/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, datum/tgui/ui)
@@ -87,7 +87,7 @@
if("release_items")
var/mob/living/carbon/human/H = locate(params["mobref"]) in stored_items
if(H != usr && !allowed(usr))
- to_chat(usr, "
Access denied.")
+ to_chat(usr, span_warning("Access denied."))
return
drop_items(H)
. = TRUE
diff --git a/code/game/machinery/gulag_processor.dm b/code/game/machinery/gulag_processor.dm
index 26525321404f..05744acdb623 100644
--- a/code/game/machinery/gulag_processor.dm
+++ b/code/game/machinery/gulag_processor.dm
@@ -50,9 +50,9 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list(
/obj/machinery/gulag_processor/examine(mob/user)
. = ..()
if(id)
- . += "
\The [id] ID has been inserted."
+ . += span_notice("\The [id] ID has been inserted.")
else
- . += "
There is no ID inserted."
+ . += span_warning("There is no ID inserted.")
/obj/machinery/gulag_processor/AltClick(mob/living/user)
if(id)
@@ -86,10 +86,10 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list(
if(!id)
I.moveToNullspace()
id = I
- to_chat(user, "
You insert [I].")
+ to_chat(user, span_notice("You insert [I]."))
return
else
- to_chat(user, "
There's an ID inserted already.")
+ to_chat(user, span_notice("There's an ID inserted already."))
return ..()
@@ -120,7 +120,7 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list(
/obj/machinery/gulag_processor/proc/toggle_open()
if(panel_open)
- to_chat(usr, "
Close the maintenance panel first.")
+ to_chat(usr, span_notice("Close the maintenance panel first."))
return
if(state_open)
@@ -137,10 +137,10 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list(
handle_prisoner(id)
id = null
else
- visible_message("
No ID inserted. Processing aborted..")
+ visible_message(span_warning("No ID inserted. Processing aborted.."))
else
open_machine()
- visible_message("
No occupant detected. Processing aborted.")
+ visible_message(span_warning("No occupant detected. Processing aborted."))
return
// strips and stores all occupant's items
@@ -185,7 +185,7 @@ GLOBAL_VAR_INIT(gulag_required_items, typecacheof(list(
if(!prisoner.handcuffed)
prisoner.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(prisoner)
prisoner.update_handcuffed()
- visible_message("
Prisoner Processed.")
+ visible_message(span_warning("Prisoner Processed."))
/obj/item/circuitboard/machine/gulag_processor
name = "labor camp processor (Machine Board)"
diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm
index 9847fe27d833..514df7175a99 100644
--- a/code/game/machinery/gulag_teleporter.dm
+++ b/code/game/machinery/gulag_teleporter.dm
@@ -44,7 +44,7 @@ The console is located at computer/gulag_teleporter.dm
/obj/machinery/gulag_teleporter/interact(mob/user)
. = ..()
if(locked)
- to_chat(user, "
[src] is locked!")
+ to_chat(user, span_warning("[src] is locked!"))
return
toggle_open()
@@ -89,7 +89,7 @@ The console is located at computer/gulag_teleporter.dm
if(locked)
if(message_cooldown <= world.time)
message_cooldown = world.time + 50
- to_chat(user, "
[src]'s door won't budge!")
+ to_chat(user, span_warning("[src]'s door won't budge!"))
return
open_machine()
@@ -99,15 +99,15 @@ The console is located at computer/gulag_teleporter.dm
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- user.visible_message("
You see [user] kicking against the door of [src]!", \
- "
You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \
- "
You hear a metallic creaking from [src].")
+ user.visible_message(span_notice("You see [user] kicking against the door of [src]!"), \
+ span_notice("You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)"), \
+ span_italics("You hear a metallic creaking from [src]."))
if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
return
locked = FALSE
- user.visible_message("
[user] successfully broke out of [src]!", \
- "
You successfully break out of [src]!")
+ user.visible_message(span_warning("[user] successfully broke out of [src]!"), \
+ span_notice("You successfully break out of [src]!"))
open_machine()
/obj/machinery/gulag_teleporter/proc/locate_reclaimer()
@@ -117,7 +117,7 @@ The console is located at computer/gulag_teleporter.dm
/obj/machinery/gulag_teleporter/proc/toggle_open()
if(panel_open)
- to_chat(usr, "
Close the maintenance panel first.")
+ to_chat(usr, span_notice("Close the maintenance panel first."))
return
if(state_open)
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 36e6210c0540..78111c409f8e 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -85,7 +85,7 @@
var/mob/living/carbon/C = occupant
operation_order = reverseList(C.bodyparts) //Chest and head are first in bodyparts, so we invert it to make them suffer more
harvesting = TRUE
- visible_message("
The [name] begins warming up!")
+ visible_message(span_notice("The [name] begins warming up!"))
say("Initializing harvest protocol.")
update_icon(TRUE)
addtimer(CALLBACK(src, .proc/harvest), interval)
@@ -135,10 +135,10 @@
if(..())
return
if(occupant)
- to_chat(user, "
[src] is currently occupied!")
+ to_chat(user, span_warning("[src] is currently occupied!"))
return
if(state_open)
- to_chat(user, "
[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")
+ to_chat(user, span_warning("[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!"))
return
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
return
@@ -154,7 +154,7 @@
. = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR //We removed is_operational() here
if(.)
I.play_tool_sound(src, 50)
- visible_message("
[usr] pries open \the [src].", "
You pry open [src].")
+ visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open [src]."))
open_machine()
/obj/machinery/harvester/emag_act(mob/user)
@@ -162,15 +162,15 @@
return
obj_flags |= EMAGGED
allow_living = TRUE
- to_chat(user, "
You overload [src]'s lifesign scanners.")
+ to_chat(user, span_warning("You overload [src]'s lifesign scanners."))
/obj/machinery/harvester/container_resist(mob/living/user)
if(!harvesting)
- visible_message("
[occupant] emerges from [src]!",
- "
You climb out of [src]!")
+ visible_message(span_notice("[occupant] emerges from [src]!"),
+ span_notice("You climb out of [src]!"))
open_machine()
else
- to_chat(user,"
[src] is active and can't be opened!") //rip
+ to_chat(user,span_warning("[src] is active and can't be opened!")) //rip
/obj/machinery/harvester/Exited(atom/movable/user)
if (!state_open && user == occupant)
@@ -185,8 +185,8 @@
if(stat & BROKEN)
return
if(state_open)
- . += "
[src] must be closed before harvesting."
+ . += span_notice("[src] must be closed before harvesting.")
else if(!harvesting)
- . += "
Alt-click [src] to start harvesting."
+ . += span_notice("Alt-click [src] to start harvesting.")
if(in_range(user, src) || isobserver(user))
. += "
The status display reads: Harvest speed at [interval*0.1] seconds per organ."
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 560d98fc8568..2950672e6011 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -172,7 +172,7 @@ obj/machinery/holopad/secure/Initialize()
/obj/machinery/holopad/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
- . += "The status display reads: Current projection range: [holo_range] units."
+ . += span_notice("The status display reads: Current projection range: [holo_range] units.")
/obj/machinery/holopad/attackby(obj/item/P, mob/user, params)
if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P))
@@ -189,11 +189,11 @@ obj/machinery/holopad/secure/Initialize()
if(istype(P,/obj/item/disk/holodisk))
if(disk)
- to_chat(user,"There's already a disk inside [src]!")
+ to_chat(user,span_warning("There's already a disk inside [src]!"))
return
if (!user.transferItemToLoc(P,src))
return
- to_chat(user,"You insert [P] into [src].")
+ to_chat(user,span_notice("You insert [P] into [src]."))
disk = P
return
@@ -243,15 +243,15 @@ obj/machinery/holopad/secure/Initialize()
if("AIrequest")
if(last_request + 200 < world.time)
last_request = world.time
- to_chat(usr, "You requested an AI's presence.")
+ to_chat(usr, span_info("You requested an AI's presence."))
var/area/area = get_area(src)
for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs)
if(!AI.client)
continue
- to_chat(AI, "Your presence is requested at \the [area].")
+ to_chat(AI, span_info("Your presence is requested at \the [area]."))
return TRUE
else
- to_chat(usr, "A request for AI presence was already sent recently.")
+ to_chat(usr, span_info("A request for AI presence was already sent recently."))
return
if("holocall")
if(outgoing_call)
@@ -273,7 +273,7 @@ obj/machinery/holopad/secure/Initialize()
calling = TRUE
return TRUE
else
- to_chat(usr, "You must stand on the holopad to make a call!")
+ to_chat(usr, span_warning("You must stand on the holopad to make a call!"))
if("connectcall")
var/datum/holocall/call_to_connect = locate(params["holopad"]) in holo_calls
if(!QDELETED(call_to_connect))
@@ -389,7 +389,7 @@ obj/machinery/holopad/secure/Initialize()
if(is_operational() && (!AI || AI.eyeobj.loc == loc))//If the projector has power and client eye is on it
if (AI && istype(AI.current, /obj/machinery/holopad))
- to_chat(user, "ERROR: \black Image feed in progress.")
+ to_chat(user, "[span_danger("ERROR:")] \black Image feed in progress.")
return
var/obj/effect/overlay/holo_pad_hologram/Hologram = new(loc)//Spawn a blank effect at the location.
@@ -412,11 +412,11 @@ obj/machinery/holopad/secure/Initialize()
move_hologram()
set_holo(user, Hologram)
- visible_message("A holographic image of [user] flickers to life before your eyes!")
+ visible_message(span_notice("A holographic image of [user] flickers to life before your eyes!"))
return Hologram
else
- to_chat(user, "ERROR: Unable to project hologram.")
+ to_chat(user, "[span_danger("ERROR:")] Unable to project hologram.")
/*This is the proc for special two-way communication between AI and holopad/people talking near holopad.
For the other part of the code, check silicon say.dm. Particularly robot talk.*/
@@ -567,7 +567,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
Hologram.setAnchored(TRUE)//So space wind cannot drag it.
Hologram.name = "[record.caller_name] (Hologram)"//If someone decides to right click.
Hologram.set_light(2) //hologram lighting
- visible_message("A holographic image of [record.caller_name] flickers to life before your eyes!")
+ visible_message(span_notice("A holographic image of [record.caller_name] flickers to life before your eyes!"))
return Hologram
/obj/machinery/holopad/proc/replay_start()
@@ -695,4 +695,4 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
alpha = 100
#undef HOLOPAD_PASSIVE_POWER_USAGE
-#undef HOLOGRAM_POWER_USAGE
\ No newline at end of file
+#undef HOLOGRAM_POWER_USAGE
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index f2b36a3616d8..27045b3f472f 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -43,7 +43,7 @@
/obj/machinery/igniter/attackby(obj/item/O, mob/user, params)
if(default_deconstruction_screwdriver(user, icon_state, icon_state, O))
- to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].")
+ to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src]."))
return TRUE
if(default_deconstruction_crowbar(O))
return TRUE
@@ -51,7 +51,7 @@
/obj/machinery/igniter/examine(mob/user)
. = ..()
if(panel_open)
- . += "The maintenance panel is [panel_open ? "opened" : "closed"]."
+ . += "[user] has disabled \the [src]!", "You disable the connection to \the [src].")
+ user.visible_message(span_notice("[user] has disabled \the [src]!"), span_notice("You disable the connection to \the [src]."))
if (!src.disable)
- user.visible_message("[user] has reconnected \the [src]!", "You fix the connection to \the [src].")
+ user.visible_message(span_notice("[user] has reconnected \the [src]!"), span_notice("You fix the connection to \the [src]."))
update_icon()
else
return ..()
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index ac4330cf2495..9f1f6c0abd0c 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -72,36 +72,36 @@
return
if(attached)
- visible_message("[attached] is detached from [src].")
+ visible_message(span_warning("[attached] is detached from [src]."))
attached = null
update_icon()
return
if(!target.has_dna())
- to_chat(usr, "The drip beeps: Warning, incompatible creature!")
+ to_chat(usr, span_danger("The drip beeps: Warning, incompatible creature!"))
return
if(Adjacent(target) && usr.Adjacent(target))
if(beaker)
- usr.visible_message("[usr] attaches [src] to [target].", "You attach [src] to [target].")
+ usr.visible_message(span_warning("[usr] attaches [src] to [target]."), span_notice("You attach [src] to [target]."))
log_combat(usr, target, "attached", src, "containing: [beaker.name] - ([beaker.reagents.log_list()])")
add_fingerprint(usr)
attached = target
START_PROCESSING(SSmachines, src)
update_icon()
else
- to_chat(usr, "There's nothing attached to the IV drip!")
+ to_chat(usr, span_warning("There's nothing attached to the IV drip!"))
/obj/machinery/iv_drip/attackby(obj/item/W, mob/user, params)
if(is_type_in_typecache(W, drip_containers))
if(beaker)
- to_chat(user, "There is already a reagent container loaded!")
+ to_chat(user, span_warning("There is already a reagent container loaded!"))
return
if(!user.transferItemToLoc(W, src))
return
beaker = W
- to_chat(user, "You attach [W] to [src].")
+ to_chat(user, span_notice("You attach [W] to [src]."))
user.log_message("attached a [W] to [src] at [AREACOORD(src)] containing ([beaker.reagents.log_list()])", LOG_ATTACK)
add_fingerprint(user)
update_icon()
@@ -119,7 +119,7 @@
return PROCESS_KILL
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
- to_chat(attached, "The IV drip needle is ripped out of you!")
+ to_chat(attached, span_userdanger("The IV drip needle is ripped out of you!"))
attached.apply_damage(3, BRUTE, pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM))
attached = null
update_icon()
@@ -177,7 +177,7 @@
set src in view(1)
if(!isliving(usr))
- to_chat(usr, "You can't do that!")
+ to_chat(usr, span_warning("You can't do that!"))
return
if(usr.incapacitated())
@@ -193,7 +193,7 @@
set src in view(1)
if(!isliving(usr))
- to_chat(usr, "You can't do that!")
+ to_chat(usr, span_warning("You can't do that!"))
return
if(usr.incapacitated())
@@ -211,13 +211,13 @@
if(beaker)
if(beaker.reagents && beaker.reagents.reagent_list.len)
- . += "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid."
+ . += span_notice("Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.")
else
- . += "Attached is an empty [beaker.name]."
+ . += span_notice("Attached is an empty [beaker.name].")
else
- . += "No chemicals are attached."
+ . += span_notice("No chemicals are attached.")
- . += "[attached ? attached : "No one"] is attached."
+ . += span_notice("[attached ? attached : "No one"] is attached.")
/obj/machinery/iv_drip/saline
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index ac55bec628ed..78509641a159 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -63,7 +63,7 @@
return
var/obj/item/multitool/M = I
M.buffer = src
- to_chat(user, "You save the data in the [I.name]'s buffer.")
+ to_chat(user, span_notice("You save the data in the [I.name]'s buffer."))
return 1
if(default_deconstruction_crowbar(I))
@@ -100,13 +100,13 @@
/obj/machinery/launchpad/proc/doteleport(mob/user, sending)
if(teleporting)
- to_chat(user, "ERROR: Launchpad busy.")
+ to_chat(user, span_warning("ERROR: Launchpad busy."))
return
var/turf/dest = get_turf(src)
if(dest && is_centcom_level(dest.z))
- to_chat(user, "ERROR: Launchpad not operative. Heavy area shielding makes teleporting impossible.")
+ to_chat(user, span_warning("ERROR: Launchpad not operative. Heavy area shielding makes teleporting impossible."))
return
var/target_x = x + x_offset
@@ -158,7 +158,7 @@
if(isAI(ROI))
var/mob/living/silicon/ai/I = ROI
if(I.move_resist > 1000)
- to_chat(user, "ERROR: Launchpad overloaded, unable to operate.")
+ to_chat(user, span_warning("ERROR: Launchpad overloaded, unable to operate."))
continue
// if it's anchored, don't teleport
var/on_chair = ""
@@ -244,7 +244,7 @@
return
if(!usr.canUseTopic(src, BE_CLOSE, ismonkey(usr)))
return
- usr.visible_message("[usr] starts closing [src]...", "You start closing [src]...")
+ usr.visible_message(span_notice("[usr] starts closing [src]..."), span_notice("You start closing [src]..."))
if(do_after(usr, 30, target = usr))
usr.put_in_hands(briefcase)
moveToNullspace() //hides it from suitcase contents
@@ -257,7 +257,7 @@
if(L.pad == src) //do not attempt to link when already linked
return ..()
L.pad = src
- to_chat(user, "You link [src] to [L].")
+ to_chat(user, span_notice("You link [src] to [L]."))
else
return ..()
@@ -284,7 +284,7 @@
if(!is_syndicate(user)) // You don't know how to use launchpad as non syndicate.
return
add_fingerprint(user)
- user.visible_message("[user] starts setting down [src]...", "You start setting up [pad]...")
+ user.visible_message(span_notice("[user] starts setting down [src]..."), span_notice("You start setting up [pad]..."))
if(do_after(user, 30, target = user))
pad.forceMove(get_turf(src))
pad.update_indicator()
@@ -298,7 +298,7 @@
if(L.pad == src.pad) //do not attempt to link when already linked
return ..()
L.pad = src.pad
- to_chat(user, "You link [pad] to [L].")
+ to_chat(user, span_notice("You link [pad] to [L]."))
else
return ..()
@@ -320,7 +320,7 @@
if(!is_syndicate(user)) // you don't know how to use the launchpad stealth remote as a non syndicate
return
ui_interact(user)
- to_chat(user, "[src] projects a display onto your retina.")
+ to_chat(user, span_notice("[src] projects a display onto your retina."))
/obj/item/launchpad_remote/ui_state(mob/user)
@@ -350,10 +350,10 @@
/obj/item/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad)
if(QDELETED(pad))
- to_chat(user, "ERROR: Launchpad not responding. Check launchpad integrity.")
+ to_chat(user, span_warning("ERROR: Launchpad not responding. Check launchpad integrity."))
return
if(!pad.isAvailable())
- to_chat(user, "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered.")
+ to_chat(user, span_warning("ERROR: Launchpad not operative. Make sure the launchpad is ready and powered."))
return
pad.doteleport(user, sending)
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 97e9fc52bc58..7e819f7d4963 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -39,7 +39,7 @@
. = ..()
. += "It is [area.lightswitch ? "on" : "off"]."
if((obj_flags & EMAGGED) && user.can_hear())
- . += "You hear a faint hum coming from the switch."
+ . += span_danger("You hear a faint hum coming from the switch.")
/obj/machinery/light_switch/interact(mob/user)
if(obj_flags & EMAGGED)
@@ -76,9 +76,9 @@
/obj/machinery/light_switch/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "Nothing new seems to happen when you swipe the emag.")
+ to_chat(user, span_warning("Nothing new seems to happen when you swipe the emag."))
return
- to_chat(user, "You swipe the emag on the light switch. ")
+ to_chat(user, span_notice("You swipe the emag on the light switch. "))
if(user.can_hear())
- to_chat(user, "The light switch gives off a soft hum.")
+ to_chat(user, span_notice("The light switch gives off a soft hum."))
obj_flags |= EMAGGED
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index 19e86374385c..64f99249fe5b 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -64,7 +64,7 @@
/obj/machinery/limbgrower/attackby(obj/item/O, mob/user, params)
if (busy)
- to_chat(user, "The Limb Grower is busy. Please wait for completion of previous operation.")
+ to_chat(user, span_alert("The Limb Grower is busy. Please wait for completion of previous operation."))
return
if(default_deconstruction_screwdriver(user, "limbgrower_panelopen", "limbgrower_idleoff", O))
@@ -110,7 +110,7 @@
addtimer(CALLBACK(src, .proc/build_item),32*prod_coeff)
else
- to_chat(usr, "The limb grower is busy. Please wait for completion of previous operation.")
+ to_chat(usr, span_alert("The limb grower is busy. Please wait for completion of previous operation."))
updateUsrDialog()
return
@@ -125,7 +125,7 @@
//Just build whatever it is
new buildpath(loc)
else
- src.visible_message(" Something went very wrong and there isnt enough synthflesh anymore!")
+ src.visible_message(span_error(" Something went very wrong and there isnt enough synthflesh anymore!"))
busy = FALSE
flick("limbgrower_unfill",src)
icon_state = "limbgrower_idleoff"
@@ -187,7 +187,7 @@
if(!(selected_category in D.category))
continue
if(disabled || !can_build(D))
- dat += "[D.name]"
+ dat += span_linkOff("[D.name]")
else
dat += "[D.name]"
dat += "[get_design_cost(D)]
"
@@ -228,5 +228,5 @@
var/datum/design/D = SSresearch.techweb_design_by_id(id)
if((D.build_type & LIMBGROWER) && ("emagged" in D.category))
stored_research.add_design(D)
- to_chat(user, "A warning flashes onto the screen, stating that safety overrides have been deactivated!")
+ to_chat(user, span_warning("A warning flashes onto the screen, stating that safety overrides have been deactivated!"))
obj_flags |= EMAGGED
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index e5df2c29d18a..5217c389f2d7 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -24,7 +24,7 @@
continue
O_limit++
if(O_limit >= 20)
- audible_message("[src] lets out a screech, it doesn't seem to be able to handle the load.")
+ audible_message(span_notice("[src] lets out a screech, it doesn't seem to be able to handle the load."))
break
use_power(500)
O.throw_at(target, drive_range * power, power)
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 51b704c5e323..e73de649cc66 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -92,7 +92,7 @@
if(I.tool_behaviour == TOOL_SCREWDRIVER)
open = !open
- user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.")
+ user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", span_notice("You [open ? "open" : "close"] the beacon's cover."))
update_icon()
@@ -100,12 +100,12 @@
if(open)
if (src.allowed(user))
src.locked = !src.locked
- to_chat(user, "Controls are now [src.locked ? "locked" : "unlocked"].")
+ to_chat(user, span_notice("Controls are now [src.locked ? "locked" : "unlocked"]."))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
updateDialog()
else
- to_chat(user, "You must open the cover first!")
+ to_chat(user, span_warning("You must open the cover first!"))
else
return ..()
@@ -123,7 +123,7 @@
return // prevent intraction when T-scanner revealed
if(!open && !ai) // can't alter controls if not open, unless you're an AI
- to_chat(user, "The beacon's control cover is closed!")
+ to_chat(user, span_warning("The beacon's control cover is closed!"))
return
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index cddd41e45f89..2094f8c4829f 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -704,17 +704,17 @@ GLOBAL_LIST_EMPTY(allCasters)
/obj/machinery/newscaster/attackby(obj/item/I, mob/living/user, params)
if(I.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start [anchored ? "un" : ""]securing [name]...")
+ to_chat(user, span_notice("You start [anchored ? "un" : ""]securing [name]..."))
I.play_tool_sound(src)
if(I.use_tool(src, user, 60))
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
if(stat & BROKEN)
- to_chat(user, "The broken remains of [src] fall on the ground.")
+ to_chat(user, span_warning("The broken remains of [src] fall on the ground."))
new /obj/item/stack/sheet/metal(loc, 5)
new /obj/item/shard(loc)
new /obj/item/shard(loc)
else
- to_chat(user, "You [anchored ? "un" : ""]secure [name].")
+ to_chat(user, span_notice("You [anchored ? "un" : ""]secure [name]."))
new /obj/item/wallframe/newscaster(loc)
qdel(src)
else if(I.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
@@ -722,17 +722,17 @@ GLOBAL_LIST_EMPTY(allCasters)
if(!I.tool_start_check(user, amount=0))
return
user.visible_message("[user] is repairing [src].", \
- "You begin repairing [src]...", \
- "You hear welding.")
+ span_notice("You begin repairing [src]..."), \
+ span_italics("You hear welding."))
if(I.use_tool(src, user, 40, volume=50))
if(!(stat & BROKEN))
return
- to_chat(user, "You repair [src].")
+ to_chat(user, span_notice("You repair [src]."))
obj_integrity = max_integrity
stat &= ~BROKEN
update_icon()
else
- to_chat(user, "[src] does not need repairs.")
+ to_chat(user, span_notice("[src] does not need repairs."))
else
return ..()
@@ -762,7 +762,7 @@ GLOBAL_LIST_EMPTY(allCasters)
/obj/machinery/newscaster/attack_paw(mob/user)
if(user.a_intent != INTENT_HARM)
- to_chat(user, "The newscaster controls are far too complicated for your tiny brain!")
+ to_chat(user, span_warning("The newscaster controls are far too complicated for your tiny brain!"))
else
take_damage(5, BRUTE, "melee")
@@ -785,9 +785,9 @@ GLOBAL_LIST_EMPTY(allCasters)
else
targetcam = R.aicamera
else
- to_chat(user, "You cannot interface with silicon photo uploading!")
+ to_chat(user, span_warning("You cannot interface with silicon photo uploading!"))
if(!targetcam.stored.len)
- to_chat(usr, "No images saved")
+ to_chat(usr, span_boldannounce("No images saved"))
return
var/datum/picture/selection = targetcam.selectpicture(user)
if(selection)
@@ -870,13 +870,13 @@ GLOBAL_LIST_EMPTY(allCasters)
var/creationTime
/obj/item/newspaper/suicide_act(mob/user)
- user.visible_message("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization!")
+ user.visible_message(span_suicide("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization!"))
user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide")
var/mob/living/carbon/human/H = user
var/obj/W = new /obj/item/reagent_containers/food/drinks/bottle/whiskey(H.loc)
playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), 1)
W.reagents.trans_to(H, W.reagents.total_volume, transfered_by = user)
- user.visible_message("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!")
+ user.visible_message(span_suicide("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!"))
return(TOXLOSS)
@@ -1008,10 +1008,10 @@ GLOBAL_LIST_EMPTY(allCasters)
/obj/item/newspaper/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen))
if(!user.is_literate())
- to_chat(user, "You scribble illegibly on [src]!")
+ to_chat(user, span_notice("You scribble illegibly on [src]!"))
return
if(scribble_page == curr_page)
- to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?")
+ to_chat(user, span_notice("There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?"))
else
var/s = stripped_input(user, "Write something", "Newspaper")
if (!s)
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 2fad67dca7d3..d8cb030b2b23 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -137,12 +137,12 @@ Buildable meters
var/flags = initial(fakeA.pipe_flags)
for(var/obj/machinery/atmospherics/M in loc)
if((M.pipe_flags & flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers.
- to_chat(user, "Something is hogging the tile!")
+ to_chat(user, span_warning("Something is hogging the tile!"))
return TRUE
if((M.piping_layer != piping_layer) && !((M.pipe_flags | flags) & PIPING_ALL_LAYER)) //don't continue if either pipe goes across all layers
continue
if(M.GetInitDirections() & SSair.get_init_dirs(pipe_type, fixed_dir())) // matches at least one direction on either type of pipe
- to_chat(user, "There is already a pipe at that location!")
+ to_chat(user, span_warning("There is already a pipe at that location!"))
return TRUE
// no conflicts found
@@ -154,8 +154,8 @@ Buildable meters
W.play_tool_sound(src)
user.visible_message( \
"[user] fastens \the [src].", \
- "You fasten \the [src].", \
- "You hear ratcheting.")
+ span_notice("You fasten \the [src]."), \
+ span_italics("You hear ratcheting."))
qdel(src)
@@ -176,7 +176,7 @@ Buildable meters
T.flipped = flipped
/obj/item/pipe/directional/suicide_act(mob/user)
- user.visible_message("[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!")
+ user.visible_message(span_suicide("[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!"))
if(iscarbon(user))
var/mob/living/carbon/C = user
for(var/i=1 to 20)
@@ -204,11 +204,11 @@ Buildable meters
pipe = P
break
if(!pipe)
- to_chat(user, "You need to fasten it to a pipe!")
+ to_chat(user, span_warning("You need to fasten it to a pipe!"))
return TRUE
new /obj/machinery/meter(loc, piping_layer)
W.play_tool_sound(src)
- to_chat(user, "You fasten the meter to the pipe.")
+ to_chat(user, span_notice("You fasten the meter to the pipe."))
qdel(src)
/obj/item/pipe_meter/screwdriver_act(mob/living/user, obj/item/S)
@@ -217,12 +217,12 @@ Buildable meters
return TRUE
if(!isturf(loc))
- to_chat(user, "You need to fasten it to the floor!")
+ to_chat(user, span_warning("You need to fasten it to the floor!"))
return TRUE
new /obj/machinery/meter/turf(loc, piping_layer)
S.play_tool_sound(src)
- to_chat(user, "You fasten the meter to the [loc.name].")
+ to_chat(user, span_notice("You fasten the meter to the [loc.name]."))
qdel(src)
/obj/item/pipe_meter/dropped()
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 89a2acd9acd2..7e7f5525e518 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -67,10 +67,10 @@
if(istype(W, /obj/item/pipe))
var/obj/item/pipe/P = W
if(!P.disposable)
- to_chat(usr, "[src] is too valuable to dispose of!")
+ to_chat(usr, span_warning("[src] is too valuable to dispose of!"))
return
// yogs end
- to_chat(usr, "You put [W] back into [src].")
+ to_chat(usr, span_notice("You put [W] back into [src]."))
qdel(W)
return
else
@@ -148,7 +148,7 @@
var/obj/structure/disposalconstruct/C = new (loc, p_type)
if(!C.can_place())
- to_chat(usr, "There's not enough room to build that here!")
+ to_chat(usr, span_warning("There's not enough room to build that here!"))
qdel(C)
return
if(href_list["dir"])
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 3b4d731c4d98..74dadc5648de 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -194,7 +194,7 @@
if(anchored) //you can't turn a turret on/off if it's not anchored/secured
on = !on //toggle on/off
else
- to_chat(usr, "It has to be secured first!")
+ to_chat(usr, span_notice("It has to be secured first!"))
interact(usr)
return
@@ -228,18 +228,18 @@
if(I.tool_behaviour == TOOL_CROWBAR)
//If the turret is destroyed, you can remove it with a crowbar to
//try and salvage its components
- to_chat(user, "You begin prying the metal coverings off...")
+ to_chat(user, span_notice("You begin prying the metal coverings off..."))
if(I.use_tool(src, user, 20))
if(prob(70))
if(stored_gun)
stored_gun.forceMove(loc)
- to_chat(user, "You remove the turret and salvage some components.")
+ to_chat(user, span_notice("You remove the turret and salvage some components."))
if(prob(50))
new /obj/item/stack/sheet/metal(loc, rand(1,4))
if(prob(50))
new /obj/item/assembly/prox_sensor(loc)
else
- to_chat(user, "You remove the turret but did not manage to salvage anything.")
+ to_chat(user, span_notice("You remove the turret but did not manage to salvage anything."))
qdel(src)
else if((I.tool_behaviour == TOOL_WRENCH) && (!on))
@@ -251,13 +251,13 @@
setAnchored(TRUE)
invisibility = INVISIBILITY_MAXIMUM
update_icon()
- to_chat(user, "You secure the exterior bolts on the turret.")
+ to_chat(user, span_notice("You secure the exterior bolts on the turret."))
if(has_cover)
cover = new /obj/machinery/porta_turret_cover(loc) //create a new turret. While this is handled in process(), this is to workaround a bug where the turret becomes invisible for a split second
cover.parent_turret = src //make the cover's parent src
else if(anchored)
setAnchored(FALSE)
- to_chat(user, "You unsecure the exterior bolts on the turret.")
+ to_chat(user, span_notice("You unsecure the exterior bolts on the turret."))
power_change()
invisibility = 0
qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover.
@@ -266,22 +266,22 @@
//Behavior lock/unlock mangement
if(allowed(user))
locked = !locked
- to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].")
+ to_chat(user, span_notice("Controls are now [locked ? "locked" : "unlocked"]."))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_notice("Access denied."))
else if(I.tool_behaviour == TOOL_MULTITOOL && !locked)
if(!multitool_check_buffer(user, I))
return
var/obj/item/multitool/M = I
M.buffer = src
- to_chat(user, "You add [src] to multitool buffer.")
+ to_chat(user, span_notice("You add [src] to multitool buffer."))
else
return ..()
/obj/machinery/porta_turret/emag_act(mob/user)
if(obj_flags & EMAGGED)
return
- to_chat(user, "You short out [src]'s threat assessment circuits.")
+ to_chat(user, span_warning("You short out [src]'s threat assessment circuits."))
visible_message("[src] hums oddly...")
obj_flags |= EMAGGED
controllock = TRUE
@@ -615,7 +615,7 @@
return FALSE
if(remote_controller)
if(warning_message)
- to_chat(remote_controller, "Your uplink to [src] has been severed!")
+ to_chat(remote_controller, span_warning("Your uplink to [src] has been severed!"))
quit_action.Remove(remote_controller)
toggle_action.Remove(remote_controller)
remote_controller.click_intercept = null
@@ -831,8 +831,8 @@
/obj/machinery/turretid/examine(mob/user)
. += ..()
if(issilicon(user) && !(stat & BROKEN))
- . += {"Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.
- Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]."}
+ . += {"[span_notice("Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.")]
+ [span_notice("Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"].")]"}
/obj/machinery/turretid/attackby(obj/item/I, mob/user, params)
if(stat & BROKEN)
@@ -853,11 +853,11 @@
if ( get_dist(src, user) == 0 ) // trying to unlock the interface
if (allowed(usr))
if(obj_flags & EMAGGED)
- to_chat(user, "The turret control is unresponsive.")
+ to_chat(user, span_notice("The turret control is unresponsive."))
return
locked = !locked
- to_chat(user, "You [ locked ? "lock" : "unlock"] the panel.")
+ to_chat(user, span_notice("You [ locked ? "lock" : "unlock"] the panel."))
if (locked)
if (user.machine==src)
user.unset_machine()
@@ -866,12 +866,12 @@
if (user.machine==src)
attack_hand(user)
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_warning("Access denied."))
/obj/machinery/turretid/emag_act(mob/user)
if(obj_flags & EMAGGED)
return
- to_chat(user, "You short out the turret controls' access analysis module.")
+ to_chat(user, span_danger("You short out the turret controls' access analysis module."))
obj_flags |= EMAGGED
locked = FALSE
if(user && user.machine == src)
@@ -881,13 +881,13 @@
if(!ailock || IsAdminGhost(user))
return attack_hand(user)
else
- to_chat(user, "There seems to be a firewall preventing you from accessing this device.")
+ to_chat(user, span_notice("There seems to be a firewall preventing you from accessing this device."))
/obj/machinery/turretid/ui_interact(mob/user)
. = ..()
if ( get_dist(src, user) > 0 )
if ( !(issilicon(user) || IsAdminGhost(user)) )
- to_chat(user, "You are too far away.")
+ to_chat(user, span_notice("You are too far away."))
user.unset_machine()
user << browse(null, "window=turretid")
return
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index f06f4d677d83..763853bf15d9 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -25,14 +25,14 @@
if(PTURRET_UNSECURED) //first step
if(I.tool_behaviour == TOOL_WRENCH && !anchored)
I.play_tool_sound(src, 100)
- to_chat(user, "You secure the external bolts.")
+ to_chat(user, span_notice("You secure the external bolts."))
setAnchored(TRUE)
build_step = PTURRET_BOLTED
return
else if(I.tool_behaviour == TOOL_CROWBAR && !anchored)
I.play_tool_sound(src, 75)
- to_chat(user, "You dismantle the turret construction.")
+ to_chat(user, span_notice("You dismantle the turret construction."))
new /obj/item/stack/sheet/metal( loc, 5)
qdel(src)
return
@@ -41,16 +41,16 @@
if(istype(I, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = I
if(M.use(2))
- to_chat(user, "You add some metal armor to the interior frame.")
+ to_chat(user, span_notice("You add some metal armor to the interior frame."))
build_step = PTURRET_START_INTERNAL_ARMOUR
icon_state = "turret_frame2"
else
- to_chat(user, "You need two sheets of metal to continue construction!")
+ to_chat(user, span_warning("You need two sheets of metal to continue construction!"))
return
else if(I.tool_behaviour == TOOL_WRENCH)
I.play_tool_sound(src, 75)
- to_chat(user, "You unfasten the external bolts.")
+ to_chat(user, span_notice("You unfasten the external bolts."))
setAnchored(FALSE)
build_step = PTURRET_UNSECURED
return
@@ -59,7 +59,7 @@
if(PTURRET_START_INTERNAL_ARMOUR)
if(I.tool_behaviour == TOOL_WRENCH)
I.play_tool_sound(src, 100)
- to_chat(user, "You bolt the metal armor into place.")
+ to_chat(user, span_notice("You bolt the metal armor into place."))
build_step = PTURRET_INTERNAL_ARMOUR_ON
return
@@ -67,11 +67,11 @@
if(!I.tool_start_check(user, amount=5)) //uses up 5 fuel
return
- to_chat(user, "You start to remove the turret's interior metal armor...")
+ to_chat(user, span_notice("You start to remove the turret's interior metal armor..."))
if(I.use_tool(src, user, 20, volume=50, amount=5)) //uses up 5 fuel
build_step = PTURRET_BOLTED
- to_chat(user, "You remove the turret's interior metal armor.")
+ to_chat(user, span_notice("You remove the turret's interior metal armor."))
new /obj/item/stack/sheet/metal(drop_location(), 2)
return
@@ -82,13 +82,13 @@
if(!user.transferItemToLoc(E, src))
return
installed_gun = E
- to_chat(user, "You add [I] to the turret.")
+ to_chat(user, span_notice("You add [I] to the turret."))
build_step = PTURRET_GUN_EQUIPPED
return
else if(I.tool_behaviour == TOOL_WRENCH)
I.play_tool_sound(src, 100)
- to_chat(user, "You remove the turret's metal armor bolts.")
+ to_chat(user, span_notice("You remove the turret's metal armor bolts."))
build_step = PTURRET_START_INTERNAL_ARMOUR
return
@@ -97,7 +97,7 @@
build_step = PTURRET_SENSORS_ON
if(!user.temporarilyRemoveItemFromInventory(I))
return
- to_chat(user, "You add the proximity sensor to the turret.")
+ to_chat(user, span_notice("You add the proximity sensor to the turret."))
qdel(I)
return
@@ -106,7 +106,7 @@
if(I.tool_behaviour == TOOL_SCREWDRIVER)
I.play_tool_sound(src, 100)
build_step = PTURRET_CLOSED
- to_chat(user, "You close the internal access hatch.")
+ to_chat(user, span_notice("You close the internal access hatch."))
return
@@ -114,16 +114,16 @@
if(istype(I, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = I
if(M.use(2))
- to_chat(user, "You add some metal armor to the exterior frame.")
+ to_chat(user, span_notice("You add some metal armor to the exterior frame."))
build_step = PTURRET_START_EXTERNAL_ARMOUR
else
- to_chat(user, "You need two sheets of metal to continue construction!")
+ to_chat(user, span_warning("You need two sheets of metal to continue construction!"))
return
else if(I.tool_behaviour == TOOL_SCREWDRIVER)
I.play_tool_sound(src, 100)
build_step = PTURRET_SENSORS_ON
- to_chat(user, "You open the internal access hatch.")
+ to_chat(user, span_notice("You open the internal access hatch."))
return
if(PTURRET_START_EXTERNAL_ARMOUR)
@@ -131,10 +131,10 @@
if(!I.tool_start_check(user, amount=5))
return
- to_chat(user, "You begin to weld the turret's armor down...")
+ to_chat(user, span_notice("You begin to weld the turret's armor down..."))
if(I.use_tool(src, user, 30, volume=50, amount=5))
build_step = PTURRET_EXTERNAL_ARMOUR_ON
- to_chat(user, "You weld the turret's armor down.")
+ to_chat(user, span_notice("You weld the turret's armor down."))
//The final step: create a full turret
@@ -151,7 +151,7 @@
else if(I.tool_behaviour == TOOL_CROWBAR)
I.play_tool_sound(src, 75)
- to_chat(user, "You pry off the turret's exterior armor.")
+ to_chat(user, span_notice("You pry off the turret's exterior armor."))
new /obj/item/stack/sheet/metal(loc, 2)
build_step = PTURRET_CLOSED
return
@@ -177,11 +177,11 @@
build_step = PTURRET_INTERNAL_ARMOUR_ON
installed_gun.forceMove(loc)
- to_chat(user, "You remove [installed_gun] from the turret frame.")
+ to_chat(user, span_notice("You remove [installed_gun] from the turret frame."))
installed_gun = null
if(PTURRET_SENSORS_ON)
- to_chat(user, "You remove the prox sensor from the turret frame.")
+ to_chat(user, span_notice("You remove the prox sensor from the turret frame."))
new /obj/item/assembly/prox_sensor(loc)
build_step = PTURRET_GUN_EQUIPPED
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index 4df7001c11d8..a8d4da97b57f 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -46,12 +46,12 @@
if(!parent_turret.anchored)
parent_turret.setAnchored(TRUE)
- to_chat(user, "You secure the exterior bolts on the turret.")
+ to_chat(user, span_notice("You secure the exterior bolts on the turret."))
parent_turret.invisibility = 0
parent_turret.update_icon()
else
parent_turret.setAnchored(FALSE)
- to_chat(user, "You unsecure the exterior bolts on the turret.")
+ to_chat(user, span_notice("You unsecure the exterior bolts on the turret."))
parent_turret.invisibility = INVISIBILITY_MAXIMUM
parent_turret.update_icon()
qdel(src)
@@ -59,16 +59,16 @@
else if(I.GetID())
if(parent_turret.allowed(user))
parent_turret.locked = !parent_turret.locked
- to_chat(user, "Controls are now [parent_turret.locked ? "locked" : "unlocked"].")
+ to_chat(user, span_notice("Controls are now [parent_turret.locked ? "locked" : "unlocked"]."))
updateUsrDialog()
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_notice("Access denied."))
else if(I.tool_behaviour == TOOL_MULTITOOL && !parent_turret.locked)
if(!multitool_check_buffer(user, I))
return
var/obj/item/multitool/M = I
M.buffer = parent_turret
- to_chat(user, "You add [parent_turret] to multitool buffer.")
+ to_chat(user, span_notice("You add [parent_turret] to multitool buffer."))
else
return ..()
@@ -89,7 +89,7 @@
/obj/machinery/porta_turret_cover/emag_act(mob/user)
if(!(parent_turret.obj_flags & EMAGGED))
- to_chat(user, "You short out [parent_turret]'s threat assessment circuits.")
+ to_chat(user, span_notice("You short out [parent_turret]'s threat assessment circuits."))
visible_message("[parent_turret] hums oddly...")
parent_turret.obj_flags |= EMAGGED
parent_turret.on = 0
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index fe4806fcca01..07e5bf83d261 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -31,11 +31,11 @@
/obj/machinery/quantumpad/examine(mob/user)
. = ..()
- . += "It is [ linked_pad ? "currently" : "not"] linked to another pad."
+ . += span_notice("It is [ linked_pad ? "currently" : "not"] linked to another pad.")
if(!panel_open)
- . += "The panel is screwed in, obstructing the linking device."
+ . += span_notice("The panel is screwed in, obstructing the linking device.")
else
- . += "The linking device is now able to be scanned with a multitool."
+ . += span_notice("The linking device is now able to be scanned with a multitool.")
/obj/machinery/quantumpad/RefreshParts()
var/E = 0
@@ -60,7 +60,7 @@
return
var/obj/item/multitool/M = I
M.buffer = src
- to_chat(user, "You save the data in [I]'s buffer. It can now be saved to pads with closed panels.")
+ to_chat(user, span_notice("You save the data in [I]'s buffer. It can now be saved to pads with closed panels."))
return TRUE
else if(I.tool_behaviour == TOOL_MULTITOOL)
if(!multitool_check_buffer(user, I))
@@ -68,25 +68,25 @@
var/obj/item/multitool/M = I
if(istype(M.buffer, /obj/machinery/quantumpad))
if(M.buffer == src)
- to_chat(user, "You cannot link a pad to itself!")
+ to_chat(user, span_warning("You cannot link a pad to itself!"))
return TRUE
else
linked_pad = M.buffer
- to_chat(user, "You link [src] to the one in [I]'s buffer.")
+ to_chat(user, span_notice("You link [src] to the one in [I]'s buffer."))
return TRUE
else
- to_chat(user, "There is no quantum pad data saved in [I]'s buffer!")
+ to_chat(user, span_warning("There is no quantum pad data saved in [I]'s buffer!"))
return TRUE
else if(istype(I, /obj/item/quantum_keycard))
var/obj/item/quantum_keycard/K = I
if(K.qpad)
- to_chat(user, "You insert [K] into [src]'s card slot, activating it.")
+ to_chat(user, span_notice("You insert [K] into [src]'s card slot, activating it."))
interact(user, K.qpad)
else
- to_chat(user, "You insert [K] into [src]'s card slot, initiating the link procedure.")
+ to_chat(user, span_notice("You insert [K] into [src]'s card slot, initiating the link procedure."))
if(do_after(user, 40, target = src))
- to_chat(user, "You complete the link between [K] and [src].")
+ to_chat(user, span_notice("You complete the link between [K] and [src]."))
K.qpad = src
if(default_deconstruction_crowbar(I))
@@ -97,23 +97,23 @@
/obj/machinery/quantumpad/interact(mob/user, obj/machinery/quantumpad/target_pad = linked_pad)
if(!target_pad || QDELETED(target_pad))
if(!map_pad_link_id || !initMappedLink())
- to_chat(user, "Target pad not found!")
+ to_chat(user, span_warning("Target pad not found!"))
return
if(world.time < last_teleport + teleport_cooldown)
- to_chat(user, "[src] is recharging power. Please wait [DisplayTimeText(last_teleport + teleport_cooldown - world.time)].")
+ to_chat(user, span_warning("[src] is recharging power. Please wait [DisplayTimeText(last_teleport + teleport_cooldown - world.time)]."))
return
if(teleporting)
- to_chat(user, "[src] is charging up. Please wait.")
+ to_chat(user, span_warning("[src] is charging up. Please wait."))
return
if(target_pad.teleporting)
- to_chat(user, "Target pad is busy. Please wait.")
+ to_chat(user, span_warning("Target pad is busy. Please wait."))
return
if(target_pad.stat & NOPOWER)
- to_chat(user, "Target pad is not responding to ping.")
+ to_chat(user, span_warning("Target pad is not responding to ping."))
return
add_fingerprint(user)
doteleport(user, target_pad)
@@ -144,11 +144,11 @@
teleporting = FALSE
return
if(stat & NOPOWER)
- to_chat(user, "[src] is unpowered!")
+ to_chat(user, span_warning("[src] is unpowered!"))
teleporting = FALSE
return
if(!target_pad || QDELETED(target_pad) || target_pad.stat & NOPOWER)
- to_chat(user, "Linked pad is not responding to ping. Teleport aborted.")
+ to_chat(user, span_warning("Linked pad is not responding to ping. Teleport aborted."))
teleporting = FALSE
return
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index e5c64e76439a..6801572053e3 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -11,6 +11,12 @@
var/obj/item/charging = null
var/recharge_coeff = 1
+ var/icon_state_off = "rechargeroff"
+ var/icon_state_idle = "recharger0"
+ var/icon_state_charging = "recharger1"
+ var/icon_state_recharged = "recharger2"
+ var/icon_state_open = "rechargeropen"
+
var/static/list/allowed_devices = typecacheof(list(
/obj/item/gun/energy,
/obj/item/melee/baton,
@@ -24,12 +30,12 @@
/obj/machinery/recharger/examine(mob/user)
. = ..()
if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
- . += "You're too far away to examine [src]'s contents and display!"
+ . += span_warning("You're too far away to examine [src]'s contents and display!")
return
if(charging)
- . += {"\The [src] contains:
- - \A [charging]."}
+ . += {"[span_notice("\The [src] contains:")]
+ [span_notice("- \A [charging].")]"}
if(!(stat & (NOPOWER|BROKEN)))
. += "The status display reads:"
@@ -52,11 +58,11 @@
/obj/machinery/recharger/attackby(obj/item/G, mob/user, params)
if(G.tool_behaviour == TOOL_WRENCH)
if(charging)
- to_chat(user, "Remove the charging item first!")
+ to_chat(user, span_notice("Remove the charging item first!"))
return
setAnchored(!anchored)
power_change()
- to_chat(user, "You [anchored ? "attached" : "detached"] [src].")
+ to_chat(user, span_notice("You [anchored ? "attached" : "detached"] [src]."))
G.play_tool_sound(src)
return
@@ -70,13 +76,13 @@
//Checks to make sure he's not in space doing it, and that the area got proper power.
var/area/a = get_area(src)
if(!isarea(a) || a.power_equip == 0)
- to_chat(user, "[src] blinks red as you try to insert [G].")
+ to_chat(user, span_notice("[src] blinks red as you try to insert [G]."))
return 1
if (istype(G, /obj/item/gun/energy))
var/obj/item/gun/energy/E = G
if(!E.can_charge)
- to_chat(user, "Your gun has no external power connector.")
+ to_chat(user, span_notice("Your gun has no external power connector."))
return 1
if(!user.transferItemToLoc(G, src))
@@ -84,7 +90,7 @@
setCharging(G)
else
- to_chat(user, "[src] isn't connected to anything!")
+ to_chat(user, span_notice("[src] isn't connected to anything!"))
return 1
if(anchored && !charging)
@@ -158,18 +164,33 @@
/obj/machinery/recharger/update_icon(using_power = 0, scan) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
if(stat & (NOPOWER|BROKEN) || !anchored)
- icon_state = "rechargeroff"
+ icon_state = icon_state_off
return
if(scan)
- icon_state = "rechargeroff"
+ icon_state = icon_state_idle
return
if(panel_open)
- icon_state = "rechargeropen"
+ icon_state = icon_state_open
return
if(charging)
if(using_power)
- icon_state = "recharger1"
+ icon_state = icon_state_charging
else
- icon_state = "recharger2"
+ icon_state = icon_state_recharged
return
- icon_state = "recharger0"
+ icon_state = icon_state_idle
+
+/obj/machinery/recharger/wallrecharger
+ name = "wall recharger"
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "wrecharger0"
+ desc = "A wall mounted charging dock for energy based weaponry."
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 5
+ active_power_usage = 400
+
+ icon_state_off = "rechargeroff"
+ icon_state_idle = "wrecharger0"
+ icon_state_charging = "wrecharger1"
+ icon_state_recharged = "wrecharger2"
+ icon_state_open = "wrechargeropen"
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index bcc9b54573eb..8089b0e02ddb 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -41,7 +41,7 @@
/obj/machinery/recycler/examine(mob/user)
. = ..()
- . += "Reclaiming [amount_produced]% of materials salvaged."
+ . += span_notice("Reclaiming [amount_produced]% of materials salvaged.")
. += {"The power light is [(stat & NOPOWER) ? "off" : "on"].
The safety-mode light is [safety_mode ? "on" : "off"].
The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."}
@@ -69,7 +69,7 @@
safety_mode = FALSE
update_icon()
playsound(src, "sparks", 75, TRUE, -1)
- to_chat(user, "You use the cryptographic sequencer on [src].")
+ to_chat(user, span_notice("You use the cryptographic sequencer on [src]."))
/obj/machinery/recycler/update_icon()
..()
@@ -199,4 +199,4 @@
name = "paper - 'garbage duty instructions'"
info = "New Assignment
You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.
There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
-#undef SAFETY_COOLDOWN
\ No newline at end of file
+#undef SAFETY_COOLDOWN
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 5a0781eacbc4..cd5e2b24ac7c 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -163,11 +163,11 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
dat += departments_table(GLOB.req_console_information)
if(REQ_SCREEN_SENT)
- dat += "Message sent.
"
+ dat += "[span_good("Message sent.")]
"
dat += "<< Back
"
if(REQ_SCREEN_ERR)
- dat += "An error occurred.
"
+ dat += "[span_bad("An error occurred.")]
"
dat += "<< Back
"
if(REQ_SCREEN_VIEW_MSGS)
@@ -204,7 +204,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
if ((announceAuth || IsAdminGhost(user)) && message)
dat += "Announce Message
"
else
- dat += "Announce Message
"
+ dat += "[span_linkOff("Announce Message")]
"
dat += "
<< Back
"
if(!dat)
@@ -377,14 +377,14 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
update_icon()
if(REQ_HIGH_MESSAGE_PRIORITY)
- header = "High Priority
[header]"
+ header = "[span_bad("High Priority")]
[header]"
alert = "PRIORITY Alert from [source][authentic]"
if(newmessagepriority < REQ_HIGH_MESSAGE_PRIORITY)
newmessagepriority = REQ_HIGH_MESSAGE_PRIORITY
update_icon()
if(REQ_EXTREME_MESSAGE_PRIORITY)
- header = "!!!Extreme Priority!!!
[header]"
+ header = "[span_bad("!!!Extreme Priority!!!")]
[header]"
alert = "EXTREME PRIORITY Alert from [source][authentic]"
silenced = FALSE
if(newmessagepriority < REQ_EXTREME_MESSAGE_PRIORITY)
@@ -404,10 +404,10 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
/obj/machinery/requests_console/attackby(obj/item/O, mob/user, params)
if(O.tool_behaviour == TOOL_CROWBAR)
if(open)
- to_chat(user, "You close the maintenance panel.")
+ to_chat(user, span_notice("You close the maintenance panel."))
open = FALSE
else
- to_chat(user, "You open the maintenance panel.")
+ to_chat(user, span_notice("You open the maintenance panel."))
open = TRUE
update_icon()
return
@@ -415,12 +415,12 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
if(open)
hackState = !hackState
if(hackState)
- to_chat(user, "You modify the wiring.")
+ to_chat(user, span_notice("You modify the wiring."))
else
- to_chat(user, "You reset the wiring.")
+ to_chat(user, span_notice("You reset the wiring."))
update_icon()
else
- to_chat(user, "You must open the maintenance panel first!")
+ to_chat(user, span_warning("You must open the maintenance panel first!"))
return
var/obj/item/card/id/ID = O.GetID()
@@ -433,13 +433,13 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
announceAuth = TRUE
else
announceAuth = FALSE
- to_chat(user, "You are not authorized to send announcements!")
+ to_chat(user, span_warning("You are not authorized to send announcements!"))
updateUsrDialog()
return
if (istype(O, /obj/item/stamp))
if(screen == REQ_SCREEN_AUTHENTICATE)
var/obj/item/stamp/T = O
- msgStamped = "Stamped with the [T.name]"
+ msgStamped = span_boldnotice("Stamped with the [T.name]")
updateUsrDialog()
return
return ..()
diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm
index 9359e26b2a54..7ae7a322c2f0 100644
--- a/code/game/machinery/scan_gate.dm
+++ b/code/game/machinery/scan_gate.dm
@@ -45,9 +45,9 @@
/obj/machinery/scanner_gate/examine(mob/user)
. = ..()
if(locked)
- . += "The control panel is ID-locked. Swipe a valid ID to unlock it."
+ . += span_notice("The control panel is ID-locked. Swipe a valid ID to unlock it.")
else
- . += "The control panel is unlocked. Swipe an ID to lock it."
+ . += span_notice("The control panel is unlocked. Swipe an ID to lock it.")
/obj/machinery/scanner_gate/Crossed(atom/movable/AM)
. = ..()
@@ -71,14 +71,14 @@
if(allowed(user))
locked = FALSE
req_access = list()
- to_chat(user, "You unlock [src].")
+ to_chat(user, span_notice("You unlock [src]."))
else if(!(obj_flags & EMAGGED))
- to_chat(user, "You lock [src] with [W].")
+ to_chat(user, span_notice("You lock [src] with [W]."))
var/list/access = W.GetAccess()
req_access = access
locked = TRUE
else
- to_chat(user, "You try to lock [src] with [W], but nothing happens.")
+ to_chat(user, span_warning("You try to lock [src] with [W], but nothing happens."))
else
return ..()
@@ -88,7 +88,7 @@
locked = FALSE
req_access = list()
obj_flags |= EMAGGED
- to_chat(user, "You fry the ID checking system.")
+ to_chat(user, span_notice("You fry the ID checking system."))
/obj/machinery/scanner_gate/proc/perform_scan(mob/living/M)
var/beep = FALSE
diff --git a/code/game/machinery/sci_bombardment.dm b/code/game/machinery/sci_bombardment.dm
index 622a89a8ba07..1832b143bc91 100644
--- a/code/game/machinery/sci_bombardment.dm
+++ b/code/game/machinery/sci_bombardment.dm
@@ -79,12 +79,12 @@
if(!scibomb)
scibomb = B
playsound(src, 'sound/effects/bin_close.ogg', 100, 1)
- to_chat(usr, "You load [B] into the firing mechanism.")
+ to_chat(usr, span_notice("You load [B] into the firing mechanism."))
update_icon()
else
- to_chat(usr, "There is already a transfer valve loaded in the firing mechanism!")
+ to_chat(usr, span_warning("There is already a transfer valve loaded in the firing mechanism!"))
else
- to_chat(usr, "[B] is refused, as it is invalid or incomplete.")
+ to_chat(usr, span_warning("[B] is refused, as it is invalid or incomplete."))
return
/**
@@ -201,7 +201,7 @@
locked = !locked
radio.talk_into(src, "Controls [locked ? "locked" : "unlocked"] by [I.registered_name].",)
else
- to_chat(usr, "Access denied. Please seek assistance from station AI or Research Director.")
+ to_chat(usr, span_warning("Access denied. Please seek assistance from station AI or Research Director."))
update_icon()
. = TRUE
if("count")//Prompts user to change countdown timer (Minimum based on var/mincount)
@@ -209,17 +209,17 @@
return
var/a = text2num(stripped_input(usr, "Set a new countdown timer. (Minimum [mincount])", name, mincount))
countdown = max(a, mincount)
- to_chat(usr, "Countdown set to [countdown] seconds.")
+ to_chat(usr, span_notice("Countdown set to [countdown] seconds."))
. = TRUE
if("unload")//If unlocked, allows user to remove TTV from the machine, if present
if(!scibomb || locked)
return
if(!stopcount)
playsound(src, 'sound/misc/box_deploy.ogg', 80, 0.5)
- to_chat(usr, "It's too late to do that now! There's only [tick] seconds remaining! Abort!")
+ to_chat(usr, span_warning("It's too late to do that now! There's only [tick] seconds remaining! Abort!"))
return
playsound(src, 'sound/machines/blastdoor.ogg', 75, 0)
- to_chat(usr, "[scibomb] is ejected from the loading chamber.")
+ to_chat(usr, span_notice("[scibomb] is ejected from the loading chamber."))
scibomb.forceMove(drop_location())
scibomb = null
update_icon()
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 7214875e4bdc..492218d4ed71 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -122,25 +122,25 @@
if(.)
return
if(locked && !issilicon(user))
- to_chat(user, "The machine is locked, you are unable to use it!")
+ to_chat(user, span_warning("The machine is locked, you are unable to use it!"))
return
if(panel_open)
- to_chat(user, "The panel must be closed before operating this machine!")
+ to_chat(user, span_warning("The panel must be closed before operating this machine!"))
return
if (active)
user.visible_message("[user] deactivated \the [src].", \
- "You deactivate \the [src].", \
- "You hear heavy droning fade out.")
+ span_notice("You deactivate \the [src]."), \
+ span_italics("You hear heavy droning fade out."))
shields_down()
else
if(anchored)
user.visible_message("[user] activated \the [src].", \
- "You activate \the [src].", \
- "You hear heavy droning.")
+ span_notice("You activate \the [src]."), \
+ span_italics("You hear heavy droning."))
shields_up()
else
- to_chat(user, "The device must first be secured to the floor!")
+ to_chat(user, span_warning("The device must first be secured to the floor!"))
return
/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params)
@@ -148,60 +148,60 @@
W.play_tool_sound(src, 100)
panel_open = !panel_open
if(panel_open)
- to_chat(user, "You open the panel and expose the wiring.")
+ to_chat(user, span_notice("You open the panel and expose the wiring."))
else
- to_chat(user, "You close the panel.")
+ to_chat(user, span_notice("You close the panel."))
else if(istype(W, /obj/item/stack/cable_coil) && (stat & BROKEN) && panel_open)
var/obj/item/stack/cable_coil/coil = W
if (coil.get_amount() < 1)
- to_chat(user, "You need one length of cable to repair [src]!")
+ to_chat(user, span_warning("You need one length of cable to repair [src]!"))
return
- to_chat(user, "You begin to replace the wires...")
+ to_chat(user, span_notice("You begin to replace the wires..."))
if(do_after(user, 30, target = src))
if(coil.get_amount() < 1)
return
coil.use(1)
obj_integrity = max_integrity
stat &= ~BROKEN
- to_chat(user, "You repair \the [src].")
+ to_chat(user, span_notice("You repair \the [src]."))
update_icon()
else if(W.tool_behaviour == TOOL_WRENCH)
if(locked)
- to_chat(user, "The bolts are covered! Unlocking this would retract the covers.")
+ to_chat(user, span_warning("The bolts are covered! Unlocking this would retract the covers."))
return
if(!anchored && !isinspace())
W.play_tool_sound(src, 100)
- to_chat(user, "You secure \the [src] to the floor!")
+ to_chat(user, span_notice("You secure \the [src] to the floor!"))
setAnchored(TRUE)
else if(anchored)
W.play_tool_sound(src, 100)
- to_chat(user, "You unsecure \the [src] from the floor!")
+ to_chat(user, span_notice("You unsecure \the [src] from the floor!"))
if(active)
- to_chat(user, "\The [src] shuts off!")
+ to_chat(user, span_notice("\The [src] shuts off!"))
shields_down()
setAnchored(FALSE)
else if(W.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
locked = !locked
- to_chat(user, "You [locked ? "lock" : "unlock"] the controls.")
+ to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the controls."))
else if(obj_flags & EMAGGED)
- to_chat(user, "Error, access controller damaged!")
+ to_chat(user, span_danger("Error, access controller damaged!"))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
else
return ..()
/obj/machinery/shieldgen/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The access controller is damaged!")
+ to_chat(user, span_warning("The access controller is damaged!"))
return
obj_flags |= EMAGGED
locked = FALSE
playsound(src, "sparks", 100, 1)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
/obj/machinery/shieldgen/update_icon()
if(active)
@@ -279,8 +279,8 @@
if(fields)
active = ACTIVE_HASFIELDS
if(!power)
- visible_message("The [src.name] shuts down due to lack of power!", \
- "You hear heavy droning fade out.")
+ visible_message(span_danger("The [src.name] shuts down due to lack of power!"), \
+ span_italics("You hear heavy droning fade out."))
icon_state = "Shield_Gen"
active = FALSE
for(var/d in GLOB.cardinals)
@@ -337,7 +337,7 @@
/obj/machinery/shieldwallgen/can_be_unfasten_wrench(mob/user, silent)
if(active)
if(!silent)
- to_chat(user, "Turn off the shield generator first!")
+ to_chat(user, span_warning("Turn off the shield generator first!"))
return FAILED_UNFASTEN
return ..()
@@ -348,11 +348,11 @@
else if(W.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
locked = !locked
- to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.")
+ to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls."))
else if(obj_flags & EMAGGED)
- to_chat(user, "Error, access controller damaged!")
+ to_chat(user, span_danger("Error, access controller damaged!"))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
else
add_fingerprint(user)
@@ -363,37 +363,37 @@
if(.)
return
if(!anchored)
- to_chat(user, "\The [src] needs to be firmly secured to the floor first!")
+ to_chat(user, span_warning("\The [src] needs to be firmly secured to the floor first!"))
return
if(locked && !issilicon(user))
- to_chat(user, "The controls are locked!")
+ to_chat(user, span_warning("The controls are locked!"))
return
if(!power)
- to_chat(user, "\The [src] needs to be powered by a wire!")
+ to_chat(user, span_warning("\The [src] needs to be powered by a wire!"))
return
if(active)
user.visible_message("[user] turned \the [src] off.", \
- "You turn off \the [src].", \
- "You hear heavy droning fade out.")
+ span_notice("You turn off \the [src]."), \
+ span_italics("You hear heavy droning fade out."))
active = FALSE
update_activity()
else
user.visible_message("[user] turned \the [src] on.", \
- "You turn on \the [src].", \
- "You hear heavy droning.")
+ span_notice("You turn on \the [src]."), \
+ span_italics("You hear heavy droning."))
active = ACTIVE_SETUPFIELDS
update_activity()
add_fingerprint(user)
/obj/machinery/shieldwallgen/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The access controller is damaged!")
+ to_chat(user, span_warning("The access controller is damaged!"))
return
obj_flags |= EMAGGED
locked = FALSE
playsound(src, "sparks", 100, 1)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
//////////////Containment Field START
/obj/machinery/shieldwall
@@ -416,7 +416,7 @@
needs_power = TRUE
setDir(get_dir(gen_primary, gen_secondary))
for(var/mob/living/L in get_turf(src))
- visible_message("\The [src] is suddenly occupying the same space as \the [L]!")
+ visible_message(span_danger("\The [src] is suddenly occupying the same space as \the [L]!"))
L.gib()
/obj/machinery/shieldwall/Destroy()
diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm
index d5001cf8bc2f..ee7927463e40 100644
--- a/code/game/machinery/slotmachine.dm
+++ b/code/game/machinery/slotmachine.dm
@@ -88,26 +88,26 @@
C.throw_at(user, 3, 10)
if(prob(10))
balance = max(balance - SPIN_PRICE, 0)
- to_chat(user, "[src] spits your coin back out!")
+ to_chat(user, span_warning("[src] spits your coin back out!"))
else
if(!user.temporarilyRemoveItemFromInventory(C))
return
- to_chat(user, "You insert a [C.cmineral] coin into [src]'s slot!")
+ to_chat(user, span_notice("You insert a [C.cmineral] coin into [src]'s slot!"))
balance += C.value
qdel(C)
else
- to_chat(user, "This machine is only accepting holochips!")
+ to_chat(user, span_warning("This machine is only accepting holochips!"))
else if(istype(I, /obj/item/holochip))
if(paymode == HOLOCHIP)
var/obj/item/holochip/H = I
if(!user.temporarilyRemoveItemFromInventory(H))
return
- to_chat(user, "You insert [H.credits] holocredits into [src]'s holoreader!")
+ to_chat(user, span_notice("You insert [H.credits] holocredits into [src]'s holoreader!"))
balance += H.credits
qdel(H)
else
- to_chat(user, "This machine is only accepting coins!")
+ to_chat(user, span_warning("This machine is only accepting coins!"))
else if(I.tool_behaviour == TOOL_MULTITOOL)
if(balance > 0)
visible_message("[src] says, 'ERROR! Please empty the machine balance before altering paymode.'") //Prevents converting coins into holocredits and vice versa
@@ -195,7 +195,7 @@
var/the_name
if(user)
the_name = user.real_name
- visible_message("[user] pulls the lever and the slot machine starts spinning!")
+ visible_message(span_notice("[user] pulls the lever and the slot machine starts spinning!"))
else
the_name = "Exaybachay"
@@ -223,14 +223,14 @@
/obj/machinery/computer/slot_machine/proc/can_spin(mob/user)
if(stat & NOPOWER)
- to_chat(user, "The slot machine has no power!")
+ to_chat(user, span_warning("The slot machine has no power!"))
if(stat & BROKEN)
- to_chat(user, "The slot machine is broken!")
+ to_chat(user, span_warning("The slot machine is broken!"))
if(working)
- to_chat(user, "You need to wait until the machine stops spinning before you can play again!")
+ to_chat(user, span_warning("You need to wait until the machine stops spinning before you can play again!"))
return 0
if(balance < SPIN_PRICE)
- to_chat(user, "Insufficient money to play!")
+ to_chat(user, span_warning("Insufficient money to play!"))
return 0
return 1
@@ -273,12 +273,12 @@
give_money(SMALL_PRIZE)
else if(linelength == 3)
- to_chat(user, "You win three free games!")
+ to_chat(user, span_notice("You win three free games!"))
balance += SPIN_PRICE * 4
money = max(money - SPIN_PRICE * 4, money)
else
- to_chat(user, "No luck!")
+ to_chat(user, span_warning("No luck!"))
/obj/machinery/computer/slot_machine/proc/get_lines()
var/amountthesame
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index e7c026c97bc1..a5c28d67a8b5 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -143,20 +143,20 @@
if(istype(I, /obj/item/stock_parts/cell))
if(panel_open)
if(cell)
- to_chat(user, "There is already a power cell inside!")
+ to_chat(user, span_warning("There is already a power cell inside!"))
return
else if(!user.transferItemToLoc(I, src))
return
cell = I
I.add_fingerprint(usr)
- user.visible_message("\The [user] inserts a power cell into \the [src].", "You insert the power cell into \the [src].")
+ user.visible_message("\The [user] inserts a power cell into \the [src].", span_notice("You insert the power cell into \the [src]."))
SStgui.update_uis(src)
else
- to_chat(user, "The hatch must be open to insert a power cell!")
+ to_chat(user, span_warning("The hatch must be open to insert a power cell!"))
return
else if(I.tool_behaviour == TOOL_SCREWDRIVER)
panel_open = !panel_open
- user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", "You [panel_open ? "open" : "close"] the hatch on \the [src].")
+ user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src]."))
update_icon()
else if(default_deconstruction_crowbar(I))
return
@@ -238,7 +238,7 @@
/obj/machinery/space_heater/proc/togglepower()
on = !on
mode = HEATER_MODE_STANDBY
- usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", "You switch [on ? "on" : "off"] \the [src].")
+ usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", span_notice("You switch [on ? "on" : "off"] \the [src]."))
update_icon()
if (on)
START_PROCESSING(SSmachines, src)
diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm
index 009f0c3bbfe6..1733bd385d0d 100644
--- a/code/game/machinery/stasis.dm
+++ b/code/game/machinery/stasis.dm
@@ -30,9 +30,9 @@
/obj/machinery/stasis/examine(mob/user)
. = ..()
- . += "Alt-click to [stasis_enabled ? "turn off" : "turn on"] the machine."
+ . += span_notice("Alt-click to [stasis_enabled ? "turn off" : "turn on"] the machine.")
if(obj_flags & EMAGGED)
- . += "There's a worrying blue mist surrounding it."
+ . += span_warning("There's a worrying blue mist surrounding it.")
/obj/machinery/stasis/proc/play_power_sound()
var/_running = stasis_running()
@@ -106,7 +106,7 @@
target.ExtinguishMob()
use_power = ACTIVE_POWER_USE
if(obj_flags & EMAGGED)
- to_chat(target, "Your limbs start to feel numb...")
+ to_chat(target, span_warning("Your limbs start to feel numb..."))
/obj/machinery/stasis/proc/thaw_them(mob/living/target)
target.remove_status_effect(STATUS_EFFECT_STASIS)
@@ -173,9 +173,9 @@
/obj/machinery/stasis/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The stasis bed's safeties are already overriden!")
+ to_chat(user, span_warning("The stasis bed's safeties are already overriden!"))
return
- to_chat(user, "You override the stasis bed's safeties!")
+ to_chat(user, span_notice("You override the stasis bed's safeties!"))
obj_flags |= EMAGGED
#undef STASIS_TOGGLE_COOLDOWN
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 615d34d9feab..22637ac1807c 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -195,27 +195,27 @@
return
var/mob/living/target = A
if(!state_open)
- to_chat(user, "The unit's doors are shut!")
+ to_chat(user, span_warning("The unit's doors are shut!"))
return
if(!is_operational())
- to_chat(user, "The unit is not operational!")
+ to_chat(user, span_warning("The unit is not operational!"))
return
if(occupant || helmet || suit || storage)
- to_chat(user, "It's too cluttered inside to fit in!")
+ to_chat(user, span_warning("It's too cluttered inside to fit in!"))
return
if(target == user)
- user.visible_message("[user] starts squeezing into [src]!", "You start working your way into [src]...")
+ user.visible_message(span_warning("[user] starts squeezing into [src]!"), span_notice("You start working your way into [src]..."))
else
- target.visible_message("[user] starts shoving [target] into [src]!", "[user] starts shoving you into [src]!")
+ target.visible_message(span_warning("[user] starts shoving [target] into [src]!"), span_userdanger("[user] starts shoving you into [src]!"))
if(do_mob(user, target, 30))
if(occupant || helmet || suit || storage)
return
if(target == user)
- user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]!", "You slip into [src]'s cramped space and shut its door.")
+ user.visible_message(span_warning("[user] slips into [src] and closes the door behind [user.p_them()]!"), "You slip into [src]'s cramped space and shut its door.")
else
- target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!")
+ target.visible_message("[user] pushes [target] into [src] and shuts its door!", span_userdanger("[user] shoves you into [src] and shuts the door!"))
close_machine(target)
add_fingerprint(user)
@@ -238,7 +238,7 @@
uv = FALSE
locked = FALSE
if(uv_super)
- visible_message("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.")
+ visible_message(span_warning("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber."))
playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, 1)
helmet = null
qdel(helmet)
@@ -252,9 +252,9 @@
wires.cut_all()
else
if(!occupant)
- visible_message("[src]'s door slides open. The glowing yellow lights dim to a gentle green.")
+ visible_message(span_notice("[src]'s door slides open. The glowing yellow lights dim to a gentle green."))
else
- visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.")
+ visible_message(span_warning("[src]'s door slides open, barraging you with the nauseating smell of charred flesh."))
playsound(src, 'sound/machines/airlockclose.ogg', 25, 1)
var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such.
if(suit)
@@ -291,7 +291,7 @@
if(locked)
if(message_cooldown <= world.time)
message_cooldown = world.time + 50
- to_chat(user, "[src]'s door won't budge!")
+ to_chat(user, span_warning("[src]'s door won't budge!"))
return
open_machine()
dump_contents()
@@ -303,21 +303,21 @@
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- user.visible_message("You see [user] kicking against the doors of [src]!", \
- "You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)", \
- "You hear a thump from [src].")
+ user.visible_message(span_notice("You see [user] kicking against the doors of [src]!"), \
+ span_notice("You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)"), \
+ span_italics("You hear a thump from [src]."))
if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src )
return
- user.visible_message("[user] successfully broke out of [src]!", \
- "You successfully break out of [src]!")
+ user.visible_message(span_warning("[user] successfully broke out of [src]!"), \
+ span_notice("You successfully break out of [src]!"))
open_machine()
dump_contents()
add_fingerprint(user)
if(locked)
- visible_message("You see [user] kicking against the doors of [src]!", \
- "You start kicking against the doors...")
+ visible_message(span_notice("You see [user] kicking against the doors of [src]!"), \
+ span_notice("You start kicking against the doors..."))
addtimer(CALLBACK(src, .proc/resist_open, user), 300)
else
open_machine()
@@ -325,42 +325,42 @@
/obj/machinery/suit_storage_unit/proc/resist_open(mob/user)
if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here.
- visible_message("You see [user] burst out of [src]!", \
- "You escape the cramped confines of [src]!")
+ visible_message(span_notice("You see [user] burst out of [src]!"), \
+ span_notice("You escape the cramped confines of [src]!"))
open_machine()
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
if(state_open && is_operational())
if(istype(I, /obj/item/clothing/suit))
if(suit)
- to_chat(user, "The unit already contains a suit!.")
+ to_chat(user, span_warning("The unit already contains a suit!."))
return
if(!user.transferItemToLoc(I, src))
return
suit = I
else if(istype(I, /obj/item/clothing/head))
if(helmet)
- to_chat(user, "The unit already contains a helmet!")
+ to_chat(user, span_warning("The unit already contains a helmet!"))
return
if(!user.transferItemToLoc(I, src))
return
helmet = I
else if(istype(I, /obj/item/clothing/mask))
if(mask)
- to_chat(user, "The unit already contains a mask!")
+ to_chat(user, span_warning("The unit already contains a mask!"))
return
if(!user.transferItemToLoc(I, src))
return
mask = I
else
if(storage)
- to_chat(user, "The auxiliary storage compartment is full!")
+ to_chat(user, span_warning("The auxiliary storage compartment is full!"))
return
if(!user.transferItemToLoc(I, src))
return
storage = I
- visible_message("[user] inserts [I] into [src].", "You load [I] into [src].")
+ visible_message(span_notice("[user] inserts [I] into [src]."), span_notice("You load [I] into [src]."))
update_icon()
return
@@ -380,7 +380,7 @@
. = !(state_open || panel_open || is_operational() || locked || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
if(.)
I.play_tool_sound(src, 50)
- visible_message("[usr] pries open \the [src].", "You pry open \the [src].")
+ visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open \the [src]."))
open_machine()
/obj/machinery/suit_storage_unit/ui_interact(mob/user, datum/tgui/ui)
@@ -443,7 +443,7 @@
else
if(occupant)
var/mob/living/mob_occupant = occupant
- to_chat(mob_occupant, "[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!")
+ to_chat(mob_occupant, span_userdanger("[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!"))
cook()
. = TRUE
if("dispense")
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 3683fe5fb7f6..82dd5ab0aa33 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -21,7 +21,7 @@
/obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null)
if(surplus() < 1500)
if(user)
- to_chat(user, "The connected wire doesn't have enough current.")
+ to_chat(user, span_notice("The connected wire doesn't have enough current."))
return
for(var/obj/singularity/singulo in GLOB.singularities)
if(singulo.z == z)
@@ -29,7 +29,7 @@
icon_state = "[icontype]1"
active = 1
if(user)
- to_chat(user, "You activate the beacon.")
+ to_chat(user, span_notice("You activate the beacon."))
/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null)
@@ -39,7 +39,7 @@
icon_state = "[icontype]0"
active = 0
if(user)
- to_chat(user, "You deactivate the beacon.")
+ to_chat(user, span_notice("You deactivate the beacon."))
/obj/machinery/power/singularity_beacon/attack_ai(mob/user)
@@ -53,25 +53,25 @@
if(anchored)
return active ? Deactivate(user) : Activate(user)
else
- to_chat(user, "You need to screw the beacon to the floor first!")
+ to_chat(user, span_warning("You need to screw the beacon to the floor first!"))
/obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_SCREWDRIVER)
if(active)
- to_chat(user, "You need to deactivate the beacon first!")
+ to_chat(user, span_warning("You need to deactivate the beacon first!"))
return
if(anchored)
setAnchored(FALSE)
- to_chat(user, "You unscrew the beacon from the floor.")
+ to_chat(user, span_notice("You unscrew the beacon from the floor."))
disconnect_from_network()
return
else
if(!connect_to_network())
- to_chat(user, "This device must be placed over an exposed, powered cable node!")
+ to_chat(user, span_warning("This device must be placed over an exposed, powered cable node!"))
return
setAnchored(TRUE)
- to_chat(user, "You screw the beacon to the floor and attach the cable.")
+ to_chat(user, span_notice("You screw the beacon to the floor and attach the cable."))
return
else
return ..()
@@ -116,7 +116,7 @@
/obj/item/sbeacondrop/attack_self(mob/user)
if(user)
- to_chat(user, "Locked In.")
+ to_chat(user, span_notice("Locked In."))
new droptype( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
qdel(src)
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 9b4c581e3c68..768793b418df 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -112,25 +112,25 @@
if(I.tool_behaviour == TOOL_WRENCH && can_unanchor)
if(!anchored)
if(!isturf(loc) || isspaceturf(loc))
- to_chat(user, "The bomb must be placed on solid ground to attach it.")
+ to_chat(user, span_notice("The bomb must be placed on solid ground to attach it."))
else
- to_chat(user, "You firmly wrench the bomb to the floor.")
+ to_chat(user, span_notice("You firmly wrench the bomb to the floor."))
I.play_tool_sound(src)
setAnchored(TRUE)
if(active)
- to_chat(user, "The bolts lock in place.")
+ to_chat(user, span_notice("The bolts lock in place."))
else
if(!active)
- to_chat(user, "You wrench the bomb from the floor.")
+ to_chat(user, span_notice("You wrench the bomb from the floor."))
I.play_tool_sound(src)
setAnchored(FALSE)
else
- to_chat(user, "The bolts are locked down!")
+ to_chat(user, span_warning("The bolts are locked down!"))
else if(I.tool_behaviour == TOOL_SCREWDRIVER)
open_panel = !open_panel
update_icon()
- to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.")
+ to_chat(user, span_notice("You [open_panel ? "open" : "close"] the wire panel."))
else if(is_wire_tool(I) && open_panel)
wires.interact(user)
@@ -138,23 +138,23 @@
else if(I.tool_behaviour == TOOL_CROWBAR)
if(open_panel && wires.is_all_cut())
if(payload)
- to_chat(user, "You carefully pry out [payload].")
+ to_chat(user, span_notice("You carefully pry out [payload]."))
payload.forceMove(drop_location())
payload = null
else
- to_chat(user, "There isn't anything in here to remove!")
+ to_chat(user, span_warning("There isn't anything in here to remove!"))
else if (open_panel)
- to_chat(user, "The wires connecting the shell to the explosives are holding it down!")
+ to_chat(user, span_warning("The wires connecting the shell to the explosives are holding it down!"))
else
- to_chat(user, "The cover is screwed on, it won't pry off!")
+ to_chat(user, span_warning("The cover is screwed on, it won't pry off!"))
else if(istype(I, /obj/item/bombcore))
if(!payload)
if(!user.transferItemToLoc(I, src))
return
payload = I
- to_chat(user, "You place [payload] into [src].")
+ to_chat(user, span_notice("You place [payload] into [src]."))
else
- to_chat(user, "[payload] is already loaded into [src]! You'll have to remove it first.")
+ to_chat(user, span_warning("[payload] is already loaded into [src]! You'll have to remove it first."))
else if(I.tool_behaviour == TOOL_WELDER)
if(payload || !wires.is_all_cut() || !open_panel)
return
@@ -162,16 +162,16 @@
if(!I.tool_start_check(user, amount=5)) //uses up 5 fuel
return
- to_chat(user, "You start to cut [src] apart...")
+ to_chat(user, span_notice("You start to cut [src] apart..."))
if(I.use_tool(src, user, 20, volume=50, amount=5)) //uses up 5 fuel
- to_chat(user, "You cut [src] apart.")
+ to_chat(user, span_notice("You cut [src] apart."))
new /obj/item/stack/sheet/plasteel( loc, 5)
qdel(src)
else
var/old_integ = obj_integrity
. = ..()
if((old_integ > obj_integrity) && active && (payload in src))
- to_chat(user, "That seems like a really bad idea...")
+ to_chat(user, span_warning("That seems like a really bad idea..."))
/obj/machinery/syndicatebomb/interact(mob/user)
wires.interact(user)
@@ -179,7 +179,7 @@
if(!active)
settings(user)
else if(anchored)
- to_chat(user, "The bomb is bolted to the floor!")
+ to_chat(user, span_warning("The bomb is bolted to the floor!"))
/obj/machinery/syndicatebomb/proc/activate()
active = TRUE
@@ -194,10 +194,10 @@
var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num
if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station
timer_set = clamp(new_timer, minimum_timer, maximum_timer)
- loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.")
+ loc.visible_message(span_notice("[icon2html(src, viewers(src))] timer set for [timer_set] seconds."))
if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user))
if(!active)
- visible_message("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area.")
+ visible_message(span_danger("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area."))
activate()
update_icon()
add_fingerprint(user)
@@ -312,7 +312,7 @@
var/obj/machinery/syndicatebomb/holder = loc
if(istype(holder))
attempts++
- holder.loc.visible_message("[icon2html(holder, viewers(holder))] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...")
+ holder.loc.visible_message(span_danger("[icon2html(holder, viewers(holder))] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires..."))
reset()
else
qdel(src)
@@ -322,7 +322,7 @@
if(istype(holder))
attempts++
defusals++
- holder.loc.visible_message("[icon2html(holder, viewers(holder))] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds...")
+ holder.loc.visible_message(span_notice("[icon2html(holder, viewers(holder))] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds..."))
sleep(50) //Just in case someone is trying to remove the bomb core this gives them a little window to crowbar it out
if(istype(holder))
reset()
@@ -443,9 +443,9 @@
if(!user.transferItemToLoc(I, src))
return
beakers += I
- to_chat(user, "You load [src] with [I].")
+ to_chat(user, span_notice("You load [src] with [I]."))
else
- to_chat(user, "[I] won't fit! \The [src] can only hold up to [max_beakers] containers.")
+ to_chat(user, span_warning("[I] won't fit! \The [src] can only hold up to [max_beakers] containers."))
return
..()
@@ -527,7 +527,7 @@
detonated++
existent++
playsound(user, 'sound/machines/click.ogg', 20, 1)
- to_chat(user, "[existent] found, [detonated] triggered.")
+ to_chat(user, span_notice("[existent] found, [detonated] triggered."))
if(detonated)
detonated--
log_bomber(user, "remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a", src)
diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm
index feece3aabe87..94ebf9bbff2a 100644
--- a/code/game/machinery/telecomms/computers/logbrowser.dm
+++ b/code/game/machinery/telecomms/computers/logbrowser.dm
@@ -177,7 +177,7 @@
if(href_list["delete"])
if(!src.allowed(usr) && !(obj_flags & EMAGGED))
- to_chat(usr, "ACCESS DENIED.")
+ to_chat(usr, span_danger("ACCESS DENIED."))
return
if(SelectedServer)
diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm
index 41efb704def1..ba3673650cf4 100644
--- a/code/game/machinery/telecomms/computers/message.dm
+++ b/code/game/machinery/telecomms/computers/message.dm
@@ -22,14 +22,14 @@
//Sparks effect - For emag
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
//Messages - Saves me time if I want to change something.
- var/noserver = "ALERT: No server detected."
- var/incorrectkey = "ALERT: Incorrect decryption key!"
- var/defaultmsg = "Welcome. Please select an option."
- var/rebootmsg = "%$&(£: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!"
+ var/noserver = span_alert("ALERT: No server detected.")
+ var/incorrectkey = span_warning("ALERT: Incorrect decryption key!")
+ var/defaultmsg = span_notice("Welcome. Please select an option.")
+ var/rebootmsg = span_warning("%$&(£: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!")
//Computer properties
var/screen = MSG_MON_SCREEN_MAIN // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message
var/hacking = FALSE // Is it being hacked into by the AI/Cyborg
- var/message = "System bootup complete. Please select an option." // The message that shows on the main menu.
+ var/message = span_notice("System bootup complete. Please select an option.") // The message that shows on the main menu.
var/auth = FALSE // Are they authenticated?
var/optioncount = 7
// Custom Message Properties
@@ -43,7 +43,7 @@
/obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params)
if(O.tool_behaviour == TOOL_SCREWDRIVER && (obj_flags & EMAGGED))
//Stops people from just unscrewing the monitor and putting it back to get the console working again.
- to_chat(user, "It is too hot to mess with!")
+ to_chat(user, span_warning("It is too hot to mess with!"))
else
return ..()
@@ -62,7 +62,7 @@
addtimer(CALLBACK(src, .proc/UnmagConsole), time)
message = rebootmsg
else
- to_chat(user, "A no server error appears on the screen.")
+ to_chat(user, span_notice("A no server error appears on the screen."))
/obj/machinery/computer/message_monitor/New()
..()
@@ -132,9 +132,9 @@
//Bottom message
if(!auth)
- dat += "
Please authenticate with the server in order to show additional options."
+ dat += "
[span_notice("Please authenticate with the server in order to show additional options.")]"
else
- dat += "
Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties."
+ dat += "
[span_warning("Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties.")]"
//Message Logs
if(MSG_MON_SCREEN_LOGS)
@@ -243,10 +243,10 @@
/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user)
if(isnull(linkedServer))
- to_chat(user, "Could not complete brute-force: Linked Server Disconnected!")
+ to_chat(user, span_warning("Could not complete brute-force: Linked Server Disconnected!"))
else
var/currentKey = linkedServer.decryptkey
- to_chat(user, "Brute-force completed! The key is '[currentKey]'.")
+ to_chat(user, span_warning("Brute-force completed! The key is '[currentKey]'."))
hacking = FALSE
screen = MSG_MON_SCREEN_MAIN // Return the screen back to normal
@@ -293,10 +293,10 @@
if(message_servers.len > 1)
linkedServer = input(usr, "Please select a server.", "Select a server.", null) as null|anything in message_servers
- message = "NOTICE: Server selected."
+ message = span_alert("NOTICE: Server selected.")
else if(message_servers.len > 0)
linkedServer = message_servers[1]
- message = "NOTICE: Only Single Server Detected - Server selected."
+ message = span_notice("NOTICE: Only Single Server Detected - Server selected.")
else
message = noserver
@@ -313,14 +313,14 @@
message = noserver
else if(auth)
linkedServer.pda_msgs = list()
- message = "NOTICE: Logs cleared."
+ message = span_notice("NOTICE: Logs cleared.")
//Clears the request console logs - KEY REQUIRED
if (href_list["clear_requests"])
if(LINKED_SERVER_NONRESPONSIVE)
message = noserver
else if(auth)
linkedServer.rc_msgs = list()
- message = "NOTICE: Logs cleared."
+ message = span_notice("NOTICE: Logs cleared.")
//Change the password - KEY REQUIRED
if (href_list["pass"])
if(LINKED_SERVER_NONRESPONSIVE)
@@ -331,12 +331,12 @@
if(linkedServer.decryptkey == dkey)
var/newkey = stripped_input(usr,"Please enter the new key (3 - 16 characters max):")
if(length(newkey) <= 3)
- message = "NOTICE: Decryption key too short!"
+ message = span_notice("NOTICE: Decryption key too short!")
else if(length(newkey) > 16)
- message = "NOTICE: Decryption key too long!"
+ message = span_notice("NOTICE: Decryption key too long!")
else if(newkey && newkey != "")
linkedServer.decryptkey = newkey
- message = "NOTICE: Decryption key set."
+ message = span_notice("NOTICE: Decryption key set.")
else
message = incorrectkey
@@ -358,7 +358,7 @@
message = noserver
else //if(istype(href_list["delete_logs"], /datum/data_pda_msg))
linkedServer.pda_msgs -= locate(href_list["delete_logs"]) in linkedServer.pda_msgs
- message = "NOTICE: Log Deleted!"
+ message = span_notice("NOTICE: Log Deleted!")
//Delete the request console log.
if (href_list["delete_requests"])
//Are they on the view logs screen?
@@ -367,7 +367,7 @@
message = noserver
else //if(istype(href_list["delete_logs"], /datum/data_pda_msg))
linkedServer.rc_msgs -= locate(href_list["delete_requests"]) in linkedServer.rc_msgs
- message = "NOTICE: Log Deleted!"
+ message = span_notice("NOTICE: Log Deleted!")
//Create a custom message
if (href_list["msg"])
if(LINKED_SERVER_NONRESPONSIVE)
@@ -413,11 +413,11 @@
customsender = "UNKNOWN"
if(isnull(customrecepient))
- message = "NOTICE: No recepient selected!"
+ message = span_notice("NOTICE: No recepient selected!")
return attack_hand(usr)
if(isnull(custommessage) || custommessage == "")
- message = "NOTICE: No message entered!"
+ message = span_notice("NOTICE: No message entered!")
return attack_hand(usr)
var/datum/signal/subspace/messaging/pda/signal = new(src, list(
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 2048b2428b3e..6d959a6de2f9 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -101,7 +101,7 @@
if("id")
if(params["value"])
if(length(params["value"]) > 32)
- to_chat(operator, "Error: Machine ID too long!")
+ to_chat(operator, span_warning("Error: Machine ID too long!"))
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE)
return
else
@@ -111,7 +111,7 @@
if("network")
if(params["value"])
if(length(params["value"]) > 15)
- to_chat(operator, "Error: Network name too long!")
+ to_chat(operator, span_warning("Error: Network name too long!"))
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE)
return
else
@@ -127,7 +127,7 @@
if("freq")
var/newfreq = tempfreq
if(newfreq == FREQ_SYNDICATE)
- to_chat(operator, "Error: Interference preventing filtering frequency: \"[newfreq] GHz\"")
+ to_chat(operator, span_warning("Error: Interference preventing filtering frequency: \"[newfreq] GHz\""))
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE)
else
if(!(newfreq in freq_listening) && newfreq < 10000)
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index 0db00f29b737..1723b9d2a963 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -26,21 +26,21 @@
if(stored)
user.put_in_hands(stored)
stored = null
- to_chat(user, "You remove the blackbox from [src]. The tapes stop spinning.")
+ to_chat(user, span_notice("You remove the blackbox from [src]. The tapes stop spinning."))
update_icon()
return
else
- to_chat(user, "It seems that the blackbox is missing...")
+ to_chat(user, span_warning("It seems that the blackbox is missing..."))
return
/obj/machinery/blackbox_recorder/attackby(obj/item/I, mob/living/user, params)
. = ..()
if(istype(I, /obj/item/blackbox))
if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src))
- to_chat(user, "[I] is stuck to your hand!")
+ to_chat(user, span_warning("[I] is stuck to your hand!"))
return
- user.visible_message("[user] clicks [I] into [src]!", \
- "You press the device into [src], and it clicks into place. The tapes begin spinning again.")
+ user.visible_message(span_notice("[user] clicks [I] into [src]!"), \
+ span_notice("You press the device into [src], and it clicks into place. The tapes begin spinning again."))
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
stored = I
update_icon()
@@ -109,7 +109,7 @@
/obj/machinery/telecomms/message_server/examine(mob/user)
. = ..()
if(calibrating)
- . += "It's still calibrating."
+ . += span_warning("It's still calibrating.")
/obj/machinery/telecomms/message_server/proc/GenerateKey()
var/newKey
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index ae227a1a8354..26ef12cd4caf 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -196,5 +196,5 @@ GLOBAL_LIST_EMPTY(telecomms_list)
/obj/machinery/telecomms/emag_act()
obj_flags |= EMAGGED
- visible_message("Sparks fly out of the [src]!")
+ visible_message(span_notice("Sparks fly out of the [src]!"))
traffic += 50
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 3b8e0144bc81..ffd2b23768f6 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -70,7 +70,7 @@
return
if (QDELETED(com.target))
com.target = null
- visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.")
+ visible_message(span_alert("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix."))
return
if (ismovable(M))
if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE))
@@ -80,7 +80,7 @@
if(ishuman(M))//don't remove people from the round randomly you jerks
var/mob/living/carbon/human/human = M
if(human.dna && human.dna.species.id == "human")
- to_chat(M, "You hear a buzzing in your ears.")
+ to_chat(M, span_italics("You hear a buzzing in your ears."))
human.set_species(/datum/species/fly)
human.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0)
@@ -131,9 +131,9 @@
/obj/machinery/teleport/station/examine(mob/user)
. = ..()
if(!panel_open)
- . += "The panel is screwed in, obstructing the linking device and wiring panel."
+ . += span_notice("The panel is screwed in, obstructing the linking device and wiring panel.")
else
- . += "The linking device is now able to be scanned with a multitool.
The wiring can be connected to a nearby console and hub with a pair of wirecutters."
+ . += span_notice("The linking device is now able to be scanned with a multitool.
The wiring can be connected to a nearby console and hub with a pair of wirecutters.")
if(in_range(user, src) || isobserver(user))
. += "The status display reads: This station can be linked to [efficiency] other station(s)."
@@ -168,15 +168,15 @@
var/obj/item/multitool/M = W
if(panel_open)
M.buffer = src
- to_chat(user, "You download the data to the [W.name]'s buffer.")
+ to_chat(user, span_caution("You download the data to the [W.name]'s buffer."))
else
if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src)
if(linked_stations.len < efficiency)
linked_stations.Add(M.buffer)
M.buffer = null
- to_chat(user, "You upload the data from the [W.name]'s buffer.")
+ to_chat(user, span_caution("You upload the data from the [W.name]'s buffer."))
else
- to_chat(user, "This station can't hold more information, try to use better parts.")
+ to_chat(user, span_alert("This station can't hold more information, try to use better parts."))
return
else if(default_deconstruction_screwdriver(user, "controller-o", "controller", W))
update_icon()
@@ -188,7 +188,7 @@
else if(W.tool_behaviour == TOOL_WIRECUTTER)
if(panel_open)
link_console_and_hub()
- to_chat(user, "You reconnect the station to nearby machinery.")
+ to_chat(user, span_caution("You reconnect the station to nearby machinery."))
return
else
return ..()
@@ -201,13 +201,13 @@
return
if (teleporter_console.target)
if(teleporter_hub.panel_open || teleporter_hub.stat & (BROKEN|NOPOWER))
- to_chat(user, "The teleporter hub isn't responding.")
+ to_chat(user, span_alert("The teleporter hub isn't responding."))
else
engaged = !engaged
use_power(5000)
- to_chat(user, "Teleporter [engaged ? "" : "dis"]engaged!")
+ to_chat(user, span_notice("Teleporter [engaged ? "" : "dis"]engaged!"))
else
- to_chat(user, "No target detected.")
+ to_chat(user, span_alert("No target detected."))
engaged = FALSE
teleporter_hub.update_icon()
add_fingerprint(user)
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 20ec0d437b1e..ef35c679d10c 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -12,7 +12,7 @@
/obj/machinery/washing_machine/examine(mob/user)
. = ..()
- . += "Alt-click it to start a wash cycle."
+ . += span_notice("Alt-click it to start a wash cycle.")
/obj/machinery/washing_machine/AltClick(mob/user)
if(!user.canUseTopic(src, !issilicon(user)))
@@ -22,11 +22,11 @@
return
if(state_open)
- to_chat(user, "Close the door first")
+ to_chat(user, span_notice("Close the door first"))
return
if(bloody_mess)
- to_chat(user, "[src] must be cleaned up first.")
+ to_chat(user, span_warning("[src] must be cleaned up first."))
return
busy = TRUE
@@ -248,19 +248,19 @@
else if(user.a_intent != INTENT_HARM)
if (!state_open)
- to_chat(user, "Open the door first!")
+ to_chat(user, span_warning("Open the door first!"))
return 1
if(bloody_mess)
- to_chat(user, "[src] must be cleaned up first.")
+ to_chat(user, span_warning("[src] must be cleaned up first."))
return 1
if(contents.len >= max_wash_capacity)
- to_chat(user, "The washing machine is full!")
+ to_chat(user, span_warning("The washing machine is full!"))
return 1
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to your hand, you cannot put it in the washing machine!")
+ to_chat(user, span_warning("\The [W] is stuck to your hand, you cannot put it in the washing machine!"))
return 1
if(istype(W, /obj/item/toy/crayon) || istype(W, /obj/item/stamp) || istype(W, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower) || istype(W, /obj/item/stack/ore/bluespace_crystal))
@@ -275,7 +275,7 @@
if(.)
return
if(busy)
- to_chat(user, "[src] is busy.")
+ to_chat(user, span_warning("[src] is busy."))
return
if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling))
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 9559c9e9da69..b7449b69d779 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -40,7 +40,7 @@
src.update_chassis_page()
log_message("[src] is destroyed.", LOG_MECHA)
if(chassis.occupant)
- chassis.occupant_message("[src] is destroyed!")
+ chassis.occupant_message(span_danger("[src] is destroyed!"))
chassis.occupant.playsound_local(chassis, destroy_sound, 50)
chassis = null
return ..()
@@ -50,9 +50,9 @@
if(!user.temporarilyRemoveItemFromInventory(src))
return FALSE
attach(M)
- user.visible_message("[user] attaches [src] to [M].", "You attach [src] to [M].")
+ user.visible_message("[user] attaches [src] to [M].", span_notice("You attach [src] to [M]."))
return TRUE
- to_chat(user, "You are unable to attach [src] to [M]!")
+ to_chat(user, span_warning("You are unable to attach [src] to [M]!"))
return FALSE
/obj/item/mecha_parts/mecha_equipment/proc/get_equip_info()
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 02f2b51c9b79..15ba85f5b76b 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -55,8 +55,8 @@
return
if(!patient_insertion_check(target))
return
- occupant_message("You start putting [target] into [src]...")
- chassis.visible_message("[chassis] starts putting [target] into \the [src].")
+ occupant_message(span_notice("You start putting [target] into [src]..."))
+ chassis.visible_message(span_warning("[chassis] starts putting [target] into \the [src]."))
if(do_after_cooldown(target))
if(!patient_insertion_check(target))
return
@@ -64,19 +64,19 @@
patient = target
START_PROCESSING(SSobj, src)
update_equip_info()
- occupant_message("[target] successfully loaded into [src]. Life support functions engaged.")
- chassis.visible_message("[chassis] loads [target] into [src].")
+ occupant_message(span_notice("[target] successfully loaded into [src]. Life support functions engaged."))
+ chassis.visible_message(span_warning("[chassis] loads [target] into [src]."))
log_message("[target] loaded. Life support functions engaged.", LOG_MECHA)
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target)
if(target.buckled)
- occupant_message("[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!")
+ occupant_message(span_warning("[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!"))
return
if(target.has_buckled_mobs())
- occupant_message("[target] will not fit into the sleeper because of the creatures attached to it!")
+ occupant_message(span_warning("[target] will not fit into the sleeper because of the creatures attached to it!"))
return
if(patient)
- occupant_message("The sleeper is already occupied!")
+ occupant_message(span_warning("The sleeper is already occupied!"))
return
return 1
@@ -92,7 +92,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/detach()
if(patient)
- occupant_message("Unable to detach [src] - equipment occupied!")
+ occupant_message(span_warning("Unable to detach [src] - equipment occupied!"))
return
STOP_PROCESSING(SSobj, src)
return ..()
@@ -168,9 +168,9 @@
Respiratory Damage: [patient.getOxyLoss()]%
Toxin Content: [patient.getToxLoss()]%
Burn Severity: [patient.getFireLoss()]%
- [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
- [patient.getOrganLoss(ORGAN_SLOT_BRAIN) ? "Significant brain damage detected." : ""]
- [length(patient.get_traumas()) ? "Brain Traumas detected." : ""]
+ [span_danger("[patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]")]
+ [span_danger("[patient.getOrganLoss(ORGAN_SLOT_BRAIN) ? "Significant brain damage detected." : ""]")]
+ [span_danger("[length(patient.get_traumas()) ? "Brain Traumas detected." : ""]")]
"}
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_reagents()
@@ -299,10 +299,10 @@
if(mode)
return analyze_reagents(target)
if(!syringes.len)
- occupant_message("No syringes loaded.")
+ occupant_message(span_alert("No syringes loaded."))
return
if(reagents.total_volume<=0)
- occupant_message("No available reagents to load syringe with.")
+ occupant_message(span_alert("No available reagents to load syringe with."))
return
var/turf/trg = get_turf(target)
var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1]
@@ -326,7 +326,7 @@
var/mob/living/carbon/M = safepick(mobs)
if(M)
var/R
- mechsyringe.visible_message(" [M] was hit by the syringe!")
+ mechsyringe.visible_message(span_attack(" [M] was hit by the syringe!"))
if(M.can_inject(null, 1))
if(mechsyringe.reagents)
for(var/datum/reagent/A in mechsyringe.reagents.reagent_list)
@@ -476,7 +476,7 @@
occupant_message("The object is too far away.")
return 0
if(!A.reagents || ismob(A))
- occupant_message("No reagent info gained from [A].")
+ occupant_message(span_alert("No reagent info gained from [A]."))
return 0
occupant_message("Analyzing reagents...")
for(var/datum/reagent/R in A.reagents.reagent_list)
diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm
index bae8f5046cfb..df17aace31fa 100644
--- a/code/game/mecha/equipment/tools/mining_tools.dm
+++ b/code/game/mecha/equipment/tools/mining_tools.dm
@@ -29,9 +29,9 @@
var/obj/target_obj = target
if(target_obj.resistance_flags & UNACIDABLE)
return
- target.visible_message("[chassis] starts to drill [target].", \
- "[chassis] starts to drill [target]...", \
- "You hear drilling.")
+ target.visible_message(span_warning("[chassis] starts to drill [target]."), \
+ span_userdanger("[chassis] starts to drill [target]..."), \
+ span_italics("You hear drilling."))
if(do_after_cooldown(target))
set_ready_state(FALSE)
@@ -68,7 +68,7 @@
drill.log_message("Drilled through [src]", LOG_MECHA)
dismantle_wall(TRUE, FALSE)
else
- drill.occupant_message("[src] is too durable to drill through.")
+ drill.occupant_message(span_danger("[src] is too durable to drill through."))
/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
for(var/turf/closed/mineral/M in range(drill.chassis,1))
@@ -107,8 +107,8 @@
butchering.butchering_enabled = FALSE
/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user)
- target.visible_message("[chassis] is drilling [target] with [src]!", \
- "[chassis] is drilling you with [src]!")
+ target.visible_message(span_danger("[chassis] is drilling [target] with [src]!"), \
+ span_userdanger("[chassis] is drilling you with [src]!"))
log_combat(user, target, "drilled", "[name]", "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
if(target.stat == DEAD && target.getBruteLoss() >= 200)
log_combat(user, target, "gibbed", name)
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index 60c8627d4480..401b4e54acd0 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -422,7 +422,7 @@
occupant_message("Unit is full.")
return 0
else
- occupant_message("[fuel] traces in target minimal! [P] cannot be used as fuel.")
+ occupant_message(span_warning("[fuel] traces in target minimal! [P] cannot be used as fuel."))
return
/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params)
diff --git a/code/game/mecha/equipment/tools/weapon_bay.dm b/code/game/mecha/equipment/tools/weapon_bay.dm
index 1b3db529cc5a..e1d1e1034966 100644
--- a/code/game/mecha/equipment/tools/weapon_bay.dm
+++ b/code/game/mecha/equipment/tools/weapon_bay.dm
@@ -6,9 +6,9 @@
/obj/item/mecha_parts/concealed_weapon_bay/try_attach_part(mob/user, obj/mecha/M)
if(istype(M, /obj/mecha/combat))
- to_chat(user, "[M] can already hold weapons!")
+ to_chat(user, span_warning("[M] can already hold weapons!"))
return
if(locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents)
- to_chat(user, "[M] already has a concealed weapon bay!")
+ to_chat(user, span_warning("[M] already has a concealed weapon bay!"))
return
..()
\ No newline at end of file
diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm
index 244bd50158df..2f43ffd01e74 100644
--- a/code/game/mecha/equipment/tools/work_tools.dm
+++ b/code/game/mecha/equipment/tools/work_tools.dm
@@ -63,14 +63,14 @@
cargo_holder.cargo += O
O.forceMove(chassis)
O.anchored = FALSE
- occupant_message("[target] successfully loaded.")
+ occupant_message(span_notice("[target] successfully loaded."))
log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA)
else
O.anchored = initial(O.anchored)
else
- occupant_message("Not enough room in cargo compartment!")
+ occupant_message(span_warning("Not enough room in cargo compartment!"))
else
- occupant_message("[target] is firmly secured!")
+ occupant_message(span_warning("[target] is firmly secured!"))
else if(isliving(target))
var/mob/living/M = target
@@ -82,9 +82,9 @@
return
M.adjustOxyLoss(round(dam_force/2))
M.updatehealth()
- target.visible_message("[chassis] squeezes [target].", \
- "[chassis] squeezes [target].",\
- "You hear something crack.")
+ target.visible_message(span_danger("[chassis] squeezes [target]."), \
+ span_userdanger("[chassis] squeezes [target]."),\
+ span_italics("You hear something crack."))
log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])")
else
step_away(M,chassis)
@@ -123,14 +123,14 @@
cargo_holder.cargo += O
O.forceMove(chassis)
O.anchored = FALSE
- occupant_message("[target] successfully loaded.")
+ occupant_message(span_notice("[target] successfully loaded."))
log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA)
else
O.anchored = initial(O.anchored)
else
- occupant_message("Not enough room in cargo compartment!")
+ occupant_message(span_warning("Not enough room in cargo compartment!"))
else
- occupant_message("[target] is firmly secured!")
+ occupant_message(span_warning("[target] is firmly secured!"))
else if(isliving(target))
var/mob/living/M = target
@@ -143,12 +143,12 @@
return
M.adjustOxyLoss(round(dam_force/2))
M.updatehealth()
- target.visible_message("[chassis] destroys [target] in an unholy fury.", \
- "[chassis] destroys [target] in an unholy fury.")
+ target.visible_message(span_danger("[chassis] destroys [target] in an unholy fury."), \
+ span_userdanger("[chassis] destroys [target] in an unholy fury."))
log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])")
else
- target.visible_message("[chassis] destroys [target] in an unholy fury.", \
- "[chassis] destroys [target] in an unholy fury.")
+ target.visible_message(span_danger("[chassis] destroys [target] in an unholy fury."), \
+ span_userdanger("[chassis] destroys [target] in an unholy fury."))
else if(chassis.occupant.a_intent == INTENT_DISARM)
if(real_clamp)
var/mob/living/carbon/C = target
@@ -166,12 +166,12 @@
limbs_gone = "[limbs_gone], [affected]"
if(play_sound)
playsound(src, get_dismember_sound(), 80, TRUE)
- target.visible_message("[chassis] rips [target]'s arms off.", \
- "[chassis] rips [target]'s arms off.")
+ target.visible_message(span_danger("[chassis] rips [target]'s arms off."), \
+ span_userdanger("[chassis] rips [target]'s arms off."))
log_combat(chassis.occupant, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])")
else
- target.visible_message("[chassis] rips [target]'s arms off.", \
- "[chassis] rips [target]'s arms off.")
+ target.visible_message(span_danger("[chassis] rips [target]'s arms off."), \
+ span_userdanger("[chassis] rips [target]'s arms off."))
else
step_away(M,chassis)
target.visible_message("[chassis] tosses [target] like a piece of paper.")
@@ -199,7 +199,7 @@
if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
var/obj/structure/reagent_dispensers/watertank/WT = target
WT.reagents.trans_to(src, 1000)
- occupant_message("Extinguisher refilled.")
+ occupant_message(span_notice("Extinguisher refilled."))
playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6)
else
if(reagents.total_volume > 0)
@@ -394,12 +394,12 @@
cable = new(src, 0)
cable.amount += to_load
target.use(to_load)
- occupant_message("[to_load] meters of cable successfully loaded.")
+ occupant_message(span_notice("[to_load] meters of cable successfully loaded."))
send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
else
- occupant_message("Reel is full.")
+ occupant_message(span_warning("Reel is full."))
else
- occupant_message("Unable to load [target] - no cable found.")
+ occupant_message(span_warning("Unable to load [target] - no cable found."))
/obj/item/mecha_parts/mecha_equipment/cable_layer/Topic(href,href_list)
@@ -491,16 +491,16 @@
/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/mecha/working/ripley/M)
if(M.type != /obj/mecha/working/ripley)
- to_chat(loc, "This conversion kit can only be applied to APLU MK-I models.")
+ to_chat(loc, span_warning("This conversion kit can only be applied to APLU MK-I models."))
return FALSE
if(M.cargo.len)
- to_chat(loc, "[M]'s cargo hold must be empty before this conversion kit can be applied.")
+ to_chat(loc, span_warning("[M]'s cargo hold must be empty before this conversion kit can be applied."))
return FALSE
if(!M.maint_access) //non-removable upgrade, so lets make sure the pilot or owner has their say.
- to_chat(loc, "[M] must have maintenance protocols active in order to allow this conversion kit.")
+ to_chat(loc, span_warning("[M] must have maintenance protocols active in order to allow this conversion kit."))
return FALSE
if(M.occupant) //We're actualy making a new mech and swapping things over, it might get weird if players are involved
- to_chat(loc, "[M] must be unoccupied before this conversion kit can be applied.")
+ to_chat(loc, span_warning("[M] must be unoccupied before this conversion kit can be applied."))
return FALSE
return TRUE
diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/game/mecha/equipment/weapons/mecha_ammo.dm
index 6e151b800eeb..27508b8366dc 100644
--- a/code/game/mecha/equipment/weapons/mecha_ammo.dm
+++ b/code/game/mecha/equipment/weapons/mecha_ammo.dm
@@ -21,10 +21,10 @@
/obj/item/mecha_ammo/attack_self(mob/user)
..()
if(rounds)
- to_chat(user, "You cannot flatten the ammo box until it's empty!")
+ to_chat(user, span_warning("You cannot flatten the ammo box until it's empty!"))
return
- to_chat(user, "You fold [src] flat.")
+ to_chat(user, span_notice("You fold [src] flat."))
var/I = new /obj/item/stack/sheet/metal(user.loc)
qdel(src)
user.put_in_hands(I)
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 67e6d565e7c9..cddd27e003be 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -99,7 +99,7 @@
/obj/machinery/mecha_part_fabricator/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
- . += "The status display reads: Storing up to [rmat.local_size] material units.
Material consumption at [component_coeff*100]%.
Build time reduced by [100-time_coeff*100]%."
+ . += span_notice("The status display reads: Storing up to [rmat.local_size] material units.
Material consumption at [component_coeff*100]%.
Build time reduced by [100-time_coeff*100]%.")
/**
* Generates an info list for a given part.
@@ -623,7 +623,7 @@
if(..())
return TRUE
if(being_built)
- to_chat(user, "\The [src] is currently processing! Please wait until completion.")
+ to_chat(user, span_warning("\The [src] is currently processing! Please wait until completion."))
return FALSE
return default_deconstruction_screwdriver(user, "fab-o", "fab-idle", I)
@@ -631,16 +631,16 @@
if(..())
return TRUE
if(being_built)
- to_chat(user, "\The [src] is currently processing! Please wait until completion.")
+ to_chat(user, span_warning("\The [src] is currently processing! Please wait until completion."))
return FALSE
return default_deconstruction_crowbar(I)
/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user)
if(panel_open)
- to_chat(user, "You can't load [src] while it's opened!")
+ to_chat(user, span_warning("You can't load [src] while it's opened!"))
return FALSE
if(being_built)
- to_chat(user, "\The [src] is currently processing! Please wait until completion.")
+ to_chat(user, span_warning("\The [src] is currently processing! Please wait until completion."))
return FALSE
return TRUE
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index e27b8780bc66..e6264eeb35e9 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -328,7 +328,7 @@
var/mob/living/carbon/human/H = user
for(var/O in H.held_items)
if(istype(O, /obj/item/gun))
- . += "It looks like you can hit the pilot directly if you target the center or above."
+ . += span_warning("It looks like you can hit the pilot directly if you target the center or above.")
break //in case user is holding two guns
//processing internal damage, temperature, air regulation, alert updates, lights power use.
@@ -445,7 +445,7 @@
use_power(lights_energy_drain)
if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated.
- visible_message("[occupant] tumbles out of the cockpit!")
+ visible_message(span_warning("[occupant] tumbles out of the cockpit!"))
go_out() //Maybe we should install seat belts?
//Diagnostic HUD updates
@@ -495,7 +495,7 @@
if(user.incapacitated())
return
if(state)
- occupant_message("Maintenance protocols in effect.")
+ occupant_message(span_warning("Maintenance protocols in effect."))
return
if(!get_charge())
return
@@ -513,13 +513,13 @@
if(!Adjacent(target))
if(selected && selected.is_ranged())
if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful)
- to_chat(user, "You don't want to harm other living beings!")
+ to_chat(user, span_warning("You don't want to harm other living beings!"))
return
if(selected.action(target,params))
selected.start_cooldown()
else if(selected && selected.is_melee())
if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM))
- to_chat(user, "You don't want to harm other living beings!")
+ to_chat(user, span_warning("You don't want to harm other living beings!"))
return
if(selected.action(target,params))
selected.start_cooldown()
@@ -549,7 +549,7 @@
if(.)
events.fireEvent("onMove",get_turf(src))
if (internal_tank?.disconnect()) // Something moved us and broke connection
- occupant_message("Air port connection teared off!")
+ occupant_message(span_warning("Air port connection teared off!"))
log_message("Lost connection to gas port.", LOG_MECHA)
/obj/mecha/Process_Spacemove(var/movement_dir = 0)
@@ -564,7 +564,7 @@
if(istype(backup) && movement_dir && !backup.anchored)
if(backup.newtonian_move(turn(movement_dir, 180)))
if(occupant)
- to_chat(occupant, "You push off of [backup] to propel yourself.")
+ to_chat(occupant, span_info("You push off of [backup] to propel yourself."))
return TRUE
/obj/mecha/relaymove(mob/user,direction)
@@ -574,16 +574,16 @@
return
if(user != occupant) //While not "realistic", this piece is player friendly.
user.forceMove(get_turf(src))
- to_chat(user, "You climb out from [src].")
+ to_chat(user, span_notice("You climb out from [src]."))
return FALSE
if(internal_tank?.connected_port)
if(world.time - last_message > 20)
- occupant_message("Unable to move while connected to the air system port!")
+ occupant_message(span_warning("Unable to move while connected to the air system port!"))
last_message = world.time
return FALSE
if(state)
if(world.time - last_message > 20)
- occupant_message("Maintenance protocols in effect.")
+ occupant_message(span_danger("Maintenance protocols in effect."))
last_message = world.time
return
return domove(direction)
@@ -597,7 +597,7 @@
return FALSE
if(defence_mode)
if(world.time - last_message > 20)
- occupant_message("Unable to move while in defence mode")
+ occupant_message(span_danger("Unable to move while in defence mode"))
last_message = world.time
return FALSE
if(zoom_mode)
@@ -607,12 +607,12 @@
return FALSE
if(!cell)
if(world.time - last_message > 20)
- occupant_message("Missing power cell.")
+ occupant_message(span_warning("Missing power cell."))
last_message = world.time
return FALSE
if(!scanmod || !capacitor)
if(world.time - last_message > 20)
- occupant_message("Missing [scanmod? "capacitor" : "scanning module"].")
+ occupant_message(span_warning("Missing [scanmod? "capacitor" : "scanning module"]."))
last_message = world.time
return FALSE
@@ -658,7 +658,7 @@
/obj/mecha/Bump(var/atom/obstacle)
var/turf/newloc = get_step(src,dir)
if(newloc.flags_1 & NOJAUNT_1)
- to_chat(occupant, "Some strange aura is blocking the way.")
+ to_chat(occupant, span_warning("Some strange aura is blocking the way."))
return
if(phasing && get_charge() >= phasing_energy_drain && !throwing)
spawn()
@@ -726,11 +726,11 @@
if(internal_damage & int_dam_flag)
switch(int_dam_flag)
if(MECHA_INT_TEMP_CONTROL)
- occupant_message("Life support system reactivated.")
+ occupant_message(span_boldnotice("Life support system reactivated."))
if(MECHA_INT_FIRE)
- occupant_message("Internal fire extinquished.")
+ occupant_message(span_boldnotice("Internal fire extinquished."))
if(MECHA_INT_TANK_BREACH)
- occupant_message("Damaged internal tank has been sealed.")
+ occupant_message(span_boldnotice("Damaged internal tank has been sealed."))
internal_damage &= ~int_dam_flag
diag_hud_set_mechstat()
@@ -745,25 +745,25 @@
if(user.can_dominate_mechs)
examine(user) //Get diagnostic information!
for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)
- to_chat(user, "Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:")
+ to_chat(user, span_danger("Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:"))
to_chat(user, "[B.get_mecha_info()]")
break
//Nothing like a big, red link to make the player feel powerful!
- to_chat(user, "ASSUME DIRECT CONTROL?
")
+ to_chat(user, "[span_userdanger("ASSUME DIRECT CONTROL?")]
")
else
examine(user)
if(occupant)
- to_chat(user, "This exosuit has a pilot and cannot be controlled.")
+ to_chat(user, span_warning("This exosuit has a pilot and cannot be controlled."))
return
var/can_control_mech = FALSE
for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in trackers)
can_control_mech = TRUE
- to_chat(user, "[icon2html(src, user)] Status of [name]:\n[A.get_mecha_info()]")
+ to_chat(user, "[span_notice("[icon2html(src, user)] Status of [name]:")]\n[A.get_mecha_info()]")
break
if(!can_control_mech)
- to_chat(user, "You cannot control exosuits without AI control beacons installed.")
+ to_chat(user, span_warning("You cannot control exosuits without AI control beacons installed."))
return
- to_chat(user, "Take control of exosuit?
")
+ to_chat(user, "[span_boldnotice("Take control of exosuit?")]
")
/obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
if(!..())
@@ -773,11 +773,11 @@
switch(interaction)
if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card.
if(!state) //Mech must be in maint mode to allow carding.
- to_chat(user, "[name] must have maintenance protocols active in order to allow a transfer.")
+ to_chat(user, span_warning("[name] must have maintenance protocols active in order to allow a transfer."))
return
AI = occupant
if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot
- to_chat(user, "No AI detected in the [name] onboard computer.")
+ to_chat(user, span_warning("No AI detected in the [name] onboard computer."))
return
AI.ai_restore_power()//So the AI initially has power.
AI.control_disabled = TRUE
@@ -792,33 +792,33 @@
AI.remote_control = null
icon_state = initial(icon_state)+"-open"
to_chat(AI, "You have been downloaded to a mobile storage device. Wireless connection offline.")
- to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.")
+ to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.")
if(AI_MECH_HACK) //Called by AIs on the mech
AI.linked_core = new /obj/structure/AIcore/deactivated(AI.loc)
if(AI.can_dominate_mechs)
if(occupant) //Oh, I am sorry, were you using that?
- to_chat(AI, "Pilot detected! Forced ejection initiated!")
- to_chat(occupant, "You have been forcibly ejected!")
+ to_chat(AI, span_warning("Pilot detected! Forced ejection initiated!"))
+ to_chat(occupant, span_danger("You have been forcibly ejected!"))
go_out(1) //IT IS MINE, NOW. SUCK IT, RD!
ai_enter_mech(AI, interaction)
if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech.
AI = card.AI
if(!AI)
- to_chat(user, "There is no AI currently installed on this device.")
+ to_chat(user, span_warning("There is no AI currently installed on this device."))
return
if(AI.deployed_shell) //Recall AI if shelled so it can be checked for a client
AI.disconnect_shell()
if(AI.stat || !AI.client)
- to_chat(user, "[AI.name] is currently unresponsive, and cannot be uploaded.")
+ to_chat(user, span_warning("[AI.name] is currently unresponsive, and cannot be uploaded."))
return
if(occupant || dna_lock) //Normal AIs cannot steal mechs!
- to_chat(user, "Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].")
+ to_chat(user, span_warning("Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"]."))
return
AI.control_disabled = FALSE
AI.radio_enabled = TRUE
- to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
+ to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
card.AI = null
ai_enter_mech(AI, interaction)
@@ -838,8 +838,8 @@
AI.remote_control = src
AI.mobility_flags = ALL //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow.
AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES.
- to_chat(AI, AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" :\
- "You have been uploaded to a mech's onboard computer.")
+ to_chat(AI, AI.can_dominate_mechs ? span_announce("Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!") :\
+ span_notice("You have been uploaded to a mech's onboard computer."))
to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.")
if(interaction == AI_TRANS_FROM_CARD)
GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card
@@ -901,7 +901,7 @@
return
log_message("[user] tries to move in.", LOG_MECHA)
if (occupant)
- to_chat(usr, "The [name] is already occupied!")
+ to_chat(usr, span_warning("The [name] is already occupied!"))
log_message("Permission denied (Occupied).", LOG_MECHA)
return
if(dna_lock)
@@ -911,19 +911,19 @@
if(C.dna.unique_enzymes==dna_lock)
passed = TRUE
if (!passed)
- to_chat(user, "Access denied. [name] is secured with a DNA lock.")
+ to_chat(user, span_warning("Access denied. [name] is secured with a DNA lock."))
log_message("Permission denied (DNA LOCK).", LOG_MECHA)
return
if(!operation_allowed(user))
- to_chat(user, "Access denied. Insufficient operation keycodes.")
+ to_chat(user, span_warning("Access denied. Insufficient operation keycodes."))
log_message("Permission denied (No keycode).", LOG_MECHA)
return
if(user.buckled)
- to_chat(user, "You are currently buckled and cannot move.")
+ to_chat(user, span_warning("You are currently buckled and cannot move."))
log_message("Permission denied (Buckled).", LOG_MECHA)
return
if(user.has_buckled_mobs()) //mob attached to us
- to_chat(user, "You can't enter the exosuit with other creatures attached to you!")
+ to_chat(user, span_warning("You can't enter the exosuit with other creatures attached to you!"))
log_message("Permission denied (Attached mobs).", LOG_MECHA)
return
@@ -931,17 +931,17 @@
if(do_after(user, enter_delay, target = src))
if(obj_integrity <= 0)
- to_chat(user, "You cannot get in the [name], it has been destroyed!")
+ to_chat(user, span_warning("You cannot get in the [name], it has been destroyed!"))
else if(occupant)
- to_chat(user, "[occupant] was faster! Try better next time, loser.")
+ to_chat(user, span_danger("[occupant] was faster! Try better next time, loser."))
else if(user.buckled)
- to_chat(user, "You can't enter the exosuit while buckled.")
+ to_chat(user, span_warning("You can't enter the exosuit while buckled."))
else if(user.has_buckled_mobs())
- to_chat(user, "You can't enter the exosuit with other creatures attached to you!")
+ to_chat(user, span_warning("You can't enter the exosuit with other creatures attached to you!"))
else
moved_inside(user)
else
- to_chat(user, "You stop entering the exosuit!")
+ to_chat(user, span_warning("You stop entering the exosuit!"))
return
/obj/mecha/proc/moved_inside(mob/living/carbon/human/H)
@@ -964,40 +964,40 @@
/obj/mecha/proc/mmi_move_inside(obj/item/mmi/mmi_as_oc, mob/user)
if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
- to_chat(user, "Consciousness matrix not detected!")
+ to_chat(user, span_warning("Consciousness matrix not detected!"))
return FALSE
else if(mmi_as_oc.brainmob.stat)
- to_chat(user, "Beta-rhythm below acceptable level!")
+ to_chat(user, span_warning("Beta-rhythm below acceptable level!"))
return FALSE
else if(occupant)
- to_chat(user, "Occupant detected!")
+ to_chat(user, span_warning("Occupant detected!"))
return FALSE
else if(dna_lock && (!mmi_as_oc.brainmob.stored_dna || (dna_lock != mmi_as_oc.brainmob.stored_dna.unique_enzymes)))
- to_chat(user, "Access denied. [name] is secured with a DNA lock.")
+ to_chat(user, span_warning("Access denied. [name] is secured with a DNA lock."))
return FALSE
- visible_message("[user] starts to insert an MMI into [name].")
+ visible_message(span_notice("[user] starts to insert an MMI into [name]."))
if(do_after(user, 40, target = src))
if(!occupant)
return mmi_moved_inside(mmi_as_oc, user)
else
- to_chat(user, "Occupant detected!")
+ to_chat(user, span_warning("Occupant detected!"))
else
- to_chat(user, "You stop inserting the MMI.")
+ to_chat(user, span_notice("You stop inserting the MMI."))
return FALSE
/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
if(!(Adjacent(mmi_as_oc) && Adjacent(user)))
return FALSE
if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
- to_chat(user, "Consciousness matrix not detected!")
+ to_chat(user, span_notice("Consciousness matrix not detected!"))
return FALSE
else if(mmi_as_oc.brainmob.stat)
- to_chat(user, "Beta-rhythm below acceptable level!")
+ to_chat(user, span_warning("Beta-rhythm below acceptable level!"))
return FALSE
if(!user.transferItemToLoc(mmi_as_oc, src))
- to_chat(user, "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]!")
+ to_chat(user, span_warning("\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]!"))
return FALSE
var/mob/living/brainmob = mmi_as_oc.brainmob
mmi_as_oc.mecha = src
@@ -1072,10 +1072,10 @@
return
else
if(!AI.linked_core)
- to_chat(AI, "Inactive core destroyed. Unable to return.")
+ to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return."))
AI.linked_core = null
return
- to_chat(AI, "Returning to core...")
+ to_chat(AI, span_notice("Returning to core..."))
AI.controlled_mech = null
AI.remote_control = null
RemoveActions(occupant, 1)
@@ -1175,7 +1175,7 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
/obj/mecha/proc/ammo_resupply(var/obj/item/mecha_ammo/A, mob/user,var/fail_chat_override = FALSE)
if(!A.rounds)
if(!fail_chat_override)
- to_chat(user, "This box of ammo is empty!")
+ to_chat(user, span_warning("This box of ammo is empty!"))
return FALSE
var/ammo_needed
var/found_gun
@@ -1196,7 +1196,7 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
else
gun.projectiles_cache = gun.projectiles_cache + ammo_needed
playsound(get_turf(user),A.load_audio,50,1)
- to_chat(user, "You add [ammo_needed] [A.round_term][ammo_needed > 1?"s":""] to the [gun.name]")
+ to_chat(user, span_notice("You add [ammo_needed] [A.round_term][ammo_needed > 1?"s":""] to the [gun.name]"))
A.rounds = A.rounds - ammo_needed
A.update_name()
return TRUE
@@ -1207,13 +1207,13 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
else
gun.projectiles_cache = gun.projectiles_cache + A.rounds
playsound(get_turf(user),A.load_audio,50,1)
- to_chat(user, "You add [A.rounds] [A.round_term][A.rounds > 1?"s":""] to the [gun.name]")
+ to_chat(user, span_notice("You add [A.rounds] [A.round_term][A.rounds > 1?"s":""] to the [gun.name]"))
A.rounds = 0
A.update_name()
return TRUE
if(!fail_chat_override)
if(found_gun)
- to_chat(user, "You can't fit any more ammo of this type!")
+ to_chat(user, span_notice("You can't fit any more ammo of this type!"))
else
- to_chat(user, "None of the equipment on this exosuit can use this ammo!")
+ to_chat(user, span_notice("None of the equipment on this exosuit can use this ammo!"))
return FALSE
diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm
index 10903a42a9ac..00c67fd64be5 100644
--- a/code/game/mecha/mecha_actions.dm
+++ b/code/game/mecha/mecha_actions.dm
@@ -179,10 +179,10 @@
button_icon_state = "mech_defense_mode_[chassis.defence_mode ? "on" : "off"]"
if(chassis.defence_mode)
chassis.deflect_chance = chassis.defence_mode_deflect_chance
- chassis.occupant_message("You enable [chassis] defence mode.")
+ chassis.occupant_message(span_notice("You enable [chassis] defence mode."))
else
chassis.deflect_chance = initial(chassis.deflect_chance)
- chassis.occupant_message("You disable [chassis] defence mode.")
+ chassis.occupant_message(span_danger("You disable [chassis] defence mode."))
chassis.log_message("Toggled defence mode.", LOG_MECHA)
UpdateButtonIcon()
@@ -206,13 +206,13 @@
chassis.bumpsmash = 1
chassis.step_in = min(1, round(chassis.step_in/2))
chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff)
- chassis.occupant_message("You enable leg actuators overload.")
+ chassis.occupant_message(span_danger("You enable leg actuators overload."))
else
chassis.leg_overload_mode = 0
chassis.bumpsmash = initial(chassis.bumpsmash)
chassis.step_in = initial(chassis.step_in)
chassis.step_energy_drain = chassis.normal_step_energy_drain
- chassis.occupant_message("You disable leg actuators overload.")
+ chassis.occupant_message(span_notice("You disable leg actuators overload."))
UpdateButtonIcon()
/datum/action/innate/mecha/mech_smoke
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 2747930e6c59..79a9eb277d8e 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -59,7 +59,7 @@
. = user.transferItemToLoc(I, parent)
if(.)
var/atom/parent_atom = parent
- user.visible_message("[user] has connected [I] to [parent].", "You connect [I] to [parent].")
+ user.visible_message("[user] has connected [I] to [parent].", span_notice("You connect [I] to [parent]."))
parent_atom.add_overlay(I.icon_state+"+o")
qdel(I)
@@ -296,102 +296,102 @@
switch(index)
if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ user.visible_message("[user] connects [parent] hydraulic systems", span_notice("You connect [parent] hydraulic systems."))
if(2)
if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ user.visible_message("[user] activates [parent] hydraulic systems.", span_notice("You activate [parent] hydraulic systems."))
else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ user.visible_message("[user] disconnects [parent] hydraulic systems", span_notice("You disconnect [parent] hydraulic systems."))
if(3)
if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ user.visible_message("[user] adds the wiring to [parent].", span_notice("You add the wiring to [parent]."))
else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", span_notice("You deactivate [parent] hydraulic systems."))
if(4)
if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ user.visible_message("[user] adjusts the wiring of [parent].", span_notice("You adjust the wiring of [parent]."))
else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ user.visible_message("[user] removes the wiring from [parent].", span_notice("You remove the wiring from [parent]."))
if(5)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ user.visible_message("[user] disconnects the wiring of [parent].", span_notice("You disconnect the wiring of [parent]."))
if(6)
if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ user.visible_message("[user] secures the mainboard.", span_notice("You secure the mainboard."))
else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ user.visible_message("[user] removes the central control module from [parent].", span_notice("You remove the central computer mainboard from [parent]."))
if(7)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ user.visible_message("[user] unfastens the mainboard.", span_notice("You unfasten the mainboard."))
if(8)
if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ user.visible_message("[user] secures the peripherals control module.", span_notice("You secure the peripherals control module."))
else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ user.visible_message("[user] removes the peripherals control module from [parent].", span_notice("You remove the peripherals control module from [parent]."))
if(9)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ user.visible_message("[user] unfastens the peripherals control module.", span_notice("You unfasten the peripherals control module."))
if(10)
if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ user.visible_message("[user] secures the scanner module.", span_notice("You secure the scanner module."))
else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ user.visible_message("[user] removes the scanner module from [parent].", span_notice("You remove the scanner module from [parent]."))
if(11)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ user.visible_message("[user] unfastens the scanner module.", span_notice("You unfasten the scanner module."))
if(12)
if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ user.visible_message("[user] secures the capacitor.", span_notice("You secure the capacitor."))
else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ user.visible_message("[user] removes the capacitor from [parent].", span_notice("You remove the capacitor from [parent]."))
if(13)
if(diff==FORWARD)
- user.visible_message("[user] installs [I].", "You install [I].")
+ user.visible_message("[user] installs [I].", span_notice("You install [I]."))
else
- user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
+ user.visible_message("[user] unsecures the capacitor from [parent].", span_notice("You unsecure the capacitor from [parent]."))
if(14)
if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ user.visible_message("[user] secures the power cell.", span_notice("You secure the power cell."))
else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ user.visible_message("[user] pries the power cell from [parent].", span_notice("You pry the power cell from [parent]."))
if(15)
if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ user.visible_message("[user] installs the internal armor layer to [parent].", span_notice("You install the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ user.visible_message("[user] unfastens the power cell.", span_notice("You unfasten the power cell."))
if(16)
if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ user.visible_message("[user] secures the internal armor layer.", span_notice("You secure the internal armor layer."))
else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ user.visible_message("[user] pries internal armor layer from [parent].", span_notice("You pry internal armor layer from [parent]."))
if(17)
if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ user.visible_message("[user] welds the internal armor layer to [parent].", span_notice("You weld the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ user.visible_message("[user] unfastens the internal armor layer.", span_notice("You unfasten the internal armor layer."))
if(18)
if(diff==FORWARD)
- user.visible_message("[user] installs the external reinforced armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
+ user.visible_message("[user] installs the external reinforced armor layer to [parent].", span_notice("You install the external reinforced armor layer to [parent]."))
else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ user.visible_message("[user] cuts the internal armor layer from [parent].", span_notice("You cut the internal armor layer from [parent]."))
if(19)
if(diff==FORWARD)
- user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
+ user.visible_message("[user] secures the external armor layer.", span_notice("You secure the external reinforced armor layer."))
else
- user.visible_message("[user] pries external armor layer from [parent].", "You pry external armor layer from [parent].")
+ user.visible_message("[user] pries external armor layer from [parent].", span_notice("You pry external armor layer from [parent]."))
if(20)
if(diff==FORWARD)
- user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
+ user.visible_message("[user] welds the external armor layer to [parent].", span_notice("You weld the external armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ user.visible_message("[user] unfastens the external armor layer.", span_notice("You unfasten the external armor layer."))
return TRUE
/datum/component/construction/unordered/mecha_chassis/gygax
@@ -428,112 +428,112 @@
switch(index)
if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ user.visible_message("[user] connects [parent] hydraulic systems", span_notice("You connect [parent] hydraulic systems."))
if(2)
if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ user.visible_message("[user] activates [parent] hydraulic systems.", span_notice("You activate [parent] hydraulic systems."))
else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ user.visible_message("[user] disconnects [parent] hydraulic systems", span_notice("You disconnect [parent] hydraulic systems."))
if(3)
if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ user.visible_message("[user] adds the wiring to [parent].", span_notice("You add the wiring to [parent]."))
else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", span_notice("You deactivate [parent] hydraulic systems."))
if(4)
if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ user.visible_message("[user] adjusts the wiring of [parent].", span_notice("You adjust the wiring of [parent]."))
else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ user.visible_message("[user] removes the wiring from [parent].", span_notice("You remove the wiring from [parent]."))
if(5)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ user.visible_message("[user] disconnects the wiring of [parent].", span_notice("You disconnect the wiring of [parent]."))
if(6)
if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ user.visible_message("[user] secures the mainboard.", span_notice("You secure the mainboard."))
else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ user.visible_message("[user] removes the central control module from [parent].", span_notice("You remove the central computer mainboard from [parent]."))
if(7)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ user.visible_message("[user] unfastens the mainboard.", span_notice("You unfasten the mainboard."))
if(8)
if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ user.visible_message("[user] secures the peripherals control module.", span_notice("You secure the peripherals control module."))
else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ user.visible_message("[user] removes the peripherals control module from [parent].", span_notice("You remove the peripherals control module from [parent]."))
if(9)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ user.visible_message("[user] unfastens the peripherals control module.", span_notice("You unfasten the peripherals control module."))
if(10)
if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ user.visible_message("[user] secures the weapon control module.", span_notice("You secure the weapon control module."))
else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ user.visible_message("[user] removes the weapon control module from [parent].", span_notice("You remove the weapon control module from [parent]."))
if(11)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ user.visible_message("[user] unfastens the weapon control module.", span_notice("You unfasten the weapon control module."))
if(12)
if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ user.visible_message("[user] secures the scanner module.", span_notice("You secure the scanner module."))
else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ user.visible_message("[user] removes the scanner module from [parent].", span_notice("You remove the scanner module from [parent]."))
if(13)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ user.visible_message("[user] unfastens the scanner module.", span_notice("You unfasten the scanner module."))
if(14)
if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ user.visible_message("[user] secures the capacitor.", span_notice("You secure the capacitor."))
else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ user.visible_message("[user] removes the capacitor from [parent].", span_notice("You remove the capacitor from [parent]."))
if(15)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ user.visible_message("[user] unfastens the capacitor.", span_notice("You unfasten the capacitor."))
if(16)
if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ user.visible_message("[user] secures the power cell.", span_notice("You secure the power cell."))
else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ user.visible_message("[user] pries the power cell from [parent].", span_notice("You pry the power cell from [parent]."))
if(17)
if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ user.visible_message("[user] installs the internal armor layer to [parent].", span_notice("You install the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ user.visible_message("[user] unfastens the power cell.", span_notice("You unfasten the power cell."))
if(18)
if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ user.visible_message("[user] secures the internal armor layer.", span_notice("You secure the internal armor layer."))
else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ user.visible_message("[user] pries internal armor layer from [parent].", span_notice("You pry internal armor layer from [parent]."))
if(19)
if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ user.visible_message("[user] welds the internal armor layer to [parent].", span_notice("You weld the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ user.visible_message("[user] unfastens the internal armor layer.", span_notice("You unfasten the internal armor layer."))
if(20)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ user.visible_message("[user] cuts the internal armor layer from [parent].", span_notice("You cut the internal armor layer from [parent]."))
if(21)
if(diff==FORWARD)
- user.visible_message("[user] secures Gygax Armor Plates.", "You secure Gygax Armor Plates.")
+ user.visible_message("[user] secures Gygax Armor Plates.", span_notice("You secure Gygax Armor Plates."))
else
- user.visible_message("[user] pries Gygax Armor Plates from [parent].", "You pry Gygax Armor Plates from [parent].")
+ user.visible_message("[user] pries Gygax Armor Plates from [parent].", span_notice("You pry Gygax Armor Plates from [parent]."))
if(22)
if(diff==FORWARD)
- user.visible_message("[user] welds Gygax Armor Plates to [parent].", "You weld Gygax Armor Plates to [parent].")
+ user.visible_message("[user] welds Gygax Armor Plates to [parent].", span_notice("You weld Gygax Armor Plates to [parent]."))
else
- user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Gygax Armor Plates.")
+ user.visible_message("[user] unfastens Gygax Armor Plates.", span_notice("You unfasten Gygax Armor Plates."))
return TRUE
/datum/component/construction/unordered/mecha_chassis/firefighter
@@ -593,107 +593,107 @@
//TODO: better messages.
switch(index)
if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ user.visible_message("[user] connects [parent] hydraulic systems", span_notice("You connect [parent] hydraulic systems."))
if(2)
if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ user.visible_message("[user] activates [parent] hydraulic systems.", span_notice("You activate [parent] hydraulic systems."))
else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ user.visible_message("[user] disconnects [parent] hydraulic systems", span_notice("You disconnect [parent] hydraulic systems."))
if(3)
if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ user.visible_message("[user] adds the wiring to [parent].", span_notice("You add the wiring to [parent]."))
else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", span_notice("You deactivate [parent] hydraulic systems."))
if(4)
if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ user.visible_message("[user] adjusts the wiring of [parent].", span_notice("You adjust the wiring of [parent]."))
else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ user.visible_message("[user] removes the wiring from [parent].", span_notice("You remove the wiring from [parent]."))
if(5)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ user.visible_message("[user] disconnects the wiring of [parent].", span_notice("You disconnect the wiring of [parent]."))
if(6)
if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ user.visible_message("[user] secures the mainboard.", span_notice("You secure the mainboard."))
else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ user.visible_message("[user] removes the central control module from [parent].", span_notice("You remove the central computer mainboard from [parent]."))
if(7)
if(diff==FORWARD)
- user.visible_message("[user] installs [I]into [parent].", "You install [I]into [parent].")
+ user.visible_message("[user] installs [I]into [parent].", span_notice("You install [I]into [parent]."))
else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ user.visible_message("[user] unfastens the mainboard.", span_notice("You unfasten the mainboard."))
if(8)
if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ user.visible_message("[user] secures the peripherals control module.", span_notice("You secure the peripherals control module."))
else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ user.visible_message("[user] removes the peripherals control module from [parent].", span_notice("You remove the peripherals control module from [parent]."))
if(9)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ user.visible_message("[user] unfastens the peripherals control module.", span_notice("You unfasten the peripherals control module."))
if(10)
if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ user.visible_message("[user] secures the scanner module.", span_notice("You secure the scanner module."))
else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ user.visible_message("[user] removes the scanner module from [parent].", span_notice("You remove the scanner module from [parent]."))
if(11)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ user.visible_message("[user] unfastens the scanner module.", span_notice("You unfasten the scanner module."))
if(12)
if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ user.visible_message("[user] secures the capacitor.", span_notice("You secure the capacitor."))
else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ user.visible_message("[user] removes the capacitor from [parent].", span_notice("You remove the capacitor from [parent]."))
if(13)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ user.visible_message("[user] unfastens the capacitor.", span_notice("You unfasten the capacitor."))
if(14)
if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ user.visible_message("[user] secures the power cell.", span_notice("You secure the power cell."))
else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ user.visible_message("[user] pries the power cell from [parent].", span_notice("You pry the power cell from [parent]."))
if(15)
if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ user.visible_message("[user] installs the internal armor layer to [parent].", span_notice("You install the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ user.visible_message("[user] unfastens the power cell.", span_notice("You unfasten the power cell."))
if(16)
if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ user.visible_message("[user] secures the internal armor layer.", span_notice("You secure the internal armor layer."))
else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ user.visible_message("[user] pries internal armor layer from [parent].", span_notice("You pry internal armor layer from [parent]."))
if(17)
if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ user.visible_message("[user] welds the internal armor layer to [parent].", span_notice("You weld the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ user.visible_message("[user] unfastens the internal armor layer.", span_notice("You unfasten the internal armor layer."))
if(18)
if(diff==FORWARD)
- user.visible_message("[user] starts to install the external armor layer to [parent].", "You install the external armor layer to [parent].")
+ user.visible_message("[user] starts to install the external armor layer to [parent].", span_notice("You install the external armor layer to [parent]."))
else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ user.visible_message("[user] cuts the internal armor layer from [parent].", span_notice("You cut the internal armor layer from [parent]."))
if(19)
if(diff==FORWARD)
- user.visible_message("[user] installs the external reinforced armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
+ user.visible_message("[user] installs the external reinforced armor layer to [parent].", span_notice("You install the external reinforced armor layer to [parent]."))
else
- user.visible_message("[user] removes the external armor from [parent].", "You remove the external armor from [parent].")
+ user.visible_message("[user] removes the external armor from [parent].", span_notice("You remove the external armor from [parent]."))
if(20)
if(diff==FORWARD)
- user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
+ user.visible_message("[user] secures the external armor layer.", span_notice("You secure the external reinforced armor layer."))
else
- user.visible_message("[user] pries external armor layer from [parent].", "You pry external armor layer from [parent].")
+ user.visible_message("[user] pries external armor layer from [parent].", span_notice("You pry external armor layer from [parent]."))
if(21)
if(diff==FORWARD)
- user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
+ user.visible_message("[user] welds the external armor layer to [parent].", span_notice("You weld the external armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ user.visible_message("[user] unfastens the external armor layer.", span_notice("You unfasten the external armor layer."))
return TRUE
/datum/component/construction/unordered/mecha_chassis/honker
@@ -792,21 +792,21 @@
//TODO: better messages.
switch(index)
if(2)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
if(4)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
if(6)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
if(8)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
if(10)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
if(12)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
if(14)
- user.visible_message("[user] puts [I] on [parent].", "You put [I] on [parent].")
+ user.visible_message("[user] puts [I] on [parent].", span_notice("You put [I] on [parent]."))
if(16)
- user.visible_message("[user] puts [I] on [parent].", "You put [I] on [parent].")
+ user.visible_message("[user] puts [I] on [parent].", span_notice("You put [I] on [parent]."))
return TRUE
/datum/component/construction/unordered/mecha_chassis/durand
@@ -841,112 +841,112 @@
//TODO: better messages.
switch(index)
if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ user.visible_message("[user] connects [parent] hydraulic systems", span_notice("You connect [parent] hydraulic systems."))
if(2)
if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ user.visible_message("[user] activates [parent] hydraulic systems.", span_notice("You activate [parent] hydraulic systems."))
else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ user.visible_message("[user] disconnects [parent] hydraulic systems", span_notice("You disconnect [parent] hydraulic systems."))
if(3)
if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ user.visible_message("[user] adds the wiring to [parent].", span_notice("You add the wiring to [parent]."))
else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", span_notice("You deactivate [parent] hydraulic systems."))
if(4)
if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ user.visible_message("[user] adjusts the wiring of [parent].", span_notice("You adjust the wiring of [parent]."))
else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ user.visible_message("[user] removes the wiring from [parent].", span_notice("You remove the wiring from [parent]."))
if(5)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ user.visible_message("[user] disconnects the wiring of [parent].", span_notice("You disconnect the wiring of [parent]."))
if(6)
if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ user.visible_message("[user] secures the mainboard.", span_notice("You secure the mainboard."))
else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ user.visible_message("[user] removes the central control module from [parent].", span_notice("You remove the central computer mainboard from [parent]."))
if(7)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ user.visible_message("[user] unfastens the mainboard.", span_notice("You unfasten the mainboard."))
if(8)
if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ user.visible_message("[user] secures the peripherals control module.", span_notice("You secure the peripherals control module."))
else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ user.visible_message("[user] removes the peripherals control module from [parent].", span_notice("You remove the peripherals control module from [parent]."))
if(9)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ user.visible_message("[user] unfastens the peripherals control module.", span_notice("You unfasten the peripherals control module."))
if(10)
if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ user.visible_message("[user] secures the weapon control module.", span_notice("You secure the weapon control module."))
else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ user.visible_message("[user] removes the weapon control module from [parent].", span_notice("You remove the weapon control module from [parent]."))
if(11)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ user.visible_message("[user] unfastens the weapon control module.", span_notice("You unfasten the weapon control module."))
if(12)
if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ user.visible_message("[user] secures the scanner module.", span_notice("You secure the scanner module."))
else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ user.visible_message("[user] removes the scanner module from [parent].", span_notice("You remove the scanner module from [parent]."))
if(13)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ user.visible_message("[user] unfastens the scanner module.", span_notice("You unfasten the scanner module."))
if(14)
if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ user.visible_message("[user] secures the capacitor.", span_notice("You secure the capacitor."))
else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ user.visible_message("[user] removes the capacitor from [parent].", span_notice("You remove the capacitor from [parent]."))
if(15)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ user.visible_message("[user] unfastens the capacitor.", span_notice("You unfasten the capacitor."))
if(16)
if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ user.visible_message("[user] secures the power cell.", span_notice("You secure the power cell."))
else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ user.visible_message("[user] pries the power cell from [parent].", span_notice("You pry the power cell from [parent]."))
if(17)
if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ user.visible_message("[user] installs the internal armor layer to [parent].", span_notice("You install the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ user.visible_message("[user] unfastens the power cell.", span_notice("You unfasten the power cell."))
if(18)
if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ user.visible_message("[user] secures the internal armor layer.", span_notice("You secure the internal armor layer."))
else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ user.visible_message("[user] pries internal armor layer from [parent].", span_notice("You pry internal armor layer from [parent]."))
if(19)
if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ user.visible_message("[user] welds the internal armor layer to [parent].", span_notice("You weld the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ user.visible_message("[user] unfastens the internal armor layer.", span_notice("You unfasten the internal armor layer."))
if(20)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ user.visible_message("[user] cuts the internal armor layer from [parent].", span_notice("You cut the internal armor layer from [parent]."))
if(21)
if(diff==FORWARD)
- user.visible_message("[user] secures Durand Armor Plates.", "You secure Durand Armor Plates.")
+ user.visible_message("[user] secures Durand Armor Plates.", span_notice("You secure Durand Armor Plates."))
else
- user.visible_message("[user] pries Durand Armor Plates from [parent].", "You pry Durand Armor Plates from [parent].")
+ user.visible_message("[user] pries Durand Armor Plates from [parent].", span_notice("You pry Durand Armor Plates from [parent]."))
if(22)
if(diff==FORWARD)
- user.visible_message("[user] welds Durand Armor Plates to [parent].", "You weld Durand Armor Plates to [parent].")
+ user.visible_message("[user] welds Durand Armor Plates to [parent].", span_notice("You weld Durand Armor Plates to [parent]."))
else
- user.visible_message("[user] unfastens Durand Armor Plates.", "You unfasten Durand Armor Plates.")
+ user.visible_message("[user] unfastens Durand Armor Plates.", span_notice("You unfasten Durand Armor Plates."))
return TRUE
//PHAZON
@@ -1068,131 +1068,131 @@
//TODO: better messages.
switch(index)
if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ user.visible_message("[user] connects [parent] hydraulic systems", span_notice("You connect [parent] hydraulic systems."))
if(2)
if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ user.visible_message("[user] activates [parent] hydraulic systems.", span_notice("You activate [parent] hydraulic systems."))
else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ user.visible_message("[user] disconnects [parent] hydraulic systems", span_notice("You disconnect [parent] hydraulic systems."))
if(3)
if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ user.visible_message("[user] adds the wiring to [parent].", span_notice("You add the wiring to [parent]."))
else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", span_notice("You deactivate [parent] hydraulic systems."))
if(4)
if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ user.visible_message("[user] adjusts the wiring of [parent].", span_notice("You adjust the wiring of [parent]."))
else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ user.visible_message("[user] removes the wiring from [parent].", span_notice("You remove the wiring from [parent]."))
if(5)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ user.visible_message("[user] disconnects the wiring of [parent].", span_notice("You disconnect the wiring of [parent]."))
if(6)
if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ user.visible_message("[user] secures the mainboard.", span_notice("You secure the mainboard."))
else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ user.visible_message("[user] removes the central control module from [parent].", span_notice("You remove the central computer mainboard from [parent]."))
if(7)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ user.visible_message("[user] unfastens the mainboard.", span_notice("You unfasten the mainboard."))
if(8)
if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ user.visible_message("[user] secures the peripherals control module.", span_notice("You secure the peripherals control module."))
else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ user.visible_message("[user] removes the peripherals control module from [parent].", span_notice("You remove the peripherals control module from [parent]."))
if(9)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ user.visible_message("[user] unfastens the peripherals control module.", span_notice("You unfasten the peripherals control module."))
if(10)
if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ user.visible_message("[user] secures the weapon control module.", span_notice("You secure the weapon control module."))
else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ user.visible_message("[user] removes the weapon control module from [parent].", span_notice("You remove the weapon control module from [parent]."))
if(11)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ user.visible_message("[user] unfastens the weapon control module.", span_notice("You unfasten the weapon control module."))
if(12)
if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ user.visible_message("[user] secures the scanner module.", span_notice("You secure the scanner module."))
else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ user.visible_message("[user] removes the scanner module from [parent].", span_notice("You remove the scanner module from [parent]."))
if(13)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ user.visible_message("[user] unfastens the scanner module.", span_notice("You unfasten the scanner module."))
if(14)
if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ user.visible_message("[user] secures the capacitor.", span_notice("You secure the capacitor."))
else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ user.visible_message("[user] removes the capacitor from [parent].", span_notice("You remove the capacitor from [parent]."))
if(15)
if(diff==FORWARD)
- user.visible_message("[user] installs [I].", "You install [I].")
+ user.visible_message("[user] installs [I].", span_notice("You install [I]."))
else
- user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
+ user.visible_message("[user] unsecures the capacitor from [parent].", span_notice("You unsecure the capacitor from [parent]."))
if(16)
if(diff==FORWARD)
- user.visible_message("[user] connects the bluespace crystal.", "You connect the bluespace crystal.")
+ user.visible_message("[user] connects the bluespace crystal.", span_notice("You connect the bluespace crystal."))
else
- user.visible_message("[user] removes the bluespace crystal from [parent].", "You remove the bluespace crystal from [parent].")
+ user.visible_message("[user] removes the bluespace crystal from [parent].", span_notice("You remove the bluespace crystal from [parent]."))
if(17)
if(diff==FORWARD)
- user.visible_message("[user] engages the bluespace crystal.", "You engage the bluespace crystal.")
+ user.visible_message("[user] engages the bluespace crystal.", span_notice("You engage the bluespace crystal."))
else
- user.visible_message("[user] disconnects the bluespace crystal from [parent].", "You disconnect the bluespace crystal from [parent].")
+ user.visible_message("[user] disconnects the bluespace crystal from [parent].", span_notice("You disconnect the bluespace crystal from [parent]."))
if(18)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disengages the bluespace crystal.", "You disengage the bluespace crystal.")
+ user.visible_message("[user] disengages the bluespace crystal.", span_notice("You disengage the bluespace crystal."))
if(19)
if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ user.visible_message("[user] secures the power cell.", span_notice("You secure the power cell."))
else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ user.visible_message("[user] pries the power cell from [parent].", span_notice("You pry the power cell from [parent]."))
if(20)
if(diff==FORWARD)
- user.visible_message("[user] installs the phase armor layer to [parent].", "You install the phase armor layer to [parent].")
+ user.visible_message("[user] installs the phase armor layer to [parent].", span_notice("You install the phase armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ user.visible_message("[user] unfastens the power cell.", span_notice("You unfasten the power cell."))
if(21)
if(diff==FORWARD)
- user.visible_message("[user] secures the phase armor layer.", "You secure the phase armor layer.")
+ user.visible_message("[user] secures the phase armor layer.", span_notice("You secure the phase armor layer."))
else
- user.visible_message("[user] pries the phase armor layer from [parent].", "You pry the phase armor layer from [parent].")
+ user.visible_message("[user] pries the phase armor layer from [parent].", span_notice("You pry the phase armor layer from [parent]."))
if(22)
if(diff==FORWARD)
- user.visible_message("[user] welds the phase armor layer to [parent].", "You weld the phase armor layer to [parent].")
+ user.visible_message("[user] welds the phase armor layer to [parent].", span_notice("You weld the phase armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the phase armor layer.", "You unfasten the phase armor layer.")
+ user.visible_message("[user] unfastens the phase armor layer.", span_notice("You unfasten the phase armor layer."))
if(23)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] cuts phase armor layer from [parent].", "You cut the phase armor layer from [parent].")
+ user.visible_message("[user] cuts phase armor layer from [parent].", span_notice("You cut the phase armor layer from [parent]."))
if(24)
if(diff==FORWARD)
- user.visible_message("[user] secures Phazon Armor Plates.", "You secure Phazon Armor Plates.")
+ user.visible_message("[user] secures Phazon Armor Plates.", span_notice("You secure Phazon Armor Plates."))
else
- user.visible_message("[user] pries Phazon Armor Plates from [parent].", "You pry Phazon Armor Plates from [parent].")
+ user.visible_message("[user] pries Phazon Armor Plates from [parent].", span_notice("You pry Phazon Armor Plates from [parent]."))
if(25)
if(diff==FORWARD)
- user.visible_message("[user] welds Phazon Armor Plates to [parent].", "You weld Phazon Armor Plates to [parent].")
+ user.visible_message("[user] welds Phazon Armor Plates to [parent].", span_notice("You weld Phazon Armor Plates to [parent]."))
else
- user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.")
+ user.visible_message("[user] unfastens Phazon Armor Plates.", span_notice("You unfasten Phazon Armor Plates."))
if(26)
if(diff==FORWARD)
user.visible_message("[user] carefully inserts the anomaly core into [parent] and secures it.",
- "You slowly place the anomaly core into its socket and close its chamber.")
+ span_notice("You slowly place the anomaly core into its socket and close its chamber."))
return TRUE
//ODYSSEUS
@@ -1228,100 +1228,100 @@
//TODO: better messages.
switch(index)
if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ user.visible_message("[user] connects [parent] hydraulic systems", span_notice("You connect [parent] hydraulic systems."))
if(2)
if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ user.visible_message("[user] activates [parent] hydraulic systems.", span_notice("You activate [parent] hydraulic systems."))
else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ user.visible_message("[user] disconnects [parent] hydraulic systems", span_notice("You disconnect [parent] hydraulic systems."))
if(3)
if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ user.visible_message("[user] adds the wiring to [parent].", span_notice("You add the wiring to [parent]."))
else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", span_notice("You deactivate [parent] hydraulic systems."))
if(4)
if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ user.visible_message("[user] adjusts the wiring of [parent].", span_notice("You adjust the wiring of [parent]."))
else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ user.visible_message("[user] removes the wiring from [parent].", span_notice("You remove the wiring from [parent]."))
if(5)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ user.visible_message("[user] disconnects the wiring of [parent].", span_notice("You disconnect the wiring of [parent]."))
if(6)
if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ user.visible_message("[user] secures the mainboard.", span_notice("You secure the mainboard."))
else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ user.visible_message("[user] removes the central control module from [parent].", span_notice("You remove the central computer mainboard from [parent]."))
if(7)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ user.visible_message("[user] unfastens the mainboard.", span_notice("You unfasten the mainboard."))
if(8)
if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ user.visible_message("[user] secures the peripherals control module.", span_notice("You secure the peripherals control module."))
else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ user.visible_message("[user] removes the peripherals control module from [parent].", span_notice("You remove the peripherals control module from [parent]."))
if(9)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ user.visible_message("[user] unfastens the peripherals control module.", span_notice("You unfasten the peripherals control module."))
if(10)
if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ user.visible_message("[user] secures the scanner module.", span_notice("You secure the scanner module."))
else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ user.visible_message("[user] removes the scanner module from [parent].", span_notice("You remove the scanner module from [parent]."))
if(11)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ user.visible_message("[user] installs [I] to [parent].", span_notice("You install [I] to [parent]."))
else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ user.visible_message("[user] unfastens the scanner module.", span_notice("You unfasten the scanner module."))
if(12)
if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ user.visible_message("[user] secures the capacitor.", span_notice("You secure the capacitor."))
else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ user.visible_message("[user] removes the capacitor from [parent].", span_notice("You remove the capacitor from [parent]."))
if(13)
if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ user.visible_message("[user] installs [I] into [parent].", span_notice("You install [I] into [parent]."))
else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ user.visible_message("[user] unfastens the capacitor.", span_notice("You unfasten the capacitor."))
if(14)
if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ user.visible_message("[user] secures the power cell.", span_notice("You secure the power cell."))
else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ user.visible_message("[user] pries the power cell from [parent].", span_notice("You pry the power cell from [parent]."))
if(15)
if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ user.visible_message("[user] installs the internal armor layer to [parent].", span_notice("You install the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ user.visible_message("[user] unfastens the power cell.", span_notice("You unfasten the power cell."))
if(16)
if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ user.visible_message("[user] secures the internal armor layer.", span_notice("You secure the internal armor layer."))
else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ user.visible_message("[user] pries internal armor layer from [parent].", span_notice("You pry internal armor layer from [parent]."))
if(17)
if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ user.visible_message("[user] welds the internal armor layer to [parent].", span_notice("You weld the internal armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ user.visible_message("[user] unfastens the internal armor layer.", span_notice("You unfasten the internal armor layer."))
if(18)
if(diff==FORWARD)
- user.visible_message("[user] installs the external armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
+ user.visible_message("[user] installs the external armor layer to [parent].", span_notice("You install the external reinforced armor layer to [parent]."))
else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ user.visible_message("[user] cuts the internal armor layer from [parent].", span_notice("You cut the internal armor layer from [parent]."))
if(19)
if(diff==FORWARD)
- user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
+ user.visible_message("[user] secures the external armor layer.", span_notice("You secure the external reinforced armor layer."))
else
- user.visible_message("[user] pries the external armor layer from [parent].", "You pry the external armor layer from [parent].")
+ user.visible_message("[user] pries the external armor layer from [parent].", span_notice("You pry the external armor layer from [parent]."))
if(20)
if(diff==FORWARD)
- user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
+ user.visible_message("[user] welds the external armor layer to [parent].", span_notice("You weld the external armor layer to [parent]."))
else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ user.visible_message("[user] unfastens the external armor layer.", span_notice("You unfasten the external armor layer."))
return TRUE
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 28225bbada8a..590b33b2bf8e 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -59,7 +59,7 @@
var/obj/mecha/M = MT.chassis
if(trim(message) && M)
M.occupant_message(message)
- to_chat(usr, "Message sent.")
+ to_chat(usr, span_notice("Message sent."))
. = TRUE
if("shock")
var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["tracker_ref"])
diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm
index ee70d44e5dc8..2cf91ea7e2f1 100644
--- a/code/game/mecha/mecha_defense.dm
+++ b/code/game/mecha/mecha_defense.dm
@@ -20,7 +20,7 @@
else
check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT))
if(. >= 5 || prob(33))
- occupant_message("Taking damage!")
+ occupant_message(span_userdanger("Taking damage!"))
log_message("Took [damage_amount] points of damage. Damage type: [damage_type]", LOG_MECHA)
/obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
@@ -47,7 +47,7 @@
booster_damage_modifier /= facing_modifier
booster_deflection_modifier *= facing_modifier
if(prob(deflect_chance * booster_deflection_modifier))
- visible_message("[src]'s armour deflects the attack!")
+ visible_message(span_danger("[src]'s armour deflects the attack!"))
log_message("Armor saved.", LOG_MECHA)
return 0
if(.)
@@ -61,7 +61,7 @@
user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code.
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1)
- user.visible_message("[user] hits [name]. Nothing happens.", null, null, COMBAT_MESSAGE_RANGE)
+ user.visible_message(span_danger("[user] hits [name]. Nothing happens."), null, null, COMBAT_MESSAGE_RANGE)
log_message("Attack by hand/paw. Attacker - [user].", LOG_MECHA, color="red")
/obj/mecha/attack_paw(mob/user as mob)
@@ -206,33 +206,33 @@
output_maintenance_dialog(id_card, user)
return
else
- to_chat(user, "Invalid ID: Access denied.")
+ to_chat(user, span_warning("Invalid ID: Access denied."))
else
- to_chat(user, "Maintenance protocols disabled by operator.")
+ to_chat(user, span_warning("Maintenance protocols disabled by operator."))
else if(W.tool_behaviour == TOOL_WRENCH)
if(state==1)
state = 2
- to_chat(user, "You undo the securing bolts.")
+ to_chat(user, span_notice("You undo the securing bolts."))
else if(state==2)
state = 1
- to_chat(user, "You tighten the securing bolts.")
+ to_chat(user, span_notice("You tighten the securing bolts."))
return
else if(W.tool_behaviour == TOOL_CROWBAR)
if(state==2)
state = 3
- to_chat(user, "You open the hatch to the power unit.")
+ to_chat(user, span_notice("You open the hatch to the power unit."))
else if(state==3)
state=2
- to_chat(user, "You close the hatch to the power unit.")
+ to_chat(user, span_notice("You close the hatch to the power unit."))
return
else if(istype(W, /obj/item/stack/cable_coil))
if(state == 3 && (internal_damage & MECHA_INT_SHORT_CIRCUIT))
var/obj/item/stack/cable_coil/CC = W
if(CC.use(2))
clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
- to_chat(user, "You replace the fused wires.")
+ to_chat(user, span_notice("You replace the fused wires."))
else
- to_chat(user, "You need two lengths of cable to fix this mech!")
+ to_chat(user, span_warning("You need two lengths of cable to fix this mech!"))
return
else if(istype(W, /obj/item/stock_parts/cell))
@@ -241,12 +241,12 @@
if(!user.transferItemToLoc(W, src))
return
var/obj/item/stock_parts/cell/C = W
- to_chat(user, "You install the power cell.")
+ to_chat(user, span_notice("You install the power cell."))
playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE)
cell = C
log_message("Powercell installed", LOG_MECHA)
else
- to_chat(user, "There's already a power cell installed.")
+ to_chat(user, span_notice("There's already a power cell installed."))
return
if(istype(W, /obj/item/stock_parts/scanning_module))
@@ -254,13 +254,13 @@
if(!scanmod)
if(!user.transferItemToLoc(W, src))
return
- to_chat(user, "You install the scanning module.")
+ to_chat(user, span_notice("You install the scanning module."))
playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE)
scanmod = W
log_message("[W] installed", LOG_MECHA)
update_part_values()
else
- to_chat(user, "There's already a scanning module installed.")
+ to_chat(user, span_notice("There's already a scanning module installed."))
return
if(istype(W, /obj/item/stock_parts/capacitor))
@@ -268,13 +268,13 @@
if(!capacitor)
if(!user.transferItemToLoc(W, src))
return
- to_chat(user, "You install the capacitor.")
+ to_chat(user, span_notice("You install the capacitor."))
playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE)
capacitor = W
log_message("[W] installed", LOG_MECHA)
update_part_values()
else
- to_chat(user, "There's already a capacitor installed.")
+ to_chat(user, span_notice("There's already a capacitor installed."))
return
else if(W.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
@@ -283,15 +283,15 @@
if(W.use_tool(src, user, 0, volume=50, amount=1))
if (internal_damage & MECHA_INT_TANK_BREACH)
clearInternalDamage(MECHA_INT_TANK_BREACH)
- to_chat(user, "You repair the damaged gas tank.")
+ to_chat(user, span_notice("You repair the damaged gas tank."))
else
- user.visible_message("[user] repairs some damage to [name].", "You repair some damage to [src].")
+ user.visible_message(span_notice("[user] repairs some damage to [name]."), span_notice("You repair some damage to [src]."))
obj_integrity += min(10, max_integrity-obj_integrity)
if(obj_integrity == max_integrity)
- to_chat(user, "It looks to be fully repaired now.")
+ to_chat(user, span_notice("It looks to be fully repaired now."))
return 1
else
- to_chat(user, "The [name] is at full integrity!")
+ to_chat(user, span_warning("The [name] is at full integrity!"))
return 1
else if(istype(W, /obj/item/mecha_parts))
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 59b74adfa8d4..0ebbbdda9cbb 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -11,9 +11,9 @@
/obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/mecha/M) //For attaching parts to a finished mech
if(!user.transferItemToLoc(src, M))
- to_chat(user, "\The [src] is stuck to your hand, you cannot put it in \the [M]!")
+ to_chat(user, span_warning("\The [src] is stuck to your hand, you cannot put it in \the [M]!"))
return FALSE
- user.visible_message("[user] attaches [src] to [M].", "You attach [src] to [M].")
+ user.visible_message("[user] attaches [src] to [M].", span_notice("You attach [src] to [M]."))
return TRUE
/obj/item/mecha_parts/part/try_attach_part(mob/user, obj/mecha/M)
diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm
index 62904fb63a6d..b6fdd2d91e2c 100644
--- a/code/game/mecha/mecha_topic.dm
+++ b/code/game/mecha/mecha_topic.dm
@@ -52,11 +52,11 @@
/obj/mecha/proc/report_internal_damage()
. = ""
var/list/dam_reports = list(
- "[MECHA_INT_FIRE]" = "INTERNAL FIRE",
- "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION",
- "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH",
- "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate",
- "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT"
+ "[MECHA_INT_FIRE]" = span_userdanger("INTERNAL FIRE"),
+ "[MECHA_INT_TEMP_CONTROL]" = span_userdanger("LIFE SUPPORT SYSTEM MALFUNCTION"),
+ "[MECHA_INT_TANK_BREACH]" = span_userdanger("GAS TANK BREACH"),
+ "[MECHA_INT_CONTROL_LOST]" = "[span_userdanger("COORDINATION SYSTEM CALIBRATION FAILURE")] - Recalibrate",
+ "[MECHA_INT_SHORT_CIRCUIT]" = span_userdanger("SHORT CIRCUIT")
)
for(var/tflag in dam_reports)
var/intdamflag = text2num(tflag)
@@ -64,7 +64,7 @@
. += dam_reports[tflag]
. += "
"
if(return_pressure() > WARNING_HIGH_PRESSURE)
- . += "DANGEROUSLY HIGH CABIN PRESSURE
"
+ . += "[span_userdanger("DANGEROUSLY HIGH CABIN PRESSURE")]
"
@@ -81,13 +81,13 @@
tank_temperature = internal_tank ? int_tank_air.return_temperature() : "Unknown"
cabin_pressure = round(return_pressure(),0.01)
. = {"[report_internal_damage()]
- [integrity<30?"DAMAGE LEVEL CRITICAL
":null]
+ [integrity<30?"[span_userdanger("DAMAGE LEVEL CRITICAL")]
":null]
Integrity: [integrity]%
Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
Air source: [internal_tank?"[use_internal_tank?"Internal Airtank":"Environment"]":"Environment"]
Airtank pressure: [internal_tank?"[tank_pressure]kPa":"N/A"]
Airtank temperature: [internal_tank?"[tank_temperature]°K|[tank_temperature - T0C]°C":"N/A"]
- Cabin pressure: [internal_tank?"[cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa":"N/A"]
+ Cabin pressure: [internal_tank?"[cabin_pressure>WARNING_HIGH_PRESSURE ? span_danger("[cabin_pressure]"): cabin_pressure]kPa":"N/A"]
Cabin temperature: [internal_tank?"[return_temperature()]°K|[return_temperature() - T0C]°C":"N/A"]
[dna_lock?"DNA-locked:
[dna_lock] \[Reset\]
":""]
[thrusters_action.owner ? "Thrusters: [thrusters_active ? "Enabled" : "Disabled"]
" : ""]
@@ -176,7 +176,7 @@
continue //there's some strange access without a name
. += "[a_name] - Add
"
. += "
Finish "
- . += "(Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)"
+ . += span_danger("(Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)")
. += "