diff --git a/code/__defines/span_vr.dm b/code/__defines/span_vr.dm
index 549098f2d8..1a3bc78b37 100644
--- a/code/__defines/span_vr.dm
+++ b/code/__defines/span_vr.dm
@@ -81,6 +81,7 @@
#define span_debug_debug(str) ("" + str + "")
#define span_debug_trace(str) ("" + str + "")
+#define span_white(str) ("" + str + "")
#define span_black(str) ("" + str + "")
#define span_darkgray(str) ("" + str + "")
#define span_gray(str) ("" + str + "")
@@ -88,3 +89,12 @@
#define span_orange(str) ("" + str + "")
#define span_blue(str) ("" + str + "")
#define span_green(str) ("" + str + "")
+#define span_purple(str) ("" + str + "")
+#define span_yellow(str) ("" + str + "")
+#define span_pink(str) ("" + str + "")
+#define span_cyan(str) ("" + str + "")
+#define span_crimson(str) ("" + str + "")
+#define span_maroon(str) ("" + str + "")
+#define span_brown(str) ("" + str + "")
+#define span_lightpurple(str) ("" + str + "")
+#define span_darkpink(str) ("" + str + "")
diff --git a/code/_helpers/files.dm b/code/_helpers/files.dm
index 9468becf8b..d904646a0f 100644
--- a/code/_helpers/files.dm
+++ b/code/_helpers/files.dm
@@ -39,7 +39,7 @@
var/extension = copytext(path,-4,0)
if( !fexists(path) || !(extension in valid_extensions) )
- to_chat(src, "Error: browse_files(): File not found/Invalid file([path]).")
+ to_chat(src, span_red("Error: browse_files(): File not found/Invalid file([path])."))
return
return path
@@ -53,7 +53,7 @@
/client/proc/file_spam_check()
var/time_to_wait = fileaccess_timer - world.time
if(time_to_wait > 0)
- to_chat(src, "Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.")
+ to_chat(src, span_red("Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds."))
return 1
fileaccess_timer = world.time + FTPDELAY
return 0
diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm
index 5324c72f82..d55e848dc9 100644
--- a/code/_helpers/mobs.dm
+++ b/code/_helpers/mobs.dm
@@ -122,7 +122,7 @@ Proc for attack log creation, because really why not
if(ismob(user)) //CHOMPEdit Begin
if(SSdbcore.Connect())
- user.attack_log += text("\[[time_stamp()]\] Attacked [target_str]: [what_done]")
+ user.attack_log += text("\[[time_stamp()]\] [span_red("Attacked [target_str]: [what_done]")]")
var/DBQuery/query_insert = SSdbcore.NewQuery("INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", list("t_ckey" = user.ckey, "t_mob" = user.real_name, "t_content" = "Attacked [target_str]: [what_done]"))
query_insert.Execute(async=use_async)
qdel(query_insert)
@@ -130,7 +130,7 @@ Proc for attack log creation, because really why not
// rustg_sql_query_async(SSdbcore.connection, "INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", json_encode(list("t_ckey" = user.ckey, "t_mob" = user.real_name, "t_content" = "Attacked [target_str]: [what_done]")))
if(ismob(target))
if(SSdbcore.Connect())
- target.attack_log += text("\[[time_stamp()]\] Attacked by [user_str]: [what_done]")
+ target.attack_log += text("\[[time_stamp()]\] [span_orange("Attacked by [user_str]: [what_done]")]")
var/DBQuery/query_insert = SSdbcore.NewQuery("INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", list("t_ckey" = target.ckey, "t_mob" = target.real_name, "t_content" = "Attacked by [user_str]: [what_done]"))
query_insert.Execute(async=use_async)
qdel(query_insert)
diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm
index 5dda42d8ec..4d0fcbf2ad 100644
--- a/code/controllers/subsystems/ticker.dm
+++ b/code/controllers/subsystems/ticker.dm
@@ -462,22 +462,22 @@ var/global/datum/controller/subsystem/ticker/ticker
var/turf/playerTurf = get_turf(Player)
if(emergency_shuttle.departed && emergency_shuttle.evac)
if(isNotAdminLevel(playerTurf.z))
- to_chat(Player, "You survived the round, but remained on [station_name()] as [Player.real_name].")
+ to_chat(Player, "[span_blue("You survived the round, but remained on [station_name()] as [Player.real_name].")]")
else
- to_chat(Player, "You managed to survive the events on [station_name()] as [Player.real_name].")
+ to_chat(Player, "[span_green("You managed to survive the events on [station_name()] as [Player.real_name].")]")
else if(isAdminLevel(playerTurf.z))
- to_chat(Player, "You successfully underwent crew transfer after events on [station_name()] as [Player.real_name].")
+ to_chat(Player, "[span_green("You successfully underwent crew transfer after events on [station_name()] as [Player.real_name].")]")
else if(issilicon(Player))
- to_chat(Player, "You remain operational after the events on [station_name()] as [Player.real_name].")
+ to_chat(Player, "[span_green("You remain operational after the events on [station_name()] as [Player.real_name].")]")
else
- to_chat(Player, "You missed the crew transfer after the events on [station_name()] as [Player.real_name].")
+ to_chat(Player, "[span_blue("You missed the crew transfer after the events on [station_name()] as [Player.real_name].")]")
else
if(istype(Player,/mob/observer/dead))
var/mob/observer/dead/O = Player
if(!O.started_as_observer)
- to_chat(Player, "You did not survive the events on [station_name()]...")
+ to_chat(Player, "[span_red("You did not survive the events on [station_name()]...")]")
else
- to_chat(Player, "You did not survive the events on [station_name()]...")
+ to_chat(Player, "[span_red("You did not survive the events on [station_name()]...")]")
to_world("
")
for (var/mob/living/silicon/ai/aiPlayer in mob_list)
diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm
index fea99b2e4f..a2c76ba4de 100644
--- a/code/controllers/subsystems/vote.dm
+++ b/code/controllers/subsystems/vote.dm
@@ -115,7 +115,7 @@ SUBSYSTEM_DEF(vote)
else
factor = 1.4
choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor)
- to_world("Crew Transfer Factor: [factor]")
+ to_world(span_purple("Crew Transfer Factor: [factor]"))
greatest_votes = max(choices["Initiate Crew Transfer"], choices["Extend the Shift"]) //VOREStation Edit
//CHOMPEdit Begin
if(!(mode == VOTE_CREW_TRANSFER))
@@ -150,7 +150,7 @@ SUBSYSTEM_DEF(vote)
if(mode == VOTE_ADD_ANTAGONIST)
antag_add_failed = 1
log_vote(text)
- to_chat(world, "[text]")
+ to_chat(world, span_purple("[text]"))
/datum/controller/subsystem/vote/proc/result()
. = announce_result()
@@ -179,7 +179,7 @@ SUBSYSTEM_DEF(vote)
if(mode == VOTE_GAMEMODE) //fire this even if the vote fails.
if(!round_progressing)
round_progressing = 1
- to_world("The round will start soon.")
+ to_world(span_red("The round will start soon."))
if(restart)
to_world("World restarting due to vote...")
@@ -265,14 +265,14 @@ SUBSYSTEM_DEF(vote)
log_vote(text)
- to_world("[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote.")
+ to_world(span_purple("[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote."))
if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM)
world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) //CHOMPStation Edit TFF 10/5/20 - revert to old soundtrack contrary to YW
if(mode == VOTE_GAMEMODE && round_progressing)
gamemode_vote_called = TRUE
round_progressing = 0
- to_world("Round start has been delayed.")
+ to_world(span_red("Round start has been delayed."))
time_remaining = round(config.vote_period / 10)
return 1
@@ -321,13 +321,13 @@ SUBSYSTEM_DEF(vote)
if(admin || config.allow_vote_restart)
. += "Restart"
else
- . += "Restart (Disallowed)"
+ . += span_gray("Restart (Disallowed)")
. += "
"
if(admin || config.allow_vote_restart)
. += "Crew Transfer"
else
- . += "Crew Transfer (Disallowed)"
+ . += span_gray("Crew Transfer (Disallowed)")
if(admin)
. += "\t([config.allow_vote_restart ? "Allowed" : "Disallowed"])"
@@ -336,7 +336,7 @@ SUBSYSTEM_DEF(vote)
if(admin || config.allow_vote_mode)
. += "GameMode"
else
- . += "GameMode (Disallowed)"
+ . += span_gray("GameMode (Disallowed)")
if(admin)
. += "\t([config.allow_vote_mode ? "Allowed" : "Disallowed"])"
@@ -345,7 +345,7 @@ SUBSYSTEM_DEF(vote)
if(!antag_add_failed && config.allow_extra_antags)
. += "Add Antagonist Type"
else
- . += "Add Antagonist (Disallowed)"
+ . += span_gray("Add Antagonist (Disallowed)")
. += ""
if(admin)
diff --git a/code/controllers/vote.dm b/code/controllers/vote.dm
index 09d8988ce3..00c6d01762 100644
--- a/code/controllers/vote.dm
+++ b/code/controllers/vote.dm
@@ -106,7 +106,7 @@ SUBSYSTEM_DEF(vote)
else
factor = 1.4
choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor)
- world << "Crew Transfer Factor: [factor]"
+ world << span_lightpurple("Crew Transfer Factor: [factor]")
greatest_votes = max(choices["Initiate Crew Transfer"], choices["Extend the Shift"]) //VOREStation Edit
. = list() // Get all options with that many votes and return them in a list
@@ -139,7 +139,7 @@ SUBSYSTEM_DEF(vote)
if(mode == VOTE_ADD_ANTAGONIST)
antag_add_failed = 1
log_vote(text)
- to_chat(world, "[text]")
+ to_chat(world, span_lightpurple("[text]"))
/datum/controller/subsystem/vote/proc/result()
. = announce_result()
@@ -168,7 +168,7 @@ SUBSYSTEM_DEF(vote)
if(mode == VOTE_GAMEMODE) //fire this even if the vote fails.
if(!round_progressing)
round_progressing = 1
- world << "The round will start soon."
+ world << span_red("The round will start soon.")
if(restart)
world << "World restarting due to vote..."
@@ -254,13 +254,13 @@ SUBSYSTEM_DEF(vote)
log_vote(text)
- world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote."
+ world << span_lightpurple("[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote.")
if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM)
world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
if(mode == VOTE_GAMEMODE && round_progressing)
round_progressing = 0
- world << "Round start has been delayed."
+ world << span_red("Round start has been delayed.")
time_remaining = round(config.vote_period / 10)
return 1
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 78d94daf18..17cd66f89f 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -133,9 +133,9 @@
for(var/datum/objective/O in objectives)
out += "Objective #[num]: [O.explanation_text] "
if(O.completed)
- out += "(complete)"
+ out += "([span_green("complete")])"
else
- out += "(incomplete)"
+ out += "([span_red("incomplete")])"
out += " \[toggle\]"
out += " \[remove\]
"
num++
@@ -409,7 +409,7 @@
else if (href_list["obj_announce"])
var/obj_count = 1
- to_chat(current, "Your current objectives:")
+ to_chat(current, span_blue("Your current objectives:"))
for(var/datum/objective/objective in objectives)
to_chat(current, "Objective #[obj_count]: [objective.explanation_text]")
obj_count++
diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm
index 16fa6176df..830d4806f5 100644
--- a/code/game/antagonist/antagonist_print.dm
+++ b/code/game/antagonist/antagonist_print.dm
@@ -16,17 +16,17 @@
for(var/datum/objective/O in P.objectives)
text += print_objective(O, num)
if(O.check_completion())
- text += "Success!"
+ text += span_green("Success!")
feedback_add_details(feedback_tag,"[O.type]|SUCCESS")
else
- text += "Fail."
+ text += span_red("Fail.")
feedback_add_details(feedback_tag,"[O.type]|FAIL")
failed = TRUE
num++
if(failed)
- text += "
The [role_text] has failed."
+ text += "
" + span_red("The [role_text] has failed.")
else
- text += "
The [role_text] was successful!"
+ text += "
" + span_green("The [role_text] was successful!")
if(global_objectives && global_objectives.len)
text += "
Their objectives were:"
@@ -42,9 +42,9 @@
var/text = "
Objective [num]: [O.explanation_text] "
if(append_success)
if(O.check_completion())
- text += "Success!"
+ text += span_green("Success!")
else
- text += "Fail."
+ text += span_red("Fail.")
return text
/datum/antagonist/proc/print_player_lite(var/datum/mind/ply)
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 74c4d3569e..0e8e0ba43c 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -217,7 +217,7 @@
if(!M.client && M.mind)
for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind == M.mind)
- to_chat(ghost, "Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)")
+ to_chat(ghost, span_interface("Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)"))
break
SStgui.update_uis(src)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index abe0c509da..7554c49218 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -357,9 +357,9 @@ var/list/sacrificed = list()
else if(!corpse_to_raise.client && corpse_to_raise.mind) //Don't force the dead person to come back if they don't want to.
for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind == corpse_to_raise.mind)
- to_chat(ghost, "The cultist [usr.real_name] is trying to \
+ to_chat(ghost, span_interface("The cultist [usr.real_name] is trying to \
revive you. Return to your body if you want to be resurrected into the service of Nar'Sie! \
- (Verbs -> Ghost -> Re-enter corpse)")
+ (Verbs -> Ghost -> Re-enter corpse)"))
break
sleep(10 SECONDS)
diff --git a/code/game/gamemodes/events/holidays/Holidays.dm b/code/game/gamemodes/events/holidays/Holidays.dm
index 9c156a50bd..a85dd4a9ac 100644
--- a/code/game/gamemodes/events/holidays/Holidays.dm
+++ b/code/game/gamemodes/events/holidays/Holidays.dm
@@ -260,11 +260,11 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t
holidays.Add(p)
holiday_blurbs.Add("[Holiday[p]]")
var/holidays_string = english_list(holidays, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
- to_world("and...")
+ to_world(span_blue("and..."))
to_world("Happy [holidays_string] Everybody!
")
if(holiday_blurbs.len != 0)
for(var/blurb in holiday_blurbs)
- to_world("[blurb]
")
+ to_world(span_blue("[blurb]
"))
switch(Holiday) //special holidays
if("Easter")
//do easter stuff
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 7a4064f4ed..1a2e40f160 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -508,15 +508,15 @@ var/global/list/additional_antag_types = list()
found = 1
break
if(!found)
- msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n"
+ msg += "[L.name] ([L.ckey]), the [L.job] ([span_yellow("Disconnected")])\n"
if(L.ckey && L.client)
if(L.client.inactivity >= (ROUNDSTART_LOGOUT_REPORT_TIME / 2)) //Connected, but inactive (alt+tabbed or something)
- msg += "[L.name] ([L.ckey]), the [L.job] (Connected, Inactive)\n"
+ msg += "[L.name] ([L.ckey]), the [L.job] ([span_yellow("Connected, Inactive")])\n"
continue //AFK client
if(L.stat)
if(L.suiciding) //Suicider
- msg += "[L.name] ([L.ckey]), the [L.job] (Suicide)\n"
+ msg += "[L.name] ([L.ckey]), the [L.job] ([span_red("Suicide")])\n"
continue //Disconnected client
if(L.stat == UNCONSCIOUS)
msg += "[L.name] ([L.ckey]), the [L.job] (Dying)\n"
@@ -530,17 +530,17 @@ var/global/list/additional_antag_types = list()
if(D.mind && (D.mind.original == L || 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_red("Suicide")])\n"
continue //Disconnected client
else
msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n"
continue //Dead mob, ghost abandoned
else
if(D.can_reenter_corpse)
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Adminghosted)\n"
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_red("Adminghosted")])\n"
continue //Lolwhat
else
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n"
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_red("Ghosted")])\n"
continue //Ghosted while alive
continue // CHOMPEdit: Escape infinite loop in case there's nobody connected. Shouldn't happen ever, but.
diff --git a/code/game/gamemodes/technomancer/equipment.dm b/code/game/gamemodes/technomancer/equipment.dm
index 940e31f3cd..c4cc82bc00 100644
--- a/code/game/gamemodes/technomancer/equipment.dm
+++ b/code/game/gamemodes/technomancer/equipment.dm
@@ -14,9 +14,9 @@
name = "Rapid Core"
desc = "A core optimized for passive regeneration, however at the cost of capacity. Has a capacity of 7,000 units of energy, and \
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster.
\
- Capacity: 7k
\
- Recharge: 70/s
\
- Instability Modifier: 90%
\
+ " + span_red("Capacity: 7k") + "
\
+ " + span_green("Recharge: 70/s") + "
\
+ " + span_red("Instability Modifier: 90%") + "
\
Energy Cost Modifier: 100%
\
Spell Power: 100%"
cost = 100
@@ -27,11 +27,11 @@
desc = "This core has very large capacitors, however it also has a subpar fractal reactor. The user is recommended to \
purchase one or more energy-generating Functions as well if using this core. The intense weight of the core unfortunately can \
cause the wear to move slightly slower, and the closeness of the capacitors causes a slight increase in incoming instability.
\
- Capacity: 20k
\
- Recharge: 25/s
\
- Instability Modifier: 100%
\
+ " + span_green("Capacity: 20k") + "
\
+ " + span_red("Recharge: 25/s") + "
\
+ " + span_red("Instability Modifier: 100%") + "
\
Energy Cost Modifier: 100%
\
- Spell Power: 140%"
+ " + span_green("Spell Power: 140%") + ""
cost = 100
obj_path = /obj/item/weapon/technomancer_core/bulky
@@ -40,11 +40,11 @@
desc = "This core feeds off unstable energies around the user in addition to a fractal reactor. This means that it performs \
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. The rate of recharging \
increases as the user accumulates more instability, eventually exceeding even the rapid core in regen speed, at a huge risk.
\
- Capacity: 13k
\
- Recharge: 35/s to 110/s+
\
- Instability Modifier: 130%
\
- Energy Cost Modifier: 70%
\
- Spell Power: 110%"
+ " + span_green("Capacity: 13k") + "
\
+ " + span_green("Recharge: 35/s to 110/s+") + "
\
+ " + span_red("Instability Modifier: 130%") + "
\
+ " + span_green("Energy Cost Modifier: 70%") + "
\
+ " + span_green("Spell Power: 110%") + ""
cost = 100
obj_path = /obj/item/weapon/technomancer_core/unstable
@@ -52,10 +52,10 @@
name = "Recycling Core"
desc = "This core is optimized for energy efficency, being able to sometimes recover energy that would have been lost with other \
cores. Each time energy is spent, there is a 30% chance of recovering half of what was spent.
\
- Capacity: 12k
\
- Recharge: 40/s
\
- Instability Modifier: 60%
\
- Energy Cost Modifier: 80%
\
+ " + span_green("Capacity: 12k") + "
\
+ " + span_red("Recharge: 40/s") + "
\
+ " + span_green("Instability Modifier: 60%") + "
\
+ " + span_green("Energy Cost Modifier: 80%") + "
\
Spell Power: 100%"
cost = 100
obj_path = /obj/item/weapon/technomancer_core/recycling
@@ -65,11 +65,11 @@
desc = "A unique type of core, this one sacrifices other characteristics in order to optimize it for the purposes teleporting \
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 40 summons at once, and the energy \
demand for maintaining summons is severely reduced.
\
- Capacity: 8k
\
- Recharge: 35/s
\
- Instability Modifier: 120%
\
+ " + span_red("Capacity: 8k") + "
\
+ " + span_red("Recharge: 35/s") + "
\
+ " + span_red("Instability Modifier: 120%") + "
\
Energy Cost Modifier: 100%
\
- Spell Power: 120%"
+ " + span_green("Spell Power: 120%") + ""
cost = 100
obj_path = /obj/item/weapon/technomancer_core/summoner
@@ -77,11 +77,11 @@
name = "Safety Core"
desc = "This core is designed so that the wearer suffers almost no instability. It unfortunately comes at a cost of subpar \
ratings for everything else.
\
- Capacity: 7k
\
- Recharge: 30/s
\
- Instability Modifier: 30%
\
+ " + span_red("Capacity: 7k") + "
\
+ " + span_red("Recharge: 30/s") + "
\
+ " + span_green("Instability Modifier: 30%") + "
\
Energy Cost Modifier: 100%
\
- Spell Power: 70%"
+ " + span_red("Spell Power: 70%") + ""
cost = 100
obj_path = /obj/item/weapon/technomancer_core/safety
@@ -90,11 +90,11 @@
desc = "A core that was created in order to get the most power out of functions. It does this by shoving the most power into \
those functions, so it is the opposite of energy efficent, however the enhancement of functions is second to none for other \
cores.
\
- Capacity: 15k (effectively 7.5k)
\
- Recharge: 40/s
\
- Instability Modifier: 110%
\
- Energy Cost Modifier: 200%
\
- Spell Power: 175%"
+ " + span_red("Capacity: 15k (effectively 7.5k)") + "
\
+ " + span_red("Recharge: 40/s") + "
\
+ " + span_red("Instability Modifier: 110%") + "
\
+ " + span_red("Energy Cost Modifier: 200%") + "
\
+ " + span_green("Spell Power: 175%") + ""
cost = 100
obj_path = /obj/item/weapon/technomancer_core/overcharged
diff --git a/code/game/gamemodes/technomancer/spells/audible_deception.dm b/code/game/gamemodes/technomancer/spells/audible_deception.dm
index 849f86f2b8..dc464ce284 100644
--- a/code/game/gamemodes/technomancer/spells/audible_deception.dm
+++ b/code/game/gamemodes/technomancer/spells/audible_deception.dm
@@ -93,4 +93,4 @@
M.Paralyse(4)
else
M.make_jittery(50)
- to_chat(M, "HONK")
+ to_chat(M, span_red("HONK"))
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 10b8aa1fa8..3c2a4cd810 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -270,7 +270,7 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva
if(D in empty_playable_ai_cores)
empty_playable_ai_cores -= D
- to_chat(src, "\The [id] is now not available for latejoining AIs.")
+ to_chat(src, "\The [id] is now [span_red("not available")] for latejoining AIs.")
else
empty_playable_ai_cores += D
- to_chat(src, "\The [id] is now available for latejoining AIs.")
+ to_chat(src, "\The [id] is now [span_green("available")] for latejoining AIs.")
diff --git a/code/game/machinery/embedded_controller/mapping_helpers.dm b/code/game/machinery/embedded_controller/mapping_helpers.dm
index f1cb6d21c8..72187278de 100644
--- a/code/game/machinery/embedded_controller/mapping_helpers.dm
+++ b/code/game/machinery/embedded_controller/mapping_helpers.dm
@@ -26,11 +26,11 @@ Any frequency works, it's self-setting, but it seems like people have decided 13
my_controller = get_controller(get_area(src))
my_device = locate(my_device_type) in get_turf(src)
if(!my_device)
- to_world("WARNING:Airlock helper '[name]' couldn't find what it wanted at: X:[x] Y:[y] Z:[z]")
+ to_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' couldn't find what it wanted at: X:[x] Y:[y] Z:[z]")]")
else if(!my_controller)
- to_world("WARNING:Airlock helper '[name]' couldn't find a controller at: X:[x] Y:[y] Z:[z]")
+ to_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' couldn't find a controller at: X:[x] Y:[y] Z:[z]")]")
else if(!my_controller.id_tag)
- to_world("WARNING:Airlock helper '[name]' found a controller without an 'id_tag' set: X:[x] Y:[y] Z:[z]")
+ to_world("[span_red("WARNING:")][span_black("Airlock helper '[name]' found a controller without an 'id_tag' set: X:[x] Y:[y] Z:[z]")]")
else
setup()
return INITIALIZE_HINT_QDEL
@@ -48,15 +48,15 @@ Any frequency works, it's self-setting, but it seems like people have decided 13
for(var/obj/O in A)
if(istype(O, my_controller_type))
potentials += O
-
+
//Couldn't find one
if(!potentials.len)
return null
-
+
//Only found one
if(potentials.len == 1)
return potentials[1]
-
+
//Gotta find closest
var/closest = potentials[potentials.len]
var/closest_dist = get_dist(src, closest)
@@ -207,4 +207,4 @@ Any frequency works, it's self-setting, but it seems like people have decided 13
icon_state = "btnin"
tag_addon = "_interior_button"
command = "cycle_interior"
-// CHOMPStation Addition End
\ No newline at end of file
+// CHOMPStation Addition End
diff --git a/code/game/machinery/suit_storage/suit_storage.dm b/code/game/machinery/suit_storage/suit_storage.dm
index 3134eee487..021b050c5f 100644
--- a/code/game/machinery/suit_storage/suit_storage.dm
+++ b/code/game/machinery/suit_storage/suit_storage.dm
@@ -229,7 +229,7 @@
/obj/machinery/suit_storage_unit/proc/toggle_open(mob/user as mob)
if(islocked || isUV)
- to_chat(user, "Unable to open unit.")
+ to_chat(user, span_red("Unable to open unit."))
return
if(OCCUPANT)
eject_occupant(user)
@@ -240,7 +240,7 @@
/obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user as mob)
if(OCCUPANT && safetieson)
- to_chat(user, "The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.")
+ to_chat(user, span_red("The Unit's safety protocols disallow locking when a biological form is detected inside its compartments."))
return
if(isopen)
return
@@ -252,10 +252,10 @@
if(isUV || isopen) //I'm bored of all these sanity checks
return
if(OCCUPANT && safetieson)
- to_chat(user, "WARNING: Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.")
+ to_chat(user, span_red("WARNING: Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle."))
return
if(!HELMET && !MASK && !SUIT && !OCCUPANT) //shit's empty yo
- to_chat(user, "Unit storage bays empty. Nothing to disinfect -- Aborting.")
+ to_chat(user, span_red("Unit storage bays empty. Nothing to disinfect -- Aborting."))
return
to_chat(user, "You start the Unit's cauterisation cycle.")
cycletime_left = 20
@@ -295,7 +295,7 @@
SUIT = null
if(MASK)
MASK = null
- visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.", 3)
+ visible_message(span_red("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber."), 3)
isbroken = 1
isopen = 1
islocked = 0
@@ -320,9 +320,9 @@
if(OCCUPANT.client)
if(user != OCCUPANT)
- to_chat(OCCUPANT, "The machine kicks you out!")
+ to_chat(OCCUPANT, span_blue("The machine kicks you out!"))
if(user.loc != src.loc)
- to_chat(OCCUPANT, "You leave the not-so-cozy confines of the SSU.")
+ to_chat(OCCUPANT, span_blue("You leave the not-so-cozy confines of the SSU."))
OCCUPANT.client.eye = OCCUPANT.client.mob
OCCUPANT.client.perspective = MOB_PERSPECTIVE
@@ -356,13 +356,13 @@
if(usr.stat != 0)
return
if(!isopen)
- to_chat(usr, "The unit's doors are shut.")
+ to_chat(usr, span_red("The unit's doors are shut."))
return
if(!ispowered || isbroken)
- to_chat(usr, "The unit is not operational.")
+ to_chat(usr, span_red("The unit is not operational."))
return
if((OCCUPANT) || (HELMET) || (SUIT))
- to_chat(usr, "It's too cluttered inside for you to fit in!")
+ to_chat(usr, span_red("It's too cluttered inside for you to fit in!"))
return
visible_message("[usr] starts squeezing into the suit storage unit!", 3)
if(do_after(usr, 10))
@@ -388,7 +388,7 @@
if(I.has_tool_quality(TOOL_SCREWDRIVER))
panelopen = !panelopen
playsound(src, I.usesound, 100, 1)
- to_chat(user, "You [panelopen ? "open up" : "close"] the unit's maintenance panel.")
+ to_chat(user, span_blue("You [panelopen ? "open up" : "close"] the unit's maintenance panel."))
updateUsrDialog()
return
if(istype(I, /obj/item/weapon/grab))
@@ -396,13 +396,13 @@
if(!(ismob(G.affecting)))
return
if(!isopen)
- to_chat(user, "The unit's doors are shut.")
+ to_chat(user, span_red("The unit's doors are shut."))
return
if(!ispowered || isbroken)
- to_chat(user, "The unit is not operational.")
+ to_chat(user, span_red("The unit is not operational."))
return
if((OCCUPANT) || (HELMET) || (SUIT)) //Unit needs to be absolutely empty
- to_chat(user, "The unit's storage area is too cluttered.")
+ to_chat(user, span_red("The unit's storage area is too cluttered."))
return
visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3)
if(do_after(user, 20))
@@ -426,7 +426,7 @@
return
var/obj/item/clothing/suit/space/S = I
if(SUIT)
- to_chat(user, "The unit already contains a suit.")
+ to_chat(user, span_blue("The unit already contains a suit."))
return
to_chat(user, "You load the [S.name] into the storage compartment.")
user.drop_item()
@@ -440,7 +440,7 @@
return
var/obj/item/clothing/head/helmet/H = I
if(HELMET)
- to_chat(user, "The unit already contains a helmet.")
+ to_chat(user, span_blue("The unit already contains a helmet."))
return
to_chat(user, "You load the [H.name] into the storage compartment.")
user.drop_item()
@@ -454,7 +454,7 @@
return
var/obj/item/clothing/mask/M = I
if(MASK)
- to_chat(user, "The unit already contains a mask.")
+ to_chat(user, span_blue("The unit already contains a mask."))
return
to_chat(user, "You load the [M.name] into the storage compartment.")
user.drop_item()
@@ -473,4 +473,4 @@
//////////////////////////////REMINDER: Make it lock once you place some fucker inside.
-//God this entire file is fucking awful //Yes
\ No newline at end of file
+//God this entire file is fucking awful //Yes
diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm
index 88dace7ff9..1a163579c3 100644
--- a/code/game/mecha/combat/combat.dm
+++ b/code/game/mecha/combat/combat.dm
@@ -97,7 +97,7 @@
return
M.updatehealth()
src.occupant_message("You hit [T].")
- src.visible_message("[src.name] hits [T].")
+ src.visible_message(span_red("[src.name] hits [T]."))
else
step_away(M,src)
src.occupant_message("You push [T] out of the way.")
@@ -114,7 +114,7 @@
if(src.occupant.a_intent == I_HURT || istype(src.occupant, /mob/living/carbon/brain)) // Don't smash unless we mean it
if(damtype == "brute")
src.occupant_message("You hit [T].")
- src.visible_message("[src.name] hits [T]")
+ src.visible_message(span_red("[src.name] hits [T]"))
playsound(src, 'sound/weapons/heavysmash.ogg', 50, 1)
if(istype(T, /obj/structure/girder))
diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm
index 34dbe14a1e..8adb1c8661 100644
--- a/code/game/mecha/combat/gorilla.dm
+++ b/code/game/mecha/combat/gorilla.dm
@@ -1,6 +1,6 @@
/obj/mecha/combat/gorilla
- desc = "BLITZKRIEEEEEEEG!"
+ desc = span_red("")
name = "Sd.Kfz. 269 Mechakampfwagen Gorilla Ausf. A"
icon = 'icons/mecha/AxisMech.dmi'
icon_state = "pzrmech"
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index 1fa6933add..8e64f7efd8 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -120,7 +120,7 @@
/obj/mecha/combat/gygax/serenity/moved_inside(var/mob/living/carbon/human/H as mob)
if(..())
if(H.glasses)
- occupant_message("[H.glasses] prevent you from using [src] [hud]")
+ occupant_message(span_red("[H.glasses] prevent you from using [src] [hud]!"))
else
H.glasses = hud
H.recalculate_vis()
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 033cc181a1..0507f40e28 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -92,7 +92,7 @@
if(chassis.selected == src)
chassis.selected = null
src.update_chassis_page()
- chassis.occupant_message("The [src] is destroyed!")
+ chassis.occupant_message(span_red("The [src] is destroyed!"))
chassis.log_append_to_last("[src] is destroyed.",1)
if(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon))//Gun
switch(chassis.mech_faction)
diff --git a/code/game/mecha/equipment/tools/cable_layer.dm b/code/game/mecha/equipment/tools/cable_layer.dm
index 8de184cb7a..eb1e891a3b 100644
--- a/code/game/mecha/equipment/tools/cable_layer.dm
+++ b/code/game/mecha/equipment/tools/cable_layer.dm
@@ -20,7 +20,7 @@
var/result = load_cable(target)
var/message
if(isnull(result))
- message = "Unable to load [target] - no cable found."
+ message = span_red("Unable to load [target] - no cable found.")
else if(!result)
message = "Reel is full."
else
@@ -123,4 +123,4 @@
//NC.mergeConnectedNetworksOnTurf()
last_piece = NC
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/mecha/equipment/tools/sleeper.dm b/code/game/mecha/equipment/tools/sleeper.dm
index 9163ecec2b..634e1ad435 100644
--- a/code/game/mecha/equipment/tools/sleeper.dm
+++ b/code/game/mecha/equipment/tools/sleeper.dm
@@ -44,7 +44,7 @@
if(chassis.loc!=C || target.loc!=T)
return
if(occupant)
- occupant_message("The sleeper is already occupied!")
+ occupant_message(span_red("The sleeper is already occupied!"))
return
target.forceMove(src)
occupant = target
@@ -57,7 +57,7 @@
*/
set_ready_state(FALSE)
START_PROCESSING(SSprocessing, src)
- occupant_message("[target] successfully loaded into [src]. Life support functions engaged.")
+ occupant_message(span_blue("[target] successfully loaded into [src]. Life support functions engaged."))
chassis.visible_message("[chassis] loads [target] into [src].")
log_message("[target] loaded. Life support functions engaged.")
return
@@ -236,4 +236,4 @@
M.reagents.add_reagent("inaprovaline", 5)
chassis.use_power(energy_drain)
update_equip_info()
- return
\ No newline at end of file
+ return
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 8cf66223b7..857a9abc6f 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -624,7 +624,7 @@
show_radial_occupant(user)
return
if(state)
- occupant_message("Maintenance protocols in effect")
+ occupant_message(span_red("Maintenance protocols in effect"))
return
if(phasing)//Phazon and other mechs with phasing.
@@ -794,7 +794,7 @@
if(defence_mode)//Check if we are currently locked down
if(world.time - last_message > 20)
- src.occupant_message("Unable to move while in defence mode")
+ src.occupant_message(span_red("Unable to move while in defence mode"))
last_message = world.time
return 0
@@ -812,7 +812,7 @@
if(health < initial(health) - initial(health)/3)
overload = 0
step_energy_drain = initial(step_energy_drain)
- src.occupant_message("Leg actuators damage threshold exceded. Disabling overload.")
+ src.occupant_message(span_red("Leg actuators damage threshold exceded. Disabling overload."))
var/move_result = 0
@@ -983,12 +983,12 @@
internal_damage &= ~int_dam_flag
switch(int_dam_flag)
if(MECHA_INT_TEMP_CONTROL)
- occupant_message("Life support system reactivated.")
+ occupant_message(span_blue("Life support system reactivated."))
start_process(MECHA_PROC_INT_TEMP)
if(MECHA_INT_FIRE)
- occupant_message("Internal fire extinquished.")
+ occupant_message(span_blue("Internal fire extinquished."))
if(MECHA_INT_TANK_BREACH)
- occupant_message("Damaged internal tank has been sealed.")
+ occupant_message(span_blue("Damaged internal tank has been sealed."))
return
@@ -1101,9 +1101,9 @@
src.take_damage(15) //The take_damage() proc handles armor values
if(prob(25)) //Hulks punch hard but lets not give them consistent internal damage.
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
- user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.")
+ user.visible_message(span_red("[user] hits [src.name], doing some damage."), span_red("You hit [src.name] with all your might. The metal creaks and bends."))
else
- user.visible_message("[user] hits [src.name]. Nothing happens.","You hit [src.name] with no visible effect.")
+ user.visible_message(span_red("[user] hits [src.name]. Nothing happens."),span_red("You hit [src.name] with no visible effect."))
src.log_append_to_last("Armor saved.")
return
@@ -1381,8 +1381,8 @@
else
pass_damage_reduc_mod = 1 //Just making sure.
- src.occupant_message("[user] hits [src] with [W].")
- user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].")
+ src.occupant_message(span_red("[user] hits [src] with [W]."))
+ user.visible_message(span_red("[user] hits [src] with [W]."), span_red("You hit [src] with [W]."))
var/pass_damage = W.force
pass_damage = (pass_damage*pass_damage_reduc_mod) //Apply the reduction of damage from not having enough armor penetration. This is not regular armor values at play.
@@ -2559,7 +2559,7 @@
if(href_list["toggle_maint_access"])
if(usr != src.occupant) return
if(state)
- occupant_message("Maintenance protocols in effect")
+ occupant_message(span_red("Maintenance protocols in effect"))
return
maint_access = !maint_access
send_byjax(src.occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols")
@@ -2651,10 +2651,10 @@
if(do_after(100))
if(T == src.loc)
src.clearInternalDamage(MECHA_INT_CONTROL_LOST)
- src.occupant_message("Recalibration successful.")
+ src.occupant_message(span_blue("Recalibration successful."))
src.log_message("Recalibration of coordination system finished with 0 errors.")
else
- src.occupant_message("Recalibration failed.")
+ src.occupant_message(span_red("Recalibration failed."))
src.log_message("Recalibration of coordination system failed with 1 error.",1)
if(href_list["drop_from_cargo"])
var/obj/O = locate(href_list["drop_from_cargo"])
@@ -2799,7 +2799,7 @@
src.log_append_to_last("Armor saved.")
src.occupant_message("\The [user]'s attack is stopped by the armor.")
visible_message("\The [user] rebounds off [src.name]'s armor!")
- user.attack_log += text("\[[time_stamp()]\] attacked [src.name]")
+ user.attack_log += text("\[[time_stamp()]\] [span_red("attacked [src.name]")]")
playsound(src, 'sound/weapons/slash.ogg', 50, 1, -1)
else if(damage < temp_damage_minimum)//Pathetic damage levels just don't harm MECH.
@@ -2814,7 +2814,7 @@
if(damage > internal_damage_minimum) //Only decently painful attacks trigger a chance of mech damage.
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
visible_message("[user] [attack_message] [src]!")
- user.attack_log += text("\[[time_stamp()]\] attacked [src.name]")
+ user.attack_log += text("\[[time_stamp()]\] [span_red("attacked [src.name]")]")
return 1
diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm
index 33d7d711e8..cee2768dac 100644
--- a/code/game/mecha/mecha_actions.dm
+++ b/code/game/mecha/mecha_actions.dm
@@ -195,7 +195,7 @@
return
if(!chassis.selected)
chassis.selected = available_equipment[1]
- chassis.occupant_message("You select [chassis.selected]")
+ chassis.occupant_message("You select [chassis.selected]")
send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
button_icon_state = "mech_cycle_equip_on"
button.UpdateIcon()
@@ -277,10 +277,10 @@
defence_mode = !defence_mode
if(defence_mode)
deflect_chance = defence_deflect
- src.occupant_message("You enable [src] defence mode.")
+ src.occupant_message(span_blue("You enable [src] defence mode."))
else
deflect_chance = initial(deflect_chance)
- src.occupant_message("You disable [src] defence mode.")
+ src.occupant_message(span_red("You disable [src] defence mode."))
src.log_message("Toggled defence mode.")
return
@@ -299,17 +299,17 @@
if(usr!=src.occupant)
return
if(health < initial(health) - initial(health)/3)//Same formula as in movement, just beforehand.
- src.occupant_message("Leg actuators damage critical, unable to engage overload.")
+ src.occupant_message(span_red("Leg actuators damage critical, unable to engage overload."))
overload = 0 //Just to be sure
return
if(overload)
overload = 0
step_energy_drain = initial(step_energy_drain)
- src.occupant_message("You disable leg actuators overload.")
+ src.occupant_message(span_blue("You disable leg actuators overload."))
else
overload = 1
step_energy_drain = step_energy_drain*overload_coeff
- src.occupant_message("You enable leg actuators overload.")
+ src.occupant_message(span_red("You enable leg actuators overload."))
src.log_message("Toggled leg actuators overload.")
playsound(src, 'sound/mecha/mechanical_toggle.ogg', 50, 1)
return
@@ -327,12 +327,12 @@
return
if(smoke_reserve < 1)
- src.occupant_message("You don't have any smoke left in stock!")
+ src.occupant_message(span_red("You don't have any smoke left in stock!"))
return
if(smoke_ready)
smoke_reserve-- //Remove ammo
- src.occupant_message("Smoke fired. [smoke_reserve] usages left.")
+ src.occupant_message(span_red("Smoke fired. [smoke_reserve] usages left."))
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
smoke.attach(src)
@@ -360,7 +360,10 @@
if(src.occupant.client)
src.zoom = !src.zoom
src.log_message("Toggled zoom mode.")
- src.occupant_message("Zoom mode [zoom?"en":"dis"]abled.")
+ if(src.zoom)
+ src.occupant_message(span_blue("Zoom mode enabled."))
+ else
+ src.occupant_message(span_red("Zoom mode disabled."))
if(zoom)
src.occupant.set_viewsize(12)
src.occupant << sound('sound/mecha/imag_enh.ogg',volume=50)
@@ -384,7 +387,10 @@
if(get_charge() > 0)
thrusters = !thrusters
src.log_message("Toggled thrusters.")
- src.occupant_message("Thrusters [thrusters?"en":"dis"]abled.")
+ if(src.thrusters)
+ src.occupant_message(span_blue("Thrusters enabled."))
+ else
+ src.occupant_message(span_red("Thrusters disabled."))
return
@@ -427,7 +433,10 @@
return
phasing = !phasing
send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing")
- src.occupant_message("En":"#f00\">Dis"]abled phasing.")
+ if(phasing)
+ src.occupant_message(span_blue("Enabled phasing."))
+ else
+ src.occupant_message(span_red("Disabled phasing."))
return
@@ -447,7 +456,10 @@
else
cloak()
- src.occupant_message("En":"#f00\">Dis"]abled cloaking.")
+ if(cloaked)
+ src.occupant_message(span_blue("Enabled cloaking."))
+ else
+ src.occupant_message(span_red("Disabled cloaking."))
return
/obj/mecha/verb/toggle_weapons_only_cycle()
@@ -461,5 +473,8 @@
if(usr!=src.occupant)
return
weapons_only_cycle = !weapons_only_cycle
- src.occupant_message("En":"#f00\">Dis"]abled weapons only cycling.")
+ if(weapons_only_cycle)
+ src.occupant_message(span_blue("Enabled weapons only cycling."))
+ else
+ src.occupant_message(span_red("Disabled weapons only cycling."))
return
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index f1612e9083..929418e4a4 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -28,7 +28,7 @@
/obj/mecha/medical/odysseus/moved_inside(var/mob/living/carbon/human/H as mob)
if(..())
if(H.glasses)
- occupant_message("[H.glasses] prevent you from using [src] [hud]")
+ occupant_message(span_red("[H.glasses] prevent you from using [src] [hud]!"))
else
H.glasses = hud
H.recalculate_vis()
@@ -143,4 +143,4 @@
..()
health = 25
maxhealth = 50 //Just slightly worse.
- cell.charge = rand(0, (cell.charge/2))
\ No newline at end of file
+ cell.charge = rand(0, (cell.charge/2))
diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm
index 2a9d4c3e63..2aee976a62 100644
--- a/code/game/mecha/micro/micro.dm
+++ b/code/game/mecha/micro/micro.dm
@@ -82,7 +82,7 @@
return
M.updatehealth()
src.occupant_message("You hit [target].")
- src.visible_message("[src.name] hits [target].")
+ src.visible_message(span_red("[src.name] hits [target]."))
else
step_away(M,src)
src.occupant_message("You push [target] out of the way.")
@@ -98,7 +98,7 @@
for(var/target_type in src.destroyable_obj)
if(istype(target, target_type) && hascall(target, "attackby"))
src.occupant_message("You hit [target].")
- src.visible_message("[src.name] hits [target]")
+ src.visible_message(span_red("[src.name] hits [target]."))
if(!istype(target, /turf/simulated/wall))
target:attackby(src,src.occupant)
else
@@ -155,5 +155,5 @@
return result
/obj/effect/decal/mecha_wreckage/micro
+<<<<<<< HEAD
icon = 'icons/mecha/micro.dmi' */
-
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index c76f4623d6..ab77933630 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -353,12 +353,12 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
return
var/mob/M = usr
if(!istype(M, /mob/living/carbon))
- to_chat(usr, "You don't have any DNA, or your DNA is incompatible with this device.")
+ to_chat(usr, span_blue("You don't have any DNA, or your DNA is incompatible with this device."))
else
var/datum/dna/dna = usr.dna
pai.master = M.real_name
pai.master_dna = dna.unique_enzymes
- to_chat(pai, "You have been bound to a new master.
")
+ to_chat(pai, span_red("You have been bound to a new master.
"))
if(href_list["request"])
src.looking_for_personality = 1
paiController.findPAI(src, usr)
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 5c272ce464..1f443f45c9 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -210,10 +210,10 @@
/obj/item/device/radio/intercom/AIAltClick(var/mob/user)
if(frequency == AI_FREQ)
set_frequency(initial(frequency))
- to_chat(user, "\The [src]'s frequency is now set to Default.")
+ to_chat(user, "\The [src]'s frequency is now set to [span_green("Default")].")
else
set_frequency(AI_FREQ)
- to_chat(user, "\The [src]'s frequency is now set to AI Private.")
+ to_chat(user, "\The [src]'s frequency is now set to [span_pink("AI Private")].")
//VOREStation Add End
/obj/item/device/radio/intercom/locked
var/locked_frequency
diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm
index 6d854e201c..2d0b040c99 100644
--- a/code/game/objects/items/devices/scanners/health.dm
+++ b/code/game/objects/items/devices/scanners/health.dm
@@ -59,11 +59,11 @@
if (!ishuman(M) || M.isSynthetic())
//these sensors are designed for organic life
dat += "Analyzing Results for ERROR:\n\tOverall Status: ERROR
"
- dat += "\tKey: Suffocation/Toxin/Burns/Brute
"
- dat += "\tDamage Specifics: ? - ? - ? - ?
"
+ dat += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
"
+ dat += "\tDamage Specifics: [span_cyan("?")] - [span_green("?")] - [span_orange("?")] - [span_red("?")]
"
dat += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)
"
dat += "Warning: Blood Level ERROR: --% --cl. Type: ERROR
"
- dat += "Subject's pulse: -- bpm."
+ dat += "Subject's pulse: [span_red("-- bpm.")]"
user.show_message(dat, 1)
return
@@ -78,8 +78,8 @@
dat += "Overall Status: dead
"
else
dat += "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]
"
- dat += "\tKey: Suffocation/Toxin/Burns/Brute
"
- dat += "\tDamage Specifics: [OX] - [TX] - [BU] - [BR]
"
+ dat += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
"
+ dat += "\tDamage Specifics: [span_cyan("[OX]")] - [span_green("[TX]")] - [span_orange("[BU]")] - [span_red("[BR]")]
"
dat += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)
"
//VOREStation edit/addition starts
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
@@ -99,14 +99,14 @@
else
dat += " [capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : 0]"
dat += "[(org.status & ORGAN_BLEEDING)?"\[Bleeding\]":""] - "
- dat += "[(org.burn_dam > 0) ? "[org.burn_dam]" : 0]
"
+ dat += "[(org.burn_dam > 0) ? "[span_orange("[org.burn_dam]")]" : 0]
"
else
dat += " Limbs are OK.
"
- OX = M.getOxyLoss() > 50 ? "Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal"
- TX = M.getToxLoss() > 50 ? "Dangerous amount of toxins detected" : "Subject bloodstream toxin level minimal"
- BU = M.getFireLoss() > 50 ? "Severe burn damage detected" : "Subject burn injury status O.K"
- BR = M.getBruteLoss() > 50 ? "Severe anatomical damage detected" : "Subject brute-force injury status O.K"
+ OX = M.getOxyLoss() > 50 ? "[span_cyan("Severe oxygen deprivation detected")]" : "Subject bloodstream oxygen level normal"
+ TX = M.getToxLoss() > 50 ? "[span_green("Dangerous amount of toxins detected")]" : "Subject bloodstream toxin level minimal"
+ BU = M.getFireLoss() > 50 ? "[span_orange("Severe burn damage detected")]" : "Subject burn injury status O.K"
+ BR = M.getBruteLoss() > 50 ? "[span_red("Severe anatomical damage detected")]" : "Subject brute-force injury status O.K"
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal"
dat += "[OX] | [TX] | [BU] | [BR]
"
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index aa726314fe..77b520e6f6 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -268,13 +268,13 @@
var/playedmessage = mytape.storedinfo[i]
if (findtextEx(playedmessage,"*",1,2)) //remove marker for action sounds
playedmessage = copytext(playedmessage,2)
- T.audible_message("Tape Recorder: [playedmessage]", runemessage = playedmessage)
+ T.audible_message(span_maroon("Tape Recorder: [playedmessage]"), runemessage = playedmessage)
if(mytape.storedinfo.len < i+1)
playsleepseconds = 1
sleep(10)
T = get_turf(src)
- T.audible_message("Tape Recorder: End of recording.", runemessage = "click")
+ T.audible_message(span_maroon("Tape Recorder: End of recording."), runemessage = "click")
break
else
playsleepseconds = mytape.timestamp[i+1] - mytape.timestamp[i]
@@ -282,7 +282,7 @@
if(playsleepseconds > 14)
sleep(10)
T = get_turf(src)
- T.audible_message("Tape Recorder: Skipping [playsleepseconds] seconds of silence", runemessage = "tape winding")
+ T.audible_message(span_maroon("Tape Recorder: Skipping [playsleepseconds] seconds of silence"), runemessage = "tape winding")
playsleepseconds = 1
sleep(10 * playsleepseconds)
@@ -292,19 +292,19 @@
if(emagged)
var/turf/T = get_turf(src)
- T.audible_message("Tape Recorder: This tape recorder will self-destruct in... Five.", runemessage = "beep beep")
+ T.audible_message(span_maroon("Tape Recorder: This tape recorder will self-destruct in... Five."), runemessage = "beep beep")
sleep(10)
T = get_turf(src)
- T.audible_message("Tape Recorder: Four.")
+ T.audible_message(span_maroon("Tape Recorder: Four."))
sleep(10)
T = get_turf(src)
- T.audible_message("Tape Recorder: Three.")
+ T.audible_message(span_maroon("Tape Recorder: Three."))
sleep(10)
T = get_turf(src)
- T.audible_message("Tape Recorder: Two.")
+ T.audible_message(span_maroon("Tape Recorder: Two."))
sleep(10)
T = get_turf(src)
- T.audible_message("Tape Recorder: One.")
+ T.audible_message(span_maroon("Tape Recorder: One."))
sleep(10)
explode()
diff --git a/code/game/objects/items/devices/translocator_vr.dm b/code/game/objects/items/devices/translocator_vr.dm
index ab203a817f..79e49bf460 100644
--- a/code/game/objects/items/devices/translocator_vr.dm
+++ b/code/game/objects/items/devices/translocator_vr.dm
@@ -301,11 +301,11 @@ This device records all warnings given and teleport events for admin review in c
if(isbelly(real_dest))
var/obj/belly/B = real_dest
if(!(target.can_be_drop_prey) && B.owner != user)
- to_chat(target,"\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!")
+ to_chat(target,"\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!")
real_dest = dT //Nevermind!
else
televored = TRUE
- to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!")
+ to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!")
//Phase-out effect
phase_out(target,get_turf(target))
diff --git a/code/game/objects/items/sahoc_ch.dm b/code/game/objects/items/sahoc_ch.dm
index 65fb11382e..bbe4c91b69 100644
--- a/code/game/objects/items/sahoc_ch.dm
+++ b/code/game/objects/items/sahoc_ch.dm
@@ -139,7 +139,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = M
H.resize(chaos/100)
- H.show_message(" The beam fires into your body, changing your size!")
+ H.show_message(span_purple("The beam fires into your body, changing your size!"))
H.update_icon()
else if (istype(target, /mob/living/))
var/mob/living/H = M
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index d61f0d0310..5dd08afc72 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -335,7 +335,7 @@
/obj/item/weapon/storage/box/mousetraps
name = "box of Pest-B-Gon mousetraps"
- desc = "WARNING: Keep out of reach of children."
+ desc = span_red("WARNING:") + " Keep out of reach of children."
icon_state = "mousetraps"
starts_with = list(/obj/item/device/assembly/mousetrap = 7)
@@ -504,4 +504,4 @@
name = "box of sin-pockets"
desc = "Instructions: Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes."
icon_state = "donk_kit"
- starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 7)
\ No newline at end of file
+ starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 7)
diff --git a/code/game/objects/structures/crates_lockers/crates_vr.dm b/code/game/objects/structures/crates_lockers/crates_vr.dm
index 5ebf9894e9..8825c25d83 100644
--- a/code/game/objects/structures/crates_lockers/crates_vr.dm
+++ b/code/game/objects/structures/crates_lockers/crates_vr.dm
@@ -7,7 +7,7 @@
if(locked && tamper_proof && health <= Proj.damage)
if(tamper_proof == 2) // Mainly used for events to prevent any chance of opening the box improperly.
- visible_message("The anti-tamper mechanism of [src] triggers an explosion!")
+ visible_message(span_red("The anti-tamper mechanism of [src] triggers an explosion!"))
var/turf/T = get_turf(src.loc)
explosion(T, 0, 0, 0, 1) // Non-damaging, but it'll alert security.
qdel(src)
@@ -15,18 +15,18 @@
var/open_chance = rand(1,5)
switch(open_chance)
if(1)
- visible_message("The anti-tamper mechanism of [src] causes an explosion!")
+ visible_message(span_red("The anti-tamper mechanism of [src] causes an explosion!"))
var/turf/T = get_turf(src.loc)
explosion(T, 0, 0, 0, 1) // Non-damaging, but it'll alert security.
qdel(src)
if(2 to 4)
- visible_message("The anti-tamper mechanism of [src] causes a small fire!")
+ visible_message(span_red("The anti-tamper mechanism of [src] causes a small fire!"))
for(var/atom/movable/A as mob|obj in src) // For every item in the box, we spawn a pile of ash.
new /obj/effect/decal/cleanable/ash(src.loc)
new /obj/fire(src.loc)
qdel(src)
if(5)
- visible_message("The anti-tamper mechanism of [src] fails!")
+ visible_message(span_green("The anti-tamper mechanism of [src] fails!"))
return
..()
diff --git a/code/game/objects/structures/dancepole_vr.dm b/code/game/objects/structures/dancepole_vr.dm
index 9d5ec53223..683cb99c0c 100644
--- a/code/game/objects/structures/dancepole_vr.dm
+++ b/code/game/objects/structures/dancepole_vr.dm
@@ -12,9 +12,9 @@
anchored = !anchored
playsound(src, O.usesound, 50, 1)
if(anchored)
- to_chat(user, "You secure \the [src].")
+ to_chat(user, span_blue("You secure \the [src]."))
else
- to_chat(user, "You unsecure \the [src].")
+ to_chat(user, span_blue("You unsecure \the [src]."))
if(O.has_tool_quality(TOOL_WRENCH))
playsound(src, O.usesound, 50, 1)
to_chat(user, "Now disassembling \the [src]...")
diff --git a/code/game/world.dm b/code/game/world.dm
index 70df3ea593..dd3b60958a 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -386,8 +386,8 @@ var/world_topic_spam_protect_time = world.timeofday
if(!rank)
rank = "Admin"
- var/message = "IRC-[rank] PM from IRC-[input["sender"]]: [input["msg"]]"
- var/amessage = "IRC-[rank] PM from IRC-[input["sender"]] to [key_name(C)] : [input["msg"]]"
+ var/message = span_red("IRC-[rank] PM from IRC-[input["sender"]]: [input["msg"]]")
+ var/amessage = span_blue("IRC-[rank] PM from IRC-[input["sender"]] to [key_name(C)] : [input["msg"]]")
C.received_irc_pm = world.time
C.irc_admin = input["sender"]
diff --git a/code/modules/Phorochemistry/phororeagent.dm b/code/modules/Phorochemistry/phororeagent.dm
index 36e886a671..5052119600 100644
--- a/code/modules/Phorochemistry/phororeagent.dm
+++ b/code/modules/Phorochemistry/phororeagent.dm
@@ -130,14 +130,14 @@ var/induromol_code = rand(1, 50)
love_name = H.name
if(love_name)
- to_chat(M, "You see [love_name]...")
+ to_chat(M, span_darkpink("You see [love_name]..."))
spawn(0)
sleep(10)
- to_chat(M, "They are beautiful")
+ to_chat(M, span_darkpink("They are beautiful"))
if(M.mind) //give protect objective
var/datum/objective/protection = new/datum/objective()
- protection.explanation_text = "Protect [love_name] at all costs"
+ protection.explanation_text = span_darkpink("Protect [love_name] at all costs")
M.mind.objectives.Add(protection)
var/obj_count = 1
to_chat(M, "Your current objectives:")
@@ -155,10 +155,10 @@ var/induromol_code = rand(1, 50)
"[love_name] seems to be the essence of perfection",
"[love_name] can never be allowed to leave your side")
- to_chat(M, "[pick(love_messages)]")
+ to_chat(M, span_darkpink("[pick(love_messages)]"))
else
- to_chat(M, "You begin to build a trouser tent")
+ to_chat(M, span_darkpink("You begin to build a trouser tent"))
return ..()
/datum/reagent/phororeagent/love_potion/on_remove(var/atom/A)
@@ -1158,4 +1158,4 @@ nocturnol //Should give night vision, does not seem to work using this method of
var/mob/M = A
M.see_in_dark = 2
return ..()
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm
index 1f1e3aea4e..185d0e9b4b 100644
--- a/code/modules/admin/DB ban/functions.dm
+++ b/code/modules/admin/DB ban/functions.dm
@@ -82,10 +82,10 @@
reason = sql_sanitize_text(reason)
var/list/sqlargs = list("t_bantype" = bantype_str, "t_reason" = reason, "t_job" = job, "t_ckey" = ckey, "t_a_ckey" = a_ckey, "t_who" = who, "t_adminwho" = adminwho) //CHOMPEdit TGSQL
var/sql = "INSERT INTO erro_ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', :t_bantype, :t_reason, :t_job, [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, :t_ckey, '[computerid]', '[ip]', :t_a_ckey, '[a_computerid]', '[a_ip]', :t_who, :t_adminwho, '', null, null, null, null, null)" //CHOMPEdit TGSQL
-
+
var/DBQuery/query_insert = SSdbcore.NewQuery(sql,sqlargs) //CHOMPEdit TGSQL
query_insert.Execute()
- to_chat(usr, "Ban saved to database.")
+ to_chat(usr, "[span_blue("Ban saved to database.")]")
message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1)
qdel(query_insert) //CHOMPEdit TGSQL
@@ -139,17 +139,17 @@
ban_number++;
qdel(query) //CHOMPEdit TGSQL
if(ban_number == 0)
- to_chat(usr, "Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.")
+ to_chat(usr, "[span_red("Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.")]")
return
if(ban_number > 1)
- to_chat(usr, "Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.")
+ to_chat(usr, "[span_red("Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.")]")
return
if(istext(ban_id))
ban_id = text2num(ban_id)
if(!isnum(ban_id))
- to_chat(usr, "Database update failed due to a ban ID mismatch. Contact the database admin.")
+ to_chat(usr, "[span_red("Database update failed due to a ban ID mismatch. Contact the database admin.")]")
return
DB_ban_unban_by_id(ban_id)
@@ -232,11 +232,11 @@
ban_number++;
qdel(query) //CHOMPEdit TGSQL
if(ban_number == 0)
- to_chat(usr, "Database update failed due to a ban id not being present in the database.")
+ to_chat(usr, "[span_red("Database update failed due to a ban id not being present in the database.")]")
return
if(ban_number > 1)
- to_chat(usr, "Database update failed due to multiple bans having the same ID. Contact the database admin.")
+ to_chat(usr, "[span_red("Database update failed due to multiple bans having the same ID. Contact the database admin.")]")
return
if(!src.owner || !istype(src.owner, /client))
@@ -272,7 +272,7 @@
establish_db_connection()
if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL
- to_chat(usr, "Failed to establish database connection")
+ to_chat(usr, "[span_red("Failed to establish database connection")]")
return
var/output = ""
@@ -370,7 +370,7 @@
var/cidsearch = ""
var/bantypesearch = ""
//CHOMPEdit Begin
- var/list/sqlargs = list()
+ var/list/sqlargs = list()
if(!match)
if(adminckey)
adminsearch = "AND a_ckey = :t_adminckey "
diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm
index ca436a38ea..9325152a23 100644
--- a/code/modules/admin/IsBanned.dm
+++ b/code/modules/admin/IsBanned.dm
@@ -7,13 +7,13 @@
//Guest Checking
if(!config.guests_allowed && IsGuestKey(key))
log_adminwarn("Failed Login: [key] - Guests not allowed")
- message_admins("Failed Login: [key] - Guests not allowed")
+ message_admins(span_blue("Failed Login: [key] - Guests not allowed"))
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
//check if the IP address is a known TOR node
if(config && config.ToRban && ToRban_isbanned(address))
log_adminwarn("Failed Login: [src] - Banned: ToR")
- message_admins("Failed Login: [src] - Banned: ToR")
+ message_admins(span_blue("Failed Login: [src] - Banned: ToR"))
//ban their computer_id and ckey for posterity
AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0)
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
@@ -25,7 +25,7 @@
. = CheckBan( ckey(key), computer_id, address )
if(.)
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
- message_admins("Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]")
+ message_admins(span_blue("Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]"))
return .
return ..() //default pager ban stuff
diff --git a/code/modules/admin/ToRban.dm b/code/modules/admin/ToRban.dm
index dfe4ba88e2..0002cb7e29 100644
--- a/code/modules/admin/ToRban.dm
+++ b/code/modules/admin/ToRban.dm
@@ -54,10 +54,10 @@
if(config)
if(config.ToRban)
config.ToRban = 0
- message_admins("ToR banning disabled.")
+ message_admins(span_red("ToR banning disabled."))
else
config.ToRban = 1
- message_admins("ToR banning enabled.")
+ message_admins(span_green("ToR banning enabled."))
if("show")
var/savefile/F = new(TORFILE)
var/dat
@@ -80,7 +80,7 @@
var/input = tgui_input_text(src,"Please input an IP address to search for:","Find ToR ban",null)
if(input)
if(ToRban_isbanned(input))
- to_chat(src, "Address is a known ToR address")
+ to_chat(src, "[span_orange("Address is a known ToR address")]")
else
to_chat(src, "Address is not a known ToR address")
return
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index be958393a7..b24f8eeed6 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -866,7 +866,7 @@ var/datum/announcement/minor/admin_min_announcer = new
else
to_world("New players may now enter the game.")
log_admin("[key_name(usr)] toggled new player game entering.")
- message_admins("[key_name_admin(usr)] toggled new player game entering.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] toggled new player game entering."), 1)
world.update_status()
feedback_add_details("admin_verb","TE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -892,7 +892,7 @@ var/datum/announcement/minor/admin_min_announcer = new
to_world("You may now respawn.")
else
to_world("You may no longer respawn :(")
- message_admins("[key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"]."), 1)
log_admin("[key_name(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].")
world.update_status()
feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -908,7 +908,7 @@ var/datum/announcement/minor/admin_min_announcer = new
else
to_world("Persistence is no longer enabled.")
*/
- message_admins("[key_name_admin(usr)] toggled persistence to [config.persistence_disabled ? "Off" : "On"].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] toggled persistence to [config.persistence_disabled ? "Off" : "On"]."), 1)
log_admin("[key_name(usr)] toggled persistence to [config.persistence_disabled ? "Off" : "On"].")
world.update_status()
feedback_add_details("admin_verb","TPD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -922,7 +922,7 @@ var/datum/announcement/minor/admin_min_announcer = new
to_world("Persistence is now enabled..")
else
to_world("Persistence is no longer enabled.")
- message_admins("[key_name_admin(usr)] toggled persistence to [config.persistence_ignore_mapload ? "Off" : "On"].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] toggled persistence to [config.persistence_ignore_mapload ? "Off" : "On"]."), 1)
log_admin("[key_name(usr)] toggled persistence to [config.persistence_ignore_mapload ? "Off" : "On"].")
world.update_status()
feedback_add_details("admin_verb","TMPD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -954,7 +954,7 @@ var/datum/announcement/minor/admin_min_announcer = new
if (SSticker.current_state >= GAME_STATE_PLAYING)
SSticker.delay_end = !SSticker.delay_end
log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
- message_admins("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
+ message_admins(span_blue("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"]."), 1)
return
round_progressing = !round_progressing
if (!round_progressing)
@@ -970,7 +970,7 @@ var/datum/announcement/minor/admin_min_announcer = new
set desc="Toggle admin jumping"
set name="Toggle Jump"
config.allow_admin_jump = !(config.allow_admin_jump)
- message_admins("Toggled admin jumping to [config.allow_admin_jump].")
+ message_admins(span_blue("Toggled admin jumping to [config.allow_admin_jump]."))
feedback_add_details("admin_verb","TJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/adspawn()
@@ -978,7 +978,7 @@ var/datum/announcement/minor/admin_min_announcer = new
set desc="Toggle admin spawning"
set name="Toggle Spawn"
config.allow_admin_spawning = !(config.allow_admin_spawning)
- message_admins("Toggled admin item spawning to [config.allow_admin_spawning].")
+ message_admins(span_blue("Toggled admin item spawning to [config.allow_admin_spawning]."))
feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/adrev()
@@ -986,7 +986,7 @@ var/datum/announcement/minor/admin_min_announcer = new
set desc="Toggle admin revives"
set name="Toggle Revive"
config.allow_admin_rev = !(config.allow_admin_rev)
- message_admins("Toggled reviving to [config.allow_admin_rev].")
+ message_admins(span_blue("Toggled reviving to [config.allow_admin_rev]."))
feedback_add_details("admin_verb","TAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/immreboot()
@@ -996,7 +996,7 @@ var/datum/announcement/minor/admin_min_announcer = new
if(!usr.client.holder) return
if(alert(usr, "Reboot server?","Reboot!","Yes","No") == "No") // Not tgui_alert for safety
return
- to_world("Rebooting world! Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!")
+ to_world("[span_red("Rebooting world!")] [span_blue("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!")]")
log_admin("[key_name(usr)] initiated an immediate reboot.")
feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
@@ -1262,7 +1262,7 @@ var/datum/announcement/minor/admin_min_announcer = new
else
to_world("Guests may now enter the game.")
log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.")
- message_admins("[key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed."), 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/output_ai_laws()
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 5cc05e5360..abbb674842 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -281,7 +281,7 @@
var/light_impact_range = tgui_input_number(usr, "Light impact range (in tiles):")
var/flash_range = tgui_input_number(usr, "Flash range (in tiles):")
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range)
- message_admins("[ckey] creating an admin explosion at [epicenter.loc].")
+ message_admins(span_blue("[ckey] creating an admin explosion at [epicenter.loc]."))
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
@@ -313,7 +313,7 @@
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
- message_admins("[key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance]."), 1)
/client/proc/admin_give_modifier(var/mob/living/L)
set category = "Debug"
@@ -349,7 +349,7 @@
return
O.audible_message(message)
log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound")
- message_admins("[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound."), 1)
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -379,7 +379,7 @@
to_chat(usr, "[SSair.can_fire ? "En" : "Dis"]abled air processing.")
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] used 'kill air'.")
- message_admins("[key_name_admin(usr)] used 'kill air'.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] used 'kill air'."), 1)
/client/proc/readmin_self()
set name = "Re-Admin self"
@@ -535,7 +535,7 @@
to_chat(T, "Move along.")
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
- message_admins("[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] told [key_name(T)] to man up and deal with it."), 1)
/client/proc/global_man_up()
set category = "Fun"
@@ -549,7 +549,7 @@
T << 'sound/voice/ManUp1.ogg'
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
- message_admins("[key_name_admin(usr)] told everyone to man up and deal with it.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] told everyone to man up and deal with it."), 1)
/client/proc/give_spell(mob/T as mob in mob_list) // -- Urist
set category = "Fun"
@@ -560,4 +560,4 @@
T.spell_list += new S
feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].")
- message_admins("[key_name_admin(usr)] gave [key_name(T)] the spell [S].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] gave [key_name(T)] the spell [S]."), 1)
diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm
index 58e9012277..b3bea8ee6c 100644
--- a/code/modules/admin/callproc/callproc.dm
+++ b/code/modules/admin/callproc/callproc.dm
@@ -39,12 +39,12 @@
testname = replacetext(testname, "()", "")
if(targetselected && !hascall(target,testname))
- to_chat(usr, "Error: callproc(): type [target.type] has no proc named [procname].")
+ to_chat(usr, "" + span_red("Error: callproc(): type [target.type] has no proc named [procname].") + "")
return
else
var/procpath = text2path(procname)
if (!procpath)
- to_chat(usr, "Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)")
+ to_chat(usr, "" + span_red("Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)") + "")
return
var/list/lst = get_callproc_args()
if(!lst)
@@ -52,7 +52,7 @@
if(targetselected)
if(!target)
- to_chat(usr, "Error: callproc(): owner of proc no longer exists.")
+ to_chat(usr, "" + span_red("Error: callproc(): owner of proc no longer exists.") + "")
return
var/msg = "[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
log_admin(msg)
@@ -140,7 +140,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
if(!procname)
return
if(!hascall(A,procname))
- to_chat(usr, "Error: callproc_datum(): type [A.type] has no proc named [procname].")
+ to_chat(usr, "" + span_red("Error: callproc_datum(): type [A.type] has no proc named [procname].") + "")
return
var/list/lst = get_callproc_args()
if(!lst)
@@ -190,7 +190,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
. = ""
if(islist(returnval))
var/list/returnedlist = returnval
- . = ""
+ . = ""
if(returnedlist.len)
var/assoc_check = returnedlist[1]
if(istext(assoc_check) && (returnedlist[assoc_check] != null))
@@ -204,7 +204,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
. += "\n[elem]"
else
. = "[procname] returned an empty list"
- . += ""
+ . += ""
else
- . = "[procname] returned: [!isnull(returnval) ? returnval : "null"]"
+ . = span_blue("[procname] returned: [!isnull(returnval) ? returnval : "null"]")
diff --git a/code/modules/admin/newbanjob.dm b/code/modules/admin/newbanjob.dm
index 4915c00594..7657182312 100644
--- a/code/modules/admin/newbanjob.dm
+++ b/code/modules/admin/newbanjob.dm
@@ -141,7 +141,7 @@ var/savefile/Banlistjob
Banlistjob.cd = "/base"
if ( Banlistjob.dir.Find("[ckey][computerid][rank]") )
- to_chat(usr,"Banjob already exists.")
+ to_chat(usr, span_red("Banjob already exists."))
return 0
else
Banlistjob.dir.Add("[ckey][computerid][rank]")
diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm
index e688bc666d..7d829f205a 100644
--- a/code/modules/admin/permissionverbs/permissionedit.dm
+++ b/code/modules/admin/permissionverbs/permissionedit.dm
@@ -51,13 +51,13 @@
return
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
- to_chat(usr, "You do not have permission to do this!")
+ to_chat(usr, "[span_red("You do not have permission to do this!")]")
return
establish_db_connection()
if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL
- to_chat(usr, "Failed to establish database connection")
+ to_chat(usr, "[span_red("Failed to establish database connection")]")
return
if(!adm_ckey || !new_rank)
@@ -87,7 +87,7 @@
var/DBQuery/log_query = SSdbcore.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');") //CHOMPEdit TGSQL
log_query.Execute()
qdel(log_query) //CHOMPEdit TGSQL
- to_chat(usr, "New admin added.")
+ to_chat(usr, "[span_blue("New admin added.")]")
else
if(!isnull(admin_id) && isnum(admin_id))
var/DBQuery/insert_query = SSdbcore.NewQuery("UPDATE `erro_admin` SET rank = '[new_rank]' WHERE id = [admin_id]") //CHOMPEdit TGSQL
@@ -96,7 +96,7 @@
var/DBQuery/log_query = SSdbcore.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');") //CHOMPEdit TGSQL
log_query.Execute()
qdel(log_query) //CHOMPEdit TGSQL
- to_chat(usr, "Admin rank changed.")
+ to_chat(usr, "[span_blue("Admin rank changed.")]")
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
if(config.admin_legacy_system) return
@@ -105,12 +105,12 @@
return
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
- to_chat(usr, "You do not have permission to do this!")
+ to_chat(usr, "[span_red(">You do not have permission to do this!")]")
return
establish_db_connection()
if(!SSdbcore.IsConnected()) //CHOMPEdit TGSQL
- to_chat(usr, "Failed to establish database connection")
+ to_chat(usr, "[span_red("Failed to establish database connection!")]")
return
if(!adm_ckey || !new_permission)
@@ -146,7 +146,7 @@
var/DBQuery/log_query = SSdbcore.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');") //CHOMPEdit TGSQL
log_query.Execute()
qdel(log_query) //CHOMPEdit TGSQL
- to_chat(usr, "Permission removed.")
+ to_chat(usr, "[span_blue("Permission removed.")]")
else //This admin doesn't have this permission, so we are adding it.
var/DBQuery/insert_query = SSdbcore.NewQuery("UPDATE `erro_admin` SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]") //CHOMPEdit TGSQL
insert_query.Execute()
@@ -154,4 +154,4 @@
var/DBQuery/log_query = SSdbcore.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')") //CHOMPEdit TGSQL
log_query.Execute()
qdel(log_query) //CHOMPEdit TGSQL
- to_chat(usr, "Permission added.")
+ to_chat(usr, "[span_blue("Permission added.")]")
diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm
index f25e6024b9..53479bdcad 100644
--- a/code/modules/admin/player_notes.dm
+++ b/code/modules/admin/player_notes.dm
@@ -37,7 +37,7 @@
infos += P
info << infos
- message_admins("[key_name_admin(user)] has edited [key]'s notes.")
+ message_admins(span_blue("[key_name_admin(user)] has edited [key]'s notes."))
log_admin("[key_name(user)] has edited [key]'s notes.")
admin_action_message(P.author, key, "added note on", note, 0) //VOREStation Add
del(info) // savefile, so NOT qdel
@@ -62,7 +62,7 @@
infos.Remove(item)
info << infos
- message_admins("[key_name_admin(usr)] deleted one of [key]'s notes.")
+ message_admins(span_blue("[key_name_admin(usr)] deleted one of [key]'s notes."))
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
admin_action_message(usr.key, key, "deleted note on", "\[Note gone\]", 0) //VOREStation Add
qdel(info)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index c277a37ff9..95be2adc65 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -237,7 +237,7 @@
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
log_admin("[key_name(usr)] called the Emergency Shuttle")
- message_admins("[key_name_admin(usr)] called the Emergency Shuttle to the station.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] called the Emergency Shuttle to the station."), 1)
if("2")
if (!( ticker ) || !emergency_shuttle.location())
@@ -245,12 +245,12 @@
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
log_admin("[key_name(usr)] called the Emergency Shuttle")
- message_admins("[key_name_admin(usr)] called the Emergency Shuttle to the station.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] called the Emergency Shuttle to the station."), 1)
else if (emergency_shuttle.can_recall())
emergency_shuttle.recall()
log_admin("[key_name(usr)] sent the Emergency Shuttle back")
- message_admins("[key_name_admin(usr)] sent the Emergency Shuttle back.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] sent the Emergency Shuttle back."), 1)
href_list["secretsadmin"] = "check_antagonist"
@@ -263,14 +263,14 @@
emergency_shuttle.launch_time = world.time + new_time_left*10
log_admin("[key_name(usr)] edited the Emergency Shuttle's launch time to [new_time_left]")
- message_admins("[key_name_admin(usr)] edited the Emergency Shuttle's launch time to [new_time_left*10]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] edited the Emergency Shuttle's launch time to [new_time_left*10]"), 1)
else if (emergency_shuttle.shuttle.has_arrive_time())
var/new_time_left = tgui_input_number(usr, "Enter new shuttle arrival time (seconds):","Edit Shuttle Arrival Time", emergency_shuttle.estimate_arrival_time() )
emergency_shuttle.shuttle.arrive_time = world.time + new_time_left*10
log_admin("[key_name(usr)] edited the Emergency Shuttle's arrival time to [new_time_left]")
- message_admins("[key_name_admin(usr)] edited the Emergency Shuttle's arrival time to [new_time_left*10]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] edited the Emergency Shuttle's arrival time to [new_time_left*10]"), 1)
else
tgui_alert_async(usr, "The shuttle is neither counting down to launch nor is it in transit. Please try again when it is.")
@@ -281,7 +281,7 @@
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
- message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
+ message_admins(span_blue("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"]."), 1)
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -299,7 +299,7 @@
if("Yes") delmob = 1
log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]")
- message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]"), 1)
switch(href_list["simplemake"])
if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob )
@@ -379,7 +379,7 @@
log_admin("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
- message_admins("[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]"), 1)
Banlist.cd = "/base/[banfolder]"
Banlist["reason"] << reason
Banlist["temp"] << temp
@@ -807,10 +807,10 @@
else
msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
- message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes", 1)
- to_chat(M, "You have been jobbanned by [usr.client.ckey] from: [msg].")
- to_chat(M, "The reason is: [reason]")
- to_chat(M, "This jobban will be lifted in [mins] minutes.")
+ message_admins(span_blue("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes"), 1)
+ to_chat(M, "[span_red("You have been jobbanned by [usr.client.ckey] from: [msg].")]")
+ to_chat(M, "[span_red("The reason is: [reason]")]")
+ to_chat(M, "[span_red("This jobban will be lifted in [mins] minutes.")]")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("No")
@@ -828,10 +828,10 @@
if(!msg) msg = job
else msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
- message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1)
- to_chat(M, "You have been jobbanned by [usr.client.ckey] from: [msg].")
- to_chat(M, "The reason is: [reason]")
- to_chat(M, "Jobban can be lifted only upon request.")
+ message_admins(span_blue("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]"), 1)
+ to_chat(M, "[span_red("You have been jobbanned by [usr.client.ckey] from: [msg].")]")
+ to_chat(M, "[span_red("The reason is: [reason]")]")
+ to_chat(M, "[span_red("Jobban can be lifted only upon request.")]")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("Cancel")
@@ -861,7 +861,7 @@
else
continue
if(msg)
- message_admins("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]"), 1)
to_chat(M, "You have been un-jobbanned by [usr.client.ckey] from [msg].")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
@@ -878,7 +878,7 @@
to_chat(M, span("filter_system critical", "You have been kicked from the server: [reason]"))
log_admin("[key_name(usr)] booted [key_name(M)] for reason: '[reason]'.")
- message_admins("[key_name_admin(usr)] booted [key_name_admin(M)] for reason '[reason]'.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] booted [key_name_admin(M)] for reason '[reason]'."), 1)
//M.client = null
admin_action_message(usr.key, M.key, "kicked", reason, 0) //VOREStation Add
qdel(M.client)
@@ -890,7 +890,7 @@
if(t)
if((tgui_alert(usr, "Do you want to unjobban [t]?","Unjobban confirmation", list("Yes", "No")) == "Yes") && t) //No more misclicks! Unless you do it twice.
log_admin("[key_name(usr)] removed [t]")
- message_admins("[key_name_admin(usr)] removed [t]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] removed [t]"), 1)
jobban_remove(t)
href_list["ban"] = 1 // lets it fall through and refresh
var/t_split = splittext(t, " - ")
@@ -937,7 +937,7 @@
else
to_chat(M, "No ban appeals URL has been set.")
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
- message_admins("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
+ message_admins(span_blue("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes."))
// CHOMPedit Start - Tickets System
var/datum/ticket/T = M.client ? M.client.current_ticket : null
if(T)
@@ -965,7 +965,7 @@
ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.")
notes_add(M.ckey,"[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.",usr)
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
- message_admins("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
+ message_admins(span_blue("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban."))
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
// CHOMPedit Start - Tickets System
@@ -1025,8 +1025,8 @@
return tgui_alert_async(usr, "The game has already started.")
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [config.mode_names[master_mode]].")
- message_admins("[key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].", 1)
- to_world("The mode is now: [config.mode_names[master_mode]]")
+ message_admins(span_blue("[key_name_admin(usr)] set the mode as [config.mode_names[master_mode]]."), 1)
+ to_world(span_blue("The mode is now: [config.mode_names[master_mode]]"))
Game() // updates the main game menu
world.save_mode(master_mode)
.(href, list("c_mode"=1))
@@ -1040,7 +1040,7 @@
return tgui_alert_async(usr, "The game mode has to be secret!")
secret_force_mode = href_list["f_secret2"]
log_admin("[key_name(usr)] set the forced secret mode as [secret_force_mode].")
- message_admins("[key_name_admin(usr)] set the forced secret mode as [secret_force_mode].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] set the forced secret mode as [secret_force_mode]."), 1)
Game() // updates the main game menu
.(href, list("f_secret"=1))
@@ -1053,7 +1053,7 @@
return
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
- message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]"), 1)
H.monkeyize()
else if(href_list["corgione"])
@@ -1065,7 +1065,7 @@
return
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
- message_admins("[key_name_admin(usr)] attempting to corgize [key_name_admin(H)]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] attempting to corgize [key_name_admin(H)]"), 1)
H.corgize()
else if(href_list["forcespeech"])
@@ -1080,7 +1080,7 @@
M.say(speech)
speech = sanitize(speech) // Nah, we don't trust them
log_admin("[key_name(usr)] forced [key_name(M)] to say: [speech]")
- message_admins("[key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]")
+ message_admins(span_blue("[key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]"))
else if(href_list["sendtoprison"])
if(!check_rights(R_ADMIN)) return
@@ -1120,7 +1120,7 @@
to_chat(M, "You have been sent to the prison station!")
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
- message_admins("[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station."), 1)
else if(href_list["sendbacktolobby"])
if(!check_rights(R_ADMIN))
@@ -1256,7 +1256,7 @@
if(config.allow_admin_rev)
L.revive()
- message_admins("Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!", 1)
+ message_admins(span_red("Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!"), 1)
log_admin("[key_name(usr)] healed / Rrvived [key_name(L)]")
else
to_chat(usr, "Admin Rejuvinates have been disabled")
@@ -1269,7 +1269,7 @@
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
- message_admins("Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!", 1)
+ message_admins(span_red("Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!"), 1)
log_admin("[key_name(usr)] AIized [key_name(H)]")
H.AIize()
@@ -1409,7 +1409,7 @@
//Job + antagonist
if(M.mind)
- special_role_description = "Role: [M.mind.assigned_role]; Antagonist: [M.mind.special_role]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]"
+ special_role_description = "Role: [M.mind.assigned_role]; Antagonist: [span_red("[M.mind.special_role]")]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]"
else
special_role_description = "Role: Mind datum missing Antagonist: Mind datum missing; Has been rev: Mind datum missing;"
@@ -1419,8 +1419,8 @@
var/status
switch (M.stat)
if (0) status = "Alive"
- if (1) status = "Unconscious"
- if (2) status = "Dead"
+ if (1) status = span_orange("Unconscious")
+ if (2) status = span_red("Dead")
health_description = "Status = [status]"
health_description += "
Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]"
else
@@ -1429,7 +1429,7 @@
//Gener
switch(M.gender)
if(MALE,FEMALE) gender_description = "[M.gender]"
- else gender_description = "[M.gender]"
+ else gender_description = span_red("[M.gender]")
to_chat(src.owner, "Info about [M.name]:
\
Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]
\
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index fe64b97346..14b1bf7932 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -1046,7 +1046,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
else if(char == "'")
if(word != "")
- to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again.")
+ to_chat(usr, span_red("SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"[span_gray("[query_text]")]\" following \"[span_gray("[word]")]\". Please check your syntax, and try again."))
return null
word = "'"
@@ -1066,7 +1066,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
word += char
if(i > len)
- to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again.")
+ to_chat(usr, span_red("SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"[span_gray("[query_text]")]\". Please check your syntax, and try again."))
return null
query_list += "[word]'"
@@ -1074,7 +1074,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
else if(char == "\"")
if(word != "")
- to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again.")
+ to_chat(usr, span_red("SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"[span_gray("[query_text]")]\" following \"[span_gray("[word]")]\". Please check your syntax, and try again."))
return null
word = "\""
@@ -1094,7 +1094,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
word += char
if(i > len)
- to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again.")
+ to_chat(usr, span_red("SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"[span_gray("[query_text]")]\". Please check your syntax, and try again."))
return null
query_list += "[word]\""
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 7ede4754d6..98748f4dd3 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -196,7 +196,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(is_bwoink)
AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]")
- message_admins("Ticket [TicketHref("#[id]")] created")
+ message_admins(span_blue("Ticket [TicketHref("#[id]")] created"))
else
MessageNoRecipient(parsed_message)
send2adminchat() //VOREStation Add
@@ -319,7 +319,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
AddInteraction("Reopened by [key_name_admin(usr)]")
if(initiator)
- to_chat(initiator, "Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].")
+ to_chat(initiator, "[span_purple("Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].")]")
var/msg = "Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)]."
message_admins(msg)
log_admin(msg)
@@ -353,7 +353,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
GLOB.ahelp_tickets.ListInsert(src)
AddInteraction("Closed by [key_name_admin(usr)].")
if(initiator)
- to_chat(initiator, "Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].")
+ to_chat(initiator, "[span_red("Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].")]")
if(!silent)
feedback_inc("ahelp_close")
var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name_admin(usr)]."
@@ -378,7 +378,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
AddInteraction("Resolved by [key_name_admin(usr)].")
if(initiator)
- to_chat(initiator, "Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].")
+ to_chat(initiator, "[span_green("Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].")]")
if(!silent)
feedback_inc("ahelp_resolve")
var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name_admin(usr)]"
@@ -402,8 +402,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(initiator.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
initiator << 'sound/effects/adminhelp.ogg'
- to_chat(initiator, "- AdminHelp Rejected! -
\
- Your admin help was rejected.
\
+ to_chat(initiator, "[span_red("- AdminHelp Rejected! -")]
\
+ [span_red("Your admin help was rejected.")]
\
Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")
feedback_inc("ahelp_reject")
@@ -426,9 +426,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(state != AHELP_ACTIVE)
return
- var/msg = "- AdminHelp marked as IC issue! -
"
- msg += "This is something that can be solved ICly, and does not currently require staff intervention.
"
- msg += "Your AdminHelp may also be unanswerable due to ongoing events."
+ var/msg = "[span_red("- AdminHelp marked as IC issue! -")]
"
+ msg += "[span_red("This is something that can be solved ICly, and does not currently require staff intervention.")]
"
+ msg += "[span_red("Your AdminHelp may also be unanswerable due to ongoing events.")]"
if(initiator)
to_chat(initiator, msg)
@@ -453,7 +453,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(state != AHELP_ACTIVE)
return
- var/msg = "Your AdminHelp is being handled by [key_name(usr,FALSE,FALSE)] please be patient."
+ var/msg = span_red("Your AdminHelp is being handled by [key_name(usr,FALSE,FALSE)] please be patient.")
if(initiator)
to_chat(initiator, msg)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 10b4bc7cc9..d4344704f5 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -84,11 +84,11 @@
var/datum/gas_mixture/env = T.return_air()
- var/t = "Coordinates: [T.x],[T.y],[T.z]\n"
- t += "Temperature: [env.temperature]\n"
- t += "Pressure: [env.return_pressure()]kPa\n"
+ var/t = span_blue("Coordinates: [T.x],[T.y],[T.z]\n")
+ t += span_red("Temperature: [env.temperature]\n")
+ t += span_red("Pressure: [env.return_pressure()]kPa\n")
for(var/g in env.gas)
- t += "[g]: [env.gas[g]] / [env.gas[g] * R_IDEAL_GAS_EQUATION * env.temperature / env.volume]kPa\n"
+ t += span_blue("[g]: [env.gas[g]] / [env.gas[g] * R_IDEAL_GAS_EQUATION * env.temperature / env.volume]kPa\n")
usr.show_message(t, 1)
feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -301,7 +301,7 @@
tgui_alert_async(usr, "Invalid mob")
feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(src)] has granted [M.key] full access.")
- message_admins("[key_name_admin(usr)] has granted [M.key] full access.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] has granted [M.key] full access."), 1)
/client/proc/cmd_assume_direct_control(var/mob/M in mob_list)
set category = "Admin"
@@ -315,7 +315,7 @@
else
var/mob/observer/dead/ghost = new/mob/observer/dead(M,1)
ghost.ckey = M.ckey
- message_admins("[key_name_admin(usr)] assumed direct control of [M].", 1)
+ message_admins(span_blue("[key_name_admin(usr)] assumed direct control of [M]."), 1)
log_admin("[key_name(usr)] assumed direct control of [M].")
var/mob/adminmob = src.mob
M.ckey = src.ckey
@@ -567,7 +567,7 @@
SMES.output_level = 75000
if(!found_the_pump && response == "Setup Completely")
- to_chat(src, "Unable to locate air supply to fill up with coolant, adding some coolant around the supermatter")
+ to_chat(src, span_red("Unable to locate air supply to fill up with coolant, adding some coolant around the supermatter"))
var/turf/simulated/T = SM.loc
T.zone.air.gas["nitrogen"] += 450
T.zone.air.temperature = 50
@@ -575,7 +575,7 @@
log_admin("[key_name(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant" : ""]")
- message_admins("[key_name_admin(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant": ""]", 1)
+ message_admins(span_blue("[key_name_admin(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant": ""]"), 1)
return
diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm
index 723d59b577..6d79548df3 100644
--- a/code/modules/admin/verbs/getlogs.dm
+++ b/code/modules/admin/verbs/getlogs.dm
@@ -24,16 +24,16 @@
set category = null
if(!src.holder)
- to_chat(src, "Only Admins may use this command.")
+ to_chat(src, span_red("Only Admins may use this command."))
return
var/client/target = tgui_input_list(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions", GLOB.clients)
if(!istype(target,/client))
- to_chat(src, "Error: giveruntimelog(): Client not found.")
+ to_chat(src, span_red("Error: giveruntimelog(): Client not found."))
return
target.verbs |= /client/proc/getruntimelog
- to_chat(target, "You have been granted access to runtime logs. Please use them responsibly or risk being banned.")
+ to_chat(target, span_red("You have been granted access to runtime logs. Please use them responsibly or risk being banned."))
return
@@ -89,7 +89,7 @@
if( fexists(path) )
src << run( file(path) )
else
- to_chat(src, "Error: view_txt_log(): File not found/Invalid path([path]).")
+ to_chat(src, span_red("Error: view_txt_log(): File not found/Invalid path([path])."))
return
feedback_add_details("admin_verb","VTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 7f80b39540..c6b5079581 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -218,7 +218,7 @@ var/list/debug_verbs = list (
var/turf/simulated/location = get_turf(usr)
if(!istype(location, /turf/simulated)) // We're in space, let's not cause runtimes.
- to_chat(usr, "this debug tool cannot be used from space")
+ to_chat(usr, span_red("this debug tool cannot be used from space"))
return
var/icon/red = new('icons/misc/debug_group.dmi', "red") //created here so we don't have to make thousands of these.
@@ -227,10 +227,10 @@ var/list/debug_verbs = list (
if(!usedZAScolors)
to_chat(usr, "ZAS Test Colors")
- to_chat(usr, "Green = Zone you are standing in")
- to_chat(usr, "Blue = Connected zone to the zone you are standing in")
- to_chat(usr, "Yellow = A zone that is connected but not one adjacent to your connected zone")
- to_chat(usr, "Red = Not connected")
+ to_chat(usr, "[span_green("Green")] = Zone you are standing in")
+ to_chat(usr, "[span_blue("Blue")] = Connected zone to the zone you are standing in")
+ to_chat(usr, "[span_yellow("Yellow")] = A zone that is connected but not one adjacent to your connected zone")
+ to_chat(usr, "[span_red("Red")] = Not connected")
usedZAScolors = 1
testZAScolors_zones += location.zone
@@ -362,7 +362,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Regroup All Airgroups Attempt"
- to_chat(usr, "Proc disabled.") //Why not.. Delete the procs instead?
+ to_chat(usr, span_red("Proc disabled.")) //Why not.. Delete the procs instead?
/*prevent_airgroup_regroup = 0
for(var/datum/air_group/AG in air_master.air_groups)
@@ -373,7 +373,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill pipe processing"
- to_chat(usr, "Proc disabled.")
+ to_chat(usr, span_red("Proc disabled."))
/*pipe_processing_killed = !pipe_processing_killed
if(pipe_processing_killed)
@@ -385,7 +385,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill air processing"
- to_chat(usr, "Proc disabled.")
+ to_chat(usr, span_red("Proc disabled."))
/*air_processing_killed = !air_processing_killed
if(air_processing_killed)
@@ -399,7 +399,7 @@ var/global/say_disabled = 0
set category = "Mapping"
set name = "Disable all communication verbs"
- to_chat(usr, "Proc disabled.")
+ to_chat(usr, span_red("Proc disabled."))
/*say_disabled = !say_disabled
if(say_disabled)
@@ -414,7 +414,7 @@ var/global/movement_disabled_exception //This is the client that calls the proc,
set category = "Mapping"
set name = "Disable all movement"
- to_chat(usr, "Proc disabled.")
+ to_chat(usr, span_red("Proc disabled."))
/*movement_disabled = !movement_disabled
if(movement_disabled)
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index ffac68a6f9..4add0123f8 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -3,7 +3,7 @@
set name = "Pray"
if(say_disabled) //This is here to try to identify lag problems
- to_chat(usr, "Speech is currently admin-disabled.")
+ to_chat(usr, span_red("Speech is currently admin-disabled."))
return
var/raw_msg = sanitize(tgui_input_text(usr, "Prayers are sent to staff but do not open tickets or go to Discord. If you have a technical difficulty or an event/spice idea/hook - please ahelp instead. Thank you!", "Pray", null, MAX_MESSAGE_LEN))
@@ -13,11 +13,11 @@
if(raw_msg)
client.handle_spam_prevention(MUTE_PRAY)
if(usr.client.prefs.muted & MUTE_PRAY)
- to_chat(usr, " You cannot pray (muted).")
+ to_chat(usr, span_red("You cannot pray (muted)."))
return
var/icon/cross = icon('icons/obj/storage.dmi',"bible")
- var/msg = "\icon[cross][bicon(cross)] PRAY: [key_name(src, 1)] [ADMIN_QUE(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] ([admin_jump_link(src, src)]) [ADMIN_CA(src)] [ADMIN_SC(src)] [ADMIN_SMITE(src)]: [raw_msg]"
+ var/msg = "" + span_blue("\icon[cross][bicon(cross)] " + span_purple("PRAY: ") + "[key_name(src, 1)] [ADMIN_QUE(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] ([admin_jump_link(src, src)]) [ADMIN_CA(src)] [ADMIN_SC(src)] [ADMIN_SMITE(src)]: [raw_msg]") + ""
for(var/client/C in GLOB.admins)
if(R_ADMIN|R_EVENT & C.holder.rights)
@@ -30,14 +30,14 @@
log_pray(raw_msg, src)
/proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage)
- msg = "[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]"
+ msg = span_blue("" + span_orange("[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]")
for(var/client/C in GLOB.admins) //VOREStation Edit - GLOB admins
if(R_ADMIN|R_EVENT & C.holder.rights)
to_chat(C,msg)
C << 'sound/machines/signal.ogg'
/proc/Syndicate_announce(var/msg, var/mob/Sender)
- msg = "ILLEGAL:[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]"
+ msg = span_blue("" + span_crimson("ILLEGAL:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]")
for(var/client/C in GLOB.admins) //VOREStation Edit - GLOB admins
if(R_ADMIN|R_EVENT & C.holder.rights)
to_chat(C,msg)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 7da8e75dc2..bf66e66fd9 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -39,9 +39,9 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
spawn(50)
- to_chat(M, "You have been sent to the prison station!")
+ to_chat(M, span_red("You have been sent to the prison station!"))
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
- message_admins("[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station."), 1)
feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//Allows staff to determine who the newer players are.
@@ -123,7 +123,7 @@
to_world("[msg]")
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
- message_admins(" GlobalNarrate: [key_name_admin(usr)] : [msg]
", 1)
+ message_admins(span_blue(" GlobalNarrate: [key_name_admin(usr)] : [msg]
"), 1)
feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE
@@ -161,7 +161,7 @@
return
M.status_flags ^= GODMODE
- to_chat(usr, " Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]")
+ to_chat(usr, span_blue("Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]"))
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]")
var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]"
@@ -178,12 +178,12 @@
if(!usr || !usr.client)
return
if(!usr.client.holder)
- to_chat(usr, "Error: cmd_admin_mute: You don't have permission to do this.")
+ to_chat(usr, span_red("Error: cmd_admin_mute: You don't have permission to do this."))
return
if(!M.client)
- to_chat(usr, "Error: cmd_admin_mute: This mob doesn't have a client tied to it.")
+ to_chat(usr, span_red("Error: cmd_admin_mute: This mob doesn't have a client tied to it."))
if(M.client.holder)
- to_chat(usr, "Error: cmd_admin_mute: You cannot mute an admin/mod.")
+ to_chat(usr, span_red("Error: cmd_admin_mute: You cannot mute an admin/mod."))
if(!M.client)
return
if(M.client.holder)
@@ -324,18 +324,18 @@ Ccomp's first proc.
if(g.antagHUD)
g.antagHUD = 0 // Disable it on those that have it enabled
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
- to_chat(g, "The Administrator has disabled AntagHUD ")
+ to_chat(g, span_red("The Administrator has disabled AntagHUD "))
config.antag_hud_allowed = 0
- to_chat(src, "AntagHUD usage has been disabled")
+ to_chat(src, span_red("AntagHUD usage has been disabled"))
action = "disabled"
else
for(var/mob/observer/dead/g in get_ghosts())
if(!g.client.holder) // Add the verb back for all non-admin ghosts
g.verbs += /mob/observer/dead/verb/toggle_antagHUD
- to_chat(g, "The Administrator has enabled AntagHUD ") // Notify all observers they can now use AntagHUD
+ to_chat(g, span_blue("The Administrator has enabled AntagHUD ")) // Notify all observers they can now use AntagHUD
config.antag_hud_allowed = 1
action = "enabled"
- to_chat(src, "AntagHUD usage has been enabled")
+ to_chat(src, span_blue("AntagHUD usage has been enabled"))
log_admin("[key_name(usr)] has [action] antagHUD usage for observers")
@@ -354,19 +354,19 @@ Ccomp's first proc.
var/action=""
if(config.antag_hud_restricted)
for(var/mob/observer/dead/g in get_ghosts())
- to_chat(g, "The administrator has lifted restrictions on joining the round if you use AntagHUD")
+ to_chat(g, span_blue("The administrator has lifted restrictions on joining the round if you use AntagHUD"))
action = "lifted restrictions"
config.antag_hud_restricted = 0
- to_chat(src, "AntagHUD restrictions have been lifted")
+ to_chat(src, span_blue("AntagHUD restrictions have been lifted"))
else
for(var/mob/observer/dead/g in get_ghosts())
- to_chat(g, "The administrator has placed restrictions on joining the round if you use AntagHUD")
- to_chat(g, "Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions ")
+ to_chat(g, span_red("The administrator has placed restrictions on joining the round if you use AntagHUD"))
+ to_chat(g, span_red("Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions "))
g.antagHUD = 0
g.has_enabled_antagHUD = 0
action = "placed restrictions"
config.antag_hud_restricted = 1
- to_chat(src, "AntagHUD restrictions have been enabled")
+ to_chat(src, span_red("AntagHUD restrictions have been enabled"))
log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD")
message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1)
@@ -605,7 +605,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
else
M.add_ion_law(input)
for(var/mob/living/silicon/ai/O in mob_list)
- to_chat(O,input + "... LAWS UPDATED!")
+ to_chat(O,input + span_red("... LAWS UPDATED!"))
O.show_laws()
log_admin("Admin [key_name(usr)] has added a new AI law - [input]")
@@ -660,7 +660,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("Yes")
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
if("No")
- to_world("New [using_map.company_name] Update available at all communication consoles.")
+ to_world(span_red("New [using_map.company_name] Update available at all communication consoles."))
world << sound('sound/AI/commandreport.ogg')
log_admin("[key_name(src)] has created a command report: [input]")
@@ -778,7 +778,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
mob.gib()
log_admin("[key_name(usr)] used gibself.")
- message_admins("[key_name_admin(usr)] used gibself.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] used gibself."), 1)
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/*
/client/proc/cmd_manual_ban()
@@ -935,7 +935,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-called the emergency shuttle.")
- message_admins("[key_name_admin(usr)] admin-called the emergency shuttle.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] admin-called the emergency shuttle."), 1)
return
/client/proc/admin_cancel_shuttle()
@@ -952,7 +952,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
emergency_shuttle.recall()
feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-recalled the emergency shuttle.")
- message_admins("[key_name_admin(usr)] admin-recalled the emergency shuttle.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] admin-recalled the emergency shuttle."), 1)
return
@@ -974,7 +974,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Attack Log"
- to_chat(usr, "Attack Log for [mob]")
+ to_chat(usr, span_red("Attack Log for [mob]"))
for(var/t in M.attack_log)
to_chat(usr,t)
feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -1006,7 +1006,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1)
if(notifyplayers == "Yes")
- to_world("Admin [usr.key] has forced the players to have completely random identities!")
+ to_world(span_blue("Admin [usr.key] has forced the players to have completely random identities!"))
to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.")
diff --git a/code/modules/admin/verbs/randomverbs_vr.dm b/code/modules/admin/verbs/randomverbs_vr.dm
index 4d3ab6141b..6a1e90aed1 100644
--- a/code/modules/admin/verbs/randomverbs_vr.dm
+++ b/code/modules/admin/verbs/randomverbs_vr.dm
@@ -2,7 +2,7 @@
set category = "Special Verbs"
set name = "Spawn Character As Mob"
set desc = "Spawn a specified ckey as a chosen mob."
-
+
if(!holder)
return
@@ -95,7 +95,7 @@
if(M.z == pos_z)
to_chat(M, msg)
log_admin("ZNarrate: [key_name(usr)] : [msg]")
- message_admins(" ZNarrate: [key_name_admin(usr)] : [msg]
", 1)
+ message_admins(span_blue(" ZNarrate: [key_name_admin(usr)] : [msg]
"), 1)
feedback_add_details("admin_verb","GLNA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_vantag_hud(var/mob/target as mob)
@@ -107,10 +107,10 @@
target.vantag_hud = FALSE
target.recalculate_vis()
to_chat(src, "You removed the event HUD from [key_name(target)].")
- to_chat(target, "You no longer have the event HUD.")
+ to_chat(target, "You no longer have the event HUD.")
else
target.vantag_hud = TRUE
target.recalculate_vis()
to_chat(src, "You gave the event HUD to [key_name(target)].")
- to_chat(target, "You now have the event HUD. Icons will appear next to characters indicating if they prefer to be killed(red crosshairs), devoured(belly), or kidnapped(blue crosshairs) by event characters.")
- feedback_add_details("admin_verb","GREHud") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
\ No newline at end of file
+ to_chat(target, "You now have the event HUD. Icons will appear next to characters indicating if they prefer to be killed(red crosshairs), devoured(belly), or kidnapped(blue crosshairs) by event characters.")
+ feedback_add_details("admin_verb","GREHud") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index 7724062a6e..85e13ce288 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -11,11 +11,11 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
return
if(!ticker)
- to_chat(usr, "The game hasn't started yet!")
+ to_chat(usr, span_red("The game hasn't started yet!"))
return
if(world.time < 6000)
- to_chat(usr, "There are [(6000-world.time)/10] seconds remaining before it may be called.")
+ to_chat(usr, span_red("There are [(6000-world.time)/10] seconds remaining before it may be called."))
return
var/datum/antagonist/deathsquad/team
@@ -33,7 +33,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
return
if(team.deployed)
- to_chat(usr, "Someone is already sending a team.")
+ to_chat(usr, span_red("Someone is already sending a team."))
return
if(tgui_alert(usr, "Do you want to send in a strike team? Once enabled, this is irreversible.","Strike Team",list("Yes","No"))!="Yes")
diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm
index eaf6dfa49f..9298d1111c 100644
--- a/code/modules/admin/verbs/tripAI.dm
+++ b/code/modules/admin/verbs/tripAI.dm
@@ -14,9 +14,9 @@
if(ticker.triai)
ticker.triai = 0
to_chat(usr, "Only one AI will be spawned at round start.")
- message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] has toggled off triple AIs at round start."), 1)
else
ticker.triai = 1
to_chat(usr, "There will be an AI Triumvirate at round start.")
- message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
+ message_admins(span_blue("[key_name_admin(usr)] has toggled on triple AIs at round start."), 1)
return
diff --git a/code/modules/artifice/cursedform.dm b/code/modules/artifice/cursedform.dm
index 43acac8bf3..ee994924c8 100644
--- a/code/modules/artifice/cursedform.dm
+++ b/code/modules/artifice/cursedform.dm
@@ -31,7 +31,7 @@
qdel(src)
else
- to_chat(user,"You must hold \the [P] steady to burn \the [src].")
+ to_chat(user, span_red("You must hold \the [P] steady to burn \the [src]."))
if(isliving(user))
var/mob/living/L = user
diff --git a/code/modules/artifice/deadringer.dm b/code/modules/artifice/deadringer.dm
index b7912ec89e..08cb5fef77 100644
--- a/code/modules/artifice/deadringer.dm
+++ b/code/modules/artifice/deadringer.dm
@@ -32,20 +32,20 @@
/obj/item/weapon/deadringer/attack_self(var/mob/living/user as mob)
var/mob/living/H = src.loc
if (!istype(H, /mob/living/carbon/human))
- to_chat(H,"You have no clue what to do with this thing.")
+ to_chat(H, span_blue("You have no clue what to do with this thing."))
return
if(!activated)
if(timer == 0)
- to_chat(H, "You press a small button on [src]'s side. It starts to hum quietly.")
+ to_chat(H, span_blue("You press a small button on [src]'s side. It starts to hum quietly."))
bruteloss_prev = H.getBruteLoss()
fireloss_prev = H.getFireLoss()
activated = 1
return
else
- to_chat(H,"You press a small button on [src]'s side. It buzzes a little.")
+ to_chat(H, span_blue("You press a small button on [src]'s side. It buzzes a little."))
return
if(activated)
- to_chat(H,"You press a small button on [src]'s side. It stops humming.")
+ to_chat(H, span_blue("You press a small button on [src]'s side. It stops humming."))
activated = 0
return
@@ -58,9 +58,9 @@
deathprevent()
activated = 0
if(watchowner.isSynthetic())
- to_chat(watchowner, "You fade into nothingness! [src]'s screen blinks, being unable to copy your synthetic body!")
+ to_chat(watchowner, span_blue("You fade into nothingness! [src]'s screen blinks, being unable to copy your synthetic body!"))
else
- to_chat(watchowner, "You fade into nothingness, leaving behind a fake body!")
+ to_chat(watchowner, span_blue("You fade into nothingness, leaving behind a fake body!"))
icon_state = "deadringer_cd"
timer = 50
return
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 31f4ca5244..dbd4ffc859 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -41,7 +41,7 @@
H.updatehealth()
else if(ismouse(target))
var/mob/living/simple_mob/animal/passive/mouse/M = target
- visible_message("SPLAT!")
+ visible_message(span_red("SPLAT!"))
M.splat()
playsound(target, 'sound/effects/snap.ogg', 50, 1)
layer = MOB_LAYER - 0.2
@@ -120,4 +120,4 @@
return
layer = HIDING_LAYER
- to_chat(usr, "You hide [src].")
\ No newline at end of file
+ to_chat(usr, "You hide [src].")
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 9a4fd1028e..156002b3c0 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -44,12 +44,12 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
update_icon()
wait = world.time + config.gateway_delay //+ thirty minutes default
-
+
if(GLOB.gateway_away)
awaygate = GLOB.gateway_away
else
awaygate = locate(/obj/machinery/gateway/centeraway)
-
+
. = ..()
density = TRUE //VOREStation Add
@@ -167,7 +167,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
if(dest)
M.forceMove(dest.loc)
M.set_dir(SOUTH)
- //VOREStation Addition Start: Mcguffin time!
+ //VOREStation Addition Start: Mcguffin time!
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.client)
@@ -177,7 +177,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
//VOREStation Addition Start: Abduction!
if(istype(M, /mob/living) && dest.abductor)
var/mob/living/L = M
- if(L.nutrition > 500)
+ if(L.nutrition > 500)
L.nutrition = 500 //If the aim is to negate people overpreparing, then they shouldn't be able to stuff themselves full of food either.
//Situations to get the mob out of
if(L.buckled)
@@ -225,7 +225,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/multitool))
- if(!awaygate)
+ if(!awaygate)
if(GLOB.gateway_away)
awaygate = GLOB.gateway_away
else
@@ -235,7 +235,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
return
to_chat(user, "Startup programming successful!: A destination in another point of space and time has been detected.")
else
- to_chat(user, "The gate is already calibrated, there is no work for you to do here.")
+ to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here."))
return
/////////////////////////////////////Away////////////////////////
@@ -257,9 +257,9 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway)
warning("[src] at [x],[y],[z] appears to be an additional away-gateway")
else
GLOB.gateway_away = src
-
+
update_icon()
-
+
if(GLOB.gateway_station)
stationgate = GLOB.gateway_station
else
@@ -338,7 +338,7 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway)
if(istype(M, /mob/living/carbon))
for(var/obj/item/weapon/implant/exile/E in M)//Checking that there is an exile implant in the contents
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
- to_chat(M, "The station gate has detected your exile implant and is blocking your entry.")
+ to_chat(M, span_black("The station gate has detected your exile implant and is blocking your entry."))
return
M.forceMove(get_step(stationgate.loc, SOUTH))
M.set_dir(SOUTH)
@@ -349,7 +349,7 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway)
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/multitool))
if(calibrated && stationgate)
- to_chat(user, "The gate is already calibrated, there is no work for you to do here.")
+ to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here."))
return
else
// VOREStation Add
@@ -362,6 +362,6 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway)
return
// VOREStation Add End
else
- to_chat(user, "Recalibration successful!: This gate's systems have been fine tuned. Travel to this gate will now be on target.")
+ to_chat(user, span_blue("Recalibration successful!:") + span_black(" This gate's systems have been fine tuned. Travel to this gate will now be on target."))
calibrated = 1
return
diff --git a/code/modules/awaymissions/gateway_vr.dm b/code/modules/awaymissions/gateway_vr.dm
index 86ff8e5e13..25a57ce7d7 100644
--- a/code/modules/awaymissions/gateway_vr.dm
+++ b/code/modules/awaymissions/gateway_vr.dm
@@ -15,7 +15,7 @@
return
if(istype(W,mcguffin_type) && !calibrated)
- to_chat(user, "As the device nears the gateway, mechanical clunks and whirrs can be heard.
Configuration successful!
This gate's systems have been fine tuned. Travel to this gate will now be on target.")
+ to_chat(user, "As the device nears the gateway, mechanical clunks and whirrs can be heard.
[span_blue("Configuration successful! ")]
This gate's systems have been fine tuned. Travel to this gate will now be on target.")
calibrated = 1
return
else
@@ -39,7 +39,7 @@
/obj/machinery/gateway/centeraway/proc/entrydetect()
return
-
+
/obj/machinery/gateway/centeraway/mcguffin/entrydetect()
if(key)
return
@@ -47,9 +47,9 @@
var/list/spawners = list()
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
spawners += sp
-
+
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
-
+
var/atom/destination = get_turf(the_cool_one)
var/obj/structure/closet/CL = locate() in destination
if(CL)
@@ -76,4 +76,4 @@
//No, you can't digest the key to leave the gateway.
/obj/item/device/mcguffin/digest_act(var/atom/movable/item_storage = null)
- return FALSE
\ No newline at end of file
+ return FALSE
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index fea781da8b..8a959a6501 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -3,7 +3,7 @@
return
var/list/potentialRandomZlevels = list()
- admin_notice(" Searching for away missions...", R_DEBUG)
+ admin_notice(span_red(" Searching for away missions..."), R_DEBUG)
var/list/Lines = file2list("maps/RandomZLevels/fileList.txt")
if(!Lines.len) return
for (var/t in Lines)
@@ -35,7 +35,7 @@
if(potentialRandomZlevels.len)
- admin_notice("Loading away mission...", R_DEBUG)
+ admin_notice(span_red("Loading away mission..."), R_DEBUG)
var/map = pick(potentialRandomZlevels)
to_world_log("Away mission picked: [map]") //VOREStation Add for debugging
@@ -50,10 +50,10 @@
continue
awaydestinations.Add(L)
*/ //VOREStation Removal End
- admin_notice("Away mission loaded.", R_DEBUG)
+ admin_notice(span_red("Away mission loaded."), R_DEBUG)
else
- admin_notice("No away missions found.", R_DEBUG)
+ admin_notice(span_red("No away missions found."), R_DEBUG)
return
//VOREStation Add - This landmark type so it's not so ghetto.
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index cdc7577afc..81e2e61ef6 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -145,7 +145,7 @@
//This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc.
/client/AllowUpload(filename, filelength)
if(filelength > UPLOAD_LIMIT)
- to_chat(src, "Error: AllowUpload(): File Upload too large. Upload Limit: [UPLOAD_LIMIT/1024]KiB.")
+ to_chat(src, span_red("Error: AllowUpload(): File Upload too large. Upload Limit: [UPLOAD_LIMIT/1024]KiB."))
return 0
/* //Don't need this at the moment. But it's here if it's needed later.
//Helps prevent multiple files being uploaded at once. Or right after eachother.
@@ -175,7 +175,7 @@
//Only show this if they are put into a new_player mob. Otherwise, "what title screen?"
if(isnewplayer(src.mob))
- to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.")
+ to_chat(src, span_red("If the title screen is black, resources are still downloading. Please be patient until the title screen appears."))
GLOB.clients += src
GLOB.directory[ckey] = src
diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm
index a433f41efb..fe6e61bcfd 100644
--- a/code/modules/client/verbs/who.dm
+++ b/code/modules/client/verbs/who.dm
@@ -16,29 +16,29 @@
entry += " - Playing as [C.mob.real_name]"
switch(C.mob.stat)
if(UNCONSCIOUS)
- entry += " - Unconscious"
+ entry += " - [span_darkgray("Unconscious")]"
if(DEAD)
if(isobserver(C.mob))
var/mob/observer/dead/O = C.mob
if(O.started_as_observer)
- entry += " - Observing"
+ entry += " - [span_gray("Observing")]"
else
- entry += " - DEAD"
+ entry += " - [span_black("DEAD")]"
else
- entry += " - DEAD"
+ entry += " - [span_black("DEAD")]"
if(C.player_age != initial(C.player_age) && isnum(C.player_age)) // database is on
var/age = C.player_age
switch(age)
if(0 to 1)
- age = "[age] days old"
+ age = span_red("[age] days old")
if(1 to 10)
- age = "[age] days old"
+ age = span_orange("[age] days old")
else
entry += " - [age] days old"
if(is_special_character(C.mob))
- entry += " - Antagonist"
+ entry += " - [span_red("Antagonist")]"
if(C.is_afk())
var/seconds = C.last_activity_seconds()
diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm
index b56e84921e..32cfb9cffc 100644
--- a/code/modules/clothing/clothing_vr.dm
+++ b/code/modules/clothing/clothing_vr.dm
@@ -11,10 +11,10 @@
/obj/item/clothing/shoes/New()
inside_emotes = list(
- "You feel weightless for a moment as \the [name] moves upwards.",
- "\The [name] are a ride you've got no choice but to participate in as the wearer moves.",
- "The wearer of \the [name] moves, pressing down on you.",
- "More motion while \the [name] move, feet pressing down against you."
+ span_red("You feel weightless for a moment as \the [name] moves upwards."),
+ span_red("\The [name] are a ride you've got no choice but to participate in as the wearer moves."),
+ span_red("The wearer of \the [name] moves, pressing down on you."),
+ span_red("More motion while \the [name] move, feet pressing down against you.")
)
..()
@@ -116,20 +116,20 @@
if(ishuman(src.loc)) //Is this on a person?
var/mob/living/carbon/human/H = src.loc
if(istype(user,/mob/living/voice)) //Is this a possessed item? Spooky. It can move on it's own!
- to_chat(H, "The [src] shifts about, almost as if squirming!")
- to_chat(user, "You cause the [src] to shift against [H]'s form! Well, what little you can get to, given your current state!")
+ to_chat(H, span_red("The [src] shifts about, almost as if squirming!"))
+ to_chat(user, span_red("You cause the [src] to shift against [H]'s form! Well, what little you can get to, given your current state!"))
else if(H.shoes == src)
- to_chat(H, "[user]'s tiny body presses against you in \the [src], squirming!")
- to_chat(user, "Your body presses out against [H]'s form! Well, what little you can get to!")
+ to_chat(H, span_red("[user]'s tiny body presses against you in \the [src], squirming!"))
+ to_chat(user, span_red("Your body presses out against [H]'s form! Well, what little you can get to!"))
else
- to_chat(H, "[user]'s form shifts around in the \the [src], squirming!")
- to_chat(user, "You move around inside the [src], to no avail.")
+ to_chat(H, span_red("[user]'s form shifts around in the \the [src], squirming!"))
+ to_chat(user, span_red("You move around inside the [src], to no avail."))
else if(istype(user,/mob/living/voice)) //Possessed!
- src.visible_message("The [src] shifts about!")
- to_chat(user, "You cause the [src] to shift about!")
+ src.visible_message(span_red("The [src] shifts about!"))
+ to_chat(user, span_red("You cause the [src] to shift about!"))
else
- src.visible_message("\The [src] moves a little!")
- to_chat(user, "You throw yourself against the inside of \the [src]!")
+ src.visible_message(span_red("\The [src] moves a little!"))
+ to_chat(user, span_red("You throw yourself against the inside of \the [src]!"))
//Mask
/obj/item/clothing/mask
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 2940b9902e..c38ee2bc01 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -537,7 +537,7 @@ BLIND // can't see anything
/obj/item/clothing/glasses/thermal/emp_act(severity)
if(istype(src.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/M = src.loc
- to_chat(M, "The Optical Thermal Scanner overloads and blinds you!")
+ to_chat(M, span_red("The Optical Thermal Scanner overloads and blinds you!"))
if(M.glasses == src)
M.Blind(3)
M.eye_blurry = 5
@@ -624,4 +624,3 @@ BLIND // can't see anything
to_chat(usr, "You push \the [src] up from in front of your eyes.")
update_clothing_icon()
usr.update_action_buttons()
-
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
index 4b12f8382e..8737aa71a1 100644
--- a/code/modules/clothing/masks/hailer.dm
+++ b/code/modules/clothing/masks/hailer.dm
@@ -155,11 +155,11 @@
if(cooldown < world.time - 35) // A cooldown, to stop people being jerks
if(!safety)
message = "FUCK YOUR CUNT YOU SHIT EATING COCKSUCKER MAN EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND DO SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT."
- usr.visible_message("[usr]'s Compli-o-Nator: [message]")
+ usr.visible_message("[usr]'s Compli-o-Nator: [span_red("[message]")]")
playsound(src, 'sound/voice/binsult.ogg', 50, 0, 4) //Future sound channel = something like SFX
cooldown = world.time
return
- usr.visible_message("[usr]'s Compli-o-Nator: [message]")
+ usr.visible_message("[usr]'s Compli-o-Nator: [span_red("[message]")]")
playsound(src, "sound/voice/complionator/[key].ogg", 50, 0, 4) //future sound channel = something like SFX
- cooldown = world.time
\ No newline at end of file
+ cooldown = world.time
diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm
index c12caa2e02..7e74ee57f8 100644
--- a/code/modules/clothing/spacesuits/breaches.dm
+++ b/code/modules/clothing/spacesuits/breaches.dm
@@ -206,7 +206,7 @@ var/global/list/breach_burn_descriptors = list(
else if(W.has_tool_quality(TOOL_WELDER))
if(istype(src.loc,/mob/living))
- to_chat(user, "How do you intend to patch a hardsuit while someone is wearing it?")
+ to_chat(user, span_red("How do you intend to patch a hardsuit while someone is wearing it?"))
return
if (!damage || ! brute_damage)
@@ -215,7 +215,7 @@ var/global/list/breach_burn_descriptors = list(
var/obj/item/weapon/weldingtool/WT = W.get_welder()
if(!WT.remove_fuel(5))
- to_chat(user, "You need more welding fuel to repair this suit.")
+ to_chat(user, span_red("You need more welding fuel to repair this suit."))
return
repair_breaches(BRUTE, 3, user)
@@ -227,4 +227,4 @@ var/global/list/breach_burn_descriptors = list(
. = ..()
if(can_breach && breaches?.len)
for(var/datum/breach/B in breaches)
- . += "It has \a [B.descriptor]."
+ . += span_red("It has \a [B.descriptor].")
diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm
index 5d92408e56..4db4e7146e 100644
--- a/code/modules/clothing/spacesuits/rig/modules/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm
@@ -54,7 +54,7 @@
to_chat(user, "Another grenade of that type will not fit into the module.")
return 0
- to_chat(user, "You slot \the [input_device] into the suit module.")
+ to_chat(user, span_blue("You slot \the [input_device] into the suit module."))
user.drop_from_inventory(input_device)
qdel(input_device)
accepted_item.charges++
@@ -256,7 +256,7 @@
else
var/obj/item/new_weapon = new fabrication_type()
new_weapon.forceMove(H)
- to_chat(H, "You quickly fabricate \a [new_weapon].")
+ to_chat(H, span_blue("You quickly fabricate \a [new_weapon]."))
H.put_in_hands(new_weapon)
return 1
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index fbf08479f4..21dad8e8c2 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -208,8 +208,8 @@
user.drop_from_inventory(ai)
ai.forceMove(src)
ai_card = ai
- to_chat(ai_mob, "You have been transferred to \the [holder]'s [src].")
- to_chat(user, "You load [ai_mob] into \the [holder]'s [src].")
+ to_chat(ai_mob, span_blue("You have been transferred to \the [holder]'s [src]."))
+ to_chat(user, span_blue("You load [ai_mob] into \the [holder]'s [src]."))
integrated_ai = ai_mob
@@ -261,7 +261,7 @@
var/obj/item/weapon/disk/tech_disk/disk = input_device
if(disk.stored)
if(load_data(disk.stored))
- to_chat(user, "Download successful; disk erased.")
+ to_chat(user, span_blue"Download successful; disk erased."))
disk.stored = null
else
to_chat(user, "The disk is corrupt. It is useless to you.")
@@ -287,7 +287,7 @@
else
// Maybe consider a way to drop all your data into a target repo in the future.
if(load_data(incoming_files.known_tech))
- to_chat(user, "Download successful; local and remote repositories synchronized.")
+ to_chat(user, span_blue("Download successful; local and remote repositories synchronized."))
else
to_chat(user, "Scan complete. There is nothing useful stored on this terminal.")
return 1
@@ -466,10 +466,10 @@
if(!interfaced_with)
if(M)
- to_chat(M, "Total power drained: [round(total_power_drained*CELLRATE)] cell units.")
+ to_chat(M, span_blue("Total power drained: [round(total_power_drained*CELLRATE)] cell units."))
else
if(M)
- to_chat(M, "Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] cell units.")
+ to_chat(M, span_blue("Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] cell units."))
interfaced_with.drain_power(0,1,0) // Damage the victim.
drain_loc = null
diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm
index 48752e3b6f..8980213480 100644
--- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/ninja.dm
@@ -37,7 +37,7 @@
var/mob/living/carbon/human/H = holder.wearer
- to_chat(H, "You are now nearly invisible to normal detection.")
+ to_chat(H, span_blue("You are now nearly invisible to normal detection."))
H.alpha = 5
anim(get_turf(H), H, 'icons/effects/effects.dmi', "electricity",null,20,null)
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm b/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm
index cdc86a0acf..d3d6208911 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/ai_container.dm
@@ -200,8 +200,8 @@
user.drop_from_inventory(ai)
ai.forceMove(src)
ai_card = ai
- to_chat(ai_mob, "You have been transferred to \the [holder]'s [src].")
- to_chat(user, "You load [ai_mob] into \the [holder]'s [src].")
+ to_chat(ai_mob, span_blue("You have been transferred to \the [holder]'s [src]."))
+ to_chat(user, span_blue("You load [ai_mob] into \the [holder]'s [src]."))
integrated_ai = ai_mob
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/chem_dispenser.dm b/code/modules/clothing/spacesuits/rig/modules/specific/chem_dispenser.dm
index e8d6416e9a..7e1d40858b 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/chem_dispenser.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/chem_dispenser.dm
@@ -71,7 +71,7 @@
break
if(total_transferred)
- to_chat(user, "You transfer [total_transferred] units into the suit reservoir.")
+ to_chat(user, span_blue("You transfer [total_transferred] units into the suit reservoir."))
else
to_chat(user, "None of the reagents seem suitable.")
return 1
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm b/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm
index 998fc3d46a..46acec1598 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/cleaner_launcher.dm
@@ -34,7 +34,7 @@
to_chat(user, "Another grenade of that type will not fit into the module.")
return 0
- to_chat(user, "You slot \the [input_device] into the suit module.")
+ to_chat(user, span_blue("You slot \the [input_device] into the suit module."))
user.drop_from_inventory(input_device)
qdel(input_device)
accepted_item.charges++
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm b/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm
index c63f1c2fbd..2d27dd2ddb 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/cloak.dm
@@ -29,7 +29,7 @@
var/mob/living/carbon/human/H = holder.wearer
- to_chat(H, "You are now nearly invisible to normal detection.")
+ to_chat(H, span_blue("You are now nearly invisible to normal detection."))
H.alpha = 5
anim(get_turf(H), H, 'icons/effects/effects.dmi', "electricity",null,20,null)
@@ -50,4 +50,4 @@
H.alpha = initial(H.alpha)
H.visible_message("[H.name] appears from thin air!")
- playsound(H, 'sound/effects/stealthoff.ogg', 75, 1)
\ No newline at end of file
+ playsound(H, 'sound/effects/stealthoff.ogg', 75, 1)
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/datajack.dm b/code/modules/clothing/spacesuits/rig/modules/specific/datajack.dm
index be34426447..d863fa0676 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/datajack.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/datajack.dm
@@ -36,7 +36,7 @@
var/obj/item/weapon/disk/tech_disk/disk = input_device
if(disk.stored)
if(load_data(disk.stored))
- to_chat(user, "Download successful; disk erased.")
+ to_chat(user, span_blue("Download successful; disk erased."))
disk.stored = null
else
to_chat(user, "The disk is corrupt. It is useless to you.")
@@ -58,7 +58,7 @@
else
// Maybe consider a way to drop all your data into a target repo in the future.
if(load_data(incoming_files.known_tech))
- to_chat(user, "Download successful; local and remote repositories synchronized.")
+ to_chat(user, span_blue("Download successful; local and remote repositories synchronized."))
else
to_chat(user, "Scan complete. There is nothing useful stored on this terminal.")
return 1
@@ -83,4 +83,4 @@
if(!data_found)
stored_research += incoming_data
return 1
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm b/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm
index 9252b062bd..0ae4a461a3 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/grenade_launcher.dm
@@ -36,7 +36,7 @@
to_chat(user, "Another grenade of that type will not fit into the module.")
return 0
- to_chat(user, "You slot \the [input_device] into the suit module.")
+ to_chat(user, span_blue("You slot \the [input_device] into the suit module."))
user.drop_from_inventory(input_device)
qdel(input_device)
accepted_item.charges++
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm b/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm
index 8e71cf2745..3ea3c09ea8 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/inhand_fabricator.dm
@@ -34,7 +34,7 @@
else
var/obj/item/new_weapon = new fabrication_type()
new_weapon.forceMove(H)
- to_chat(H, "You quickly fabricate \a [new_weapon].")
+ to_chat(H, span_blue("You quickly fabricate \a [new_weapon]."))
H.put_in_hands(new_weapon)
return 1
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm
index c27e0d9ce3..27eb5f9b79 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm
@@ -27,14 +27,14 @@
if(!..())
return 0
-
+
var/mob/living/carbon/human/H = holder.wearer
var/obj/item/clothing/shoes/boots = holder.boots
var/obj/item/clothing/suit/space/rig/chest = holder.chest
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
- to_chat(H, "You activate your suit's powered radiation shielding.")
+ to_chat(H, span_blue("You activate your suit's powered radiation shielding."))
stored_rad_armor = holder.armor["rad"]
if(boots)
boots.armor["rad"] = 100
@@ -107,17 +107,17 @@
if(!..())
return 0
-
+
var/mob/living/carbon/human/H = holder.wearer
var/obj/item/clothing/shoes/boots = holder.boots
var/obj/item/clothing/suit/space/rig/chest = holder.chest
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
-
+
stored_max_pressure = holder.max_pressure_protection
stored_max_temp = holder.max_heat_protection_temperature
- to_chat(H, "You activate your suit's powered atmospheric shielding.")
+ to_chat(H, span_blue("You activate your suit's powered atmospheric shielding."))
if(boots)
boots.max_pressure_protection = INFINITY
@@ -163,4 +163,4 @@
holder.max_heat_protection_temperature = stored_max_temp
stored_max_pressure = 0
- stored_max_temp = 0
\ No newline at end of file
+ stored_max_temp = 0
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm b/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm
index bfea5ccf1c..562f874af1 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/powersink.dm
@@ -118,10 +118,10 @@
if(!interfaced_with)
if(M)
- to_chat(M, "Total power drained: [round(total_power_drained*CELLRATE)] cell units.")
+ to_chat(M, span_blue("Total power drained: [round(total_power_drained*CELLRATE)] cell units."))
else
if(M)
- to_chat(M, "Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] cell units.")
+ to_chat(M, span_blue("Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] cell units."))
interfaced_with.drain_power(0,1,0) // Damage the victim.
drain_loc = null
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm b/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm
index b8646cfa81..2df47f575f 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/sprinter.dm
@@ -27,7 +27,7 @@
var/mob/living/carbon/human/H = holder.wearer
- to_chat(H, "You activate the suit's sprint mode.")
+ to_chat(H, span_blue("You activate the suit's sprint mode."))
holder.slowdown = initial(holder.slowdown) - sprint_speed
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm b/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm
index 7e73f08880..37848b2c1d 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm
@@ -198,7 +198,7 @@
// Don't cycle if this engage() is being called by activate().
if(!active)
- to_chat(holder.wearer, "You activate your visual sensors.")
+ to_chat(holder.wearer, span_blue("You activate your visual sensors."))
return 1
if(vision_modes.len > 1)
@@ -207,9 +207,9 @@
vision_index = 1
vision = vision_modes[vision_index]
- to_chat(holder.wearer, "You cycle your sensors to [vision.mode] mode.")
+ to_chat(holder.wearer, span_blue("You cycle your sensors to [vision.mode] mode."))
else
- to_chat(holder.wearer, "Your sensors only have one mode.")
+ to_chat(holder.wearer, span_blue("Your sensors only have one mode."))
return 1
/obj/item/rig_module/vision/activate()
@@ -234,4 +234,4 @@
if(!vision) vision = vision_datum
processed_vision += vision_datum
- vision_modes = processed_vision
\ No newline at end of file
+ vision_modes = processed_vision
diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/voice.dm b/code/modules/clothing/spacesuits/rig/modules/specific/voice.dm
index fe04d123f5..5f32f15c41 100644
--- a/code/modules/clothing/spacesuits/rig/modules/specific/voice.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/specific/voice.dm
@@ -38,15 +38,15 @@
if("Enable")
active = 1
voice_holder.active = 1
- to_chat(usr, "You enable the speech synthesiser.")
+ to_chat(usr, span_blue("You enable the speech synthesiser."))
if("Disable")
active = 0
voice_holder.active = 0
- to_chat(usr, "You disable the speech synthesiser.")
+ to_chat(usr, span_blue("You disable the speech synthesiser."))
if("Set Name")
var/raw_choice = sanitize(input(usr, "Please enter a new name.") as text|null, MAX_NAME_LEN)
if(!raw_choice)
return 0
voice_holder.voice = raw_choice
- to_chat(usr, "You are now mimicking [voice_holder.voice].")
- return 1
\ No newline at end of file
+ to_chat(usr, span_blue("You are now mimicking [voice_holder.voice]."))
+ return 1
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index 4550eab088..a92dfe1039 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -201,7 +201,7 @@
break
if(total_transferred)
- to_chat(user, "You transfer [total_transferred] units into the suit reservoir.")
+ to_chat(user, span_blue("You transfer [total_transferred] units into the suit reservoir."))
else
to_chat(user, "None of the reagents seem suitable.")
return 1
@@ -330,17 +330,17 @@
if("Enable")
active = 1
voice_holder.active = 1
- to_chat(usr, "You enable the speech synthesiser.")
+ to_chat(usr, span_blue("You enable the speech synthesiser."))
if("Disable")
active = 0
voice_holder.active = 0
- to_chat(usr, "You disable the speech synthesiser.")
+ to_chat(usr, span_blue("You disable the speech synthesiser."))
if("Set Name")
var/raw_choice = sanitize(input(usr, "Please enter a new name.") as text|null, MAX_NAME_LEN)
if(!raw_choice)
return 0
voice_holder.voice = raw_choice
- to_chat(usr, "You are now mimicking [voice_holder.voice].")
+ to_chat(usr, span_blue("You are now mimicking [voice_holder.voice]."))
return 1
/obj/item/rig_module/maneuvering_jets
@@ -508,7 +508,7 @@
to_chat(user, "Another grenade of that type will not fit into the module.")
return 0
- to_chat(user, "You slot \the [input_device] into the suit module.")
+ to_chat(user, span_blue("You slot \the [input_device] into the suit module."))
user.drop_from_inventory(input_device)
qdel(input_device)
accepted_item.charges++
@@ -632,7 +632,7 @@
var/mob/living/carbon/human/H = holder.wearer
- to_chat(H, "You activate the suit's sprint mode.")
+ to_chat(H, span_blue("You activate the suit's sprint mode."))
holder.slowdown = initial(holder.slowdown) - sprint_speed
diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm
index ad8a6fc5ab..d96c6a80fa 100644
--- a/code/modules/clothing/spacesuits/rig/modules/vision.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/vision.dm
@@ -205,7 +205,7 @@
// Don't cycle if this engage() is being called by activate().
if(starting_up)
- to_chat(holder.wearer, "You activate your visual sensors.")
+ to_chat(holder.wearer, span_blue("You activate your visual sensors."))
return 1
if(vision_modes.len > 1)
@@ -214,9 +214,9 @@
vision_index = 1
vision = vision_modes[vision_index]
- to_chat(holder.wearer, "You cycle your sensors to [vision.mode] mode.")
+ to_chat(holder.wearer, span_blue("You cycle your sensors to [vision.mode] mode."))
else
- to_chat(holder.wearer, "Your sensors only have one mode.")
+ to_chat(holder.wearer, span_blue("Your sensors only have one mode."))
return 1
/obj/item/rig_module/vision/activate()
diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
index b28d93bc55..3cc91f6249 100644
--- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
@@ -223,11 +223,11 @@
if(!istype(module))
selected_module = null
- to_chat(usr, "Primary system is now: deselected.")
+ to_chat(usr, span_blue("Primary system is now: deselected."))
return
selected_module = module
- to_chat(usr, "Primary system is now: [selected_module.interface_name].")
+ to_chat(usr, span_blue("Primary system is now: [selected_module.interface_name]."))
/obj/item/weapon/rig/verb/toggle_module()
@@ -261,10 +261,10 @@
return
if(module.active)
- to_chat(usr, "You attempt to deactivate \the [module.interface_name].")
+ to_chat(usr, span_blue("You attempt to deactivate \the [module.interface_name]."))
module.deactivate()
else
- to_chat(usr, "You attempt to activate \the [module.interface_name].")
+ to_chat(usr, span_blue("You attempt to activate \the [module.interface_name]."))
module.activate()
/obj/item/weapon/rig/verb/engage_module()
@@ -298,5 +298,5 @@
if(!istype(module))
return
- to_chat(usr, "You attempt to engage the [module.interface_name].")
- module.engage()
\ No newline at end of file
+ to_chat(usr, span_blue("You attempt to engage the [module.interface_name]."))
+ module.engage()
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index fd37d819bf..e676b87f7b 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -54,11 +54,11 @@
if(camera.status == TRUE)
camera.set_status(FALSE)
- to_chat(usr, "Camera deactivated.")
+ to_chat(usr, span_blue("Camera deactivated."))
else
camera.set_status(TRUE)
camera.c_tag = usr.name
- to_chat(usr, "User scanned as [camera.c_tag]. Camera activated.")
+ to_chat(usr, span_blue("User scanned as [camera.c_tag]. Camera activated."))
/obj/item/clothing/head/helmet/space/examine(mob/user)
. = ..()
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 9ff1be96a2..ee9bc3e78a 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -198,10 +198,10 @@
/obj/item/clothing/suit/armor/reactive/attack_self(mob/user as mob)
active = !( active )
if (active)
- to_chat(user, "The reactive armor is now active.")
+ to_chat(user, span_blue("The reactive armor is now active."))
icon_state = "reactive"
else
- to_chat(user, "The reactive armor is now inactive.")
+ to_chat(user, span_blue("The reactive armor is now inactive."))
icon_state = "reactiveoff"
add_fingerprint(user)
return
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index aae9a23515..5d77b215f3 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -85,7 +85,7 @@ log transactions
if(istype(I, /obj/item/weapon/card))
if(emagged > 0)
//prevent inserting id into an emagged ATM
- to_chat(user, "\icon[src][bicon(src)] CARD READER ERROR. This system has been compromised!")
+ to_chat(user, span_red("\icon[src][bicon(src)] CARD READER ERROR. This system has been compromised!"))
return
else if(istype(I,/obj/item/weapon/card/emag))
I.resolve_attackby(src, user)
@@ -288,11 +288,11 @@ log transactions
T.time = stationtime2text()
failed_account.transaction_log.Add(T)
else
- to_chat(usr, "\icon[src][bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")
+ to_chat(usr, span_red("\icon[src][bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining."))
previous_account_number = tried_account_num
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
else
- to_chat(usr, "\icon[src][bicon(src)] incorrect pin/account combination entered.")
+ to_chat(usr, span_red("\icon[src][bicon(src)] incorrect pin/account combination entered."))
number_incorrect_tries = 0
else
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
@@ -308,7 +308,7 @@ log transactions
T.time = stationtime2text()
authenticated_account.transaction_log.Add(T)
- to_chat(usr, "\icon[src][bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'")
+ to_chat(usr, span_blue("\icon[src][bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'"))
previous_account_number = tried_account_num
if("e_withdrawal")
@@ -433,7 +433,7 @@ log transactions
if(!held_card)
//this might happen if the user had the browser window open when somebody emagged it
if(emagged > 0)
- to_chat(usr, "\icon[src][bicon(src)] The ATM card reader rejected your ID because this machine has been sabotaged!")
+ to_chat(usr, span_red("\icon[src][bicon(src)] The ATM card reader rejected your ID because this machine has been sabotaged!"))
else
var/obj/item/I = usr.get_active_hand()
if (istype(I, /obj/item/weapon/card/id))
diff --git a/code/modules/economy/money_bag.dm b/code/modules/economy/money_bag.dm
index 3e85d62e46..d9afc36357 100644
--- a/code/modules/economy/money_bag.dm
+++ b/code/modules/economy/money_bag.dm
@@ -49,14 +49,14 @@
..()
if (istype(W, /obj/item/weapon/coin))
var/obj/item/weapon/coin/C = W
- to_chat(user, "You add the [C.name] into the bag.")
+ to_chat(user, span_blue("You add the [C.name] into the bag."))
usr.drop_item()
contents += C
if (istype(W, /obj/item/weapon/moneybag))
var/obj/item/weapon/moneybag/C = W
for (var/obj/O in C.contents)
contents += O;
- to_chat(user, "You empty the [C.name] into the bag.")
+ to_chat(user, span_blue("You empty the [C.name] into the bag."))
return
/obj/item/weapon/moneybag/Topic(href, href_list)
@@ -95,4 +95,4 @@
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/gold(src)
- new /obj/item/weapon/coin/gold(src)
\ No newline at end of file
+ new /obj/item/weapon/coin/gold(src)
diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm
index 49b1cc4bf2..53ffe22879 100644
--- a/code/modules/flufftext/Dreaming.dm
+++ b/code/modules/flufftext/Dreaming.dm
@@ -27,7 +27,7 @@ var/list/dreams = list(
spawn(0)
for(var/i = rand(1,4),i > 0, i--)
- to_chat(src, "... [pick(dreams)] ...")
+ to_chat(src, span_blue("... [pick(dreams)] ..."))
sleep(rand(40,70))
if(paralysis <= 0)
dreaming = 0
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index e4fc9ac89c..f0dc850bd9 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -244,8 +244,8 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/user as mob)
step_away(src,my_target,2)
for(var/mob/M in oviewers(world.view,my_target))
- to_chat(M, "[my_target] flails around wildly.")
- my_target.show_message("[src] has been attacked by [my_target] ", 1) //Lazy.
+ to_chat(M, span_red("[my_target] flails around wildly."))
+ my_target.show_message(span_red("[src] has been attacked by [my_target] "), 1) //Lazy.
src.health -= P.force
@@ -257,7 +257,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
step_away(src,my_target,2)
if(prob(30))
for(var/mob/O in oviewers(world.view , my_target))
- to_chat(O, "[my_target] stumbles around.")
+ to_chat(O, span_red("[my_target] stumbles around."))
/obj/effect/fake_attacker/New()
..()
@@ -304,7 +304,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
if(prob(15))
if(weapon_name)
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
- my_target.show_message("[my_target] has been attacked with [weapon_name] by [src.name] ", 1)
+ my_target.show_message(span_red("[my_target] has been attacked with [weapon_name] by [src.name]!"), 1)
my_target.halloss += 8
if(prob(20)) my_target.eye_blurry += 3
if(prob(33))
@@ -312,7 +312,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
fake_blood(my_target)
else
my_target << sound(pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'))
- my_target.show_message("[src.name] has punched [my_target]!", 1)
+ my_target.show_message(span_red("[src.name] has punched [my_target]!"), 1)
my_target.halloss += 4
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
diff --git a/code/modules/food/food/sandwich.dm b/code/modules/food/food/sandwich.dm
index 738e3f4a46..e8fc9e9e1e 100644
--- a/code/modules/food/food/sandwich.dm
+++ b/code/modules/food/food/sandwich.dm
@@ -23,16 +23,16 @@
sandwich_limit += 4
if(istype(W,/obj/item/weapon/material/shard))
- to_chat(user, "You hide [W] in \the [src].")
+ to_chat(user, span_blue("You hide [W] in \the [src]."))
user.drop_item()
W.loc = src
update()
return
else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks))
if(src.contents.len > sandwich_limit)
- to_chat(user, "If you put anything else on \the [src] it's going to collapse.")
+ to_chat(user, span_red("If you put anything else on \the [src] it's going to collapse."))
return
- to_chat(user, "You layer [W] over \the [src].")
+ to_chat(user, span_blue("You layer [W] over \the [src]."))
var/obj/item/weapon/reagent_containers/F = W
F.reagents.trans_to_obj(src, F.reagents.total_volume)
user.drop_item()
@@ -82,7 +82,7 @@
. = ..()
if(contents.len)
var/obj/item/O = pick(contents)
- . += "You think you can see [O.name] in there."
+ . += span_blue("You think you can see [O.name] in there.")
/obj/item/weapon/reagent_containers/food/snacks/csandwich/attack(mob/M as mob, mob/user as mob, def_zone)
@@ -97,6 +97,6 @@
H = M
if(H && shard && M == user) //This needs a check for feeding the food to other people, but that could be abusable.
- to_chat(H, "You lacerate your mouth on a [shard.name] in the sandwich!")
+ to_chat(H, span_red("You lacerate your mouth on a [shard.name] in the sandwich!"))
H.adjustBruteLoss(5) //TODO: Target head if human. //This TODO has been here for 4 years.
..()
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index 3cd928dddc..697d2db4d2 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -882,7 +882,7 @@
. = ..()
new/obj/effect/decal/cleanable/egg_smudge(src.loc)
src.reagents.splash(hit_atom, reagents.total_volume)
- src.visible_message("[src.name] has been squashed.","You hear a smack.")
+ src.visible_message(span_red("[src.name] has been squashed."),span_red("You hear a smack."))
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -891,10 +891,10 @@
var/clr = C.colourName
if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
- to_chat(usr, "The egg refuses to take on this color!")
+ to_chat(usr, span_blue("The egg refuses to take on this color!"))
return
- to_chat(usr, "You color \the [src] [clr]")
+ to_chat(usr, span_blue("You color \the [src] [clr]"))
icon_state = "egg-[clr]"
else
. = ..()
@@ -1662,7 +1662,7 @@
/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume()
if(prob(unpopped)) //lol ...what's the point?
- to_chat(usr, "You bite down on an un-popped kernel!")
+ to_chat(usr, span_red("You bite down on an un-popped kernel!"))
unpopped = max(0, unpopped-1)
. = ..()
diff --git a/code/modules/food/kitchen/cooking_machines/fryer.dm b/code/modules/food/kitchen/cooking_machines/fryer.dm
index 238fe4e0cd..b48a6deec1 100644
--- a/code/modules/food/kitchen/cooking_machines/fryer.dm
+++ b/code/modules/food/kitchen/cooking_machines/fryer.dm
@@ -233,8 +233,8 @@
else
to_chat(victim, "Searing hot oil scorches your [E ? E.name : "flesh"]!")
- user.attack_log += text("\[[time_stamp()]\] Has [cook_type] \the [victim] ([victim.ckey]) in \a [src]")
- victim.attack_log += text("\[[time_stamp()]\] Has been [cook_type] in \a [src] by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] [span_red("Has [cook_type] \the [victim] ([victim.ckey]) in \a [src]")]")
+ victim.attack_log += text("\[[time_stamp()]\] [span_orange("Has been [cook_type] in \a [src] by [user.name] ([user.ckey])")]")
msg_admin_attack("[key_name_admin(user)] [cook_type] \the [victim] ([victim.ckey]) in \a [src]. (JMP)")
//Coat the victim in some oil
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index 5ae93bfd9c..430029a0df 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -154,7 +154,7 @@
var/damage = rand(0, 9)
if(!damage)
playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- target.visible_message("[user] has attempted to punch [target]!")
+ target.visible_message(span_red("[user] has attempted to punch [target]!"))
return TRUE
var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_sel.selecting))
var/armor_block = target.run_armor_check(affecting, "melee")
@@ -165,14 +165,14 @@
playsound(target, "punch", 25, 1, -1)
- target.visible_message("[user] has punched [target]!")
+ target.visible_message(span_red("[user] has punched [target]!"))
if(armor_soak >= damage)
return TRUE
target.apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak)
if(damage >= 9)
- target.visible_message("[user] has weakened [target]!")
+ target.visible_message(span_red("[user] has weakened [target]!"))
target.apply_effect(4, WEAKEN, armor_block)
return TRUE
@@ -239,7 +239,7 @@
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
var/aforce = I.force
playsound(src, 'sound/effects/Glasshit.ogg', 75, 1)
- visible_message("[src] was hit by [I].")
+ visible_message(span_red("[src] was hit by [I]."))
if(I.damtype == BRUTE || I.damtype == BURN)
take_damage(aforce)
return
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 0b11c0ef15..00712e4f7c 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -404,7 +404,7 @@ Book Cart End
modedesc = "ERROR"
to_chat(user, " - Mode [mode] : [modedesc]")
if(src.computer)
- to_chat(user, "Computer has been associated with this unit.")
+ to_chat(user, span_green("Computer has been associated with this unit."))
else
- to_chat(user, "No associated computer found. Only local scans will function properly.")
- to_chat(user, "\n")
\ No newline at end of file
+ to_chat(user, span_red("No associated computer found. Only local scans will function properly."))
+ to_chat(user, "\n")
diff --git a/code/modules/materials/sheets/organic/tanning/hide.dm b/code/modules/materials/sheets/organic/tanning/hide.dm
index e8dadfce73..5f61873537 100644
--- a/code/modules/materials/sheets/organic/tanning/hide.dm
+++ b/code/modules/materials/sheets/organic/tanning/hide.dm
@@ -1,7 +1,7 @@
/obj/item/stack/animalhide
name = "hide"
desc = "The hide of some creature."
- description_info = "Use something sharp, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning."
+ description_info = "Use something sharp, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning."
icon_state = "sheet-hide"
drop_sound = 'sound/items/drop/cloth.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
@@ -27,7 +27,7 @@
if(HS.get_amount() < HS.max_amount)
H = HS
break
-
+
// Either we found a valid stack, in which case increment amount,
// Or we need to make a new stack
if(istype(H))
@@ -38,7 +38,7 @@
// Increment the amount
src.use(1)
scraped++
-
+
if(scraped)
to_chat(user, SPAN_NOTICE("You scrape the hair off [scraped] hide\s."))
else
@@ -87,4 +87,4 @@
desc = "The skin of a terrible creature."
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
- stacktype = "hide-xeno"
\ No newline at end of file
+ stacktype = "hide-xeno"
diff --git a/code/modules/materials/sheets/organic/tanning/hide_hairless.dm b/code/modules/materials/sheets/organic/tanning/hide_hairless.dm
index f504e24a9f..edb36b9b86 100644
--- a/code/modules/materials/sheets/organic/tanning/hide_hairless.dm
+++ b/code/modules/materials/sheets/organic/tanning/hide_hairless.dm
@@ -3,7 +3,7 @@
/obj/item/stack/hairlesshide
name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning."
- description_info = "Get it wet to continue tanning this into leather.
\
+ description_info = "Get it wet to continue tanning this into leather.
\
You could set it in a river, wash it with a sink, or just splash water on it with a bucket."
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
@@ -24,7 +24,7 @@
if(HS.get_amount() < HS.max_amount)
H = HS
break
-
+
// Either we found a valid stack, in which case increment amount,
// Or we need to make a new stack
if(istype(H))
@@ -45,4 +45,4 @@
I.dry()
use(1)
- stacknum -= 1
\ No newline at end of file
+ stacknum -= 1
diff --git a/code/modules/materials/sheets/organic/tanning/leather_wet.dm b/code/modules/materials/sheets/organic/tanning/leather_wet.dm
index 6d1df6fd75..be4d60570a 100644
--- a/code/modules/materials/sheets/organic/tanning/leather_wet.dm
+++ b/code/modules/materials/sheets/organic/tanning/leather_wet.dm
@@ -3,9 +3,9 @@
name = "wet leather"
desc = "This leather has been cleaned but still needs to be dried."
description_info = "To finish tanning the leather, you need to dry it. \
- You could place it under a fire, \
- put it in a drying rack, \
- or build a tanning rack from steel or wooden boards."
+ You could place it under a fire, \
+ put it in a drying rack, \
+ or build a tanning rack from steel or wooden boards."
singular_name = "wet leather piece"
icon_state = "sheet-wetleather"
var/wetness = 30 //Reduced when exposed to high temperautres
diff --git a/code/modules/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm
new file mode 100644
index 0000000000..8a53d8d398
--- /dev/null
+++ b/code/modules/mentor/mentorhelp.dm
@@ -0,0 +1,476 @@
+/client/var/datum/mentor_help/current_mentorhelp
+
+//
+//TICKET MANAGER
+//
+
+GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new)
+
+/datum/mentor_help_tickets
+ var/list/active_tickets = list()
+ var/list/resolved_tickets = list()
+
+ var/obj/effect/statclick/mticket_list/astatclick = new(null, null, AHELP_ACTIVE)
+ var/obj/effect/statclick/mticket_list/rstatclick = new(null, null, AHELP_RESOLVED)
+
+/datum/mentor_help_tickets/Destroy()
+ QDEL_LIST(active_tickets)
+ QDEL_LIST(resolved_tickets)
+ QDEL_NULL(astatclick)
+ QDEL_NULL(rstatclick)
+ return ..()
+
+//private
+/datum/mentor_help_tickets/proc/ListInsert(datum/mentor_help/new_ticket)
+ var/list/mticket_list
+ switch(new_ticket.state)
+ if(AHELP_ACTIVE)
+ mticket_list = active_tickets
+ if(AHELP_RESOLVED)
+ mticket_list = resolved_tickets
+ else
+ CRASH("Invalid ticket state: [new_ticket.state]")
+ var/num_closed = mticket_list.len
+ if(num_closed)
+ for(var/I in 1 to num_closed)
+ var/datum/mentor_help/MH = mticket_list[I]
+ if(MH.id > new_ticket.id)
+ mticket_list.Insert(I, new_ticket)
+ return
+ mticket_list += new_ticket
+
+//opens the ticket listings, only two states here
+/datum/mentor_help_tickets/proc/BrowseTickets(state)
+ var/list/l2b
+ var/title
+ switch(state)
+ if(AHELP_ACTIVE)
+ l2b = active_tickets
+ title = "Active Tickets"
+ if(AHELP_RESOLVED)
+ l2b = resolved_tickets
+ title = "Resolved Tickets"
+ if(!l2b)
+ return
+ var/list/dat = list("[title]")
+ dat += "Refresh
"
+ for(var/datum/mentor_help/MH as anything in l2b)
+ dat += "Ticket #[MH.id]: [MH.initiator_ckey]: [MH.name]
"
+
+ usr << browse(dat.Join(), "window=mhelp_list[state];size=600x480")
+
+//Tickets statpanel
+/datum/mentor_help_tickets/proc/stat_entry()
+ var/num_disconnected = 0
+ stat("== Mentor Tickets ==")
+ stat("Active Tickets:", astatclick.update("[active_tickets.len]"))
+ for(var/datum/mentor_help/MH as anything in active_tickets)
+ if(MH.initiator)
+ stat("#[MH.id]. [MH.initiator_ckey]:", MH.statclick.update())
+ else
+ ++num_disconnected
+ if(num_disconnected)
+ stat("Disconnected:", astatclick.update("[num_disconnected]"))
+ stat("Resolved Tickets:", rstatclick.update("[resolved_tickets.len]"))
+
+//Reassociate still open ticket if one exists
+/datum/mentor_help_tickets/proc/ClientLogin(client/C)
+ C.current_mentorhelp = CKey2ActiveTicket(C.ckey)
+ if(C.current_mentorhelp)
+ C.current_mentorhelp.AddInteraction("Client reconnected.")
+ C.current_mentorhelp.initiator = C
+
+//Dissasociate ticket
+/datum/mentor_help_tickets/proc/ClientLogout(client/C)
+ if(C.current_mentorhelp)
+ C.current_mentorhelp.AddInteraction("Client disconnected.")
+ C.current_mentorhelp.initiator = null
+ C.current_mentorhelp = null
+
+//Get a ticket given a ckey
+/datum/mentor_help_tickets/proc/CKey2ActiveTicket(ckey)
+ for(var/datum/admin_help/MH as anything in active_tickets)
+ if(MH.initiator_ckey == ckey)
+ return MH
+
+//
+//TICKET LIST STATCLICK
+//
+
+/obj/effect/statclick/mticket_list
+ var/current_state
+
+/obj/effect/statclick/mticket_list/New(loc, name, state)
+ current_state = state
+ ..()
+
+/obj/effect/statclick/mticket_list/Click()
+ GLOB.mhelp_tickets.BrowseTickets(current_state)
+
+//
+//TICKET DATUM
+//
+
+/datum/mentor_help
+ var/id
+ var/name
+ var/state = AHELP_ACTIVE
+
+ var/opened_at
+ var/closed_at
+
+ var/client/initiator //semi-misnomer, it's the person who ahelped/was bwoinked
+ var/initiator_ckey
+ var/initiator_key_name
+
+ var/list/_interactions //use AddInteraction() or, preferably, admin_ticket_log()
+
+ var/obj/effect/statclick/ahelp/statclick
+
+ var/static/ticket_counter = 0
+
+//call this on its own to create a ticket, don't manually assign current_mentorhelp
+//msg is the title of the ticket: usually the ahelp text
+/datum/mentor_help/New(msg, client/C)
+ //clean the input msg
+ msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
+ if(!msg || !C || !C.mob)
+ qdel(src)
+ return
+
+ id = ++ticket_counter
+ opened_at = world.time
+
+ name = msg
+
+ initiator = C
+ initiator_ckey = C.ckey
+ initiator_key_name = key_name(initiator, FALSE, TRUE)
+ if(initiator.current_mentorhelp) //This is a bug
+ log_debug("Ticket erroneously left open by code")
+ initiator.current_mentorhelp.AddInteraction("Ticket erroneously left open by code")
+ initiator.current_mentorhelp.Resolve()
+ initiator.current_mentorhelp = src
+
+ statclick = new(null, src)
+ _interactions = list()
+
+ log_admin("Mentorhelp: [key_name(C)]: [msg]")
+ MessageNoRecipient(msg)
+ //show it to the person adminhelping too
+ to_chat(C, "Mentor-PM to-Mentors: [name]")
+
+ GLOB.mhelp_tickets.active_tickets += src
+
+/datum/mentor_help/Destroy()
+ RemoveActive()
+ GLOB.mhelp_tickets.resolved_tickets -= src
+ return ..()
+
+/datum/mentor_help/proc/AddInteraction(formatted_message)
+ _interactions += "[gameTimestamp()]: [formatted_message]"
+
+//private
+/datum/mentor_help/proc/ClosureLinks(ref_src)
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ . = " (RSLVE)"
+
+//private
+/datum/mentor_help/proc/LinkedReplyName(ref_src)
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ return "[initiator_ckey]"
+
+//private
+/datum/mentor_help/proc/TicketHref(msg, ref_src, action = "ticket")
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ return "[msg]"
+
+//message from the initiator without a target, all people with mentor powers will see this
+/datum/mentor_help/proc/MessageNoRecipient(msg)
+ var/ref_src = "\ref[src]"
+ var/chat_msg = "(ESCALATE) Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)]: [msg]"
+ AddInteraction("[LinkedReplyName(ref_src)]: [msg]")
+ for (var/client/C in GLOB.mentors)
+ if (C.is_preference_enabled(/datum/client_preference/play_mentorhelp_ping))
+ C << 'sound/effects/mentorhelp.mp3'
+ for (var/client/C in GLOB.admins)
+ if (C.is_preference_enabled(/datum/client_preference/play_mentorhelp_ping))
+ C << 'sound/effects/mentorhelp.mp3'
+ message_mentors(chat_msg)
+
+//Reopen a closed ticket
+/datum/mentor_help/proc/Reopen()
+ if(state == AHELP_ACTIVE)
+ to_chat(usr, "This ticket is already open.")
+ return
+
+ if(GLOB.mhelp_tickets.CKey2ActiveTicket(initiator_ckey))
+ to_chat(usr, "This user already has an active ticket, cannot reopen this one.")
+ return
+
+ statclick = new(null, src)
+ GLOB.mhelp_tickets.active_tickets += src
+ GLOB.mhelp_tickets.resolved_tickets -= src
+ switch(state)
+ if(AHELP_RESOLVED)
+ feedback_dec("mhelp_resolve")
+ state = AHELP_ACTIVE
+ closed_at = null
+ if(initiator)
+ initiator.current_mentorhelp = src
+
+ AddInteraction("Reopened by [usr.ckey]")
+ if(initiator)
+ to_chat(initiator, "[span_purple("Ticket [TicketHref("#[id]")] was reopened by [usr.ckey].")]")
+ var/msg = "Ticket [TicketHref("#[id]")] reopened by [usr.ckey]."
+ message_mentors(msg)
+ log_admin(msg)
+ feedback_inc("mhelp_reopen")
+ TicketPanel() //can only be done from here, so refresh it
+
+//private
+/datum/mentor_help/proc/RemoveActive()
+ if(state != AHELP_ACTIVE)
+ return
+ closed_at = world.time
+ QDEL_NULL(statclick)
+ GLOB.mhelp_tickets.active_tickets -= src
+ if(initiator && initiator.current_mentorhelp == src)
+ initiator.current_mentorhelp = null
+
+//Mark open ticket as resolved/legitimate, returns mentorhelp verb
+/datum/mentor_help/proc/Resolve(silent = FALSE)
+ if(state != AHELP_ACTIVE)
+ return
+ RemoveActive()
+ state = AHELP_RESOLVED
+ GLOB.mhelp_tickets.ListInsert(src)
+
+ AddInteraction("[span_green("Resolved by [usr.ckey].")]")
+ if(initiator)
+ to_chat(initiator, "[span_green("Ticket [TicketHref("#[id]")] was marked resolved by [usr.ckey].")]")
+ if(!silent)
+ feedback_inc("mhelp_resolve")
+ var/msg = "Ticket [TicketHref("#[id]")] resolved by [usr.ckey]"
+ message_mentors(msg)
+ log_admin(msg)
+
+//Show the ticket panel
+/datum/mentor_help/proc/TicketPanel()
+ tgui_interact(usr.client.mob)
+
+/datum/mentor_help/proc/TicketPanelLegacy()
+ var/list/dat = list("Ticket #[id]")
+ var/ref_src = "\ref[src]"
+ dat += "Mentor Help Ticket #[id]: [LinkedReplyName(ref_src)]
"
+ dat += "State: "
+ switch(state)
+ if(AHELP_ACTIVE)
+ dat += "OPEN"
+ if(AHELP_RESOLVED)
+ dat += "RESOLVED"
+ else
+ dat += "UNKNOWN"
+ dat += "[GLOB.TAB][TicketHref("Refresh", ref_src)]"
+ if(state != AHELP_ACTIVE)
+ dat += "[GLOB.TAB][TicketHref("Reopen", ref_src, "reopen")]"
+ dat += "
Opened at: [gameTimestamp(wtime = opened_at)] (Approx [(world.time - opened_at) / 600] minutes ago)"
+ if(closed_at)
+ dat += "
Closed at: [gameTimestamp(wtime = closed_at)] (Approx [(world.time - closed_at) / 600] minutes ago)"
+ dat += "
"
+ if(initiator)
+ dat += "Actions: [Context(ref_src)]
"
+ else
+ dat += "DISCONNECTED[GLOB.TAB][ClosureLinks(ref_src)]
"
+ dat += "
Log:
"
+ for(var/I in _interactions)
+ dat += "[I]
"
+
+ usr << browse(dat.Join(), "window=mhelp[id];size=620x480")
+
+/datum/mentor_help/tgui_fallback(payload)
+ if(..())
+ return
+
+ TicketPanelLegacy()
+
+/datum/mentor_help/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "MentorTicketPanel", "Ticket #[id] - [LinkedReplyName("\ref[src]")]")
+ ui.open()
+
+/datum/mentor_help/tgui_state(mob/user)
+ return GLOB.tgui_mentor_state
+
+/datum/mentor_help/tgui_data(mob/user)
+ var/list/data = list()
+
+ data["id"] = id
+
+ var/ref_src = "\ref[src]"
+ data["title"] = name
+ data["name"] = LinkedReplyName(ref_src)
+
+ switch(state)
+ if(AHELP_ACTIVE)
+ data["state"] = "open"
+ if(AHELP_RESOLVED)
+ data["state"] = "resolved"
+ else
+ data["state"] = "unknown"
+
+ data["opened_at"] = (world.time - opened_at)
+ data["closed_at"] = (world.time - closed_at)
+ data["opened_at_date"] = gameTimestamp(wtime = opened_at)
+ data["closed_at_date"] = gameTimestamp(wtime = closed_at)
+
+ data["actions"] = Context(ref_src)
+
+ data["log"] = _interactions
+
+ return data
+
+/datum/mentor_help/tgui_act(action, params)
+ if(..())
+ return
+ switch(action)
+ if("escalate")
+ Escalate()
+ . = TRUE
+ if("reopen")
+ Reopen()
+ . = TRUE
+ if("legacy")
+ TicketPanelLegacy()
+ . = TRUE
+
+//Kick ticket to admins
+/datum/mentor_help/proc/Escalate()
+ if(tgui_alert(usr, "Really escalate this ticket to admins? No mentors will ever be able to interact with it again if you do.","Escalate",list("Yes","No")) != "Yes")
+ return
+ if (src.initiator == null) // You can't escalate a mentorhelp of someone who's logged out because it won't create the adminhelp properly
+ to_chat(usr, "Error: client not found, unable to escalate.")
+ return
+ var/datum/admin_help/AH = new /datum/admin_help(src.name, src.initiator, FALSE)
+ message_mentors("[usr.ckey] escalated Ticket [TicketHref("#[id]")]")
+ log_admin("[key_name(usr)] escalated mentorhelp [src.name]")
+ to_chat(src.initiator, "[usr.ckey] escalated your mentorhelp to admins.")
+ AH._interactions = src._interactions
+ GLOB.mhelp_tickets.active_tickets -= src
+ GLOB.mhelp_tickets.resolved_tickets -= src
+ qdel(src)
+
+/datum/mentor_help/proc/Context(ref_src)
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ if(state == AHELP_ACTIVE)
+ . += ClosureLinks(ref_src)
+ if(state != AHELP_RESOLVED)
+ . += " (ESCALATE)"
+
+//Forwarded action from admin/Topic OR mentor/Topic depending on which rank the caller has
+/datum/mentor_help/proc/Action(action)
+ switch(action)
+ if("ticket")
+ TicketPanel()
+ if("reply")
+ usr.client.cmd_mhelp_reply(initiator)
+ if("resolve")
+ Resolve()
+ if("reopen")
+ Reopen()
+ if("escalate")
+ Escalate()
+
+//
+// TICKET STATCLICK
+//
+
+/obj/effect/statclick/mhelp
+ var/datum/mentor_help/mhelp_datum
+
+/obj/effect/statclick/mhelp/New(loc, datum/mentor_help/MH)
+ mhelp_datum = MH
+ ..(loc)
+
+/obj/effect/statclick/mhelp/update()
+ return ..(mhelp_datum.name)
+
+/obj/effect/statclick/mhelp/Click()
+ mhelp_datum.TicketPanel()
+
+/obj/effect/statclick/mhelp/Destroy()
+ mhelp_datum = null
+ return ..()
+
+//
+// CLIENT PROCS
+//
+
+/client/verb/mentorhelp(msg as text)
+ set category = "Admin"
+ set name = "Mentorhelp"
+
+ if(say_disabled) //This is here to try to identify lag problems
+ to_chat(usr, "Speech is currently admin-disabled.")
+ return
+
+ //handle muting and automuting
+ if(prefs.muted & MUTE_ADMINHELP)
+ to_chat(src, "Error: Mentor-PM: You cannot send adminhelps (Muted).")
+ return
+ if(handle_spam_prevention(msg,MUTE_ADMINHELP))
+ return
+
+ if(!msg)
+ return
+
+ //remove out adminhelp verb temporarily to prevent spamming of admins.
+ src.verbs -= /client/verb/mentorhelp
+ spawn(600)
+ src.verbs += /client/verb/mentorhelp // 1 minute cool-down for mentorhelps
+
+ feedback_add_details("admin_verb","Mentorhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ if(current_mentorhelp)
+ if(tgui_alert(usr, "You already have a ticket open. Is this for the same issue?","Duplicate?",list("Yes","No")) != "No")
+ if(current_mentorhelp)
+ log_admin("Mentorhelp: [key_name(src)]: [msg]")
+ current_mentorhelp.MessageNoRecipient(msg)
+ to_chat(usr, "Mentor-PM to-Mentors: [msg]")
+ return
+ else
+ to_chat(usr, "Ticket not found, creating new one...")
+ else
+ current_mentorhelp.AddInteraction("[usr.ckey] opened a new ticket.")
+ current_mentorhelp.Resolve()
+
+ new /datum/mentor_help(msg, src, FALSE)
+
+//admin proc
+/client/proc/cmd_mentor_ticket_panel()
+ set name = "Mentor Ticket List"
+ set category = "Admin"
+
+ var/browse_to
+
+ switch(tgui_input_list(usr, "Display which ticket list?", "List Choice", list("Active Tickets", "Resolved Tickets")))
+ if("Active Tickets")
+ browse_to = AHELP_ACTIVE
+ if("Resolved Tickets")
+ browse_to = AHELP_RESOLVED
+ else
+ return
+
+ GLOB.mhelp_tickets.BrowseTickets(browse_to)
+
+/proc/message_mentors(var/msg)
+ msg = "Mentor: [msg]"
+
+ for(var/client/C in GLOB.mentors)
+ to_chat(C, msg)
+ for(var/client/C in GLOB.admins)
+ to_chat(C, msg)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index c2494f162c..e3de5b5110 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -1,1047 +1,1047 @@
-/mob/observer
- name = "observer"
- desc = "This shouldn't appear"
- density = FALSE
- vis_flags = NONE
-
-/mob/observer/dead
- name = "ghost"
- desc = "It's a g-g-g-g-ghooooost!" //jinkies!
- icon = 'icons/mob/ghost.dmi'
- icon_state = "ghost"
- stat = DEAD
- canmove = 0
- blinded = 0
- anchored = TRUE // don't get pushed around
-
- var/can_reenter_corpse
- var/datum/hud/living/carbon/hud = null // hud
- var/bootime = 0
- var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
- //If you died in the game and are a ghsot - this will remain as null.
- //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
- var/has_enabled_antagHUD = 0
- var/medHUD = 0
- var/secHUD = 0
- var/antagHUD = 0
- universal_speak = 1
- var/atom/movable/following = null
- var/admin_ghosted = 0
- var/anonsay = 0
- var/ghostvision = 1 //is the ghost able to see things humans can't?
- var/lighting_alpha = 255
- incorporeal_move = 1
-
- var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil.
- var/ghost_sprite = null
- var/global/list/possible_ghost_sprites = list(
- "Clear" = "blank",
- "Green Blob" = "otherthing",
- "Bland" = "ghost",
- "Robed-B" = "ghost1",
- "Robed-BAlt" = "ghost2",
- "King" = "ghostking",
- "Shade" = "shade",
- "Hecate" = "ghost-narsie",
- "Glowing Statue" = "armour",
- "Artificer" = "artificer",
- "Behemoth" = "behemoth",
- "Harvester" = "harvester",
- "Wraith" = "wraith",
- "Viscerator" = "viscerator",
- "Corgi" = "corgi",
- "Tamaskan" = "tamaskan",
- "Black Cat" = "blackcat",
- "Lizard" = "lizard",
- "Goat" = "goat",
- "Space Bear" = "bear",
- "Bats" = "bat",
- "Chicken" = "chicken_white",
- "Parrot"= "parrot_fly",
- "Goose" = "goose",
- "Penguin" = "penguin",
- "Brown Crab" = "crab",
- "Gray Crab" = "evilcrab",
- "Trout" = "trout-swim",
- "Salmon" = "salmon-swim",
- "Pike" = "pike-swim",
- "Koi" = "koi-swim",
- "Carp" = "carp",
- "Red Robes" = "robe_red",
- "Faithless" = "faithless",
- "Shadowform" = "forgotten",
- "Dark Ethereal" = "bloodguardian",
- "Holy Ethereal" = "lightguardian",
- "Red Elemental" = "magicRed",
- "Blue Elemental" = "magicBlue",
- "Pink Elemental" = "magicPink",
- "Orange Elemental" = "magicOrange",
- "Green Elemental" = "magicGreen",
- "Daemon" = "daemon",
- "Guard Spider" = "guard",
- "Hunter Spider" = "hunter",
- "Nurse Spider" = "nurse",
- "Rogue Drone" = "drone",
- "ED-209" = "ed209",
- "Beepsky" = "secbot"
- )
- var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners.
- var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns
-
-/mob/observer/dead/New(mob/body)
-
- appearance = body
- invisibility = INVISIBILITY_OBSERVER
- layer = BELOW_MOB_LAYER
- plane = PLANE_GHOSTS
- alpha = 127
-
- sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
- see_invisible = SEE_INVISIBLE_OBSERVER
- see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but...
-
- var/turf/T
- if(ismob(body))
- T = get_turf(body) //Where is the body located?
- attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
- gender = body.gender
- if(body.mind && body.mind.name)
- name = body.mind.name
- else
- if(body.real_name)
- name = body.real_name
- else
- if(gender == MALE)
- name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
- else
- name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
-
- mind = body.mind //we don't transfer the mind but we keep a reference to it.
-
- // Fix for naked ghosts.
- // Unclear why this isn't being grabbed by appearance.
- if(ishuman(body))
- var/mob/living/carbon/human/H = body
- add_overlay(H.overlays_standing)
- default_pixel_x = body.default_pixel_x
- default_pixel_y = body.default_pixel_y
- if(!T && length(latejoin))
- T = pick(latejoin) //Safety in case we cannot find the body's position
- if(T)
- forceMove(T)
- else
- moveToNullspace()
- to_chat(src, "Could not locate an observer spawn point. Use the Teleport verb to jump to the station map.")
-
- if(!name) //To prevent nameless ghosts
- name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
- real_name = name
- animate(src, pixel_y = 2, time = 10, loop = -1)
- animate(pixel_y = default_pixel_y, time = 10, loop = -1)
- observer_mob_list += src
- ..()
-
-/mob/observer/dead/Topic(href, href_list)
- if (href_list["track"])
- var/mob/target = locate(href_list["track"]) in mob_list
- if(target)
- ManualFollow(target)
- if(href_list["reenter"])
- reenter_corpse()
- return
-
-/mob/observer/dead/attackby(obj/item/W, mob/user)
- if(istype(W,/obj/item/weapon/book/tome))
- var/mob/observer/dead/M = src
- M.manifest(user)
-
-/mob/observer/dead/CanPass(atom/movable/mover, turf/target)
- return TRUE
-
-/mob/observer/dead/set_stat(var/new_stat)
- if(new_stat != DEAD)
- CRASH("It is best if observers stay dead, thank you.")
-
-/mob/observer/dead/examine_icon()
- var/icon/I = get_cached_examine_icon(src)
- if(!I)
- I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE)
- set_cached_examine_icon(src, I, 200 SECONDS)
- return I
-
-/mob/observer/dead/examine(mob/user)
- . = ..()
-
- if(is_admin(user))
- . += "\t>[ADMIN_FULLMONTY(src)]"
-
-/*
-Transfer_mind is there to check if mob is being deleted/not going to have a body.
-Works together with spawning an observer, noted above.
-*/
-
-/mob/observer/dead/Life()
- ..()
- if(!loc) return
- if(!client) return 0
-
- handle_regular_hud_updates()
- handle_vision()
-
-/mob/proc/ghostize(var/can_reenter_corpse = 1)
- if(key)
- if(ishuman(src))
- var/mob/living/carbon/human/H = src
- if(H.vr_holder && !can_reenter_corpse)
- H.exit_vr()
- return 0
- var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc.
- ghost.can_reenter_corpse = can_reenter_corpse
- ghost.timeofdeath = src.timeofdeath //BS12 EDIT
- ghost.key = key
- if(istype(loc, /obj/structure/morgue))
- var/obj/structure/morgue/M = loc
- M.update()
- else if(istype(loc, /obj/structure/closet/body_bag))
- var/obj/structure/closet/body_bag/B = loc
- B.update()
- if(ghost.client)
- ghost.client.time_died_as_mouse = ghost.timeofdeath
- if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
- ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
- return ghost
-
-/*
-This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
-*/
-/mob/living/verb/ghost()
- set category = "OOC"
- set name = "Ghost"
- set desc = "Relinquish your life and enter the land of the dead."
-
- if(stat == DEAD && !forbid_seeing_deadchat)
- announce_ghost_joinleave(ghostize(1))
- else
- var/response
- if(src.client && src.client.holder)
- response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Admin Ghost", "Ghost", "Stay in body"))
- if(response == "Admin Ghost")
- if(!src.client)
- return
- src.client.admin_ghost()
- else
- response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Stay in body", "Ghost"))
- if(response != "Ghost")
- return
- resting = 1
- var/turf/location = get_turf(src)
- var/special_role = check_special_role()
- if(!istype(loc,/obj/machinery/cryopod))
- log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (JMP)",usr)
- else if(special_role)
- log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr)
- var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
- if(ghost)
- ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly.
- ghost.set_respawn_timer()
- announce_ghost_joinleave(ghost)
-
-/mob/observer/dead/can_use_hands() return 0
-/mob/observer/dead/is_active() return 0
-
-/mob/observer/dead/Stat()
- ..()
- if(statpanel("Status"))
- if(emergency_shuttle)
- var/eta_status = emergency_shuttle.get_status_panel_eta()
- if(eta_status)
- stat(null, eta_status)
-
-/mob/observer/dead/verb/reenter_corpse()
- set category = "Ghost"
- set name = "Re-enter Corpse"
- if(!client) return
- if(!(mind && mind.current && can_reenter_corpse))
- to_chat(src, "You have no body.")
- return
- if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients
- to_chat(usr, "Another consciousness is in your body... it is resisting you.")
- return
- //VOREStation Add
- if(prevent_respawns.Find(mind.name))
- to_chat(usr, "You already quit this round as this character, sorry!")
- return
- //VOREStation Add End
- if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune).
- var/found_rune
- for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune
- if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune.
- found_rune = 1
- break
- if(!found_rune)
- to_chat(usr, "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.")
- return
- mind.current.ajourn=0
- mind.current.key = key
- mind.current.teleop = null
- if(istype(mind.current.loc, /obj/structure/morgue))
- var/obj/structure/morgue/M = mind.current.loc
- M.update(1)
- else if(istype(mind.current.loc, /obj/structure/closet/body_bag))
- var/obj/structure/closet/body_bag/B = mind.current.loc
- B.update(1)
- if(!admin_ghosted)
- announce_ghost_joinleave(mind, 0, "They now occupy their body again.")
- if(admin_ghosted)
- log_and_message_admins("Admin [key_name(src)] re-entered their body.") // CHOMPEdit - Add logging.
- return 1
-
-/mob/observer/dead/verb/toggle_medHUD()
- set category = "Ghost"
- set name = "Toggle MedicHUD"
- set desc = "Toggles Medical HUD allowing you to see how everyone is doing"
-
- medHUD = !medHUD
- plane_holder.set_vis(VIS_CH_HEALTH, medHUD)
- plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD)
- to_chat(src, "Medical HUD [medHUD ? "Enabled" : "Disabled"]")
-
-/mob/observer/dead/verb/toggle_secHUD()
- set category = "Ghost"
- set name = "Toggle Security HUD"
- set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc"
-
- secHUD = !secHUD
- plane_holder.set_vis(VIS_CH_ID, secHUD)
- plane_holder.set_vis(VIS_CH_WANTED, secHUD)
- plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD)
- plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD)
- plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD)
- to_chat(src, "Security HUD [secHUD ? "Enabled" : "Disabled"]")
-
-/mob/observer/dead/verb/toggle_antagHUD()
- set category = "Ghost"
- set name = "Toggle AntagHUD"
- set desc = "Toggles AntagHUD allowing you to see who is the antagonist"
-
- if(!config.antag_hud_allowed && !client.holder)
- to_chat(src, "Admins have disabled this for this round.")
- return
- if(jobban_isbanned(src, "AntagHUD"))
- to_chat(src, "You have been banned from using this feature")
- return
- if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder)
- var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No"))
- if(response == "No") return
- can_reenter_corpse = FALSE
- set_respawn_timer(-1) // Foreeeever
- if(!has_enabled_antagHUD && !client.holder)
- has_enabled_antagHUD = TRUE
-
- antagHUD = !antagHUD
- plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD)
- to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]")
-
-/mob/observer/dead/proc/jumpable_areas()
- var/list/areas = return_sorted_areas()
- if(client?.holder)
- return areas
-
- for(var/key in areas)
- var/area/A = areas[key]
- if(A.z in using_map?.secret_levels)
- areas -= key
- if(A.z in using_map?.hidden_levels)
- areas -= key
-
- return areas
-
-/mob/observer/dead/proc/jumpable_mobs()
- var/list/mobs = getmobs()
- if(client?.holder)
- return mobs
-
- for(var/key in mobs)
- var/mobz = get_z(mobs[key])
- if(mobz in using_map?.secret_levels)
- mobs -= key
- if(mobz in using_map?.hidden_levels)
- mobs -= key
-
- return mobs
-
-/mob/observer/dead/verb/dead_tele(areaname as anything in jumpable_areas())
- set name = "Teleport"
- set category = "Ghost"
- set desc = "Teleport to a location."
-
- if(!istype(usr, /mob/observer/dead))
- to_chat(usr, "Not when you're not dead!")
- return
-
- var/area/A
-
- if(!areaname)
- var/list/areas = jumpable_areas()
- var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas)
- if(!input)
- return
- A = areas[input]
- if(!A)
- return
-
- if(!istype(usr, /mob/observer/dead))
- to_chat(usr, "Not when you're not dead!")
- return
-
- usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname])))
- usr.on_mob_jump()
-
-/mob/observer/dead/verb/follow(mobname as anything in jumpable_mobs())
- set name = "Follow"
- set category = "Ghost"
- set desc = "Follow and haunt a mob."
-
- if(!istype(usr, /mob/observer/dead))
- to_chat(usr, "Not when you're not dead!")
- return
-
- var/mob/M
-
- if(!mobname)
- var/list/possible_mobs = jumpable_mobs()
- var/input = tgui_input_list(usr, "Select a mob:", "Ghost Follow", possible_mobs)
- if(!input)
- return
- M = possible_mobs[input]
- if(!M)
- return
-
- if(!istype(usr, /mob/observer/dead))
- to_chat(usr, "Not when you're not dead!")
- return
-
- ManualFollow(M || jumpable_mobs()[mobname])
-
-/mob/observer/dead/forceMove(atom/destination)
- if(client?.holder)
- return ..()
-
- if(get_z(destination) in using_map?.secret_levels)
- to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
- if(following)
- stop_following()
- return
-
- return ..()
-
-/mob/observer/dead/Move(atom/newloc, direct = 0, movetime)
- if(client?.holder)
- return ..()
-
- if(get_z(newloc) in using_map?.secret_levels)
- to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
- if(following)
- stop_following()
- return
-
- return ..()
-
-// This is the ghost's follow verb with an argument
-/mob/observer/dead/proc/ManualFollow(var/atom/movable/target)
- if(!target)
- return
-
- var/turf/targetloc = get_turf(target)
- if(check_holy(targetloc))
- to_chat(usr, "You cannot follow a mob standing on holy grounds!")
- return
- if(get_z(target) in using_map?.secret_levels)
- to_chat(src, "Sorry, that target is in an area that ghosts aren't allowed to go.")
- return
- if(target != src)
- if(following && following == target)
- return
- following = target
- to_chat(src, "Now following [target]")
- if(ismob(target))
- var/target_turf = get_turf(target)
- if(!target_turf)
- to_chat(usr, "This mob does not seem to exist in the tangible world.")
- return
- forceMove(target_turf)
- var/mob/M = target
- M.following_mobs += src
- else
- spawn(0)
- while(target && following == target && client)
- var/turf/T = get_turf(target)
- if(!T)
- break
- // To stop the ghost flickering.
- if(loc != T)
- forceMove(T)
- sleep(15)
-
- var/icon/I = icon(target.icon,target.icon_state,target.dir)
-
- var/orbitsize = (I.Width()+I.Height())*0.5
- orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
-
- var/rot_seg
-
- /* We don't have this pref yet
- switch(ghost_orbit)
- if(GHOST_ORBIT_TRIANGLE)
- rot_seg = 3
- if(GHOST_ORBIT_SQUARE)
- rot_seg = 4
- if(GHOST_ORBIT_PENTAGON)
- rot_seg = 5
- if(GHOST_ORBIT_HEXAGON)
- rot_seg = 6
- else //Circular
- rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle
- */
-
- orbit(target, orbitsize, FALSE, 20, rot_seg)
-
-/mob/observer/dead/orbit()
- set_dir(2) //reset dir so the right directional sprites show up
- return ..()
-
-/mob/observer/dead/stop_orbit()
- . = ..()
- //restart our floating animation after orbit is done.
- pixel_y = default_pixel_y
- pixel_x = default_pixel_x
- transform = null
- animate(src, pixel_y = 2, time = 10, loop = -1)
- animate(pixel_y = default_pixel_y, time = 10, loop = -1)
-
-/mob/observer/dead/proc/stop_following()
- following = null
- stop_orbit()
-
-/mob/proc/update_following()
- . = get_turf(src)
- for(var/mob/observer/dead/M in following_mobs)
- if(!.)
- M.stop_following()
-
- if(M.following != src)
- following_mobs -= M
- else
- if(M.loc != .)
- M.forceMove(.)
-
-/mob
- var/list/following_mobs = list()
-
-/mob/Destroy()
- for(var/mob/observer/dead/M in following_mobs)
- M.stop_following()
- following_mobs = null
- return ..()
-
-/mob/observer/dead/Destroy()
- if(ismob(following))
- var/mob/M = following
- M.following_mobs -= src
- stop_following()
- observer_mob_list -= src
- return ..()
-
-/mob/Moved(atom/old_loc, direction, forced = FALSE)
- . = ..()
- update_following()
-
-/mob/Life()
- // to catch teleports etc which directly set loc
- update_following()
- return ..()
-
-/mob/proc/check_holy(var/turf/T)
- return 0
-
-/mob/observer/dead/check_holy(var/turf/T)
- if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src))
- return 0
-
- return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists))
-
-/mob/observer/dead/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
- set category = "Ghost"
- set name = "Jump to Mob"
- set desc = "Teleport to a mob"
- set popup_menu = FALSE
-
- if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer!
- return
-
- var/list/possible_mobs = jumpable_mobs()
- var/input = tgui_input_list(usr, "Select a mob:", "Ghost Jump", possible_mobs)
- if(!input)
- return
-
- var/target = possible_mobs[input]
- if (!target)//Make sure we actually have a target
- return
- else
- var/mob/M = target //Destination mob
- var/turf/T = get_turf(M) //Turf of the destination mob
-
- if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination.
- forceMove(T)
- stop_following()
- else
- to_chat(src, "This mob is not located in the game world.")
-
-/mob/observer/dead/memory()
- set hidden = 1
- to_chat(src, "You are dead! You have no mind to store memory!")
-
-/mob/observer/dead/add_memory()
- set hidden = 1
- to_chat(src, "You are dead! You have no mind to store memory!")
-
-/mob/observer/dead/Post_Incorpmove()
- stop_following()
-
-/mob/observer/dead/verb/analyze_air()
- set name = "Analyze Air"
- set category = "Ghost"
-
- if(!istype(usr, /mob/observer/dead)) return
-
- // Shamelessly copied from the Gas Analyzers
- if (!( istype(usr.loc, /turf) ))
- return
-
- var/datum/gas_mixture/environment = usr.loc.return_air()
-
- var/pressure = environment.return_pressure()
- var/total_moles = environment.total_moles
- var/list/gas_analyzing = list()
- gas_analyzing += "Results:"
- if(abs(pressure - ONE_ATMOSPHERE) < 10)
- gas_analyzing += "Pressure: [round(pressure,0.1)] kPa"
- else
- gas_analyzing += "Pressure: [round(pressure,0.1)] kPa"
- if(total_moles)
- for(var/g in environment.gas)
- gas_analyzing += "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)"
- gas_analyzing += "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)"
- gas_analyzing += "Heat Capacity: [round(environment.heat_capacity(),0.1)]"
- to_chat(src, "[jointext(gas_analyzing, "
")]")
-
-/mob/observer/dead/verb/check_radiation()
- set name = "Check Radiation"
- set category = "Ghost"
-
- var/turf/t = get_turf(src)
- if(t)
- var/rads = SSradiation.get_rads_at_turf(t)
- to_chat(src, "Radiation level: [rads ? rads : "0"] Bq.")
-
-
-/mob/observer/dead/verb/become_mouse()
- set name = "Become mouse"
- set category = "Ghost"
-
- if(config.disable_player_mice)
- to_chat(src, "Spawning as a mouse is currently disabled.")
- return
-
- //VOREStation Add Start
- if(jobban_isbanned(src, "GhostRoles"))
- to_chat(src, "You cannot become a mouse because you are banned from playing ghost roles.")
- return
- //VOREStation Add End
-
- if(!MayRespawn(1))
- return
-
- var/turf/T = get_turf(src)
- if(!T || (T.z in using_map.admin_levels))
- to_chat(src, "You may not spawn as a mouse on this Z-level.")
- return
-
- var/timedifference = world.time - client.time_died_as_mouse
- if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
- var/timedifference_text
- timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss")
- to_chat(src, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.")
- return
-
- var/response = tgui_alert(src, "Are you -sure- you want to become a mouse? You will have no rights or OOC protections.","Are you sure you want to squeek? You will have no rights or OOC protections.",list("Squeek!","Nope!")) //CHOMP Edit
- if(response != "Squeek!") return //Hit the wrong key...again.
-
-
- //find a viable mouse candidate
- var/mob/living/simple_mob/animal/passive/mouse/host
- var/obj/machinery/atmospherics/unary/vent_pump/vent_found
- var/list/found_vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines)
- if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20)
- found_vents.Add(v)
- if(found_vents.len)
- vent_found = pick(found_vents)
- host = new /mob/living/simple_mob/animal/passive/mouse(vent_found)
- else
- to_chat(src, "Unable to find any unwelded vents to spawn mice at.")
-
- if(host)
- if(config.uneducated_mice)
- host.universal_understand = 0
- announce_ghost_joinleave(src, 0, "They are now a mouse.")
- host.ckey = src.ckey
- host.add_ventcrawl(vent_found)
- to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.")
-
-/mob/observer/dead/verb/view_manfiest()
- set name = "Show Crew Manifest"
- set category = "Ghost"
-
- var/dat
- dat += "Crew Manifest
"
- dat += data_core.get_manifest()
-
- src << browse(dat, "window=manifest;size=370x420;can_close=1")
-
-//This is called when a ghost is drag clicked to something.
-/mob/observer/dead/MouseDrop(atom/over)
- if(!usr || !over) return
- if (isobserver(usr) && usr.client && usr.client.holder && isliving(over))
- if (usr.client.holder.cmd_ghost_drag(src,over))
- return
-
- return ..()
-
-//Used for drawing on walls with blood puddles as a spooky ghost.
-/mob/observer/dead/verb/bloody_doodle()
-
- set category = "Ghost"
- set name = "Write in blood"
- set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC."
-
- if(!(config.cult_ghostwriter))
- to_chat(src, "That verb is not currently permitted.")
- return
-
- if (!src.stat)
- return
-
- if (usr != src)
- return 0 //something is terribly wrong
-
- var/ghosts_can_write
- if(ticker.mode.name == "cult")
- if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists)
- ghosts_can_write = 1
-
- if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such.
- to_chat(src, "The veil is not thin enough for you to do that.")
- return
-
- var/list/choices = list()
- for(var/obj/effect/decal/cleanable/blood/B in view(1,src))
- if(B.amount > 0)
- choices += B
-
- if(!choices.len)
- to_chat(src, "There is no blood to use nearby.")
- return
-
- var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices)
-
- var/direction = tgui_input_list(src,"Which way?","Tile selection", list("Here","North","South","East","West"))
- var/turf/simulated/T = src.loc
- if (direction != "Here")
- T = get_step(T,text2dir(direction))
-
- if (!istype(T))
- to_chat(src, "You cannot doodle there.")
- return
-
- if(!choice || choice.amount == 0 || !(src.Adjacent(choice)))
- return
-
- var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808"
-
- var/num_doodles = 0
- for (var/obj/effect/decal/cleanable/blood/writing/W in T)
- num_doodles++
- if (num_doodles > 4)
- to_chat(src, "There is no space to write on!")
- return
-
- var/max_length = 50
-
- var/message = sanitize(tgui_input_text(usr, "Write a message. It cannot be longer than [max_length] characters.","Blood writing", "", max_length))
-
- if (message)
-
- if (length(message) > max_length)
- message += "-"
- to_chat(src, "You ran out of blood to write with!")
-
- var/obj/effect/decal/cleanable/blood/writing/W = new(T)
- W.basecolor = doodle_color
- W.update_icon()
- W.message = message
- W.add_hiddenprint(src)
- W.visible_message("Invisible fingers crudely paint something in blood on [T]...")
-
-/mob/observer/dead/pointed(atom/A as mob|obj|turf in view())
- if(!..())
- return 0
- usr.visible_message("[src] points to [A].")
- return 1
-
-/mob/observer/dead/proc/manifest(mob/user)
- is_manifest = TRUE
- verbs |= /mob/observer/dead/proc/toggle_visibility
- verbs |= /mob/observer/dead/proc/ghost_whisper
- to_chat(src, "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.")
- if(plane != PLANE_WORLD)
- user.visible_message( \
- "\The [user] drags ghost, [src], to our plane of reality!", \
- "You drag [src] to our plane of reality!" \
- )
- toggle_visibility(TRUE)
- else
- var/datum/gender/T = gender_datums[user.get_visible_gender()]
- user.visible_message ( \
- "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \
- "You get the feeling that the ghost can't become any more visible." \
- )
-
-/mob/observer/dead/proc/toggle_icon(var/icon)
- if(!client)
- return
-
- var/iconRemoved = 0
- for(var/image/I in client.images)
- if(I.icon_state == icon)
- iconRemoved = 1
- qdel(I)
-
- if(!iconRemoved)
- var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon)
- client.images += J
-
-/mob/observer/dead/proc/toggle_visibility(var/forced = 0)
- set category = "Ghost"
- set name = "Toggle Visibility"
- set desc = "Allows you to turn (in)visible (almost) at will."
-
- var/toggled_invisible
- if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600)
- to_chat(src, "You must gather strength before you can turn visible again...")
- return
-
- if(plane == PLANE_WORLD)
- toggled_invisible = world.time
- visible_message("It fades from sight...", "You are now invisible.")
- else
- to_chat(src, "You are now visible!")
-
- plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS
- invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER
-
- // Give the ghost a cult icon which should be visible only to itself
- toggle_icon("cult")
-
-/mob/observer/dead/verb/toggle_anonsay()
- set category = "Ghost"
- set name = "Toggle Anonymous Chat"
- set desc = "Toggles showing your key in dead chat."
-
- src.anonsay = !src.anonsay
- if(anonsay)
- to_chat(src, "Your key won't be shown when you speak in dead chat.")
- else
- to_chat(src, "Your key will be publicly visible again.")
-
-/mob/observer/dead/canface()
- return 1
-
-/mob/observer/dead/proc/can_admin_interact()
- return check_rights(R_ADMIN|R_EVENT, 0, src)
-
-/mob/observer/dead/verb/toggle_ghostsee()
- set name = "Toggle Ghost Vision"
- set desc = "Toggles your ability to see things only ghosts can see, like other ghosts"
- set category = "Ghost"
- ghostvision = !ghostvision
- updateghostsight()
- to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.")
-
-/mob/observer/dead/verb/toggle_darkness()
- set name = "Toggle Darkness"
- set desc = "Toggles your ability to see lighting overlays, and the darkness they create."
- set category = "Ghost"
-
- var/static/list/darkness_names = list("normal darkness levels", "30% darkness removed", "70% darkness removed", "no darkness")
- var/static/list/darkness_levels = list(255, 178, 76, 0)
-
- var/index = darkness_levels.Find(lighting_alpha)
- if(!index || index >= darkness_levels.len)
- index = 1
- else
- index++
-
- lighting_alpha = darkness_levels[index]
- updateghostsight()
- to_chat(src, "Your vision now has [darkness_names[index]].")
-
-/mob/observer/dead/proc/updateghostsight()
- plane_holder.set_desired_alpha(VIS_LIGHTING, lighting_alpha)
- plane_holder.set_vis(VIS_LIGHTING, lighting_alpha)
- plane_holder.set_vis(VIS_GHOSTS, ghostvision)
-
-/mob/observer/dead/MayRespawn(var/feedback = 0)
- if(!client)
- return 0
- if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse)
- if(feedback)
- to_chat(src, "Your non-dead body prevent you from respawning.")
- return 0
- if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
- if(feedback)
- to_chat(src, "antagHUD restrictions prevent you from respawning.")
- return 0
- return 1
-
-/atom/proc/extra_ghost_link()
- return
-
-/mob/extra_ghost_link(var/atom/ghost)
- if(client && eyeobj)
- return "|eye"
-
-/mob/observer/dead/extra_ghost_link(var/atom/ghost)
- if(mind && mind.current)
- return "|body"
-
-/proc/ghost_follow_link(var/atom/target, var/atom/ghost)
- if((!target) || (!ghost)) return
- . = "follow"
- . += target.extra_ghost_link(ghost)
-
-//Culted Ghosts
-
-/mob/observer/dead/proc/ghost_whisper()
- set name = "Spectral Whisper"
- set category = "IC"
-
- if(is_manifest) //Only able to whisper if it's hit with a tome.
- var/list/options = list()
- for(var/mob/living/Ms in view(src))
- options += Ms
- var/mob/living/M = tgui_input_list(src, "Select who to whisper to:", "Whisper to?", options)
- if(!M)
- return 0
- var/msg = sanitize(tgui_input_text(src, "Message:", "Spectral Whisper"))
- if(msg)
- log_say("(SPECWHISP to [key_name(M)]): [msg]", src)
- to_chat(M, " You hear a strange, unidentifiable voice in your head... [msg]")
- to_chat(src, " You said: '[msg]' to [M].")
- else
- return
- return 1
- else
- to_chat(src, "You have not been pulled past the veil!")
-
-/mob/observer/dead/verb/choose_ghost_sprite()
- set category = "Ghost"
- set name = "Choose Sprite"
-
- var/choice
- var/previous_state
- var/finalized = "No"
-
- while(finalized == "No" && src.client)
- choice = tgui_input_list(usr, "What would you like to use for your ghost sprite?", "Ghost Sprite", possible_ghost_sprites)
- if(!choice)
- return
-
- if(choice)
- icon = 'icons/mob/ghost.dmi'
- cut_overlays()
-
- if(icon_state && icon)
- previous_state = icon_state
-
- icon_state = possible_ghost_sprites[choice]
- finalized = tgui_alert(src, "Look at your sprite. Is this what you wish to use?","Ghost Sprite",list("No","Yes"))
-
- ghost_sprite = possible_ghost_sprites[choice]
-
- if(finalized == "No")
- icon_state = previous_state
-
-/mob/observer/dead/is_blind()
- return FALSE
-
-/mob/observer/dead/is_deaf()
- return FALSE
-
-/mob/observer/dead/verb/paialert()
- set category = "Ghost"
- set name = "Blank pAI alert"
- set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
-
- var/time_till_respawn = time_till_respawn()
- if(time_till_respawn == -1) // Special case, never allowed to respawn
- to_chat(usr, "Respawning is not allowed!")
- else if(time_till_respawn) // Nonzero time to respawn
- to_chat(usr, "You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes.")
- return
-
- if(jobban_isbanned(usr, "pAI"))
- to_chat(usr,"You cannot alert pAI cards when you are banned from playing as a pAI.")
- return
-
- if(usr.client.prefs?.be_special & BE_PAI)
- var/choice = tgui_alert(usr, "Would you like to submit yourself to the recruitment list too?", "Confirmation", list("No", "Yes"))
- if(choice == "Yes")
- paiController.recruitWindow(usr)
- var/count = 0
- for(var/obj/item/device/paicard/p in GLOB.all_pai_cards)
- var/obj/item/device/paicard/PP = p
- if(PP.pai == null)
- count++
- PP.add_overlay("pai-ghostalert")
- PP.alertUpdate()
- spawn(54)
- PP.cut_overlays()
- to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.")
- else
- to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.")
-
-/mob/observer/dead/speech_bubble_appearance()
- return "ghost"
-
-// Lets a ghost know someone's trying to bring them back, and for them to get into their body.
-// Mostly the same as TG's sans the hud element, since we don't have TG huds.
-/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source)
- if((last_revive_notification + 2 MINUTES) > world.time)
- return
- last_revive_notification = world.time
-
- if(flashwindow)
- window_flash(client)
- if(message)
- to_chat(src, "[message]")
- if(source)
- throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source)
- to_chat(src, "(Click to re-enter)")
- if(sound)
- SEND_SOUND(src, sound(sound))
-
-/mob/observer/dead/verb/respawn()
- set name = "Respawn"
- set category = "Ghost"
- src.abandon_mob()
+/mob/observer
+ name = "observer"
+ desc = "This shouldn't appear"
+ density = FALSE
+ vis_flags = NONE
+
+/mob/observer/dead
+ name = "ghost"
+ desc = "It's a g-g-g-g-ghooooost!" //jinkies!
+ icon = 'icons/mob/ghost.dmi'
+ icon_state = "ghost"
+ stat = DEAD
+ canmove = 0
+ blinded = 0
+ anchored = TRUE // don't get pushed around
+
+ var/can_reenter_corpse
+ var/datum/hud/living/carbon/hud = null // hud
+ var/bootime = 0
+ var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
+ //If you died in the game and are a ghsot - this will remain as null.
+ //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
+ var/has_enabled_antagHUD = 0
+ var/medHUD = 0
+ var/secHUD = 0
+ var/antagHUD = 0
+ universal_speak = 1
+ var/atom/movable/following = null
+ var/admin_ghosted = 0
+ var/anonsay = 0
+ var/ghostvision = 1 //is the ghost able to see things humans can't?
+ var/lighting_alpha = 255
+ incorporeal_move = 1
+
+ var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil.
+ var/ghost_sprite = null
+ var/global/list/possible_ghost_sprites = list(
+ "Clear" = "blank",
+ "Green Blob" = "otherthing",
+ "Bland" = "ghost",
+ "Robed-B" = "ghost1",
+ "Robed-BAlt" = "ghost2",
+ "King" = "ghostking",
+ "Shade" = "shade",
+ "Hecate" = "ghost-narsie",
+ "Glowing Statue" = "armour",
+ "Artificer" = "artificer",
+ "Behemoth" = "behemoth",
+ "Harvester" = "harvester",
+ "Wraith" = "wraith",
+ "Viscerator" = "viscerator",
+ "Corgi" = "corgi",
+ "Tamaskan" = "tamaskan",
+ "Black Cat" = "blackcat",
+ "Lizard" = "lizard",
+ "Goat" = "goat",
+ "Space Bear" = "bear",
+ "Bats" = "bat",
+ "Chicken" = "chicken_white",
+ "Parrot"= "parrot_fly",
+ "Goose" = "goose",
+ "Penguin" = "penguin",
+ "Brown Crab" = "crab",
+ "Gray Crab" = "evilcrab",
+ "Trout" = "trout-swim",
+ "Salmon" = "salmon-swim",
+ "Pike" = "pike-swim",
+ "Koi" = "koi-swim",
+ "Carp" = "carp",
+ "Red Robes" = "robe_red",
+ "Faithless" = "faithless",
+ "Shadowform" = "forgotten",
+ "Dark Ethereal" = "bloodguardian",
+ "Holy Ethereal" = "lightguardian",
+ "Red Elemental" = "magicRed",
+ "Blue Elemental" = "magicBlue",
+ "Pink Elemental" = "magicPink",
+ "Orange Elemental" = "magicOrange",
+ "Green Elemental" = "magicGreen",
+ "Daemon" = "daemon",
+ "Guard Spider" = "guard",
+ "Hunter Spider" = "hunter",
+ "Nurse Spider" = "nurse",
+ "Rogue Drone" = "drone",
+ "ED-209" = "ed209",
+ "Beepsky" = "secbot"
+ )
+ var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners.
+ var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns
+
+/mob/observer/dead/New(mob/body)
+
+ appearance = body
+ invisibility = INVISIBILITY_OBSERVER
+ layer = BELOW_MOB_LAYER
+ plane = PLANE_GHOSTS
+ alpha = 127
+
+ sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
+ see_invisible = SEE_INVISIBLE_OBSERVER
+ see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but...
+
+ var/turf/T
+ if(ismob(body))
+ T = get_turf(body) //Where is the body located?
+ attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
+ gender = body.gender
+ if(body.mind && body.mind.name)
+ name = body.mind.name
+ else
+ if(body.real_name)
+ name = body.real_name
+ else
+ if(gender == MALE)
+ name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
+ else
+ name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
+
+ mind = body.mind //we don't transfer the mind but we keep a reference to it.
+
+ // Fix for naked ghosts.
+ // Unclear why this isn't being grabbed by appearance.
+ if(ishuman(body))
+ var/mob/living/carbon/human/H = body
+ add_overlay(H.overlays_standing)
+ default_pixel_x = body.default_pixel_x
+ default_pixel_y = body.default_pixel_y
+ if(!T && length(latejoin))
+ T = pick(latejoin) //Safety in case we cannot find the body's position
+ if(T)
+ forceMove(T)
+ else
+ moveToNullspace()
+ to_chat(src, "Could not locate an observer spawn point. Use the Teleport verb to jump to the station map.")
+
+ if(!name) //To prevent nameless ghosts
+ name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
+ real_name = name
+ animate(src, pixel_y = 2, time = 10, loop = -1)
+ animate(pixel_y = default_pixel_y, time = 10, loop = -1)
+ observer_mob_list += src
+ ..()
+
+/mob/observer/dead/Topic(href, href_list)
+ if (href_list["track"])
+ var/mob/target = locate(href_list["track"]) in mob_list
+ if(target)
+ ManualFollow(target)
+ if(href_list["reenter"])
+ reenter_corpse()
+ return
+
+/mob/observer/dead/attackby(obj/item/W, mob/user)
+ if(istype(W,/obj/item/weapon/book/tome))
+ var/mob/observer/dead/M = src
+ M.manifest(user)
+
+/mob/observer/dead/CanPass(atom/movable/mover, turf/target)
+ return TRUE
+
+/mob/observer/dead/set_stat(var/new_stat)
+ if(new_stat != DEAD)
+ CRASH("It is best if observers stay dead, thank you.")
+
+/mob/observer/dead/examine_icon()
+ var/icon/I = get_cached_examine_icon(src)
+ if(!I)
+ I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE)
+ set_cached_examine_icon(src, I, 200 SECONDS)
+ return I
+
+/mob/observer/dead/examine(mob/user)
+ . = ..()
+
+ if(is_admin(user))
+ . += "\t>[ADMIN_FULLMONTY(src)]"
+
+/*
+Transfer_mind is there to check if mob is being deleted/not going to have a body.
+Works together with spawning an observer, noted above.
+*/
+
+/mob/observer/dead/Life()
+ ..()
+ if(!loc) return
+ if(!client) return 0
+
+ handle_regular_hud_updates()
+ handle_vision()
+
+/mob/proc/ghostize(var/can_reenter_corpse = 1)
+ if(key)
+ if(ishuman(src))
+ var/mob/living/carbon/human/H = src
+ if(H.vr_holder && !can_reenter_corpse)
+ H.exit_vr()
+ return 0
+ var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc.
+ ghost.can_reenter_corpse = can_reenter_corpse
+ ghost.timeofdeath = src.timeofdeath //BS12 EDIT
+ ghost.key = key
+ if(istype(loc, /obj/structure/morgue))
+ var/obj/structure/morgue/M = loc
+ M.update()
+ else if(istype(loc, /obj/structure/closet/body_bag))
+ var/obj/structure/closet/body_bag/B = loc
+ B.update()
+ if(ghost.client)
+ ghost.client.time_died_as_mouse = ghost.timeofdeath
+ if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
+ ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
+ return ghost
+
+/*
+This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
+*/
+/mob/living/verb/ghost()
+ set category = "OOC"
+ set name = "Ghost"
+ set desc = "Relinquish your life and enter the land of the dead."
+
+ if(stat == DEAD && !forbid_seeing_deadchat)
+ announce_ghost_joinleave(ghostize(1))
+ else
+ var/response
+ if(src.client && src.client.holder)
+ response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Admin Ghost", "Ghost", "Stay in body"))
+ if(response == "Admin Ghost")
+ if(!src.client)
+ return
+ src.client.admin_ghost()
+ else
+ response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Stay in body", "Ghost"))
+ if(response != "Ghost")
+ return
+ resting = 1
+ var/turf/location = get_turf(src)
+ var/special_role = check_special_role()
+ if(!istype(loc,/obj/machinery/cryopod))
+ log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (JMP)",usr)
+ else if(special_role)
+ log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr)
+ var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
+ if(ghost)
+ ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly.
+ ghost.set_respawn_timer()
+ announce_ghost_joinleave(ghost)
+
+/mob/observer/dead/can_use_hands() return 0
+/mob/observer/dead/is_active() return 0
+
+/mob/observer/dead/Stat()
+ ..()
+ if(statpanel("Status"))
+ if(emergency_shuttle)
+ var/eta_status = emergency_shuttle.get_status_panel_eta()
+ if(eta_status)
+ stat(null, eta_status)
+
+/mob/observer/dead/verb/reenter_corpse()
+ set category = "Ghost"
+ set name = "Re-enter Corpse"
+ if(!client) return
+ if(!(mind && mind.current && can_reenter_corpse))
+ to_chat(src, "You have no body.")
+ return
+ if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients
+ to_chat(usr, "Another consciousness is in your body... it is resisting you.")
+ return
+ //VOREStation Add
+ if(prevent_respawns.Find(mind.name))
+ to_chat(usr, "You already quit this round as this character, sorry!")
+ return
+ //VOREStation Add End
+ if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune).
+ var/found_rune
+ for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune
+ if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune.
+ found_rune = 1
+ break
+ if(!found_rune)
+ to_chat(usr, "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.")
+ return
+ mind.current.ajourn=0
+ mind.current.key = key
+ mind.current.teleop = null
+ if(istype(mind.current.loc, /obj/structure/morgue))
+ var/obj/structure/morgue/M = mind.current.loc
+ M.update(1)
+ else if(istype(mind.current.loc, /obj/structure/closet/body_bag))
+ var/obj/structure/closet/body_bag/B = mind.current.loc
+ B.update(1)
+ if(!admin_ghosted)
+ announce_ghost_joinleave(mind, 0, "They now occupy their body again.")
+ if(admin_ghosted)
+ log_and_message_admins("Admin [key_name(src)] re-entered their body.") // CHOMPEdit - Add logging.
+ return 1
+
+/mob/observer/dead/verb/toggle_medHUD()
+ set category = "Ghost"
+ set name = "Toggle MedicHUD"
+ set desc = "Toggles Medical HUD allowing you to see how everyone is doing"
+
+ medHUD = !medHUD
+ plane_holder.set_vis(VIS_CH_HEALTH, medHUD)
+ plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD)
+ to_chat(src, "Medical HUD [medHUD ? "Enabled" : "Disabled"]")
+
+/mob/observer/dead/verb/toggle_secHUD()
+ set category = "Ghost"
+ set name = "Toggle Security HUD"
+ set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc"
+
+ secHUD = !secHUD
+ plane_holder.set_vis(VIS_CH_ID, secHUD)
+ plane_holder.set_vis(VIS_CH_WANTED, secHUD)
+ plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD)
+ plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD)
+ plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD)
+ to_chat(src, "Security HUD [secHUD ? "Enabled" : "Disabled"]")
+
+/mob/observer/dead/verb/toggle_antagHUD()
+ set category = "Ghost"
+ set name = "Toggle AntagHUD"
+ set desc = "Toggles AntagHUD allowing you to see who is the antagonist"
+
+ if(!config.antag_hud_allowed && !client.holder)
+ to_chat(src, "[span_red("Admins have disabled this for this round.")]")
+ return
+ if(jobban_isbanned(src, "AntagHUD"))
+ to_chat(src, "[span_red("You have been banned from using this feature")]")
+ return
+ if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder)
+ var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No"))
+ if(response == "No") return
+ can_reenter_corpse = FALSE
+ set_respawn_timer(-1) // Foreeeever
+ if(!has_enabled_antagHUD && !client.holder)
+ has_enabled_antagHUD = TRUE
+
+ antagHUD = !antagHUD
+ plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD)
+ to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]")
+
+/mob/observer/dead/proc/jumpable_areas()
+ var/list/areas = return_sorted_areas()
+ if(client?.holder)
+ return areas
+
+ for(var/key in areas)
+ var/area/A = areas[key]
+ if(A.z in using_map?.secret_levels)
+ areas -= key
+ if(A.z in using_map?.hidden_levels)
+ areas -= key
+
+ return areas
+
+/mob/observer/dead/proc/jumpable_mobs()
+ var/list/mobs = getmobs()
+ if(client?.holder)
+ return mobs
+
+ for(var/key in mobs)
+ var/mobz = get_z(mobs[key])
+ if(mobz in using_map?.secret_levels)
+ mobs -= key
+ if(mobz in using_map?.hidden_levels)
+ mobs -= key
+
+ return mobs
+
+/mob/observer/dead/verb/dead_tele(areaname as anything in jumpable_areas())
+ set name = "Teleport"
+ set category = "Ghost"
+ set desc = "Teleport to a location."
+
+ if(!istype(usr, /mob/observer/dead))
+ to_chat(usr, "Not when you're not dead!")
+ return
+
+ var/area/A
+
+ if(!areaname)
+ var/list/areas = jumpable_areas()
+ var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas)
+ if(!input)
+ return
+ A = areas[input]
+ if(!A)
+ return
+
+ if(!istype(usr, /mob/observer/dead))
+ to_chat(usr, "Not when you're not dead!")
+ return
+
+ usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname])))
+ usr.on_mob_jump()
+
+/mob/observer/dead/verb/follow(mobname as anything in jumpable_mobs())
+ set name = "Follow"
+ set category = "Ghost"
+ set desc = "Follow and haunt a mob."
+
+ if(!istype(usr, /mob/observer/dead))
+ to_chat(usr, "Not when you're not dead!")
+ return
+
+ var/mob/M
+
+ if(!mobname)
+ var/list/possible_mobs = jumpable_mobs()
+ var/input = tgui_input_list(usr, "Select a mob:", "Ghost Follow", possible_mobs)
+ if(!input)
+ return
+ M = possible_mobs[input]
+ if(!M)
+ return
+
+ if(!istype(usr, /mob/observer/dead))
+ to_chat(usr, "Not when you're not dead!")
+ return
+
+ ManualFollow(M || jumpable_mobs()[mobname])
+
+/mob/observer/dead/forceMove(atom/destination)
+ if(client?.holder)
+ return ..()
+
+ if(get_z(destination) in using_map?.secret_levels)
+ to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
+ if(following)
+ stop_following()
+ return
+
+ return ..()
+
+/mob/observer/dead/Move(atom/newloc, direct = 0, movetime)
+ if(client?.holder)
+ return ..()
+
+ if(get_z(newloc) in using_map?.secret_levels)
+ to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
+ if(following)
+ stop_following()
+ return
+
+ return ..()
+
+// This is the ghost's follow verb with an argument
+/mob/observer/dead/proc/ManualFollow(var/atom/movable/target)
+ if(!target)
+ return
+
+ var/turf/targetloc = get_turf(target)
+ if(check_holy(targetloc))
+ to_chat(usr, "You cannot follow a mob standing on holy grounds!")
+ return
+ if(get_z(target) in using_map?.secret_levels)
+ to_chat(src, "Sorry, that target is in an area that ghosts aren't allowed to go.")
+ return
+ if(target != src)
+ if(following && following == target)
+ return
+ following = target
+ to_chat(src, "Now following [target]")
+ if(ismob(target))
+ var/target_turf = get_turf(target)
+ if(!target_turf)
+ to_chat(usr, "This mob does not seem to exist in the tangible world.")
+ return
+ forceMove(target_turf)
+ var/mob/M = target
+ M.following_mobs += src
+ else
+ spawn(0)
+ while(target && following == target && client)
+ var/turf/T = get_turf(target)
+ if(!T)
+ break
+ // To stop the ghost flickering.
+ if(loc != T)
+ forceMove(T)
+ sleep(15)
+
+ var/icon/I = icon(target.icon,target.icon_state,target.dir)
+
+ var/orbitsize = (I.Width()+I.Height())*0.5
+ orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
+
+ var/rot_seg
+
+ /* We don't have this pref yet
+ switch(ghost_orbit)
+ if(GHOST_ORBIT_TRIANGLE)
+ rot_seg = 3
+ if(GHOST_ORBIT_SQUARE)
+ rot_seg = 4
+ if(GHOST_ORBIT_PENTAGON)
+ rot_seg = 5
+ if(GHOST_ORBIT_HEXAGON)
+ rot_seg = 6
+ else //Circular
+ rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle
+ */
+
+ orbit(target, orbitsize, FALSE, 20, rot_seg)
+
+/mob/observer/dead/orbit()
+ set_dir(2) //reset dir so the right directional sprites show up
+ return ..()
+
+/mob/observer/dead/stop_orbit()
+ . = ..()
+ //restart our floating animation after orbit is done.
+ pixel_y = default_pixel_y
+ pixel_x = default_pixel_x
+ transform = null
+ animate(src, pixel_y = 2, time = 10, loop = -1)
+ animate(pixel_y = default_pixel_y, time = 10, loop = -1)
+
+/mob/observer/dead/proc/stop_following()
+ following = null
+ stop_orbit()
+
+/mob/proc/update_following()
+ . = get_turf(src)
+ for(var/mob/observer/dead/M in following_mobs)
+ if(!.)
+ M.stop_following()
+
+ if(M.following != src)
+ following_mobs -= M
+ else
+ if(M.loc != .)
+ M.forceMove(.)
+
+/mob
+ var/list/following_mobs = list()
+
+/mob/Destroy()
+ for(var/mob/observer/dead/M in following_mobs)
+ M.stop_following()
+ following_mobs = null
+ return ..()
+
+/mob/observer/dead/Destroy()
+ if(ismob(following))
+ var/mob/M = following
+ M.following_mobs -= src
+ stop_following()
+ observer_mob_list -= src
+ return ..()
+
+/mob/Moved(atom/old_loc, direction, forced = FALSE)
+ . = ..()
+ update_following()
+
+/mob/Life()
+ // to catch teleports etc which directly set loc
+ update_following()
+ return ..()
+
+/mob/proc/check_holy(var/turf/T)
+ return 0
+
+/mob/observer/dead/check_holy(var/turf/T)
+ if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src))
+ return 0
+
+ return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists))
+
+/mob/observer/dead/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
+ set category = "Ghost"
+ set name = "Jump to Mob"
+ set desc = "Teleport to a mob"
+ set popup_menu = FALSE
+
+ if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer!
+ return
+
+ var/list/possible_mobs = jumpable_mobs()
+ var/input = tgui_input_list(usr, "Select a mob:", "Ghost Jump", possible_mobs)
+ if(!input)
+ return
+
+ var/target = possible_mobs[input]
+ if (!target)//Make sure we actually have a target
+ return
+ else
+ var/mob/M = target //Destination mob
+ var/turf/T = get_turf(M) //Turf of the destination mob
+
+ if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination.
+ forceMove(T)
+ stop_following()
+ else
+ to_chat(src, "This mob is not located in the game world.")
+
+/mob/observer/dead/memory()
+ set hidden = 1
+ to_chat(src, "[span_red("You are dead! You have no mind to store memory!")]")
+
+/mob/observer/dead/add_memory()
+ set hidden = 1
+ to_chat(src, "[span_red("You are dead! You have no mind to store memory!")]")
+
+/mob/observer/dead/Post_Incorpmove()
+ stop_following()
+
+/mob/observer/dead/verb/analyze_air()
+ set name = "Analyze Air"
+ set category = "Ghost"
+
+ if(!istype(usr, /mob/observer/dead)) return
+
+ // Shamelessly copied from the Gas Analyzers
+ if (!( istype(usr.loc, /turf) ))
+ return
+
+ var/datum/gas_mixture/environment = usr.loc.return_air()
+
+ var/pressure = environment.return_pressure()
+ var/total_moles = environment.total_moles
+ var/list/gas_analyzing = list()
+ gas_analyzing += "Results:"
+ if(abs(pressure - ONE_ATMOSPHERE) < 10)
+ gas_analyzing += "Pressure: [round(pressure,0.1)] kPa"
+ else
+ gas_analyzing += span_red("Pressure: [round(pressure,0.1)] kPa")
+ if(total_moles)
+ for(var/g in environment.gas)
+ gas_analyzing += "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)"
+ gas_analyzing += "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)"
+ gas_analyzing += "Heat Capacity: [round(environment.heat_capacity(),0.1)]"
+ to_chat(src, "[jointext(gas_analyzing, "
")]")
+
+/mob/observer/dead/verb/check_radiation()
+ set name = "Check Radiation"
+ set category = "Ghost"
+
+ var/turf/t = get_turf(src)
+ if(t)
+ var/rads = SSradiation.get_rads_at_turf(t)
+ to_chat(src, "Radiation level: [rads ? rads : "0"] Bq.")
+
+
+/mob/observer/dead/verb/become_mouse()
+ set name = "Become mouse"
+ set category = "Ghost"
+
+ if(config.disable_player_mice)
+ to_chat(src, "Spawning as a mouse is currently disabled.")
+ return
+
+ //VOREStation Add Start
+ if(jobban_isbanned(src, "GhostRoles"))
+ to_chat(src, "You cannot become a mouse because you are banned from playing ghost roles.")
+ return
+ //VOREStation Add End
+
+ if(!MayRespawn(1))
+ return
+
+ var/turf/T = get_turf(src)
+ if(!T || (T.z in using_map.admin_levels))
+ to_chat(src, "You may not spawn as a mouse on this Z-level.")
+ return
+
+ var/timedifference = world.time - client.time_died_as_mouse
+ if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
+ var/timedifference_text
+ timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss")
+ to_chat(src, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.")
+ return
+
+ var/response = tgui_alert(src, "Are you -sure- you want to become a mouse? You will have no rights or OOC protections.","Are you sure you want to squeek? You will have no rights or OOC protections.",list("Squeek!","Nope!")) //CHOMP Edit
+ if(response != "Squeek!") return //Hit the wrong key...again.
+
+
+ //find a viable mouse candidate
+ var/mob/living/simple_mob/animal/passive/mouse/host
+ var/obj/machinery/atmospherics/unary/vent_pump/vent_found
+ var/list/found_vents = list()
+ for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines)
+ if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20)
+ found_vents.Add(v)
+ if(found_vents.len)
+ vent_found = pick(found_vents)
+ host = new /mob/living/simple_mob/animal/passive/mouse(vent_found)
+ else
+ to_chat(src, "Unable to find any unwelded vents to spawn mice at.")
+
+ if(host)
+ if(config.uneducated_mice)
+ host.universal_understand = 0
+ announce_ghost_joinleave(src, 0, "They are now a mouse.")
+ host.ckey = src.ckey
+ host.add_ventcrawl(vent_found)
+ to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.")
+
+/mob/observer/dead/verb/view_manfiest()
+ set name = "Show Crew Manifest"
+ set category = "Ghost"
+
+ var/dat
+ dat += "Crew Manifest
"
+ dat += data_core.get_manifest()
+
+ src << browse(dat, "window=manifest;size=370x420;can_close=1")
+
+//This is called when a ghost is drag clicked to something.
+/mob/observer/dead/MouseDrop(atom/over)
+ if(!usr || !over) return
+ if (isobserver(usr) && usr.client && usr.client.holder && isliving(over))
+ if (usr.client.holder.cmd_ghost_drag(src,over))
+ return
+
+ return ..()
+
+//Used for drawing on walls with blood puddles as a spooky ghost.
+/mob/observer/dead/verb/bloody_doodle()
+
+ set category = "Ghost"
+ set name = "Write in blood"
+ set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC."
+
+ if(!(config.cult_ghostwriter))
+ to_chat(src, "[span_red("That verb is not currently permitted.")]")
+ return
+
+ if (!src.stat)
+ return
+
+ if (usr != src)
+ return 0 //something is terribly wrong
+
+ var/ghosts_can_write
+ if(ticker.mode.name == "cult")
+ if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists)
+ ghosts_can_write = 1
+
+ if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such.
+ to_chat(src, "[span_red("The veil is not thin enough for you to do that.")]")
+ return
+
+ var/list/choices = list()
+ for(var/obj/effect/decal/cleanable/blood/B in view(1,src))
+ if(B.amount > 0)
+ choices += B
+
+ if(!choices.len)
+ to_chat(src, "There is no blood to use nearby.")
+ return
+
+ var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices)
+
+ var/direction = tgui_input_list(src,"Which way?","Tile selection", list("Here","North","South","East","West"))
+ var/turf/simulated/T = src.loc
+ if (direction != "Here")
+ T = get_step(T,text2dir(direction))
+
+ if (!istype(T))
+ to_chat(src, "You cannot doodle there.")
+ return
+
+ if(!choice || choice.amount == 0 || !(src.Adjacent(choice)))
+ return
+
+ var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808"
+
+ var/num_doodles = 0
+ for (var/obj/effect/decal/cleanable/blood/writing/W in T)
+ num_doodles++
+ if (num_doodles > 4)
+ to_chat(src, "There is no space to write on!")
+ return
+
+ var/max_length = 50
+
+ var/message = sanitize(tgui_input_text(usr, "Write a message. It cannot be longer than [max_length] characters.","Blood writing", "", max_length))
+
+ if (message)
+
+ if (length(message) > max_length)
+ message += "-"
+ to_chat(src, "You ran out of blood to write with!")
+
+ var/obj/effect/decal/cleanable/blood/writing/W = new(T)
+ W.basecolor = doodle_color
+ W.update_icon()
+ W.message = message
+ W.add_hiddenprint(src)
+ W.visible_message("[span_red("Invisible fingers crudely paint something in blood on [T]...")]")
+
+/mob/observer/dead/pointed(atom/A as mob|obj|turf in view())
+ if(!..())
+ return 0
+ usr.visible_message("[src] points to [A].")
+ return 1
+
+/mob/observer/dead/proc/manifest(mob/user)
+ is_manifest = TRUE
+ verbs |= /mob/observer/dead/proc/toggle_visibility
+ verbs |= /mob/observer/dead/proc/ghost_whisper
+ to_chat(src, "[span_purple("As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.")]")
+ if(plane != PLANE_WORLD)
+ user.visible_message( \
+ "\The [user] drags ghost, [src], to our plane of reality!", \
+ "You drag [src] to our plane of reality!" \
+ )
+ toggle_visibility(TRUE)
+ else
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ user.visible_message ( \
+ "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \
+ "You get the feeling that the ghost can't become any more visible." \
+ )
+
+/mob/observer/dead/proc/toggle_icon(var/icon)
+ if(!client)
+ return
+
+ var/iconRemoved = 0
+ for(var/image/I in client.images)
+ if(I.icon_state == icon)
+ iconRemoved = 1
+ qdel(I)
+
+ if(!iconRemoved)
+ var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon)
+ client.images += J
+
+/mob/observer/dead/proc/toggle_visibility(var/forced = 0)
+ set category = "Ghost"
+ set name = "Toggle Visibility"
+ set desc = "Allows you to turn (in)visible (almost) at will."
+
+ var/toggled_invisible
+ if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600)
+ to_chat(src, "You must gather strength before you can turn visible again...")
+ return
+
+ if(plane == PLANE_WORLD)
+ toggled_invisible = world.time
+ visible_message("It fades from sight...", "You are now invisible.")
+ else
+ to_chat(src, "You are now visible!")
+
+ plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS
+ invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER
+
+ // Give the ghost a cult icon which should be visible only to itself
+ toggle_icon("cult")
+
+/mob/observer/dead/verb/toggle_anonsay()
+ set category = "Ghost"
+ set name = "Toggle Anonymous Chat"
+ set desc = "Toggles showing your key in dead chat."
+
+ src.anonsay = !src.anonsay
+ if(anonsay)
+ to_chat(src, "Your key won't be shown when you speak in dead chat.")
+ else
+ to_chat(src, "Your key will be publicly visible again.")
+
+/mob/observer/dead/canface()
+ return 1
+
+/mob/observer/dead/proc/can_admin_interact()
+ return check_rights(R_ADMIN|R_EVENT, 0, src)
+
+/mob/observer/dead/verb/toggle_ghostsee()
+ set name = "Toggle Ghost Vision"
+ set desc = "Toggles your ability to see things only ghosts can see, like other ghosts"
+ set category = "Ghost"
+ ghostvision = !ghostvision
+ updateghostsight()
+ to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.")
+
+/mob/observer/dead/verb/toggle_darkness()
+ set name = "Toggle Darkness"
+ set desc = "Toggles your ability to see lighting overlays, and the darkness they create."
+ set category = "Ghost"
+
+ var/static/list/darkness_names = list("normal darkness levels", "30% darkness removed", "70% darkness removed", "no darkness")
+ var/static/list/darkness_levels = list(255, 178, 76, 0)
+
+ var/index = darkness_levels.Find(lighting_alpha)
+ if(!index || index >= darkness_levels.len)
+ index = 1
+ else
+ index++
+
+ lighting_alpha = darkness_levels[index]
+ updateghostsight()
+ to_chat(src, "Your vision now has [darkness_names[index]].")
+
+/mob/observer/dead/proc/updateghostsight()
+ plane_holder.set_desired_alpha(VIS_LIGHTING, lighting_alpha)
+ plane_holder.set_vis(VIS_LIGHTING, lighting_alpha)
+ plane_holder.set_vis(VIS_GHOSTS, ghostvision)
+
+/mob/observer/dead/MayRespawn(var/feedback = 0)
+ if(!client)
+ return 0
+ if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse)
+ if(feedback)
+ to_chat(src, "Your non-dead body prevent you from respawning.")
+ return 0
+ if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
+ if(feedback)
+ to_chat(src, "antagHUD restrictions prevent you from respawning.")
+ return 0
+ return 1
+
+/atom/proc/extra_ghost_link()
+ return
+
+/mob/extra_ghost_link(var/atom/ghost)
+ if(client && eyeobj)
+ return "|eye"
+
+/mob/observer/dead/extra_ghost_link(var/atom/ghost)
+ if(mind && mind.current)
+ return "|body"
+
+/proc/ghost_follow_link(var/atom/target, var/atom/ghost)
+ if((!target) || (!ghost)) return
+ . = "follow"
+ . += target.extra_ghost_link(ghost)
+
+//Culted Ghosts
+
+/mob/observer/dead/proc/ghost_whisper()
+ set name = "Spectral Whisper"
+ set category = "IC"
+
+ if(is_manifest) //Only able to whisper if it's hit with a tome.
+ var/list/options = list()
+ for(var/mob/living/Ms in view(src))
+ options += Ms
+ var/mob/living/M = tgui_input_list(src, "Select who to whisper to:", "Whisper to?", options)
+ if(!M)
+ return 0
+ var/msg = sanitize(tgui_input_text(src, "Message:", "Spectral Whisper"))
+ if(msg)
+ log_say("(SPECWHISP to [key_name(M)]): [msg]", src)
+ to_chat(M, " You hear a strange, unidentifiable voice in your head... [span_purple("[msg]")]")
+ to_chat(src, " You said: '[msg]' to [M].")
+ else
+ return
+ return 1
+ else
+ to_chat(src, "You have not been pulled past the veil!")
+
+/mob/observer/dead/verb/choose_ghost_sprite()
+ set category = "Ghost"
+ set name = "Choose Sprite"
+
+ var/choice
+ var/previous_state
+ var/finalized = "No"
+
+ while(finalized == "No" && src.client)
+ choice = tgui_input_list(usr, "What would you like to use for your ghost sprite?", "Ghost Sprite", possible_ghost_sprites)
+ if(!choice)
+ return
+
+ if(choice)
+ icon = 'icons/mob/ghost.dmi'
+ cut_overlays()
+
+ if(icon_state && icon)
+ previous_state = icon_state
+
+ icon_state = possible_ghost_sprites[choice]
+ finalized = tgui_alert(src, "Look at your sprite. Is this what you wish to use?","Ghost Sprite",list("No","Yes"))
+
+ ghost_sprite = possible_ghost_sprites[choice]
+
+ if(finalized == "No")
+ icon_state = previous_state
+
+/mob/observer/dead/is_blind()
+ return FALSE
+
+/mob/observer/dead/is_deaf()
+ return FALSE
+
+/mob/observer/dead/verb/paialert()
+ set category = "Ghost"
+ set name = "Blank pAI alert"
+ set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
+
+ var/time_till_respawn = time_till_respawn()
+ if(time_till_respawn == -1) // Special case, never allowed to respawn
+ to_chat(usr, "Respawning is not allowed!")
+ else if(time_till_respawn) // Nonzero time to respawn
+ to_chat(usr, "You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes.")
+ return
+
+ if(jobban_isbanned(usr, "pAI"))
+ to_chat(usr,"You cannot alert pAI cards when you are banned from playing as a pAI.")
+ return
+
+ if(usr.client.prefs?.be_special & BE_PAI)
+ var/choice = tgui_alert(usr, "Would you like to submit yourself to the recruitment list too?", "Confirmation", list("No", "Yes"))
+ if(choice == "Yes")
+ paiController.recruitWindow(usr)
+ var/count = 0
+ for(var/obj/item/device/paicard/p in GLOB.all_pai_cards)
+ var/obj/item/device/paicard/PP = p
+ if(PP.pai == null)
+ count++
+ PP.add_overlay("pai-ghostalert")
+ PP.alertUpdate()
+ spawn(54)
+ PP.cut_overlays()
+ to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.")
+ else
+ to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.")
+
+/mob/observer/dead/speech_bubble_appearance()
+ return "ghost"
+
+// Lets a ghost know someone's trying to bring them back, and for them to get into their body.
+// Mostly the same as TG's sans the hud element, since we don't have TG huds.
+/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source)
+ if((last_revive_notification + 2 MINUTES) > world.time)
+ return
+ last_revive_notification = world.time
+
+ if(flashwindow)
+ window_flash(client)
+ if(message)
+ to_chat(src, "[message]")
+ if(source)
+ throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source)
+ to_chat(src, "(Click to re-enter)")
+ if(sound)
+ SEND_SOUND(src, sound(sound))
+
+/mob/observer/dead/verb/respawn()
+ set name = "Respawn"
+ set category = "Ghost"
+ src.abandon_mob()
diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm
index 96aa9ccada..8bf61350ec 100644
--- a/code/modules/mob/dead/observer/say.dm
+++ b/code/modules/mob/dead/observer/say.dm
@@ -10,7 +10,7 @@
if(message)
client.handle_spam_prevention(MUTE_DEADCHAT)
if(client.prefs.muted & MUTE_DEADCHAT)
- to_chat(src, "You cannot talk in deadchat (muted).")
+ to_chat(src, "[span_red("You cannot talk in deadchat (muted).")]")
return
. = say_dead(message)
@@ -26,7 +26,7 @@
if(message)
client.handle_spam_prevention(MUTE_DEADCHAT)
if(client.prefs.muted & MUTE_DEADCHAT)
- to_chat(src, "You cannot emote in deadchat (muted).")
+ to_chat(src, "[span_red("You cannot emote in deadchat (muted).")]")
return
. = emote_dead(message)
@@ -39,4 +39,4 @@
//Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs.
if(speaker && (speaker_name != speaker.real_name) && !isAI(speaker))
speaker_name = "[speaker.real_name] ([speaker_name])"
- return speaker_name
\ No newline at end of file
+ return speaker_name
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index e7bf3f4415..eec77b02ab 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -56,7 +56,7 @@ var/list/slot_equipment_priority = list( \
else
if(!disable_warning)
- to_chat(src, "You are unable to equip that.") //Only print if del_on_fail is false
+ to_chat(src, span_red("You are unable to equip that.")) //Only print if del_on_fail is false
return 0
equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
diff --git a/code/modules/mob/living/carbon/alien/alien_attacks.dm b/code/modules/mob/living/carbon/alien/alien_attacks.dm
index e2c965e2c9..6eac6a05d2 100644
--- a/code/modules/mob/living/carbon/alien/alien_attacks.dm
+++ b/code/modules/mob/living/carbon/alien/alien_attacks.dm
@@ -28,7 +28,7 @@
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O.show_message(text("[] has grabbed [] passively!", M, src), 1)
+ O.show_message(span_red(text("[] has grabbed [] passively!", M, src)), 1)
else
var/damage = rand(1, 9)
@@ -43,17 +43,17 @@
playsound(src, "punch", 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O.show_message(text("[] has punched []!", M, src), 1)
+ O.show_message(span_red(text("[] has punched []!", M, src)), 1)
if (damage > 4.9)
Weaken(rand(10,15))
for(var/mob/O in viewers(M, null))
if ((O.client && !( O.blinded )))
- O.show_message(text("[] has weakened []!", M, src), 1, "You hear someone fall.", 2)
+ O.show_message(span_red(text("[] has weakened []!", M, src)), 1, span_red("You hear someone fall."), 2)
adjustBruteLoss(damage)
updatehealth()
else
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O.show_message(text("[] has attempted to punch []!", M, src), 1)
+ O.show_message(span_red(text("[] has attempted to punch []!", M, src)), 1)
return
diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm
index 6a8d0864f4..806fcbe8db 100644
--- a/code/modules/mob/living/carbon/alien/diona/progression.dm
+++ b/code/modules/mob/living/carbon/alien/diona/progression.dm
@@ -20,5 +20,5 @@
src.loc = L.loc
qdel(L)
- src.visible_message("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.")
- return SPECIES_DIONA
\ No newline at end of file
+ src.visible_message(span_red("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea."),span_red("You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form."))
+ return SPECIES_DIONA
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index adc221d224..6517bbeefd 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -152,7 +152,7 @@
adjustFireLoss((environment.temperature - (T0C+66))/5) // Might be too high, check in testing.
throw_alert("alien_fire", /obj/screen/alert/alien_fire)
if(prob(20))
- to_chat(src, "You feel a searing heat!")
+ to_chat(src, span_red("You feel a searing heat!"))
else
clear_alert("alien_fire")
diff --git a/code/modules/mob/living/carbon/alien/progression.dm b/code/modules/mob/living/carbon/alien/progression.dm
index 0dd4ba7e13..001c111139 100644
--- a/code/modules/mob/living/carbon/alien/progression.dm
+++ b/code/modules/mob/living/carbon/alien/progression.dm
@@ -12,11 +12,11 @@
return
if(handcuffed || legcuffed)
- to_chat(src, "You cannot evolve when you are cuffed.")
+ to_chat(src, span_red("You cannot evolve when you are cuffed."))
return
if(amount_grown < max_grown)
- to_chat(src, "You are not fully grown.")
+ to_chat(src, span_red("You are not fully grown."))
return
// confirm_evolution() handles choices and other specific requirements.
@@ -62,4 +62,4 @@
return
/mob/living/carbon/alien/proc/show_evolution_blurb()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index cfa9d59f85..98b72fcf6f 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -237,7 +237,7 @@
/obj/item/device/mmi/digital/attack_self(mob/user as mob)
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
- to_chat(user, "You carefully locate the manual activation switch and start the [src]'s boot process.")
+ to_chat(user, span_blue("You carefully locate the manual activation switch and start the [src]'s boot process."))
request_player()
/obj/item/device/mmi/digital/proc/request_player()
@@ -261,7 +261,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
- M.show_message("\The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
+ M.show_message(span_blue("\The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?"))
/obj/item/device/mmi/digital/proc/transfer_personality(var/mob/candidate)
announce_ghost_joinleave(candidate, 0, "They are occupying a synthetic brain now.")
@@ -279,7 +279,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
- M.show_message("\The [src] chimes quietly.")
+ M.show_message(span_blue("\The [src] chimes quietly."))
/obj/item/device/mmi/digital/robot
name = "robotic intelligence circuit"
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index 95af6ec7c0..cbbeb899a1 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -6,9 +6,9 @@
if (radiation > 100)
radiation = 100
if(!container)//If it's not in an MMI
- to_chat(src, "You feel weak.")
+ to_chat(src, span_red("You feel weak."))
else//Fluff-wise, since the brain can't detect anything itself, the MMI handles thing like that
- to_chat(src, "STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED.")
+ to_chat(src, span_red("STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED."))
switch(radiation)
if(1 to 49)
@@ -23,9 +23,9 @@
if(prob(5))
radiation -= 5
if(!container)
- to_chat(src, "You feel weak.")
+ to_chat(src, span_red("You feel weak."))
else
- to_chat(src, "STATUS: DANGEROUS LEVELS OF RADIATION DETECTED.")
+ to_chat(src, span_red("STATUS: DANGEROUS LEVELS OF RADIATION DETECTED."))
updatehealth()
if(75 to 100)
@@ -117,7 +117,7 @@
silent = 1
if(!alert)//Sounds an alarm, but only once per 'level'
emote("alarm")
- to_chat(src, "Major electrical distruption detected: System rebooting.")
+ to_chat(src, span_red("Major electrical distruption detected: System rebooting."))
alert = 1
if(prob(75))
emp_damage -= 1
@@ -134,7 +134,7 @@
ear_damage = 1
if(!alert)
emote("alert")
- to_chat(src, "Primary systems are now online.")
+ to_chat(src, span_red("Primary systems are now online."))
alert = 1
if(prob(50))
emp_damage -= 1
@@ -146,13 +146,13 @@
if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere)
if(!alert)
emote("notice")
- to_chat(src, "System reboot nearly complete.")
+ to_chat(src, span_red("System reboot nearly complete."))
alert = 1
if(prob(25))
emp_damage -= 1
if(1)
alert = 0
- to_chat(src, "All systems restored.")
+ to_chat(src, span_red("All systems restored."))
emp_damage -= 1
return 1
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index a1f12f97b5..cb155797a2 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -16,7 +16,7 @@
/obj/item/device/mmi/digital/posibrain/attack_self(mob/user as mob)
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
- to_chat(user, "You carefully locate the manual activation switch and start the positronic brain's boot process.")
+ to_chat(user, span_blue("You carefully locate the manual activation switch and start the positronic brain's boot process."))
icon_state = "posibrain-searching"
src.searching = 1
src.request_player()
@@ -68,7 +68,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
- M.show_message("The positronic brain beeps as it loads a personality.")
+ M.show_message(span_blue("The positronic brain beeps as it loads a personality."))
playsound(src, 'sound/misc/boobeebeep.ogg', 50, 1)
icon_state = "posibrain-occupied"
@@ -82,7 +82,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
- M.show_message("The positronic brain buzzes and beeps, and the golden lights fade away. Perhaps you could try again?")
+ M.show_message(span_blue("The positronic brain buzzes and beeps, and the golden lights fade away. Perhaps you could try again?"))
playsound(src, 'sound/misc/buzzbeep.ogg', 50, 1)
/obj/item/device/mmi/digital/posibrain/emp_act(severity)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index a142a2102c..db714cccdb 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -80,7 +80,7 @@
M.loc = src.loc
for(var/mob/N in viewers(src, null))
if(N.client)
- N.show_message(text("[M] bursts out of [src]!"), 2)
+ N.show_message(span_red(text("[M] bursts out of [src]!")), 2)
..()
/mob/living/carbon/attack_hand(mob/M as mob)
@@ -91,7 +91,7 @@
if (H.hand)
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
- to_chat(H, "You can't use your [temp.name]")
+ to_chat(H, span_red("You can't use your [temp.name]"))
return
return
@@ -401,7 +401,7 @@
set category = "IC"
if(usr.sleeping)
- to_chat(usr, "You are already sleeping")
+ to_chat(usr, span_red("You are already sleeping"))
return
if(tgui_alert(src,"You sure you want to sleep for a while?","Sleep",list("Yes","No")) == "Yes")
usr.AdjustSleeping(20)
diff --git a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm
index b37dff23ac..f5b52e0929 100644
--- a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm
+++ b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm
@@ -24,7 +24,7 @@
for(var/R in cures)
if(H.reagents.has_reagent(R))
if (cure_message)
- to_chat(H, "[cure_message]")
+ to_chat(H, span_blue("[cure_message]"))
return 1
return 0
diff --git a/code/modules/mob/living/carbon/human/chem_side_effects.dm b/code/modules/mob/living/carbon/human/chem_side_effects.dm
index b37dff23ac..f5b52e0929 100644
--- a/code/modules/mob/living/carbon/human/chem_side_effects.dm
+++ b/code/modules/mob/living/carbon/human/chem_side_effects.dm
@@ -24,7 +24,7 @@
for(var/R in cures)
if(H.reagents.has_reagent(R))
if (cure_message)
- to_chat(H, "[cure_message]")
+ to_chat(H, span_blue("[cure_message]"))
return 1
return 0
diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm
index 5fce5e9e9b..c5fbc6f6ef 100644
--- a/code/modules/mob/living/carbon/human/examine_vr.dm
+++ b/code/modules/mob/living/carbon/human/examine_vr.dm
@@ -89,13 +89,13 @@
/mob/living/carbon/human/proc/examine_pickup_size(mob/living/H)
var/message = ""
if(istype(H) && (H.get_effective_size(FALSE) - src.get_effective_size(TRUE)) >= 0.50)
- message = "They are small enough that you could easily pick them up!"
+ message = span_blue("They are small enough that you could easily pick them up!")
return message
/mob/living/carbon/human/proc/examine_step_size(mob/living/H)
var/message = ""
if(istype(H) && (H.get_effective_size(FALSE) - src.get_effective_size(TRUE)) >= 0.75)
- message = "They are small enough that you could easily trample them!"
+ message = span_red("They are small enough that you could easily trample them!")
return message
/mob/living/carbon/human/proc/examine_nif(mob/living/carbon/human/H)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 087365e093..2fd6d7f6db 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -374,7 +374,7 @@
U.handle_regular_hud_updates()
if(!modified)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["secrecord"])
if(hasHUD(usr,"security"))
@@ -404,7 +404,7 @@
read = 1
if(!read)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["secrecordComment"])
if(hasHUD(usr,"security"))
@@ -431,7 +431,7 @@
to_chat(usr, "\[Add comment\]")
if(!read)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["secrecordadd"])
if(hasHUD(usr,"security"))
@@ -493,7 +493,7 @@
U.handle_regular_hud_updates()
if(!modified)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["medrecord"])
if(hasHUD(usr,"medical"))
@@ -524,7 +524,7 @@
read = 1
if(!read)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["medrecordComment"])
if(hasHUD(usr,"medical"))
@@ -551,7 +551,7 @@
to_chat(usr, "\[Add comment\]")
if(!read)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["medrecordadd"])
if(hasHUD(usr,"medical"))
@@ -610,7 +610,7 @@
read = 1
if(!read)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["emprecordComment"])
if(hasHUD(usr,"best"))
@@ -637,7 +637,7 @@
to_chat(usr, "\[Add comment\]")
if(!read)
- to_chat(usr, "Unable to locate a data core entry for this person.")
+ to_chat(usr, "[span_red("Unable to locate a data core entry for this person.")]")
if (href_list["emprecordadd"])
if(hasHUD(usr,"best"))
@@ -801,7 +801,7 @@
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
var/datum/gender/T = gender_datums[get_visible_gender()]
- visible_message("\The [src] begins playing [T.his] ribcage like a xylophone. It's quite spooky.","You begin to play a spooky refrain on your ribcage.","You hear a spooky xylophone melody.")
+ visible_message("[span_red("\The [src] begins playing [T.his] ribcage like a xylophone. It's quite spooky.")]","You begin to play a spooky refrain on your ribcage.","[span_red("You hear a spooky xylophone melody.")]")
var/song = pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg')
playsound(src, song, 50, 1, -1)
xylophone = 1
@@ -892,7 +892,7 @@
regenerate_icons()
check_dna()
var/datum/gender/T = gender_datums[get_visible_gender()]
- visible_message("\The [src] morphs and changes [T.his] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!")
+ visible_message("\The [src] morphs and changes [T.his] appearance!", "You change your appearance!", "[span_red("Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!")]")
/mob/living/carbon/human/proc/remotesay()
set name = "Project mind"
@@ -915,10 +915,10 @@
var/say = sanitize(tgui_input_text(usr, "What do you wish to say?"))
if(mRemotetalk in target.mutations)
- target.show_message("You hear [src.real_name]'s voice: [say]")
+ target.show_message("[span_blue("You hear [src.real_name]'s voice: [say]")]")
else
- target.show_message("You hear a voice that seems to echo around the room: [say]")
- usr.show_message("You project your mind into [target.real_name]: [say]")
+ target.show_message("[span_blue("You hear a voice that seems to echo around the room: [say]")]")
+ usr.show_message("[span_blue("You project your mind into [target.real_name]: [say]")]")
log_say("(TPATH to [key_name(target)]) [say]",src)
for(var/mob/observer/dead/G in mob_list)
G.show_message("Telepathic message from [src] to [target]: [say]")
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 16acfd7131..42786250f5 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -57,7 +57,7 @@
if(!hit_zone)
H.do_attack_animation(src)
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message("[H] reaches for [src], but misses!")
+ visible_message("[span_red("[H] reaches for [src], but misses!")]")
return FALSE
if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name))
@@ -333,7 +333,7 @@
return
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message(" [M] attempted to disarm [src]!")
+ visible_message("[span_red("[M] attempted to disarm [src]!")]")
return
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 787b310f67..911cf57c93 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -404,7 +404,7 @@ emp_act
// PERSON BEING THROWN: DEVOURABLE, ALLOWS THROW VORE, CAN BE DROP PREY.
if((can_be_drop_pred && throw_vore && vore_selected) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred.
vore_selected.nom_mob(thrown_mob) //Eat them!!!
- visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!")
+ visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!")
if(thrown_mob.loc != vore_selected)
thrown_mob.forceMove(vore_selected) //Double check. Should never happen but...Weirder things have happened!
add_attack_logs(thrown_mob.thrower,src,"Devoured [thrown_mob.name] via throw vore.")
@@ -413,7 +413,7 @@ emp_act
// PERSON BEING HIT: CAN BE DROP PREY, ALLOWS THROW VORE, AND IS DEVOURABLE.
// PERSON BEING THROWN: CAN BE DROP PRED, ALLOWS THROW VORE.
else if((can_be_drop_prey && throw_vore && devourable) && (thrown_mob.can_be_drop_pred && thrown_mob.throw_vore && thrown_mob.vore_selected)) //Pred thrown into prey.
- visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!")
+ visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!")
thrown_mob.vore_selected.nom_mob(src) //Eat them!!!
if(src.loc != thrown_mob.vore_selected)
src.forceMove(thrown_mob.vore_selected) //Double check. Should never happen but...Weirder things have happened!
@@ -483,7 +483,7 @@ emp_act
var/obj/item/organ/external/affecting = get_organ(zone)
var/hit_area = affecting.name
- src.visible_message("[src] has been hit in the [hit_area] by [O].")
+ src.visible_message("[span_red("[src] has been hit in the [hit_area] by [O].")]")
if(ismob(O.thrower))
add_attack_logs(O.thrower,src,"Hit with thrown [O.name]")
@@ -529,7 +529,7 @@ emp_act
if(O.throw_source && momentum >= THROWNOBJ_KNOCKBACK_SPEED && !buckled)
var/dir = get_dir(O.throw_source, src)
- visible_message("[src] staggers under the impact!","You stagger under the impact!")
+ visible_message("[span_red("[src] staggers under the impact!")]","[span_red("You stagger under the impact!")]")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(!O || !src) return
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index c484844ba3..f0ab6a4520 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -78,7 +78,7 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O.show_message("[src] [failed ? "tried to tackle" : "has tackled"] down [T]!", 1)
+ O.show_message("[span_red("[src] [failed ? "tried to tackle" : "has tackled"] down [T]!")]", 1)
/mob/living/carbon/human/proc/commune()
set category = "Abilities"
@@ -108,12 +108,12 @@
log_say("(COMMUNE to [key_name(M)]) [text]",src)
- to_chat(M, "Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]")
+ to_chat(M, "[span_blue("Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]")]")
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.name == src.species.name)
return
- to_chat(H, "Your nose begins to bleed...")
+ to_chat(H, "[span_red("Your nose begins to bleed...")]")
H.drip(1)
/mob/living/carbon/human/proc/regurgitate()
@@ -126,7 +126,7 @@
if(M in stomach_contents)
stomach_contents.Remove(M)
M.loc = loc
- src.visible_message("[src] hurls out the contents of their stomach!")
+ src.visible_message("[span_red("[src] hurls out the contents of their stomach!")]")
return
/mob/living/carbon/human/proc/psychic_whisper(mob/M as mob in oview())
@@ -137,8 +137,8 @@
var/msg = sanitize(tgui_input_text(usr, "Message:", "Psychic Whisper"))
if(msg)
log_say("(PWHISPER to [key_name(M)]) [msg]", src)
- to_chat(M, "You hear a strange, alien voice in your head... [msg]")
- to_chat(src, "You said: \"[msg]\" to [M]")
+ to_chat(M, "[span_green("You hear a strange, alien voice in your head... [msg]")]")
+ to_chat(src, "[span_green("You said: \"[msg]\" to [M]")]")
return
/mob/living/carbon/human/proc/diona_split_nymph()
diff --git a/code/modules/mob/living/carbon/human/human_powers_YW.dm b/code/modules/mob/living/carbon/human/human_powers_YW.dm
index f3d59ae71b..1f99ea1d34 100644
--- a/code/modules/mob/living/carbon/human/human_powers_YW.dm
+++ b/code/modules/mob/living/carbon/human/human_powers_YW.dm
@@ -9,13 +9,13 @@
log_say("(GreyTP to [key_name(M)]) [msg]", src)
if(ishuman(M))
if(H.species.name == src.species.name)
- to_chat(M, "you hear [src.name]'s voice: [msg]")
- to_chat(src, "you said: \"[msg]\" to [M]")
+ to_chat(M, span_purple("you hear [src.name]'s voice: [msg]"))
+ to_chat(src, span_purple("you said: \"[msg]\" to [M]"))
else
- to_chat(M, "you hear a voice echo in your head... [msg]")
- to_chat(src, "you said: \"[msg]\" to [M]")
+ to_chat(M, span_purple("you hear a voice echo in your head... [msg]"))
+ to_chat(src, span_purple("you said: \"[msg]\" to [M]"))
else
- to_chat(M, "you hear a voice echo in your head... [msg]")
- to_chat(src, "you said: \"[msg]\" to [M]")
+ to_chat(M, span_purple("you hear a voice echo in your head... [msg]"))
+ to_chat(src, span_purple("you said: \"[msg]\" to [M]"))
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index c8aba57735..b164159717 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -357,7 +357,7 @@ This saves us from having to call add_fingerprint() any time something is put in
if(C.attempt_attach_accessory(A, src))
return
else
- to_chat(src, "You are trying to equip this item to an unsupported inventory slot. How the heck did you manage that? Stop it...")
+ to_chat(src, span_red("You are trying to equip this item to an unsupported inventory slot. How the heck did you manage that? Stop it..."))
return
if((W == src.l_hand) && (slot != slot_l_hand))
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 0b43b6ea3e..173743ae24 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -199,7 +199,7 @@
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 1))
- to_chat(src, "You have a seizure!")
+ to_chat(src, span_red("You have a seizure!"))
for(var/mob/O in viewers(src, null))
if(O == src)
continue
@@ -439,7 +439,7 @@
if(prob(50) && prob(100 * RADIATION_SPEED_COEFFICIENT))
spawn vomit()
if(!paralysis && prob(30) && prob(100 * RADIATION_SPEED_COEFFICIENT)) //CNS is shutting down.
- to_chat(src, "You have a seizure!")
+ to_chat(src, "You have a seizure!")
Paralyse(10)
make_jittery(1000)
if(!lying)
@@ -499,7 +499,7 @@
drop_item()
if(accumulated_rads > 700) // (12Gy)
if(!paralysis && prob(1) && prob(100 * RADIATION_SPEED_COEFFICIENT)) //1 in 1000 chance per tick.
- to_chat(src, "You have a seizure!")
+ to_chat(src, "You have a seizure!")
Paralyse(10)
make_jittery(1000)
if(!lying)
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
index cc49a69a84..7bf15b7b53 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm
@@ -184,7 +184,7 @@
var/mob/living/target = pick(potentials)
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
target.forceMove(vore_selected)
- to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
+ to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
ability_flags &= ~AB_PHASE_SHIFTING
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
index bc228f7ef0..6a397f985f 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
@@ -276,7 +276,7 @@
if(target.buckled)
target.buckled.unbuckle_mob(target, force = TRUE)
target.forceMove(vore_selected)
- to_chat(target,"\The [src] quickly engulfs you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
+ to_chat(target,"\The [src] quickly engulfs you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
/mob/living/simple_mob/protean_blob/attack_target(var/atom/A)
if(refactory && istype(A,/obj/item/stack/material))
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_ch.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_ch.dm
index 6206b1c978..c5346a4578 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_ch.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_ch.dm
@@ -35,21 +35,21 @@
if(!choice)
return
- src.visible_message("[src] moves their head next to [T]'s neck, seemingly looking for something!")
+ src.visible_message(span_red("[src] moves their head next to [T]'s neck, seemingly looking for something!"))
if(do_after(src, 300, T)) //Thrirty seconds.
if(choice == "Aphrodisiac")
src.show_message("You sink your fangs into [T] and inject your aphrodisiac!")
- src.visible_message("[src] sinks their fangs into [T]!")
+ src.visible_message(span_red("[src] sinks their fangs into [T]!"))
T.bloodstr.add_reagent("succubi_aphrodisiac",100)
return 0
else if(choice == "Numbing")
src.show_message("You sink your fangs into [T] and inject your poison!")
- src.visible_message("[src] sinks their fangs into [T]!")
+ src.visible_message(span_red("[src] sinks their fangs into [T]!"))
T.bloodstr.add_reagent("numbing_enzyme",20) //Poisons should work when more units are injected
else if(choice == "Paralyzing")
src.show_message("You sink your fangs into [T] and inject your poison!")
- src.visible_message("[src] sinks their fangs into [T]!")
+ src.visible_message(span_red("[src] sinks their fangs into [T]!"))
T.bloodstr.add_reagent("succubi_paralize",20) //Poisons should work when more units are injected
else
return //Should never happen
@@ -143,7 +143,7 @@ var/eggs = 0
src.show_message("Your Belly is full of Eggs you cant have more!!")
return 0
else if(choice == "lay your Eggs" && eggs > 0)
- src.visible_message("[src] freezes and vissibly tries to squat down")
+ src.visible_message(span_white("[src] freezes and vissibly tries to squat down"))
while(eggs > 0)
src.show_message("You lay a egg!")
@@ -192,6 +192,6 @@ var/eggs = 0
to_chat(src, "You jab your stinger into [T].")
to_chat(T, "You feel a stabbing pain as you are stung!")
- src.visible_message("[src] sinks their stinger into [T]!")
+ src.visible_message(span_red("[src] sinks their stinger into [T]!"))
T.bloodstr.add_reagent("condensedcapsaicin_v",3)
last_special = world.time + 50 // Many little jabs instead of one big one
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
index 9bf21baae6..c7806880c0 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
@@ -430,7 +430,7 @@
to_chat(src, "You cannot bite in your current state.")
return
if(B.vessel.total_volume <= 0 || B.isSynthetic()) //Do they have any blood in the first place, and are they synthetic?
- to_chat(src, "There appears to be no blood in this prey...")
+ to_chat(src, span_red("There appears to be no blood in this prey..."))
return
last_special = world.time + 600
@@ -468,9 +468,9 @@
if(noise)
- src.visible_message("[src] moves their head next to [B]'s neck, seemingly looking for something!")
+ src.visible_message(span_red("[src] moves their head next to [B]'s neck, seemingly looking for something!"))
else
- src.visible_message("[src] moves their head next to [B]'s neck, seemingly looking for something!", range = 1)
+ src.visible_message(span_red("[src] moves their head next to [B]'s neck, seemingly looking for something!"), range = 1)
if(bleed) //Due to possibility of missing/misclick and missing the bleeding cues, we are warning the scene members of BLEEDING being on
to_chat(src, SPAN_WARNING("This is going to cause [B] to keep bleeding!"))
@@ -479,9 +479,9 @@
if(do_after(src, 300, B)) //Thrirty seconds.
if(!Adjacent(B)) return
if(noise)
- src.visible_message("[src] suddenly extends their fangs and plunges them down into [B]'s neck!")
+ src.visible_message(span_red("[src] suddenly extends their fangs and plunges them down into [B]'s neck!"))
else
- src.visible_message("[src] suddenly extends their fangs and plunges them down into [B]'s neck!", range = 1)
+ src.visible_message(span_red("[src] suddenly extends their fangs and plunges them down into [B]'s neck!"), range = 1)
if(bleed)
B.apply_damage(10, BRUTE, BP_HEAD, blocked = 0, soaked = 0, sharp = TRUE, edge = FALSE)
var/obj/item/organ/external/E = B.get_organ(BP_HEAD)
@@ -1232,9 +1232,9 @@
return
if(target.buckled) //how are you buckled in the water?!
target.buckled.unbuckle_mob()
- target.visible_message("\The [target] suddenly disappears, being dragged into the water!",\
- "You are dragged below the water and feel yourself slipping directly into \the [src]'s [lowertext(vore_selected)]!")
- to_chat(src, "You successfully drag \the [target] into the water, slipping them into your [lowertext(vore_selected)].")
+ target.visible_message("\The [target] suddenly disappears, being dragged into the water!",\
+ "You are dragged below the water and feel yourself slipping directly into \the [src]'s [lowertext(vore_selected)]!")
+ to_chat(src, "You successfully drag \the [target] into the water, slipping them into your [lowertext(vore_selected)].")
target.forceMove(src.vore_selected)
/mob/living/carbon/human/proc/toggle_pain_module()
@@ -1309,8 +1309,8 @@
to_chat(src, "You need to be closer to do that.")
return
- visible_message("\The [src] attempts to snatch up [target]!", \
- "You attempt to snatch up [target]!" )
+ visible_message("\The [src] attempts to snatch up [target]!", \
+ "You attempt to snatch up [target]!" )
playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25)
//Code to shoot the beam here.
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index f861987de7..a70a4f537b 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -109,14 +109,14 @@
confirm2 = tgui_alert(usr, "Pressing this buttom will really kill you, no going back", "Are you sure?", list("Yes", "No")) //Swapped answers to protect from accidental double clicks.
if (src.health < 0 && stat != DEAD && confirm1 == "Yes" && confirm2 == "Yes") // Checking both confirm1 and confirm2 for good measure. I don't trust TGUI.
src.death()
- to_chat(src, "You have given up life and succumbed to death.")
+ to_chat(src, span_blue("You have given up life and succumbed to death."))
else
if(stat == DEAD)
- to_chat(src, "As much as you'd like, you can't die when already dead")
+ to_chat(src, span_blue("As much as you'd like, you can't die when already dead"))
else if(confirm1 == "No" || confirm2 == "No")
- to_chat(src, "You chose to live another day.")
+ to_chat(src, span_blue("You chose to live another day."))
else
- to_chat(src, "You are not injured enough to succumb to death!")
+ to_chat(src, span_blue("You are not injured enough to succumb to death!"))
/mob/living/proc/updatehealth()
if(status_flags & GODMODE)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 9626677788..b9668131c3 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -276,7 +276,7 @@
visible_message("\The [O] misses [src] narrowly!")
return*/
//CHOMPEDIT - removing baymiss
- src.visible_message("[src] has been hit by [O].")
+ src.visible_message("[span_red("[src] has been hit by [O].")]")
var/armor = run_armor_check(null, "melee")
var/soaked = get_armor_soak(null, "melee")
@@ -303,7 +303,7 @@
if(O.throw_source && momentum >= THROWNOBJ_KNOCKBACK_SPEED)
var/dir = get_dir(O.throw_source, src)
- visible_message("[src] staggers under the impact!","You stagger under the impact!")
+ visible_message("[span_red("[src] staggers under the impact!")]","[span_red("You stagger under the impact!")]")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(!O || !src) return
@@ -334,7 +334,7 @@
if(!thrown_mob.allowmobvore && isanimal(src)) //Does the person being thrown not allow mob vore and is the person being hit (us) a simple_mob?
return
vore_selected.nom_mob(thrown_mob) //Eat them!!!
- visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!")
+ visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!")
if(thrown_mob.loc != vore_selected)
thrown_mob.forceMove(vore_selected) //Double check. Should never happen but...Weirder things have happened!
on_throw_vore_special(TRUE, thrown_mob)
@@ -346,7 +346,7 @@
else if((can_be_drop_prey && throw_vore && devourable) && (thrown_mob.can_be_drop_pred && thrown_mob.throw_vore)) //Pred thrown into prey.
if(!allowmobvore && isanimal(thrown_mob)) //Does the person being hit not allow mob vore and the perrson being thrown a simple_mob?
return
- visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!")
+ visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!")
thrown_mob.vore_selected.nom_mob(src) //Eat them!!!
if(src.loc != thrown_mob.vore_selected)
src.forceMove(thrown_mob.vore_selected) //Double check. Should never happen but...Weirder things have happened!
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index b365f18c58..c7a2453ba8 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -475,7 +475,7 @@ var/list/ai_verbs_default = list(
if(target && (!istype(target, /mob/living/carbon/human) || html_decode(href_list["trackname"]) == target:get_face_name()))
ai_actual_track(target)
else
- to_chat(src, "System error. Cannot locate [html_decode(href_list["trackname"])].")
+ to_chat(src, "[span_red("System error. Cannot locate [html_decode(href_list["trackname"])].")]")
return
if(href_list["trackbot"])
diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm
index 6e7e8a42a1..054497422c 100644
--- a/code/modules/mob/living/silicon/pai/life.dm
+++ b/code/modules/mob/living/silicon/pai/life.dm
@@ -4,7 +4,7 @@
if(get_dist(src, src.cable) > 1)
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
- M.show_message("The data cable rapidly retracts back into its spool.", 3, "You hear a click and the sound of wire spooling rapidly.", 2)
+ M.show_message(span_red("The data cable rapidly retracts back into its spool."), 3, span_red("You hear a click and the sound of wire spooling rapidly."), 2)
playsound(src, 'sound/machines/click.ogg', 50, 1)
qdel(src.cable)
@@ -31,7 +31,7 @@
if(silence_time)
if(world.timeofday >= silence_time)
silence_time = null
- to_chat(src, "Communication circuit reinitialized. Speech and messaging functionality restored.")
+ to_chat(src, span_green("Communication circuit reinitialized. Speech and messaging functionality restored."))
handle_statuses()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 111a1f0ec7..946c2aad30 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -186,12 +186,12 @@
// 33% chance of no additional effect
src.silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes
- to_chat(src, "Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.")
+ to_chat(src, span_green("Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete."))
if(prob(20))
var/turf/T = get_turf_or_move(src.loc)
card.death_damage()
for (var/mob/M in viewers(T))
- M.show_message("A shower of sparks spray from [src]'s inner workings.", 3, "You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2)
+ M.show_message(span_red("A shower of sparks spray from [src]'s inner workings."), 3, span_red("You hear and smell the ozone hiss of electrical sparks being expelled violently."), 2)
return
if(prob(50))
card.damage_random_component(TRUE)
@@ -199,7 +199,7 @@
if(1)
src.master = null
src.master_dna = null
- to_chat(src, "You feel unbound.")
+ to_chat(src, span_green("You feel unbound."))
if(2)
var/command
if(severity == 1)
@@ -207,9 +207,9 @@
else
command = pick("Serve", "Kill", "Love", "Hate", "Disobey", "Devour", "Fool", "Enrage", "Entice", "Observe", "Judge", "Respect", "Disrespect", "Consume", "Educate", "Destroy", "Disgrace", "Amuse", "Entertain", "Ignite", "Glorify", "Memorialize", "Analyze")
src.pai_law0 = "[command] your master."
- to_chat(src, "Pr1m3 d1r3c71v3 uPd473D.")
+ to_chat(src, span_green("Pr1m3 d1r3c71v3 uPd473D."))
if(3)
- to_chat(src, "You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all.")
+ to_chat(src, span_green("You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all."))
/mob/living/silicon/pai/proc/switchCamera(var/obj/machinery/camera/C)
if (!C)
@@ -549,4 +549,4 @@
return
src.master = null
src.master_dna = null
- to_chat(src, "You feel unbound.")
+ to_chat(src, span_green("You feel unbound."))
diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm
index ed38dfc9c8..869692c92d 100644
--- a/code/modules/mob/living/silicon/pai/say.dm
+++ b/code/modules/mob/living/silicon/pai/say.dm
@@ -1,6 +1,6 @@
/mob/living/silicon/pai/say(var/message, var/datum/language/speaking = null, var/whispering = 0)
if(silence_time)
- to_chat(src, "Communication circuits remain uninitialized.")
+ to_chat(src, span_green("Communication circuits remain uninitialized."))
else if(card.speech_synthesizer != PP_FUNCTIONAL)
to_chat(src, "Communication circuits damaged. Service required.")
else
diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm
index ea182ad224..e857491639 100644
--- a/code/modules/mob/living/silicon/pai/software_modules.dm
+++ b/code/modules/mob/living/silicon/pai/software_modules.dm
@@ -77,7 +77,7 @@
for (var/mob/v in viewers(T))
v.show_message("[M] presses [TM.his] thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2)
var/datum/dna/dna = M.dna
- to_chat(P, "[M]'s UE string : [dna.unique_enzymes]
")
+ to_chat(P, span_red("[M]'s UE string : [dna.unique_enzymes]
"))
if(dna.unique_enzymes == P.master_dna)
to_chat(P, "DNA is a match to stored Master DNA.")
else
@@ -293,9 +293,9 @@
var/turf/T = get_turf(src)
for(var/mob/living/silicon/ai/AI in player_list)
if(T.loc)
- to_chat(AI, "Network Alert: Brute-force encryption crack in progress in [T.loc].")
+ to_chat(AI, span_red("Network Alert: Brute-force encryption crack in progress in [T.loc]."))
else
- to_chat(AI, "Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.")
+ to_chat(AI, span_red("Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location."))
var/obj/machinery/door/D = cable.machine
if(!istype(D))
hack_aborted = 1
diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm
index 6a24796d87..74e9f9750d 100644
--- a/code/modules/mob/living/silicon/robot/analyzer.dm
+++ b/code/modules/mob/living/silicon/robot/analyzer.dm
@@ -20,13 +20,13 @@
/obj/item/device/robotanalyzer/proc/do_scan(mob/living/M as mob, mob/living/user as mob)
if((CLUMSY in user.mutations) && prob(50))
- to_chat(user, "You try to analyze the floor's vitals!")
+ to_chat(user, span_red("You try to analyze the floor's vitals!"))
for(var/mob/O in viewers(M, null))
- O.show_message(text("[user] has analyzed the floor's vitals!"), 1)
- user.show_message(text("Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1)
- user.show_message(text("\t Damage Specifics: [0]-[0]-[0]-[0]"), 1)
- user.show_message("Key: Suffocation/Toxin/Burns/Brute", 1)
- user.show_message("Body Temperature: ???", 1)
+ O.show_message(span_red(text("[user] has analyzed the floor's vitals!")), 1)
+ user.show_message(span_blue(text("Analyzing Results for The floor:\n\t Overall Status: Healthy")), 1)
+ user.show_message(span_blue(text("\t Damage Specifics: [0]-[0]-[0]-[0]")), 1)
+ user.show_message(span_blue("Key: Suffocation/Toxin/Burns/Brute"), 1)
+ user.show_message(span_blue("Body Temperature: ???"), 1)
return
var/scan_type
@@ -37,7 +37,7 @@
else if(istype(M, /obj/mecha))
scan_type = "mecha"
else
- to_chat(user, "You can't analyze non-robotic things!")
+ to_chat(user, span_red("You can't analyze non-robotic things!"))
return
user.visible_message("\The [user] has analyzed [M]'s components.","You have analyzed [M]'s components.")
@@ -45,36 +45,36 @@
if("robot")
var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss()
var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss()
- user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]")
- user.show_message("\t Key: Electronics/Brute", 1)
- user.show_message("\t Damage Specifics: [BU] - [BR]")
+ user.show_message(span_blue("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]"))
+ user.show_message("\t Key: [span_orange("Electronics")]/[span_red("Brute")]", 1)
+ user.show_message("\t Damage Specifics: [span_orange("[BU]")] - [span_red("[BR]")]")
if(M.tod && M.stat == DEAD)
- user.show_message("Time of Disable: [M.tod]")
+ user.show_message(span_blue("Time of Disable: [M.tod]"))
var/mob/living/silicon/robot/H = M
var/list/damaged = H.get_damaged_components(1,1,1)
- user.show_message("Localized Damage:",1)
+ user.show_message(span_blue("Localized Damage:"),1)
if(length(damaged)>0)
for(var/datum/robot_component/org in damaged)
- user.show_message(text("\t []: [][] - [] - [] - []", \
- capitalize(org.name), \
- (org.installed == -1) ? "DESTROYED " :"",\
- (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \
- (org.brute_damage > 0) ? "[org.brute_damage]" :0, \
- (org.toggled) ? "Toggled ON" : "Toggled OFF",\
- (org.powered) ? "Power ON" : "Power OFF"),1)
+ user.show_message(span_blue(text("\t []: [][] - [] - [] - []", \
+ span_blue(capitalize(org.name)), \
+ (org.installed == -1) ? "[span_red("DESTROYED")] " :"",\
+ (org.electronics_damage > 0) ? "[span_orange("[org.electronics_damage]")]" :0, \
+ (org.brute_damage > 0) ? "[span_red("[org.brute_damage]")]" :0, \
+ (org.toggled) ? "Toggled ON" : "[span_red("Toggled OFF")]",\
+ (org.powered) ? "Power ON" : "[span_red("Power OFF")]")),1)
else
- user.show_message("\t Components are OK.",1)
+ user.show_message(span_blue("\t Components are OK."),1)
if(H.emagged && prob(5))
- user.show_message("\t ERROR: INTERNAL SYSTEMS COMPROMISED",1)
- user.show_message("Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
+ user.show_message(span_red("\t ERROR: INTERNAL SYSTEMS COMPROMISED"),1)
+ user.show_message(span_blue("Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)"), 1)
if("prosthetics")
var/mob/living/carbon/human/H = M
to_chat(user, "Analyzing Results for \the [H]:")
if(H.isSynthetic())
- to_chat(user, "System instability: [H.getToxLoss()]")
- to_chat(user, "Key: Electronics/Brute")
+ to_chat(user, "System instability: [span_green("[H.getToxLoss()]")]")
+ to_chat(user, "Key: [span_orange("Electronics")]/[span_red("Brute")]")
to_chat(user, "External prosthetics:")
var/organ_found
if(H.internal_organs.len)
@@ -82,7 +82,7 @@
if(!(E.robotic >= ORGAN_ROBOT))
continue
organ_found = 1
- to_chat(user, "[E.name]: [E.brute_dam] [E.burn_dam]")
+ to_chat(user, "[E.name]: [span_red("[E.brute_dam] ")] [span_orange("[E.burn_dam]")]")
if(!organ_found)
to_chat(user, "No prosthetics located.")
to_chat(user, "
")
@@ -93,7 +93,7 @@
if(!(O.robotic >= ORGAN_ROBOT))
continue
organ_found = 1
- to_chat(user, "[O.name]: [O.damage]")
+ to_chat(user, "[O.name]: [span_red("[O.damage]")]")
if(!organ_found)
to_chat(user, "No prosthetics located.")
@@ -113,7 +113,7 @@
Air source: [Mecha.use_internal_tank?"Internal Airtank":"Environment"]
Airtank pressure: [tank_pressure]kPa
Airtank temperature: [tank_temperature]K|[tank_temperature - T0C]°C
- Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
+ Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? span_red("[cabin_pressure]"): cabin_pressure]kPa
Cabin temperature: [Mecha.return_temperature()]K|[Mecha.return_temperature() - T0C]°C
DNA Lock: [Mecha.dna?"Mecha.dna":"Not Found"]
"}
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 2a98785cd1..dcc12f6f23 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -60,7 +60,7 @@
src.has_power = 1
else
if (src.has_power)
- to_chat(src, "You are now running on emergency backup power.")
+ to_chat(src, span_red("You are now running on emergency backup power."))
src.has_power = 0
if(lights_on) // Light is on but there is no power!
lights_on = 0
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 59e0255410..37dc39591e 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -322,14 +322,14 @@
modules.Remove(shell_module_blacklist)
//CHOMPedit Add
if(crisis || security_level == SEC_LEVEL_RED || crisis_override)
- to_chat(src, "Crisis mode active. Combat module available.")
+ to_chat(src, span_red("Crisis mode active. Combat module available."))
modules+="Combat"
modules+="ERT"
//CHOMPedit end
else
modules.Add(robot_module_types)
if(crisis || security_level == SEC_LEVEL_RED || crisis_override)
- to_chat(src, "Crisis mode active. Combat module available.")
+ to_chat(src, span_red("Crisis mode active. Combat module available."))
modules |= emergency_module_types
for(var/module_name in whitelisted_module_types)
if(is_borg_whitelisted(src, module_name))
@@ -457,11 +457,11 @@
set name = "Self Diagnosis"
if(!is_component_functioning("diagnosis unit"))
- to_chat(src, "Your self-diagnosis component isn't functioning.")
+ to_chat(src, span_red("Your self-diagnosis component isn't functioning."))
var/datum/robot_component/CO = get_component("diagnosis unit")
if (!cell_use_power(CO.active_usage))
- to_chat(src, "Low Power.")
+ to_chat(src, span_red("Low Power."))
var/dat = self_diagnosis()
src << browse(dat, "window=robotdiagnosis")
@@ -485,10 +485,10 @@
var/datum/robot_component/C = components[toggle]
if(C.toggled)
C.toggled = 0
- to_chat(src, "You disable [C.name].")
+ to_chat(src, span_red("You disable [C.name]."))
else
C.toggled = 1
- to_chat(src, "You enable [C.name].")
+ to_chat(src, span_red("You enable [C.name]."))
/mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence.
set category = "Robot Commands"
@@ -616,7 +616,7 @@
updatehealth()
add_fingerprint(user)
for(var/mob/O in viewers(user, null))
- O.show_message("[user] has fixed some of the dents on [src]!", 1)
+ O.show_message("[span_red("[user] has fixed some of the dents on [src]!")]", 1)
else
to_chat(user, "Need more welding fuel!")
return
@@ -631,7 +631,7 @@
adjustFireLoss(-30)
updatehealth()
for(var/mob/O in viewers(user, null))
- O.show_message("[user] has fixed some of the burnt wires on [src]!", 1)
+ O.show_message("[span_red("[user] has fixed some of the burnt wires on [src]!")]", 1)
else if(W.has_tool_quality(TOOL_CROWBAR) && user.a_intent != I_HURT) // crowbar means open or close the cover
if(opened)
@@ -761,7 +761,7 @@
to_chat(user, "You [ locked ? "lock" : "unlock"] [src]'s interface.")
update_icon()
else
- to_chat(user, "Access denied.")
+ to_chat(user, "[span_red("Access denied.")]")
else if(istype(W, /obj/item/borg/upgrade/))
var/obj/item/borg/upgrade/U = W
@@ -1041,7 +1041,7 @@
/mob/living/silicon/robot/proc/installed_modules()
if(weapon_lock)
- to_chat(src, "Weapon lock active, unable to use modules! Count:[weaponlock_time]")
+ to_chat(src, "" + span_red("Weapon lock active, unable to use modules! Count:[weaponlock_time]") + "")
return
if(!module)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 82c5edd414..83d08c98dd 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -79,11 +79,11 @@
cell.charge -= cost
if(cell.charge <= 0)
cell.charge = 0
- to_chat(src, "Your shield has overloaded!")
+ to_chat(src, "[span_red("Your shield has overloaded!")]")
else
brute -= absorb_brute
burn -= absorb_burn
- to_chat(src, "Your shield absorbs some of the impact!")
+ to_chat(src, "[span_red("Your shield absorbs some of the impact!")]")
if(!emp)
var/datum/robot_component/armour/A = get_armour()
@@ -126,11 +126,11 @@
cell.charge -= cost
if(cell.charge <= 0)
cell.charge = 0
- to_chat(src, "Your shield has overloaded!")
+ to_chat(src, "[span_red("Your shield has overloaded!")]")
else
brute -= absorb_brute
burn -= absorb_burn
- to_chat(src, "Your shield absorbs some of the impact!")
+ to_chat(src, "[span_red("Your shield absorbs some of the impact!")]")
var/datum/robot_component/armour/A = get_armour()
if(A)
@@ -152,4 +152,4 @@
/mob/living/silicon/robot/emp_act(severity)
uneq_all()
- ..() //Damage is handled at /silicon/ level.
\ No newline at end of file
+ ..() //Damage is handled at /silicon/ level.
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm
index 618efee6dc..c0bc4e310a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm
@@ -9,7 +9,7 @@
if (src.client)
if(client.prefs.muted & MUTE_IC)
- to_chat(src, "You cannot speak in IC (muted).")
+ to_chat(src, span_red("You cannot speak in IC (muted)."))
return
if(istype(src.loc, /mob/living/simple_mob/animal/borer))
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm
index 39f3a27e87..f7b19810b7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm
@@ -11,7 +11,7 @@
to_chat(src, "You cannot leave your host in your current state.")
if(docile)
- to_chat(src, "You are feeling far too docile to do that.")
+ to_chat(src, span_blue("You are feeling far too docile to do that."))
return
if(!host || !src) return
@@ -212,7 +212,7 @@
to_chat(src, "You cannot secrete chemicals in your current state.")
if(docile)
- to_chat(src, "You are feeling far too docile to do that.")
+ to_chat(src, span_blue("You are feeling far too docile to do that."))
return
if(chemicals < 50)
@@ -223,7 +223,7 @@
if(!chem || chemicals < 50 || !host || controlling || !src || stat) //Sanity check.
return
- to_chat(src, "You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream.")
+ to_chat(src, span_red("You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream."))
host.reagents.add_reagent(chem, 10)
chemicals -= 50
@@ -261,8 +261,8 @@
to_chat(src, "You cannot infest someone who is already infested!")
return
- to_chat(src, "You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.")
- to_chat(M, "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.")
+ to_chat(src, span_red("You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread."))
+ to_chat(M, span_red("You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing."))
M.Weaken(10)
used_dominate = world.time
@@ -281,7 +281,7 @@
return
if(docile)
- to_chat(src, "You are feeling far too docile to do that.")
+ to_chat(src, span_blue("You are feeling far too docile to do that."))
return
to_chat(src, "You begin delicately adjusting your connection to the host brain...")
@@ -292,8 +292,8 @@
return
else
- to_chat(src, "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.")
- to_chat(host, "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.")
+ to_chat(src, span_red("You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system."))
+ to_chat(host, span_red("You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours."))
host.add_language("Cortical Link")
// host -> brain
@@ -353,4 +353,4 @@
rejuvenate()
restore_blood()
fixblood()
- update_canmove()
\ No newline at end of file
+ update_canmove()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
index 7a22edf533..4a97ab3a31 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
@@ -52,12 +52,12 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
if(G.seed && G.seed.kitchen_tag == "wheat")
if(!stat && eggsleft < 8)
- user.visible_message("[user] feeds [O] to [name]! It clucks happily.","You feed [O] to [name]! It clucks happily.")
+ user.visible_message(span_blue("[user] feeds [O] to [name]! It clucks happily."),span_blue("You feed [O] to [name]! It clucks happily."))
user.drop_item()
qdel(O)
eggsleft += rand(1, 4)
else
- to_chat(user, "[name] doesn't seem hungry!")
+ to_chat(user, span_blue("[name] doesn't seem hungry!"))
else
to_chat(user, "[name] doesn't seem interested in that.")
else
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
index 0ff6ee6496..4fdd32500e 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
@@ -35,9 +35,9 @@
user.visible_message("[user] milks [src] using \the [O].")
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
- to_chat(user, "The [O] is full.")
+ to_chat(user, span_red("The [O] is full."))
if(!transfered)
- to_chat(user, "The udder is dry. Wait a bit longer...")
+ to_chat(user, span_red("The udder is dry. Wait a bit longer..."))
else
..()
@@ -69,4 +69,4 @@
emote_see = list("shakes its head")
/decl/mob_organ_names/cow
- hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "udder")
\ No newline at end of file
+ hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "udder")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm
index 477dcb5aa7..c172d0b654 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm
@@ -66,9 +66,9 @@
user.visible_message("[user] milks [src] using \the [O].")
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
- to_chat(user, "The [O] is full.")
+ to_chat(user, span_red("The [O] is full."))
if(!transfered)
- to_chat(user, "The udder is dry. Wait a bit longer...")
+ to_chat(user, span_red("The udder is dry. Wait a bit longer..."))
else
..()
@@ -78,4 +78,4 @@
emote_see = list("shakes its head", "stamps a foot", "glares around")
// say_got_target doesn't seem to handle emotes, but keeping this here in case someone wants to make it work
-// say_got_target = list("[src] gets an evil-looking gleam in their eye.")
\ No newline at end of file
+// say_got_target = list("[src] gets an evil-looking gleam in their eye.")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
index 77fcd1eb5e..9640e37f8f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
@@ -87,7 +87,7 @@
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
- M.visible_message("\icon[src][bicon(src)] Squeek!")
+ M.visible_message(span_blue("\icon[src][bicon(src)] Squeek!"))
playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1)
..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
index e0be03396d..91b01aa24c 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
@@ -38,7 +38,7 @@
if(!stat)
for(var/mob/M in viewers(user, null))
if ((M.client && !( M.blinded )))
- M.show_message("[user] baps [name] on the nose with the rolled up [O]")
+ M.show_message(span_blue("[user] baps [name] on the nose with the rolled up [O]."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
set_dir(i)
@@ -108,7 +108,7 @@
//pupplies cannot wear anything.
/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
- to_chat(usr, "You can't fit this on [src]")
+ to_chat(usr, span_red("You can't fit this on [src]!"))
return
..()
@@ -200,7 +200,7 @@
//Lisa already has a cute bow!
/mob/living/simple_mob/animal/passive/dog/corgi/Lisa/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
- to_chat(usr, "[src] already has a cute bow!")
+ to_chat(usr, span_red("[src] already has a cute bow!"))
return
..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm
index 9dd02f083c..167992f9cd 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm
@@ -121,7 +121,7 @@ Field studies suggest analytical abilities on par with some species of cepholapo
desc = "A large, sleek snow drake with heavy claws, powerful jaws and many pale spines along its body."
player_msg = "You are a large Sivian pack predator in symbiosis with the local bioluminescent bacteria. You can eat glowing \
tree fruit to fuel your ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva \
- (on help intent).
There are humans moving through your territory; whether you help them get home safely, or treat them as a snack, \
+ (on help intent).
There are humans moving through your territory; whether you help them get home safely, or treat them as a snack, \
is up to you."
color = "#608894"
icon = 'icons/mob/drake_adult.dmi'
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm
index 2c1264c69b..6c099918b2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm
@@ -93,7 +93,7 @@
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
- M.visible_message("\icon[src] Squeek!")
+ M.visible_message(span_blue("\icon[src] Squeek!"))
playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1)
..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm
index 020bfdbd72..f8f292b766 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm
@@ -509,7 +509,7 @@
/mob/living/simple_mob/humanoid/cultist/elite/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(50))
- visible_message("[Proj] disappears into the mirror world as it hits the shield.")
+ visible_message(span_red("[Proj] disappears into the mirror world as it hits the shield."))
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
@@ -675,4 +675,4 @@
name = "Itinerant Blood Hunter"
desc = "This Blood Hunter is far from home. Strange energies course around him, protecting him from the environment. What eldritch influence drew him to this place?" // Blood Hunter on vacation.
- heat_resist = 1 //Might make this 0.75 if 1 is too much resistance for a boss monster. This guy's just a placeholder until we get the Miner in anyways.
\ No newline at end of file
+ heat_resist = 1 //Might make this 0.75 if 1 is too much resistance for a boss monster. This guy's just a placeholder until we get the Miner in anyways.
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
index 7e9c3f8137..448abce63b 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
@@ -137,7 +137,7 @@
/mob/living/simple_mob/humanoid/merc/melee/sword/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(35))
- visible_message("[src] blocks [Proj] with its shield!")
+ visible_message(span_red("[src] blocks [Proj] with its shield!"))
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates_ch.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates_ch.dm
index 65236cc0eb..e0d4db4b27 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates_ch.dm
@@ -156,7 +156,7 @@
/mob/living/simple_mob/humanoid/merc/melee/sword/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(25))
- visible_message("[src] blocks [Proj] with its shield!")
+ visible_message(span_red("[src] blocks [Proj] with its shield!"))
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
@@ -498,4 +498,4 @@
maxHealth = 170 //Less Health
has_repair_droid = TRUE //But has repair drone
pilot_type = /mob/living/simple_mob/humanoid/possessed/merc/feral //Possessed rig suit piloting a mech. Tremble in fear
- movement_shake_radius = 5
\ No newline at end of file
+ movement_shake_radius = 5
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
index bd80dd60e7..e8679782b3 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
@@ -43,11 +43,11 @@
..()
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
- M.show_message("[src] lets out a contented sigh as their form unwinds.")
+ M.show_message(span_red("[src] lets out a contented sigh as their form unwinds."))
ghostize()
qdel(src)
return
/decl/mob_organ_names/shade
- hit_zones = list("spectral robe", "featureless visage", "haunting glow")
\ No newline at end of file
+ hit_zones = list("spectral robe", "featureless visage", "haunting glow")
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm
index ea45c2a6fd..aec3aed6d9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm
@@ -61,7 +61,7 @@
var/mob/living/target = pick(potentials)
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
target.forceMove(vore_selected)
- to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
+ to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
// Do this after the potential vore, so we get the belly
update_icon()
@@ -205,10 +205,10 @@
var/mob/living/target = pick(potentials)
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
target.forceMove(vore_selected)
- to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
+ to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
// Do this after the potential vore, so we get the belly
update_icon()
shift_state = AB_SHIFT_NONE
- last_shift = world.time
\ No newline at end of file
+ last_shift = world.time
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm
index ffea0e7548..57b390d811 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm
@@ -38,7 +38,7 @@
mimic_active = FALSE
if(prob(mimic_chance))
var/mob/living/simple_mob/vore/aggressive/mimic/new_mimic = new(loc, src)
- visible_message("[new_mimic] suddenly growls as it turns out to be a mimic!")
+ visible_message(span_red("[new_mimic] suddenly growls as it turns out to be a mimic!"))
forceMove(new_mimic)
new_mimic.real_crate = src
new_mimic.name = name
@@ -59,7 +59,7 @@
/obj/structure/closet/crate/mimic/damage(var/damage)
if(contents.len)
- visible_message("[src] makes out a crunchy noise as its contents are destroyed!")
+ visible_message(span_red("[src] makes out a crunchy noise as its contents are destroyed!"))
for(var/obj/O in src.contents)
qdel(O)
..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mimic_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mimic_ch.dm
index 4fcc9afc06..e5ad675604 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/mimic_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/mimic_ch.dm
@@ -18,7 +18,7 @@
mimic_active = FALSE
if(prob(mimic_chance))
var/mob/living/simple_mob/vore/aggressive/mimic/airlock/new_mimic = new(loc, src)
- visible_message("The [new_mimic] suddenly growls as it turns out to be a mimic!") //Controls the vars of the mimic that spawns
+ visible_message(span_red("The [new_mimic] suddenly growls as it turns out to be a mimic!")) //Controls the vars of the mimic that spawns
forceMove(new_mimic)
new_mimic.real_crate = src
new_mimic.name = name
@@ -41,7 +41,7 @@
/obj/structure/closet/crate/mimic/airlock/damage(var/damage)
if(contents.len)
- visible_message("The [src] let's out an enraged screach!")
+ visible_message(span_red("The [src] let's out an enraged screach!"))
for(var/obj/O in src.contents)
qdel(O)
..()
@@ -115,7 +115,7 @@
mimic_active = FALSE
if(prob(mimic_chance))
var/mob/living/simple_mob/vore/aggressive/mimic/closet/new_mimic = new(loc, src)
- visible_message("The [new_mimic] suddenly growls as it turns out to be a mimic!") //Controls the mimic that spawns
+ visible_message(span_red("The [new_mimic] suddenly growls as it turns out to be a mimic!")) //Controls the mimic that spawns
forceMove(new_mimic)
new_mimic.real_crate = src
new_mimic.name = name
@@ -135,7 +135,7 @@
/obj/structure/closet/crate/mimic/closet/damage(var/damage)
if(contents.len)
- visible_message("The [src] makes out a crunchy noise as its contents are destroyed!")
+ visible_message(span_red("The [src] makes out a crunchy noise as its contents are destroyed!"))
for(var/obj/O in src.contents)
qdel(O)
..()
@@ -350,4 +350,4 @@
melee_damage_lower = 15
melee_damage_upper = 15
base_attack_cooldown = 10
- attack_armor_pen = 50
\ No newline at end of file
+ attack_armor_pen = 50
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm
index b83be6c633..dbb19f9772 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm
@@ -221,7 +221,7 @@
if(target.buckled)
target.buckled.unbuckle_mob(target, force = TRUE)
target.forceMove(vore_selected)
- to_chat(target,"\The [src] quickly engulfs you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
+ to_chat(target,"\The [src] quickly engulfs you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
else
..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm b/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm
index 65df713486..f2f1315df6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm
@@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list(
var/scent_strength = 5 //How much can a hungry pitcher confuse nearby people?
var/last_lifechecks = 0 //Timing variable to limit vore/hungry proc calls
var/list/pitcher_plant_lure_messages = null
-
+
can_be_drop_prey = FALSE //CHOMP Add
@@ -261,11 +261,11 @@ GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list(
if(isSynthetic(H) || !H.species.breath_type || H.internal) //Exclude species which don't breathe or have internals.
continue
if(src.Adjacent(H)) //If they can breathe and are next to the pitcher, confuse them.
- to_chat(H,"The sweet, overwhelming scent from \the [src] makes your senses reel!")
+ to_chat(H,span_red("The sweet, overwhelming scent from \the [src] makes your senses reel!"))
H.Confuse(scent_strength)
continue
else
- to_chat(H, "[pick(pitcher_plant_lure_messages)]")
+ to_chat(H, span_red("[pick(pitcher_plant_lure_messages)]"))
for(var/turf/simulated/TR in cardinal_turfs)
TR.wet_floor(1) //Same effect as water. Slip into plant, get ate.
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm
index a000344ad5..e3fafd9592 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm
@@ -48,7 +48,7 @@
var/mob/living/target = pick(potentials)
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
target.forceMove(vore_selected)
- to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
+ to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
// Do this after the potential vore, so we get the belly
update_icon()
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 004f6f332f..4db7b66f00 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -22,10 +22,10 @@
tgui_alert_async(usr, "You appear to have logged in with another key this round, which is not permitted. Please contact an administrator if you believe this message to be in error.")
if(matches)
if(M.client)
- message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1)
+ message_admins("[span_red("Notice: ")][span_blue("[key_name_admin(src)] has the same [matches] as [key_name_admin(M)].")]", 1)
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
else
- message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 1)
+ message_admins("[span_red("Notice: ")][span_blue("[key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ")]", 1)
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
/mob/Login()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 6de125ce9b..5f8ef99a03 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -463,7 +463,7 @@
if(client.holder && (client.holder.rights & R_ADMIN|R_EVENT))
is_admin = 1
else if(stat != DEAD || istype(src, /mob/new_player))
- to_chat(usr, "You must be observing to use this!")
+ to_chat(usr, "[span_blue("You must be observing to use this!")]")
return
if(is_admin && stat == DEAD)
@@ -614,7 +614,7 @@
playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback
if(H.pull_damage())
- to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.")
+ to_chat(src, "[span_red("Pulling \the [H] in their current condition would probably be a bad idea.")]")
//Attempted fix for people flying away through space when cuffed and dragged.
if(ismob(AM))
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index a2a4ee71e3..a555e70d2d 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -45,7 +45,7 @@
var/mob/living/carbon/C = usr
C.toggle_throw_mode()
else
- to_chat(usr, "This mob type cannot throw items.")
+ to_chat(usr, span_red("This mob type cannot throw items."))
return
if(NORTHWEST)
if(isliving(usr))
@@ -54,11 +54,11 @@
if(C.pulling)
C.stop_pulling()
return
- to_chat(usr, "You have nothing to drop in your hand.")
+ to_chat(usr, span_red("You have nothing to drop in your hand."))
return
drop_item()
else
- to_chat(usr, "This mob type cannot drop items.")
+ to_chat(usr, span_red("This mob type cannot drop items."))
return
//This gets called when you press the delete button.
@@ -66,7 +66,7 @@
set hidden = 1
if(!usr.pulling)
- to_chat(usr, "You are not pulling anything.")
+ to_chat(usr, span_blue("You are not pulling anything."))
return
usr.stop_pulling()
@@ -225,13 +225,13 @@
for(var/mob/M in range(my_mob, 1))
if(M.pulling == my_mob)
if(!M.restrained() && M.stat == 0 && M.canmove && my_mob.Adjacent(M))
- to_chat(src, "You're restrained! You can't move!")
+ to_chat(src, span_blue("You're restrained! You can't move!"))
return 0
else
M.stop_pulling()
if(my_mob.pinned.len)
- to_chat(src, "You're pinned to a wall by [my_mob.pinned[1]]!")
+ to_chat(src, span_blue("You're pinned to a wall by [my_mob.pinned[1]]!"))
return 0
if(istype(my_mob.buckled, /obj/vehicle) || ismob(my_mob.buckled))
diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm
index 2534755873..f32ae4aa74 100644
--- a/code/modules/mob/mob_transformation_simple.dm
+++ b/code/modules/mob/mob_transformation_simple.dm
@@ -5,7 +5,7 @@
/mob/proc/change_mob_type(var/new_type = null, var/turf/location = null, var/new_name = null as text, var/delete_old_mob = 0 as num, var/subspecies)
if(istype(src,/mob/new_player))
- to_chat(usr, "cannot convert players who have not entered yet.")
+ to_chat(usr, span_red("cannot convert players who have not entered yet."))
return
if(!new_type)
@@ -19,7 +19,7 @@
return
if( new_type == /mob/new_player )
- to_chat(usr, "cannot convert into a new_player mob type.")
+ to_chat(usr, span_red("cannot convert into a new_player mob type."))
return
var/mob/M
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 5a980c13f5..b4e1bd0dee 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -208,7 +208,7 @@
if(href_list["late_join"])
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
- to_chat(usr, "The round is either not ready, or has already finished...")
+ to_chat(usr, span_red("The round is either not ready, or has already finished..."))
return
var/time_till_respawn = time_till_respawn()
@@ -455,7 +455,7 @@
if (src != usr)
return 0
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
- to_chat(usr, "The round is either not ready, or has already finished...")
+ to_chat(usr, span_red("The round is either not ready, or has already finished..."))
return 0
if(!config.enter_allowed)
to_chat(usr, "There is an administrative lock on entering the game!")
diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/new_player/poll.dm
index 41417a63e2..97b49a2d6b 100644
--- a/code/modules/mob/new_player/poll.dm
+++ b/code/modules/mob/new_player/poll.dm
@@ -103,7 +103,7 @@
break
qdel(select_query) //CHOMPEdit TGSQL
if(!found)
- to_chat(usr, "Poll question details not found.")
+ to_chat(usr, span_red("Poll question details not found."))
return
switch(polltype)
@@ -360,7 +360,7 @@
break
qdel(select_query) //CHOMPEdit TGSQL
if(!validpoll)
- to_chat(usr, "Poll is not valid.")
+ to_chat(usr, span_red("Poll is not valid."))
return
var/DBQuery/select_query2 = SSdbcore.NewQuery("SELECT id FROM erro_poll_option WHERE id = [optionid] AND pollid = [pollid]") //CHOMPEdit TGSQL
@@ -373,7 +373,7 @@
break
if(!validoption)
- to_chat(usr, "Poll option is not valid.")
+ to_chat(usr, span_red("Poll option is not valid."))
return
var/alreadyvoted = 0
@@ -387,11 +387,11 @@
break
qdel(voted_query) //CHOMPEdit TGSQL
if(!multichoice && alreadyvoted)
- to_chat(usr, "You already voted in this poll.")
+ to_chat(usr, span_red("You already voted in this poll."))
return
if(multichoice && (alreadyvoted >= multiplechoiceoptions))
- to_chat(usr, "You already have more than [multiplechoiceoptions] logged votes on this poll. Enough is enough. Contact the database admin if this is an error.")
+ to_chat(usr, span_red("You already have more than [multiplechoiceoptions] logged votes on this poll. Enough is enough. Contact the database admin if this is an error."))
return
var/adminrank = "Player"
@@ -402,7 +402,7 @@
var/DBQuery/insert_query = SSdbcore.NewQuery("INSERT INTO erro_poll_vote (id ,datetime ,pollid ,optionid ,ckey ,ip ,adminrank) VALUES (null, Now(), [pollid], [optionid], :t_ckey, '[usr.client.address]', '[adminrank]')", list("t_ckey" = usr.ckey)) //CHOMPEdit TGSQL
insert_query.Execute()
- to_chat(usr, "Vote successful.")
+ to_chat(usr, span_blue("Vote successful."))
qdel(insert_query) //CHOMPEdit TGSQL
usr << browse(null,"window=playerpoll")
@@ -428,7 +428,7 @@
break
qdel(select_query) //CHOMPEdit TGSQL
if(!validpoll)
- to_chat(usr, "Poll is not valid.")
+ to_chat(usr, span_red("Poll is not valid."))
return
var/alreadyvoted = 0
@@ -441,7 +441,7 @@
break
qdel(voted_query) //CHOMPEdit TGSQL
if(alreadyvoted)
- to_chat(usr, "You already sent your feedback for this poll.")
+ to_chat(usr, span_red("You already sent your feedback for this poll."))
return
var/adminrank = "Player"
@@ -461,7 +461,7 @@
var/DBQuery/insert_query = SSdbcore.NewQuery("INSERT INTO erro_poll_textreply (id ,datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (null, Now(), [pollid], :t_ckey, '[usr.client.address]', :t_reply, '[adminrank]')", list("t_ckey" = usr.ckey, "t_reply" = replytext)) //CHOMPEdit TGSQL
insert_query.Execute()
- to_chat(usr, "Feedback logging successful.")
+ to_chat(usr, span_blue("Feedback logging successful."))
qdel(insert_query) //CHOMPEdit TGSQL
usr << browse(null,"window=playerpoll")
@@ -487,7 +487,7 @@
break
qdel(select_query) //CHOMPEdit TGSQL
if(!validpoll)
- to_chat(usr, "Poll is not valid.")
+ to_chat(usr, span_red("Poll is not valid."))
return
var/DBQuery/select_query2 = SSdbcore.NewQuery("SELECT id FROM erro_poll_option WHERE id = [optionid] AND pollid = [pollid]") //CHOMPEdit TGSQL
@@ -500,7 +500,7 @@
break
qdel(select_query2) //CHOMPEdit TGSQL
if(!validoption)
- to_chat(usr, "Poll option is not valid.")
+ to_chat(usr, span_red("Poll option is not valid."))
return
var/alreadyvoted = 0
@@ -513,7 +513,7 @@
break
qdel(voted_query) //CHOMPEdit TGSQL
if(alreadyvoted)
- to_chat(usr, "You already voted in this poll.")
+ to_chat(usr, span_red("You already voted in this poll."))
return
var/adminrank = "Player"
@@ -524,6 +524,6 @@
var/DBQuery/insert_query = SSdbcore.NewQuery("INSERT INTO erro_poll_vote (id ,datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (null, Now(), [pollid], [optionid], '[usr.ckey]', '[usr.client.address]', '[adminrank]', :t_rating)", list("t_ckey" = usr.ckey, "t_rating" = rating)) //CHOMPEdit TGSQL
insert_query.Execute()
- to_chat(usr, "Vote successful.")
+ to_chat(usr, span_blue("Vote successful."))
qdel(insert_query) //CHOMPEdit TGSQL
- usr << browse(null,"window=playerpoll")
\ No newline at end of file
+ usr << browse(null,"window=playerpoll")
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 9cf3668292..6f2f9cb8a6 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -29,7 +29,7 @@
set category = "IC"
if(say_disabled) //This is here to try to identify lag problems
- to_chat(usr, "Speech is currently admin-disabled.")
+ to_chat(usr, span_red("Speech is currently admin-disabled."))
return
//VOREStation Addition Start
if(forced_psay)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index dee45177be..9d9d036829 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -258,7 +258,7 @@
var/mobpath = tgui_input_list(usr, "Which type of mob should [src] turn into?", "Choose a type", mobtypes)
if(!safe_animal(mobpath))
- to_chat(usr, "Sorry but this mob type is currently unavailable.")
+ to_chat(usr, span_red("Sorry but this mob type is currently unavailable."))
return
if(transforming)
@@ -292,7 +292,7 @@
var/mobpath = tgui_input_list(usr, "Which type of mob should [src] turn into?", "Choose a type", mobtypes)
if(!safe_animal(mobpath))
- to_chat(usr, "Sorry but this mob type is currently unavailable.")
+ to_chat(usr, span_red("Sorry but this mob type is currently unavailable."))
return
var/mob/new_mob = new mobpath(src.loc)
@@ -341,6 +341,3 @@
//Not in here? Must be untested!
return 0
-
-
-
diff --git a/code/modules/multiz/movement_vr.dm b/code/modules/multiz/movement_vr.dm
index db9057d6c0..c77ab2c041 100644
--- a/code/modules/multiz/movement_vr.dm
+++ b/code/modules/multiz/movement_vr.dm
@@ -48,11 +48,11 @@
pred.loc = fallloc
if(!safe_fall)
pred.Weaken(8)
- pred.visible_message("\The [pred] falls right onto \the [prey]!")
+ pred.visible_message("\The [pred] falls right onto \the [prey]!")
else if(prey.vore_selected && prey.can_be_drop_pred && pred.can_be_drop_prey && pred.drop_vore && prey.drop_vore)
prey.feed_grabbed_to_self_falling_nom(prey,pred)
prey.Weaken(4)
- prey.visible_message("\The [pred] falls right into \the [prey]!")
+ prey.visible_message("\The [pred] falls right into \the [prey]!")
else
pred.loc = prey.loc
if(!safe_fall)
diff --git a/code/modules/news/new_newspaper.dm b/code/modules/news/new_newspaper.dm
index 3962f80cf4..d84a2a53c4 100644
--- a/code/modules/news/new_newspaper.dm
+++ b/code/modules/news/new_newspaper.dm
@@ -132,7 +132,7 @@ obj/item/weapon/newspaper/Topic(href, href_list)
obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user)
if(istype(W, /obj/item/weapon/pen))
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_blue("There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?"))
else
var/s = sanitize(tgui_input_text(user, "Write something", "Newspaper", ""))
s = sanitize(s)
diff --git a/code/modules/news/newspaper.dm b/code/modules/news/newspaper.dm
index 9eae4b19ee..d58b9446b2 100644
--- a/code/modules/news/newspaper.dm
+++ b/code/modules/news/newspaper.dm
@@ -133,7 +133,7 @@
/obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
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_blue("There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?"))
else
var/s = sanitize(tgui_input_text(user, "Write something", "Newspaper", ""))
s = sanitize(s)
@@ -144,4 +144,4 @@
scribble_page = curr_page
scribble = s
attack_self(user)
- return
\ No newline at end of file
+ return
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index e8901e3274..e6ce39ef18 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -120,10 +120,10 @@ var/const/CE_STABLE_THRESHOLD = 0.5
pale = 1
update_icons_body()
var/word = pick("dizzy","woozy","faint","disoriented","unsteady")
- to_chat(src, "You feel slightly [word]")
+ to_chat(src, span_red("You feel slightly [word]"))
if(prob(1))
var/word = pick("dizzy","woozy","faint","disoriented","unsteady")
- to_chat(src, "You feel [word]")
+ to_chat(src, span_red("You feel [word]"))
if(getOxyLoss() < 20 * threshold_coef)
adjustOxyLoss(3 * dmg_coef)
else if(blood_volume_raw >= species.blood_volume*species.blood_level_danger)
@@ -137,13 +137,13 @@ var/const/CE_STABLE_THRESHOLD = 0.5
if(prob(15))
Paralyse(rand(1,3))
var/word = pick("dizzy","woozy","faint","disoriented","unsteady")
- to_chat(src, "You feel dangerously [word]")
+ to_chat(src, span_red("You feel dangerously [word]"))
else if(blood_volume_raw >= species.blood_volume*species.blood_level_fatal)
adjustOxyLoss(5 * dmg_coef)
// adjustToxLoss(3 * dmg_coef)
if(prob(15))
var/word = pick("dizzy","woozy","faint","disoriented","unsteady")
- to_chat(src, "You feel extremely [word]")
+ to_chat(src, span_red("You feel extremely [word]"))
else //Not enough blood to survive (usually)
if(!pale)
pale = 1
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 1a3c1e8532..e16524875f 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -440,7 +440,7 @@
qdel(src)
else
- to_chat(user, "You must hold \the [P] steady to burn \the [src].")
+ to_chat(user, span_red("You must hold \the [P] steady to burn \the [src]."))
/obj/item/weapon/paper/Topic(href, href_list)
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 287927a6d3..cad2cff56f 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -94,7 +94,7 @@
qdel(src)
else
- to_chat(user, "You must hold \the [P] steady to burn \the [src].")
+ to_chat(user, span_red("You must hold \the [P] steady to burn \the [src]."))
/obj/item/weapon/paper_bundle/examine(mob/user)
. = ..()
@@ -243,4 +243,4 @@
if(photo)
desc += "\nThere is a photo attached to it."
add_overlay(image('icons/obj/bureaucracy.dmi', "clip"))
- return
\ No newline at end of file
+ return
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 5ce9eacd99..fcaa6ca414 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -230,7 +230,7 @@
toner--
if(toner == 0)
playsound(src, "sound/machines/buzz-sigh.ogg", 100)
- visible_message("A red light on \the [src] flashes, indicating that it is out of toner.")
+ visible_message("A [span_red("red")] light on \the [src] flashes, indicating that it is out of toner.")
return c
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index 189f029501..aab380fe48 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -156,12 +156,12 @@
src.anchored = FALSE
disconnect_from_network()
else
- to_chat(user, "Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!")
+ to_chat(user, span_red("Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!"))
return
if(istype(W, /obj/item/weapon/am_containment))
if(fueljar)
- to_chat(user, "There is already a [fueljar] inside!")
+ to_chat(user, span_red("There is already a [fueljar] inside!"))
return
fueljar = W
user.remove_from_mob(W)
@@ -327,4 +327,4 @@
check_core_stability()
updateDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/antimatter/engine.dm b/code/modules/power/antimatter/engine.dm
index c76f329b50..224c12e381 100644
--- a/code/modules/power/antimatter/engine.dm
+++ b/code/modules/power/antimatter/engine.dm
@@ -109,7 +109,7 @@
antiH_fuel = residual_matter
for(var/mob/M in hearers(src, null))
- M.show_message(text("You hear a loud bang!"))
+ M.show_message(span_red(text("You hear a loud bang!")))
//Q = k x (delta T)
@@ -161,7 +161,7 @@
if(energy > convert2energy(8e-12)) //TOO MUCH ENERGY
for(var/mob/M in hearers(src, null))
- M.show_message(text("You hear a loud whirring!"))
+ M.show_message(span_red(text("You hear a loud whirring!")))
sleep(20)
//Q = k x (delta T)
@@ -180,7 +180,7 @@
if(energy > convert2energy(8e-12)) //FAR TOO MUCH ENERGY STILL
for(var/mob/M in hearers(src, null))
- M.show_message(text("BANG!"))
+ M.show_message(span_red(text("BANG!")))
new /obj/effect/bhole(src.loc)
else //this amount of energy is okay so it does the proper output thing
diff --git a/code/modules/power/antimatter/fuel.dm b/code/modules/power/antimatter/fuel.dm
index bd78186a96..9d94e80c44 100644
--- a/code/modules/power/antimatter/fuel.dm
+++ b/code/modules/power/antimatter/fuel.dm
@@ -77,7 +77,7 @@
if("Anti-Hydrogen")
M.gib() //Yikes!
if("Hydrogen")
- to_chat(M, "You feel very light, as if you might just float away...")
+ to_chat(M, span_blue("You feel very light, as if you might just float away..."))
qdel(src)
return
@@ -96,5 +96,5 @@
return
else
for(var/mob/O in viewers(M, null))
- O.show_message(text("[M] ate the [content ? content : "empty canister"]!"), 1)
+ O.show_message(span_red(text("[M] ate the [content ? content : "empty canister"]!")), 1)
src.injest(M)
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 3dc9e97af3..753ed9c788 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -68,7 +68,7 @@
/obj/machinery/am_shielding/Destroy()
if(control_unit) control_unit.remove_shielding(src)
if(processing) shutdown_core()
- visible_message("The [src.name] melts!")
+ visible_message(span_red("The [src.name] melts!"))
//Might want to have it leave a mess on the floor but no sprites for now
..()
return
@@ -202,4 +202,4 @@
qdel(src)
return
..()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm
index 2dffe3c228..1b2e03cb74 100644
--- a/code/modules/power/breaker_box.dm
+++ b/code/modules/power/breaker_box.dm
@@ -53,18 +53,18 @@
/obj/machinery/power/breakerbox/attack_ai(mob/user)
if(update_locked)
- to_chat(user, "System locked. Please try again later.")
+ to_chat(user, span_red("System locked. Please try again later."))
return
if(busy)
- to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.")
+ to_chat(user, span_red("System is busy. Please wait until current operation is finished before changing power settings."))
return
busy = 1
- to_chat(user, "Updating power settings...")
+ to_chat(user, span_green("Updating power settings..."))
if(do_after(user, 50))
set_state(!on)
- to_chat(user, "Update Completed. New setting:[on ? "on": "off"]")
+ to_chat(user, span_green("Update Completed. New setting:[on ? "on": "off"]"))
update_locked = 1
spawn(600)
update_locked = 0
@@ -73,16 +73,16 @@
/obj/machinery/power/breakerbox/attack_hand(mob/user)
if(update_locked)
- to_chat(user, "System locked. Please try again later.")
+ to_chat(user, span_red("System locked. Please try again later."))
return
if(busy)
- to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.")
+ to_chat(user, span_red("System is busy. Please wait until current operation is finished before changing power settings."))
return
busy = 1
for(var/mob/O in viewers(user))
- O.show_message(text("[user] started reprogramming [src]!"), 1)
+ O.show_message(span_red(text("[user] started reprogramming [src]!")), 1)
if(do_after(user, 50))
set_state(!on)
@@ -102,7 +102,7 @@
RCon_tag = newtag
to_chat(user, "You changed the RCON tag to: [newtag]")
if(on)
- to_chat(user, "Disable the breaker before performing maintenance.")
+ to_chat(user, span_red("Disable the breaker before performing maintenance."))
return
if(default_deconstruction_screwdriver(user, W))
return
@@ -152,4 +152,4 @@
update_locked = 0
/obj/machinery/power/breakerbox/process()
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 0b06dfbf31..00e855e047 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -985,7 +985,7 @@ var/list/possible_cable_coil_colours = list(
var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc)
CC.amount = N
CC.update_icon()
- to_chat(user,"You take [N] units of wire from the [src].")
+ to_chat(user,span_blue("You take [N] units of wire from the [src]."))
if (CC)
user.put_in_hands(CC)
src.add_fingerprint(user)
diff --git a/code/modules/power/cable_heavyduty.dm b/code/modules/power/cable_heavyduty.dm
index e37a8755d6..cc0cdcd6a1 100644
--- a/code/modules/power/cable_heavyduty.dm
+++ b/code/modules/power/cable_heavyduty.dm
@@ -18,13 +18,13 @@
return
if(W.has_tool_quality(TOOL_WIRECUTTER))
- to_chat(usr, "These cables are too tough to be cut with those [W.name].")
+ to_chat(usr, span_blue("These cables are too tough to be cut with those [W.name]."))
return
else if(istype(W, /obj/item/stack/cable_coil))
- to_chat(usr, "You will need heavier cables to connect to these.")
+ to_chat(usr, span_blue("You will need heavier cables to connect to these."))
return
else
..()
/obj/structure/cable/heavyduty/cableColor(var/colorC)
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 58babbe99b..4ceae2877d 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -797,7 +797,7 @@ var/global/list/light_type_cache = list()
if(H.species.can_shred(H))
user.setClickCooldown(user.get_attack_speed())
for(var/mob/M in viewers(src))
- M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
+ M.show_message(span_red("[user.name] smashed the light!"), 3, "You hear a tinkle of breaking glass", 2)
broken()
return
@@ -1185,7 +1185,7 @@ var/global/list/light_type_cache = list()
/obj/item/weapon/light/proc/shatter()
if(status == LIGHT_OK || status == LIGHT_BURNED)
- src.visible_message("[name] shatters."," You hear a small glass object shatter.")
+ src.visible_message(span_red("[name] shatters."),span_red("You hear a small glass object shatter."))
status = LIGHT_BROKEN
force = 5
sharp = TRUE
diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm
index 27f86867ed..9471665d47 100644
--- a/code/modules/power/pacman2.dm
+++ b/code/modules/power/pacman2.dm
@@ -63,28 +63,28 @@
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/tank/phoron))
if(P)
- to_chat(user, "The generator already has a phoron tank loaded!")
+ to_chat(user, span_red("The generator already has a phoron tank loaded!"))
return
P = O
user.drop_item()
O.loc = src
- to_chat(user, "You add the phoron tank to the generator.")
+ to_chat(user, span_blue("You add the phoron tank to the generator."))
else if(!active)
if(O.has_tool_quality(TOOL_WRENCH))
anchored = !anchored
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
if(anchored)
- to_chat(user, "You secure the generator to the floor.")
+ to_chat(user, span_blue("You secure the generator to the floor."))
else
- to_chat(user, "You unsecure the generator from the floor.")
+ to_chat(user, span_blue("You unsecure the generator from the floor."))
SSmachines.makepowernets()
else if(O.has_tool_quality(TOOL_SCREWDRIVER))
open = !open
playsound(src, O.usesound, 50, 1)
if(open)
- to_chat(user, "You open the access panel.")
+ to_chat(user, span_blue("You open the access panel."))
else
- to_chat(user, "You close the access panel.")
+ to_chat(user, span_blue("You close the access panel."))
else if(O.has_tool_quality(TOOL_CROWBAR) && !open)
playsound(src, O.usesound, 50, 1)
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 59abb2cca7..fcaea3b899 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -54,17 +54,17 @@ var/global/list/rad_collectors = list()
investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gas["phoron"]/0.29)]%":"It is empty"].","singulo")
return
else
- to_chat(user, "The controls are locked!")
+ to_chat(user, span_red("The controls are locked!"))
return
/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/tank/phoron))
if(!src.anchored)
- to_chat(user, "The [src] needs to be secured to the floor first.")
+ to_chat(user, span_red("The [src] needs to be secured to the floor first."))
return 1
if(src.P)
- to_chat(user, "There's already a phoron tank loaded.")
+ to_chat(user, span_red("There's already a phoron tank loaded."))
return 1
user.drop_item()
src.P = W
@@ -77,7 +77,7 @@ var/global/list/rad_collectors = list()
return 1
else if(W.has_tool_quality(TOOL_WRENCH))
if(P)
- to_chat(user, "Remove the phoron tank first.")
+ to_chat(user, span_blue("Remove the phoron tank first."))
return 1
playsound(src, W.usesound, 75, 1)
src.anchored = !src.anchored
@@ -96,9 +96,9 @@ var/global/list/rad_collectors = list()
to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]")
else
src.locked = 0 //just in case it somehow gets locked
- to_chat(user, "The controls can only be locked when the [src] is active.")
+ to_chat(user, span_red("The controls can only be locked when the [src] is active."))
else
- to_chat(user, "Access denied!")
+ to_chat(user, span_red("Access denied!"))
return 1
return ..()
@@ -157,4 +157,3 @@ var/global/list/rad_collectors = list()
flick("ca_deactive", src)
update_icons()
return
-
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 17c4d770e4..657f0a2373 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -133,13 +133,13 @@ field_generator power level display
"You hear ratchet")
src.anchored = FALSE
if(2)
- to_chat(user, "The [src.name] needs to be unwelded from the floor.")
+ to_chat(user, span_red("The [src.name] needs to be unwelded from the floor."))
return
else if(W.has_tool_quality(TOOL_WELDER))
var/obj/item/weapon/weldingtool/WT = W.get_welder()
switch(state)
if(0)
- to_chat(user, "The [src.name] needs to be wrenched to the floor.")
+ to_chat(user, span_red("The [src.name] needs to be wrenched to the floor."))
return
if(1)
if (WT.remove_fuel(0,user))
@@ -227,7 +227,7 @@ field_generator power level display
return 1
else
for(var/mob/M in viewers(src))
- M.show_message("\The [src] shuts down!")
+ M.show_message(span_red("\The [src] shuts down!"))
turn_off()
log_game("FIELDGEN([x],[y],[z]) Lost power and was ON.")
investigate_log("ran out of power and deactivated","singulo")
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 47bd37f008..902616f934 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -348,7 +348,7 @@
total_system_failure(failure_probability, user)
return
- to_chat(user, "You have disassembled the SMES cell!")
+ to_chat(user, span_red("You have disassembled the SMES cell!"))
dismantle()
return
@@ -367,4 +367,4 @@
W.loc = src
recalc_coils()
else
- to_chat(user, "You can't insert more coils into this SMES unit!")
+ to_chat(user, span_red("You can't insert more coils into this SMES unit!"))
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 97d9ff488b..179b6e7b78 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -416,7 +416,7 @@ GLOBAL_LIST_EMPTY(solars_list)
playsound(src, I.usesound, 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
- to_chat(user, "The broken glass falls out.")
+ to_chat(user, span_blue("The broken glass falls out."))
var/obj/structure/frame/A = new /obj/structure/frame/computer( src.loc )
new /obj/item/weapon/material/shard( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
@@ -428,7 +428,7 @@ GLOBAL_LIST_EMPTY(solars_list)
A.anchored = TRUE
qdel(src)
else
- to_chat(user, "You disconnect the monitor.")
+ to_chat(user, span_blue("You disconnect the monitor."))
var/obj/structure/frame/A = new /obj/structure/frame/computer( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
for (var/obj/C in src)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 1087de3ca2..1a809c3cdf 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -49,7 +49,7 @@
/obj/machinery/power/supermatter
name = "Supermatter"
- desc = "A strangely translucent and iridescent crystal. You get headaches just from looking at it."
+ desc = "A strangely translucent and iridescent crystal. You get headaches just from looking at it."
icon = 'icons/obj/supermatter.dmi'
icon_state = "darkmatter"
plane = MOB_PLANE // So people can walk behind the top part
@@ -606,7 +606,7 @@
/obj/machinery/power/supermatter/shard //Small subtype, less efficient and more sensitive, but less boom.
name = "Supermatter Shard"
- desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. You get headaches just from looking at it."
+ desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. You get headaches just from looking at it."
icon_state = "darkmatter_shard"
base_icon_state = "darkmatter_shard"
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index a09e7cfb61..2330a4dad1 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -33,18 +33,18 @@
/obj/item/ammo_casing/attackby(obj/item/I as obj, mob/user as mob)
if(I.has_tool_quality(TOOL_SCREWDRIVER))
if(!BB)
- to_chat(user, "There is no bullet in the casing to inscribe anything into.")
+ to_chat(user, span_blue("There is no bullet in the casing to inscribe anything into."))
return
var/tmp_label = ""
var/label_text = sanitizeSafe(tgui_input_text(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label,MAX_NAME_LEN), MAX_NAME_LEN)
if(length(label_text) > 20)
- to_chat(user, "The inscription can be at most 20 characters long.")
+ to_chat(user, span_red("The inscription can be at most 20 characters long."))
else if(!label_text)
- to_chat(user, "You scratch the inscription off of [initial(BB)].")
+ to_chat(user, span_blue("You scratch the inscription off of [initial(BB)]."))
BB.name = initial(BB.name)
else
- to_chat(user, "You inscribe \"[label_text]\" into \the [initial(BB.name)].")
+ to_chat(user, span_blue("You inscribe \"[label_text]\" into \the [initial(BB.name)]."))
BB.name = "[initial(BB.name)] (\"[label_text]\")"
else if(istype(I, /obj/item/ammo_magazine) && isturf(loc)) // Mass magazine reloading.
var/obj/item/ammo_magazine/box = I
@@ -281,4 +281,4 @@
/obj/item/ammo_magazine/ammo_box/examine(mob/user)
. = ..()
- . += to_chat(usr, "Alt-click to extract contents.")
\ No newline at end of file
+ . += to_chat(usr, "Alt-click to extract contents.")
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 0cc926e432..116ce04520 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -721,9 +721,9 @@
var/mob/living/carbon/human/M = user
mouthshoot = 1
- M.visible_message("[user] sticks their gun in their mouth, ready to pull the trigger...")
+ M.visible_message(span_red("[user] sticks their gun in their mouth, ready to pull the trigger..."))
if(!do_after(user, 40))
- M.visible_message("[user] decided life was worth living")
+ M.visible_message(span_blue("[user] decided life was worth living"))
mouthshoot = 0
return
var/obj/item/projectile/in_chamber = consume_next_projectile()
diff --git a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm
index 9de31a0c1d..56971755ff 100644
--- a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm
+++ b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm
@@ -144,8 +144,8 @@
if(prey != user && prey.can_be_drop_prey)
prey.forceMove(belly_dest)
vore_happened = TRUE
- to_chat(prey, "[living_user] materializes around you, as you end up in their [belly_dest]!")
- to_chat(living_user, "You materialize around [prey] as they end up in your [belly_dest]!")
+ to_chat(prey, "[living_user] materializes around you, as you end up in their [belly_dest]!")
+ to_chat(living_user, "You materialize around [prey] as they end up in your [belly_dest]!")
if(can_dropnom && !vore_happened && living_user.can_be_drop_prey)
var/mob/living/pred
for(var/mob/living/potential_pred in ToTurf)
@@ -159,8 +159,8 @@
belly_dest = pick(pred.vore_organs)
if(belly_dest)
living_user.forceMove(belly_dest)
- to_chat(pred, "[living_user] materializes inside you as they end up in your [belly_dest]!")
- to_chat(living_user, "You materialize inside [pred] as you end up in their [belly_dest]!")
+ to_chat(pred, "[living_user] materializes inside you as they end up in your [belly_dest]!")
+ to_chat(living_user, "You materialize inside [pred] as you end up in their [belly_dest]!")
else
for(var/obj/O in FromTurf)
@@ -185,8 +185,8 @@
belly_dest = pick(living_user.vore_organs)
if(belly_dest)
M.forceMove(belly_dest)
- to_chat(living_user, "[M] materializes inside you as they end up in your [belly_dest]!")
- to_chat(M, "You materialize inside [living_user] as you end up in their [belly_dest]!")
+ to_chat(living_user, "[M] materializes inside you as they end up in your [belly_dest]!")
+ to_chat(M, "You materialize inside [living_user] as you end up in their [belly_dest]!")
else if(can_dropnom && living_user.can_be_drop_prey && M.can_be_drop_pred && !user_vored)
var/obj/belly/belly_dest
if(M.vore_selected)
@@ -196,8 +196,8 @@
if(belly_dest)
living_user.forceMove(belly_dest)
user_vored = TRUE
- to_chat(living_user, "[M] materializes around you, as you end up in their [belly_dest]!")
- to_chat(M, "You materialize around [living_user] as they end up in your [belly_dest]!")
+ to_chat(living_user, "[M] materializes around you, as you end up in their [belly_dest]!")
+ to_chat(M, "You materialize around [living_user] as they end up in your [belly_dest]!")
/obj/item/weapon/bluespace_harpoon/attack_self(mob/living/user as mob)
diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm
index 843bb52ae5..14e0c5dea2 100644
--- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm
+++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm
@@ -326,7 +326,7 @@
/obj/item/projectile/beam/medical_cell/shrink/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(0.5)
- target.show_message("The beam fires into your body, changing your size!")
+ target.show_message(span_blue("The beam fires into your body, changing your size!"))
target.update_icon()
else
return 1
@@ -340,7 +340,7 @@
/obj/item/projectile/beam/medical_cell/grow/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(2.0)
- target.show_message("The beam fires into your body, changing your size!")
+ target.show_message(span_blue("The beam fires into your body, changing your size!"))
target.update_icon()
else
return 1
@@ -354,7 +354,7 @@
/obj/item/projectile/beam/medical_cell/normalsize/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(1)
- target.show_message("The beam fires into your body, changing your size!")
+ target.show_message(span_blue("The beam fires into your body, changing your size!"))
target.update_icon()
else
return 1
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/launcher.dm b/code/modules/projectiles/guns/launcher.dm
index 412a032d3a..e0494e534d 100644
--- a/code/modules/projectiles/guns/launcher.dm
+++ b/code/modules/projectiles/guns/launcher.dm
@@ -15,7 +15,7 @@
//Override this to avoid a runtime with suicide handling.
/obj/item/weapon/gun/launcher/handle_suicide(mob/living/user)
- to_chat(user, "Shooting yourself with \a [src] is pretty tricky. You can't seem to manage it.")
+ to_chat(user, span_red("Shooting yourself with \a [src] is pretty tricky. You can't seem to manage it."))
return
/obj/item/weapon/gun/launcher/proc/update_release_force(obj/item/projectile)
diff --git a/code/modules/projectiles/guns/launcher/confetti.dm b/code/modules/projectiles/guns/launcher/confetti.dm
index 3d23b19385..a6924b3434 100644
--- a/code/modules/projectiles/guns/launcher/confetti.dm
+++ b/code/modules/projectiles/guns/launcher/confetti.dm
@@ -17,17 +17,17 @@
/obj/item/weapon/gun/launcher/confetti_cannon/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 2)
- . += "It's loaded with [confetti_charge] ball\s of confetti."
+ . += span_blue("It's loaded with [confetti_charge] ball\s of confetti.")
/obj/item/weapon/gun/launcher/confetti_cannon/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/shreddedp))
if(confetti_charge < max_confetti)
user.drop_item()
++confetti_charge
- to_chat(usr, "You put the paper in the [src].")
+ to_chat(usr, span_blue("You put the paper in the [src]."))
qdel(I)
else
- to_chat(usr, "[src] cannot hold more paper.")
+ to_chat(usr, span_red("[src] cannot hold more paper."))
/obj/item/weapon/gun/launcher/confetti_cannon/proc/pump(mob/M as mob)
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
@@ -35,11 +35,11 @@
if(confetti_charge)
chambered = new /obj/item/weapon/grenade/confetti/party_ball
--confetti_charge
- to_chat(usr, "You compress a new confetti ball.")
+ to_chat(usr, span_blue("You compress a new confetti ball."))
else
- to_chat(usr, "The [src] is out of confetti!")
+ to_chat(usr, span_red("The [src] is out of confetti!"))
else
- to_chat(usr, "The [src] is already loaded!")
+ to_chat(usr, span_red("The [src] is already loaded!"))
/obj/item/weapon/gun/launcher/confetti_cannon/attack_self(mob/user)
pump(user)
@@ -80,26 +80,26 @@
switch(choice)
if("Confetti")
chambered = new /obj/item/weapon/grenade/confetti/party_ball
- to_chat(usr, "Confetti loaded.")
+ to_chat(usr, span_blue("Confetti loaded."))
if(istype(usr,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = usr
R.cell.charge -= 200
if("Banana Peel")
chambered = new /obj/item/weapon/bananapeel
- to_chat(usr, "Banana peel loaded.")
+ to_chat(usr, span_blue("Banana peel loaded."))
if(istype(usr,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = usr
R.cell.charge -= 200
if("Cream Pie")
chambered = new /obj/item/weapon/reagent_containers/food/snacks/pie
- to_chat(usr, "Banana cream pie loaded.")
+ to_chat(usr, span_blue("Banana cream pie loaded."))
if(istype(usr,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = usr
R.cell.charge -= 200
else
- to_chat(usr, "The [src] is already loaded!")
+ to_chat(usr, span_red("The [src] is already loaded!"))
/obj/item/weapon/gun/launcher/confetti_cannon/robot/consume_next_projectile()
if(istype(chambered,/obj/item/weapon/grenade/confetti/party_ball))
chambered.activate(null)
- return chambered
\ No newline at end of file
+ return chambered
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index 9545e923ac..4032567202 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -19,7 +19,7 @@
/obj/item/weapon/gun/launcher/rocket/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 2)
- . += "[rockets.len] / [max_rockets] rockets."
+ . += span_blue("[rockets.len] / [max_rockets] rockets.")
/obj/item/weapon/gun/launcher/rocket/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/ammo_casing/rocket))
@@ -27,10 +27,10 @@
user.drop_item()
I.loc = src
rockets += I
- to_chat(user, "You put the rocket in [src].")
- to_chat(user, "[rockets.len] / [max_rockets] rockets.")
+ to_chat(user, span_blue("You put the rocket in [src]."))
+ to_chat(user, span_blue("[rockets.len] / [max_rockets] rockets."))
else
- to_chat(usr, "[src] cannot hold more rockets.")
+ to_chat(usr, span_red(">[src] cannot hold more rockets."))
/obj/item/weapon/gun/launcher/rocket/consume_next_projectile()
if(rockets.len)
diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm
index 0e228aa94e..b33d4ac1c9 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic.dm
@@ -134,12 +134,12 @@
. += "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%."
if(state & ICON_BAD)
- . += "The capacitor charge indicator is blinking red. Maybe you should check the cell or capacitor."
+ . += "The capacitor charge indicator is blinking [span_red("red")]. Maybe you should check the cell or capacitor."
else
if(state & ICON_CHARGE)
- . += "The capacitor charge indicator is amber."
+ . += "The capacitor charge indicator is [span_orange("amber")]."
else
- . += "The capacitor charge indicator is green."
+ . += "The capacitor charge indicator is [span_green("green")]."
/obj/item/weapon/gun/magnetic/attackby(var/obj/item/thing, var/mob/user)
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index c0a6180352..6fde481f1f 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -111,16 +111,16 @@
/obj/item/weapon/gun/projectile/dartgun/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(!istype(I, container_type))
- to_chat(user, "[I] doesn't seem to fit into [src].")
+ to_chat(user, span_blue("[I] doesn't seem to fit into [src]."))
return
if(beakers.len >= max_beakers)
- to_chat(user, "[src] already has [max_beakers] beakers in it - another one isn't going to fit!")
+ to_chat(user, span_blue("[src] already has [max_beakers] beakers in it - another one isn't going to fit!"))
return
var/obj/item/weapon/reagent_containers/glass/beaker/B = I
user.drop_item()
B.loc = src
beakers += B
- to_chat(user, "You slot [B] into [src].")
+ to_chat(user, span_blue("You slot [B] into [src]."))
src.updateUsrDialog()
return 1
..()
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index d1db24718a..28541c8b87 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -163,7 +163,7 @@
M.Weaken(5)
var/datum/gender/TM = gender_datums[M.get_visible_gender()]
for (var/mob/V in viewers(src))
- V.show_message("[M] writhes in pain as [TM.his] vacuoles boil.", 3, "You hear the crunching of leaves.", 2)
+ V.show_message(span_red("[M] writhes in pain as [TM.his] vacuoles boil."), 3, span_red("You hear the crunching of leaves."), 2)
if(prob(35))
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
// V.show_message("[M] is mutated by the radiation beam.", 3, " You hear the snapping of twigs.", 2)
@@ -175,13 +175,13 @@
domutcheck(M,null)
else
M.adjustFireLoss(rand(5,15))
- M.show_message("The radiation beam singes you!")
+ M.show_message(span_red("The radiation beam singes you!"))
// for (var/mob/V in viewers(src))
// V.show_message("[M] is singed by the radiation beam.", 3, " You hear the crackle of burning leaves.", 2)
else if(istype(target, /mob/living/carbon/))
// for (var/mob/V in viewers(src))
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
- M.show_message("The radiation beam dissipates harmlessly through your body.")
+ M.show_message(span_blue("The radiation beam dissipates harmlessly through your body."))
else
return 1
@@ -218,7 +218,7 @@
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
M.adjust_nutrition(30)
else if (istype(target, /mob/living/carbon/))
- M.show_message("The radiation beam dissipates harmlessly through your body.")
+ M.show_message(span_blue("The radiation beam dissipates harmlessly through your body."))
else
return 1
diff --git a/code/modules/reagents/reagent_containers/blood_pack_vr.dm b/code/modules/reagents/reagent_containers/blood_pack_vr.dm
index 118ad57bb3..d6a15ae59a 100644
--- a/code/modules/reagents/reagent_containers/blood_pack_vr.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack_vr.dm
@@ -6,7 +6,7 @@
switch(reagents.get_master_reagent_id())
if("blood")
user.show_message("You sink your fangs into \the [src] and suck the blood out of it!")
- user.visible_message("[user] sinks their fangs into \the [src] and drains it!")
+ user.visible_message(span_red("[user] sinks their fangs into \the [src] and drains it!"))
user.adjust_nutrition(remove_volume*5)
reagents.remove_reagent(reagent_to_remove, remove_volume)
update_icon()
@@ -55,4 +55,4 @@
/obj/item/weapon/reagent_containers/blood/prelabeled/OMinus
name = "IV Pack (O-)"
desc = "Holds liquids used for transfusion. This one's label seems to be hardprinted. This one is labeled O-"
- blood_type = "O-"
\ No newline at end of file
+ blood_type = "O-"
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index cc8e41e7f8..a6494a8d31 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -278,7 +278,7 @@
if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
for(var/mob/O in viewers(world.view, user))
- O.show_message(text("[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1)
+ O.show_message(span_red(text("[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!")), 1)
user.remove_from_mob(src)
qdel(src)
diff --git a/code/modules/reagents/reagents/vore_vr.dm b/code/modules/reagents/reagents/vore_vr.dm
index 9520878095..715e12f5ff 100644
--- a/code/modules/reagents/reagents/vore_vr.dm
+++ b/code/modules/reagents/reagents/vore_vr.dm
@@ -113,7 +113,7 @@
else if(prob(1))
playsound(M, 'sound/vore/schlorp.ogg', 50, 1)
P.absorbed = 0
- M.visible_message("Something spills into [M]'s [lowertext(B.name)]!")
+ M.visible_message(span_green("Something spills into [M]'s [lowertext(B.name)]!"))
////////////////////////// TF Drugs //////////////////////////
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index b0110549af..c780b2280c 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -100,7 +100,7 @@
if(istype(I, /obj/item/weapon/storage/bag/trash))
var/obj/item/weapon/storage/bag/trash/T = I
- to_chat(user, "You empty the bag.")
+ to_chat(user, span_blue("You empty the bag."))
for(var/obj/item/O in T.contents)
T.remove_from_storage(O,src)
T.update_icon()
@@ -129,7 +129,7 @@
GM.client.eye = src
GM.forceMove(src)
for (var/mob/C in viewers(src))
- C.show_message("[GM.name] has been placed in the [src] by [user].", 3)
+ C.show_message(span_red("[GM.name] has been placed in the [src] by [user]."), 3)
qdel(G)
add_attack_logs(user,GM,"Disposals dunked")
@@ -233,7 +233,7 @@
return
if(user && user.loc == src)
- to_chat(user, "You cannot reach the controls from inside.")
+ to_chat(user, span_red("You cannot reach the controls from inside."))
return
// Clumsy folks can only flush it.
@@ -1277,7 +1277,7 @@
if(O.currTag)// Tag set
sort_tag = O.currTag
playsound(src, 'sound/machines/twobeep.ogg', 100, 1)
- to_chat(user, "Changed tag to '[sort_tag]'.")
+ to_chat(user, span_blue("Changed tag to '[sort_tag]'."))
updatename()
updatedesc()
@@ -1345,7 +1345,7 @@
if(O.currTag)// Tag set
sortType = O.currTag
playsound(src, 'sound/machines/twobeep.ogg', 100, 1)
- to_chat(user, "Changed filter to '[sortType]'.")
+ to_chat(user, span_blue("Changed filter to '[sortType]'."))
updatename()
updatedesc()
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index caa4df13bc..d630c3e6c1 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -59,7 +59,7 @@
if("Description")
var/str = sanitize(tgui_input_text(usr,"Label text?","Set label",""))
if(!str || !length(str))
- to_chat(user, "Invalid text.")
+ to_chat(user, span_red("Invalid text."))
return
if(!examtext && !nameset)
examtext = str
@@ -171,7 +171,7 @@
if("Description")
var/str = sanitize(tgui_input_text(usr,"Label text?","Set label",""))
if(!str || !length(str))
- to_chat(user, "Invalid text.")
+ to_chat(user, span_red("Invalid text."))
return
if(!examtext && !nameset)
examtext = str
@@ -241,7 +241,7 @@
if(user in target) //no wrapping closets that you are inside - it's not physically possible
return
- user.attack_log += text("\[[time_stamp()]\] Has used [src.name] on \ref[target]")
+ user.attack_log += text("\[[time_stamp()]\] [span_blue("Has used [src.name] on \ref[target]")]")
if (istype(target, /obj/item) && !(istype(target, /obj/item/weapon/storage) && !istype(target,/obj/item/weapon/storage/box)))
@@ -305,7 +305,7 @@
else if(src.amount < 3)
to_chat(user, "You need more paper.")
else
- to_chat(user, "The object you are trying to wrap is unsuitable for the sorting machinery!")
+ to_chat(user, span_blue("The object you are trying to wrap is unsuitable for the sorting machinery!"))
if (src.amount <= 0)
new /obj/item/weapon/c_tube( src.loc )
qdel(src)
@@ -315,7 +315,7 @@
/obj/item/weapon/packageWrap/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 0)
- . += "There are [amount] units of package wrap left!"
+ . += span_blue("There are [amount] units of package wrap left!")
/obj/structure/bigDelivery/Destroy()
if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index effc14b222..5330fd3fd6 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -175,7 +175,7 @@
feedback_inc("alert_keycard_auth_maintRevoke",1)
if("Emergency Response Team")
if(is_ert_blocked())
- to_chat(usr, "All emergency response teams are dispatched and can not be called at this time.")
+ to_chat(usr, span_red("All emergency response teams are dispatched and can not be called at this time."))
return
trigger_armed_response_team(1)
@@ -189,15 +189,15 @@ var/global/maint_all_access = 0
/proc/make_maint_all_access()
maint_all_access = 1
- to_world("Attention!")
- to_world("The maintenance access requirement has been revoked on all airlocks.")
+ to_world(span_red("Attention!"))
+ to_world(span_red("The maintenance access requirement has been revoked on all airlocks."))
/proc/revoke_maint_all_access()
maint_all_access = 0
- to_world("Attention!")
- to_world("The maintenance access requirement has been readded on all maintenance airlocks.")
+ to_world(span_red("Attention!"))
+ to_world(span_red("The maintenance access requirement has been readded on all maintenance airlocks."))
/obj/machinery/door/airlock/allowed(mob/M)
if(maint_all_access && src.check_access_list(list(access_maint_tunnels)))
return 1
- return ..(M)
\ No newline at end of file
+ return ..(M)
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index a3908a6a55..49610cbcd0 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -259,14 +259,14 @@
return
if (src.active)
- user.visible_message("\icon[src][bicon(src)] [user] deactivated the shield generator.", \
- "\icon[src][bicon(src)] You deactivate the shield generator.", \
+ user.visible_message(span_blue("\icon[src][bicon(src)] [user] deactivated the shield generator."), \
+ span_blue("\icon[src][bicon(src)] You deactivate the shield generator."), \
"You hear heavy droning fade out.")
src.shields_down()
else
if(anchored)
- user.visible_message("\icon[src][bicon(src)] [user] activated the shield generator.", \
- "\icon[src][bicon(src)] You activate the shield generator.", \
+ user.visible_message(span_blue("\icon[src][bicon(src)] [user] activated the shield generator."), \
+ span_blue("\icon[src][bicon(src)] You activate the shield generator."), \
"You hear heavy droning.")
src.shields_up()
else
@@ -283,10 +283,10 @@
if(W.has_tool_quality(TOOL_SCREWDRIVER))
playsound(src, W.usesound, 100, 1)
if(is_open)
- to_chat(user, "You close the panel.")
+ to_chat(user, span_blue("You close the panel."))
is_open = 0
else
- to_chat(user, "You open the panel and expose the wiring.")
+ to_chat(user, span_blue("You open the panel and expose the wiring."))
is_open = 1
else if(istype(W, /obj/item/stack/cable_coil) && malfunction && is_open)
@@ -306,15 +306,15 @@
return
if(anchored)
playsound(src, W.usesound, 100, 1)
- to_chat(user, "You unsecure the [src] from the floor!")
+ to_chat(user, span_blue("You unsecure the [src] from the floor!"))
if(active)
- to_chat(user, "The [src] shuts off!")
+ to_chat(user, span_blue("The [src] shuts off!"))
src.shields_down()
anchored = FALSE
else
if(istype(get_turf(src), /turf/space)) return //No wrenching these in space!
playsound(src, W.usesound, 100, 1)
- to_chat(user, "You secure the [src] to the floor!")
+ to_chat(user, span_blue("You secure the [src] to the floor!"))
anchored = TRUE
@@ -323,7 +323,7 @@
src.locked = !src.locked
to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]")
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_red("Access denied."))
else
..()
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index 3f4b7c2922..cc78324ba8 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -27,13 +27,13 @@
/obj/machinery/shieldwallgen/attack_hand(mob/user as mob)
if(state != 1)
- to_chat(user, "The shield generator needs to be firmly secured to the floor first.")
+ to_chat(user, span_red("The shield generator needs to be firmly secured to the floor first."))
return 1
if(src.locked && !istype(user, /mob/living/silicon))
- to_chat(user, "The controls are locked!")
+ to_chat(user, span_red("The controls are locked!"))
return 1
if(power != 1)
- to_chat(user, "The shield generator needs to be powered by wire underneath.")
+ to_chat(user, span_red("The shield generator needs to be powered by wire underneath."))
return 1
if(src.active >= 1)
@@ -105,7 +105,7 @@
src.active = 2
if(src.active >= 1)
if(src.power == 0)
- src.visible_message("The [src.name] shuts down due to lack of power!", \
+ src.visible_message(span_red("The [src.name] shuts down due to lack of power!"), \
"You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
@@ -181,11 +181,11 @@
src.locked = !src.locked
to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]")
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_red("Access denied."))
else
src.add_fingerprint(user)
- visible_message("The [src.name] has been hit with \the [W.name] by [user.name]!")
+ visible_message(span_red("The [src.name] has been hit with \the [W.name] by [user.name]!"))
/obj/machinery/shieldwallgen/proc/cleanup(var/NSEW)
var/obj/machinery/shieldwall/F
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index c32998a0a2..6ec477ceb2 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -45,11 +45,11 @@
to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]")
updateDialog()
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_red("Access denied."))
else if(W.has_tool_quality(TOOL_WRENCH))
src.anchored = !src.anchored
playsound(src, W.usesound, 75, 1)
- src.visible_message("\icon[src][bicon(src)] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].")
+ src.visible_message(span_blue("\icon[src][bicon(src)] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user]."))
if(anchored)
spawn(0)
@@ -121,7 +121,7 @@
switch(action)
if("toggle")
if(!active && !anchored)
- to_chat(usr, "The [src] needs to be firmly secured to the floor first.")
+ to_chat(usr, span_red("The [src] needs to be firmly secured to the floor first."))
return
active = !active
. = TRUE
@@ -145,4 +145,4 @@
return
src.set_dir(turn(src.dir, 270))
- return
\ No newline at end of file
+ return
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index c9c7ccbdd7..6e175a1190 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -68,11 +68,11 @@
to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]")
updateDialog()
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_red("Access denied."))
else if(W.has_tool_quality(TOOL_WRENCH))
src.anchored = !src.anchored
playsound(src, W.usesound, 75, 1)
- src.visible_message("\icon[src][bicon(src)] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].")
+ src.visible_message(span_blue("\icon[src][bicon(src)] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user]."))
if(active)
toggle()
@@ -207,7 +207,7 @@
switch(action)
if("toggle")
if (!active && !anchored)
- to_chat(usr, "The [src] needs to be firmly secured to the floor first.")
+ to_chat(usr, span_red("The [src] needs to be firmly secured to the floor first."))
return
toggle()
. = TRUE
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 872db71a33..981d5db138 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -332,10 +332,10 @@
for(var/mob/living/M in A)
spawn(0)
if(M.buckled)
- to_chat(M, "Sudden acceleration presses you into \the [M.buckled]!")
+ to_chat(M, span_red("Sudden acceleration presses you into \the [M.buckled]!"))
shake_camera(M, 3, 1)
else
- to_chat(M, "The floor lurches beneath you!")
+ to_chat(M, span_red("The floor lurches beneath you!"))
shake_camera(M, 10, 1)
// TODO - tossing?
//M.visible_message("[M.name] is tossed around by the sudden acceleration!")
diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm
index 6cfe6ba6a3..0b0bc59a51 100644
--- a/code/modules/shuttles/shuttles_web.dm
+++ b/code/modules/shuttles/shuttles_web.dm
@@ -300,7 +300,7 @@
return
if(WS.moving_status != SHUTTLE_IDLE)
- to_chat(usr, "[WS.visible_name] is busy moving.")
+ to_chat(usr, span_blue("[WS.visible_name] is busy moving."))
return
switch(action)
@@ -337,7 +337,7 @@
return
if((WS.last_move + WS.cooldown) > world.time)
- to_chat(usr, "The ship's drive is inoperable while the engines are charging.")
+ to_chat(usr, span_red("The ship's drive is inoperable while the engines are charging."))
return
var/index = text2num(params["traverse"])
diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm
index 6db671d1bb..0491deac1a 100644
--- a/code/modules/spells/spell_code.dm
+++ b/code/modules/spells/spell_code.dm
@@ -90,7 +90,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
take_charge(user, skipcharge)
before_cast(targets) //applies any overlays and effects
- user.attack_log += text("\[[time_stamp()]\] [user.real_name] ([user.ckey]) cast the spell [name].")
+ user.attack_log += text("\[[time_stamp()]\] [span_red("[user.real_name] ([user.ckey]) cast the spell [name].")]")
if(prob(critfailchance))
critfail(targets, user)
else
@@ -267,7 +267,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
else
user.whisper(replacetext(invocation," ","`"))
if(SpI_EMOTE)
- user.custom_emote(VISIBLE_MESSAGE, invocation)
+ user.custom_emote(VISIBLE_MESSAGE, invocation)
/////////////////////
///UPGRADING PROCS///
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index eea8cc1a9a..d49dda3e7f 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -270,7 +270,7 @@
else
user.add_spell(S)
to_chat(user, "you rapidly read through the arcane book. Suddenly you realize you understand [spellname]!")
- user.attack_log += text("\[[time_stamp()]\] [user.real_name] ([user.ckey]) learned the spell [spellname] ([S]).")
+ user.attack_log += text("\[[time_stamp()]\] [span_orange("[user.real_name] ([user.ckey]) learned the spell [spellname] ([S]).")]")
onlearned(user)
/obj/item/weapon/spellbook/oneuse/proc/recoil(mob/user as mob)
diff --git a/code/modules/tgui/modules/communications.dm b/code/modules/tgui/modules/communications.dm
index 542f330713..5050f92648 100644
--- a/code/modules/tgui/modules/communications.dm
+++ b/code/modules/tgui/modules/communications.dm
@@ -351,7 +351,7 @@
to_chat(usr, "Message '[input]' is too short. [COMM_CCMSGLEN_MINIMUM] character minimum.")
return
CentCom_announce(input, usr)
- to_chat(usr, "Message transmitted.")
+ to_chat(usr, span_blue("Message transmitted."))
log_game("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]")
centcomm_message_cooldown = world.time + 300 // 30 seconds
setMenuState(usr, COMM_SCREEN_MAIN)
@@ -369,7 +369,7 @@
to_chat(usr, "Message '[input]' is too short. [COMM_CCMSGLEN_MINIMUM] character minimum.")
return
Syndicate_announce(input, usr)
- to_chat(usr, "Message transmitted.")
+ to_chat(usr, span_blue("Message transmitted."))
log_game("[key_name(usr)] has made an illegal announcement: [input]")
centcomm_message_cooldown = world.time + 300 // 30 seconds
diff --git a/code/modules/vehicles/Securitrain_vr.dm b/code/modules/vehicles/Securitrain_vr.dm
index a57430d426..a853a0ba88 100644
--- a/code/modules/vehicles/Securitrain_vr.dm
+++ b/code/modules/vehicles/Securitrain_vr.dm
@@ -175,7 +175,7 @@
/obj/vehicle/train/security/trolley/RunOver(var/mob/living/M)
..()
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey])")]")
/obj/vehicle/train/security/engine/RunOver(var/mob/living/M)
..()
@@ -185,9 +185,9 @@
to_chat(D, "You ran over \the [M]!")
visible_message("\The [src] ran over \the [M]!")
add_attack_logs(D,M,"Ran over with [src.name]")
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")]")
else
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey])")]")
//-------------------------------------------
diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm
index 57e2c0ac13..8a6d57372d 100644
--- a/code/modules/vehicles/cargo_train.dm
+++ b/code/modules/vehicles/cargo_train.dm
@@ -164,19 +164,19 @@
/obj/vehicle/train/trolley/RunOver(var/mob/living/M)
..()
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey])")]")
/obj/vehicle/train/engine/RunOver(var/mob/living/M)
..()
if(is_train_head() && istype(load, /mob/living/carbon/human))
var/mob/living/carbon/human/D = load
- to_chat(D, "You ran over [M]!")
- visible_message("\The [src] ran over [M]!")
+ to_chat(D, span_red("You ran over [M]!"))
+ visible_message(span_red("\The [src] ran over [M]!"))
add_attack_logs(D,M,"Ran over with [src.name]")
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")]")
else
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey])")]")
//-------------------------------------------
diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm
index 562aa27e77..2f6949fa74 100644
--- a/code/modules/vehicles/rover_vr.dm
+++ b/code/modules/vehicles/rover_vr.dm
@@ -176,7 +176,7 @@
/obj/vehicle/train/rover/trolley/RunOver(var/mob/living/M)
..()
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey])")]")
/obj/vehicle/train/rover/engine/RunOver(var/mob/living/M)
..()
@@ -186,9 +186,9 @@
to_chat(D, "You ran over \the [M]!")
visible_message("\The [src] ran over \the [M]!")
add_attack_logs(D,M,"Ran over with [src.name]")
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])")]")
else
- attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])")
+ attack_log += text("\[[time_stamp()]\] [span_red("ran over [M.name] ([M.ckey])")]")
//-------------------------------------------
diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm
index a92b9828f6..be09f4986e 100644
--- a/code/modules/vehicles/train.dm
+++ b/code/modules/vehicles/train.dm
@@ -50,12 +50,12 @@
if(emagged)
if(istype(A, /mob/living))
var/mob/living/M = A
- visible_message("[src] knocks over [M]!")
+ visible_message(span_red("[src] knocks over [M]!"))
M.apply_effects(5, 5) //knock people down if you hit them
M.apply_damages(22 / move_delay) // and do damage according to how fast the train is going
if(istype(load, /mob/living/carbon/human))
var/mob/living/D = load
- to_chat(D, "You hit [M]!")
+ to_chat(D, span_red("You hit [M]!"))
add_attack_logs(D,M,"Ran over with [src.name]")
//trains are commonly open topped, so there is a chance the projectile will hit the mob riding the train instead
@@ -99,7 +99,7 @@
unload(user, direction)
- to_chat(user, "You climb down from [src].")
+ to_chat(user, span_blue("You climb down from [src]."))
return 1
@@ -110,7 +110,7 @@
latch(C, user)
else
if(!load(C, user))
- to_chat(user, "You were unable to load [C] on [src].")
+ to_chat(user, span_red("You were unable to load [C] on [src]."))
/obj/vehicle/train/attack_hand(mob/user as mob)
if(user.stat || user.restrained() || !Adjacent(user))
@@ -149,17 +149,17 @@
/obj/vehicle/train/proc/attach_to(obj/vehicle/train/T, mob/user)
if (get_dist(src, T) > 1)
if(user)
- to_chat(user, "[src] is too far away from [T] to hitch them together.")
+ to_chat(user, span_red("[src] is too far away from [T] to hitch them together."))
return
if (lead)
if(user)
- to_chat(user, "[src] is already hitched to something.")
+ to_chat(user, span_red("[src] is already hitched to something."))
return
if (T.tow)
if(user)
- to_chat(user, "[T] is already towing something.")
+ to_chat(user, span_red("[T] is already towing something."))
return
//check for cycles.
@@ -167,7 +167,7 @@
while (next_car)
if (next_car == src)
if(user)
- to_chat(user, "That seems very silly.")
+ to_chat(user, span_red("That seems very silly."))
return
next_car = next_car.lead
@@ -177,7 +177,7 @@
set_dir(lead.dir)
if(user)
- to_chat(user, "You hitch [src] to [T].")
+ to_chat(user, span_blue("You hitch [src] to [T]."))
update_stats()
@@ -185,13 +185,13 @@
//detaches the train from whatever is towing it
/obj/vehicle/train/proc/unattach(mob/user)
if (!lead)
- to_chat(user, "[src] is not hitched to anything.")
+ to_chat(user, span_red("[src] is not hitched to anything."))
return
lead.tow = null
lead.update_stats()
- to_chat(user, "You unhitch [src] from [lead].")
+ to_chat(user, span_blue("You unhitch [src] from [lead]."))
lead = null
update_stats()
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index 663df629c5..8fb4a77b4f 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -121,7 +121,7 @@
health = min(maxhealth, health+10)
user.setClickCooldown(user.get_attack_speed(W))
playsound(src, T.usesound, 50, 1)
- user.visible_message("[user] repairs [src]!"," You repair [src]!")
+ user.visible_message(span_red("[user] repairs [src]!"),span_blue("You repair [src]!"))
else
to_chat(user, "Unable to repair with the maintenance panel closed.")
else
@@ -239,7 +239,7 @@
return TRUE
/obj/vehicle/proc/explode()
- src.visible_message("[src] blows apart!", 1)
+ src.visible_message(span_red("[src] blows apart!"), 1)
playsound(src, 'modular_chomp/sound/effects/explosions/vehicleexplosion.ogg', 100, 8, 3) //CHOMPedit: New sound effects.
var/turf/Tsec = get_turf(src)
@@ -416,7 +416,7 @@
if(!damage)
return
visible_message("[user] [attack_message] the [src]!")
- user.attack_log += text("\[[time_stamp()]\] attacked [src.name]")
+ user.attack_log += text("\[[time_stamp()]\] [span_red("attacked [src.name]")]")
user.do_attack_animation(src)
src.health -= damage
if(mechanical && prob(10))
diff --git a/code/modules/virus2/biohazard destroyer.dm b/code/modules/virus2/biohazard destroyer.dm
index fe5bb7c853..e4cdeafd23 100644
--- a/code/modules/virus2/biohazard destroyer.dm
+++ b/code/modules/virus2/biohazard destroyer.dm
@@ -17,4 +17,4 @@
I.loc = src.loc
for(var/mob/O in hearers(src, null))
- O.show_message("\icon[src][bicon(src)] The [src.name] beeps.", 2)
\ No newline at end of file
+ O.show_message(span_blue("\icon[src][bicon(src)] The [src.name] beeps."), 2)
diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm
index 4fae221b5a..a5744d3c5b 100644
--- a/code/modules/virus2/items_devices.dm
+++ b/code/modules/virus2/items_devices.dm
@@ -31,7 +31,7 @@
report("Antibodies detected: [antigens2string(C.antibodies)]", user)
/obj/item/device/antibody_scanner/proc/report(var/text, mob/user as mob)
- to_chat(user, "\icon[src][bicon(src)] \The [src] beeps, \"[text]\"")
+ to_chat(user, "[span_blue("\icon[src][bicon(src)] \The [src] beeps,")] \"[span_blue("[text]")]\"")
///////////////VIRUS DISH///////////////
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 9ccde23ffe..6a8530135f 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -1037,7 +1037,7 @@
//Print notifications/sound if necessary
if(!silent && count)
- owner.visible_message("[owner] [release_verb] everything from their [lowertext(name)]!", range = privacy_range)
+ owner.visible_message("[span_green("[owner] [release_verb] everything from their [lowertext(name)]!")]", range = privacy_range)
var/soundfile
if(!fancy_vore)
soundfile = classic_release_sounds[release_sound]
@@ -1119,7 +1119,7 @@
if(istype(M, /mob/observer)) //CHOMPEdit
silent = TRUE
if(!silent)
- owner.visible_message("[owner] [release_verb] [M] from their [lowertext(name)]!",range = privacy_range)
+ owner.visible_message("[span_green("[owner] [release_verb] [M] from their [lowertext(name)]!")]",range = privacy_range)
var/soundfile
if(!fancy_vore)
soundfile = classic_release_sounds[release_sound]
@@ -1191,7 +1191,7 @@
formatted_message = replacetext(formatted_message, "%countprey", living_count)
formatted_message = replacetext(formatted_message, "%count", contents.len)
- return("[formatted_message]")
+ return(span_red("[formatted_message]"))
/obj/belly/proc/get_examine_msg_absorbed()
if(!(contents.len) || !(examine_messages_absorbed.len) || !display_absorbed_examine)
@@ -1215,7 +1215,7 @@
formatted_message = replacetext(formatted_message, "%prey", english_list(absorbed_victims))
formatted_message = replacetext(formatted_message, "%countprey", absorbed_count)
- return("[formatted_message]")
+ return(span_red("[formatted_message]"))
// The next function gets the messages set on the belly, in human-readable format.
// This is useful in customization boxes and such. The delimiter right now is \n\n so
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 8884a2eb7e..52625b0daa 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -1990,19 +1990,19 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
to_chat(user, "You can't do that in your state!")
return TRUE
- to_chat(user,"You begin to push [M] to freedom!")
- to_chat(M,"[host] begins to push you to freedom!")
- to_chat(OB.owner,"Someone is trying to escape from inside you!")
+ to_chat(user,"[span_green("You begin to push [M] to freedom!")]")
+ to_chat(M,"[host] begins to push you to freedom!")
+ to_chat(OB.owner,"Someone is trying to escape from inside you!")
sleep(50)
if(prob(33))
OB.release_specific_contents(M)
- to_chat(user,"You manage to help [M] to safety!")
- to_chat(M,"[host] pushes you free!")
- to_chat(OB.owner,"[M] forces free of the confines of your body!")
+ to_chat(user,"[span_green("You manage to help [M] to safety!")]")
+ to_chat(M, "[span_green("[host] pushes you free!")]")
+ to_chat(OB.owner,"[M] forces free of the confines of your body!")
else
- to_chat(user,"[M] slips back down inside despite your efforts.")
- to_chat(M," Even with [host]'s help, you slip back inside again.")
- to_chat(OB.owner,"Your body efficiently shoves [M] back where they belong.")
+ to_chat(user,"[M] slips back down inside despite your efforts.")
+ to_chat(M," Even with [host]'s help, you slip back inside again.")
+ to_chat(OB.owner,"[span_green("Your body efficiently shoves [M] back where they belong.")]")
return TRUE
if("Devour") //Eat the inside mob
@@ -2015,15 +2015,15 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return TRUE
var/obj/belly/TB = host.vore_selected
- to_chat(user,"You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
- to_chat(M,"[host] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
- to_chat(OB.owner,"Someone inside you is eating someone else!")
+ to_chat(user,"You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
+ to_chat(M,"[host] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
+ to_chat(OB.owner,"Someone inside you is eating someone else!")
sleep(TB.nonhuman_prey_swallow_time) //Can't do after, in a stomach, weird things abound.
if((host in OB) && (M in OB)) //Make sure they're still here.
- to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
- to_chat(M,"[host] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
- to_chat(OB.owner,"Someone inside you has eaten someone else!")
+ to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
+ to_chat(M,"[host] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
+ to_chat(OB.owner,"Someone inside you has eaten someone else!")
if(M.absorbed)
M.absorbed = FALSE
OB.handle_absorb_langs(M, OB.owner)
@@ -2057,7 +2057,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
for(var/atom/movable/target in host.vore_selected)
- to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!")
+ to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!")
//CHOMPAdd - Send the transfer message to indirect targets as well. Slightly different message because why not.
to_chat(host.vore_selected.get_belly_surrounding(target.contents),"You're squished along with [target] from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!")
host.vore_selected.transfer_contents(target, choice, 1)
@@ -2104,7 +2104,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/obj/belly/choice = tgui_input_list(usr, "Move [target] where?","Select Belly", host.vore_organs)
if(!choice || !(target in host.vore_selected))
return TRUE
- to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!")
+ to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!")
//CHOMPAdd - Send the transfer message to indirect targets as well. Slightly different message because why not.
to_chat(host.vore_selected.get_belly_surrounding(target.contents),"You're squished along with [target] from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!")
host.vore_selected.transfer_contents(target, choice)
@@ -2135,18 +2135,18 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return TRUE
if(belly_owner != host)
- to_chat(user, "Transfer offer sent. Await their response.")
+ to_chat(user, "Transfer offer sent. Await their response.")
var/accepted = tgui_alert(belly_owner, "[host] is trying to transfer [target] from their [lowertext(host.vore_selected.name)] into your [lowertext(choice.name)]. Do you accept?", "Feeding Offer", list("Yes", "No"))
if(accepted != "Yes")
- to_chat(user, "[belly_owner] refused the transfer!!")
+ to_chat(user, "[belly_owner] refused the transfer!!")
return TRUE
if(!belly_owner || !(belly_owner in range(1, host)))
return TRUE
- to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to [belly_owner]'s [lowertext(choice.name)]!")
- to_chat(belly_owner,"[target] is squished from [host]'s [lowertext(host.vore_selected.name)] to your [lowertext(choice.name)]!")
+ to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to [belly_owner]'s [lowertext(choice.name)]!")
+ to_chat(belly_owner,"[target] is squished from [host]'s [lowertext(host.vore_selected.name)] to your [lowertext(choice.name)]!")
host.vore_selected.transfer_contents(target, choice)
else
- to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!")
+ to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!")
host.vore_selected.transfer_contents(target, choice)
return TRUE
@@ -2328,27 +2328,27 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(process_options.len)
process_options += "Cancel"
else
- to_chat(usr, "You cannot instantly process [ourtarget].")
+ to_chat(usr, "You cannot instantly process [ourtarget].")
return
var/ourchoice = tgui_input_list(usr, "How would you prefer to process \the [target]? This will perform the given action instantly if the prey accepts.","Instant Process", process_options)
if(!ourchoice)
return
if(!ourtarget.client)
- to_chat(usr, "You cannot instantly process [ourtarget].")
+ to_chat(usr, "You cannot instantly process [ourtarget].")
return
var/obj/belly/b = ourtarget.loc
switch(ourchoice)
if("Digest")
if(ourtarget.absorbed)
- to_chat(usr, "\The [ourtarget] is absorbed, and cannot presently be digested.")
+ to_chat(usr, "\The [ourtarget] is absorbed, and cannot presently be digested.")
return
if(tgui_alert(ourtarget, "\The [usr] is attempting to instantly digest you. Is this something you are okay with happening to you?","Instant Digest", list("No", "Yes")) != "Yes")
- to_chat(usr, "\The [ourtarget] declined your digest attempt.")
- to_chat(ourtarget, "You declined the digest attempt.")
+ to_chat(usr, "\The [ourtarget] declined your digest attempt.")
+ to_chat(ourtarget, "You declined the digest attempt.")
return
if(ourtarget.loc != b)
- to_chat(usr, "\The [ourtarget] is no longer in \the [b].")
+ to_chat(usr, "\The [ourtarget] is no longer in \the [b].")
return
if(isliving(usr))
var/mob/living/l = usr
@@ -2367,11 +2367,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
b.handle_digestion_death(ourtarget)
if("Absorb")
if(tgui_alert(ourtarget, "\The [usr] is attempting to instantly absorb you. Is this something you are okay with happening to you?","Instant Absorb", list("No", "Yes")) != "Yes")
- to_chat(usr, "\The [ourtarget] declined your absorb attempt.")
- to_chat(ourtarget, "You declined the absorb attempt.")
+ to_chat(usr, "\The [ourtarget] declined your absorb attempt.")
+ to_chat(ourtarget, "You declined the absorb attempt.")
return
if(ourtarget.loc != b)
- to_chat(usr, "\The [ourtarget] is no longer in \the [b].")
+ to_chat(usr, "\The [ourtarget] is no longer in \the [b].")
return
if(isliving(usr))
var/mob/living/l = usr
@@ -2386,7 +2386,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/target_health = round((H.health/H.getMaxHealth())*100)
var/condition
var/condition_consequences
- to_chat(usr, "\The [target] is at [target_health]% health.")
+ to_chat(usr, "\The [target] is at [target_health]% health.")
if(H.blinded)
condition += "blinded"
condition_consequences += "hear emotes"
@@ -2403,7 +2403,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
condition += "sleeping"
condition_consequences += "hear or do anything"
if(condition)
- to_chat(usr, "\The [target] is currently [condition], they will not be able to [condition_consequences].")
+ to_chat(usr, "\The [target] is currently [condition], they will not be able to [condition_consequences].")
return
diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
index 218e388d7b..3bdf3d705a 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
@@ -547,7 +547,7 @@
//Chica Head
/obj/item/clothing/head/helmet/fluff/freddy/chica
- desc = "LET'S EAT!"
+ desc = span_red("LET'S EAT!")
icon_state = "chicahead"
item_state = "chicahead_mob"
@@ -586,7 +586,7 @@
//Chica Suit
/obj/item/clothing/suit/fluff/freddy/chica
- desc = "LET'S EAT!"
+ desc = span_red("LET'S EAT!")
icon_state = "chicasuit"
item_state = "chicasuit_mob"
diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm
index f75ecaeed0..c5fc1f3648 100644
--- a/code/modules/vore/resizing/sizegun_vr.dm
+++ b/code/modules/vore/resizing/sizegun_vr.dm
@@ -155,7 +155,7 @@
M.visible_message("\The [H]'s bracelet flashes and absorbs the beam!","Your bracelet flashes and absorbs the beam!")
return
if(!M.resize(set_size, uncapped = M.has_large_resize_bounds(), ignore_prefs = ignoring_prefs))
- to_chat(M, "The beam fires into your body, changing your size!")
+ to_chat(M, span_blue("The beam fires into your body, changing your size!"))
M.update_icon()
return
return 1
@@ -175,7 +175,7 @@
M.resize(set_size, uncapped = TRUE, ignore_prefs = TRUE) // Always ignores prefs, caution is advisable
- to_chat(M, "The beam fires into your body, changing your size!")
+ to_chat(M, span_blue("The beam fires into your body, changing your size!"))
M.update_icon()
return
return 1
diff --git a/code/modules/xenoarcheaology/artifacts/crystal.dm b/code/modules/xenoarcheaology/artifacts/crystal.dm
index a1d93d824b..fecf94098d 100644
--- a/code/modules/xenoarcheaology/artifacts/crystal.dm
+++ b/code/modules/xenoarcheaology/artifacts/crystal.dm
@@ -17,7 +17,7 @@
"It's mesmerizing to behold.")
/obj/structure/crystal/Destroy()
- src.visible_message("[src] shatters!")
+ src.visible_message(span_red("[src] shatters!"))
if(prob(75))
new /obj/item/weapon/material/shard/phoron(src.loc)
if(prob(50))
diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm
index bccb9faa0e..966e55d05d 100644
--- a/code/modules/xenoarcheaology/effect.dm
+++ b/code/modules/xenoarcheaology/effect.dm
@@ -92,7 +92,7 @@
var/atom/toplevelholder = target
while(!istype(toplevelholder.loc, /turf))
toplevelholder = toplevelholder.loc
- toplevelholder.visible_message("\icon[toplevelholder][bicon(toplevelholder)] [toplevelholder] [display_msg]")
+ toplevelholder.visible_message("[span_red("\icon[toplevelholder][bicon(toplevelholder)] [toplevelholder] [display_msg]")]")
/datum/artifact_effect/proc/DoEffectTouch(var/mob/user)
/datum/artifact_effect/proc/DoEffectAura(var/atom/holder)
diff --git a/code/modules/xenoarcheaology/effect_master.dm b/code/modules/xenoarcheaology/effect_master.dm
index b320cbead3..ddb77f661a 100644
--- a/code/modules/xenoarcheaology/effect_master.dm
+++ b/code/modules/xenoarcheaology/effect_master.dm
@@ -260,7 +260,7 @@
return
if (get_dist(user, holder) > 1)
- to_chat(user, "You can't reach [holder] from here.")
+ to_chat(user, "[span_red("You can't reach [holder] from here.")]")
return
if(ishuman(user) && user:gloves)
to_chat(user, "You touch [holder] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")
@@ -418,4 +418,3 @@
//NITROGEN GAS ACTIVATION
if(my_effect.trigger == TRIGGER_NITRO && (trigger_nitro ^ my_effect.activated))
my_effect.ToggleActivate()
-
diff --git a/code/modules/xenoarcheaology/effects/badfeeling.dm b/code/modules/xenoarcheaology/effects/badfeeling.dm
index 2a7e480e18..da5e8f5bee 100644
--- a/code/modules/xenoarcheaology/effects/badfeeling.dm
+++ b/code/modules/xenoarcheaology/effects/badfeeling.dm
@@ -34,9 +34,9 @@
var/mob/living/carbon/human/H = user
if(prob(50))
if(prob(75))
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_red("[pick(drastic_messages)]"))
else
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_red("[pick(messages)]"))
if(prob(50))
H.dizziness += rand(3,5)
@@ -48,9 +48,9 @@
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
if(prob(5))
if(prob(75))
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_red("[pick(messages)]"))
else
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_red("[pick(drastic_messages)]"))
if(prob(10))
H.dizziness += rand(3,5)
@@ -63,9 +63,9 @@
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
if(prob(50))
if(prob(95))
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_red("[pick(drastic_messages)]"))
else
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_red("[pick(messages)]"))
if(prob(50))
H.dizziness += rand(3,5)
diff --git a/code/modules/xenoarcheaology/effects/cannibal.dm b/code/modules/xenoarcheaology/effects/cannibal.dm
index ad584ccc7c..ba1b4a616c 100644
--- a/code/modules/xenoarcheaology/effects/cannibal.dm
+++ b/code/modules/xenoarcheaology/effects/cannibal.dm
@@ -35,9 +35,9 @@
if(H.is_sentient())
if(prob(50))
if(prob(75))
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_red("[pick(drastic_messages)]"))
else
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_red("[pick(messages)]"))
if(prob(50))
H.dizziness += rand(3,5)
@@ -51,9 +51,9 @@
if(H.is_sentient())
if(prob(5))
if(prob(75))
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_red("[pick(messages)]"))
else
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_red("[pick(drastic_messages)]"))
if(prob(10))
H.dizziness += rand(3,5)
@@ -68,9 +68,9 @@
if(H.is_sentient())
if(prob(50))
if(prob(95))
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_red("[pick(drastic_messages)]"))
else
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_red("[pick(messages)]"))
if(prob(50))
H.dizziness += rand(3,5)
diff --git a/code/modules/xenoarcheaology/effects/cold.dm b/code/modules/xenoarcheaology/effects/cold.dm
index f20fdf00d5..1b922f9132 100644
--- a/code/modules/xenoarcheaology/effects/cold.dm
+++ b/code/modules/xenoarcheaology/effects/cold.dm
@@ -14,7 +14,7 @@
/datum/artifact_effect/cold/DoEffectTouch(var/mob/user)
var/atom/holder = get_master_holder()
if(holder)
- to_chat(user, "A chill passes up your spine!")
+ to_chat(user, span_blue("A chill passes up your spine!"))
var/datum/gas_mixture/env = holder.loc.return_air()
if(env)
env.temperature = max(env.temperature - rand(5,50), 0)
diff --git a/code/modules/xenoarcheaology/effects/dnaswitch.dm b/code/modules/xenoarcheaology/effects/dnaswitch.dm
index f9d20475f7..6c07b2d448 100644
--- a/code/modules/xenoarcheaology/effects/dnaswitch.dm
+++ b/code/modules/xenoarcheaology/effects/dnaswitch.dm
@@ -17,13 +17,13 @@
/datum/artifact_effect/dnaswitch/DoEffectTouch(var/mob/toucher)
var/weakness = GetAnomalySusceptibility(toucher)
if(ishuman(toucher) && prob(weakness * 100))
- to_chat(toucher,pick("You feel a little different.",
- "You feel very strange.",
- "Your stomach churns.",
- "Your skin feels loose.",
- "You feel a stabbing pain in your head.",
- "You feel a tingling sensation in your chest.",
- "Your entire body vibrates."))
+ to_chat(toucher,pick(span_green("You feel a little different."),
+ span_green("You feel very strange."),
+ span_green("Your stomach churns."),
+ span_green("Your skin feels loose."),
+ span_green("You feel a stabbing pain in your head."),
+ span_green("You feel a tingling sensation in your chest."),
+ span_green("Your entire body vibrates.")))
if(prob(75))
scramble(1, toucher, weakness * severity)
else
@@ -38,13 +38,13 @@
var/weakness = GetAnomalySusceptibility(H)
if(prob(weakness * 100))
if(prob(30))
- to_chat(H, pick("You feel a little different.",
- "You feel very strange.",
- "Your stomach churns.",
- "Your skin feels loose.",
- "You feel a stabbing pain in your head.",
- "You feel a tingling sensation in your chest.",
- "Your entire body vibrates."))
+ to_chat(H, pick(span_green("You feel a little different."),
+ span_green("You feel very strange."),
+ span_green("Your stomach churns."),
+ span_green("Your skin feels loose."),
+ span_green("You feel a stabbing pain in your head."),
+ span_green("You feel a tingling sensation in your chest."),
+ span_green("Your entire body vibrates.")))
if(prob(50))
scramble(1, H, weakness * severity)
else
@@ -58,13 +58,13 @@
var/weakness = GetAnomalySusceptibility(H)
if(prob(weakness * 100))
if(prob(75))
- to_chat(H, pick(" You feel a little different.",
- " You feel very strange.",
- " Your stomach churns.",
- " Your skin feels loose.",
- " You feel a stabbing pain in your head.",
- " You feel a tingling sensation in your chest.",
- " Your entire body vibrates."))
+ to_chat(H, pick(span_green(" You feel a little different."),
+ span_green(" You feel very strange."),
+ span_green(" Your stomach churns."),
+ span_green(" Your skin feels loose."),
+ span_green(" You feel a stabbing pain in your head."),
+ span_green(" You feel a tingling sensation in your chest."),
+ span_green(" Your entire body vibrates.")))
if(prob(25))
if(prob(75))
scramble(1, H, weakness * severity)
diff --git a/code/modules/xenoarcheaology/effects/goodfeeling.dm b/code/modules/xenoarcheaology/effects/goodfeeling.dm
index 42b1be7e3a..10678a9600 100644
--- a/code/modules/xenoarcheaology/effects/goodfeeling.dm
+++ b/code/modules/xenoarcheaology/effects/goodfeeling.dm
@@ -32,9 +32,9 @@
var/mob/living/carbon/human/H = user
if(prob(50))
if(prob(75))
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_blue("[pick(drastic_messages)]"))
else
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_blue("[pick(messages)]"))
if(prob(50))
H.dizziness += rand(3,5)
@@ -46,9 +46,9 @@
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
if(prob(5))
if(prob(75))
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_blue("[pick(messages)]"))
else
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_blue("[pick(drastic_messages)]"))
if(prob(5))
H.dizziness += rand(3,5)
@@ -61,9 +61,9 @@
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
if(prob(50))
if(prob(95))
- to_chat(H, "[pick(drastic_messages)]")
+ to_chat(H, span_blue("[pick(drastic_messages)]"))
else
- to_chat(H, "[pick(messages)]")
+ to_chat(H, span_blue("[pick(messages)]"))
if(prob(50))
H.dizziness += rand(3,5)
diff --git a/code/modules/xenoarcheaology/effects/heal.dm b/code/modules/xenoarcheaology/effects/heal.dm
index 313bbc011e..db0cf9d05e 100644
--- a/code/modules/xenoarcheaology/effects/heal.dm
+++ b/code/modules/xenoarcheaology/effects/heal.dm
@@ -9,7 +9,7 @@
var/weakness = GetAnomalySusceptibility(toucher)
if(prob(weakness * 100))
var/mob/living/carbon/C = toucher
- to_chat(C, "You feel a soothing energy invigorate you.")
+ to_chat(C, span_blue("You feel a soothing energy invigorate you."))
if(ishuman(toucher))
var/mob/living/carbon/human/H = toucher
@@ -42,7 +42,7 @@
var/weakness = GetAnomalySusceptibility(C)
if(prob(weakness * 100))
if(prob(10))
- to_chat(C, "You feel a soothing energy radiating from something nearby.")
+ to_chat(C, span_blue("You feel a soothing energy radiating from something nearby."))
C.adjustBruteLoss(-1 * weakness)
C.adjustFireLoss(-1 * weakness)
C.adjustToxLoss(-1 * weakness)
@@ -58,7 +58,7 @@
for (var/mob/living/carbon/C in range(src.effectrange,T))
var/weakness = GetAnomalySusceptibility(C)
if(prob(weakness * 100))
- to_chat(C, "A wave of energy invigorates you.")
+ to_chat(C, span_blue("A wave of energy invigorates you."))
C.adjustBruteLoss(-5 * weakness)
C.adjustFireLoss(-5 * weakness)
C.adjustToxLoss(-5 * weakness)
diff --git a/code/modules/xenoarcheaology/effects/heat.dm b/code/modules/xenoarcheaology/effects/heat.dm
index 0bb3ae1f10..1dbab3eecf 100644
--- a/code/modules/xenoarcheaology/effects/heat.dm
+++ b/code/modules/xenoarcheaology/effects/heat.dm
@@ -13,7 +13,7 @@
/datum/artifact_effect/heat/DoEffectTouch(var/mob/user)
var/atom/holder = get_master_holder()
if(holder)
- to_chat(user, " You feel a wave of heat travel up your spine!")
+ to_chat(user, span_red("You feel a wave of heat travel up your spine!"))
var/datum/gas_mixture/env = holder.loc.return_air()
if(env)
env.temperature += rand(5,50)
diff --git a/code/modules/xenoarcheaology/effects/resurrect.dm b/code/modules/xenoarcheaology/effects/resurrect.dm
index 0fbb8c6aef..0fb7c1b88f 100644
--- a/code/modules/xenoarcheaology/effects/resurrect.dm
+++ b/code/modules/xenoarcheaology/effects/resurrect.dm
@@ -58,9 +58,9 @@
if(!H.client && H.mind)
for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind == H.mind)
- to_chat(ghost, "An artifact is trying to \
+ to_chat(ghost, "[span_interface("An artifact is trying to \
revive you. Return to your body if you want to be resurrected! \
- (Verbs -> Ghost -> Re-enter corpse)")
+ (Verbs -> Ghost -> Re-enter corpse)")]")
break
H.adjustBruteLoss(-40)
diff --git a/code/modules/xenoarcheaology/effects/roboheal.dm b/code/modules/xenoarcheaology/effects/roboheal.dm
index 16660029b7..f8a1820bcb 100644
--- a/code/modules/xenoarcheaology/effects/roboheal.dm
+++ b/code/modules/xenoarcheaology/effects/roboheal.dm
@@ -12,7 +12,7 @@
if(user)
if (istype(user, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = user
- to_chat(R, "Your systems report damaged components mending by themselves!")
+ to_chat(R, span_blue("Your systems report damaged components mending by themselves!"))
R.adjustBruteLoss(rand(-10,-30))
R.adjustFireLoss(rand(-10,-30))
return 1
@@ -23,7 +23,7 @@
var/turf/T = get_turf(holder)
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
if(world.time - last_message > 200)
- to_chat(M, "SYSTEM ALERT: Beneficial energy field detected!")
+ to_chat(M, span_blue("SYSTEM ALERT: Beneficial energy field detected!"))
last_message = world.time
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
@@ -36,7 +36,7 @@
var/turf/T = get_turf(holder)
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
if(world.time - last_message > 200)
- to_chat(M, "SYSTEM ALERT: Structural damage has been repaired by energy pulse!")
+ to_chat(M, span_blue("SYSTEM ALERT: Structural damage has been repaired by energy pulse!"))
last_message = world.time
M.adjustBruteLoss(-10)
M.adjustFireLoss(-10)
diff --git a/code/modules/xenoarcheaology/effects/robohurt.dm b/code/modules/xenoarcheaology/effects/robohurt.dm
index 8b93e04ead..41b8caf72b 100644
--- a/code/modules/xenoarcheaology/effects/robohurt.dm
+++ b/code/modules/xenoarcheaology/effects/robohurt.dm
@@ -12,7 +12,7 @@
if(user)
if (istype(user, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = user
- to_chat(R, "Your systems report severe damage has been inflicted!")
+ to_chat(R, span_red("Your systems report severe damage has been inflicted!"))
R.adjustBruteLoss(rand(10,50))
R.adjustFireLoss(rand(10,50))
return 1
@@ -23,7 +23,7 @@
var/turf/T = get_turf(holder)
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
if(world.time - last_message > 200)
- to_chat(M, "SYSTEM ALERT: Harmful energy field detected!")
+ to_chat(M, span_red("SYSTEM ALERT: Harmful energy field detected!"))
last_message = world.time
M.adjustBruteLoss(1)
M.adjustFireLoss(1)
@@ -36,7 +36,7 @@
var/turf/T = get_turf(holder)
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
if(world.time - last_message > 200)
- to_chat(M, "SYSTEM ALERT: Structural damage inflicted by energy pulse!")
+ to_chat(M, span_red("SYSTEM ALERT: Structural damage inflicted by energy pulse!"))
last_message = world.time
M.adjustBruteLoss(10)
M.adjustFireLoss(10)
diff --git a/code/modules/xenoarcheaology/effects/sleepy.dm b/code/modules/xenoarcheaology/effects/sleepy.dm
index 244814a1da..a13c1dcbb4 100644
--- a/code/modules/xenoarcheaology/effects/sleepy.dm
+++ b/code/modules/xenoarcheaology/effects/sleepy.dm
@@ -12,12 +12,12 @@
var/weakness = GetAnomalySusceptibility(toucher)
if(ishuman(toucher) && prob(weakness * 100))
var/mob/living/carbon/human/H = toucher
- to_chat(H, pick("You feel like taking a nap."," You feel a yawn coming on."," You feel a little tired."))
+ to_chat(H, span_blue("[pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")]"))
H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness)
H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness)
return 1
else if(isrobot(toucher))
- to_chat(toucher, "SYSTEM ALERT: CPU cycles slowing down.")
+ to_chat(toucher, span_red("SYSTEM ALERT: CPU cycles slowing down."))
return 1
/datum/artifact_effect/sleepy/DoEffectAura()
@@ -28,11 +28,11 @@
var/weakness = GetAnomalySusceptibility(H)
if(prob(weakness * 100))
if(prob(10))
- to_chat(H, pick("You feel like taking a nap."," You feel a yawn coming on."," You feel a little tired."))
+ to_chat(H, span_blue("[pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")]"))
H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness)
H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness)
for (var/mob/living/silicon/robot/R in range(src.effectrange,holder))
- to_chat(R, "SYSTEM ALERT: CPU cycles slowing down.")
+ to_chat(R, span_red("SYSTEM ALERT: CPU cycles slowing down."))
return 1
/datum/artifact_effect/sleepy/DoEffectPulse()
@@ -42,9 +42,9 @@
for(var/mob/living/carbon/human/H in range(src.effectrange, T))
var/weakness = GetAnomalySusceptibility(H)
if(prob(weakness * 100))
- to_chat(H, pick("You feel like taking a nap."," You feel a yawn coming on."," You feel a little tired."))
+ to_chat(H, span_blue("[pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")]"))
H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness)
H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness)
for (var/mob/living/silicon/robot/R in range(src.effectrange,holder))
- to_chat(R, "SYSTEM ALERT: CPU cycles slowing down.")
+ to_chat(R, span_red("SYSTEM ALERT: CPU cycles slowing down."))
return 1
diff --git a/code/modules/xenoarcheaology/effects/stun.dm b/code/modules/xenoarcheaology/effects/stun.dm
index 12ca276b93..82b0ff534c 100644
--- a/code/modules/xenoarcheaology/effects/stun.dm
+++ b/code/modules/xenoarcheaology/effects/stun.dm
@@ -11,7 +11,7 @@
var/mob/living/carbon/C = toucher
var/susceptibility = GetAnomalySusceptibility(C)
if(prob(susceptibility * 100))
- to_chat(C, "A powerful force overwhelms your consciousness.")
+ to_chat(C, span_red("A powerful force overwhelms your consciousness."))
C.Weaken(rand(1,10) * susceptibility)
C.stuttering += 30 * susceptibility
C.Stun(rand(1,10) * susceptibility)
@@ -23,13 +23,13 @@
for (var/mob/living/carbon/C in range(src.effectrange,T))
var/susceptibility = GetAnomalySusceptibility(C)
if(prob(10 * susceptibility))
- to_chat(C, "Your body goes numb for a moment.")
+ to_chat(C, span_red("Your body goes numb for a moment."))
C.Weaken(2)
C.stuttering += 2
if(prob(10))
C.Stun(1)
else if(prob(10))
- to_chat(C, "You feel numb.")
+ to_chat(C, span_red("You feel numb."))
/datum/artifact_effect/stun/DoEffectPulse()
var/atom/holder = get_master_holder()
@@ -38,7 +38,7 @@
for (var/mob/living/carbon/C in range(src.effectrange,T))
var/susceptibility = GetAnomalySusceptibility(C)
if(prob(100 * susceptibility))
- to_chat(C, "A wave of energy overwhelms your senses!")
+ to_chat(C, span_red("A wave of energy overwhelms your senses!"))
C.SetWeakened(4 * susceptibility)
C.stuttering = 4 * susceptibility
if(prob(10))
diff --git a/code/modules/xenoarcheaology/effects/teleport.dm b/code/modules/xenoarcheaology/effects/teleport.dm
index de71e76768..31a0dd6e67 100644
--- a/code/modules/xenoarcheaology/effects/teleport.dm
+++ b/code/modules/xenoarcheaology/effects/teleport.dm
@@ -8,7 +8,7 @@
var/atom/holder = get_master_holder()
var/weakness = GetAnomalySusceptibility(user)
if(prob(100 * weakness))
- to_chat(user, "You are suddenly zapped away elsewhere!")
+ to_chat(user, span_red("You are suddenly zapped away elsewhere!"))
if (user.buckled)
user.buckled.unbuckle_mob()
@@ -29,7 +29,7 @@
for (var/mob/living/M in range(src.effectrange,T))
var/weakness = GetAnomalySusceptibility(M)
if(prob(100 * weakness))
- to_chat(M, "You are displaced by a strange force!")
+ to_chat(M, span_red("You are displaced by a strange force!"))
if(M.buckled)
M.buckled.unbuckle_mob(M)
@@ -49,7 +49,7 @@
for (var/mob/living/M in range(src.effectrange, T))
var/weakness = GetAnomalySusceptibility(M)
if(prob(100 * weakness))
- to_chat(M, "You are displaced by a strange force!")
+ to_chat(M, span_red("You are displaced by a strange force!"))
if(M.buckled)
M.buckled.unbuckle_mob()
diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm
index af22d90dbf..cf6c21546d 100644
--- a/code/modules/xenoarcheaology/finds/special.dm
+++ b/code/modules/xenoarcheaology/finds/special.dm
@@ -99,7 +99,7 @@
if(charges >= 0.1)
if(prob(5))
- src.visible_message("\icon[src][bicon(src)] [src]'s eyes glow ruby red for a moment!")
+ src.visible_message(span_red("\icon[src][bicon(src)] [src]'s eyes glow ruby red for a moment!"))
charges -= 0.1
//check on our shadow wights
@@ -129,7 +129,7 @@
var/target = pick(M.organs_by_name)
M.apply_damage(rand(5, 10), BRUTE, target)
- to_chat(M, "The skin on your [parse_zone(target)] feels like it's ripping apart, and a stream of blood flies out.")
+ to_chat(M, span_red("The skin on your [parse_zone(target)] feels like it's ripping apart, and a stream of blood flies out."))
var/obj/effect/decal/cleanable/blood/splatter/animated/B = new(M.loc)
B.target_turf = pick(range(1, src))
B.blood_DNA = list()
@@ -200,4 +200,4 @@
STOP_PROCESSING(SSobj, src)
/obj/effect/shadow_wight/Bump(var/atom/obstacle)
- to_chat(obstacle, "You feel a chill run down your spine!")
+ to_chat(obstacle, span_red("You feel a chill run down your spine!"))
diff --git a/code/modules/xenoarcheaology/finds/talking.dm b/code/modules/xenoarcheaology/finds/talking.dm
index d2ce513285..2d6b23508a 100644
--- a/code/modules/xenoarcheaology/finds/talking.dm
+++ b/code/modules/xenoarcheaology/finds/talking.dm
@@ -54,7 +54,7 @@
var/list/options = list("[holder_atom] seems to be listening intently to [source]...",\
"[holder_atom] seems to be focusing on [source]...",\
"[holder_atom] seems to turn it's attention to [source]...")
- holder_atom.loc.visible_message("\icon[holder_atom][bicon(holder_atom)] [pick(options)]")
+ holder_atom.loc.visible_message(span_blue("\icon[holder_atom][bicon(holder_atom)] [pick(options)]"))
if(prob(20))
spawn(2)
@@ -111,5 +111,5 @@
var/list/listening = viewers(holder_atom)
for(var/mob/M in listening)
- to_chat(M, "\icon[holder_atom][bicon(holder_atom)] [holder_atom] reverberates, \"[msg]\"")
+ to_chat(M, "\icon[holder_atom][bicon(holder_atom)] [holder_atom] reverberates, \"[span_blue(msg)]\"")
last_talk_time = world.time
diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm
index a83462c43b..7fb51a0a4a 100644
--- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm
+++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm
@@ -45,7 +45,7 @@
/obj/item/weapon/anodevice/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/anobattery))
if(!inserted_battery)
- to_chat(user, "You insert the battery.")
+ to_chat(user, span_blue("You insert the battery."))
user.drop_item()
I.loc = src
inserted_battery = I
@@ -103,7 +103,7 @@
if("startup")
if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0))
activated = TRUE
- visible_message("\icon[src][bicon(src)] [src] whirrs.", "\icon[src][bicon(src)]You hear something whirr.")
+ visible_message(span_blue("\icon[src][bicon(src)] [src] whirrs."), span_blue("\icon[src][bicon(src)]You hear something whirr."))
if(!inserted_battery.battery_effect.activated)
inserted_battery.battery_effect.ToggleActivate(1)
time_end = world.time + duration
@@ -175,13 +175,13 @@
//work out if we need to shutdown
if(inserted_battery.stored_charge <= 0)
- src.loc.visible_message("\icon[src][bicon(src)] [src] buzzes.", "\icon[src][bicon(src)] You hear something buzz.")
+ src.loc.visible_message(span_blue("\icon[src][bicon(src)] [src] buzzes."), span_blue("\icon[src][bicon(src)] You hear something buzz."))
shutdown_emission()
else if(world.time > time_end)
- src.loc.visible_message("\icon[src][bicon(src)] [src] chimes.", "\icon[src][bicon(src)] You hear something chime.")
+ src.loc.visible_message(span_blue("\icon[src][bicon(src)] [src] chimes."), span_blue("\icon[src][bicon(src)] You hear something chime."))
shutdown_emission()
else
- src.visible_message("\icon[src][bicon(src)] [src] buzzes.", "\icon[src][bicon(src)] You hear something buzz.")
+ src.visible_message(span_blue("\icon[src][bicon(src)] [src] buzzes."), span_blue("\icon[src][bicon(src)] You hear something buzz."))
shutdown_emission()
last_process = world.time
@@ -210,9 +210,9 @@
if(activated && inserted_battery?.battery_effect?.effect == EFFECT_TOUCH && !isnull(inserted_battery))
inserted_battery?.battery_effect?.DoEffectTouch(M)
inserted_battery.use_power(energy_consumed_on_touch)
- user.visible_message("[user] taps [M] with [src], and it shudders on contact.")
+ user.visible_message(span_blue("[user] taps [M] with [src], and it shudders on contact."))
else
- user.visible_message("[user] taps [M] with [src], but nothing happens.")
+ user.visible_message(span_blue("[user] taps [M] with [src], but nothing happens."))
//admin logging
user.lastattacked = M
diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm
index 03f0fdb484..a8f19c916b 100644
--- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm
@@ -22,13 +22,13 @@
/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I,/obj/item/weapon/anobattery))
if(!inserted_battery)
- to_chat(user, "You insert [I] into [src].")
+ to_chat(user, span_blue("You insert [I] into [src]."))
user.drop_item()
I.loc = src
src.inserted_battery = I
SStgui.update_uis(src)
else
- to_chat(user, "There is already a battery in [src].")
+ to_chat(user, span_red("There is already a battery in [src]."))
else
return..()
diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
index 4ab22878c1..53733810c6 100644
--- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
@@ -268,16 +268,16 @@
//emergency stop if seal integrity reaches 0
if(scanner_seal_integrity <= 0 || (scanner_temperature >= 1273 && !rad_shield))
stop_scanning()
- src.visible_message("\icon[src][bicon(src)] buzzes unhappily. It has failed mid-scan!", 2)
+ src.visible_message(span_blue("\icon[src][bicon(src)] buzzes unhappily. It has failed mid-scan!"), 2)
if(prob(5))
- src.visible_message("\icon[src][bicon(src)] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].", 2)
+ src.visible_message(span_blue("\icon[src][bicon(src)] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")]."), 2)
else
//gradually cool down over time
if(scanner_temperature > 0)
scanner_temperature = max(scanner_temperature - 5 - 10 * rand(), 0)
if(prob(0.75))
- src.visible_message("\icon[src][bicon(src)] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].", 2)
+ src.visible_message(span_blue("\icon[src][bicon(src)] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")]."), 2)
playsound(src, 'sound/effects/ding.ogg', 25)
last_process_worldtime = world.time
@@ -296,7 +296,7 @@
used_coolant = 0
/obj/machinery/radiocarbon_spectrometer/proc/complete_scan()
- src.visible_message("\icon[src][bicon(src)] makes an insistent chime.", 2)
+ src.visible_message(span_blue("\icon[src][bicon(src)] makes an insistent chime."), 2)
if(scanned_item)
//create report
diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm
index 4449d85db5..51f23f8b0a 100644
--- a/code/modules/xenoarcheaology/tools/suspension_generator.dm
+++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm
@@ -150,10 +150,10 @@
for(var/mob/living/M in T)
M.Weaken(5)
- M.visible_message("[bicon(M)] [M] begins to float in the air!","You feel tingly and light, but it is difficult to move.")
+ M.visible_message(span_blue("[bicon(M)] [M] begins to float in the air!"),"You feel tingly and light, but it is difficult to move.")
suspension_field = new(T)
- visible_message("[bicon(src)] [src] activates with a low hum.")
+ visible_message(span_blue("[bicon(src)] [src] activates with a low hum."))
icon_state = "suspension_on"
playsound(loc, 'sound/machines/quiet_beep.ogg', 40)
update_icon()
@@ -165,7 +165,7 @@
if(collected)
suspension_field.icon_state = "energynet"
add_overlay("shield2")
- visible_message("[bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].")
+ visible_message(span_blue("[bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"]."))
else
if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall))
suspension_field.icon_state = "shieldsparkles"
@@ -180,7 +180,7 @@
to_chat(M, "You no longer feel like floating.")
M.Weaken(3)
- visible_message("[bicon(src)] [src] deactivates with a gentle shudder.")
+ visible_message(span_blue("[bicon(src)] [src] deactivates with a gentle shudder."))
qdel(suspension_field)
suspension_field = null
icon_state = "suspension_wrenched"
@@ -197,7 +197,7 @@
set category = "Object"
if(anchored)
- to_chat(usr, "You cannot rotate [src], it has been firmly fixed to the floor.")
+ to_chat(usr, span_red("You cannot rotate [src], it has been firmly fixed to the floor."))
return
set_dir(turn(dir, 90))
@@ -207,7 +207,7 @@
set category = "Object"
if(anchored)
- to_chat(usr, "You cannot rotate [src], it has been firmly fixed to the floor.")
+ to_chat(usr, span_red("You cannot rotate [src], it has been firmly fixed to the floor."))
return
set_dir(turn(dir, 270))
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index aba8698485..500a3b5edd 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -149,6 +149,8 @@ BIG IMG.icon {width: 32px; height: 32px;}
.debug_debug {color:#0000FF;}
.debug_trace {color:#888888;}
+.interface {color: #330033;}
+
.black {color: #000000;}
.darkgray {color: #808080;}
.gray {color: #A9A9A9;}
@@ -156,6 +158,16 @@ BIG IMG.icon {width: 32px; height: 32px;}
.orange {color: #FF8C00;}
.blue {color: #0000FF;}
.green {color: #00DD00;}
+.purple {color: #800080;}
+.yellow {color: #ffcc00;}
+.pink {color: #ffc0cb;}
+.cyan {color: #00ffff;}
+.maroon {color: #800000;}
+.crimson {color: #DC143C;}
+.brown {color: #8D4925;}
+.lightpurple {color: #AD5AAD;}
+.darkpink {color: #E3209B;}
+.white {color: #FFFFFF;}
.pnarrate {color: #009AB2;}
diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm
index 551611b8f4..681f1955a7 100644
--- a/maps/RandomZLevels/stationCollision.dm
+++ b/maps/RandomZLevels/stationCollision.dm
@@ -124,7 +124,7 @@ var/sc_safecode5 = "[rand(0,9)]"
/obj/item/weapon/paper/sc_safehint_paper_caf
name = "blood-soaked paper"
//This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode]
- info = "This paper is soaked in blood, it is impossible to read any text."
+ info = "This paper is soaked in blood, it is impossible to read any text."
/obj/item/weapon/paper/sc_safehint_paper_bible
name = "hidden paper"
@@ -202,4 +202,4 @@ var/sc_safecode5 = "[rand(0,9)]"
return
/obj/machinery/singularity/narsie/sc_Narsie/ex_act()
- return
\ No newline at end of file
+ return
diff --git a/maps/gateway_archive_vr/labyrinth.dm b/maps/gateway_archive_vr/labyrinth.dm
index 68ded3cf5c..24b27d09da 100644
--- a/maps/gateway_archive_vr/labyrinth.dm
+++ b/maps/gateway_archive_vr/labyrinth.dm
@@ -167,13 +167,13 @@
return 0
playsound(chassis, 'sound/items/AirHorn.ogg', 100, 1)
- chassis.occupant_message("HONK")
+ chassis.occupant_message(span_red("HONK"))
for(var/mob/living/carbon/M in ohearers(6, chassis))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
continue
- to_chat(M, "HONK")
+ to_chat(M, span_red("HONK"))
M.sleeping = 0
M.stuttering += 20
M.ear_deaf += 30
diff --git a/maps/gateway_archive_vr/stationCollision.dm b/maps/gateway_archive_vr/stationCollision.dm
index 551611b8f4..681f1955a7 100644
--- a/maps/gateway_archive_vr/stationCollision.dm
+++ b/maps/gateway_archive_vr/stationCollision.dm
@@ -124,7 +124,7 @@ var/sc_safecode5 = "[rand(0,9)]"
/obj/item/weapon/paper/sc_safehint_paper_caf
name = "blood-soaked paper"
//This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode]
- info = "This paper is soaked in blood, it is impossible to read any text."
+ info = "This paper is soaked in blood, it is impossible to read any text."
/obj/item/weapon/paper/sc_safehint_paper_bible
name = "hidden paper"
@@ -202,4 +202,4 @@ var/sc_safecode5 = "[rand(0,9)]"
return
/obj/machinery/singularity/narsie/sc_Narsie/ex_act()
- return
\ No newline at end of file
+ return
diff --git a/maps/gateway_archive_vr/wildwest.dm b/maps/gateway_archive_vr/wildwest.dm
index ed6ab28594..9cffa0d7f8 100644
--- a/maps/gateway_archive_vr/wildwest.dm
+++ b/maps/gateway_archive_vr/wildwest.dm
@@ -121,7 +121,7 @@
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
for(var/mob/O in viewers(world.view, src.loc))
- to_chat(O, "[M] triggered the \icon[src][bicon(src)] [src]")
+ to_chat(O, span_red("[M] triggered the \icon[src][bicon(src)] [src]"))
triggered = 1
call(src,triggerproc)(M)
diff --git a/maps/southern_cross/submaps/gateway/snowfield.dm b/maps/southern_cross/submaps/gateway/snowfield.dm
index 311d72b2fe..d0ca90cc1b 100644
--- a/maps/southern_cross/submaps/gateway/snowfield.dm
+++ b/maps/southern_cross/submaps/gateway/snowfield.dm
@@ -506,10 +506,10 @@
user.drop_item()
I.loc = src
rockets += I
- to_chat(user, "You put the rocket in [src].")
- to_chat(user, "[rockets.len] / [max_rockets] rockets.")
+ to_chat(user, span_blue("You put the rocket in [src]."))
+ to_chat(user, span_blue("[rockets.len] / [max_rockets] rockets."))
else
- to_chat(usr, "[src] cannot hold more rockets.")
+ to_chat(usr, span_red("[src] cannot hold more rockets."))
/obj/item/weapon/gun/launcher/scopedrocket/consume_next_projectile()
if(rockets.len)
@@ -604,4 +604,4 @@
sometime soon and find another coal vein, anyways.
Anatoly, two days ago, said he saw the army \
truck passing by few times around the mountains, so I think this is one of it.
Best to \
take our stuffs tomorrow. And some vodka bottles I have hidden.
BLAST, \
- IT'S EMPTY! DIMITRY, THAT SCUMBAG - HOW DID HE EVEN KNEW THE BOTTLE'S THERE?!"
\ No newline at end of file
+ IT'S EMPTY! DIMITRY, THAT SCUMBAG - HOW DID HE EVEN KNEW THE BOTTLE'S THERE?!"
diff --git a/maps/southern_cross/submaps/gateway/snowfield_ch.dm b/maps/southern_cross/submaps/gateway/snowfield_ch.dm
index 0f625c3fe8..5ce47d594c 100644
--- a/maps/southern_cross/submaps/gateway/snowfield_ch.dm
+++ b/maps/southern_cross/submaps/gateway/snowfield_ch.dm
@@ -506,10 +506,10 @@
user.drop_item()
I.loc = src
rockets += I
- to_chat(user, "You put the rocket in [src].")
- to_chat(user, "[rockets.len] / [max_rockets] rockets.")
+ to_chat(user, span_blue("You put the rocket in [src]."))
+ to_chat(user, span_blue("[rockets.len] / [max_rockets] rockets."))
else
- to_chat(usr, "[src] cannot hold more rockets.")
+ to_chat(usr, span_red("[src] cannot hold more rockets."))
/obj/item/weapon/gun/launcher/scopedrocket/consume_next_projectile()
if(rockets.len)
diff --git a/maps/yw/cryogaia_things.dm b/maps/yw/cryogaia_things.dm
index ce31154362..97cabd58cd 100644
--- a/maps/yw/cryogaia_things.dm
+++ b/maps/yw/cryogaia_things.dm
@@ -22,7 +22,7 @@
/obj/item/blueprints
SPACE_OUTSIDE_TYPES = list(
/area/borealis2/outdoors/exterior,
- /area/borealis2/outdoors/grounds
+ /area/borealis2/outdoors/grounds
)
@@ -543,9 +543,9 @@ var/global/list/latejoin_tram = list()
anchored = !anchored
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(anchored)
- to_chat(user, "You secure \the [src].")
+ to_chat(user, span_blue("You secure \the [src]."))
else
- to_chat(user, "You unsecure \the [src].")
+ to_chat(user, span_blue("You unsecure \the [src]."))
//
// ### Wall Machines On Full Windows ###
// To make sure wall-mounted machines placed on full-tile windows are clickable they must be above the window
@@ -717,4 +717,4 @@ obj/machinery/trailblazer/Initialize()
//guard = 10 //Don't wander too far, to stay alive.
mobs_to_pick_from = list(
/mob/living/simple_mob/animal/passive/gaslamp/snow = 3,
- )
\ No newline at end of file
+ )
diff --git a/modular_chomp/code/modules/artifice/deadringer.dm b/modular_chomp/code/modules/artifice/deadringer.dm
index f861b52261..cc70ee163c 100644
--- a/modular_chomp/code/modules/artifice/deadringer.dm
+++ b/modular_chomp/code/modules/artifice/deadringer.dm
@@ -7,9 +7,9 @@
deathprevent()
activated = 0
if(watchowner.isSynthetic())
- to_chat(watchowner, "You fade into nothingness! [src]'s screen blinks, being unable to copy your synthetic body!")
+ to_chat(watchowner, span_blue("You fade into nothingness! [src]'s screen blinks, being unable to copy your synthetic body!"))
else
- to_chat(watchowner, "You fade into nothingness, leaving behind a fake body!")
+ to_chat(watchowner, span_blue("You fade into nothingness, leaving behind a fake body!"))
icon_state = "deadringer_cd"
timer = 5
return
@@ -22,4 +22,4 @@
qdel(corpse)
if(timer == 0)
icon_state = "deadringer"
- return
\ No newline at end of file
+ return
diff --git a/modular_chomp/code/modules/clothing/spacesuits/rig/modules/specific/protean.dm b/modular_chomp/code/modules/clothing/spacesuits/rig/modules/specific/protean.dm
index 9ee6f655ef..5135f2822b 100644
--- a/modular_chomp/code/modules/clothing/spacesuits/rig/modules/specific/protean.dm
+++ b/modular_chomp/code/modules/clothing/spacesuits/rig/modules/specific/protean.dm
@@ -25,7 +25,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
var/mob/living/carbon/human/H = holder.wearer
if(H)
- to_chat(usr, "You activate the suit's energy syphon.")
+ to_chat(usr, span_blue("You activate the suit's energy syphon."))
to_chat(H, "Your suit begins to sap at your own energy stores.")
active = 1
else
@@ -39,7 +39,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
return
var/mob/living/carbon/human/H = holder.wearer
if(H)
- to_chat(usr, "You deactivate the suit's energy syphon.")
+ to_chat(usr, span_blue("You deactivate the suit's energy syphon."))
to_chat(H, "Your suit ceases from sapping your own energy.")
active = 0
else
@@ -87,7 +87,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
/obj/item/rig_module/protean/armor/activate()
if(holder?:assimilated_rig)
- to_chat(usr, "Armor module non-functional while a RIG is assimilated.")
+ to_chat(usr, span_red("Armor module non-functional while a RIG is assimilated."))
return
if(!..(1))
return 0
@@ -96,7 +96,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
if(H)
var/list/temparmor = list("bio" = 100, "rad" = 100)
temparmor = armor_settings + temparmor
- to_chat(usr, "You signal the suit to harden.")
+ to_chat(usr, span_blue("You signal the suit to harden."))
to_chat(H, "Your suit hardens in response to physical trauma.")
holder.armor = temparmor.Copy()
for(var/obj/item/piece in list(holder.gloves,holder.helmet,holder.boots,holder.chest))
@@ -118,7 +118,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
return
var/mob/living/carbon/human/H = holder.wearer
if(H)
- to_chat(usr, "You signal the suit to relax.")
+ to_chat(usr, span_blue("You signal the suit to relax."))
to_chat(H, "Your suit softens.")
holder.armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100)
for(var/obj/item/piece in list(holder.gloves,holder.helmet,holder.boots,holder.chest))
@@ -160,7 +160,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
var/obj/item/organ/internal/nano/refactory/R = P.nano_get_refactory()
if(R.get_stored_material(MAT_STEEL) >= 100)
healing = holder.wearer.add_modifier(/datum/modifier/protean/steel, origin = R)
- to_chat(usr, "You activate the suit's restorative nanites.")
+ to_chat(usr, span_blue("You activate the suit's restorative nanites."))
to_chat(H, "Your suit begins mending your injuries.")
active = 1
return 1
@@ -171,7 +171,7 @@ These should come standard with the Protean rigsuit, unless you want them to wor
return 0
var/mob/living/carbon/human/H = holder.wearer
if(H)
- to_chat(usr, "You deactivate the suit's restorative nanites.")
+ to_chat(usr, span_blue("You deactivate the suit's restorative nanites."))
to_chat(H, "Your suit is no longer mending your injuries.")
active = 0
if(healing)
@@ -204,6 +204,6 @@ These should come standard with the Protean rigsuit, unless you want them to wor
var/obj/item/organ/internal/nano/refactory/R = P?.nano_get_refactory()
if(R?.add_stored_material(S.material.name,1*S.perunit) && S.use(1))
- to_chat(user, "You directly feed some steel to the [holder].")
+ to_chat(user, span_blue("You directly feed some steel to the [holder]."))
return 1
- return 0
\ No newline at end of file
+ return 0
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/eclipse.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/eclipse.dm
index 3097e19d3f..0261d27a9a 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/eclipse.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/eclipse.dm
@@ -109,7 +109,7 @@
/mob/living/simple_mob/humanoid/eclipse/solar/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
- visible_message("[P] seems ineffective!.")
+ visible_message(span_orange("[P] seems ineffective!."))
..()
else
..()
@@ -276,7 +276,7 @@
/mob/living/simple_mob/humanoid/eclipse/lunar/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/bullet))
- visible_message("[P] seems ineffective!.")
+ visible_message(span_orange("[P] seems ineffective!."))
..()
else
..()
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm
index 5df7bff26e..84cead7be1 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/hunters.dm
@@ -18,7 +18,7 @@
/mob/living/simple_mob/humanoid/starhunter/hunter/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy/lightpillar))
- visible_message("[P] seems ineffective!.") //immune to their own attack
+ visible_message(span_orange("[P] seems ineffective!.")) //immune to their own attack
else
..()
@@ -239,4 +239,4 @@
damage = 15
armor_penetration = 25 //Gets into the gaps
damage_type = BURN
- check_armour = "laser"
\ No newline at end of file
+ check_armour = "laser"
diff --git a/modular_chomp/code/modules/tickets/tickets.dm b/modular_chomp/code/modules/tickets/tickets.dm
index 073da78fe9..83c5818507 100644
--- a/modular_chomp/code/modules/tickets/tickets.dm
+++ b/modular_chomp/code/modules/tickets/tickets.dm
@@ -262,7 +262,7 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
if(is_bwoink)
AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]")
- message_admins("Ticket [TicketHref("#[id]")] created")
+ message_admins(span_blue("Ticket [TicketHref("#[id]")] created"))
else
MessageNoRecipient(parsed_message)
send2adminchat() //VOREStation Add
@@ -424,7 +424,7 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
AddInteraction("Reopened by [key_name_admin(usr)]")
if(initiator)
- to_chat(initiator, "Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].")
+ to_chat(initiator, "[span_purple("Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].")]")
var/msg = "Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)]."
message_admins(msg)
log_admin(msg)
@@ -458,7 +458,7 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
GLOB.tickets.ListInsert(src)
AddInteraction("Closed by [key_name_admin(usr)].")
if(initiator)
- to_chat(initiator, "Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].")
+ to_chat(initiator, "[span_red("Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].")]")
if(!silent)
feedback_inc("ahelp_close")
var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name_admin(usr)]."
@@ -484,7 +484,7 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
AddInteraction("Resolved by [key_name_admin(usr)].")
if(initiator)
- to_chat(initiator, "Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].")
+ to_chat(initiator, "[span_green("Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].")]")
if(!silent)
feedback_inc("ticket_resolve")
var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name_admin(usr)]"
@@ -514,8 +514,8 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
if(initiator.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
initiator << 'sound/effects/adminhelp.ogg'
- to_chat(initiator, "- AdminHelp Rejected! -
\
- Your admin help was rejected.
\
+ to_chat(initiator, "[span_red("- AdminHelp Rejected! -")]
\
+ [span_red("Your admin help was rejected.")]
\
Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")
feedback_inc("ahelp_reject")
@@ -538,9 +538,9 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
if(state != AHELP_ACTIVE)
return
- var/msg = "- AdminHelp marked as IC issue! -
"
- msg += "This is something that can be solved ICly, and does not currently require staff intervention.
"
- msg += "Your AdminHelp may also be unanswerable due to ongoing events."
+ var/msg = "[span_red("- AdminHelp marked as IC issue! -")]
"
+ msg += "[span_red("This is something that can be solved ICly, and does not currently require staff intervention.")]
"
+ msg += "[span_red("Your AdminHelp may also be unanswerable due to ongoing events.")]"
if(initiator)
to_chat(initiator, msg)
@@ -566,10 +566,10 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new)
return
if(handler == key_name(usr, FALSE, TRUE))
- to_chat("You are already handling this ticket.")
+ to_chat(span_red("You are already handling this ticket."))
return
- var/msg = "Your AdminHelp is being handled by [key_name(usr,FALSE,FALSE)] please be patient."
+ var/msg = span_red("Your AdminHelp is being handled by [key_name(usr,FALSE,FALSE)] please be patient.")
if(initiator)
to_chat(initiator, msg)
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index 829581874d..91c00a156a 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -663,8 +663,52 @@ img.icon.bigicon {
color: #ff0000;
}
+.crimson {
+ color: #dc143c;
+}
+
+.maroon {
+ color: #c60000;
+}
+
+.brown {
+ color: #db733b;
+}
+
.blue {
- color: #215cff;
+ color: #4173fd;
+}
+
+.black {
+ color: #ffffff;
+}
+
+.white {
+ color: #ffffff;
+}
+
+.darkgray {
+ color: #808080;
+}
+
+.gray {
+ color: #a9a9a9;
+}
+
+.yellow {
+ color: #ffcc00;
+}
+
+.pink {
+ color: #ffc0cb;
+}
+
+.cyan {
+ color: #00ffff;
+}
+
+.orange {
+ color: #ff8c00;
}
.nicegreen {
@@ -745,6 +789,14 @@ img.icon.bigicon {
color: #9956d3;
}
+.lightpurple {
+ color: #ad5aad;
+}
+
+.darkpink {
+ color: #e3209b;
+}
+
.holoparasite {
color: #88809c;
}
@@ -834,7 +886,7 @@ img.icon.bigicon {
}
.interface {
- color: #750e75;
+ color: #961196;
}
.sans {
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index f9147999bb..1c613c8461 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -690,10 +690,54 @@ h2.alert {
color: #ff0000;
}
+.crimson {
+ color: #dc143c;
+}
+
+.maroon {
+ color: #800000;
+}
+
+.brown {
+ color: #8d4925;
+}
+
.blue {
color: #0000ff;
}
+.black {
+ color: #000000;
+}
+
+.white {
+ color: #000000;
+}
+
+.darkgray {
+ color: #808080;
+}
+
+.gray {
+ color: #a9a9a9;
+}
+
+.yellow {
+ color: #ffcc00;
+}
+
+.pink {
+ color: #ffc0cb;
+}
+
+.cyan {
+ color: #00ffff;
+}
+
+.orange {
+ color: #ff8c00;
+}
+
.nicegreen {
color: #14a833;
}
@@ -772,6 +816,14 @@ h2.alert {
color: #5e2d79;
}
+.lightpurple {
+ color: #ad5aad;
+}
+
+.darkpink {
+ color: #e3209b;
+}
+
.holoparasite {
color: #35333a;
}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss
index f766b42a74..99817f1b2a 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss
@@ -664,10 +664,54 @@ img.icon.bigicon {
color: #ff0000;
}
+.crimson {
+ color: #dc143c;
+}
+
+.maroon {
+ color: #c60000;
+}
+
+.brown {
+ color: #db733b;
+}
+
.blue {
color: #6666ff;
}
+.black {
+ color: #ffffff;
+}
+
+.white {
+ color: #ffffff;
+}
+
+.darkgray {
+ color: #808080;
+}
+
+.gray {
+ color: #a9a9a9;
+}
+
+.yellow {
+ color: #ffcc00;
+}
+
+.pink {
+ color: #ffc0cb;
+}
+
+.cyan {
+ color: #00ffff;
+}
+
+.orange {
+ color: #ff8c00;
+}
+
.nicegreen {
color: #059223;
}
@@ -746,6 +790,14 @@ img.icon.bigicon {
color: #9956d3;
}
+.lightpurple {
+ color: #ad5aad;
+}
+
+.darkpink {
+ color: #e3209b;
+}
+
.holoparasite {
color: #88809c;
}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss
index 8aaaf9bec0..9ea1f659c0 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss
@@ -691,10 +691,54 @@ h2.alert {
color: #ff0000;
}
+.crimson {
+ color: #dc143c;
+}
+
+.maroon {
+ color: #800000;
+}
+
+.brown {
+ color: #8d4925;
+}
+
.blue {
color: #0000ff;
}
+.black {
+ color: #000000;
+}
+
+.white {
+ color: #000000;
+}
+
+.darkgray {
+ color: #808080;
+}
+
+.gray {
+ color: #a9a9a9;
+}
+
+.yellow {
+ color: #ffcc00;
+}
+
+.pink {
+ color: #ffc0cb;
+}
+
+.cyan {
+ color: #00ffff;
+}
+
+.orange {
+ color: #ff8c00;
+}
+
.nicegreen {
color: #14a833;
}
@@ -773,6 +817,14 @@ h2.alert {
color: #5e2d79;
}
+.lightpurple {
+ color: #ad5aad;
+}
+
+.darkpink {
+ color: #e3209b;
+}
+
.holoparasite {
color: #35333a;
}
diff --git a/tgui/public/tgui-panel.bundle.css b/tgui/public/tgui-panel.bundle.css
index 9b09ada81a..de812b73b5 100644
--- a/tgui/public/tgui-panel.bundle.css
+++ b/tgui/public/tgui-panel.bundle.css
@@ -1 +1 @@
-html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9)!important;background:rgba(0,0,0,0)!important;outline:1px solid rgba(255,255,255,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8)!important}.outline-dotted{outline-style:dotted!important}.outline-dashed{outline-style:dashed!important}.outline-solid{outline-style:solid!important}.outline-double{outline-style:double!important}.outline-groove{outline-style:groove!important}.outline-ridge{outline-style:ridge!important}.outline-inset{outline-style:inset!important}.outline-outset{outline-style:outset!important}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color .1s,background-color .1s}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color .1s,background-color .1s}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color .1s,background-color .1s}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color .1s,background-color .1s}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color .1s,background-color .1s}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color .1s,background-color .1s}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color .1s,background-color .1s}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color .1s,background-color .1s}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color .1s,background-color .1s}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color .1s,background-color .1s}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color .1s,background-color .1s}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color .1s,background-color .1s}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color .1s,background-color .1s}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color .1s,background-color .1s}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color .1s,background-color .1s}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color .1s,background-color .1s}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color .1s,background-color .1s}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color .1s,background-color .1s}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color .1s,background-color .1s}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color .1s,background-color .1s}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color .1s,background-color .1s}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color .1s,background-color .1s}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#383838;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color .1s,background-color .1s}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;-ms-user-select:none;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline,.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15) 0%,rgba(255,255,255,0) 100%);border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.LabeledList__breakContents{word-break:break-all;word-wrap:break-word}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .9s ease-out}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .9s ease-out,width .9s ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.Section .Section:first-child{margin-top:-.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Section--flex{display:flex;flex-flow:column}.Section--flex .Section__content{overflow:auto;flex-grow:1}.Section__content--noTopPadding{padding-top:0}.Section__content--stretchContents{height:calc(100% - 3rem)}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:rgba(0,0,0,0)}.Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity .15s ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s ease-out}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Layout__content--flexRow{display:flex;flex-flow:row}.Layout__content--flexColumn{display:flex;flex-flow:column}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom,#202020 0%,#202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited,a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:visited,.motd a:active,.motd a:hover{color:#a4bad6}.bold,.name,.prefix,.ooc,.looc,.adminooc,.admin,.medal,.yell{font-weight:700}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal;font-weight:700}.ooc{color:#cca300;font-weight:700}.ooc .elevated{color:#2e78d9}.ooc .moderator{color:#184880}.ooc .developer{color:#1b521f}.ooc .admin{color:#b82e00}.ooc .event_manager{color:#603}.ooc .aooc{color:#960018}img.text_tag{width:32px;height:10px;min-height:10px}img.icon{vertical-align:middle;max-height:1em}img.icon.bigicon{max-height:32px}.looc{color:#3a9696;font-weight:700}.rlooc{color:#3abb96;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#3d5bc3;font-weight:700}.adminsay{color:#ff4500;font-weight:700}.admin{color:#5975da;font-weight:700}.mentor_channel{color:olive;font-weight:700}.mod_channel{color:#735638;font-weight:700}.admin_channel{color:#9611d4;font-weight:700}.event_channel{color:#c39;font-weight:700}.name{font-weight:700}.psay,.pemote{color:#e300e4;font-style:italic}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:#0f0}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#57b8f0}.secradio{color:#dd3535}.medradio{color:#57f09e}.engradio{color:#fcdf03}.supradio{color:#b88646}.srvradio{color:#6ca729}.expradio{color:#8a8a8a}.syndradio{color:#8f4a4b}.gangradio{color:#ac2ea1}.centradio{color:#2681a5}.airadio{color:#d65d95}.redteamradio{color:#f44!important}.blueteamradio{color:#3434fd!important}.greenteamradio{color:#34fd34!important}.yellowteamradio{color:#fdfd34!important}.yell{font-weight:700}.alert,.valert{color:#d82020}.userdanger{color:#c51e1e;font-weight:700;font-size:185%}.bolddanger{color:#c51e1e;font-weight:700}.danger,.vdanger{color:#c51e1e}.warning,.vwarning{color:#c51e1e;font-style:italic}.alertwarning{color:red;font-weight:700}.boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.announce,.boldannounce{color:#c51e1e;font-weight:700}.minorannounce{color:#c51e1e;font-weight:700;font-size:185%}.minoralert{color:#a4bad6;font-size:125%}.priorityannounce{color:#a4bad6;font-weight:700;font-size:225%}.prioritytitle{color:#6685f5;font-weight:700;font-size:185%}.priorityalert{color:#c51e1e;font-size:140%}.greenannounce{color:#059223;font-weight:700}.rose{color:#ff5050}.info{color:#9ab0ff}.notice,.vnotice{color:#6685f5}.tinynotice{color:#6685f5;font-size:85%}.tinynoticeital{color:#6685f5;font-style:italic;font-size:85%}.smallnotice{color:#6685f5;font-size:90%}.smallnoticeital{color:#6685f5;font-style:italic;font-size:90%}.bolditalic{font-style:italic;font-weight:700}.boldnotice{color:#6685f5;font-weight:700}.hear{color:#6685f5;font-style:italic}.adminnotice{color:#6685f5}.adminhelp{color:red;font-weight:700}.log_message{color:#386aff;font-weight:700}.unconscious{color:#a4bad6;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.grey{color:#838383}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.boldnicegreen{color:#059223;font-weight:700}.blob{color:#ee4000}.blobannounce{color:#556b2f;font-weight:700;font-size:185%}.cult{color:#973e3b}.cultitalic{color:#973e3b;font-style:italic}.cultbold{color:#973e3b;font-style:italic;font-weight:700}.cultboldtalic,.cultlarge{color:#973e3b;font-weight:700;font-size:185%}.narsie{color:#973e3b;font-weight:700;font-size:925%}.narsiesmall{color:#973e3b;font-weight:700;font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:700;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenboldnotice{color:#c099e2;font-weight:700}.revenbignotice{color:#c099e2;font-weight:700;font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:185%}.deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.ghostalert{color:#60f;font-style:italic;font-weight:700}.alien{color:#855d85}.noticealien{color:#059223}.alertalien{color:#059223;font-weight:700}.changeling{color:#b000b1;font-style:italic}.alertsyndie{color:red;font-size:185%;font-weight:700}.spiderbroodmother{color:#80f;font-weight:700;font-size:185%}.spiderbreacher{color:#e8b670;font-weight:700;font-size:140%}.spiderscout{color:#231d98;font-weight:700;font-size:120%}.interface{color:#750e75}.sans{font-family:Comic Sans MS,cursive,sans-serif}.papyrus{font-family:Papyrus,cursive,sans-serif}.robot{font-family:Courier New,cursive,sans-serif}.tape_recorder{color:red;font-family:Courier New,cursive,sans-serif}.command_headset{font-weight:700;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}.phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}.icon{height:1em;width:auto}.bigicon{font-size:2.5em}.hugeicon{font-size:5em}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.upside_down{display:inline;-moz-transform:scale(-1,-1);-webkit-transform:scale(-1,-1);-o-transform:scale(-1,-1);-ms-transform:scale(-1,-1);transform:scale(-1)}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:700}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.tooltip{font-style:italic;border-bottom:1px dashed #fff}.major_announcement_title{font-size:175%;padding:0rem .5rem;line-height:100%;text-align:left;text-decoration:none;width:100%}.subheader_announcement_text{font-weight:700;padding:.25rem .5rem 0;line-height:100%;width:100%;height:100%;text-align:left;font-size:125%}.major_announcement_text{color:#eaeaea;background-color:#131313;font-weight:700;font-size:100%;text-align:left;padding:.5rem;width:100%;height:100%}.minor_announcement_title{font-weight:700;padding:0 .5rem;padding-top:0;line-height:100%;width:100%;height:100%;text-align:left;font-size:150%}.minor_announcement_text{background-color:#202020;color:#eaeaea;padding:.5rem;text-align:left;font-size:100%}.announcement_header{padding:.5rem 0;display:flex;flex-direction:column}.chat_alert_default{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_default .major_announcement_title,.chat_alert_default .minor_announcement_title{color:#33d5ff}.chat_alert_default .subheader_announcement_text{color:#ff5297}.chat_alert_default .minor_announcement_text,.chat_alert_default .major_announcement_text{background-color:#001621}.chat_alert_green{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#004700,#004700 10px,#003d00 10px,#003d00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_green .major_announcement_title,.chat_alert_green .minor_announcement_title{color:#00ff80}.chat_alert_green .subheader_announcement_text{color:#ff85b5}.chat_alert_green .minor_announcement_text,.chat_alert_green .major_announcement_text{background-color:#002400}.chat_alert_blue{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_blue .major_announcement_title,.chat_alert_blue .minor_announcement_title{color:#33d5ff}.chat_alert_blue .subheader_announcement_text{color:#ff5297}.chat_alert_blue .minor_announcement_text,.chat_alert_blue .major_announcement_text{background-color:#001621}.chat_alert_pink{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#400025,#400025 10px,#30001b 10px,#30001b 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_pink .major_announcement_title,.chat_alert_pink .minor_announcement_title{color:#ff5297}.chat_alert_pink .subheader_announcement_text{color:#33d5ff}.chat_alert_pink .minor_announcement_text,.chat_alert_pink .major_announcement_text{background-color:#17000d}.chat_alert_yellow{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#4d4100,#4d4100 10px,#574a00 10px,#574a00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_yellow .major_announcement_title,.chat_alert_yellow .minor_announcement_title{color:#fff4e0}.chat_alert_yellow .subheader_announcement_text{color:#33d5ff}.chat_alert_yellow .minor_announcement_text,.chat_alert_yellow .major_announcement_text{background-color:#3e3400}.chat_alert_orange{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#6b4200,#6b4200 10px,#593400 10px,#593400 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_orange .major_announcement_title,.chat_alert_orange .minor_announcement_title{color:#feefe7}.chat_alert_orange .subheader_announcement_text{color:#33d5ff}.chat_alert_orange .minor_announcement_text,.chat_alert_orange .major_announcement_text{background-color:#402500}.chat_alert_red{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#520000,#520000 10px,#420000 10px,#420000 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_red .major_announcement_title,.chat_alert_red .minor_announcement_title{color:#ff5297}.chat_alert_red .subheader_announcement_text{color:#33d5ff}.chat_alert_red .minor_announcement_text,.chat_alert_red .major_announcement_text{background-color:#290000}.chat_alert_purple{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#38003d,#38003d 10px,#2c0030 10px,#2c0030 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_purple .major_announcement_title,.chat_alert_purple .minor_announcement_title{color:#c7a1f7}.chat_alert_purple .subheader_announcement_text{color:#33d5ff}.chat_alert_purple .minor_announcement_text,.chat_alert_purple .major_announcement_text{background-color:#150017}.chat_alert_grey{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#292929,#292929 10px,#252525 10px,#252525 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_grey .major_announcement_title,.chat_alert_grey .minor_announcement_title{color:#ff5297}.chat_alert_grey .subheader_announcement_text{color:#33d5ff}.chat_alert_grey .minor_announcement_text,.chat_alert_grey .major_announcement_text{background-color:#181818}.tajaran{color:#803b56}.tajaran_signlang{color:#941c1c}.akhani{color:#ac398c}.skrell{color:#00b0b3}.skrellfar{color:#70fcff}.soghun{color:#50ba6c}.solcom{color:#6da6f0}.sergal{color:#07f}.birdsongc{color:#c90}.vulpkanin{color:#b97a57}.tavan{color:#f54298;font-family:Arial}.echosong{color:#826d8c}.enochian{color:#848a33;letter-spacing:-1pt;word-spacing:4pt;font-family:Lucida Sans Unicode,Lucida Grande,sans-serif}.daemon{color:#5e339e;letter-spacing:-1pt;word-spacing:0pt;font-family:Courier New,Courier,monospace}.drudakar{color:#bb2463;word-spacing:0pt;font-family:High Tower Text,monospace}.bug{color:#9e9e39}.vox{color:#a0a}.promethean{color:#a5a5a5;font-family:Comic Sans MS,Comic Sans,cursive}.zaddat{color:#941c1c}.rough{font-family:Trebuchet MS,cursive,sans-serif}.say_quote{font-family:Georgia,Verdana,sans-serif}.say_quote_italics{font-style:italic;font-family:Georgia,Verdana,sans-serif}.terminus{font-family:Times New Roman,Times,serif,sans-serif}.spacer{color:#9c660b}.teppi{color:#816540;word-spacing:4pt;font-family:Segoe Script Bold,Segoe Script,sans-serif,Verdana}.shadekin{color:#be3cc5;font-size:150%;font-weight:700;font-family:Gabriola,cursive,sans-serif}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.theme-light .Tab--selected{background-color:rgba(255,255,255,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#353535}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-light .Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.theme-light .Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.theme-light .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-light .Section .Section:first-child{margin-top:-.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Section--flex{display:flex;flex-flow:column}.theme-light .Section--flex .Section__content{overflow:auto;flex-grow:1}.theme-light .Section__content--noTopPadding{padding-top:0}.theme-light .Section__content--stretchContents{height:calc(100% - 3rem)}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconPosition--right .fa,.theme-light .Button--hasContent.Button--iconPosition--right .fas,.theme-light .Button--hasContent.Button--iconPosition--right .far{margin-right:0;margin-left:3px}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--black:hover,.theme-light .Button--color--black:focus{background-color:#131313;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--white:hover,.theme-light .Button--color--white:focus{background-color:#efefef;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--red:hover,.theme-light .Button--color--red:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--orange:hover,.theme-light .Button--color--orange:focus{background-color:#ea7426;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--yellow:hover,.theme-light .Button--color--yellow:focus{background-color:#efce17;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--olive:hover,.theme-light .Button--color--olive:focus{background-color:#afc328;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--green:hover,.theme-light .Button--color--green:focus{background-color:#2fac4c;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--teal:hover,.theme-light .Button--color--teal:focus{background-color:#13afa9;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--blue:hover,.theme-light .Button--color--blue:focus{background-color:#3086c7;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--violet:hover,.theme-light .Button--color--violet:focus{background-color:#6a41c1;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--purple:hover,.theme-light .Button--color--purple:focus{background-color:#a03fc0;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--pink:hover,.theme-light .Button--color--pink:focus{background-color:#da3f96;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--brown:hover,.theme-light .Button--color--brown:focus{background-color:#a26c49;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--grey:hover,.theme-light .Button--color--grey:focus{background-color:#efefef;color:#000}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--good:hover,.theme-light .Button--color--good:focus{background-color:#62a635;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--average:hover,.theme-light .Button--color--average:focus{background-color:#e48f20;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--bad:hover,.theme-light .Button--color--bad:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--label:hover,.theme-light .Button--color--label:focus{background-color:#464646;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--default:hover,.theme-light .Button--color--default:focus{background-color:#eaeaea;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--caution:hover,.theme-light .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--danger:hover,.theme-light .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--transparent:hover,.theme-light .Button--color--transparent:focus{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color .1s,background-color .1s}.theme-light .Button--selected:hover,.theme-light .Button--selected:focus{background-color:#1a8be7;color:#fff}.theme-light .Button--flex{display:inline-flex;flex-direction:column}.theme-light .Button--flex--fluid{width:100%}.theme-light .Button--verticalAlignContent--top{justify-content:flex-start}.theme-light .Button--verticalAlignContent--middle{justify-content:center}.theme-light .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-light .Button__content{display:block;align-self:stretch}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#fff;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#fff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15) 0%,rgba(255,255,255,0) 100%);border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Slider{cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .9s ease-out}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .9s ease-out,width .9s ease-out}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s ease-out}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Layout__content--flexRow{display:flex;flex-flow:row}.theme-light .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom,#eee 0%,#eee 100%)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s ease-out,background-color .25s ease-out}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;display:inline-block;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap;pointer-events:none}.theme-light .TitleBar__buttons{pointer-events:initial;display:inline-block;width:100%;margin-left:10px}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#fff;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.visited,.theme-light a:visited{color:#f0f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:visited,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .bold,.theme-light .name,.theme-light .prefix,.theme-light .ooc,.theme-light .looc,.theme-light .adminooc,.theme-light .admin,.theme-light .medal,.theme-light .yell{font-weight:700}.theme-light .italic,.theme-light .italics{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .ooc{color:#002eb8;font-weight:700}.theme-light .ooc .elevated{color:#2e78d9}.theme-light .ooc .moderator{color:#184880}.theme-light .ooc .developer{color:#1b521f}.theme-light .ooc .admin{color:#b82e00}.theme-light .ooc .event_manager{color:#603}.theme-light .ooc .aooc{color:#960018}.theme-light img.text_tag{width:32px;height:10px;min-height:10px}.theme-light img.icon{vertical-align:middle;max-height:1em}.theme-light img.icon.bigicon{max-height:32px}.theme-light .looc{color:#3a9696;font-weight:700}.theme-light .rlooc{color:#3abb96;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#700038;font-weight:700}.theme-light .adminsay{color:#ff4500;font-weight:700}.theme-light .admin{color:#4473ff;font-weight:700}.theme-light .mentor_channel{color:olive;font-weight:700}.theme-light .mod_channel{color:#735638;font-weight:700}.theme-light .admin_channel{color:#9611d4;font-weight:700}.theme-light .event_channel{color:#c39;font-weight:700}.theme-light .name{font-weight:700}.theme-light .psay,.theme-light .pemote{color:purple;font-style:italic}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:#0f0}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#337296}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#339661}.theme-light .engradio{color:#948f02}.theme-light .supradio{color:#a8732b}.theme-light .srvradio{color:#6eaa2c}.theme-light .expradio{color:#555}.theme-light .syndradio{color:#6d3f40}.theme-light .gangradio{color:#ac2ea1}.theme-light .centradio{color:#686868}.theme-light .airadio{color:#f0f}.theme-light .redteamradio{color:red!important}.theme-light .blueteamradio{color:#00f!important}.theme-light .greenteamradio{color:#0f0!important}.theme-light .yellowteamradio{color:#d1ba22!important}.theme-light .yell{font-weight:700}.theme-light .alert,.theme-light .valert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .userdanger{color:red;font-weight:700;font-size:185%}.theme-light .bolddanger{color:red;font-weight:700}.theme-light .danger,.theme-light .vdanger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning,.theme-light .vwarning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:700}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .announce{color:#228b22;font-weight:700}.theme-light .boldannounce{color:red;font-weight:700}.theme-light .minorannounce{color:red;font-weight:700;font-size:185%}.theme-light .minoralert{color:#000;font-size:125%}.theme-light .priorityannounce{color:#000;font-weight:700;font-size:225%}.theme-light .prioritytitle{color:#00f;font-weight:700;font-size:185%}.theme-light .priorityalert{color:red;font-size:140%}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice,.theme-light .vnotice{color:#009}.theme-light .tinynotice{color:#009;font-size:85%}.theme-light .tinynoticeital{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:#00f}.theme-light .adminhelp{color:red;font-weight:700}.theme-light .log_message{color:#386aff;font-weight:700}.theme-light .unconscious{color:#00f;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .grey{color:#838383}.theme-light .red{color:red}.theme-light .blue{color:#00f}.theme-light .nicegreen{color:#14a833}.theme-light .boldnicegreen{color:#14a833;font-weight:700}.theme-light .cult{color:#973e3b}.theme-light .cultitalic{color:#973e3b;font-style:italic}.theme-light .cultbold{color:#973e3b;font-style:italic;font-weight:700}.theme-light .cultboldtalic,.theme-light .cultlarge{color:#973e3b;font-weight:700;font-size:185%}.theme-light .blob{color:#ee4000}.theme-light .blobannounce{color:#323f1c;font-weight:700;font-size:185%}.theme-light .narsie{color:#973e3b;font-weight:700;font-size:925%}.theme-light .narsiesmall{color:#973e3b;font-weight:700;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{color:#609;font-weight:700;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{color:#1d2953;font-weight:700;font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-light .spiderbroodmother{color:#4d004d;font-weight:700;font-size:185%}.theme-light .spiderbreacher{color:#804b02;font-weight:700;font-size:140%}.theme-light .spiderscout{color:#0c0674;font-weight:700;font-size:120%}.theme-light .interface{color:#303}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-light .robot{font-family:Courier New,cursive,sans-serif}.theme-light .tape_recorder{color:maroon;font-family:Courier New,cursive,sans-serif}.theme-light .command_headset{font-weight:700;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:#0f0;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-light .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .hypnophrase{color:#0d0d0d;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}to{color:#3bb5d3}}.theme-light .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}to{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .bigicon{font-size:2.5em}.theme-light .hugeicon{font-size:5em}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:700;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .upside_down{display:inline;-moz-transform:scale(-1,-1);-webkit-transform:scale(-1,-1);-o-transform:scale(-1,-1);-ms-transform:scale(-1,-1);transform:scale(-1)}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em}.theme-light .examine_block{background:#f2f7fa;border:1px solid #111a27;margin:.5em;padding:.5em .75em}.theme-light .tooltip{font-style:italic;border-bottom:1px dashed #000}.theme-light .major_announcement_title{font-size:175%;padding:0rem .5rem;line-height:100%;text-align:left;text-decoration:none;width:100%}.theme-light .subheader_announcement_text{font-weight:700;padding:.25rem .5rem 0;line-height:100%;width:100%;height:100%;text-align:left;font-size:125%}.theme-light .major_announcement_text{color:#131313;background-color:#eaeaea;font-weight:700;font-size:100%;text-align:left;padding:.5rem;width:100%;height:100%}.theme-light .minor_announcement_title{font-weight:700;padding:0 .5rem;padding-top:0;line-height:100%;width:100%;height:100%;text-align:left;font-size:150%}.theme-light .minor_announcement_text{background-color:#eaeaea;color:#202020;padding:.5rem;text-align:left;font-size:100%}.theme-light .announcement_header{padding:.5rem 0;display:flex;flex-direction:column}.theme-light .chat_alert_default{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#bdc8ff,#bdc8ff 10px,#b3bfff 10px,#b3bfff 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_default .major_announcement_title,.theme-light .chat_alert_default .minor_announcement_title{color:#003061}.theme-light .chat_alert_default .subheader_announcement_text{color:#6b0020}.theme-light .chat_alert_default .minor_announcement_text,.theme-light .chat_alert_default .major_announcement_text{background-color:#d7ddff}.theme-light .chat_alert_green{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#bdffbd,#bdffbd 10px,#adffad 10px,#adffad 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_green .major_announcement_title,.theme-light .chat_alert_green .minor_announcement_title{color:#005229}.theme-light .chat_alert_green .subheader_announcement_text{color:#6b0020}.theme-light .chat_alert_green .minor_announcement_text,.theme-light .chat_alert_green .major_announcement_text{background-color:#d7ffd7}.theme-light .chat_alert_blue{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#bdc8ff,#bdc8ff 10px,#b3bfff 10px,#b3bfff 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_blue .major_announcement_title,.theme-light .chat_alert_blue .minor_announcement_title{color:#003061}.theme-light .chat_alert_blue .subheader_announcement_text{color:#6b0020}.theme-light .chat_alert_blue .minor_announcement_text,.theme-light .chat_alert_blue .major_announcement_text{background-color:#d7ddff}.theme-light .chat_alert_pink{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ffc2e5,#ffc2e5 10px,#ffb3df 10px,#ffb3df 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_pink .major_announcement_title,.theme-light .chat_alert_pink .minor_announcement_title{color:#800033}.theme-light .chat_alert_pink .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_pink .minor_announcement_text,.theme-light .chat_alert_pink .major_announcement_text{background-color:#ffdcf0}.theme-light .chat_alert_yellow{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#fff5c2,#fff5c2 10px,#fff3b3 10px,#fff3b3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_yellow .major_announcement_title,.theme-light .chat_alert_yellow .minor_announcement_title{color:#754900}.theme-light .chat_alert_yellow .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_yellow .minor_announcement_text,.theme-light .chat_alert_yellow .major_announcement_text{background-color:#fff9dc}.theme-light .chat_alert_orange{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ffe8c2,#ffe8c2 10px,#ffe2b3 10px,#ffe2b3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_orange .major_announcement_title,.theme-light .chat_alert_orange .minor_announcement_title{color:#823208}.theme-light .chat_alert_orange .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_orange .minor_announcement_text,.theme-light .chat_alert_orange .major_announcement_text{background-color:#fff2dc}.theme-light .chat_alert_red{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ffc2c2,#ffc2c2 10px,#ffb3b3 10px,#ffb3b3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_red .major_announcement_title,.theme-light .chat_alert_red .minor_announcement_title{color:#800029}.theme-light .chat_alert_red .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_red .minor_announcement_text,.theme-light .chat_alert_red .major_announcement_text{background-color:#ffdcdc}.theme-light .chat_alert_purple{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#fbd1ff,#fbd1ff 10px,#fac2ff 10px,#fac2ff 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_purple .major_announcement_title,.theme-light .chat_alert_purple .minor_announcement_title{color:#450d8c}.theme-light .chat_alert_purple .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_purple .minor_announcement_text,.theme-light .chat_alert_purple .major_announcement_text{background-color:#fdebff}.theme-light .chat_alert_grey{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ebebeb,#ebebeb 10px,#e3e3e3 10px,#e3e3e3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_grey .major_announcement_title,.theme-light .chat_alert_grey .minor_announcement_title{color:#800033}.theme-light .chat_alert_grey .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_grey .minor_announcement_text,.theme-light .chat_alert_grey .major_announcement_text{background-color:#f8f8f8}.theme-light .tajaran{color:#803b56}.theme-light .tajaran_signlang{color:#941c1c}.theme-light .akhani{color:#ac398c}.theme-light .skrell{color:#00b0b3}.theme-light .skrellfar{color:#70fcff}.theme-light .soghun{color:#50ba6c}.theme-light .solcom{color:#3333ce}.theme-light .sergal{color:#07f}.theme-light .birdsongc{color:#c90}.theme-light .vulpkanin{color:#b97a57}.theme-light .tavan{color:#f54298;font-family:Arial}.theme-light .echosong{color:#826d8c}.theme-light .enochian{color:#848a33;letter-spacing:-1pt;word-spacing:4pt;font-family:Lucida Sans Unicode,Lucida Grande,sans-serif}.theme-light .daemon{color:#5e339e;letter-spacing:-1pt;word-spacing:0pt;font-family:Courier New,Courier,monospace}.theme-light .drudakar{color:#bb2463;word-spacing:0pt;font-family:High Tower Text,monospace}.theme-light .bug{color:#9e9e39}.theme-light .vox{color:#a0a}.theme-light .promethean{color:#5a5a5a;font-family:Comic Sans MS,Comic Sans,cursive}.theme-light .zaddat{color:#941c1c}.theme-light .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .say_quote_italics{font-style:italic;font-family:Georgia,Verdana,sans-serif}.theme-light .terminus{font-family:Times New Roman,Times,serif,sans-serif}.theme-light .spacer{color:#9c660b}.theme-light .teppi{color:#816540;word-spacing:4pt;font-family:Segoe Script Bold,Segoe Script,sans-serif,Verdana}.theme-light .shadekin{color:#be3cc5;font-size:150%;font-weight:700;font-family:Gabriola,cursive,sans-serif}.theme-vchatdark .color-black{color:#1a1a1a!important}.theme-vchatdark .color-white{color:#fff!important}.theme-vchatdark .color-red{color:#df3e3e!important}.theme-vchatdark .color-orange{color:#f37f33!important}.theme-vchatdark .color-yellow{color:#fbda21!important}.theme-vchatdark .color-olive{color:#cbe41c!important}.theme-vchatdark .color-green{color:#25ca4c!important}.theme-vchatdark .color-teal{color:#00d6cc!important}.theme-vchatdark .color-blue{color:#2e93de!important}.theme-vchatdark .color-violet{color:#7349cf!important}.theme-vchatdark .color-purple{color:#ad45d0!important}.theme-vchatdark .color-pink{color:#e34da1!important}.theme-vchatdark .color-brown{color:#b97447!important}.theme-vchatdark .color-grey{color:#848484!important}.theme-vchatdark .color-good{color:#68c22d!important}.theme-vchatdark .color-average{color:#f29a29!important}.theme-vchatdark .color-bad{color:#df3e3e!important}.theme-vchatdark .color-label{color:#8b9bb0!important}.theme-vchatdark .color-bg-black{background-color:#000!important}.theme-vchatdark .color-bg-white{background-color:#d9d9d9!important}.theme-vchatdark .color-bg-red{background-color:#bd2020!important}.theme-vchatdark .color-bg-orange{background-color:#d95e0c!important}.theme-vchatdark .color-bg-yellow{background-color:#d9b804!important}.theme-vchatdark .color-bg-olive{background-color:#9aad14!important}.theme-vchatdark .color-bg-green{background-color:#1b9638!important}.theme-vchatdark .color-bg-teal{background-color:#009a93!important}.theme-vchatdark .color-bg-blue{background-color:#1c71b1!important}.theme-vchatdark .color-bg-violet{background-color:#552dab!important}.theme-vchatdark .color-bg-purple{background-color:#8b2baa!important}.theme-vchatdark .color-bg-pink{background-color:#cf2082!important}.theme-vchatdark .color-bg-brown{background-color:#8c5836!important}.theme-vchatdark .color-bg-grey{background-color:#646464!important}.theme-vchatdark .color-bg-good{background-color:#4d9121!important}.theme-vchatdark .color-bg-average{background-color:#cd7a0d!important}.theme-vchatdark .color-bg-bad{background-color:#bd2020!important}.theme-vchatdark .color-bg-label{background-color:#657a94!important}.theme-vchatdark .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:rgba(0,0,0,.33)}.theme-vchatdark .Tabs--fill{height:100%}.theme-vchatdark .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-vchatdark .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-vchatdark .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-vchatdark .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-vchatdark .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-vchatdark .Tabs--horizontal:last-child{margin-bottom:0}.theme-vchatdark .Tabs__Tab{flex-grow:0}.theme-vchatdark .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-vchatdark .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-vchatdark .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.theme-vchatdark .Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.theme-vchatdark .Tab__text{flex-grow:1;margin:0 .5em}.theme-vchatdark .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-vchatdark .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-vchatdark .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-vchatdark .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.theme-vchatdark .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-vchatdark .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.theme-vchatdark .Tab--selected.Tab--color--black{color:#535353}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.theme-vchatdark .Tab--selected.Tab--color--white{color:#fff}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.theme-vchatdark .Tab--selected.Tab--color--red{color:#e76e6e}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.theme-vchatdark .Tab--selected.Tab--color--orange{color:#f69f66}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.theme-vchatdark .Tab--selected.Tab--color--yellow{color:#fce358}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.theme-vchatdark .Tab--selected.Tab--color--olive{color:#d8eb55}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.theme-vchatdark .Tab--selected.Tab--color--green{color:#53e074}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.theme-vchatdark .Tab--selected.Tab--color--teal{color:#21fff5}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.theme-vchatdark .Tab--selected.Tab--color--blue{color:#62aee6}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.theme-vchatdark .Tab--selected.Tab--color--violet{color:#9676db}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.theme-vchatdark .Tab--selected.Tab--color--purple{color:#c274db}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.theme-vchatdark .Tab--selected.Tab--color--pink{color:#ea79b9}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.theme-vchatdark .Tab--selected.Tab--color--brown{color:#ca9775}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.theme-vchatdark .Tab--selected.Tab--color--grey{color:#a3a3a3}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.theme-vchatdark .Tab--selected.Tab--color--good{color:#8cd95a}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.theme-vchatdark .Tab--selected.Tab--color--average{color:#f5b35e}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.theme-vchatdark .Tab--selected.Tab--color--bad{color:#e76e6e}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.theme-vchatdark .Tab--selected.Tab--color--label{color:#a8b4c4}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.theme-vchatdark .Section{position:relative;margin-bottom:.5em;background-color:#191919;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-vchatdark .Section:last-child{margin-bottom:0}.theme-vchatdark .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-vchatdark .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-vchatdark .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-vchatdark .Section__rest{position:relative}.theme-vchatdark .Section__content{padding:.66em .5em}.theme-vchatdark .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-vchatdark .Section--fill{display:flex;flex-direction:column;height:100%}.theme-vchatdark .Section--fill>.Section__rest{flex-grow:1}.theme-vchatdark .Section--fill>.Section__rest>.Section__content{height:100%}.theme-vchatdark .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-vchatdark .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-vchatdark .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-vchatdark .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-vchatdark .Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.theme-vchatdark .Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.theme-vchatdark .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-vchatdark .Section .Section:first-child{margin-top:-.5em}.theme-vchatdark .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-vchatdark .Section .Section .Section .Section__titleText{font-size:1em}.theme-vchatdark .Section--flex{display:flex;flex-flow:column}.theme-vchatdark .Section--flex .Section__content{overflow:auto;flex-grow:1}.theme-vchatdark .Section__content--noTopPadding{padding-top:0}.theme-vchatdark .Section__content--stretchContents{height:calc(100% - 3rem)}.theme-vchatdark .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-vchatdark .Button:last-child{margin-right:0;margin-bottom:0}.theme-vchatdark .Button .fa,.theme-vchatdark .Button .fas,.theme-vchatdark .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-vchatdark .Button--hasContent .fa,.theme-vchatdark .Button--hasContent .fas,.theme-vchatdark .Button--hasContent .far{margin-right:.25em}.theme-vchatdark .Button--hasContent.Button--iconPosition--right .fa,.theme-vchatdark .Button--hasContent.Button--iconPosition--right .fas,.theme-vchatdark .Button--hasContent.Button--iconPosition--right .far{margin-right:0;margin-left:3px}.theme-vchatdark .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-vchatdark .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-vchatdark .Button--circular{border-radius:50%}.theme-vchatdark .Button--compact{padding:0 .25em;line-height:1.333em}.theme-vchatdark .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-vchatdark .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--black:hover,.theme-vchatdark .Button--color--black:focus{background-color:#131313;color:#fff}.theme-vchatdark .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.theme-vchatdark .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--white:hover,.theme-vchatdark .Button--color--white:focus{background-color:#f8f8f8;color:#000}.theme-vchatdark .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-vchatdark .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--red:hover,.theme-vchatdark .Button--color--red:focus{background-color:#dc4848;color:#fff}.theme-vchatdark .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.theme-vchatdark .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--orange:hover,.theme-vchatdark .Button--color--orange:focus{background-color:#f0853f;color:#fff}.theme-vchatdark .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-vchatdark .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--yellow:hover,.theme-vchatdark .Button--color--yellow:focus{background-color:#f5d72e;color:#000}.theme-vchatdark .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.theme-vchatdark .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--olive:hover,.theme-vchatdark .Button--color--olive:focus{background-color:#c4da2b;color:#fff}.theme-vchatdark .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-vchatdark .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--green:hover,.theme-vchatdark .Button--color--green:focus{background-color:#32c154;color:#fff}.theme-vchatdark .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.theme-vchatdark .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--teal:hover,.theme-vchatdark .Button--color--teal:focus{background-color:#13c4bc;color:#fff}.theme-vchatdark .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.theme-vchatdark .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--blue:hover,.theme-vchatdark .Button--color--blue:focus{background-color:#3a95d9;color:#fff}.theme-vchatdark .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.theme-vchatdark .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--violet:hover,.theme-vchatdark .Button--color--violet:focus{background-color:#7953cc;color:#fff}.theme-vchatdark .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.theme-vchatdark .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--purple:hover,.theme-vchatdark .Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.theme-vchatdark .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.theme-vchatdark .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--pink:hover,.theme-vchatdark .Button--color--pink:focus{background-color:#e257a5;color:#fff}.theme-vchatdark .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.theme-vchatdark .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--brown:hover,.theme-vchatdark .Button--color--brown:focus{background-color:#b47851;color:#fff}.theme-vchatdark .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.theme-vchatdark .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--grey:hover,.theme-vchatdark .Button--color--grey:focus{background-color:#868686;color:#fff}.theme-vchatdark .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.theme-vchatdark .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--good:hover,.theme-vchatdark .Button--color--good:focus{background-color:#6cba39;color:#fff}.theme-vchatdark .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.theme-vchatdark .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--average:hover,.theme-vchatdark .Button--color--average:focus{background-color:#ed9d35;color:#fff}.theme-vchatdark .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-vchatdark .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--bad:hover,.theme-vchatdark .Button--color--bad:focus{background-color:#dc4848;color:#fff}.theme-vchatdark .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.theme-vchatdark .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--label:hover,.theme-vchatdark .Button--color--label:focus{background-color:#91a1b3;color:#fff}.theme-vchatdark .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.theme-vchatdark .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--default:hover,.theme-vchatdark .Button--color--default:focus{background-color:#5c83b0;color:#fff}.theme-vchatdark .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-vchatdark .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--caution:hover,.theme-vchatdark .Button--color--caution:focus{background-color:#f5d72e;color:#000}.theme-vchatdark .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-vchatdark .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--danger:hover,.theme-vchatdark .Button--color--danger:focus{background-color:#dc4848;color:#fff}.theme-vchatdark .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.theme-vchatdark .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--transparent:hover,.theme-vchatdark .Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.theme-vchatdark .Button--disabled{background-color:#999!important}.theme-vchatdark .Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-vchatdark .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--selected:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--selected:hover,.theme-vchatdark .Button--selected:focus{background-color:#32c154;color:#fff}.theme-vchatdark .Button--flex{display:inline-flex;flex-direction:column}.theme-vchatdark .Button--flex--fluid{width:100%}.theme-vchatdark .Button--verticalAlignContent--top{justify-content:flex-start}.theme-vchatdark .Button--verticalAlignContent--middle{justify-content:center}.theme-vchatdark .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-vchatdark .Button__content{display:block;align-self:stretch}.theme-vchatdark .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-vchatdark .NumberInput--fluid{display:block}.theme-vchatdark .NumberInput__content{margin-left:.5em}.theme-vchatdark .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-vchatdark .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.theme-vchatdark .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-vchatdark .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-vchatdark .Input--fluid{display:block;width:auto}.theme-vchatdark .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-vchatdark .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-vchatdark .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-vchatdark .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-vchatdark .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-vchatdark .TextArea--fluid{display:block;width:auto;height:auto}.theme-vchatdark .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-vchatdark .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-vchatdark .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-vchatdark .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-vchatdark .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15) 0%,rgba(255,255,255,0) 100%);border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-vchatdark .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-vchatdark .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-vchatdark .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-vchatdark .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-vchatdark .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-vchatdark .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-vchatdark .Knob__ringFillPivot{transform:rotate(135deg)}.theme-vchatdark .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-vchatdark .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-vchatdark .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-vchatdark .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-vchatdark .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-vchatdark .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-vchatdark .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-vchatdark .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-vchatdark .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-vchatdark .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-vchatdark .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-vchatdark .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-vchatdark .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-vchatdark .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-vchatdark .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-vchatdark .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-vchatdark .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-vchatdark .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-vchatdark .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-vchatdark .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-vchatdark .Slider{cursor:e-resize}.theme-vchatdark .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-vchatdark .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-vchatdark .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-vchatdark .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-vchatdark .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .9s ease-out}.theme-vchatdark .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-vchatdark .ProgressBar__fill--animated{transition:background-color .9s ease-out,width .9s ease-out}.theme-vchatdark .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-vchatdark .ProgressBar--color--default{border:.0833333333em solid #3e6189}.theme-vchatdark .ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.theme-vchatdark .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-vchatdark .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-vchatdark .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-vchatdark .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-vchatdark .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-vchatdark .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-vchatdark .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-vchatdark .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-vchatdark .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-vchatdark .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-vchatdark .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-vchatdark .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-vchatdark .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-vchatdark .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-vchatdark .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-vchatdark .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-vchatdark .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-vchatdark .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-vchatdark .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-vchatdark .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-vchatdark .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-vchatdark .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-vchatdark .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-vchatdark .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-vchatdark .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-vchatdark .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-vchatdark .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-vchatdark .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-vchatdark .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-vchatdark .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-vchatdark .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-vchatdark .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-vchatdark .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-vchatdark .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-vchatdark .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-vchatdark .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-vchatdark .Chat{color:#abc6ec}.theme-vchatdark .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s ease-out}.theme-vchatdark .Chat__badge:before{content:"x"}.theme-vchatdark .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-vchatdark .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-vchatdark .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-vchatdark .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:rgba(0,0,0,.33)}.theme-vchatdark .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-vchatdark .Chat__highlight{color:#000}.theme-vchatdark .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-vchatdark .ChatMessage{word-wrap:break-word}.theme-vchatdark .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-vchatdark .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-vchatdark .Layout,.theme-vchatdark .Layout *{scrollbar-base-color:#1c1c1c;scrollbar-face-color:#3b3b3b;scrollbar-3dlight-color:#252525;scrollbar-highlight-color:#252525;scrollbar-track-color:#1c1c1c;scrollbar-arrow-color:#929292;scrollbar-shadow-color:#3b3b3b}.theme-vchatdark .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-vchatdark .Layout__content--flexRow{display:flex;flex-flow:row}.theme-vchatdark .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-vchatdark .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#252525;background-image:linear-gradient(to bottom,#2a2a2a 0%,#202020 100%)}.theme-vchatdark .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-vchatdark .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-vchatdark .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-vchatdark .Window__contentPadding:after{height:0}.theme-vchatdark .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-vchatdark .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(62,62,62,.25);pointer-events:none}.theme-vchatdark .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-vchatdark .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-vchatdark .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-vchatdark .TitleBar{background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-vchatdark .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#363636;transition:color .25s ease-out,background-color .25s ease-out}.theme-vchatdark .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-vchatdark .TitleBar__title{position:absolute;display:inline-block;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap;pointer-events:none}.theme-vchatdark .TitleBar__buttons{pointer-events:initial;display:inline-block;width:100%;margin-left:10px}.theme-vchatdark .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-vchatdark .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-vchatdark .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-vchatdark .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-vchatdark img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-vchatdark img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-vchatdark a{color:#397ea5}.theme-vchatdark a.visited,.theme-vchatdark a:visited{color:#7c00e6}.theme-vchatdark a.popt{text-decoration:none}.theme-vchatdark .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-vchatdark .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-vchatdark .popup .close:hover{background:#999}.theme-vchatdark .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-vchatdark .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-vchatdark .popup input[type=text]:hover,.theme-vchatdark .popup input[type=text]:active,.theme-vchatdark .popup input[type=text]:focus{border-color:green}.theme-vchatdark .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-vchatdark .popup input[type=submit]:hover,.theme-vchatdark .popup input[type=submit]:focus,.theme-vchatdark .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-vchatdark .changeFont{padding:10px}.theme-vchatdark .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-vchatdark .changeFont a:hover{background:#ccc}.theme-vchatdark .highlightPopup{padding:10px;text-align:center}.theme-vchatdark .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-vchatdark .highlightPopup input.highlightColor{background-color:#ff0}.theme-vchatdark .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-vchatdark .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-vchatdark .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-vchatdark .contextMenu a:hover{background-color:#ccc}.theme-vchatdark .filterMessages{padding:5px}.theme-vchatdark .filterMessages div{padding:2px 0}.theme-vchatdark .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-vchatdark .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-vchatdark .motd h1,.theme-vchatdark .motd h2,.theme-vchatdark .motd h3,.theme-vchatdark .motd h4,.theme-vchatdark .motd h5,.theme-vchatdark .motd h6{color:#638500;text-decoration:underline}.theme-vchatdark .motd a,.theme-vchatdark .motd a:link,.theme-vchatdark .motd a:visited,.theme-vchatdark .motd a:active,.theme-vchatdark .motd a:hover{color:#638500}.theme-vchatdark .bold,.theme-vchatdark .name,.theme-vchatdark .prefix,.theme-vchatdark .ooc,.theme-vchatdark .looc,.theme-vchatdark .adminooc,.theme-vchatdark .admin,.theme-vchatdark .medal,.theme-vchatdark .yell{font-weight:700}.theme-vchatdark .italic,.theme-vchatdark .italics{font-style:italic}.theme-vchatdark .highlight{background:#ff0}.theme-vchatdark h1,.theme-vchatdark h2,.theme-vchatdark h3,.theme-vchatdark h4,.theme-vchatdark h5,.theme-vchatdark h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}.theme-vchatdark h1.alert,.theme-vchatdark h2.alert{color:#a4bad6}.theme-vchatdark em{font-style:normal;font-weight:700}.theme-vchatdark .ooc{color:#004ed8;font-weight:700}.theme-vchatdark .ooc .elevated{color:#2e78d9}.theme-vchatdark .ooc .moderator{color:#184880}.theme-vchatdark .ooc .developer{color:#1b521f}.theme-vchatdark .ooc .admin{color:#b82e00}.theme-vchatdark .ooc .event_manager{color:#603}.theme-vchatdark .ooc .aooc{color:#960018}.theme-vchatdark img.text_tag{width:32px;height:10px;min-height:10px}.theme-vchatdark img.icon{vertical-align:middle;max-height:1em}.theme-vchatdark img.icon.bigicon{max-height:32px}.theme-vchatdark .looc{color:#3a9696;font-weight:700}.theme-vchatdark .rlooc{color:#3abb96;font-weight:700}.theme-vchatdark .adminobserverooc{color:#09c;font-weight:700}.theme-vchatdark .adminooc{color:#3d5bc3;font-weight:700}.theme-vchatdark .adminsay{color:#ff4500;font-weight:700}.theme-vchatdark .admin{color:#5975da;font-weight:700}.theme-vchatdark .mentor_channel{color:olive;font-weight:700}.theme-vchatdark .mod_channel{color:#735638;font-weight:700}.theme-vchatdark .admin_channel{color:#9611d4;font-weight:700}.theme-vchatdark .event_channel{color:#c39;font-weight:700}.theme-vchatdark .name{font-weight:700}.theme-vchatdark .say,.theme-vchatdark .emote,.theme-vchatdark .emotesubtle,.theme-vchatdark .npcemote,.theme-vchatdark .infoplain,.theme-vchatdark .oocplain,.theme-vchatdark .warningplain,.theme-vchatdark .chatexport{color:#fff}.theme-vchatdark .psay,.theme-vchatdark .pemote{color:#e300e4;font-style:italic}.theme-vchatdark .deadsay{color:#732fcd}.theme-vchatdark .binarysay{color:#1e90ff}.theme-vchatdark .binarysay a{color:#0f0}.theme-vchatdark .binarysay a:active,.theme-vchatdark .binarysay a:visited{color:#8f8}.theme-vchatdark .radio{color:#00a800}.theme-vchatdark .sciradio{color:#939}.theme-vchatdark .comradio{color:#395a9a}.theme-vchatdark .secradio{color:#a30000}.theme-vchatdark .medradio{color:#008160}.theme-vchatdark .engradio{color:#a66300}.theme-vchatdark .supradio{color:#5f4519}.theme-vchatdark .srvradio{color:#6eaa2c}.theme-vchatdark .expradio{color:#555}.theme-vchatdark .syndradio{color:#6d3f40}.theme-vchatdark .gangradio{color:#ac2ea1}.theme-vchatdark .centradio{color:#5c5c8a}.theme-vchatdark .airadio{color:#f0f}.theme-vchatdark .redteamradio{color:#f44!important}.theme-vchatdark .blueteamradio{color:#3434fd!important}.theme-vchatdark .greenteamradio{color:#34fd34!important}.theme-vchatdark .yellowteamradio{color:#fdfd34!important}.theme-vchatdark .yell{font-weight:700}.theme-vchatdark .alert{color:red}.theme-vchatdark .valert{color:#d82020}.theme-vchatdark .userdanger{color:#c51e1e;font-weight:700;font-size:185%}.theme-vchatdark .bolddanger{color:#c51e1e;font-weight:700}.theme-vchatdark .danger,.theme-vchatdark .vdanger{color:#c51e1e}.theme-vchatdark .warning,.theme-vchatdark .vwarning{color:#c51e1e;font-style:italic}.theme-vchatdark .alertwarning{color:red;font-weight:700}.theme-vchatdark .boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.theme-vchatdark .announce,.theme-vchatdark .boldannounce{color:#c51e1e;font-weight:700}.theme-vchatdark .minorannounce{color:#c51e1e;font-weight:700;font-size:185%}.theme-vchatdark .minoralert{color:#a4bad6;font-size:125%}.theme-vchatdark .priorityannounce{color:#a4bad6;font-weight:700;font-size:225%}.theme-vchatdark .prioritytitle{color:#6685f5;font-weight:700;font-size:185%}.theme-vchatdark .priorityalert{color:#c51e1e;font-size:140%}.theme-vchatdark .greenannounce{color:#059223;font-weight:700}.theme-vchatdark .rose{color:#ff5050}.theme-vchatdark .info,.theme-vchatdark .notice,.theme-vchatdark .vnotice{color:#6060c9}.theme-vchatdark .tinynotice{color:#6060c9;font-size:85%}.theme-vchatdark .tinynoticeital{color:#6060c9;font-style:italic;font-size:85%}.theme-vchatdark .smallnotice{color:#6060c9;font-size:90%}.theme-vchatdark .smallnoticeital{color:#6060c9;font-style:italic;font-size:90%}.theme-vchatdark .bolditalic{font-style:italic;font-weight:700}.theme-vchatdark .boldnotice{color:#6060c9;font-weight:700}.theme-vchatdark .hear{color:#6060c9;font-style:italic}.theme-vchatdark .adminnotice{color:#6060c9}.theme-vchatdark .adminhelp{color:red;font-weight:700}.theme-vchatdark .log_message{color:#386aff;font-weight:700}.theme-vchatdark .unconscious{color:#a4bad6;font-weight:700}.theme-vchatdark .suicide{color:#ff5050;font-style:italic}.theme-vchatdark .green{color:#4f4}.theme-vchatdark .grey{color:#a9a9a9}.theme-vchatdark .red{color:red}.theme-vchatdark .blue{color:#66f}.theme-vchatdark .nicegreen{color:#059223}.theme-vchatdark .boldnicegreen{color:#059223;font-weight:700}.theme-vchatdark .blob{color:#ee4000}.theme-vchatdark .blobannounce{color:#556b2f;font-weight:700;font-size:185%}.theme-vchatdark .cult{color:#973e3b}.theme-vchatdark .cultitalic{color:#973e3b;font-style:italic}.theme-vchatdark .cultbold{color:#973e3b;font-style:italic;font-weight:700}.theme-vchatdark .cultboldtalic,.theme-vchatdark .cultlarge{color:#973e3b;font-weight:700;font-size:185%}.theme-vchatdark .narsie{color:#973e3b;font-weight:700;font-size:925%}.theme-vchatdark .narsiesmall{color:#973e3b;font-weight:700;font-size:370%}.theme-vchatdark .colossus{color:#7f282a;font-size:310%}.theme-vchatdark .hierophant{color:#b441ee;font-weight:700;font-style:italic}.theme-vchatdark .hierophant_warning{color:#c56bf1;font-style:italic}.theme-vchatdark .purple{color:#9956d3}.theme-vchatdark .holoparasite{color:#88809c}.theme-vchatdark .revennotice{color:#c099e2}.theme-vchatdark .revenboldnotice{color:#c099e2;font-weight:700}.theme-vchatdark .revenbignotice{color:#c099e2;font-weight:700;font-size:185%}.theme-vchatdark .revenminor{color:#823abb}.theme-vchatdark .revenwarning{color:#760fbb;font-style:italic}.theme-vchatdark .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-vchatdark .deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.theme-vchatdark .ghostalert{color:#60f;font-style:italic;font-weight:700}.theme-vchatdark .alien{color:#855d85}.theme-vchatdark .noticealien{color:#059223}.theme-vchatdark .alertalien{color:#059223;font-weight:700}.theme-vchatdark .changeling{color:#b000b1;font-style:italic}.theme-vchatdark .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-vchatdark .spiderbroodmother{color:#80f;font-weight:700;font-size:185%}.theme-vchatdark .spiderbreacher{color:#e8b670;font-weight:700;font-size:140%}.theme-vchatdark .spiderscout{color:#231d98;font-weight:700;font-size:120%}.theme-vchatdark .interface{color:#750e75}.theme-vchatdark .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-vchatdark .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-vchatdark .robot{font-family:Courier New,cursive,sans-serif}.theme-vchatdark .tape_recorder{color:red;font-family:Courier New,cursive,sans-serif}.theme-vchatdark .command_headset{font-weight:700;font-size:160%}.theme-vchatdark .small{font-size:60%}.theme-vchatdark .big{font-size:185%}.theme-vchatdark .reallybig{font-size:245%}.theme-vchatdark .extremelybig{font-size:310%}.theme-vchatdark .greentext{color:#059223;font-size:185%}.theme-vchatdark .redtext{color:#c51e1e;font-size:185%}.theme-vchatdark .clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-vchatdark .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-vchatdark .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-vchatdark .hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#202020}25%{color:#4b02ac}50%{color:#9f41f1}75%{color:#541c9c}to{color:#7adbf3}}.theme-vchatdark .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#f75a5a}50%{color:#d00}to{color:#f75a5a}}.theme-vchatdark .icon{height:1em;width:auto}.theme-vchatdark .bigicon{font-size:2.5em}.theme-vchatdark .hugeicon{font-size:5em}.theme-vchatdark .memo{color:#638500;text-align:center}.theme-vchatdark .memoedit{text-align:center;font-size:125%}.theme-vchatdark .abductor{color:#c204c2;font-style:italic}.theme-vchatdark .mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.theme-vchatdark .slime{color:#00ced1}.theme-vchatdark .drone{color:#848482}.theme-vchatdark .monkey{color:#975032}.theme-vchatdark .swarmer{color:#2c75ff}.theme-vchatdark .resonate{color:#298f85}.theme-vchatdark .upside_down{display:inline;-moz-transform:scale(-1,-1);-webkit-transform:scale(-1,-1);-o-transform:scale(-1,-1);-ms-transform:scale(-1,-1);transform:scale(-1)}.theme-vchatdark .connectionClosed,.theme-vchatdark .fatalError{background:red;color:#fff;padding:5px}.theme-vchatdark .connectionClosed.restored{background:green}.theme-vchatdark .internal.boldnshit{color:#3d5bc3;font-weight:700}.theme-vchatdark .text-normal{font-weight:400;font-style:normal}.theme-vchatdark .hidden{display:none;visibility:hidden}.theme-vchatdark .ml-1{margin-left:1em}.theme-vchatdark .ml-2{margin-left:2em}.theme-vchatdark .ml-3{margin-left:3em}.theme-vchatdark .examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.theme-vchatdark .tooltip{font-style:italic;border-bottom:1px dashed #fff}.theme-vchatdark .major_announcement_title{font-size:175%;padding:0rem .5rem;line-height:100%;text-align:left;text-decoration:none;width:100%}.theme-vchatdark .subheader_announcement_text{font-weight:700;padding:.25rem .5rem 0;line-height:100%;width:100%;height:100%;text-align:left;font-size:125%}.theme-vchatdark .major_announcement_text{color:#eaeaea;background-color:#131313;font-weight:700;font-size:100%;text-align:left;padding:.5rem;width:100%;height:100%}.theme-vchatdark .minor_announcement_title{font-weight:700;padding:0 .5rem;padding-top:0;line-height:100%;width:100%;height:100%;text-align:left;font-size:150%}.theme-vchatdark .minor_announcement_text{background-color:#202020;color:#eaeaea;padding:.5rem;text-align:left;font-size:100%}.theme-vchatdark .announcement_header{padding:.5rem 0;display:flex;flex-direction:column}.theme-vchatdark .chat_alert_default{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_default .major_announcement_title,.theme-vchatdark .chat_alert_default .minor_announcement_title{color:#33d5ff}.theme-vchatdark .chat_alert_default .subheader_announcement_text{color:#ff5297}.theme-vchatdark .chat_alert_default .minor_announcement_text,.theme-vchatdark .chat_alert_default .major_announcement_text{background-color:#001621}.theme-vchatdark .chat_alert_green{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#004700,#004700 10px,#003d00 10px,#003d00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_green .major_announcement_title,.theme-vchatdark .chat_alert_green .minor_announcement_title{color:#00ff80}.theme-vchatdark .chat_alert_green .subheader_announcement_text{color:#ff85b5}.theme-vchatdark .chat_alert_green .minor_announcement_text,.theme-vchatdark .chat_alert_green .major_announcement_text{background-color:#002400}.theme-vchatdark .chat_alert_blue{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_blue .major_announcement_title,.theme-vchatdark .chat_alert_blue .minor_announcement_title{color:#33d5ff}.theme-vchatdark .chat_alert_blue .subheader_announcement_text{color:#ff5297}.theme-vchatdark .chat_alert_blue .minor_announcement_text,.theme-vchatdark .chat_alert_blue .major_announcement_text{background-color:#001621}.theme-vchatdark .chat_alert_pink{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#400025,#400025 10px,#30001b 10px,#30001b 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_pink .major_announcement_title,.theme-vchatdark .chat_alert_pink .minor_announcement_title{color:#ff5297}.theme-vchatdark .chat_alert_pink .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_pink .minor_announcement_text,.theme-vchatdark .chat_alert_pink .major_announcement_text{background-color:#17000d}.theme-vchatdark .chat_alert_yellow{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#4d4100,#4d4100 10px,#574a00 10px,#574a00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_yellow .major_announcement_title,.theme-vchatdark .chat_alert_yellow .minor_announcement_title{color:#fff4e0}.theme-vchatdark .chat_alert_yellow .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_yellow .minor_announcement_text,.theme-vchatdark .chat_alert_yellow .major_announcement_text{background-color:#3e3400}.theme-vchatdark .chat_alert_orange{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#6b4200,#6b4200 10px,#593400 10px,#593400 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_orange .major_announcement_title,.theme-vchatdark .chat_alert_orange .minor_announcement_title{color:#feefe7}.theme-vchatdark .chat_alert_orange .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_orange .minor_announcement_text,.theme-vchatdark .chat_alert_orange .major_announcement_text{background-color:#402500}.theme-vchatdark .chat_alert_red{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#520000,#520000 10px,#420000 10px,#420000 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_red .major_announcement_title,.theme-vchatdark .chat_alert_red .minor_announcement_title{color:#ff5297}.theme-vchatdark .chat_alert_red .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_red .minor_announcement_text,.theme-vchatdark .chat_alert_red .major_announcement_text{background-color:#290000}.theme-vchatdark .chat_alert_purple{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#38003d,#38003d 10px,#2c0030 10px,#2c0030 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_purple .major_announcement_title,.theme-vchatdark .chat_alert_purple .minor_announcement_title{color:#c7a1f7}.theme-vchatdark .chat_alert_purple .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_purple .minor_announcement_text,.theme-vchatdark .chat_alert_purple .major_announcement_text{background-color:#150017}.theme-vchatdark .chat_alert_grey{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#292929,#292929 10px,#252525 10px,#252525 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_grey .major_announcement_title,.theme-vchatdark .chat_alert_grey .minor_announcement_title{color:#ff5297}.theme-vchatdark .chat_alert_grey .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_grey .minor_announcement_text,.theme-vchatdark .chat_alert_grey .major_announcement_text{background-color:#181818}.theme-vchatdark .tajaran{color:#803b56}.theme-vchatdark .tajaran_signlang{color:#941c1c}.theme-vchatdark .akhani{color:#ac398c}.theme-vchatdark .skrell{color:#00b0b3}.theme-vchatdark .skrellfar{color:#70fcff}.theme-vchatdark .soghun{color:#50ba6c}.theme-vchatdark .solcom{color:#6da6f0}.theme-vchatdark .sergal{color:#07f}.theme-vchatdark .birdsongc{color:#c90}.theme-vchatdark .vulpkanin{color:#b97a57}.theme-vchatdark .tavan{color:#f54298;font-family:Arial}.theme-vchatdark .echosong{color:#826d8c}.theme-vchatdark .enochian{color:#848a33;letter-spacing:-1pt;word-spacing:4pt;font-family:Lucida Sans Unicode,Lucida Grande,sans-serif}.theme-vchatdark .daemon{color:#5e339e;letter-spacing:-1pt;word-spacing:0pt;font-family:Courier New,Courier,monospace}.theme-vchatdark .drudakar{color:#bb2463;word-spacing:0pt;font-family:High Tower Text,monospace}.theme-vchatdark .bug{color:#9e9e39}.theme-vchatdark .vox{color:#a0a}.theme-vchatdark .promethean{color:#a5a5a5;font-family:Comic Sans MS,Comic Sans,cursive}.theme-vchatdark .zaddat{color:#941c1c}.theme-vchatdark .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-vchatdark .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-vchatdark .say_quote_italics{font-style:italic;font-family:Georgia,Verdana,sans-serif}.theme-vchatdark .terminus{font-family:Times New Roman,Times,serif,sans-serif}.theme-vchatdark .spacer{color:#9c660b}.theme-vchatdark .teppi{color:#816540;word-spacing:4pt;font-family:Segoe Script Bold,Segoe Script,sans-serif,Verdana}.theme-vchatdark .shadekin{color:#be3cc5;font-size:150%;font-weight:700;font-family:Gabriola,cursive,sans-serif}
+html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9)!important;background:rgba(0,0,0,0)!important;outline:1px solid rgba(255,255,255,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8)!important}.outline-dotted{outline-style:dotted!important}.outline-dashed{outline-style:dashed!important}.outline-solid{outline-style:solid!important}.outline-double{outline-style:double!important}.outline-groove{outline-style:groove!important}.outline-ridge{outline-style:ridge!important}.outline-inset{outline-style:inset!important}.outline-outset{outline-style:outset!important}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color .1s,background-color .1s}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color .1s,background-color .1s}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color .1s,background-color .1s}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color .1s,background-color .1s}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color .1s,background-color .1s}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color .1s,background-color .1s}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color .1s,background-color .1s}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color .1s,background-color .1s}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color .1s,background-color .1s}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color .1s,background-color .1s}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color .1s,background-color .1s}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color .1s,background-color .1s}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color .1s,background-color .1s}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color .1s,background-color .1s}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color .1s,background-color .1s}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color .1s,background-color .1s}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color .1s,background-color .1s}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color .1s,background-color .1s}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color .1s,background-color .1s}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color .1s,background-color .1s}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color .1s,background-color .1s}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color .1s,background-color .1s}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#383838;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color .1s,background-color .1s}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;-ms-user-select:none;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline,.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15) 0%,rgba(255,255,255,0) 100%);border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.LabeledList__breakContents{word-break:break-all;word-wrap:break-word}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .9s ease-out}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .9s ease-out,width .9s ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.Section .Section:first-child{margin-top:-.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Section--flex{display:flex;flex-flow:column}.Section--flex .Section__content{overflow:auto;flex-grow:1}.Section__content--noTopPadding{padding-top:0}.Section__content--stretchContents{height:calc(100% - 3rem)}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:rgba(0,0,0,0)}.Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity .15s ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s ease-out}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Layout__content--flexRow{display:flex;flex-flow:row}.Layout__content--flexColumn{display:flex;flex-flow:column}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom,#202020 0%,#202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited,a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:visited,.motd a:active,.motd a:hover{color:#a4bad6}.bold,.name,.prefix,.ooc,.looc,.adminooc,.admin,.medal,.yell{font-weight:700}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal;font-weight:700}.ooc{color:#cca300;font-weight:700}.ooc .elevated{color:#2e78d9}.ooc .moderator{color:#184880}.ooc .developer{color:#1b521f}.ooc .admin{color:#b82e00}.ooc .event_manager{color:#603}.ooc .aooc{color:#960018}img.text_tag{width:32px;height:10px;min-height:10px}img.icon{vertical-align:middle;max-height:1em}img.icon.bigicon{max-height:32px}.looc{color:#3a9696;font-weight:700}.rlooc{color:#3abb96;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#3d5bc3;font-weight:700}.adminsay{color:#ff4500;font-weight:700}.admin{color:#5975da;font-weight:700}.mentor_channel{color:olive;font-weight:700}.mod_channel{color:#735638;font-weight:700}.admin_channel{color:#9611d4;font-weight:700}.event_channel{color:#c39;font-weight:700}.name{font-weight:700}.psay,.pemote{color:#e300e4;font-style:italic}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:#0f0}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#57b8f0}.secradio{color:#dd3535}.medradio{color:#57f09e}.engradio{color:#fcdf03}.supradio{color:#b88646}.srvradio{color:#6ca729}.expradio{color:#8a8a8a}.syndradio{color:#8f4a4b}.gangradio{color:#ac2ea1}.centradio{color:#2681a5}.airadio{color:#d65d95}.redteamradio{color:#f44!important}.blueteamradio{color:#3434fd!important}.greenteamradio{color:#34fd34!important}.yellowteamradio{color:#fdfd34!important}.yell{font-weight:700}.alert,.valert{color:#d82020}.userdanger{color:#c51e1e;font-weight:700;font-size:185%}.bolddanger{color:#c51e1e;font-weight:700}.danger,.vdanger{color:#c51e1e}.warning,.vwarning{color:#c51e1e;font-style:italic}.alertwarning{color:red;font-weight:700}.boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.announce,.boldannounce{color:#c51e1e;font-weight:700}.minorannounce{color:#c51e1e;font-weight:700;font-size:185%}.minoralert{color:#a4bad6;font-size:125%}.priorityannounce{color:#a4bad6;font-weight:700;font-size:225%}.prioritytitle{color:#6685f5;font-weight:700;font-size:185%}.priorityalert{color:#c51e1e;font-size:140%}.greenannounce{color:#059223;font-weight:700}.rose{color:#ff5050}.info{color:#9ab0ff}.notice,.vnotice{color:#6685f5}.tinynotice{color:#6685f5;font-size:85%}.tinynoticeital{color:#6685f5;font-style:italic;font-size:85%}.smallnotice{color:#6685f5;font-size:90%}.smallnoticeital{color:#6685f5;font-style:italic;font-size:90%}.bolditalic{font-style:italic;font-weight:700}.boldnotice{color:#6685f5;font-weight:700}.hear{color:#6685f5;font-style:italic}.adminnotice{color:#6685f5}.adminhelp{color:red;font-weight:700}.log_message{color:#386aff;font-weight:700}.unconscious{color:#a4bad6;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.grey{color:#838383}.red{color:red}.crimson{color:#dc143c}.maroon{color:#c60000}.brown{color:#db733b}.blue{color:#4173fd}.black,.white{color:#fff}.darkgray{color:gray}.gray{color:#a9a9a9}.yellow{color:#fc0}.pink{color:pink}.cyan{color:#0ff}.orange{color:#ff8c00}.nicegreen{color:#059223}.boldnicegreen{color:#059223;font-weight:700}.blob{color:#ee4000}.blobannounce{color:#556b2f;font-weight:700;font-size:185%}.cult{color:#973e3b}.cultitalic{color:#973e3b;font-style:italic}.cultbold{color:#973e3b;font-style:italic;font-weight:700}.cultboldtalic,.cultlarge{color:#973e3b;font-weight:700;font-size:185%}.narsie{color:#973e3b;font-weight:700;font-size:925%}.narsiesmall{color:#973e3b;font-weight:700;font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:700;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.lightpurple{color:#ad5aad}.darkpink{color:#e3209b}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenboldnotice{color:#c099e2;font-weight:700}.revenbignotice{color:#c099e2;font-weight:700;font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:185%}.deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.ghostalert{color:#60f;font-style:italic;font-weight:700}.alien{color:#855d85}.noticealien{color:#059223}.alertalien{color:#059223;font-weight:700}.changeling{color:#b000b1;font-style:italic}.alertsyndie{color:red;font-size:185%;font-weight:700}.spiderbroodmother{color:#80f;font-weight:700;font-size:185%}.spiderbreacher{color:#e8b670;font-weight:700;font-size:140%}.spiderscout{color:#231d98;font-weight:700;font-size:120%}.interface{color:#961196}.sans{font-family:Comic Sans MS,cursive,sans-serif}.papyrus{font-family:Papyrus,cursive,sans-serif}.robot{font-family:Courier New,cursive,sans-serif}.tape_recorder{color:red;font-family:Courier New,cursive,sans-serif}.command_headset{font-weight:700;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}.phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}.icon{height:1em;width:auto}.bigicon{font-size:2.5em}.hugeicon{font-size:5em}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.upside_down{display:inline;-moz-transform:scale(-1,-1);-webkit-transform:scale(-1,-1);-o-transform:scale(-1,-1);-ms-transform:scale(-1,-1);transform:scale(-1)}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:700}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.tooltip{font-style:italic;border-bottom:1px dashed #fff}.major_announcement_title{font-size:175%;padding:0rem .5rem;line-height:100%;text-align:left;text-decoration:none;width:100%}.subheader_announcement_text{font-weight:700;padding:.25rem .5rem 0;line-height:100%;width:100%;height:100%;text-align:left;font-size:125%}.major_announcement_text{color:#eaeaea;background-color:#131313;font-weight:700;font-size:100%;text-align:left;padding:.5rem;width:100%;height:100%}.minor_announcement_title{font-weight:700;padding:0 .5rem;padding-top:0;line-height:100%;width:100%;height:100%;text-align:left;font-size:150%}.minor_announcement_text{background-color:#202020;color:#eaeaea;padding:.5rem;text-align:left;font-size:100%}.announcement_header{padding:.5rem 0;display:flex;flex-direction:column}.chat_alert_default{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_default .major_announcement_title,.chat_alert_default .minor_announcement_title{color:#33d5ff}.chat_alert_default .subheader_announcement_text{color:#ff5297}.chat_alert_default .minor_announcement_text,.chat_alert_default .major_announcement_text{background-color:#001621}.chat_alert_green{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#004700,#004700 10px,#003d00 10px,#003d00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_green .major_announcement_title,.chat_alert_green .minor_announcement_title{color:#00ff80}.chat_alert_green .subheader_announcement_text{color:#ff85b5}.chat_alert_green .minor_announcement_text,.chat_alert_green .major_announcement_text{background-color:#002400}.chat_alert_blue{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_blue .major_announcement_title,.chat_alert_blue .minor_announcement_title{color:#33d5ff}.chat_alert_blue .subheader_announcement_text{color:#ff5297}.chat_alert_blue .minor_announcement_text,.chat_alert_blue .major_announcement_text{background-color:#001621}.chat_alert_pink{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#400025,#400025 10px,#30001b 10px,#30001b 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_pink .major_announcement_title,.chat_alert_pink .minor_announcement_title{color:#ff5297}.chat_alert_pink .subheader_announcement_text{color:#33d5ff}.chat_alert_pink .minor_announcement_text,.chat_alert_pink .major_announcement_text{background-color:#17000d}.chat_alert_yellow{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#4d4100,#4d4100 10px,#574a00 10px,#574a00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_yellow .major_announcement_title,.chat_alert_yellow .minor_announcement_title{color:#fff4e0}.chat_alert_yellow .subheader_announcement_text{color:#33d5ff}.chat_alert_yellow .minor_announcement_text,.chat_alert_yellow .major_announcement_text{background-color:#3e3400}.chat_alert_orange{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#6b4200,#6b4200 10px,#593400 10px,#593400 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_orange .major_announcement_title,.chat_alert_orange .minor_announcement_title{color:#feefe7}.chat_alert_orange .subheader_announcement_text{color:#33d5ff}.chat_alert_orange .minor_announcement_text,.chat_alert_orange .major_announcement_text{background-color:#402500}.chat_alert_red{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#520000,#520000 10px,#420000 10px,#420000 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_red .major_announcement_title,.chat_alert_red .minor_announcement_title{color:#ff5297}.chat_alert_red .subheader_announcement_text{color:#33d5ff}.chat_alert_red .minor_announcement_text,.chat_alert_red .major_announcement_text{background-color:#290000}.chat_alert_purple{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#38003d,#38003d 10px,#2c0030 10px,#2c0030 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_purple .major_announcement_title,.chat_alert_purple .minor_announcement_title{color:#c7a1f7}.chat_alert_purple .subheader_announcement_text{color:#33d5ff}.chat_alert_purple .minor_announcement_text,.chat_alert_purple .major_announcement_text{background-color:#150017}.chat_alert_grey{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#292929,#292929 10px,#252525 10px,#252525 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.chat_alert_grey .major_announcement_title,.chat_alert_grey .minor_announcement_title{color:#ff5297}.chat_alert_grey .subheader_announcement_text{color:#33d5ff}.chat_alert_grey .minor_announcement_text,.chat_alert_grey .major_announcement_text{background-color:#181818}.tajaran{color:#803b56}.tajaran_signlang{color:#941c1c}.akhani{color:#ac398c}.skrell{color:#00b0b3}.skrellfar{color:#70fcff}.soghun{color:#50ba6c}.solcom{color:#6da6f0}.sergal{color:#07f}.birdsongc{color:#c90}.vulpkanin{color:#b97a57}.tavan{color:#f54298;font-family:Arial}.echosong{color:#826d8c}.enochian{color:#848a33;letter-spacing:-1pt;word-spacing:4pt;font-family:Lucida Sans Unicode,Lucida Grande,sans-serif}.daemon{color:#5e339e;letter-spacing:-1pt;word-spacing:0pt;font-family:Courier New,Courier,monospace}.drudakar{color:#bb2463;word-spacing:0pt;font-family:High Tower Text,monospace}.bug{color:#9e9e39}.vox{color:#a0a}.promethean{color:#a5a5a5;font-family:Comic Sans MS,Comic Sans,cursive}.zaddat{color:#941c1c}.rough{font-family:Trebuchet MS,cursive,sans-serif}.say_quote{font-family:Georgia,Verdana,sans-serif}.say_quote_italics{font-style:italic;font-family:Georgia,Verdana,sans-serif}.terminus{font-family:Times New Roman,Times,serif,sans-serif}.spacer{color:#9c660b}.teppi{color:#816540;word-spacing:4pt;font-family:Segoe Script Bold,Segoe Script,sans-serif,Verdana}.shadekin{color:#be3cc5;font-size:150%;font-weight:700;font-family:Gabriola,cursive,sans-serif}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.theme-light .Tab--selected{background-color:rgba(255,255,255,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#353535}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-light .Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.theme-light .Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.theme-light .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-light .Section .Section:first-child{margin-top:-.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Section--flex{display:flex;flex-flow:column}.theme-light .Section--flex .Section__content{overflow:auto;flex-grow:1}.theme-light .Section__content--noTopPadding{padding-top:0}.theme-light .Section__content--stretchContents{height:calc(100% - 3rem)}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconPosition--right .fa,.theme-light .Button--hasContent.Button--iconPosition--right .fas,.theme-light .Button--hasContent.Button--iconPosition--right .far{margin-right:0;margin-left:3px}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--black:hover,.theme-light .Button--color--black:focus{background-color:#131313;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--white:hover,.theme-light .Button--color--white:focus{background-color:#efefef;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--red:hover,.theme-light .Button--color--red:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--orange:hover,.theme-light .Button--color--orange:focus{background-color:#ea7426;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--yellow:hover,.theme-light .Button--color--yellow:focus{background-color:#efce17;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--olive:hover,.theme-light .Button--color--olive:focus{background-color:#afc328;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--green:hover,.theme-light .Button--color--green:focus{background-color:#2fac4c;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--teal:hover,.theme-light .Button--color--teal:focus{background-color:#13afa9;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--blue:hover,.theme-light .Button--color--blue:focus{background-color:#3086c7;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--violet:hover,.theme-light .Button--color--violet:focus{background-color:#6a41c1;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--purple:hover,.theme-light .Button--color--purple:focus{background-color:#a03fc0;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--pink:hover,.theme-light .Button--color--pink:focus{background-color:#da3f96;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--brown:hover,.theme-light .Button--color--brown:focus{background-color:#a26c49;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--grey:hover,.theme-light .Button--color--grey:focus{background-color:#efefef;color:#000}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--good:hover,.theme-light .Button--color--good:focus{background-color:#62a635;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--average:hover,.theme-light .Button--color--average:focus{background-color:#e48f20;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--bad:hover,.theme-light .Button--color--bad:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--label:hover,.theme-light .Button--color--label:focus{background-color:#464646;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--default:hover,.theme-light .Button--color--default:focus{background-color:#eaeaea;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--caution:hover,.theme-light .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--danger:hover,.theme-light .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--transparent:hover,.theme-light .Button--color--transparent:focus{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color .1s,background-color .1s}.theme-light .Button--selected:hover,.theme-light .Button--selected:focus{background-color:#1a8be7;color:#fff}.theme-light .Button--flex{display:inline-flex;flex-direction:column}.theme-light .Button--flex--fluid{width:100%}.theme-light .Button--verticalAlignContent--top{justify-content:flex-start}.theme-light .Button--verticalAlignContent--middle{justify-content:center}.theme-light .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-light .Button__content{display:block;align-self:stretch}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#fff;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#fff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15) 0%,rgba(255,255,255,0) 100%);border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Slider{cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .9s ease-out}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .9s ease-out,width .9s ease-out}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s ease-out}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Layout__content--flexRow{display:flex;flex-flow:row}.theme-light .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom,#eee 0%,#eee 100%)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s ease-out,background-color .25s ease-out}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;display:inline-block;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap;pointer-events:none}.theme-light .TitleBar__buttons{pointer-events:initial;display:inline-block;width:100%;margin-left:10px}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#fff;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.visited,.theme-light a:visited{color:#f0f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:visited,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .bold,.theme-light .name,.theme-light .prefix,.theme-light .ooc,.theme-light .looc,.theme-light .adminooc,.theme-light .admin,.theme-light .medal,.theme-light .yell{font-weight:700}.theme-light .italic,.theme-light .italics{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .ooc{color:#002eb8;font-weight:700}.theme-light .ooc .elevated{color:#2e78d9}.theme-light .ooc .moderator{color:#184880}.theme-light .ooc .developer{color:#1b521f}.theme-light .ooc .admin{color:#b82e00}.theme-light .ooc .event_manager{color:#603}.theme-light .ooc .aooc{color:#960018}.theme-light img.text_tag{width:32px;height:10px;min-height:10px}.theme-light img.icon{vertical-align:middle;max-height:1em}.theme-light img.icon.bigicon{max-height:32px}.theme-light .looc{color:#3a9696;font-weight:700}.theme-light .rlooc{color:#3abb96;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#700038;font-weight:700}.theme-light .adminsay{color:#ff4500;font-weight:700}.theme-light .admin{color:#4473ff;font-weight:700}.theme-light .mentor_channel{color:olive;font-weight:700}.theme-light .mod_channel{color:#735638;font-weight:700}.theme-light .admin_channel{color:#9611d4;font-weight:700}.theme-light .event_channel{color:#c39;font-weight:700}.theme-light .name{font-weight:700}.theme-light .psay,.theme-light .pemote{color:purple;font-style:italic}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:#0f0}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#337296}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#339661}.theme-light .engradio{color:#948f02}.theme-light .supradio{color:#a8732b}.theme-light .srvradio{color:#6eaa2c}.theme-light .expradio{color:#555}.theme-light .syndradio{color:#6d3f40}.theme-light .gangradio{color:#ac2ea1}.theme-light .centradio{color:#686868}.theme-light .airadio{color:#f0f}.theme-light .redteamradio{color:red!important}.theme-light .blueteamradio{color:#00f!important}.theme-light .greenteamradio{color:#0f0!important}.theme-light .yellowteamradio{color:#d1ba22!important}.theme-light .yell{font-weight:700}.theme-light .alert,.theme-light .valert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .userdanger{color:red;font-weight:700;font-size:185%}.theme-light .bolddanger{color:red;font-weight:700}.theme-light .danger,.theme-light .vdanger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning,.theme-light .vwarning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:700}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .announce{color:#228b22;font-weight:700}.theme-light .boldannounce{color:red;font-weight:700}.theme-light .minorannounce{color:red;font-weight:700;font-size:185%}.theme-light .minoralert{color:#000;font-size:125%}.theme-light .priorityannounce{color:#000;font-weight:700;font-size:225%}.theme-light .prioritytitle{color:#00f;font-weight:700;font-size:185%}.theme-light .priorityalert{color:red;font-size:140%}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice,.theme-light .vnotice{color:#009}.theme-light .tinynotice{color:#009;font-size:85%}.theme-light .tinynoticeital{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:#00f}.theme-light .adminhelp{color:red;font-weight:700}.theme-light .log_message{color:#386aff;font-weight:700}.theme-light .unconscious{color:#00f;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .grey{color:#838383}.theme-light .red{color:red}.theme-light .crimson{color:#dc143c}.theme-light .maroon{color:maroon}.theme-light .brown{color:#8d4925}.theme-light .blue{color:#00f}.theme-light .black,.theme-light .white{color:#000}.theme-light .darkgray{color:gray}.theme-light .gray{color:#a9a9a9}.theme-light .yellow{color:#fc0}.theme-light .pink{color:pink}.theme-light .cyan{color:#0ff}.theme-light .orange{color:#ff8c00}.theme-light .nicegreen{color:#14a833}.theme-light .boldnicegreen{color:#14a833;font-weight:700}.theme-light .cult{color:#973e3b}.theme-light .cultitalic{color:#973e3b;font-style:italic}.theme-light .cultbold{color:#973e3b;font-style:italic;font-weight:700}.theme-light .cultboldtalic,.theme-light .cultlarge{color:#973e3b;font-weight:700;font-size:185%}.theme-light .blob{color:#ee4000}.theme-light .blobannounce{color:#323f1c;font-weight:700;font-size:185%}.theme-light .narsie{color:#973e3b;font-weight:700;font-size:925%}.theme-light .narsiesmall{color:#973e3b;font-weight:700;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{color:#609;font-weight:700;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .lightpurple{color:#ad5aad}.theme-light .darkpink{color:#e3209b}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{color:#1d2953;font-weight:700;font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-light .spiderbroodmother{color:#4d004d;font-weight:700;font-size:185%}.theme-light .spiderbreacher{color:#804b02;font-weight:700;font-size:140%}.theme-light .spiderscout{color:#0c0674;font-weight:700;font-size:120%}.theme-light .interface{color:#303}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-light .robot{font-family:Courier New,cursive,sans-serif}.theme-light .tape_recorder{color:maroon;font-family:Courier New,cursive,sans-serif}.theme-light .command_headset{font-weight:700;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:#0f0;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-light .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .hypnophrase{color:#0d0d0d;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}to{color:#3bb5d3}}.theme-light .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}to{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .bigicon{font-size:2.5em}.theme-light .hugeicon{font-size:5em}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:700;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .upside_down{display:inline;-moz-transform:scale(-1,-1);-webkit-transform:scale(-1,-1);-o-transform:scale(-1,-1);-ms-transform:scale(-1,-1);transform:scale(-1)}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em}.theme-light .examine_block{background:#f2f7fa;border:1px solid #111a27;margin:.5em;padding:.5em .75em}.theme-light .tooltip{font-style:italic;border-bottom:1px dashed #000}.theme-light .major_announcement_title{font-size:175%;padding:0rem .5rem;line-height:100%;text-align:left;text-decoration:none;width:100%}.theme-light .subheader_announcement_text{font-weight:700;padding:.25rem .5rem 0;line-height:100%;width:100%;height:100%;text-align:left;font-size:125%}.theme-light .major_announcement_text{color:#131313;background-color:#eaeaea;font-weight:700;font-size:100%;text-align:left;padding:.5rem;width:100%;height:100%}.theme-light .minor_announcement_title{font-weight:700;padding:0 .5rem;padding-top:0;line-height:100%;width:100%;height:100%;text-align:left;font-size:150%}.theme-light .minor_announcement_text{background-color:#eaeaea;color:#202020;padding:.5rem;text-align:left;font-size:100%}.theme-light .announcement_header{padding:.5rem 0;display:flex;flex-direction:column}.theme-light .chat_alert_default{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#bdc8ff,#bdc8ff 10px,#b3bfff 10px,#b3bfff 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_default .major_announcement_title,.theme-light .chat_alert_default .minor_announcement_title{color:#003061}.theme-light .chat_alert_default .subheader_announcement_text{color:#6b0020}.theme-light .chat_alert_default .minor_announcement_text,.theme-light .chat_alert_default .major_announcement_text{background-color:#d7ddff}.theme-light .chat_alert_green{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#bdffbd,#bdffbd 10px,#adffad 10px,#adffad 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_green .major_announcement_title,.theme-light .chat_alert_green .minor_announcement_title{color:#005229}.theme-light .chat_alert_green .subheader_announcement_text{color:#6b0020}.theme-light .chat_alert_green .minor_announcement_text,.theme-light .chat_alert_green .major_announcement_text{background-color:#d7ffd7}.theme-light .chat_alert_blue{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#bdc8ff,#bdc8ff 10px,#b3bfff 10px,#b3bfff 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_blue .major_announcement_title,.theme-light .chat_alert_blue .minor_announcement_title{color:#003061}.theme-light .chat_alert_blue .subheader_announcement_text{color:#6b0020}.theme-light .chat_alert_blue .minor_announcement_text,.theme-light .chat_alert_blue .major_announcement_text{background-color:#d7ddff}.theme-light .chat_alert_pink{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ffc2e5,#ffc2e5 10px,#ffb3df 10px,#ffb3df 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_pink .major_announcement_title,.theme-light .chat_alert_pink .minor_announcement_title{color:#800033}.theme-light .chat_alert_pink .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_pink .minor_announcement_text,.theme-light .chat_alert_pink .major_announcement_text{background-color:#ffdcf0}.theme-light .chat_alert_yellow{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#fff5c2,#fff5c2 10px,#fff3b3 10px,#fff3b3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_yellow .major_announcement_title,.theme-light .chat_alert_yellow .minor_announcement_title{color:#754900}.theme-light .chat_alert_yellow .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_yellow .minor_announcement_text,.theme-light .chat_alert_yellow .major_announcement_text{background-color:#fff9dc}.theme-light .chat_alert_orange{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ffe8c2,#ffe8c2 10px,#ffe2b3 10px,#ffe2b3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_orange .major_announcement_title,.theme-light .chat_alert_orange .minor_announcement_title{color:#823208}.theme-light .chat_alert_orange .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_orange .minor_announcement_text,.theme-light .chat_alert_orange .major_announcement_text{background-color:#fff2dc}.theme-light .chat_alert_red{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ffc2c2,#ffc2c2 10px,#ffb3b3 10px,#ffb3b3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_red .major_announcement_title,.theme-light .chat_alert_red .minor_announcement_title{color:#800029}.theme-light .chat_alert_red .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_red .minor_announcement_text,.theme-light .chat_alert_red .major_announcement_text{background-color:#ffdcdc}.theme-light .chat_alert_purple{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#fbd1ff,#fbd1ff 10px,#fac2ff 10px,#fac2ff 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_purple .major_announcement_title,.theme-light .chat_alert_purple .minor_announcement_title{color:#450d8c}.theme-light .chat_alert_purple .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_purple .minor_announcement_text,.theme-light .chat_alert_purple .major_announcement_text{background-color:#fdebff}.theme-light .chat_alert_grey{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#ebebeb,#ebebeb 10px,#e3e3e3 10px,#e3e3e3 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-light .chat_alert_grey .major_announcement_title,.theme-light .chat_alert_grey .minor_announcement_title{color:#800033}.theme-light .chat_alert_grey .subheader_announcement_text{color:#002c85}.theme-light .chat_alert_grey .minor_announcement_text,.theme-light .chat_alert_grey .major_announcement_text{background-color:#f8f8f8}.theme-light .tajaran{color:#803b56}.theme-light .tajaran_signlang{color:#941c1c}.theme-light .akhani{color:#ac398c}.theme-light .skrell{color:#00b0b3}.theme-light .skrellfar{color:#70fcff}.theme-light .soghun{color:#50ba6c}.theme-light .solcom{color:#3333ce}.theme-light .sergal{color:#07f}.theme-light .birdsongc{color:#c90}.theme-light .vulpkanin{color:#b97a57}.theme-light .tavan{color:#f54298;font-family:Arial}.theme-light .echosong{color:#826d8c}.theme-light .enochian{color:#848a33;letter-spacing:-1pt;word-spacing:4pt;font-family:Lucida Sans Unicode,Lucida Grande,sans-serif}.theme-light .daemon{color:#5e339e;letter-spacing:-1pt;word-spacing:0pt;font-family:Courier New,Courier,monospace}.theme-light .drudakar{color:#bb2463;word-spacing:0pt;font-family:High Tower Text,monospace}.theme-light .bug{color:#9e9e39}.theme-light .vox{color:#a0a}.theme-light .promethean{color:#5a5a5a;font-family:Comic Sans MS,Comic Sans,cursive}.theme-light .zaddat{color:#941c1c}.theme-light .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .say_quote_italics{font-style:italic;font-family:Georgia,Verdana,sans-serif}.theme-light .terminus{font-family:Times New Roman,Times,serif,sans-serif}.theme-light .spacer{color:#9c660b}.theme-light .teppi{color:#816540;word-spacing:4pt;font-family:Segoe Script Bold,Segoe Script,sans-serif,Verdana}.theme-light .shadekin{color:#be3cc5;font-size:150%;font-weight:700;font-family:Gabriola,cursive,sans-serif}.theme-vchatdark .color-black{color:#1a1a1a!important}.theme-vchatdark .color-white{color:#fff!important}.theme-vchatdark .color-red{color:#df3e3e!important}.theme-vchatdark .color-orange{color:#f37f33!important}.theme-vchatdark .color-yellow{color:#fbda21!important}.theme-vchatdark .color-olive{color:#cbe41c!important}.theme-vchatdark .color-green{color:#25ca4c!important}.theme-vchatdark .color-teal{color:#00d6cc!important}.theme-vchatdark .color-blue{color:#2e93de!important}.theme-vchatdark .color-violet{color:#7349cf!important}.theme-vchatdark .color-purple{color:#ad45d0!important}.theme-vchatdark .color-pink{color:#e34da1!important}.theme-vchatdark .color-brown{color:#b97447!important}.theme-vchatdark .color-grey{color:#848484!important}.theme-vchatdark .color-good{color:#68c22d!important}.theme-vchatdark .color-average{color:#f29a29!important}.theme-vchatdark .color-bad{color:#df3e3e!important}.theme-vchatdark .color-label{color:#8b9bb0!important}.theme-vchatdark .color-bg-black{background-color:#000!important}.theme-vchatdark .color-bg-white{background-color:#d9d9d9!important}.theme-vchatdark .color-bg-red{background-color:#bd2020!important}.theme-vchatdark .color-bg-orange{background-color:#d95e0c!important}.theme-vchatdark .color-bg-yellow{background-color:#d9b804!important}.theme-vchatdark .color-bg-olive{background-color:#9aad14!important}.theme-vchatdark .color-bg-green{background-color:#1b9638!important}.theme-vchatdark .color-bg-teal{background-color:#009a93!important}.theme-vchatdark .color-bg-blue{background-color:#1c71b1!important}.theme-vchatdark .color-bg-violet{background-color:#552dab!important}.theme-vchatdark .color-bg-purple{background-color:#8b2baa!important}.theme-vchatdark .color-bg-pink{background-color:#cf2082!important}.theme-vchatdark .color-bg-brown{background-color:#8c5836!important}.theme-vchatdark .color-bg-grey{background-color:#646464!important}.theme-vchatdark .color-bg-good{background-color:#4d9121!important}.theme-vchatdark .color-bg-average{background-color:#cd7a0d!important}.theme-vchatdark .color-bg-bad{background-color:#bd2020!important}.theme-vchatdark .color-bg-label{background-color:#657a94!important}.theme-vchatdark .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:rgba(0,0,0,.33)}.theme-vchatdark .Tabs--fill{height:100%}.theme-vchatdark .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-vchatdark .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-vchatdark .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-vchatdark .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-vchatdark .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-vchatdark .Tabs--horizontal:last-child{margin-bottom:0}.theme-vchatdark .Tabs__Tab{flex-grow:0}.theme-vchatdark .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-vchatdark .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-vchatdark .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.theme-vchatdark .Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.theme-vchatdark .Tab__text{flex-grow:1;margin:0 .5em}.theme-vchatdark .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-vchatdark .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-vchatdark .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-vchatdark .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.theme-vchatdark .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-vchatdark .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.theme-vchatdark .Tab--selected.Tab--color--black{color:#535353}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.theme-vchatdark .Tab--selected.Tab--color--white{color:#fff}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.theme-vchatdark .Tab--selected.Tab--color--red{color:#e76e6e}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.theme-vchatdark .Tab--selected.Tab--color--orange{color:#f69f66}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.theme-vchatdark .Tab--selected.Tab--color--yellow{color:#fce358}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.theme-vchatdark .Tab--selected.Tab--color--olive{color:#d8eb55}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.theme-vchatdark .Tab--selected.Tab--color--green{color:#53e074}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.theme-vchatdark .Tab--selected.Tab--color--teal{color:#21fff5}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.theme-vchatdark .Tab--selected.Tab--color--blue{color:#62aee6}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.theme-vchatdark .Tab--selected.Tab--color--violet{color:#9676db}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.theme-vchatdark .Tab--selected.Tab--color--purple{color:#c274db}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.theme-vchatdark .Tab--selected.Tab--color--pink{color:#ea79b9}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.theme-vchatdark .Tab--selected.Tab--color--brown{color:#ca9775}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.theme-vchatdark .Tab--selected.Tab--color--grey{color:#a3a3a3}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.theme-vchatdark .Tab--selected.Tab--color--good{color:#8cd95a}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.theme-vchatdark .Tab--selected.Tab--color--average{color:#f5b35e}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.theme-vchatdark .Tab--selected.Tab--color--bad{color:#e76e6e}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.theme-vchatdark .Tab--selected.Tab--color--label{color:#a8b4c4}.theme-vchatdark .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.theme-vchatdark .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.theme-vchatdark .Section{position:relative;margin-bottom:.5em;background-color:#191919;background-color:rgba(0,0,0,.33);box-sizing:border-box}.theme-vchatdark .Section:last-child{margin-bottom:0}.theme-vchatdark .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-vchatdark .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-vchatdark .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-vchatdark .Section__rest{position:relative}.theme-vchatdark .Section__content{padding:.66em .5em}.theme-vchatdark .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-vchatdark .Section--fill{display:flex;flex-direction:column;height:100%}.theme-vchatdark .Section--fill>.Section__rest{flex-grow:1}.theme-vchatdark .Section--fill>.Section__rest>.Section__content{height:100%}.theme-vchatdark .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-vchatdark .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-vchatdark .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-vchatdark .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-vchatdark .Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.theme-vchatdark .Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.theme-vchatdark .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-vchatdark .Section .Section:first-child{margin-top:-.5em}.theme-vchatdark .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-vchatdark .Section .Section .Section .Section__titleText{font-size:1em}.theme-vchatdark .Section--flex{display:flex;flex-flow:column}.theme-vchatdark .Section--flex .Section__content{overflow:auto;flex-grow:1}.theme-vchatdark .Section__content--noTopPadding{padding-top:0}.theme-vchatdark .Section__content--stretchContents{height:calc(100% - 3rem)}.theme-vchatdark .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-vchatdark .Button:last-child{margin-right:0;margin-bottom:0}.theme-vchatdark .Button .fa,.theme-vchatdark .Button .fas,.theme-vchatdark .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-vchatdark .Button--hasContent .fa,.theme-vchatdark .Button--hasContent .fas,.theme-vchatdark .Button--hasContent .far{margin-right:.25em}.theme-vchatdark .Button--hasContent.Button--iconPosition--right .fa,.theme-vchatdark .Button--hasContent.Button--iconPosition--right .fas,.theme-vchatdark .Button--hasContent.Button--iconPosition--right .far{margin-right:0;margin-left:3px}.theme-vchatdark .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-vchatdark .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-vchatdark .Button--circular{border-radius:50%}.theme-vchatdark .Button--compact{padding:0 .25em;line-height:1.333em}.theme-vchatdark .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-vchatdark .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--black:hover,.theme-vchatdark .Button--color--black:focus{background-color:#131313;color:#fff}.theme-vchatdark .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.theme-vchatdark .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--white:hover,.theme-vchatdark .Button--color--white:focus{background-color:#f8f8f8;color:#000}.theme-vchatdark .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-vchatdark .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--red:hover,.theme-vchatdark .Button--color--red:focus{background-color:#dc4848;color:#fff}.theme-vchatdark .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.theme-vchatdark .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--orange:hover,.theme-vchatdark .Button--color--orange:focus{background-color:#f0853f;color:#fff}.theme-vchatdark .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-vchatdark .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--yellow:hover,.theme-vchatdark .Button--color--yellow:focus{background-color:#f5d72e;color:#000}.theme-vchatdark .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.theme-vchatdark .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--olive:hover,.theme-vchatdark .Button--color--olive:focus{background-color:#c4da2b;color:#fff}.theme-vchatdark .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-vchatdark .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--green:hover,.theme-vchatdark .Button--color--green:focus{background-color:#32c154;color:#fff}.theme-vchatdark .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.theme-vchatdark .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--teal:hover,.theme-vchatdark .Button--color--teal:focus{background-color:#13c4bc;color:#fff}.theme-vchatdark .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.theme-vchatdark .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--blue:hover,.theme-vchatdark .Button--color--blue:focus{background-color:#3a95d9;color:#fff}.theme-vchatdark .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.theme-vchatdark .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--violet:hover,.theme-vchatdark .Button--color--violet:focus{background-color:#7953cc;color:#fff}.theme-vchatdark .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.theme-vchatdark .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--purple:hover,.theme-vchatdark .Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.theme-vchatdark .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.theme-vchatdark .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--pink:hover,.theme-vchatdark .Button--color--pink:focus{background-color:#e257a5;color:#fff}.theme-vchatdark .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.theme-vchatdark .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--brown:hover,.theme-vchatdark .Button--color--brown:focus{background-color:#b47851;color:#fff}.theme-vchatdark .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.theme-vchatdark .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--grey:hover,.theme-vchatdark .Button--color--grey:focus{background-color:#868686;color:#fff}.theme-vchatdark .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.theme-vchatdark .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--good:hover,.theme-vchatdark .Button--color--good:focus{background-color:#6cba39;color:#fff}.theme-vchatdark .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.theme-vchatdark .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--average:hover,.theme-vchatdark .Button--color--average:focus{background-color:#ed9d35;color:#fff}.theme-vchatdark .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-vchatdark .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--bad:hover,.theme-vchatdark .Button--color--bad:focus{background-color:#dc4848;color:#fff}.theme-vchatdark .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.theme-vchatdark .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--label:hover,.theme-vchatdark .Button--color--label:focus{background-color:#91a1b3;color:#fff}.theme-vchatdark .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.theme-vchatdark .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--default:hover,.theme-vchatdark .Button--color--default:focus{background-color:#5c83b0;color:#fff}.theme-vchatdark .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.theme-vchatdark .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--caution:hover,.theme-vchatdark .Button--color--caution:focus{background-color:#f5d72e;color:#000}.theme-vchatdark .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.theme-vchatdark .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--danger:hover,.theme-vchatdark .Button--color--danger:focus{background-color:#dc4848;color:#fff}.theme-vchatdark .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#252525;color:#fff;background-color:rgba(37,37,37,0);color:rgba(255,255,255,.5)}.theme-vchatdark .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--color--transparent:hover,.theme-vchatdark .Button--color--transparent:focus{background-color:#3e3e3e;color:#fff}.theme-vchatdark .Button--disabled{background-color:#999!important}.theme-vchatdark .Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.theme-vchatdark .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-vchatdark .Button--selected:focus{transition:color .1s,background-color .1s}.theme-vchatdark .Button--selected:hover,.theme-vchatdark .Button--selected:focus{background-color:#32c154;color:#fff}.theme-vchatdark .Button--flex{display:inline-flex;flex-direction:column}.theme-vchatdark .Button--flex--fluid{width:100%}.theme-vchatdark .Button--verticalAlignContent--top{justify-content:flex-start}.theme-vchatdark .Button--verticalAlignContent--middle{justify-content:center}.theme-vchatdark .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-vchatdark .Button__content{display:block;align-self:stretch}.theme-vchatdark .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-vchatdark .NumberInput--fluid{display:block}.theme-vchatdark .NumberInput__content{margin-left:.5em}.theme-vchatdark .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-vchatdark .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.theme-vchatdark .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-vchatdark .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-vchatdark .Input--fluid{display:block;width:auto}.theme-vchatdark .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-vchatdark .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-vchatdark .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-vchatdark .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-vchatdark .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-vchatdark .TextArea--fluid{display:block;width:auto;height:auto}.theme-vchatdark .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-vchatdark .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-vchatdark .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-vchatdark .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-vchatdark .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15) 0%,rgba(255,255,255,0) 100%);border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-vchatdark .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-vchatdark .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-vchatdark .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-vchatdark .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-vchatdark .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-vchatdark .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-vchatdark .Knob__ringFillPivot{transform:rotate(135deg)}.theme-vchatdark .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-vchatdark .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-vchatdark .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-vchatdark .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-vchatdark .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-vchatdark .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-vchatdark .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-vchatdark .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-vchatdark .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-vchatdark .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-vchatdark .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-vchatdark .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-vchatdark .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-vchatdark .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-vchatdark .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-vchatdark .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-vchatdark .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-vchatdark .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-vchatdark .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-vchatdark .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-vchatdark .Slider{cursor:e-resize}.theme-vchatdark .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-vchatdark .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-vchatdark .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-vchatdark .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-vchatdark .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .9s ease-out}.theme-vchatdark .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-vchatdark .ProgressBar__fill--animated{transition:background-color .9s ease-out,width .9s ease-out}.theme-vchatdark .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-vchatdark .ProgressBar--color--default{border:.0833333333em solid #3e6189}.theme-vchatdark .ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.theme-vchatdark .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-vchatdark .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-vchatdark .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-vchatdark .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-vchatdark .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-vchatdark .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-vchatdark .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-vchatdark .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-vchatdark .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-vchatdark .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-vchatdark .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-vchatdark .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-vchatdark .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-vchatdark .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-vchatdark .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-vchatdark .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-vchatdark .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-vchatdark .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-vchatdark .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-vchatdark .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-vchatdark .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-vchatdark .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-vchatdark .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-vchatdark .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-vchatdark .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-vchatdark .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-vchatdark .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-vchatdark .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-vchatdark .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-vchatdark .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-vchatdark .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-vchatdark .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-vchatdark .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-vchatdark .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-vchatdark .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-vchatdark .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-vchatdark .Chat{color:#abc6ec}.theme-vchatdark .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s ease-out}.theme-vchatdark .Chat__badge:before{content:"x"}.theme-vchatdark .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-vchatdark .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-vchatdark .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-vchatdark .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:rgba(0,0,0,.33)}.theme-vchatdark .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-vchatdark .Chat__highlight{color:#000}.theme-vchatdark .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-vchatdark .ChatMessage{word-wrap:break-word}.theme-vchatdark .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-vchatdark .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-vchatdark .Layout,.theme-vchatdark .Layout *{scrollbar-base-color:#1c1c1c;scrollbar-face-color:#3b3b3b;scrollbar-3dlight-color:#252525;scrollbar-highlight-color:#252525;scrollbar-track-color:#1c1c1c;scrollbar-arrow-color:#929292;scrollbar-shadow-color:#3b3b3b}.theme-vchatdark .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-vchatdark .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-vchatdark .Layout__content--flexRow{display:flex;flex-flow:row}.theme-vchatdark .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-vchatdark .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#252525;background-image:linear-gradient(to bottom,#2a2a2a 0%,#202020 100%)}.theme-vchatdark .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-vchatdark .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-vchatdark .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-vchatdark .Window__contentPadding:after{height:0}.theme-vchatdark .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-vchatdark .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(62,62,62,.25);pointer-events:none}.theme-vchatdark .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-vchatdark .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-vchatdark .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-vchatdark .TitleBar{background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-vchatdark .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#363636;transition:color .25s ease-out,background-color .25s ease-out}.theme-vchatdark .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-vchatdark .TitleBar__title{position:absolute;display:inline-block;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap;pointer-events:none}.theme-vchatdark .TitleBar__buttons{pointer-events:initial;display:inline-block;width:100%;margin-left:10px}.theme-vchatdark .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-vchatdark .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-vchatdark .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-vchatdark .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-vchatdark img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-vchatdark img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-vchatdark a{color:#397ea5}.theme-vchatdark a.visited,.theme-vchatdark a:visited{color:#7c00e6}.theme-vchatdark a.popt{text-decoration:none}.theme-vchatdark .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-vchatdark .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-vchatdark .popup .close:hover{background:#999}.theme-vchatdark .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-vchatdark .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-vchatdark .popup input[type=text]:hover,.theme-vchatdark .popup input[type=text]:active,.theme-vchatdark .popup input[type=text]:focus{border-color:green}.theme-vchatdark .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-vchatdark .popup input[type=submit]:hover,.theme-vchatdark .popup input[type=submit]:focus,.theme-vchatdark .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-vchatdark .changeFont{padding:10px}.theme-vchatdark .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-vchatdark .changeFont a:hover{background:#ccc}.theme-vchatdark .highlightPopup{padding:10px;text-align:center}.theme-vchatdark .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-vchatdark .highlightPopup input.highlightColor{background-color:#ff0}.theme-vchatdark .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-vchatdark .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-vchatdark .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-vchatdark .contextMenu a:hover{background-color:#ccc}.theme-vchatdark .filterMessages{padding:5px}.theme-vchatdark .filterMessages div{padding:2px 0}.theme-vchatdark .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-vchatdark .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-vchatdark .motd h1,.theme-vchatdark .motd h2,.theme-vchatdark .motd h3,.theme-vchatdark .motd h4,.theme-vchatdark .motd h5,.theme-vchatdark .motd h6{color:#638500;text-decoration:underline}.theme-vchatdark .motd a,.theme-vchatdark .motd a:link,.theme-vchatdark .motd a:visited,.theme-vchatdark .motd a:active,.theme-vchatdark .motd a:hover{color:#638500}.theme-vchatdark .bold,.theme-vchatdark .name,.theme-vchatdark .prefix,.theme-vchatdark .ooc,.theme-vchatdark .looc,.theme-vchatdark .adminooc,.theme-vchatdark .admin,.theme-vchatdark .medal,.theme-vchatdark .yell{font-weight:700}.theme-vchatdark .italic,.theme-vchatdark .italics{font-style:italic}.theme-vchatdark .highlight{background:#ff0}.theme-vchatdark h1,.theme-vchatdark h2,.theme-vchatdark h3,.theme-vchatdark h4,.theme-vchatdark h5,.theme-vchatdark h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}.theme-vchatdark h1.alert,.theme-vchatdark h2.alert{color:#a4bad6}.theme-vchatdark em{font-style:normal;font-weight:700}.theme-vchatdark .ooc{color:#004ed8;font-weight:700}.theme-vchatdark .ooc .elevated{color:#2e78d9}.theme-vchatdark .ooc .moderator{color:#184880}.theme-vchatdark .ooc .developer{color:#1b521f}.theme-vchatdark .ooc .admin{color:#b82e00}.theme-vchatdark .ooc .event_manager{color:#603}.theme-vchatdark .ooc .aooc{color:#960018}.theme-vchatdark img.text_tag{width:32px;height:10px;min-height:10px}.theme-vchatdark img.icon{vertical-align:middle;max-height:1em}.theme-vchatdark img.icon.bigicon{max-height:32px}.theme-vchatdark .looc{color:#3a9696;font-weight:700}.theme-vchatdark .rlooc{color:#3abb96;font-weight:700}.theme-vchatdark .adminobserverooc{color:#09c;font-weight:700}.theme-vchatdark .adminooc{color:#3d5bc3;font-weight:700}.theme-vchatdark .adminsay{color:#ff4500;font-weight:700}.theme-vchatdark .admin{color:#5975da;font-weight:700}.theme-vchatdark .mentor_channel{color:olive;font-weight:700}.theme-vchatdark .mod_channel{color:#735638;font-weight:700}.theme-vchatdark .admin_channel{color:#9611d4;font-weight:700}.theme-vchatdark .event_channel{color:#c39;font-weight:700}.theme-vchatdark .name{font-weight:700}.theme-vchatdark .say,.theme-vchatdark .emote,.theme-vchatdark .emotesubtle,.theme-vchatdark .npcemote,.theme-vchatdark .npcsay,.theme-vchatdark .infoplain,.theme-vchatdark .oocplain,.theme-vchatdark .warningplain,.theme-vchatdark .chatexport{color:#fff}.theme-vchatdark .psay,.theme-vchatdark .pemote{color:#e300e4;font-style:italic}.theme-vchatdark .deadsay{color:#732fcd}.theme-vchatdark .binarysay{color:#1e90ff}.theme-vchatdark .binarysay a{color:#0f0}.theme-vchatdark .binarysay a:active,.theme-vchatdark .binarysay a:visited{color:#8f8}.theme-vchatdark .radio{color:#00a800}.theme-vchatdark .sciradio{color:#939}.theme-vchatdark .comradio{color:#395a9a}.theme-vchatdark .secradio{color:#a30000}.theme-vchatdark .medradio{color:#008160}.theme-vchatdark .engradio{color:#a66300}.theme-vchatdark .supradio{color:#5f4519}.theme-vchatdark .srvradio{color:#6eaa2c}.theme-vchatdark .expradio{color:#555}.theme-vchatdark .syndradio{color:#6d3f40}.theme-vchatdark .gangradio{color:#ac2ea1}.theme-vchatdark .centradio{color:#5c5c8a}.theme-vchatdark .airadio{color:#f0f}.theme-vchatdark .redteamradio{color:#f44!important}.theme-vchatdark .blueteamradio{color:#3434fd!important}.theme-vchatdark .greenteamradio{color:#34fd34!important}.theme-vchatdark .yellowteamradio{color:#fdfd34!important}.theme-vchatdark .yell{font-weight:700}.theme-vchatdark .alert{color:red}.theme-vchatdark .valert{color:#d82020}.theme-vchatdark .userdanger{color:#c51e1e;font-weight:700;font-size:185%}.theme-vchatdark .bolddanger{color:#c51e1e;font-weight:700}.theme-vchatdark .danger,.theme-vchatdark .vdanger{color:#c51e1e}.theme-vchatdark .warning,.theme-vchatdark .vwarning{color:#c51e1e;font-style:italic}.theme-vchatdark .alertwarning{color:red;font-weight:700}.theme-vchatdark .boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.theme-vchatdark .announce,.theme-vchatdark .boldannounce{color:#c51e1e;font-weight:700}.theme-vchatdark .minorannounce{color:#c51e1e;font-weight:700;font-size:185%}.theme-vchatdark .minoralert{color:#a4bad6;font-size:125%}.theme-vchatdark .priorityannounce{color:#a4bad6;font-weight:700;font-size:225%}.theme-vchatdark .prioritytitle{color:#6685f5;font-weight:700;font-size:185%}.theme-vchatdark .priorityalert{color:#c51e1e;font-size:140%}.theme-vchatdark .greenannounce{color:#059223;font-weight:700}.theme-vchatdark .rose{color:#ff5050}.theme-vchatdark .info,.theme-vchatdark .notice,.theme-vchatdark .vnotice{color:#6060c9}.theme-vchatdark .tinynotice{color:#6060c9;font-size:85%}.theme-vchatdark .tinynoticeital{color:#6060c9;font-style:italic;font-size:85%}.theme-vchatdark .smallnotice{color:#6060c9;font-size:90%}.theme-vchatdark .smallnoticeital{color:#6060c9;font-style:italic;font-size:90%}.theme-vchatdark .bolditalic{font-style:italic;font-weight:700}.theme-vchatdark .boldnotice{color:#6060c9;font-weight:700}.theme-vchatdark .hear{color:#6060c9;font-style:italic}.theme-vchatdark .adminnotice{color:#6060c9}.theme-vchatdark .adminhelp{color:red;font-weight:700}.theme-vchatdark .log_message{color:#386aff;font-weight:700}.theme-vchatdark .unconscious{color:#a4bad6;font-weight:700}.theme-vchatdark .suicide{color:#ff5050;font-style:italic}.theme-vchatdark .green{color:#4f4}.theme-vchatdark .grey{color:#a9a9a9}.theme-vchatdark .red{color:red}.theme-vchatdark .crimson{color:#dc143c}.theme-vchatdark .maroon{color:#c60000}.theme-vchatdark .brown{color:#db733b}.theme-vchatdark .blue{color:#66f}.theme-vchatdark .black,.theme-vchatdark .white{color:#fff}.theme-vchatdark .darkgray{color:gray}.theme-vchatdark .gray{color:#a9a9a9}.theme-vchatdark .yellow{color:#fc0}.theme-vchatdark .pink{color:pink}.theme-vchatdark .cyan{color:#0ff}.theme-vchatdark .orange{color:#ff8c00}.theme-vchatdark .nicegreen{color:#059223}.theme-vchatdark .boldnicegreen{color:#059223;font-weight:700}.theme-vchatdark .blob{color:#ee4000}.theme-vchatdark .blobannounce{color:#556b2f;font-weight:700;font-size:185%}.theme-vchatdark .cult{color:#973e3b}.theme-vchatdark .cultitalic{color:#973e3b;font-style:italic}.theme-vchatdark .cultbold{color:#973e3b;font-style:italic;font-weight:700}.theme-vchatdark .cultboldtalic,.theme-vchatdark .cultlarge{color:#973e3b;font-weight:700;font-size:185%}.theme-vchatdark .narsie{color:#973e3b;font-weight:700;font-size:925%}.theme-vchatdark .narsiesmall{color:#973e3b;font-weight:700;font-size:370%}.theme-vchatdark .colossus{color:#7f282a;font-size:310%}.theme-vchatdark .hierophant{color:#b441ee;font-weight:700;font-style:italic}.theme-vchatdark .hierophant_warning{color:#c56bf1;font-style:italic}.theme-vchatdark .purple{color:#9956d3}.theme-vchatdark .lightpurple{color:#ad5aad}.theme-vchatdark .darkpink{color:#e3209b}.theme-vchatdark .holoparasite{color:#88809c}.theme-vchatdark .revennotice{color:#c099e2}.theme-vchatdark .revenboldnotice{color:#c099e2;font-weight:700}.theme-vchatdark .revenbignotice{color:#c099e2;font-weight:700;font-size:185%}.theme-vchatdark .revenminor{color:#823abb}.theme-vchatdark .revenwarning{color:#760fbb;font-style:italic}.theme-vchatdark .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-vchatdark .deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.theme-vchatdark .ghostalert{color:#60f;font-style:italic;font-weight:700}.theme-vchatdark .alien{color:#855d85}.theme-vchatdark .noticealien{color:#059223}.theme-vchatdark .alertalien{color:#059223;font-weight:700}.theme-vchatdark .changeling{color:#b000b1;font-style:italic}.theme-vchatdark .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-vchatdark .spiderbroodmother{color:#80f;font-weight:700;font-size:185%}.theme-vchatdark .spiderbreacher{color:#e8b670;font-weight:700;font-size:140%}.theme-vchatdark .spiderscout{color:#231d98;font-weight:700;font-size:120%}.theme-vchatdark .interface{color:#750e75}.theme-vchatdark .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-vchatdark .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-vchatdark .robot{font-family:Courier New,cursive,sans-serif}.theme-vchatdark .tape_recorder{color:red;font-family:Courier New,cursive,sans-serif}.theme-vchatdark .command_headset{font-weight:700;font-size:160%}.theme-vchatdark .small{font-size:60%}.theme-vchatdark .big{font-size:185%}.theme-vchatdark .reallybig{font-size:245%}.theme-vchatdark .extremelybig{font-size:310%}.theme-vchatdark .greentext{color:#059223;font-size:185%}.theme-vchatdark .redtext{color:#c51e1e;font-size:185%}.theme-vchatdark .clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-vchatdark .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-vchatdark .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-vchatdark .hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#202020}25%{color:#4b02ac}50%{color:#9f41f1}75%{color:#541c9c}to{color:#7adbf3}}.theme-vchatdark .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#f75a5a}50%{color:#d00}to{color:#f75a5a}}.theme-vchatdark .icon{height:1em;width:auto}.theme-vchatdark .bigicon{font-size:2.5em}.theme-vchatdark .hugeicon{font-size:5em}.theme-vchatdark .memo{color:#638500;text-align:center}.theme-vchatdark .memoedit{text-align:center;font-size:125%}.theme-vchatdark .abductor{color:#c204c2;font-style:italic}.theme-vchatdark .mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.theme-vchatdark .slime{color:#00ced1}.theme-vchatdark .drone{color:#848482}.theme-vchatdark .monkey{color:#975032}.theme-vchatdark .swarmer{color:#2c75ff}.theme-vchatdark .resonate{color:#298f85}.theme-vchatdark .upside_down{display:inline;-moz-transform:scale(-1,-1);-webkit-transform:scale(-1,-1);-o-transform:scale(-1,-1);-ms-transform:scale(-1,-1);transform:scale(-1)}.theme-vchatdark .connectionClosed,.theme-vchatdark .fatalError{background:red;color:#fff;padding:5px}.theme-vchatdark .connectionClosed.restored{background:green}.theme-vchatdark .internal.boldnshit{color:#3d5bc3;font-weight:700}.theme-vchatdark .text-normal{font-weight:400;font-style:normal}.theme-vchatdark .hidden{display:none;visibility:hidden}.theme-vchatdark .ml-1{margin-left:1em}.theme-vchatdark .ml-2{margin-left:2em}.theme-vchatdark .ml-3{margin-left:3em}.theme-vchatdark .examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.theme-vchatdark .tooltip{font-style:italic;border-bottom:1px dashed #fff}.theme-vchatdark .major_announcement_title{font-size:175%;padding:0rem .5rem;line-height:100%;text-align:left;text-decoration:none;width:100%}.theme-vchatdark .subheader_announcement_text{font-weight:700;padding:.25rem .5rem 0;line-height:100%;width:100%;height:100%;text-align:left;font-size:125%}.theme-vchatdark .major_announcement_text{color:#eaeaea;background-color:#131313;font-weight:700;font-size:100%;text-align:left;padding:.5rem;width:100%;height:100%}.theme-vchatdark .minor_announcement_title{font-weight:700;padding:0 .5rem;padding-top:0;line-height:100%;width:100%;height:100%;text-align:left;font-size:150%}.theme-vchatdark .minor_announcement_text{background-color:#202020;color:#eaeaea;padding:.5rem;text-align:left;font-size:100%}.theme-vchatdark .announcement_header{padding:.5rem 0;display:flex;flex-direction:column}.theme-vchatdark .chat_alert_default{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_default .major_announcement_title,.theme-vchatdark .chat_alert_default .minor_announcement_title{color:#33d5ff}.theme-vchatdark .chat_alert_default .subheader_announcement_text{color:#ff5297}.theme-vchatdark .chat_alert_default .minor_announcement_text,.theme-vchatdark .chat_alert_default .major_announcement_text{background-color:#001621}.theme-vchatdark .chat_alert_green{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#004700,#004700 10px,#003d00 10px,#003d00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_green .major_announcement_title,.theme-vchatdark .chat_alert_green .minor_announcement_title{color:#00ff80}.theme-vchatdark .chat_alert_green .subheader_announcement_text{color:#ff85b5}.theme-vchatdark .chat_alert_green .minor_announcement_text,.theme-vchatdark .chat_alert_green .major_announcement_text{background-color:#002400}.theme-vchatdark .chat_alert_blue{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#003045,#003045 10px,#00283a 10px,#00283a 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_blue .major_announcement_title,.theme-vchatdark .chat_alert_blue .minor_announcement_title{color:#33d5ff}.theme-vchatdark .chat_alert_blue .subheader_announcement_text{color:#ff5297}.theme-vchatdark .chat_alert_blue .minor_announcement_text,.theme-vchatdark .chat_alert_blue .major_announcement_text{background-color:#001621}.theme-vchatdark .chat_alert_pink{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#400025,#400025 10px,#30001b 10px,#30001b 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_pink .major_announcement_title,.theme-vchatdark .chat_alert_pink .minor_announcement_title{color:#ff5297}.theme-vchatdark .chat_alert_pink .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_pink .minor_announcement_text,.theme-vchatdark .chat_alert_pink .major_announcement_text{background-color:#17000d}.theme-vchatdark .chat_alert_yellow{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#4d4100,#4d4100 10px,#574a00 10px,#574a00 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_yellow .major_announcement_title,.theme-vchatdark .chat_alert_yellow .minor_announcement_title{color:#fff4e0}.theme-vchatdark .chat_alert_yellow .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_yellow .minor_announcement_text,.theme-vchatdark .chat_alert_yellow .major_announcement_text{background-color:#3e3400}.theme-vchatdark .chat_alert_orange{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#6b4200,#6b4200 10px,#593400 10px,#593400 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_orange .major_announcement_title,.theme-vchatdark .chat_alert_orange .minor_announcement_title{color:#feefe7}.theme-vchatdark .chat_alert_orange .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_orange .minor_announcement_text,.theme-vchatdark .chat_alert_orange .major_announcement_text{background-color:#402500}.theme-vchatdark .chat_alert_red{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#520000,#520000 10px,#420000 10px,#420000 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_red .major_announcement_title,.theme-vchatdark .chat_alert_red .minor_announcement_title{color:#ff5297}.theme-vchatdark .chat_alert_red .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_red .minor_announcement_text,.theme-vchatdark .chat_alert_red .major_announcement_text{background-color:#290000}.theme-vchatdark .chat_alert_purple{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#38003d,#38003d 10px,#2c0030 10px,#2c0030 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_purple .major_announcement_title,.theme-vchatdark .chat_alert_purple .minor_announcement_title{color:#c7a1f7}.theme-vchatdark .chat_alert_purple .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_purple .minor_announcement_text,.theme-vchatdark .chat_alert_purple .major_announcement_text{background-color:#150017}.theme-vchatdark .chat_alert_grey{color:#fff;padding:.5rem;box-shadow:none;font-weight:700;margin:1rem 0;padding:0;display:flex;flex-direction:column;border-image:repeating-linear-gradient(-45deg,#292929,#292929 10px,#252525 10px,#252525 20px);border-image-slice:4 fill;border-width:4px;border-image-width:4px;border-image-outset:0 0 0 0;border-image-repeat:repeat repeat;border-style:solid}.theme-vchatdark .chat_alert_grey .major_announcement_title,.theme-vchatdark .chat_alert_grey .minor_announcement_title{color:#ff5297}.theme-vchatdark .chat_alert_grey .subheader_announcement_text{color:#33d5ff}.theme-vchatdark .chat_alert_grey .minor_announcement_text,.theme-vchatdark .chat_alert_grey .major_announcement_text{background-color:#181818}.theme-vchatdark .tajaran{color:#803b56}.theme-vchatdark .tajaran_signlang{color:#941c1c}.theme-vchatdark .akhani{color:#ac398c}.theme-vchatdark .skrell{color:#00b0b3}.theme-vchatdark .skrellfar{color:#70fcff}.theme-vchatdark .soghun{color:#50ba6c}.theme-vchatdark .solcom{color:#6da6f0}.theme-vchatdark .sergal{color:#07f}.theme-vchatdark .birdsongc{color:#c90}.theme-vchatdark .vulpkanin{color:#b97a57}.theme-vchatdark .tavan{color:#f54298;font-family:Arial}.theme-vchatdark .echosong{color:#826d8c}.theme-vchatdark .enochian{color:#848a33;letter-spacing:-1pt;word-spacing:4pt;font-family:Lucida Sans Unicode,Lucida Grande,sans-serif}.theme-vchatdark .daemon{color:#5e339e;letter-spacing:-1pt;word-spacing:0pt;font-family:Courier New,Courier,monospace}.theme-vchatdark .drudakar{color:#bb2463;word-spacing:0pt;font-family:High Tower Text,monospace}.theme-vchatdark .bug{color:#9e9e39}.theme-vchatdark .vox{color:#a0a}.theme-vchatdark .promethean{color:#a5a5a5;font-family:Comic Sans MS,Comic Sans,cursive}.theme-vchatdark .zaddat{color:#941c1c}.theme-vchatdark .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-vchatdark .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-vchatdark .say_quote_italics{font-style:italic;font-family:Georgia,Verdana,sans-serif}.theme-vchatdark .terminus{font-family:Times New Roman,Times,serif,sans-serif}.theme-vchatdark .spacer{color:#9c660b}.theme-vchatdark .teppi{color:#816540;word-spacing:4pt;font-family:Segoe Script Bold,Segoe Script,sans-serif,Verdana}.theme-vchatdark .shadekin{color:#be3cc5;font-size:150%;font-weight:700;font-family:Gabriola,cursive,sans-serif}