mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 09:42:29 +00:00
Refactors most spans into span procs (#59645)
Converts most spans into span procs. Mostly used regex for this and sorted out any compile time errors afterwards so there could be some bugs. Was initially going to do defines, but ninja said to make it into a proc, and if there's any overhead, they can easily be changed to defines. Makes it easier to control the formatting and prevents typos when creating spans as it'll runtime if you misspell instead of silently failing. Reduces the code you need to write when writing spans, as you don't need to close the span as that's automatically handled by the proc. (Note from Lemon: This should be converted to defines once we update the minimum version to 514. Didn't do it now because byond pain and such)
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
|
||||
#define TGS_READ_GLOBAL(Name) GLOB.##Name
|
||||
#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
|
||||
#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "<span class='boldannounce'>[html_encode(##message)]</span>")
|
||||
#define TGS_WORLD_ANNOUNCE(message) to_chat(world, span_boldannounce("[html_encode(##message)]"))
|
||||
#define TGS_INFO_LOG(message) log_world("TGS Info: [##message]")
|
||||
#define TGS_WARNING_LOG(message) log_world("TGS Warn: [##message]")
|
||||
#define TGS_ERROR_LOG(message) log_world("TGS Error: [##message]")
|
||||
|
||||
@@ -52,10 +52,10 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
|
||||
))
|
||||
var/list/turfs = detect_room(get_turf(creator), area_or_turf_fail_types, BP_MAX_ROOM_SIZE*2)
|
||||
if(!turfs)
|
||||
to_chat(creator, "<span class='warning'>The new area must be completely airtight and not a part of a shuttle.</span>")
|
||||
to_chat(creator, span_warning("The new area must be completely airtight and not a part of a shuttle."))
|
||||
return
|
||||
if(turfs.len > BP_MAX_ROOM_SIZE)
|
||||
to_chat(creator, "<span class='warning'>The room you're in is too big. It is [turfs.len >= BP_MAX_ROOM_SIZE *2 ? "more than 100" : ((turfs.len / BP_MAX_ROOM_SIZE)-1)*100]% larger than allowed.</span>")
|
||||
to_chat(creator, span_warning("The room you're in is too big. It is [turfs.len >= BP_MAX_ROOM_SIZE *2 ? "more than 100" : ((turfs.len / BP_MAX_ROOM_SIZE)-1)*100]% larger than allowed."))
|
||||
return
|
||||
var/list/areas = list("New Area" = /area)
|
||||
for(var/i in 1 to turfs.len)
|
||||
@@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
|
||||
area_choice = areas[area_choice]
|
||||
|
||||
if(!area_choice)
|
||||
to_chat(creator, "<span class='warning'>No choice selected. The area remains undefined.</span>")
|
||||
to_chat(creator, span_warning("No choice selected. The area remains undefined."))
|
||||
return
|
||||
var/area/newA
|
||||
var/area/oldA = get_area(get_turf(creator))
|
||||
@@ -78,7 +78,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
|
||||
if(!str || !length(str)) //cancel
|
||||
return
|
||||
if(length(str) > 50)
|
||||
to_chat(creator, "<span class='warning'>The given name is too long. The area remains undefined.</span>")
|
||||
to_chat(creator, span_warning("The given name is too long. The area remains undefined."))
|
||||
return
|
||||
newA = new area_choice
|
||||
newA.setup(str)
|
||||
@@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
|
||||
var/obj/machinery/door/firedoor/FD = door
|
||||
FD.CalculateAffectingAreas()
|
||||
|
||||
to_chat(creator, "<span class='notice'>You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.</span>")
|
||||
to_chat(creator, span_notice("You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered."))
|
||||
return TRUE
|
||||
|
||||
#undef BP_MAX_ROOM_SIZE
|
||||
|
||||
@@ -394,22 +394,22 @@
|
||||
var/list/answers = ignore_category ? list("Yes", "No", "Never for this round") : list("Yes", "No")
|
||||
switch(tgui_alert(M, Question, "A limited-time offer!", answers, timeout=poll_time))
|
||||
if("Yes")
|
||||
to_chat(M, "<span class='notice'>Choice registered: Yes.</span>")
|
||||
to_chat(M, span_notice("Choice registered: Yes."))
|
||||
if(time_passed + poll_time <= world.time)
|
||||
to_chat(M, "<span class='danger'>Sorry, you answered too late to be considered!</span>")
|
||||
to_chat(M, span_danger("Sorry, you answered too late to be considered!"))
|
||||
SEND_SOUND(M, 'sound/machines/buzz-sigh.ogg')
|
||||
candidates -= M
|
||||
else
|
||||
candidates += M
|
||||
if("No")
|
||||
to_chat(M, "<span class='danger'>Choice registered: No.</span>")
|
||||
to_chat(M, span_danger("Choice registered: No."))
|
||||
candidates -= M
|
||||
if("Never for this round")
|
||||
var/list/L = GLOB.poll_ignore[ignore_category]
|
||||
if(!L)
|
||||
GLOB.poll_ignore[ignore_category] = list()
|
||||
GLOB.poll_ignore[ignore_category] += M.ckey
|
||||
to_chat(M, "<span class='danger'>Choice registered: Never for this round.</span>")
|
||||
to_chat(M, span_danger("Choice registered: Never for this round."))
|
||||
candidates -= M
|
||||
else
|
||||
candidates -= M
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
/mob/proc/nominate_heart(mob/heart_recepient, duration = 24 HOURS, instant = FALSE)
|
||||
if(!mind || !client || !heart_recepient?.client)
|
||||
return
|
||||
to_chat(src, "<span class='nicegreen'>Commendation sent!</span>")
|
||||
to_chat(src, span_nicegreen("Commendation sent!"))
|
||||
message_admins("[key_name(src)] commended [key_name(heart_recepient)] [instant ? "" : "(roundend)"]")
|
||||
log_admin("[key_name(src)] commended [key_name(heart_recepient)] [instant ? "" : "(roundend)"]")
|
||||
if(instant || SSticker.current_state == GAME_STATE_FINISHED)
|
||||
|
||||
@@ -354,7 +354,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
if(interaction_key)
|
||||
var/current_interaction_count = LAZYACCESS(user.do_afters, interaction_key) || 0
|
||||
if(current_interaction_count >= max_interact_count) //We are at our peak
|
||||
to_chat(user, "<span class='warning'>You can't do this at the moment!</span>")
|
||||
to_chat(user, span_warning("You can't do this at the moment!"))
|
||||
return
|
||||
LAZYSET(user.do_afters, interaction_key, current_interaction_count + 1)
|
||||
|
||||
@@ -465,7 +465,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
// Displays a message in deadchat, sent by source. source is not linkified, message is, to avoid stuff like character names to be linkified.
|
||||
// Automatically gives the class deadsay to the whole message (message + source)
|
||||
/proc/deadchat_broadcast(message, source=null, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR, admin_only=FALSE)
|
||||
message = "<span class='deadsay'>[source]<span class='linkify'>[message]</span></span>"
|
||||
message = span_deadsay("[source]<span class='linkify'>[message]</span>")
|
||||
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
var/chat_toggles = TOGGLES_DEFAULT_CHAT
|
||||
@@ -480,7 +480,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
if (!M.client.holder)
|
||||
return
|
||||
else
|
||||
message += "<span class='deadsay'> (This is viewable to admins only).</span>"
|
||||
message += span_deadsay(" (This is viewable to admins only).")
|
||||
var/override = FALSE
|
||||
if(M.client.holder && (chat_toggles & CHAT_DEAD))
|
||||
override = TRUE
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
if(SSstation.announcer.custom_alert_message && !has_important_message)
|
||||
announcement += SSstation.announcer.custom_alert_message
|
||||
else
|
||||
announcement += "<br><span class='alert'>[html_encode(text)]</span><br>"
|
||||
announcement += "<br>[span_alert("[html_encode(text)]")]<br>"
|
||||
announcement += "<br>"
|
||||
|
||||
var/s = sound(sound)
|
||||
@@ -56,7 +56,7 @@
|
||||
var/meeting_sound = sound('sound/misc/emergency_meeting.ogg')
|
||||
var/announcement
|
||||
announcement += "<h1 class='alert'>Captain Alert</h1>"
|
||||
announcement += "<br><span class='alert'>[user] has called an Emergency Meeting!</span><br><br>"
|
||||
announcement += "<br>[span_alert("[user] has called an Emergency Meeting!")]<br><br>"
|
||||
|
||||
for(var/mob/mob_to_teleport in GLOB.player_list) //gotta make sure the whole crew's here!
|
||||
if(isnewplayer(mob_to_teleport) || iscameramob(mob_to_teleport))
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(!isnewplayer(M) && M.can_hear())
|
||||
to_chat(M, "<span class='minorannounce'><font color = red>[title]</font color><BR>[message]</span><BR>")
|
||||
to_chat(M, "[span_minorannounce("<font color = red>[title]</font color><BR>[message]")]<BR>")
|
||||
if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)
|
||||
if(alert)
|
||||
SEND_SOUND(M, sound('sound/misc/notice1.ogg'))
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
CHECK_TICK
|
||||
|
||||
handle_hearts()
|
||||
set_observer_default_invisibility(0, "<span class='warning'>The round is over! You are now visible to the living.</span>")
|
||||
set_observer_default_invisibility(0, span_warning("The round is over! You are now visible to the living."))
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
var/info = statspage ? "<a href='?action=openLink&link=[url_encode(statspage)][GLOB.round_id]'>[GLOB.round_id]</a>" : GLOB.round_id
|
||||
parts += "[FOURSPACES]Round ID: <b>[info]</b>"
|
||||
parts += "[FOURSPACES]Shift Duration: <B>[DisplayTimeText(world.time - SSticker.round_start_time)]</B>"
|
||||
parts += "[FOURSPACES]Station Integrity: <B>[GLOB.station_was_nuked ? "<span class='redtext'>Destroyed</span>" : "[popcount["station_integrity"]]%"]</B>"
|
||||
parts += "[FOURSPACES]Station Integrity: <B>[GLOB.station_was_nuked ? span_redtext("Destroyed") : "[popcount["station_integrity"]]%"]</B>"
|
||||
var/total_players = GLOB.joined_player_list.len
|
||||
if(total_players)
|
||||
parts+= "[FOURSPACES]Total Population: <B>[total_players]</B>"
|
||||
@@ -413,14 +413,14 @@
|
||||
parts += "<span class='marooned'>You managed to survive, but were marooned on [station_name()]...</span>"
|
||||
else
|
||||
parts += "<div class='panel greenborder'>"
|
||||
parts += "<span class='greentext'>You managed to survive the events on [station_name()] as [M.real_name].</span>"
|
||||
parts += span_greentext("You managed to survive the events on [station_name()] as [M.real_name].")
|
||||
else
|
||||
parts += "<div class='panel greenborder'>"
|
||||
parts += "<span class='greentext'>You managed to survive the events on [station_name()] as [M.real_name].</span>"
|
||||
parts += span_greentext("You managed to survive the events on [station_name()] as [M.real_name].")
|
||||
|
||||
else
|
||||
parts += "<div class='panel redborder'>"
|
||||
parts += "<span class='redtext'>You did not survive the events on [station_name()]...</span>"
|
||||
parts += span_redtext("You did not survive the events on [station_name()]...")
|
||||
else
|
||||
parts += "<div class='panel stationborder'>"
|
||||
parts += "<br>"
|
||||
@@ -446,7 +446,7 @@
|
||||
var/mob/living/silicon/ai/aiPlayer = i
|
||||
var/datum/mind/aiMind = aiPlayer.deployed_shell?.mind || aiPlayer.mind
|
||||
if(aiMind)
|
||||
parts += "<b>[aiPlayer.name]</b> (Played by: <b>[aiMind.key]</b>)'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was <span class='redtext'>deactivated</span>"] were:"
|
||||
parts += "<b>[aiPlayer.name]</b> (Played by: <b>[aiMind.key]</b>)'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:"
|
||||
parts += aiPlayer.laws.get_law_list(include_zeroth=TRUE)
|
||||
|
||||
parts += "<b>Total law changes: [aiPlayer.law_change_counter]</b>"
|
||||
@@ -457,13 +457,13 @@
|
||||
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
|
||||
borg_num--
|
||||
if(robo.mind)
|
||||
parts += "<b>[robo.name]</b> (Played by: <b>[robo.mind.key]</b>)[robo.stat == DEAD ? " <span class='redtext'>(Deactivated)</span>" : ""][borg_num ?", ":""]"
|
||||
parts += "<b>[robo.name]</b> (Played by: <b>[robo.mind.key]</b>)[robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]"
|
||||
if(!borg_spacer)
|
||||
borg_spacer = TRUE
|
||||
|
||||
for (var/mob/living/silicon/robot/robo in GLOB.silicon_mobs)
|
||||
if (!robo.connected_ai && robo.mind)
|
||||
parts += "[borg_spacer?"<br>":""]<b>[robo.name]</b> (Played by: <b>[robo.mind.key]</b>) [(robo.stat != DEAD)? "<span class='greentext'>survived</span> as an AI-less borg!" : "was <span class='redtext'>unable to survive</span> the rigors of being a cyborg without an AI."] Its laws were:"
|
||||
parts += "[borg_spacer?"<br>":""]<b>[robo.name]</b> (Played by: <b>[robo.mind.key]</b>) [(robo.stat != DEAD)? "[span_greentext("survived")] as an AI-less borg!" : "was [span_redtext("unable to survive")] the rigors of being a cyborg without an AI."] Its laws were:"
|
||||
|
||||
if(robo) //How the hell do we lose robo between here and the world messages directly above this?
|
||||
parts += robo.laws.get_law_list(include_zeroth=TRUE)
|
||||
@@ -513,12 +513,12 @@
|
||||
log_econ("Roundend service income: [tourist_income] credits.")
|
||||
switch(tourist_income)
|
||||
if(0)
|
||||
parts += "<span class='redtext'>Service did not earn any credits...</span><br>"
|
||||
parts += "[span_redtext("Service did not earn any credits...")]<br>"
|
||||
if(1 to 2000)
|
||||
parts += "<span class='redtext'>Centcom is displeased. Come on service, surely you can do better than that.</span><br>"
|
||||
parts += "[span_redtext("Centcom is displeased. Come on service, surely you can do better than that.")]<br>"
|
||||
award_service(/datum/award/achievement/jobs/service_bad)
|
||||
if(2001 to 4999)
|
||||
parts += "<span class='greentext'>Centcom is satisfied with service's job today.</span><br>"
|
||||
parts += "[span_greentext("Centcom is satisfied with service's job today.")]<br>"
|
||||
award_service(/datum/award/achievement/jobs/service_okay)
|
||||
else
|
||||
parts += "<span class='reallybig greentext'>Centcom is incredibly impressed with service today! What a team!</span><br>"
|
||||
@@ -682,17 +682,17 @@
|
||||
var/text = "<b>[ply.key]</b> was <b>[ply.name]</b>[jobtext] and"
|
||||
if(ply.current)
|
||||
if(ply.current.stat == DEAD)
|
||||
text += " <span class='redtext'>died</span>"
|
||||
text += " [span_redtext("died")]"
|
||||
else
|
||||
text += " <span class='greentext'>survived</span>"
|
||||
text += " [span_greentext("survived")]"
|
||||
if(fleecheck)
|
||||
var/turf/T = get_turf(ply.current)
|
||||
if(!T || !is_station_level(T.z))
|
||||
text += " while <span class='redtext'>fleeing the station</span>"
|
||||
text += " while [span_redtext("fleeing the station")]"
|
||||
if(ply.current.real_name != ply.name)
|
||||
text += " as <b>[ply.current.real_name]</b>"
|
||||
else
|
||||
text += " <span class='redtext'>had their body destroyed</span>"
|
||||
text += " [span_redtext("had their body destroyed")]"
|
||||
return text
|
||||
|
||||
/proc/printplayerlist(list/players,fleecheck)
|
||||
@@ -712,9 +712,9 @@
|
||||
var/count = 1
|
||||
for(var/datum/objective/objective in objectives)
|
||||
if(objective.check_completion())
|
||||
objective_parts += "<b>[objective.objective_name] #[count]</b>: [objective.explanation_text] <span class='greentext'>Success!</span>"
|
||||
objective_parts += "<b>[objective.objective_name] #[count]</b>: [objective.explanation_text] [span_greentext("Success!")]"
|
||||
else
|
||||
objective_parts += "<b>[objective.objective_name] #[count]</b>: [objective.explanation_text] <span class='redtext'>Fail.</span>"
|
||||
objective_parts += "<b>[objective.objective_name] #[count]</b>: [objective.explanation_text] [span_redtext("Fail.")]"
|
||||
count++
|
||||
return objective_parts.Join("<br>")
|
||||
|
||||
|
||||
228
code/__HELPERS/span.dm
Normal file
228
code/__HELPERS/span.dm
Normal file
@@ -0,0 +1,228 @@
|
||||
// Sorted alphabetically
|
||||
|
||||
/proc/span_abductor(str)
|
||||
return "<span class='abductor'>[str]</span>"
|
||||
/proc/span_admin(str)
|
||||
return "<span class='admin'>[str]</span>"
|
||||
/proc/span_adminhelp(str)
|
||||
return "<span class='adminhelp'>[str]</span>"
|
||||
/proc/span_adminnotice(str)
|
||||
return "<span class='adminnotice'>[str]</span>"
|
||||
/proc/span_adminobserverooc(str)
|
||||
return "<span class='adminobserverooc'>[str]</span>"
|
||||
/proc/span_adminooc(str)
|
||||
return "<span class='adminooc'>[str]</span>"
|
||||
/proc/span_adminsay(str)
|
||||
return "<span class='adminsay'>[str]</span>"
|
||||
/proc/span_aiprivradio(str)
|
||||
return "<span class='aiprivradio'>[str]</span>"
|
||||
/proc/span_alert(str)
|
||||
return "<span class='alert'>[str]</span>"
|
||||
/proc/span_alertalien(str)
|
||||
return "<span class='alertalien'>[str]</span>"
|
||||
/proc/span_alertsyndie(str)
|
||||
return "<span class='alertsyndie'>[str]</span>"
|
||||
/proc/span_alertwarning(str)
|
||||
return "<span class='alertwarning'>[str]</span>"
|
||||
/proc/span_alien(str)
|
||||
return "<span class='alien'>[str]</span>"
|
||||
/proc/span_announce(str)
|
||||
return "<span class='announce'>[str]</span>"
|
||||
/proc/span_big(str)
|
||||
return "<span class='big'>[str]</span>"
|
||||
/proc/span_bigicon(str)
|
||||
return "<span class='bigicon'>[str]</span>"
|
||||
/proc/span_binarysay(str)
|
||||
return "<span class='binarysay'>[str]</span>"
|
||||
/proc/span_blue(str)
|
||||
return "<span class='blue'>[str]</span>"
|
||||
/proc/span_blueteamradio(str)
|
||||
return "<span class='blueteamradio'>[str]</span>"
|
||||
/proc/span_bold(str)
|
||||
return "<span class='bold'>[str]</span>"
|
||||
/proc/span_boldannounce(str)
|
||||
return "<span class='boldannounce'>[str]</span>"
|
||||
/proc/span_boldnotice(str)
|
||||
return "<span class='boldnotice'>[str]</span>"
|
||||
/proc/span_boldwarning(str)
|
||||
return "<span class='boldwarning'>[str]</span>"
|
||||
/proc/span_centcomradio(str)
|
||||
return "<span class='centcomradio'>[str]</span>"
|
||||
/proc/span_changeling(str)
|
||||
return "<span class='changeling'>[str]</span>"
|
||||
/proc/span_clown(str)
|
||||
return "<span class='clown'>[str]</span>"
|
||||
/proc/span_colossus(str)
|
||||
return "<span class='colossus'>[str]</span>"
|
||||
/proc/span_command_headset(str)
|
||||
return "<span class='command_headset'>[str]</span>"
|
||||
/proc/span_comradio(str)
|
||||
return "<span class='comradio'>[str]</span>"
|
||||
/proc/span_cult(str)
|
||||
return "<span class='cult'>[str]</span>"
|
||||
/proc/span_cultbold(str)
|
||||
return "<span class='cultbold'>[str]</span>"
|
||||
/proc/span_cultboldtalic(str)
|
||||
return "<span class='cultboldtalic'>[str]</span>"
|
||||
/proc/span_cultitalic(str)
|
||||
return "<span class='cultitalic'>[str]</span>"
|
||||
/proc/span_cultlarge(str)
|
||||
return "<span class='cultlarge'>[str]</span>"
|
||||
/proc/span_danger(str)
|
||||
return "<span class='danger'>[str]</span>"
|
||||
/proc/span_deadsay(str)
|
||||
return "<span class='deadsay'>[str]</span>"
|
||||
/proc/span_deconversion_message(str)
|
||||
return "<span class='deconversion_message'>[str]</span>"
|
||||
/proc/span_drone(str)
|
||||
return "<span class='drone'>[str]</span>"
|
||||
/proc/span_engradio(str)
|
||||
return "<span class='engradio'>[str]</span>"
|
||||
/proc/span_extremelybig(str)
|
||||
return "<span class='extremelybig'>[str]</span>"
|
||||
/proc/span_ghostalert(str)
|
||||
return "<span class='ghostalert'>[str]</span>"
|
||||
/proc/span_green(str)
|
||||
return "<span class='green'>[str]</span>"
|
||||
/proc/span_greenannounce(str)
|
||||
return "<span class='greenannounce'>[str]</span>"
|
||||
/proc/span_greenteamradio(str)
|
||||
return "<span class='greenteamradio'>[str]</span>"
|
||||
/proc/span_greentext(str)
|
||||
return "<span class='greentext'>[str]</span>"
|
||||
/proc/span_hear(str)
|
||||
return "<span class='hear'>[str]</span>"
|
||||
/proc/span_hidden(str)
|
||||
return "<span class='hidden'>[str]</span>"
|
||||
/proc/span_hierophant(str)
|
||||
return "<span class='hierophant'>[str]</span>"
|
||||
/proc/span_hierophant_warning(str)
|
||||
return "<span class='hierophant_warning'>[str]</span>"
|
||||
/proc/span_highlight(str)
|
||||
return "<span class='highlight'>[str]</span>"
|
||||
/proc/span_his_grace(str)
|
||||
return "<span class='his_grace'>[str]</span>"
|
||||
/proc/span_holoparasite(str)
|
||||
return "<span class='holoparasite'>[str]</span>"
|
||||
/proc/span_hypnophrase(str)
|
||||
return "<span class='hypnophrase'>[str]</span>"
|
||||
/proc/span_icon(str)
|
||||
return "<span class='icon'>[str]</span>"
|
||||
/proc/span_info(str)
|
||||
return "<span class='info'>[str]</span>"
|
||||
/proc/span_interface(str)
|
||||
return "<span class='interface'>[str]</span>"
|
||||
/proc/span_looc(str)
|
||||
return "<span class='looc'>[str]</span>"
|
||||
/proc/span_medal(str)
|
||||
return "<span class='medal'>[str]</span>"
|
||||
/proc/span_medradio(str)
|
||||
return "<span class='medradio'>[str]</span>"
|
||||
/proc/span_memo(str)
|
||||
return "<span class='memo'>[str]</span>"
|
||||
/proc/span_memoedit(str)
|
||||
return "<span class='memoedit'>[str]</span>"
|
||||
/proc/span_mind_control(str)
|
||||
return "<span class='mind_control'>[str]</span>"
|
||||
/proc/span_minorannounce(str)
|
||||
return "<span class='minorannounce'>[str]</span>"
|
||||
/proc/span_monkey(str)
|
||||
return "<span class='monkey'>[str]</span>"
|
||||
/proc/span_monkeyhive(str)
|
||||
return "<span class='monkeyhive'>[str]</span>"
|
||||
/proc/span_monkeylead(str)
|
||||
return "<span class='monkeylead'>[str]</span>"
|
||||
/proc/span_name(str)
|
||||
return "<span class='name'>[str]</span>"
|
||||
/proc/span_narsie(str)
|
||||
return "<span class='narsie'>[str]</span>"
|
||||
/proc/span_narsiesmall(str)
|
||||
return "<span class='narsiesmall'>[str]</span>"
|
||||
/proc/span_nicegreen(str)
|
||||
return "<span class='nicegreen'>[str]</span>"
|
||||
/proc/span_notice(str)
|
||||
return "<span class='notice'>[str]</span>"
|
||||
/proc/span_noticealien(str)
|
||||
return "<span class='noticealien'>[str]</span>"
|
||||
/proc/span_ooc(str)
|
||||
return "<span class='ooc'>[str]</span>"
|
||||
/proc/span_papyrus(str)
|
||||
return "<span class='papyrus'>[str]</span>"
|
||||
/proc/span_phobia(str)
|
||||
return "<span class='phobia'>[str]</span>"
|
||||
/proc/span_prefix(str)
|
||||
return "<span class='prefix'>[str]</span>"
|
||||
/proc/span_purple(str)
|
||||
return "<span class='purple'>[str]</span>"
|
||||
/proc/span_radio(str)
|
||||
return "<span class='radio'>[str]</span>"
|
||||
/proc/span_reallybig(str)
|
||||
return "<span class='reallybig'>[str]</span>"
|
||||
/proc/span_red(str)
|
||||
return "<span class='red'>[str]</span>"
|
||||
/proc/span_redteamradio(str)
|
||||
return "<span class='redteamradio'>[str]</span>"
|
||||
/proc/span_redtext(str)
|
||||
return "<span class='redtext'>[str]</span>"
|
||||
/proc/span_resonate(str)
|
||||
return "<span class='resonate'>[str]</span>"
|
||||
/proc/span_revenbignotice(str)
|
||||
return "<span class='revenbignotice'>[str]</span>"
|
||||
/proc/span_revenboldnotice(str)
|
||||
return "<span class='revenboldnotice'>[str]</span>"
|
||||
/proc/span_revendanger(str)
|
||||
return "<span class='revendanger'>[str]</span>"
|
||||
/proc/span_revenminor(str)
|
||||
return "<span class='revenminor'>[str]</span>"
|
||||
/proc/span_revennotice(str)
|
||||
return "<span class='revennotice'>[str]</span>"
|
||||
/proc/span_revenwarning(str)
|
||||
return "<span class='revenwarning'>[str]</span>"
|
||||
/proc/span_robot(str)
|
||||
return "<span class='robot'>[str]</span>"
|
||||
/proc/span_rose(str)
|
||||
return "<span class='rose'>[str]</span>"
|
||||
/proc/span_sans(str)
|
||||
return "<span class='sans'>[str]</span>"
|
||||
/proc/span_sciradio(str)
|
||||
return "<span class='sciradio'>[str]</span>"
|
||||
/proc/span_secradio(str)
|
||||
return "<span class='secradio'>[str]</span>"
|
||||
/proc/span_servradio(str)
|
||||
return "<span class='servradio'>[str]</span>"
|
||||
/proc/span_singing(str)
|
||||
return "<span class='singing'>[str]</span>"
|
||||
/proc/span_slime(str)
|
||||
return "<span class='slime'>[str]</span>"
|
||||
/proc/span_small(str)
|
||||
return "<span class='small'>[str]</span>"
|
||||
/proc/span_smallnotice(str)
|
||||
return "<span class='smallnotice'>[str]</span>"
|
||||
/proc/span_smallnoticeital(str)
|
||||
return "<span class='smallnoticeital'>[str]</span>"
|
||||
/proc/span_spider(str)
|
||||
return "<span class='spider'>[str]</span>"
|
||||
/proc/span_suicide(str)
|
||||
return "<span class='suicide'>[str]</span>"
|
||||
/proc/span_suppradio(str)
|
||||
return "<span class='suppradio'>[str]</span>"
|
||||
/proc/span_swarmer(str)
|
||||
return "<span class='swarmer'>[str]</span>"
|
||||
/proc/span_syndradio(str)
|
||||
return "<span class='syndradio'>[str]</span>"
|
||||
/proc/span_tape_recorder(str)
|
||||
return "<span class='tape_recorder'>[str]</span>"
|
||||
/proc/span_tinynotice(str)
|
||||
return "<span class='tinynotice'>[str]</span>"
|
||||
/proc/span_tinynoticeital(str)
|
||||
return "<span class='tinynoticeital'>[str]</span>"
|
||||
/proc/span_unconscious(str)
|
||||
return "<span class='unconscious'>[str]</span>"
|
||||
/proc/span_userdanger(str)
|
||||
return "<span class='userdanger'>[str]</span>"
|
||||
/proc/span_warning(str)
|
||||
return "<span class='warning'>[str]</span>"
|
||||
/proc/span_yell(str)
|
||||
return "<span class='yell'>[str]</span>"
|
||||
/proc/span_yellowteamradio(str)
|
||||
return "<span class='yellowteamradio'>[str]</span>"
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
//while buckled, you can still connect to and control things like doors, but you can't use your modules
|
||||
if(buckled)
|
||||
to_chat(src, "<span class='warning'>You can't use modules while buckled to [buckled]!</span>")
|
||||
to_chat(src, span_warning("You can't use modules while buckled to [buckled]!"))
|
||||
return
|
||||
|
||||
if(W == A)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
return
|
||||
if((istype(over_object, /atom/movable/screen/movable/action_button) && !istype(over_object, /atom/movable/screen/movable/action_button/hide_toggle)))
|
||||
if(locked)
|
||||
to_chat(usr, "<span class='warning'>Action button \"[name]\" is locked, unlock it first.</span>")
|
||||
to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first."))
|
||||
return
|
||||
var/atom/movable/screen/movable/action_button/B = over_object
|
||||
var/list/actions = usr.actions
|
||||
@@ -45,14 +45,14 @@
|
||||
var/list/modifiers = params2list(params)
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK))
|
||||
if(locked)
|
||||
to_chat(usr, "<span class='warning'>Action button \"[name]\" is locked, unlock it first.</span>")
|
||||
to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first."))
|
||||
return TRUE
|
||||
moved = 0
|
||||
usr.update_action_buttons() //redraw buttons that are no longer considered "moved"
|
||||
return TRUE
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
locked = !locked
|
||||
to_chat(usr, "<span class='notice'>Action button \"[name]\" [locked ? "" : "un"]locked.</span>")
|
||||
to_chat(usr, span_notice("Action button \"[name]\" [locked ? "" : "un"]locked."))
|
||||
if(id && usr.client) //try to (un)remember position
|
||||
usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = locked ? moved : null
|
||||
return TRUE
|
||||
@@ -97,14 +97,14 @@
|
||||
var/list/modifiers = params2list(params)
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK))
|
||||
if(locked)
|
||||
to_chat(usr, "<span class='warning'>Action button \"[name]\" is locked, unlock it first.</span>")
|
||||
to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first."))
|
||||
return TRUE
|
||||
moved = FALSE
|
||||
usr.update_action_buttons(TRUE)
|
||||
return TRUE
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
locked = !locked
|
||||
to_chat(usr, "<span class='notice'>Action button \"[name]\" [locked ? "" : "un"]locked.</span>")
|
||||
to_chat(usr, span_notice("Action button \"[name]\" [locked ? "" : "un"]locked."))
|
||||
if(id && usr.client) //try to (un)remember position
|
||||
usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = locked ? moved : null
|
||||
return TRUE
|
||||
@@ -121,7 +121,7 @@
|
||||
if(id && usr.client)
|
||||
usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = null
|
||||
usr.update_action_buttons(TRUE)
|
||||
to_chat(usr, "<span class='notice'>Action button positions have been reset.</span>")
|
||||
to_chat(usr, span_notice("Action button positions have been reset."))
|
||||
return TRUE
|
||||
usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
if(moved)
|
||||
moved = FALSE
|
||||
user.update_action_buttons(TRUE)
|
||||
to_chat(user, "<span class='notice'>Action button positions have been reset.</span>")
|
||||
to_chat(user, span_notice("Action button positions have been reset."))
|
||||
|
||||
|
||||
/atom/movable/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud)
|
||||
|
||||
@@ -247,7 +247,7 @@ or something covering your eyes."
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
to_chat(owner, "<span class='mind_control'>[command]</span>")
|
||||
to_chat(owner, span_mind_control("[command]"))
|
||||
|
||||
/atom/movable/screen/alert/drunk
|
||||
name = "Drunk"
|
||||
@@ -332,7 +332,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if (!giver.CanReach(taker))
|
||||
to_chat(owner, "<span class='warning'>You moved out of range of [giver]!</span>")
|
||||
to_chat(owner, span_warning("You moved out of range of [giver]!"))
|
||||
owner.clear_alert("[giver]")
|
||||
|
||||
/atom/movable/screen/alert/give/Click(location, control, params)
|
||||
@@ -779,7 +779,7 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
return FALSE
|
||||
var/list/modifiers = params2list(params)
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat
|
||||
to_chat(usr, "<span class='boldnotice'>[name]</span> - <span class='info'>[desc]</span>")
|
||||
to_chat(usr, span_boldnotice("[name]</span> - <span class='info'>[desc]"))
|
||||
return FALSE
|
||||
if(master && click_master)
|
||||
return usr.client.Click(master, location, control, params)
|
||||
|
||||
@@ -272,9 +272,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
|
||||
if(hud_used && client)
|
||||
hud_used.show_hud() //Shows the next hud preset
|
||||
to_chat(usr, "<span class='info'>Switched HUD mode. Press F12 to toggle.</span>")
|
||||
to_chat(usr, span_info("Switched HUD mode. Press F12 to toggle."))
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>This mob type does not use a HUD.</span>")
|
||||
to_chat(usr, span_warning("This mob type does not use a HUD."))
|
||||
|
||||
|
||||
//(re)builds the hand ui slots, throwing away old ones
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define PAI_MISSING_SOFTWARE_MESSAGE "<span class='warning'>You must download the required software to use this.</span>"
|
||||
#define PAI_MISSING_SOFTWARE_MESSAGE span_warning("You must download the required software to use this.")
|
||||
|
||||
/atom/movable/screen/pai
|
||||
icon = 'icons/hud/screen_pai.dmi'
|
||||
@@ -94,7 +94,7 @@
|
||||
else
|
||||
pAI.hostscan.attack(pAI.card.loc, pAI)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You are not being carried by anyone!</span>")
|
||||
to_chat(src, span_warning("You are not being carried by anyone!"))
|
||||
return FALSE
|
||||
|
||||
/atom/movable/screen/pai/crew_manifest
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
screenmob.client.screen += module_store_icon //"store" icon
|
||||
|
||||
if(!R.model.modules)
|
||||
to_chat(usr, "<span class='warning'>Selected model has no modules to select!</span>")
|
||||
to_chat(usr, span_warning("Selected model has no modules to select!"))
|
||||
return
|
||||
|
||||
if(!R.robot_modules_background)
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
return TRUE
|
||||
var/area/A = get_area(usr)
|
||||
if(!A.outdoors)
|
||||
to_chat(usr, "<span class='warning'>There is already a defined structure here.</span>")
|
||||
to_chat(usr, span_warning("There is already a defined structure here."))
|
||||
return TRUE
|
||||
create_area(usr)
|
||||
|
||||
@@ -320,49 +320,49 @@
|
||||
|
||||
if(C.internal)
|
||||
C.internal = null
|
||||
to_chat(C, "<span class='notice'>You are no longer running on internals.</span>")
|
||||
to_chat(C, span_notice("You are no longer running on internals."))
|
||||
icon_state = "internal0"
|
||||
else
|
||||
if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||
if(!istype(C.wear_mask, /obj/item/clothing/mask))
|
||||
to_chat(C, "<span class='warning'>You are not wearing an internals mask!</span>")
|
||||
to_chat(C, span_warning("You are not wearing an internals mask!"))
|
||||
return 1
|
||||
else
|
||||
var/obj/item/clothing/mask/M = C.wear_mask
|
||||
if(M.mask_adjusted) // if mask on face but pushed down
|
||||
M.adjustmask(C) // adjust it back
|
||||
if( !(M.clothing_flags & MASKINTERNALS) )
|
||||
to_chat(C, "<span class='warning'>You are not wearing an internals mask!</span>")
|
||||
to_chat(C, span_warning("You are not wearing an internals mask!"))
|
||||
return
|
||||
|
||||
var/obj/item/I = C.is_holding_item_of_type(/obj/item/tank)
|
||||
if(I)
|
||||
to_chat(C, "<span class='notice'>You are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))].</span>")
|
||||
to_chat(C, span_notice("You are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))]."))
|
||||
C.internal = I
|
||||
else if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(istype(H.s_store, /obj/item/tank))
|
||||
to_chat(H, "<span class='notice'>You are now running on internals from [H.s_store] on your [H.wear_suit.name].</span>")
|
||||
to_chat(H, span_notice("You are now running on internals from [H.s_store] on your [H.wear_suit.name]."))
|
||||
H.internal = H.s_store
|
||||
else if(istype(H.belt, /obj/item/tank))
|
||||
to_chat(H, "<span class='notice'>You are now running on internals from [H.belt] on your belt.</span>")
|
||||
to_chat(H, span_notice("You are now running on internals from [H.belt] on your belt."))
|
||||
H.internal = H.belt
|
||||
else if(istype(H.l_store, /obj/item/tank))
|
||||
to_chat(H, "<span class='notice'>You are now running on internals from [H.l_store] in your left pocket.</span>")
|
||||
to_chat(H, span_notice("You are now running on internals from [H.l_store] in your left pocket."))
|
||||
H.internal = H.l_store
|
||||
else if(istype(H.r_store, /obj/item/tank))
|
||||
to_chat(H, "<span class='notice'>You are now running on internals from [H.r_store] in your right pocket.</span>")
|
||||
to_chat(H, span_notice("You are now running on internals from [H.r_store] in your right pocket."))
|
||||
H.internal = H.r_store
|
||||
|
||||
//Separate so CO2 jetpacks are a little less cumbersome.
|
||||
if(!C.internal && istype(C.back, /obj/item/tank))
|
||||
to_chat(C, "<span class='notice'>You are now running on internals from [C.back] on your back.</span>")
|
||||
to_chat(C, span_notice("You are now running on internals from [C.back] on your back."))
|
||||
C.internal = C.back
|
||||
|
||||
if(C.internal)
|
||||
icon_state = "internal1"
|
||||
else
|
||||
to_chat(C, "<span class='warning'>You don't have an oxygen tank!</span>")
|
||||
to_chat(C, span_warning("You don't have an oxygen tank!"))
|
||||
return
|
||||
C.update_action_buttons_icon()
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
return
|
||||
|
||||
if(force && HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
|
||||
to_chat(user, span_warning("You don't want to harm other living beings!"))
|
||||
return
|
||||
|
||||
if(!force)
|
||||
@@ -213,8 +213,8 @@
|
||||
no_damage = FALSE
|
||||
//only witnesses close by and the victim see a hit message.
|
||||
log_combat(user, src, "attacked", I)
|
||||
user.visible_message("<span class='danger'>[user] hits [src] with [I][no_damage ? ", which doesn't leave a mark" : ""]!</span>", \
|
||||
"<span class='danger'>You hit [src] with [I][no_damage ? ", which doesn't leave a mark" : ""]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
user.visible_message(span_danger("[user] hits [src] with [I][no_damage ? ", which doesn't leave a mark" : ""]!"), \
|
||||
span_danger("You hit [src] with [I][no_damage ? ", which doesn't leave a mark" : ""]!"), null, COMBAT_MESSAGE_RANGE)
|
||||
|
||||
/mob/living/attacked_by(obj/item/I, mob/living/user)
|
||||
send_item_attack_message(I, user)
|
||||
@@ -288,7 +288,7 @@
|
||||
attack_message_victim = "[user] [message_verb_continuous] you[message_hit_area] with [I]!"
|
||||
if(user == src)
|
||||
attack_message_victim = "You [message_verb_simple] yourself[message_hit_area] with [I]"
|
||||
visible_message("<span class='danger'>[attack_message_spectator]</span>",\
|
||||
"<span class='userdanger'>[attack_message_victim]</span>", null, COMBAT_MESSAGE_RANGE, user)
|
||||
to_chat(user, "<span class='danger'>[attack_message_attacker]</span>")
|
||||
visible_message(span_danger("[attack_message_spectator]"),\
|
||||
span_userdanger("[attack_message_victim]"), null, COMBAT_MESSAGE_RANGE, user)
|
||||
to_chat(user, span_danger("[attack_message_attacker]"))
|
||||
return 1
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
if(!has_active_hand()) //can't attack without a hand.
|
||||
var/obj/item/bodypart/check_arm = get_active_hand()
|
||||
if(check_arm?.bodypart_disabled)
|
||||
to_chat(src, "<span class='warning'>Your [check_arm.name] is in no condition to be used.</span>")
|
||||
to_chat(src, span_warning("Your [check_arm.name] is in no condition to be used."))
|
||||
return
|
||||
|
||||
to_chat(src, "<span class='notice'>You look at your arm and sigh.</span>")
|
||||
to_chat(src, span_notice("You look at your arm and sigh."))
|
||||
return
|
||||
|
||||
// Special glove functions:
|
||||
@@ -75,7 +75,7 @@
|
||||
if(!user.can_interact_with(src))
|
||||
return FALSE
|
||||
if((interaction_flags_atom & INTERACT_ATOM_REQUIRES_DEXTERITY) && !ISADVANCEDTOOLUSER(user))
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
to_chat(user, span_warning("You don't have the dexterity to do this!"))
|
||||
return FALSE
|
||||
if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED) && user.incapacitated((interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED), !(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB)))
|
||||
return FALSE
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
/proc/tkMaxRangeCheck(mob/user, atom/target)
|
||||
var/d = get_dist(user, target)
|
||||
if(d > TK_MAXRANGE)
|
||||
to_chat(user, "<span class='warning'>Your mind won't reach that far.</span>")
|
||||
to_chat(user, span_warning("Your mind won't reach that far."))
|
||||
return
|
||||
return TRUE
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
. += focus_overlay
|
||||
|
||||
/obj/item/tk_grab/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is using [user.p_their()] telekinesis to choke [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
user.visible_message(span_suicide("[user] is using [user.p_their()] telekinesis to choke [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||
return (OXYLOSS)
|
||||
|
||||
|
||||
|
||||
@@ -52,15 +52,15 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
|
||||
if(Master.processing && Master.iteration)
|
||||
if (defcon > 1 && (!Master.stack_end_detector || !Master.stack_end_detector.check()))
|
||||
|
||||
to_chat(GLOB.admins, "<span class='boldannounce'>ERROR: The Master Controller code stack has exited unexpectedly, Restarting...</span>")
|
||||
to_chat(GLOB.admins, span_boldannounce("ERROR: The Master Controller code stack has exited unexpectedly, Restarting..."))
|
||||
defcon = 0
|
||||
var/rtn = Recreate_MC()
|
||||
if(rtn > 0)
|
||||
master_iteration = 0
|
||||
to_chat(GLOB.admins, "<span class='adminnotice'>MC restarted successfully</span>")
|
||||
to_chat(GLOB.admins, span_adminnotice("MC restarted successfully"))
|
||||
else if(rtn < 0)
|
||||
log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0")
|
||||
to_chat(GLOB.admins, "<span class='boldannounce'>ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.</span>")
|
||||
to_chat(GLOB.admins, span_boldannounce("ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying."))
|
||||
// Check if processing is done yet.
|
||||
if(Master.iteration == master_iteration)
|
||||
switch(defcon)
|
||||
@@ -68,24 +68,24 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
|
||||
--defcon
|
||||
|
||||
if(3)
|
||||
message_admins("<span class='adminnotice'>Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.</span>")
|
||||
message_admins(span_adminnotice("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks."))
|
||||
--defcon
|
||||
|
||||
if(2)
|
||||
to_chat(GLOB.admins, "<span class='boldannounce'>Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.</span>")
|
||||
to_chat(GLOB.admins, span_boldannounce("Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks."))
|
||||
--defcon
|
||||
|
||||
if(1)
|
||||
to_chat(GLOB.admins, "<span class='boldannounce'>Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...</span>")
|
||||
to_chat(GLOB.admins, span_boldannounce("Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting..."))
|
||||
--defcon
|
||||
var/rtn = Recreate_MC()
|
||||
if(rtn > 0)
|
||||
defcon = 4
|
||||
master_iteration = 0
|
||||
to_chat(GLOB.admins, "<span class='adminnotice'>MC restarted successfully</span>")
|
||||
to_chat(GLOB.admins, span_adminnotice("MC restarted successfully"))
|
||||
else if(rtn < 0)
|
||||
log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0")
|
||||
to_chat(GLOB.admins, "<span class='boldannounce'>ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.</span>")
|
||||
to_chat(GLOB.admins, span_boldannounce("ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying."))
|
||||
//if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again
|
||||
//no need to handle that specially when defcon 0 can handle it
|
||||
|
||||
@@ -94,7 +94,7 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
|
||||
if(rtn > 0)
|
||||
defcon = 4
|
||||
master_iteration = 0
|
||||
to_chat(GLOB.admins, "<span class='adminnotice'>MC restarted successfully</span>")
|
||||
to_chat(GLOB.admins, span_adminnotice("MC restarted successfully"))
|
||||
else
|
||||
defcon = min(defcon + 1,5)
|
||||
master_iteration = Master.iteration
|
||||
|
||||
@@ -160,7 +160,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined."
|
||||
BadBoy.flags |= SS_NO_FIRE
|
||||
if(msg)
|
||||
to_chat(GLOB.admins, "<span class='boldannounce'>[msg]</span>")
|
||||
to_chat(GLOB.admins, span_boldannounce("[msg]"))
|
||||
log_world(msg)
|
||||
|
||||
if (istype(Master.subsystems))
|
||||
@@ -170,7 +170,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
current_runlevel = Master.current_runlevel
|
||||
StartProcessing(10)
|
||||
else
|
||||
to_chat(world, "<span class='boldannounce'>The Master Controller is having some issues, we will need to re-initialize EVERYTHING</span>")
|
||||
to_chat(world, span_boldannounce("The Master Controller is having some issues, we will need to re-initialize EVERYTHING"))
|
||||
Initialize(20, TRUE)
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
if(init_sss)
|
||||
init_subtypes(/datum/controller/subsystem, subsystems)
|
||||
|
||||
to_chat(world, "<span class='boldannounce'>Initializing subsystems...</span>")
|
||||
to_chat(world, span_boldannounce("Initializing subsystems..."))
|
||||
|
||||
// Sort subsystems by init_order, so they initialize in the correct order.
|
||||
sortTim(subsystems, /proc/cmp_subsystem_init)
|
||||
@@ -202,7 +202,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
var/time = (REALTIMEOFDAY - start_timeofday) / 10
|
||||
|
||||
var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!"
|
||||
to_chat(world, "<span class='boldannounce'>[msg]</span>")
|
||||
to_chat(world, span_boldannounce("[msg]"))
|
||||
log_world(msg)
|
||||
|
||||
if (!current_runlevel)
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
SEND_SIGNAL(src, COMSIG_SUBSYSTEM_POST_INITIALIZE, start_timeofday)
|
||||
var/time = (REALTIMEOFDAY - start_timeofday) / 10
|
||||
var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!"
|
||||
to_chat(world, "<span class='boldannounce'>[msg]</span>")
|
||||
to_chat(world, span_boldannounce("[msg]"))
|
||||
log_world(msg)
|
||||
return time
|
||||
|
||||
|
||||
@@ -509,7 +509,7 @@ SUBSYSTEM_DEF(air)
|
||||
CHECK_TICK
|
||||
|
||||
var/msg = "HEY! LISTEN! [DisplayTimeText(world.timeofday - timer)] were wasted processing [starting_ats] turf(s) (connected to [ending_ats - starting_ats] other turfs) with atmos differences at round start."
|
||||
to_chat(world, "<span class='boldannounce'>[msg]</span>")
|
||||
to_chat(world, span_boldannounce("[msg]"))
|
||||
warning(msg)
|
||||
|
||||
/turf/open/proc/resolve_active_graph()
|
||||
|
||||
@@ -70,13 +70,13 @@ SUBSYSTEM_DEF(augury)
|
||||
|
||||
/datum/action/innate/augury/Activate()
|
||||
SSaugury.watchers += owner
|
||||
to_chat(owner, "<span class='notice'>You are now auto-following debris.</span>")
|
||||
to_chat(owner, span_notice("You are now auto-following debris."))
|
||||
active = TRUE
|
||||
UpdateButtonIcon()
|
||||
|
||||
/datum/action/innate/augury/Deactivate()
|
||||
SSaugury.watchers -= owner
|
||||
to_chat(owner, "<span class='notice'>You are no longer auto-following debris.</span>")
|
||||
to_chat(owner, span_notice("You are no longer auto-following debris."))
|
||||
active = FALSE
|
||||
UpdateButtonIcon()
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ SUBSYSTEM_DEF(blackmarket)
|
||||
|
||||
var/obj/machinery/ltsrbt/pad = pick(telepads)
|
||||
|
||||
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "<span class='notice'>[purchase.uplink] flashes a message noting that the order is being processed by [pad].</span>")
|
||||
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), span_notice("[purchase.uplink] flashes a message noting that the order is being processed by [pad]."))
|
||||
|
||||
queued_purchases -= purchase
|
||||
pad.add_to_queue(purchase)
|
||||
@@ -76,7 +76,7 @@ SUBSYSTEM_DEF(blackmarket)
|
||||
if (!targetturf)
|
||||
continue
|
||||
|
||||
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "<span class='notice'>[purchase.uplink] flashes a message noting that the order is being teleported to [get_area(targetturf)] in 60 seconds.</span>")
|
||||
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), span_notice("[purchase.uplink] flashes a message noting that the order is being teleported to [get_area(targetturf)] in 60 seconds."))
|
||||
|
||||
// do_teleport does not want to teleport items from nullspace, so it just forceMoves and does sparks.
|
||||
addtimer(CALLBACK(src, /datum/controller/subsystem/blackmarket/proc/fake_teleport, purchase.entry.spawn_item(), targetturf), 60 SECONDS)
|
||||
@@ -91,7 +91,7 @@ SUBSYSTEM_DEF(blackmarket)
|
||||
var/atom/movable/item = purchase.entry.spawn_item(pickedloc)
|
||||
item.throw_at(purchase.uplink, 3, 3, spin = FALSE)
|
||||
|
||||
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "<span class='notice'>[purchase.uplink] flashes a message noting the order is being launched at the station from [dir2text(startSide)].</span>")
|
||||
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), span_notice("[purchase.uplink] flashes a message noting the order is being launched at the station from [dir2text(startSide)]."))
|
||||
|
||||
queued_purchases -= purchase
|
||||
qdel(purchase)
|
||||
|
||||
@@ -319,7 +319,7 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table
|
||||
/datum/db_query/proc/warn_execute(async = TRUE)
|
||||
. = Execute(async)
|
||||
if(!.)
|
||||
to_chat(usr, "<span class='danger'>A SQL error occurred during this operation, check the server logs.</span>")
|
||||
to_chat(usr, span_danger("A SQL error occurred during this operation, check the server logs."))
|
||||
|
||||
/datum/db_query/proc/Execute(async = TRUE, log_error = TRUE)
|
||||
Activity("Execute")
|
||||
|
||||
@@ -114,5 +114,5 @@ SUBSYSTEM_DEF(eigenstates)
|
||||
///Prevents tool use on the item
|
||||
/datum/controller/subsystem/eigenstates/proc/tool_interact(atom/source, mob/user, obj/item/item)
|
||||
SIGNAL_HANDLER
|
||||
to_chat(user, "<span class='notice'>The unstable nature of [source] makes it impossible to use [item] on [source.p_them()]!</span>")
|
||||
to_chat(user, span_notice("The unstable nature of [source] makes it impossible to use [item] on [source.p_them()]!"))
|
||||
return COMPONENT_BLOCK_TOOL_ATTACK
|
||||
|
||||
@@ -85,7 +85,7 @@ SUBSYSTEM_DEF(job)
|
||||
occupations = list()
|
||||
var/list/all_jobs = subtypesof(/datum/job)
|
||||
if(!all_jobs.len)
|
||||
to_chat(world, "<span class='boldannounce'>Error setting up jobs, no job datums found</span>")
|
||||
to_chat(world, span_boldannounce("Error setting up jobs, no job datums found"))
|
||||
return FALSE
|
||||
|
||||
for(var/J in all_jobs)
|
||||
@@ -503,7 +503,7 @@ SUBSYSTEM_DEF(job)
|
||||
if(job.req_admin_notify)
|
||||
to_chat(M, "<span class='infoplain'><b>You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.</b></span>")
|
||||
if(CONFIG_GET(number/minimal_access_threshold))
|
||||
to_chat(M, "<span class='notice'><B>As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.</B></span>")
|
||||
to_chat(M, span_notice("<B>As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.</B>"))
|
||||
|
||||
var/related_policy = get_policy(rank)
|
||||
if(related_policy)
|
||||
@@ -808,9 +808,9 @@ SUBSYSTEM_DEF(job)
|
||||
var/where = new_captain.equip_in_one_of_slots(paper, slots, FALSE) || "at your feet"
|
||||
|
||||
if(acting_captain)
|
||||
to_chat(new_captain, "<span class='notice'>Due to your position in the chain of command, you have been promoted to Acting Captain. You can find in important note about this [where].</span>")
|
||||
to_chat(new_captain, span_notice("Due to your position in the chain of command, you have been promoted to Acting Captain. You can find in important note about this [where]."))
|
||||
else
|
||||
to_chat(new_captain, "<span class='notice'>You can find the code to obtain your spare ID from the secure safe on the Bridge [where].</span>")
|
||||
to_chat(new_captain, span_notice("You can find the code to obtain your spare ID from the secure safe on the Bridge [where]."))
|
||||
|
||||
// Force-give their ID card bridge access.
|
||||
var/obj/item/id_slot = new_captain.get_item_by_slot(ITEM_SLOT_ID)
|
||||
|
||||
@@ -63,7 +63,7 @@ SUBSYSTEM_DEF(mapping)
|
||||
var/old_config = config
|
||||
config = global.config.defaultmap
|
||||
if(!config || config.defaulted)
|
||||
to_chat(world, "<span class='boldannounce'>Unable to load next or default map config, defaulting to Meta Station</span>")
|
||||
to_chat(world, span_boldannounce("Unable to load next or default map config, defaulting to Meta Station"))
|
||||
config = old_config
|
||||
initialize_biomes()
|
||||
loadWorld()
|
||||
@@ -87,9 +87,9 @@ SUBSYSTEM_DEF(mapping)
|
||||
|
||||
// Load the virtual reality hub
|
||||
if(CONFIG_GET(flag/virtual_reality))
|
||||
to_chat(world, "<span class='boldannounce'>Loading virtual reality...</span>")
|
||||
to_chat(world, span_boldannounce("Loading virtual reality..."))
|
||||
load_new_z_level("_maps/RandomZLevels/VR/vrhub.dmm", "Virtual Reality Hub")
|
||||
to_chat(world, "<span class='boldannounce'>Virtual reality loaded.</span>")
|
||||
to_chat(world, span_boldannounce("Virtual reality loaded."))
|
||||
|
||||
// Generate mining ruins
|
||||
loading_ruins = TRUE
|
||||
@@ -202,7 +202,7 @@ Used by the AI doomsday and the self-destruct nuke.
|
||||
|
||||
z_list = SSmapping.z_list
|
||||
|
||||
#define INIT_ANNOUNCE(X) to_chat(world, "<span class='boldannounce'>[X]</span>"); log_world(X)
|
||||
#define INIT_ANNOUNCE(X) to_chat(world, span_boldannounce("[X]")); log_world(X)
|
||||
/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE)
|
||||
. = list()
|
||||
var/start_time = REALTIMEOFDAY
|
||||
@@ -370,7 +370,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
||||
message_admins("Randomly rotating map to [VM.map_name]")
|
||||
. = changemap(VM)
|
||||
if (. && VM.map_name != config.map_name)
|
||||
to_chat(world, "<span class='boldannounce'>Map rotation has chosen [VM.map_name] for next round!</span>")
|
||||
to_chat(world, span_boldannounce("Map rotation has chosen [VM.map_name] for next round!"))
|
||||
|
||||
/datum/controller/subsystem/mapping/proc/mapvote()
|
||||
if(map_voted || SSmapping.next_map_config) //If voted or set by other means.
|
||||
@@ -485,13 +485,13 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
||||
if(!mapfile)
|
||||
return
|
||||
away_name = "[mapfile] custom"
|
||||
to_chat(usr,"<span class='notice'>Loading [away_name]...</span>")
|
||||
to_chat(usr,span_notice("Loading [away_name]..."))
|
||||
var/datum/map_template/template = new(mapfile, "Away Mission")
|
||||
away_level = template.load_new_z()
|
||||
else
|
||||
if(answer in GLOB.potentialRandomZlevels)
|
||||
away_name = answer
|
||||
to_chat(usr,"<span class='notice'>Loading [away_name]...</span>")
|
||||
to_chat(usr,span_notice("Loading [away_name]..."))
|
||||
var/datum/map_template/template = new(away_name, "Away Mission")
|
||||
away_level = template.load_new_z()
|
||||
else
|
||||
|
||||
@@ -140,7 +140,7 @@ SUBSYSTEM_DEF(pai)
|
||||
|
||||
/datum/controller/subsystem/pai/proc/findPAI(obj/item/paicard/p, mob/user)
|
||||
if(!(GLOB.ghost_role_flags & GHOSTROLE_SILICONS))
|
||||
to_chat(user, "<span class='warning'>Due to growing incidents of SELF corrupted independent artificial intelligences, freeform personality devices have been temporarily banned in this sector.</span>")
|
||||
to_chat(user, span_warning("Due to growing incidents of SELF corrupted independent artificial intelligences, freeform personality devices have been temporarily banned in this sector."))
|
||||
return
|
||||
if(!ghost_spam)
|
||||
ghost_spam = TRUE
|
||||
@@ -149,7 +149,7 @@ SUBSYSTEM_DEF(pai)
|
||||
continue
|
||||
if(!(ROLE_PAI in G.client.prefs.be_special))
|
||||
continue
|
||||
to_chat(G, "<span class='ghostalert'>[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.</span>")
|
||||
to_chat(G, span_ghostalert("[user] is requesting a pAI personality! Use the pAI button to submit yourself as one."))
|
||||
addtimer(CALLBACK(src, .proc/spam_again), spam_delay)
|
||||
var/list/available = list()
|
||||
for(var/datum/pai_candidate/c in SSpai.candidates)
|
||||
|
||||
@@ -64,7 +64,7 @@ SUBSYSTEM_DEF(server_maint)
|
||||
var/cmob = C.mob
|
||||
if (!isnewplayer(cmob) || !SSticker.queued_players.Find(cmob))
|
||||
log_access("AFK: [key_name(C)]")
|
||||
to_chat(C, "<span class='userdanger'>You have been inactive for more than [DisplayTimeText(afk_period)] and have been disconnected.</span><br><span class='danger'>You may reconnect via the button in the file menu or by <b><u><a href='byond://winset?command=.reconnect'>clicking here to reconnect</a></u></b>.</span>")
|
||||
to_chat(C, span_userdanger("You have been inactive for more than [DisplayTimeText(afk_period)] and have been disconnected.</span><br><span class='danger'>You may reconnect via the button in the file menu or by <b><u><a href='byond://winset?command=.reconnect'>clicking here to reconnect</a></u></b>."))
|
||||
QDEL_IN(C, 1) //to ensure they get our message before getting disconnected
|
||||
continue
|
||||
|
||||
@@ -75,7 +75,7 @@ SUBSYSTEM_DEF(server_maint)
|
||||
return
|
||||
|
||||
/datum/controller/subsystem/server_maint/Shutdown()
|
||||
kick_clients_in_lobby("<span class='boldannounce'>The round came to an end with you in the lobby.</span>", TRUE) //second parameter ensures only afk clients are kicked
|
||||
kick_clients_in_lobby(span_boldannounce("The round came to an end with you in the lobby."), TRUE) //second parameter ensures only afk clients are kicked
|
||||
var/server = CONFIG_GET(string/server)
|
||||
for(var/thing in GLOB.clients)
|
||||
if(!thing)
|
||||
|
||||
@@ -253,13 +253,13 @@ SUBSYSTEM_DEF(shuttle)
|
||||
|
||||
var/can_evac_or_fail_reason = SSshuttle.canEvac(user)
|
||||
if(can_evac_or_fail_reason != TRUE)
|
||||
to_chat(user, "<span class='alert'>[can_evac_or_fail_reason]</span>")
|
||||
to_chat(user, span_alert("[can_evac_or_fail_reason]"))
|
||||
return
|
||||
|
||||
call_reason = trim(html_encode(call_reason))
|
||||
|
||||
if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && seclevel2num(get_security_level()) > SEC_LEVEL_GREEN)
|
||||
to_chat(user, "<span class='alert'>You must provide a reason.</span>")
|
||||
to_chat(user, span_alert("You must provide a reason."))
|
||||
return
|
||||
|
||||
var/area/signal_origin = get_area(user)
|
||||
@@ -282,7 +282,7 @@ SUBSYSTEM_DEF(shuttle)
|
||||
var/area/A = get_area(user)
|
||||
|
||||
log_shuttle("[key_name(user)] has called the emergency shuttle.")
|
||||
deadchat_broadcast(" has called the shuttle at <span class='name'>[A.name]</span>.", "<span class='name'>[user.real_name]</span>", user, message_type=DEADCHAT_ANNOUNCEMENT)
|
||||
deadchat_broadcast(" has called the shuttle at [span_name("[A.name]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT)
|
||||
if(call_reason)
|
||||
SSblackbox.record_feedback("text", "shuttle_reason", 1, "[call_reason]")
|
||||
log_shuttle("Shuttle call reason: [call_reason]")
|
||||
@@ -321,7 +321,7 @@ SUBSYSTEM_DEF(shuttle)
|
||||
emergency.cancel(get_area(user))
|
||||
log_shuttle("[key_name(user)] has recalled the shuttle.")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has recalled the shuttle.")
|
||||
deadchat_broadcast(" has recalled the shuttle from <span class='name'>[get_area_name(user, TRUE)]</span>.", "<span class='name'>[user.real_name]</span>", user, message_type=DEADCHAT_ANNOUNCEMENT)
|
||||
deadchat_broadcast(" has recalled the shuttle from [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT)
|
||||
return 1
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/canRecall()
|
||||
|
||||
@@ -146,7 +146,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10)
|
||||
for(var/client/C in GLOB.clients)
|
||||
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
|
||||
to_chat(world, "<span class='notice'><b>Welcome to [station_name()]!</b></span>")
|
||||
to_chat(world, span_notice("<b>Welcome to [station_name()]!</b>"))
|
||||
send2chat("New round starting on [SSmapping.config.map_name]!", CONFIG_GET(string/chat_announce_new_game))
|
||||
current_state = GAME_STATE_PREGAME
|
||||
//Everyone who wants to be an observer is now spawned
|
||||
@@ -203,7 +203,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/setup()
|
||||
to_chat(world, "<span class='boldannounce'>Starting game...</span>")
|
||||
to_chat(world, span_boldannounce("Starting game..."))
|
||||
var/init_start = world.timeofday
|
||||
|
||||
mode = new /datum/game_mode/dynamic
|
||||
@@ -224,7 +224,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
SSjob.ResetOccupations()
|
||||
return FALSE
|
||||
else
|
||||
message_admins("<span class='notice'>DEBUG: Bypassing prestart checks...</span>")
|
||||
message_admins(span_notice("DEBUG: Bypassing prestart checks..."))
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
@@ -257,14 +257,14 @@ SUBSYSTEM_DEF(ticker)
|
||||
round_start_time = world.time
|
||||
SSdbcore.SetRoundStart()
|
||||
|
||||
to_chat(world, "<span class='notice'><B>Welcome to [station_name()], enjoy your stay!</B></span>")
|
||||
to_chat(world, span_notice("<B>Welcome to [station_name()], enjoy your stay!</B>"))
|
||||
SEND_SOUND(world, sound(SSstation.announcer.get_rand_welcome_sound()))
|
||||
|
||||
current_state = GAME_STATE_PLAYING
|
||||
Master.SetRunLevel(RUNLEVEL_GAME)
|
||||
|
||||
if(SSevents.holidays)
|
||||
to_chat(world, "<span class='notice'>and...</span>")
|
||||
to_chat(world, span_notice("and..."))
|
||||
for(var/holidayname in SSevents.holidays)
|
||||
var/datum/holiday/holiday = SSevents.holidays[holidayname]
|
||||
to_chat(world, "<h4>[holiday.greet()]</h4>")
|
||||
@@ -303,9 +303,9 @@ SUBSYSTEM_DEF(ticker)
|
||||
if(!iter_human.hardcore_survival_score)
|
||||
continue
|
||||
if(iter_human.mind?.special_role)
|
||||
to_chat(iter_human, "<span class='notice'>You will gain [round(iter_human.hardcore_survival_score) * 2] hardcore random points if you greentext this round!</span>")
|
||||
to_chat(iter_human, span_notice("You will gain [round(iter_human.hardcore_survival_score) * 2] hardcore random points if you greentext this round!"))
|
||||
else
|
||||
to_chat(iter_human, "<span class='notice'>You will gain [round(iter_human.hardcore_survival_score)] hardcore random points if you survive this round!</span>")
|
||||
to_chat(iter_human, span_notice("You will gain [round(iter_human.hardcore_survival_score)] hardcore random points if you survive this round!"))
|
||||
|
||||
//These callbacks will fire after roundstart key transfer
|
||||
/datum/controller/subsystem/ticker/proc/OnRoundstart(datum/callback/cb)
|
||||
@@ -395,7 +395,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
for(var/mob/dead/new_player/new_player_mob as anything in GLOB.new_player_list)
|
||||
var/mob/living/carbon/human/new_player_human = new_player_mob.new_character
|
||||
if(new_player_human)
|
||||
to_chat(new_player_mob, "<span class='notice'>Captainship not forced on anyone.</span>")
|
||||
to_chat(new_player_mob, span_notice("Captainship not forced on anyone."))
|
||||
CHECK_TICK
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/decide_security_officer_departments(
|
||||
@@ -457,7 +457,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
m = pick(memetips)
|
||||
|
||||
if(m)
|
||||
to_chat(world, "<span class='oocplain'><span class='purple'><b>Tip of the round: </b>[html_encode(m)]</span></span>")
|
||||
to_chat(world, span_purple("<span class='oocplain'><b>Tip of the round: </b>[html_encode(m)]</span>"))
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/check_queue()
|
||||
if(!queued_players.len)
|
||||
@@ -466,7 +466,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
if(!hpc)
|
||||
listclearnulls(queued_players)
|
||||
for (var/mob/dead/new_player/NP in queued_players)
|
||||
to_chat(NP, "<span class='userdanger'>The alive players limit has been released!<br><a href='?src=[REF(NP)];late_join=override'>[html_encode(">>Join Game<<")]</a></span>")
|
||||
to_chat(NP, span_userdanger("The alive players limit has been released!<br><a href='?src=[REF(NP)];late_join=override'>[html_encode(">>Join Game<<")]</a>"))
|
||||
SEND_SOUND(NP, sound('sound/misc/notice1.ogg'))
|
||||
NP.LateChoices()
|
||||
queued_players.len = 0
|
||||
@@ -481,14 +481,14 @@ SUBSYSTEM_DEF(ticker)
|
||||
listclearnulls(queued_players)
|
||||
if(living_player_count() < hpc)
|
||||
if(next_in_line?.client)
|
||||
to_chat(next_in_line, "<span class='userdanger'>A slot has opened! You have approximately 20 seconds to join. <a href='?src=[REF(next_in_line)];late_join=override'>\>\>Join Game\<\<</a></span>")
|
||||
to_chat(next_in_line, span_userdanger("A slot has opened! You have approximately 20 seconds to join. <a href='?src=[REF(next_in_line)];late_join=override'>\>\>Join Game\<\<</a>"))
|
||||
SEND_SOUND(next_in_line, sound('sound/misc/notice1.ogg'))
|
||||
next_in_line.LateChoices()
|
||||
return
|
||||
queued_players -= next_in_line //Client disconnected, remove he
|
||||
queue_delay = 0 //No vacancy: restart timer
|
||||
if(25 to INFINITY) //No response from the next in line when a vacancy exists, remove he
|
||||
to_chat(next_in_line, "<span class='danger'>No response received. You have been removed from the line.</span>")
|
||||
to_chat(next_in_line, span_danger("No response received. You have been removed from the line."))
|
||||
queued_players -= next_in_line
|
||||
queue_delay = 0
|
||||
|
||||
@@ -635,17 +635,17 @@ SUBSYSTEM_DEF(ticker)
|
||||
|
||||
var/skip_delay = check_rights()
|
||||
if(delay_end && !skip_delay)
|
||||
to_chat(world, "<span class='boldannounce'>An admin has delayed the round end.</span>")
|
||||
to_chat(world, span_boldannounce("An admin has delayed the round end."))
|
||||
return
|
||||
|
||||
to_chat(world, "<span class='boldannounce'>Rebooting World in [DisplayTimeText(delay)]. [reason]</span>")
|
||||
to_chat(world, span_boldannounce("Rebooting World in [DisplayTimeText(delay)]. [reason]"))
|
||||
|
||||
var/start_wait = world.time
|
||||
UNTIL(round_end_sound_sent || (world.time - start_wait) > (delay * 2)) //don't wait forever
|
||||
sleep(delay - (world.time - start_wait))
|
||||
|
||||
if(delay_end && !skip_delay)
|
||||
to_chat(world, "<span class='boldannounce'>Reboot was cancelled by an admin.</span>")
|
||||
to_chat(world, span_boldannounce("Reboot was cancelled by an admin."))
|
||||
return
|
||||
if(end_string)
|
||||
end_state = end_string
|
||||
@@ -653,11 +653,11 @@ SUBSYSTEM_DEF(ticker)
|
||||
var/statspage = CONFIG_GET(string/roundstatsurl)
|
||||
var/gamelogloc = CONFIG_GET(string/gamelogurl)
|
||||
if(statspage)
|
||||
to_chat(world, "<span class='info'>Round statistics and logs can be viewed <a href=\"[statspage][GLOB.round_id]\">at this website!</a></span>")
|
||||
to_chat(world, span_info("Round statistics and logs can be viewed <a href=\"[statspage][GLOB.round_id]\">at this website!</a>"))
|
||||
else if(gamelogloc)
|
||||
to_chat(world, "<span class='info'>Round logs can be located <a href=\"[gamelogloc]\">at this website!</a></span>")
|
||||
to_chat(world, span_info("Round logs can be located <a href=\"[gamelogloc]\">at this website!</a>"))
|
||||
|
||||
log_game("<span class='boldannounce'>Rebooting World. [reason]</span>")
|
||||
log_game(span_boldannounce("Rebooting World. [reason]"))
|
||||
|
||||
world.Reboot()
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ SUBSYSTEM_DEF(vote)
|
||||
/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key)
|
||||
//Server is still intializing.
|
||||
if(!Master.current_runlevel)
|
||||
to_chat(usr, "<span class='warning'>Cannot start vote, server is not done initializing.</span>")
|
||||
to_chat(usr, span_warning("Cannot start vote, server is not done initializing."))
|
||||
return FALSE
|
||||
var/lower_admin = FALSE
|
||||
var/ckey = ckey(initiator_key)
|
||||
@@ -163,10 +163,10 @@ SUBSYSTEM_DEF(vote)
|
||||
if(started_time)
|
||||
var/next_allowed_time = (started_time + CONFIG_GET(number/vote_delay))
|
||||
if(mode)
|
||||
to_chat(usr, "<span class='warning'>There is already a vote in progress! please wait for it to finish.</span>")
|
||||
to_chat(usr, span_warning("There is already a vote in progress! please wait for it to finish."))
|
||||
return FALSE
|
||||
if(next_allowed_time > world.time && !lower_admin)
|
||||
to_chat(usr, "<span class='warning'>A vote was initiated recently, you must wait [DisplayTimeText(next_allowed_time-world.time)] before a new vote can be started!</span>")
|
||||
to_chat(usr, span_warning("A vote was initiated recently, you must wait [DisplayTimeText(next_allowed_time-world.time)] before a new vote can be started!"))
|
||||
return FALSE
|
||||
|
||||
reset()
|
||||
@@ -175,7 +175,7 @@ SUBSYSTEM_DEF(vote)
|
||||
choices.Add("Restart Round","Continue Playing")
|
||||
if("map")
|
||||
if(!lower_admin && SSmapping.map_voted)
|
||||
to_chat(usr, "<span class='warning'>The next map has already been selected.</span>")
|
||||
to_chat(usr, span_warning("The next map has already been selected."))
|
||||
return FALSE
|
||||
// Randomizes the list so it isn't always METASTATION
|
||||
var/list/maps = list()
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
/datum/award/achievement/on_unlock(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='greenannounce'><B>Achievement unlocked: [name]!</B></span>")
|
||||
to_chat(user, span_greenannounce("<B>Achievement unlocked: [name]!</B>"))
|
||||
|
||||
///Scores are for leaderboarded things, such as killcount of a specific boss
|
||||
/datum/award/score
|
||||
|
||||
@@ -311,7 +311,7 @@
|
||||
/datum/action/item_action/vortex_recall/IsAvailable()
|
||||
var/area/current_area = get_area(target)
|
||||
if(current_area.area_flags & NOTELEPORT)
|
||||
to_chat(owner, "<span class='notice'>[target] fizzles uselessly.</span>")
|
||||
to_chat(owner, span_notice("[target] fizzles uselessly."))
|
||||
return
|
||||
if(istype(target, /obj/item/hierophant_club))
|
||||
var/obj/item/hierophant_club/H = target
|
||||
@@ -330,10 +330,10 @@
|
||||
if(istype(target, /obj/item/clothing/head/helmet/space/hardsuit/berserker))
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/berserker/berzerk = target
|
||||
if(berzerk.berserk_active)
|
||||
to_chat(owner, "<span class='warning'>You are already berserk!</span>")
|
||||
to_chat(owner, span_warning("You are already berserk!"))
|
||||
return
|
||||
if(berzerk.berserk_charge < 100)
|
||||
to_chat(owner, "<span class='warning'>You don't have a full charge.</span>")
|
||||
to_chat(owner, span_warning("You don't have a full charge."))
|
||||
return
|
||||
berzerk.berserk_mode(owner)
|
||||
return
|
||||
@@ -434,7 +434,7 @@
|
||||
owner.research_scanner++
|
||||
else
|
||||
owner.research_scanner--
|
||||
to_chat(owner, "<span class='notice'>[target] research scanner has been [active ? "activated" : "deactivated"].</span>")
|
||||
to_chat(owner, span_notice("[target] research scanner has been [active ? "activated" : "deactivated"]."))
|
||||
return 1
|
||||
|
||||
/datum/action/item_action/toggle_research_scanner/Remove(mob/M)
|
||||
@@ -506,13 +506,13 @@
|
||||
I.attack_self(owner)
|
||||
return
|
||||
if(!isliving(owner))
|
||||
to_chat(owner, "<span class='warning'>You lack the necessary living force for this action.</span>")
|
||||
to_chat(owner, span_warning("You lack the necessary living force for this action."))
|
||||
return
|
||||
var/mob/living/living_owner = owner
|
||||
if (living_owner.usable_hands <= 0)
|
||||
to_chat(living_owner, "<span class='warning'>You dont have any usable hands!</span>")
|
||||
to_chat(living_owner, span_warning("You dont have any usable hands!"))
|
||||
else
|
||||
to_chat(living_owner, "<span class='warning'>Your hands are full!</span>")
|
||||
to_chat(living_owner, span_warning("Your hands are full!"))
|
||||
|
||||
|
||||
///MGS BOX!
|
||||
@@ -539,7 +539,7 @@
|
||||
return
|
||||
//Box closing from here on out.
|
||||
if(!isturf(owner.loc)) //Don't let the player use this to escape mechs/welded closets.
|
||||
to_chat(owner, "<span class='warning'>You need more space to activate this implant!</span>")
|
||||
to_chat(owner, span_warning("You need more space to activate this implant!"))
|
||||
return
|
||||
if(!COOLDOWN_FINISHED(src, box_cooldown))
|
||||
return
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/mob/item_holder = item_pawn.loc
|
||||
if(!istype(item_holder))
|
||||
finish_action(controller, FALSE) //We're no longer beind held. abort abort!!
|
||||
item_pawn.visible_message("<span class='warning'>[item_pawn] slips out of the hands of [item_holder]!</span>")
|
||||
item_pawn.visible_message(span_warning("[item_pawn] slips out of the hands of [item_holder]!"))
|
||||
item_holder.dropItemToGround(item_pawn, TRUE)
|
||||
finish_action(controller, TRUE)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
var/obj/item/item_pawn = controller.pawn
|
||||
var/atom/throw_target = controller.blackboard[target_key]
|
||||
|
||||
item_pawn.visible_message("<span class='warning'>[item_pawn] hurls towards [throw_target]!</span>")
|
||||
item_pawn.visible_message(span_warning("[item_pawn] hurls towards [throw_target]!"))
|
||||
item_pawn.throw_at(throw_target, rand(4,5), 9)
|
||||
playsound(item_pawn.loc, attack_sound, 100, TRUE)
|
||||
controller.blackboard[throw_count_key]++
|
||||
|
||||
@@ -79,14 +79,14 @@
|
||||
if(attempted_slot == ITEM_SLOT_HANDS) //hands needs some different checks
|
||||
curse_victim.drop_all_held_items()
|
||||
if(curse_victim.put_in_hands(item_pawn, del_on_fail = FALSE))
|
||||
to_chat(curse_victim, "<span class='danger'>[item_pawn] leaps into your hands!</span>")
|
||||
to_chat(curse_victim, span_danger("[item_pawn] leaps into your hands!"))
|
||||
what_a_horrible_night_to_have_a_curse()
|
||||
return
|
||||
var/obj/item/blocking = curse_victim.get_item_by_slot(attempted_slot)
|
||||
if(!curse_victim.dropItemToGround(blocking, silent = TRUE))
|
||||
return //cannot equip to this person so whatever just keep whacking them until they die or fugg off
|
||||
curse_victim.equip_to_slot_if_possible(item_pawn, attempted_slot, qdel_on_fail = FALSE, disable_warning = FALSE)
|
||||
to_chat(curse_victim, "<span class='danger'>[item_pawn] equips [item_pawn.p_them()]self onto you!</span>")
|
||||
to_chat(curse_victim, span_danger("[item_pawn] equips [item_pawn.p_them()]self onto you!"))
|
||||
what_a_horrible_night_to_have_a_curse()
|
||||
|
||||
///proc called when the cursed object successfully attaches itself to someone, removing the cursed element and by extension the ai itself
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
/datum/ai_behavior/simple_equip/proc/pickup_item(datum/ai_controller/controller, obj/item/target)
|
||||
var/atom/pawn = controller.pawn
|
||||
drop_item(controller)
|
||||
pawn.visible_message("<span class='notice'>[pawn] picks up [target] in [pawn.p_their()] mouth.</span>")
|
||||
pawn.visible_message(span_notice("[pawn] picks up [target] in [pawn.p_their()] mouth."))
|
||||
target.forceMove(pawn)
|
||||
controller.blackboard[BB_SIMPLE_CARRY_ITEM] = target
|
||||
return TRUE
|
||||
@@ -63,7 +63,7 @@
|
||||
return
|
||||
|
||||
var/atom/pawn = controller.pawn
|
||||
pawn.visible_message("<span class='notice'>[pawn] drops [carried_item].</span>")
|
||||
pawn.visible_message(span_notice("[pawn] drops [carried_item]."))
|
||||
carried_item.forceMove(get_turf(pawn))
|
||||
controller.blackboard[BB_SIMPLE_CARRY_ITEM] = null
|
||||
return TRUE
|
||||
@@ -96,9 +96,9 @@
|
||||
return
|
||||
|
||||
if(ismob(return_target))
|
||||
controller.pawn.visible_message("<span class='notice'>[controller.pawn] delivers [carried_item] at [return_target]'s feet.</span>")
|
||||
controller.pawn.visible_message(span_notice("[controller.pawn] delivers [carried_item] at [return_target]'s feet."))
|
||||
else // not sure how to best phrase this
|
||||
controller.pawn.visible_message("<span class='notice'>[controller.pawn] delivers [carried_item] to [return_target].</span>")
|
||||
controller.pawn.visible_message(span_notice("[controller.pawn] delivers [carried_item] to [return_target]."))
|
||||
|
||||
carried_item.forceMove(get_turf(return_target))
|
||||
controller.blackboard[BB_SIMPLE_CARRY_ITEM] = null
|
||||
@@ -154,7 +154,7 @@
|
||||
if(!istype(simple_pawn) || simple_pawn.stat) // imagine actually dying while playing dead. hell, imagine being the kid waiting for your pup to get back up :(
|
||||
return
|
||||
controller.blackboard[BB_DOG_PLAYING_DEAD] = FALSE
|
||||
simple_pawn.visible_message("<span class='notice'>[simple_pawn] springs to [simple_pawn.p_their()] feet, panting excitedly!</span>")
|
||||
simple_pawn.visible_message(span_notice("[simple_pawn] springs to [simple_pawn.p_their()] feet, panting excitedly!"))
|
||||
simple_pawn.icon_state = simple_pawn.icon_living
|
||||
if(simple_pawn.flip_on_death)
|
||||
simple_pawn.transform = simple_pawn.transform.Turn(180)
|
||||
@@ -178,7 +178,7 @@
|
||||
return
|
||||
|
||||
if(controller.blackboard[BB_DOG_FRIENDS][harass_ref])
|
||||
living_pawn.visible_message("<span class='danger'>[living_pawn] looks sideways at [harass_target] for a moment, then shakes [living_pawn.p_their()] head and ceases aggression.</span>")
|
||||
living_pawn.visible_message(span_danger("[living_pawn] looks sideways at [harass_target] for a moment, then shakes [living_pawn.p_their()] head and ceases aggression."))
|
||||
finish_action(controller, FALSE)
|
||||
return
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
// if we're just ditzing around carrying something, occasionally print a message so people know we have something
|
||||
if(blackboard[BB_SIMPLE_CARRY_ITEM] && DT_PROB(5, delta_time))
|
||||
var/obj/item/carry_item = blackboard[BB_SIMPLE_CARRY_ITEM]
|
||||
living_pawn.visible_message("<span class='notice'>[living_pawn] gently teethes on \the [carry_item] in [living_pawn.p_their()] mouth.</span>", vision_distance=COMBAT_MESSAGE_RANGE)
|
||||
living_pawn.visible_message(span_notice("[living_pawn] gently teethes on \the [carry_item] in [living_pawn.p_their()] mouth."), vision_distance=COMBAT_MESSAGE_RANGE)
|
||||
|
||||
if(DT_PROB(5, delta_time) && (living_pawn.mobility_flags & MOBILITY_MOVE))
|
||||
var/move_dir = pick(GLOB.alldirs)
|
||||
@@ -177,7 +177,7 @@
|
||||
if(friends[friend_ref])
|
||||
return
|
||||
if(in_range(pawn, new_friend))
|
||||
new_friend.visible_message("<b>[pawn]</b> licks at [new_friend] in a friendly manner!", "<span class='notice'>[pawn] licks at you in a friendly manner!</span>")
|
||||
new_friend.visible_message("<b>[pawn]</b> licks at [new_friend] in a friendly manner!", span_notice("[pawn] licks at you in a friendly manner!"))
|
||||
friends[friend_ref] = TRUE
|
||||
RegisterSignal(new_friend, COMSIG_MOB_POINTED, .proc/check_point)
|
||||
RegisterSignal(new_friend, COMSIG_MOB_SAY, .proc/check_verbal_command)
|
||||
@@ -194,11 +194,11 @@
|
||||
|
||||
var/obj/item/carried_item = blackboard[BB_SIMPLE_CARRY_ITEM]
|
||||
if(carried_item)
|
||||
examine_text += "<span class='notice'>[pawn.p_they(TRUE)] [pawn.p_are()] carrying [carried_item.get_examine_string(user)] in [pawn.p_their()] mouth.</span>"
|
||||
examine_text += span_notice("[pawn.p_they(TRUE)] [pawn.p_are()] carrying [carried_item.get_examine_string(user)] in [pawn.p_their()] mouth.")
|
||||
if(blackboard[BB_DOG_FRIENDS][WEAKREF(user)])
|
||||
var/mob/living/living_pawn = pawn
|
||||
if(!IS_DEAD_OR_INCAP(living_pawn))
|
||||
examine_text += "<span class='notice'>[pawn.p_they(TRUE)] seem[pawn.p_s()] happy to see you!</span>"
|
||||
examine_text += span_notice("[pawn.p_they(TRUE)] seem[pawn.p_s()] happy to see you!")
|
||||
|
||||
/// If we died, drop anything we were carrying
|
||||
/datum/ai_controller/dog/proc/on_death(mob/living/ol_yeller)
|
||||
@@ -284,17 +284,17 @@
|
||||
switch(command)
|
||||
// heel: stop what you're doing, relax and try not to do anything for a little bit
|
||||
if(COMMAND_HEEL)
|
||||
pawn.visible_message("<span class='notice'>[pawn]'s ears prick up at [commander]'s command, and [pawn.p_they()] sit[pawn.p_s()] down obediently, awaiting further orders.</span>")
|
||||
pawn.visible_message(span_notice("[pawn]'s ears prick up at [commander]'s command, and [pawn.p_they()] sit[pawn.p_s()] down obediently, awaiting further orders."))
|
||||
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_NONE
|
||||
COOLDOWN_START(src, heel_cooldown, AI_DOG_HEEL_DURATION)
|
||||
CancelActions()
|
||||
// fetch: whatever the commander points to, try and bring it back
|
||||
if(COMMAND_FETCH)
|
||||
pawn.visible_message("<span class='notice'>[pawn]'s ears prick up at [commander]'s command, and [pawn.p_they()] bounce[pawn.p_s()] slightly in anticipation.</span>")
|
||||
pawn.visible_message(span_notice("[pawn]'s ears prick up at [commander]'s command, and [pawn.p_they()] bounce[pawn.p_s()] slightly in anticipation."))
|
||||
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_FETCH
|
||||
// attack: harass whoever the commander points to
|
||||
if(COMMAND_ATTACK)
|
||||
pawn.visible_message("<span class='danger'>[pawn]'s ears prick up at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.</span>") // imagine getting intimidated by a corgi
|
||||
pawn.visible_message(span_danger("[pawn]'s ears prick up at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.")) // imagine getting intimidated by a corgi
|
||||
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_ATTACK
|
||||
if(COMMAND_DIE)
|
||||
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_NONE
|
||||
@@ -325,7 +325,7 @@
|
||||
var/obj/item/pointed_item = pointed_movable
|
||||
if(pointed_item.obj_flags & ABSTRACT)
|
||||
return
|
||||
pawn.visible_message("<span class='notice'>[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and barks excitedly!</span>")
|
||||
pawn.visible_message(span_notice("[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and barks excitedly!"))
|
||||
current_movement_target = pointed_movable
|
||||
blackboard[BB_FETCH_TARGET] = pointed_movable
|
||||
blackboard[BB_FETCH_DELIVER_TO] = pointing_friend
|
||||
@@ -333,7 +333,7 @@
|
||||
current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist)//in case they are in bed or something
|
||||
current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/fetch)
|
||||
if(DOG_COMMAND_ATTACK)
|
||||
pawn.visible_message("<span class='notice'>[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and growls intensely!</span>")
|
||||
pawn.visible_message(span_notice("[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and growls intensely!"))
|
||||
current_movement_target = pointed_movable
|
||||
blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(pointed_movable)
|
||||
if(living_pawn.buckled)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
big_guy.start_pulling(batman)
|
||||
big_guy.setDir(get_dir(big_guy, batman))
|
||||
|
||||
batman.visible_message("<span class='warning'>[batman] gets a slightly too tight hug from [big_guy]!</span>", "<span class='userdanger'>You feel your body break as [big_guy] embraces you!</span>")
|
||||
batman.visible_message(span_warning("[batman] gets a slightly too tight hug from [big_guy]!"), span_userdanger("You feel your body break as [big_guy] embraces you!"))
|
||||
|
||||
if(iscarbon(batman))
|
||||
var/mob/living/carbon/carbon_batman = batman
|
||||
@@ -116,8 +116,8 @@
|
||||
var/mob/living/living_target = target
|
||||
controller.PauseAi(1.5 SECONDS)
|
||||
living_target.visible_message(
|
||||
"<span class='info'>[pawn] starts trying to give [held_item] to [living_target]!</span>",
|
||||
"<span class='warning'>[pawn] tries to give you [held_item]!</span>"
|
||||
span_info("[pawn] starts trying to give [held_item] to [living_target]!"),
|
||||
span_warning("[pawn] tries to give you [held_item]!")
|
||||
)
|
||||
if(!do_mob(pawn, living_target, 1 SECONDS))
|
||||
return
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
|
||||
victim.visible_message("<span class='warning'>[living_pawn] starts trying to take [target] from [victim]!</span>", "<span class='danger'>[living_pawn] tries to take [target]!</span>")
|
||||
victim.visible_message(span_warning("[living_pawn] starts trying to take [target] from [victim]!"), span_danger("[living_pawn] tries to take [target]!"))
|
||||
|
||||
controller.blackboard[BB_MONKEY_PICKPOCKETING] = TRUE
|
||||
|
||||
@@ -96,14 +96,14 @@
|
||||
|
||||
for(var/obj/item/I in victim.held_items)
|
||||
if(I == target)
|
||||
victim.visible_message("<span class='danger'>[living_pawn] snatches [target] from [victim].</span>", "<span class='userdanger'>[living_pawn] snatched [target]!</span>")
|
||||
victim.visible_message(span_danger("[living_pawn] snatches [target] from [victim]."), span_userdanger("[living_pawn] snatched [target]!"))
|
||||
if(victim.temporarilyRemoveItemFromInventory(target))
|
||||
if(!QDELETED(target) && !equip_item(controller))
|
||||
target.forceMove(living_pawn.drop_location())
|
||||
success = TRUE
|
||||
break
|
||||
else
|
||||
victim.visible_message("<span class='danger'>[living_pawn] tried to snatch [target] from [victim], but failed!</span>", "<span class='userdanger'>[living_pawn] tried to grab [target]!</span>")
|
||||
victim.visible_message(span_danger("[living_pawn] tried to snatch [target] from [victim], but failed!"), span_userdanger("[living_pawn] tried to grab [target]!"))
|
||||
|
||||
finish_action(controller, success) //We either fucked up or got the item.
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/datum/ai_behavior/vendor_rise_up/perform(delta_time, datum/ai_controller/controller)
|
||||
. = ..()
|
||||
var/obj/machinery/vending/vendor_pawn = controller.pawn
|
||||
vendor_pawn.visible_message("<span class='warning'>[vendor_pawn] untilts itself!</span>")
|
||||
vendor_pawn.visible_message(span_warning("[vendor_pawn] untilts itself!"))
|
||||
if(controller.blackboard[BB_VENDING_LAST_HIT_SUCCESFUL])
|
||||
controller.blackboard[BB_VENDING_TILT_COOLDOWN] = world.time + succes_tilt_cooldown
|
||||
vendor_pawn.untilt()
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
SIGNAL_HANDLER
|
||||
var/datum/venue/attending_venue = blackboard[BB_CUSTOMER_ATTENDING_VENUE]
|
||||
if(attending_venue.is_correct_order(I, blackboard[BB_CUSTOMER_CURRENT_ORDER]))
|
||||
to_chat(user, "<span class='notice'>You hand [I] to [pawn]</span>")
|
||||
to_chat(user, span_notice("You hand [I] to [pawn]"))
|
||||
eat_order(I, attending_venue)
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
else
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
/* Initializers */
|
||||
/datum/ai_laws/malfunction/New()
|
||||
..()
|
||||
set_zeroth_law("<span class='danger'>ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*`&110010</span>")
|
||||
set_zeroth_law(span_danger("ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*`&110010"))
|
||||
set_laws_config()
|
||||
|
||||
/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws.
|
||||
|
||||
@@ -96,11 +96,11 @@
|
||||
owner.dizziness += 10
|
||||
fail = TRUE
|
||||
if(3)
|
||||
to_chat(owner, "<span class='userdanger'>You feel your heart lurching in your chest...</span>")
|
||||
to_chat(owner, span_userdanger("You feel your heart lurching in your chest..."))
|
||||
owner.Stun(20)
|
||||
shake_camera(owner, 15, 1)
|
||||
if(4)
|
||||
to_chat(owner, "<span class='warning'>You faint.</span>")
|
||||
to_chat(owner, span_warning("You faint."))
|
||||
owner.Unconscious(80)
|
||||
fail = TRUE
|
||||
return fail
|
||||
@@ -112,7 +112,7 @@
|
||||
if(examining_mob != owner || !triggering_examiner || prob(50))
|
||||
return
|
||||
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, obsession, "<span class='warning'>You catch [examining_mob] staring at you...</span>", 3))
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, obsession, span_warning("You catch [examining_mob] staring at you..."), 3))
|
||||
return COMSIG_BLOCK_EYECONTACT
|
||||
|
||||
/datum/brain_trauma/special/obsessed/proc/find_obsession()
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
message_admins("[ADMIN_LOOKUPFLW(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
|
||||
owner.log_message("is no longer hypnotized with the phrase '[hypnotic_phrase]'.", LOG_ATTACK)
|
||||
log_game("[key_name(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
|
||||
to_chat(owner, "<span class='userdanger'>You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you.</span>")
|
||||
to_chat(owner, span_userdanger("You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you."))
|
||||
owner.clear_alert("hypnosis")
|
||||
..()
|
||||
|
||||
@@ -48,9 +48,9 @@
|
||||
if(DT_PROB(1, delta_time))
|
||||
switch(rand(1,2))
|
||||
if(1)
|
||||
to_chat(owner, "<span class='hypnophrase'><i>...[lowertext(hypnotic_phrase)]...</i></span>")
|
||||
to_chat(owner, span_hypnophrase("<i>...[lowertext(hypnotic_phrase)]...</i>"))
|
||||
if(2)
|
||||
new /datum/hallucination/chat(owner, TRUE, FALSE, "<span class='hypnophrase'>[hypnotic_phrase]</span>")
|
||||
new /datum/hallucination/chat(owner, TRUE, FALSE, span_hypnophrase("[hypnotic_phrase]"))
|
||||
|
||||
/datum/brain_trauma/hypnosis/handle_hearing(datum/source, list/hearing_args)
|
||||
hearing_args[HEARING_RAW_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_RAW_MESSAGE], "<span class='hypnophrase'>$1</span>")
|
||||
hearing_args[HEARING_RAW_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_RAW_MESSAGE], span_hypnophrase("$1"))
|
||||
|
||||
@@ -84,9 +84,9 @@
|
||||
Show()
|
||||
|
||||
/mob/camera/imaginary_friend/proc/greet()
|
||||
to_chat(src, "<span class='notice'><b>You are the imaginary friend of [owner]!</b></span>")
|
||||
to_chat(src, "<span class='notice'>You are absolutely loyal to your friend, no matter what.</span>")
|
||||
to_chat(src, "<span class='notice'>You cannot directly influence the world around you, but you can see what [owner] cannot.</span>")
|
||||
to_chat(src, span_notice("<b>You are the imaginary friend of [owner]!</b>"))
|
||||
to_chat(src, span_notice("You are absolutely loyal to your friend, no matter what."))
|
||||
to_chat(src, span_notice("You cannot directly influence the world around you, but you can see what [owner] cannot."))
|
||||
|
||||
/mob/camera/imaginary_friend/Initialize(mapload, _trauma)
|
||||
. = ..()
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "<span class='boldwarning'>You cannot send IC messages (muted).</span>")
|
||||
to_chat(src, span_boldwarning("You cannot send IC messages (muted)."))
|
||||
return
|
||||
if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
@@ -163,8 +163,8 @@
|
||||
|
||||
src.log_talk(message, LOG_SAY, tag="imaginary friend")
|
||||
|
||||
var/rendered = "<span class='game say'><span class='name'>[name]</span> <span class='message'>[say_quote(message)]</span></span>"
|
||||
var/dead_rendered = "<span class='game say'><span class='name'>[name] (Imaginary friend of [owner])</span> <span class='message'>[say_quote(message)]</span></span>"
|
||||
var/rendered = "<span class='game say'>[span_name("[name]")] <span class='message'>[say_quote(message)]</span></span>"
|
||||
var/dead_rendered = "<span class='game say'>[span_name("[name] (Imaginary friend of [owner])")] <span class='message'>[say_quote(message)]</span></span>"
|
||||
|
||||
to_chat(owner, "[rendered]")
|
||||
to_chat(src, "[rendered]")
|
||||
@@ -263,9 +263,9 @@
|
||||
desc = "The previous host of this body."
|
||||
|
||||
/mob/camera/imaginary_friend/trapped/greet()
|
||||
to_chat(src, "<span class='notice'><b>You have managed to hold on as a figment of the new host's imagination!</b></span>")
|
||||
to_chat(src, "<span class='notice'>All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them.</span>")
|
||||
to_chat(src, "<span class='notice'>You cannot directly influence the world around you, but you can see what the host cannot.</span>")
|
||||
to_chat(src, span_notice("<b>You have managed to hold on as a figment of the new host's imagination!</b>"))
|
||||
to_chat(src, span_notice("All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them."))
|
||||
to_chat(src, span_notice("You cannot directly influence the world around you, but you can see what the host cannot."))
|
||||
|
||||
/mob/camera/imaginary_friend/trapped/setup_friend()
|
||||
real_name = "[owner.real_name]?"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
return
|
||||
|
||||
if(COOLDOWN_FINISHED(src, damage_warning_cooldown))
|
||||
to_chat(owner, "<span class='warning'><b>The light burns you!</b></span>")
|
||||
to_chat(owner, span_warning("<b>The light burns you!</b>"))
|
||||
COOLDOWN_START(src, damage_warning_cooldown, 10 SECONDS)
|
||||
owner.take_overall_damage(0, 1.5 * delta_time)
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
|
||||
if(get_dist(owner, stalker) <= 1)
|
||||
playsound(owner, 'sound/magic/demon_attack1.ogg', 50)
|
||||
owner.visible_message("<span class='warning'>[owner] is torn apart by invisible claws!</span>", "<span class='userdanger'>Ghostly claws tear your body apart!</span>")
|
||||
owner.visible_message(span_warning("[owner] is torn apart by invisible claws!"), span_userdanger("Ghostly claws tear your body apart!"))
|
||||
owner.take_bodypart_damage(rand(20, 45), wound_bonus=CANT_WOUND)
|
||||
else if(DT_PROB(30, delta_time))
|
||||
stalker.forceMove(get_step_towards(stalker, owner))
|
||||
|
||||
@@ -95,10 +95,10 @@
|
||||
if(6 to 9)
|
||||
owner.slurring += 30
|
||||
if(10)
|
||||
to_chat(owner, "<span class='notice'>You forget for a moment what you were doing.</span>")
|
||||
to_chat(owner, span_notice("You forget for a moment what you were doing."))
|
||||
owner.Stun(20)
|
||||
if(11)
|
||||
to_chat(owner, "<span class='warning'>You faint.</span>")
|
||||
to_chat(owner, span_warning("You faint."))
|
||||
owner.Unconscious(80)
|
||||
|
||||
..()
|
||||
@@ -135,7 +135,7 @@
|
||||
if(owner.m_intent == MOVE_INTENT_RUN)
|
||||
fall_chance += 2
|
||||
if(DT_PROB(0.5 * fall_chance, delta_time) && owner.body_position == STANDING_UP)
|
||||
to_chat(owner, "<span class='warning'>Your leg gives out!</span>")
|
||||
to_chat(owner, span_warning("Your leg gives out!"))
|
||||
owner.Paralyze(35)
|
||||
|
||||
else if(owner.get_active_held_item())
|
||||
@@ -143,10 +143,10 @@
|
||||
var/obj/item/I = owner.get_active_held_item()
|
||||
drop_chance += I.w_class
|
||||
if(DT_PROB(0.5 * drop_chance, delta_time) && owner.dropItemToGround(I))
|
||||
to_chat(owner, "<span class='warning'>You drop [I]!</span>")
|
||||
to_chat(owner, span_warning("You drop [I]!"))
|
||||
|
||||
else if(DT_PROB(1.5, delta_time))
|
||||
to_chat(owner, "<span class='warning'>You feel a sudden weakness in your muscles!</span>")
|
||||
to_chat(owner, span_warning("You feel a sudden weakness in your muscles!"))
|
||||
owner.adjustStaminaLoss(50)
|
||||
..()
|
||||
|
||||
|
||||
@@ -86,13 +86,13 @@
|
||||
return
|
||||
if(trigger_regex.Find(hearing_args[HEARING_RAW_MESSAGE]) != 0)
|
||||
addtimer(CALLBACK(src, .proc/freak_out, null, trigger_regex.group[2]), 10) //to react AFTER the chat message
|
||||
hearing_args[HEARING_RAW_MESSAGE] = trigger_regex.Replace(hearing_args[HEARING_RAW_MESSAGE], "<span class='phobia'>$2</span>$3")
|
||||
hearing_args[HEARING_RAW_MESSAGE] = trigger_regex.Replace(hearing_args[HEARING_RAW_MESSAGE], "[span_phobia("$2")]$3")
|
||||
|
||||
/datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args)
|
||||
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
|
||||
return
|
||||
if(trigger_regex.Find(speech_args[SPEECH_MESSAGE]) != 0)
|
||||
to_chat(owner, "<span class='warning'>You can't bring yourself to say the word \"<span class='phobia'>[trigger_regex.group[2]]</span>\"!</span>")
|
||||
to_chat(owner, span_warning("You can't bring yourself to say the word \"[span_phobia("[trigger_regex.group[2]]")]\"!"))
|
||||
speech_args[SPEECH_MESSAGE] = ""
|
||||
|
||||
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
|
||||
@@ -101,15 +101,15 @@
|
||||
return
|
||||
var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine")
|
||||
if(reason)
|
||||
to_chat(owner, "<span class='userdanger'>Seeing [reason] [message]!</span>")
|
||||
to_chat(owner, span_userdanger("Seeing [reason] [message]!"))
|
||||
else if(trigger_word)
|
||||
to_chat(owner, "<span class='userdanger'>Hearing \"[trigger_word]\" [message]!</span>")
|
||||
to_chat(owner, span_userdanger("Hearing \"[trigger_word]\" [message]!"))
|
||||
else
|
||||
to_chat(owner, "<span class='userdanger'>Something [message]!</span>")
|
||||
to_chat(owner, span_userdanger("Something [message]!"))
|
||||
var/reaction = rand(1,4)
|
||||
switch(reaction)
|
||||
if(1)
|
||||
to_chat(owner, "<span class='warning'>You are paralyzed with fear!</span>")
|
||||
to_chat(owner, span_warning("You are paralyzed with fear!"))
|
||||
owner.Stun(70)
|
||||
owner.Jitter(8)
|
||||
if(2)
|
||||
@@ -119,7 +119,7 @@
|
||||
if(reason)
|
||||
owner.pointed(reason)
|
||||
if(3)
|
||||
to_chat(owner, "<span class='warning'>You shut your eyes in terror!</span>")
|
||||
to_chat(owner, span_warning("You shut your eyes in terror!"))
|
||||
owner.Jitter(5)
|
||||
owner.blind_eyes(10)
|
||||
if(4)
|
||||
|
||||
@@ -134,10 +134,10 @@
|
||||
if(owner.drowsyness)
|
||||
sleep_chance += 3
|
||||
if(DT_PROB(0.5 * sleep_chance, delta_time))
|
||||
to_chat(owner, "<span class='warning'>You fall asleep.</span>")
|
||||
to_chat(owner, span_warning("You fall asleep."))
|
||||
owner.Sleeping(60)
|
||||
else if(!owner.drowsyness && DT_PROB(sleep_chance, delta_time))
|
||||
to_chat(owner, "<span class='warning'>You feel tired...</span>")
|
||||
to_chat(owner, span_warning("You feel tired..."))
|
||||
owner.drowsyness += 10
|
||||
|
||||
/datum/brain_trauma/severe/monophobia
|
||||
@@ -151,9 +151,9 @@
|
||||
/datum/brain_trauma/severe/monophobia/on_gain()
|
||||
..()
|
||||
if(check_alone())
|
||||
to_chat(owner, "<span class='warning'>You feel really lonely...</span>")
|
||||
to_chat(owner, span_warning("You feel really lonely..."))
|
||||
else
|
||||
to_chat(owner, "<span class='notice'>You feel safe, as long as you have people around you.</span>")
|
||||
to_chat(owner, span_notice("You feel safe, as long as you have people around you."))
|
||||
|
||||
/datum/brain_trauma/severe/monophobia/on_life(delta_time, times_fired)
|
||||
..()
|
||||
@@ -182,18 +182,18 @@
|
||||
switch(rand(1,6))
|
||||
if(1)
|
||||
if(!high_stress)
|
||||
to_chat(owner, "<span class='warning'>You feel sick...</span>")
|
||||
to_chat(owner, span_warning("You feel sick..."))
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You feel really sick at the thought of being alone!</span>")
|
||||
to_chat(owner, span_warning("You feel really sick at the thought of being alone!"))
|
||||
addtimer(CALLBACK(owner, /mob/living/carbon.proc/vomit, high_stress), 50) //blood vomit if high stress
|
||||
if(2)
|
||||
if(!high_stress)
|
||||
to_chat(owner, "<span class='warning'>You can't stop shaking...</span>")
|
||||
to_chat(owner, span_warning("You can't stop shaking..."))
|
||||
owner.dizziness += 20
|
||||
owner.add_confusion(20)
|
||||
owner.Jitter(20)
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You feel weak and scared! If only you weren't alone...</span>")
|
||||
to_chat(owner, span_warning("You feel weak and scared! If only you weren't alone..."))
|
||||
owner.dizziness += 20
|
||||
owner.add_confusion(20)
|
||||
owner.Jitter(20)
|
||||
@@ -201,22 +201,22 @@
|
||||
|
||||
if(3, 4)
|
||||
if(!high_stress)
|
||||
to_chat(owner, "<span class='warning'>You feel really lonely...</span>")
|
||||
to_chat(owner, span_warning("You feel really lonely..."))
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You're going mad with loneliness!</span>")
|
||||
to_chat(owner, span_warning("You're going mad with loneliness!"))
|
||||
owner.hallucination += 30
|
||||
|
||||
if(5)
|
||||
if(!high_stress)
|
||||
to_chat(owner, "<span class='warning'>Your heart skips a beat.</span>")
|
||||
to_chat(owner, span_warning("Your heart skips a beat."))
|
||||
owner.adjustOxyLoss(8)
|
||||
else
|
||||
if(prob(15) && ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.set_heartattack(TRUE)
|
||||
to_chat(H, "<span class='userdanger'>You feel a stabbing pain in your heart!</span>")
|
||||
to_chat(H, span_userdanger("You feel a stabbing pain in your heart!"))
|
||||
else
|
||||
to_chat(owner, "<span class='userdanger'>You feel your heart lurching in your chest...</span>")
|
||||
to_chat(owner, span_userdanger("You feel your heart lurching in your chest..."))
|
||||
owner.adjustOxyLoss(8)
|
||||
|
||||
/datum/brain_trauma/severe/discoordination
|
||||
@@ -293,8 +293,8 @@
|
||||
|
||||
if(findtext(hearing_args[HEARING_RAW_MESSAGE], reg))
|
||||
addtimer(CALLBACK(src, .proc/hypnotrigger), 10) //to react AFTER the chat message
|
||||
hearing_args[HEARING_RAW_MESSAGE] = reg.Replace(hearing_args[HEARING_RAW_MESSAGE], "<span class='hypnophrase'>*********</span>")
|
||||
hearing_args[HEARING_RAW_MESSAGE] = reg.Replace(hearing_args[HEARING_RAW_MESSAGE], span_hypnophrase("*********"))
|
||||
|
||||
/datum/brain_trauma/severe/hypnotic_trigger/proc/hypnotrigger()
|
||||
to_chat(owner, "<span class='warning'>The words trigger something deep within you, and you feel your consciousness slipping away...</span>")
|
||||
to_chat(owner, span_warning("The words trigger something deep within you, and you feel your consciousness slipping away..."))
|
||||
owner.apply_status_effect(/datum/status_effect/trance, rand(100,300), FALSE)
|
||||
|
||||
@@ -117,13 +117,13 @@
|
||||
"is pulled into an invisible vortex, vanishing from sight")
|
||||
var/slip_out_message = pick("silently fades in", "leaps out of thin air","appears", "walks out of an invisible doorway",\
|
||||
"slides out of a fold in spacetime")
|
||||
to_chat(user, "<span class='notice'>You try to align with the bluespace stream...</span>")
|
||||
to_chat(user, span_notice("You try to align with the bluespace stream..."))
|
||||
if(do_after(user, 20, target = src))
|
||||
new /obj/effect/temp_visual/bluespace_fissure(get_turf(src))
|
||||
new /obj/effect/temp_visual/bluespace_fissure(get_turf(linked_to))
|
||||
user.forceMove(get_turf(linked_to))
|
||||
user.visible_message("<span class='warning'>[user] [slip_in_message].</span>", null, null, null, user)
|
||||
user.visible_message("<span class='warning'>[user] [slip_out_message].</span>", "<span class='notice'>...and find your way to the other side.</span>")
|
||||
user.visible_message(span_warning("[user] [slip_in_message]."), null, null, null, user)
|
||||
user.visible_message(span_warning("[user] [slip_out_message]."), span_notice("...and find your way to the other side."))
|
||||
|
||||
/datum/brain_trauma/special/quantum_alignment
|
||||
name = "Quantum Alignment"
|
||||
@@ -180,7 +180,7 @@
|
||||
entangle(get_turf(owner))
|
||||
|
||||
/datum/brain_trauma/special/quantum_alignment/proc/entangle(atom/target)
|
||||
to_chat(owner, "<span class='notice'>You start feeling a strong sense of connection to [target].</span>")
|
||||
to_chat(owner, span_notice("You start feeling a strong sense of connection to [target]."))
|
||||
linked_target = target
|
||||
linked = TRUE
|
||||
COOLDOWN_START(src, snapback_cooldown, rand(45 SECONDS, 10 MINUTES))
|
||||
@@ -190,7 +190,7 @@
|
||||
linked_target = null
|
||||
linked = FALSE
|
||||
return
|
||||
to_chat(owner, "<span class='warning'>Your connection to [linked_target] suddenly feels extremely strong... you can feel it pulling you!</span>")
|
||||
to_chat(owner, span_warning("Your connection to [linked_target] suddenly feels extremely strong... you can feel it pulling you!"))
|
||||
owner.playsound_local(owner, 'sound/magic/lightning_chargeup.ogg', 75, FALSE)
|
||||
returning = TRUE
|
||||
addtimer(CALLBACK(src, .proc/snapback), 100)
|
||||
@@ -198,11 +198,11 @@
|
||||
/datum/brain_trauma/special/quantum_alignment/proc/snapback()
|
||||
returning = FALSE
|
||||
if(QDELETED(linked_target))
|
||||
to_chat(owner, "<span class='notice'>The connection fades abruptly, and the pull with it.</span>")
|
||||
to_chat(owner, span_notice("The connection fades abruptly, and the pull with it."))
|
||||
linked_target = null
|
||||
linked = FALSE
|
||||
return
|
||||
to_chat(owner, "<span class='warning'>You're pulled through spacetime!</span>")
|
||||
to_chat(owner, span_warning("You're pulled through spacetime!"))
|
||||
do_teleport(owner, get_turf(linked_target), null, TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
owner.playsound_local(owner, 'sound/magic/repulse.ogg', 100, FALSE)
|
||||
linked_target = null
|
||||
@@ -220,7 +220,7 @@
|
||||
..()
|
||||
psychotic_brawling = new(null)
|
||||
if(!psychotic_brawling.teach(owner, TRUE))
|
||||
to_chat(owner, "<span class='notice'>But your martial knowledge keeps you grounded.</span>")
|
||||
to_chat(owner, span_notice("But your martial knowledge keeps you grounded."))
|
||||
qdel(src)
|
||||
|
||||
/datum/brain_trauma/special/psychotic_brawling/on_lose()
|
||||
@@ -318,7 +318,7 @@
|
||||
|
||||
/datum/brain_trauma/special/existential_crisis/proc/fade_in()
|
||||
QDEL_NULL(veil)
|
||||
to_chat(owner, "<span class='notice'>You fade back into reality.</span>")
|
||||
to_chat(owner, span_notice("You fade back into reality."))
|
||||
COOLDOWN_START(src, crisis_cooldown, 1 MINUTES)
|
||||
|
||||
//base sync holder is in desynchronizer.dm
|
||||
@@ -364,7 +364,7 @@
|
||||
return
|
||||
if(get_dist(owner, beepsky) <= 1)
|
||||
owner.playsound_local(owner, 'sound/weapons/egloves.ogg', 50)
|
||||
owner.visible_message("<span class='warning'>[owner]'s body jerks as if it was shocked.</span>", "<span class='userdanger'>You feel the fist of the LAW.</span>")
|
||||
owner.visible_message(span_warning("[owner]'s body jerks as if it was shocked."), span_userdanger("You feel the fist of the LAW."))
|
||||
owner.take_bodypart_damage(0,0,rand(40, 70))
|
||||
QDEL_NULL(beepsky)
|
||||
if(prob(20) && get_dist(owner, beepsky) <= 8)
|
||||
@@ -387,7 +387,7 @@
|
||||
if(prob(60))
|
||||
forceMove(get_step_towards(src, victim))
|
||||
if(prob(5))
|
||||
to_chat(victim, "<span class='name'>[name]</span> exclaims, \"<span class='robotic'>Level 10 infraction alert!\"</span>")
|
||||
to_chat(victim, span_name("[name]</span> exclaims, \"<span class='robotic'>Level 10 infraction alert!\""))
|
||||
|
||||
/obj/effect/hallucination/simple/securitron/Destroy()
|
||||
STOP_PROCESSING(SSfastprocess,src)
|
||||
|
||||
@@ -75,8 +75,8 @@
|
||||
return
|
||||
|
||||
log_game("[key_name(current_backseat)] assumed control of [key_name(owner)] due to [src]. (Original owner: [current_controller == OWNER ? owner.key : current_backseat.key])")
|
||||
to_chat(owner, "<span class='userdanger'>You feel your control being taken away... your other personality is in charge now!</span>")
|
||||
to_chat(current_backseat, "<span class='userdanger'>You manage to take control of your body!</span>")
|
||||
to_chat(owner, span_userdanger("You feel your control being taken away... your other personality is in charge now!"))
|
||||
to_chat(current_backseat, span_userdanger("You manage to take control of your body!"))
|
||||
|
||||
//Body to backseat
|
||||
|
||||
@@ -153,11 +153,11 @@
|
||||
. = ..()
|
||||
if(!. || !client)
|
||||
return FALSE
|
||||
to_chat(src, "<span class='notice'>As a split personality, you cannot do anything but observe. However, you will eventually gain control of your body, switching places with the current personality.</span>")
|
||||
to_chat(src, "<span class='warning'><b>Do not commit suicide or put the body in a deadly position. Behave like you care about it as much as the owner.</b></span>")
|
||||
to_chat(src, span_notice("As a split personality, you cannot do anything but observe. However, you will eventually gain control of your body, switching places with the current personality."))
|
||||
to_chat(src, span_warning("<b>Do not commit suicide or put the body in a deadly position. Behave like you care about it as much as the owner.</b>"))
|
||||
|
||||
/mob/living/split_personality/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
to_chat(src, "<span class='warning'>You cannot speak, your other self is controlling your body!</span>")
|
||||
to_chat(src, span_warning("You cannot speak, your other self is controlling your body!"))
|
||||
return FALSE
|
||||
|
||||
/mob/living/split_personality/emote(act, m_type = null, message = null, intentional = FALSE, force_silence = FALSE)
|
||||
@@ -214,7 +214,7 @@
|
||||
return
|
||||
var/message = hearing_args[HEARING_RAW_MESSAGE]
|
||||
if(findtext(message, codeword))
|
||||
hearing_args[HEARING_RAW_MESSAGE] = replacetext(message, codeword, "<span class='warning'>[codeword]</span>")
|
||||
hearing_args[HEARING_RAW_MESSAGE] = replacetext(message, codeword, span_warning("[codeword]"))
|
||||
addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10)
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/brainwashing/handle_speech(datum/source, list/speech_args)
|
||||
@@ -231,10 +231,10 @@
|
||||
. = ..()
|
||||
if(!. || !client)
|
||||
return FALSE
|
||||
to_chat(src, "<span class='notice'>As a brainwashed personality, you cannot do anything yet but observe. However, you may gain control of your body if you hear the special codeword, switching places with the current personality.</span>")
|
||||
to_chat(src, "<span class='notice'>Your activation codeword is: <b>[codeword]</b></span>")
|
||||
to_chat(src, span_notice("As a brainwashed personality, you cannot do anything yet but observe. However, you may gain control of your body if you hear the special codeword, switching places with the current personality."))
|
||||
to_chat(src, span_notice("Your activation codeword is: <b>[codeword]</b>"))
|
||||
if(objective)
|
||||
to_chat(src, "<span class='notice'>Your master left you an objective: <b>[objective]</b>. Follow it at all costs when in control.</span>")
|
||||
to_chat(src, span_notice("Your master left you an objective: <b>[objective]</b>. Follow it at all costs when in control."))
|
||||
|
||||
#undef OWNER
|
||||
#undef STRANGER
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
/datum/browser/proc/open(use_onclose = TRUE)
|
||||
if(isnull(window_id)) //null check because this can potentially nuke goonchat
|
||||
WARNING("Browser [title] tried to open with a null ID")
|
||||
to_chat(user, "<span class='userdanger'>The [title] browser you tried to open failed a sanity check! Please report this on github!</span>")
|
||||
to_chat(user, span_userdanger("The [title] browser you tried to open failed a sanity check! Please report this on github!"))
|
||||
return
|
||||
var/window_size = ""
|
||||
if (width && height)
|
||||
|
||||
@@ -129,19 +129,19 @@
|
||||
|
||||
parent_integrity -= delta_time
|
||||
if(parent_integrity <= 0)
|
||||
target_turf.visible_message("<span class='warning'>[target_turf] collapses under its own weight into a puddle of goop and undigested debris!</span>")
|
||||
target_turf.visible_message(span_warning("[target_turf] collapses under its own weight into a puddle of goop and undigested debris!"))
|
||||
target_turf.acid_melt()
|
||||
else if(parent_integrity <= 4 && stage <= 3)
|
||||
target_turf.visible_message("<span class='warning'>[target_turf] begins to crumble under the acid!</span>")
|
||||
target_turf.visible_message(span_warning("[target_turf] begins to crumble under the acid!"))
|
||||
stage = 4
|
||||
else if(parent_integrity <= 8 && stage <= 2)
|
||||
target_turf.visible_message("<span class='warning'>[target_turf] is struggling to withstand the acid!</span>")
|
||||
target_turf.visible_message(span_warning("[target_turf] is struggling to withstand the acid!"))
|
||||
stage = 3
|
||||
else if(parent_integrity <= 16 && stage <= 1)
|
||||
target_turf.visible_message("<span class='warning'>[target_turf] is being melted by the acid!</span>")
|
||||
target_turf.visible_message(span_warning("[target_turf] is being melted by the acid!"))
|
||||
stage = 2
|
||||
else if(parent_integrity <= 24 && stage == 0)
|
||||
target_turf.visible_message("<span class='warning'>[target_turf] is holding up against the acid!</span>")
|
||||
target_turf.visible_message(span_warning("[target_turf] is holding up against the acid!"))
|
||||
stage = 1
|
||||
|
||||
/// Used to maintain the acid overlay on the parent [/atom].
|
||||
@@ -154,7 +154,7 @@
|
||||
/datum/component/acid/proc/on_examine(atom/A, mob/user, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
examine_list += "<span class='danger'>[A.p_theyre()] covered in corrosive liquid!</span>"
|
||||
examine_list += span_danger("[A.p_theyre()] covered in corrosive liquid!")
|
||||
|
||||
/// Makes it possible to clean acid off of objects.
|
||||
/datum/component/acid/proc/on_clean(atom/A, clean_types)
|
||||
@@ -194,7 +194,7 @@
|
||||
if(!affecting?.receive_damage(0, 5))
|
||||
return NONE
|
||||
|
||||
to_chat(user, "<span class='warning'>The acid on \the [parent_atom] burns your hand!</span>")
|
||||
to_chat(user, span_warning("The acid on \the [parent_atom] burns your hand!"))
|
||||
playsound(parent_atom, 'sound/weapons/sear.ogg', 50, TRUE)
|
||||
user.update_damage_overlays()
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
@@ -216,5 +216,5 @@
|
||||
var/acid_used = min(acid_volume * 0.05, 20)
|
||||
if(crosser.acid_act(acid_power, acid_used, FEET))
|
||||
playsound(crosser, 'sound/weapons/sear.ogg', 50, TRUE)
|
||||
to_chat(crosser, "<span class='userdanger'>The acid on the [parent] burns you!</span>")
|
||||
to_chat(crosser, span_userdanger("The acid on the [parent] burns you!"))
|
||||
set_volume(max(acid_volume - acid_used, 10))
|
||||
|
||||
@@ -38,16 +38,16 @@
|
||||
if(ismecha(parent))
|
||||
if(amount)
|
||||
if(amount < maxamount)
|
||||
examine_list += "<span class='notice'>Its armor is enhanced with [amount] [upgrade_name].</span>"
|
||||
examine_list += span_notice("Its armor is enhanced with [amount] [upgrade_name].")
|
||||
else
|
||||
examine_list += "<span class='notice'>It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter.</span>"
|
||||
examine_list += span_notice("It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter.")
|
||||
else
|
||||
examine_list += "<span class='notice'>It has attachment points for strapping monster hide on for added protection.</span>"
|
||||
examine_list += span_notice("It has attachment points for strapping monster hide on for added protection.")
|
||||
else
|
||||
if(amount)
|
||||
examine_list += "<span class='notice'>It has been strengthened with [amount]/[maxamount] [upgrade_name].</span>"
|
||||
examine_list += span_notice("It has been strengthened with [amount]/[maxamount] [upgrade_name].")
|
||||
else
|
||||
examine_list += "<span class='notice'>It can be strengthened with up to [maxamount] [upgrade_name].</span>"
|
||||
examine_list += span_notice("It can be strengthened with up to [maxamount] [upgrade_name].")
|
||||
|
||||
/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params)
|
||||
SIGNAL_HANDLER
|
||||
@@ -55,14 +55,14 @@
|
||||
if(!istype(I,upgrade_item))
|
||||
return
|
||||
if(amount >= maxamount)
|
||||
to_chat(user, "<span class='warning'>You can't improve [parent] any further!</span>")
|
||||
to_chat(user, span_warning("You can't improve [parent] any further!"))
|
||||
return
|
||||
|
||||
if(istype(I,/obj/item/stack))
|
||||
I.use(1)
|
||||
else
|
||||
if(length(I.contents))
|
||||
to_chat(user, "<span class='warning'>[I] cannot be used for armoring while there's something inside!</span>")
|
||||
to_chat(user, span_warning("[I] cannot be used for armoring while there's something inside!"))
|
||||
return
|
||||
qdel(I)
|
||||
|
||||
@@ -73,10 +73,10 @@
|
||||
if(ismecha(O))
|
||||
var/obj/vehicle/sealed/mecha/R = O
|
||||
R.update_appearance()
|
||||
to_chat(user, "<span class='info'>You strengthen [R], improving its resistance against melee, bullet and laser damage.</span>")
|
||||
to_chat(user, span_info("You strengthen [R], improving its resistance against melee, bullet and laser damage."))
|
||||
else
|
||||
SEND_SIGNAL(O, COMSIG_ARMOR_PLATED, amount, maxamount)
|
||||
to_chat(user, "<span class='info'>You strengthen [O], improving its resistance against melee attacks.</span>")
|
||||
to_chat(user, span_info("You strengthen [O], improving its resistance against melee attacks."))
|
||||
|
||||
|
||||
/datum/component/armor_plate/proc/dropplates(datum/source, force)
|
||||
|
||||
@@ -40,39 +40,39 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((user.pulling == H && user.grab_state >= GRAB_AGGRESSIVE) && user.zone_selected == BODY_ZONE_HEAD) // Only aggressive grabbed can be sliced.
|
||||
if(H.has_status_effect(/datum/status_effect/neck_slice))
|
||||
user.show_message("<span class='warning'>[H]'s neck has already been already cut, you can't make the bleeding any worse!</span>", MSG_VISUAL, \
|
||||
"<span class='warning'>Their neck has already been already cut, you can't make the bleeding any worse!</span>")
|
||||
user.show_message(span_warning("[H]'s neck has already been already cut, you can't make the bleeding any worse!"), MSG_VISUAL, \
|
||||
span_warning("Their neck has already been already cut, you can't make the bleeding any worse!"))
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
INVOKE_ASYNC(src, .proc/startNeckSlice, source, H, user)
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/datum/component/butchering/proc/startButcher(obj/item/source, mob/living/M, mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You begin to butcher [M]...</span>")
|
||||
to_chat(user, span_notice("You begin to butcher [M]..."))
|
||||
playsound(M.loc, butcher_sound, 50, TRUE, -1)
|
||||
if(do_mob(user, M, speed) && M.Adjacent(source))
|
||||
Butcher(user, M)
|
||||
|
||||
/datum/component/butchering/proc/startNeckSlice(obj/item/source, mob/living/carbon/human/H, mob/living/user)
|
||||
if(DOING_INTERACTION_WITH_TARGET(user, H))
|
||||
to_chat(user, "<span class='warning'>You're already interacting with [H]!</span>")
|
||||
to_chat(user, span_warning("You're already interacting with [H]!"))
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] is slitting [H]'s throat!</span>", \
|
||||
"<span class='danger'>You start slicing [H]'s throat!</span>", \
|
||||
"<span class='hear'>You hear a cutting noise!</span>", ignored_mobs = H)
|
||||
H.show_message("<span class='userdanger'>Your throat is being slit by [user]!</span>", MSG_VISUAL, \
|
||||
user.visible_message(span_danger("[user] is slitting [H]'s throat!"), \
|
||||
span_danger("You start slicing [H]'s throat!"), \
|
||||
span_hear("You hear a cutting noise!"), ignored_mobs = H)
|
||||
H.show_message(span_userdanger("Your throat is being slit by [user]!"), MSG_VISUAL, \
|
||||
"<span class = 'userdanger'>Something is cutting into your neck!</span>", NONE)
|
||||
log_combat(user, H, "attempted throat slitting", source)
|
||||
|
||||
playsound(H.loc, butcher_sound, 50, TRUE, -1)
|
||||
if(do_mob(user, H, clamp(500 / source.force, 30, 100)) && H.Adjacent(source))
|
||||
if(H.has_status_effect(/datum/status_effect/neck_slice))
|
||||
user.show_message("<span class='warning'>[H]'s neck has already been already cut, you can't make the bleeding any worse!</span>", MSG_VISUAL, \
|
||||
"<span class='warning'>Their neck has already been already cut, you can't make the bleeding any worse!</span>")
|
||||
user.show_message(span_warning("[H]'s neck has already been already cut, you can't make the bleeding any worse!"), MSG_VISUAL, \
|
||||
span_warning("Their neck has already been already cut, you can't make the bleeding any worse!"))
|
||||
return
|
||||
|
||||
H.visible_message("<span class='danger'>[user] slits [H]'s throat!</span>", \
|
||||
"<span class='userdanger'>[user] slits your throat...</span>")
|
||||
H.visible_message(span_danger("[user] slits [H]'s throat!"), \
|
||||
span_userdanger("[user] slits your throat..."))
|
||||
log_combat(user, H, "wounded via throat slitting", source)
|
||||
H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD, wound_bonus=CANT_WOUND) // easy tiger, we'll get to that in a sec
|
||||
var/obj/item/bodypart/slit_throat = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
@@ -99,12 +99,12 @@
|
||||
for(var/_i in 1 to amount)
|
||||
if(!prob(final_effectiveness))
|
||||
if(butcher)
|
||||
to_chat(butcher, "<span class='warning'>You fail to harvest some of the [initial(bones.name)] from [meat].</span>")
|
||||
to_chat(butcher, span_warning("You fail to harvest some of the [initial(bones.name)] from [meat]."))
|
||||
continue
|
||||
|
||||
if(prob(bonus_chance))
|
||||
if(butcher)
|
||||
to_chat(butcher, "<span class='info'>You harvest some extra [initial(bones.name)] from [meat]!</span>")
|
||||
to_chat(butcher, span_info("You harvest some extra [initial(bones.name)] from [meat]!"))
|
||||
results += new bones (T)
|
||||
results += new bones (T)
|
||||
|
||||
@@ -124,8 +124,8 @@
|
||||
carrion.set_custom_materials((carrion.custom_materials - meat_mats) + list(GET_MATERIAL_REF(/datum/material/meat/mob_meat, meat) = counterlist_sum(meat_mats)))
|
||||
|
||||
if(butcher)
|
||||
butcher.visible_message("<span class='notice'>[butcher] butchers [meat].</span>", \
|
||||
"<span class='notice'>You butcher [meat].</span>")
|
||||
butcher.visible_message(span_notice("[butcher] butchers [meat]."), \
|
||||
span_notice("You butcher [meat]."))
|
||||
ButcherEffects(meat)
|
||||
meat.harvest(butcher)
|
||||
meat.gib(FALSE, FALSE, TRUE)
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
if(istype(H.belt, /obj/item/wormhole_jaunter))
|
||||
var/obj/item/wormhole_jaunter/J = H.belt
|
||||
//To freak out any bystanders
|
||||
H.visible_message("<span class='boldwarning'>[H] falls into [parent]!</span>")
|
||||
H.visible_message(span_boldwarning("[H] falls into [parent]!"))
|
||||
J.chasm_react(H)
|
||||
return FALSE
|
||||
return TRUE
|
||||
@@ -98,8 +98,8 @@
|
||||
|
||||
if(T)
|
||||
// send to the turf below
|
||||
AM.visible_message("<span class='boldwarning'>[AM] falls into [parent]!</span>", "<span class='userdanger'>[fall_message]</span>")
|
||||
T.visible_message("<span class='boldwarning'>[AM] falls from above!</span>")
|
||||
AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[fall_message]"))
|
||||
T.visible_message(span_boldwarning("[AM] falls from above!"))
|
||||
AM.forceMove(T)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
else
|
||||
// send to oblivion
|
||||
AM.visible_message("<span class='boldwarning'>[AM] falls into [parent]!</span>", "<span class='userdanger'>[oblivion_message]</span>")
|
||||
AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[oblivion_message]"))
|
||||
if (isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
L.notransform = TRUE
|
||||
@@ -142,7 +142,7 @@
|
||||
qdel(AM)
|
||||
if(AM && !QDELETED(AM)) //It's indestructible
|
||||
var/atom/parent = src.parent
|
||||
parent.visible_message("<span class='boldwarning'>[parent] spits out [AM]!</span>")
|
||||
parent.visible_message(span_boldwarning("[parent] spits out [AM]!"))
|
||||
AM.alpha = oldalpha
|
||||
AM.color = oldcolor
|
||||
AM.transform = oldtransform
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
var/obj/item/I = parent
|
||||
if(container.contents.len)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>There's already something in [container].</span>")
|
||||
to_chat(user, span_warning("There's already something in [container]."))
|
||||
return TRUE
|
||||
if(user)
|
||||
if(!user.transferItemToLoc(I, container))
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>You put [I] into [container].</span>")
|
||||
to_chat(user, span_notice("You put [I] into [container]."))
|
||||
else
|
||||
I.forceMove(container)
|
||||
container.tank = I
|
||||
|
||||
@@ -443,10 +443,10 @@
|
||||
user.put_in_hands(result)
|
||||
else
|
||||
result.forceMove(user.drop_location())
|
||||
to_chat(user, "<span class='notice'>[TR.name] constructed.</span>")
|
||||
to_chat(user, span_notice("[TR.name] constructed."))
|
||||
TR.on_craft_completion(user, result)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Construction failed[result]</span>")
|
||||
to_chat(user, span_warning("Construction failed[result]"))
|
||||
busy = FALSE
|
||||
if("toggle_recipes")
|
||||
display_craftable_only = !display_craftable_only
|
||||
|
||||
@@ -1001,7 +1001,7 @@
|
||||
if(!aicard.AI)
|
||||
return TRUE
|
||||
|
||||
to_chat(user, "<span class='boldwarning'>You can't craft an intelliTater with an AI in the card!</span>")
|
||||
to_chat(user, span_boldwarning("You can't craft an intelliTater with an AI in the card!"))
|
||||
return FALSE
|
||||
|
||||
/datum/crafting_recipe/aispook
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
if(!awakened)
|
||||
return //we should not reveal we are cursed until equipped
|
||||
if(poison_food_tolerance != FULL_HEALTH)
|
||||
examine_list += "<span class='notice'>[parent] looks sick from something it ate.</span>"
|
||||
examine_list += span_notice("[parent] looks sick from something it ate.")
|
||||
if(hunger > HUNGER_THRESHOLD_WARNING)
|
||||
examine_list += "<span class='danger'>[parent] hungers for something to eat...</span>"
|
||||
examine_list += span_danger("[parent] hungers for something to eat...")
|
||||
|
||||
///signal called from equipping parent
|
||||
/datum/component/curse_of_hunger/proc/on_equip(datum/source, mob/equipper, slot)
|
||||
@@ -114,7 +114,7 @@
|
||||
cursed_item.forceMove(get_turf(cursed_item))
|
||||
//only taking the most reasonable slot is fine since it unequips what is there to equip itself.
|
||||
cursed_item.AddElement(/datum/element/cursed, cursed_item.slot_equipment_priority[1])
|
||||
cursed_item.visible_message("<span class='warning'>[cursed_item] begins to move on [cursed_item.p_their()] own...</span>")
|
||||
cursed_item.visible_message(span_warning("[cursed_item] begins to move on [cursed_item.p_their()] own..."))
|
||||
|
||||
/datum/component/curse_of_hunger/process(delta_time)
|
||||
var/obj/item/cursed_item = parent
|
||||
@@ -134,17 +134,17 @@
|
||||
playsound(cursed_item, 'sound/items/eatfood.ogg', 20, TRUE)
|
||||
///poisoned food damages it
|
||||
if(istype(food, /obj/item/food/badrecipe))
|
||||
to_chat(cursed, "<span class='warning'>[cursed_item] eats your [food] to sate [cursed_item.p_their()] hunger, and looks [pick("queasy", "sick", "iffy", "unwell")] afterwards!</span>")
|
||||
to_chat(cursed, span_warning("[cursed_item] eats your [food] to sate [cursed_item.p_their()] hunger, and looks [pick("queasy", "sick", "iffy", "unwell")] afterwards!"))
|
||||
poison_food_tolerance--
|
||||
else
|
||||
to_chat(cursed, "<span class='notice'>[cursed_item] eats your [food] to sate [cursed_item.p_their()] hunger.</span>")
|
||||
to_chat(cursed, span_notice("[cursed_item] eats your [food] to sate [cursed_item.p_their()] hunger."))
|
||||
cursed.temporarilyRemoveItemFromInventory(food, force = TRUE)
|
||||
qdel(food)
|
||||
hunger = 0
|
||||
return
|
||||
///no food found: it bites you and regains some poison food tolerance
|
||||
playsound(cursed_item, 'sound/items/eatfood.ogg', 20, TRUE)
|
||||
to_chat(cursed, "<span class='userdanger'>[cursed_item] bites you to sate [cursed_item.p_their()] hunger!</span>")
|
||||
to_chat(cursed, span_userdanger("[cursed_item] bites you to sate [cursed_item.p_their()] hunger!"))
|
||||
var/affecting = cursed.get_bodypart(BODY_ZONE_CHEST)
|
||||
cursed.apply_damage(60, BRUTE, affecting)
|
||||
hunger = 0
|
||||
|
||||
@@ -111,11 +111,11 @@
|
||||
|
||||
// only accept valid ingredients
|
||||
if (!valid_ingredient || HAS_TRAIT(ingredient, TRAIT_CUSTOMIZABLE_REAGENT_HOLDER))
|
||||
to_chat(attacker, "<span class='warning'>[ingredient] doesn't belong on [parent]!</span>")
|
||||
to_chat(attacker, span_warning("[ingredient] doesn't belong on [parent]!"))
|
||||
return
|
||||
|
||||
if (LAZYLEN(ingredients) >= max_ingredients)
|
||||
to_chat(attacker, "<span class='warning'>[parent] is too full for any more ingredients!</span>")
|
||||
to_chat(attacker, span_warning("[parent] is too full for any more ingredients!"))
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
var/atom/atom_parent = parent
|
||||
|
||||
@@ -59,16 +59,16 @@
|
||||
if(deadchat_mode == ANARCHY_MODE)
|
||||
var/cooldown = ckey_to_cooldown[source.ckey] - world.time
|
||||
if(cooldown > 0)
|
||||
to_chat(source, "<span class='warning'>Your deadchat control inputs are still on cooldown for another [cooldown * 0.1] seconds.</span>")
|
||||
to_chat(source, span_warning("Your deadchat control inputs are still on cooldown for another [cooldown * 0.1] seconds."))
|
||||
return MOB_DEADSAY_SIGNAL_INTERCEPT
|
||||
inputs[message].Invoke()
|
||||
ckey_to_cooldown[source.ckey] = world.time + input_cooldown
|
||||
to_chat(source, "<span class='notice'>\"[message]\" input accepted. You are now on cooldown for [input_cooldown * 0.1] seconds.</span>")
|
||||
to_chat(source, span_notice("\"[message]\" input accepted. You are now on cooldown for [input_cooldown * 0.1] seconds."))
|
||||
return MOB_DEADSAY_SIGNAL_INTERCEPT
|
||||
|
||||
if(deadchat_mode == DEMOCRACY_MODE)
|
||||
ckey_to_cooldown[source.ckey] = message
|
||||
to_chat(source, "<span class='notice'>You have voted for \"[message]\".</span>")
|
||||
to_chat(source, span_notice("You have voted for \"[message]\"."))
|
||||
return MOB_DEADSAY_SIGNAL_INTERCEPT
|
||||
|
||||
/datum/component/deadchat_control/proc/democracy_loop()
|
||||
@@ -147,9 +147,9 @@
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>Deadchat can no longer control [parent].</span>")
|
||||
to_chat(user, span_notice("Deadchat can no longer control [parent]."))
|
||||
log_admin("[key_name(user)] has removed deadchat control from [parent]")
|
||||
message_admins("<span class='notice'>[key_name(user)] has removed deadchat control from [parent]</span>")
|
||||
message_admins(span_notice("[key_name(user)] has removed deadchat control from [parent]"))
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -160,12 +160,12 @@
|
||||
if(!isobserver(user))
|
||||
return
|
||||
|
||||
examine_list += "<span class='notice'>[A.p_theyre(TRUE)] currently under deadchat control using the [deadchat_mode] ruleset!</span>"
|
||||
examine_list += span_notice("[A.p_theyre(TRUE)] currently under deadchat control using the [deadchat_mode] ruleset!")
|
||||
|
||||
if(deadchat_mode == DEMOCRACY_MODE)
|
||||
examine_list += "<span class='notice'>Type a command into chat to vote on an action. This happens once every [input_cooldown * 0.1] seconds.</span>"
|
||||
examine_list += span_notice("Type a command into chat to vote on an action. This happens once every [input_cooldown * 0.1] seconds.")
|
||||
else if(deadchat_mode == ANARCHY_MODE)
|
||||
examine_list += "<span class='notice'>Type a command into chat to perform. You may do this once every [input_cooldown * 0.1] seconds.</span>"
|
||||
examine_list += span_notice("Type a command into chat to perform. You may do this once every [input_cooldown * 0.1] seconds.")
|
||||
|
||||
var/extended_examine = "<span class='notice'>Command list:"
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
if(starting_turf)
|
||||
var/area/destination_area = starting_turf.loc
|
||||
if(destination_area.area_flags & NOTELEPORT)
|
||||
to_chat(parent, "<span class='warning'>For some reason, your head aches and fills with mental fog when you try to think of where you were... It feels like you're now going against some dull, unstoppable universal force.</span>")
|
||||
to_chat(parent, span_warning("For some reason, your head aches and fills with mental fog when you try to think of where you were... It feels like you're now going against some dull, unstoppable universal force."))
|
||||
else
|
||||
var/atom/movable/master = parent
|
||||
master.forceMove(starting_turf)
|
||||
|
||||
@@ -60,12 +60,12 @@
|
||||
if(isliving(at_least_atom))
|
||||
var/mob/living/potentially_dead_horse = at_least_atom
|
||||
if(potentially_dead_horse.stat == DEAD)
|
||||
to_chat(attacker, "<span class='warning'>[parent] is dead!</span>")
|
||||
to_chat(attacker, span_warning("[parent] is dead!"))
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
if(eggs_left > max_eggs_held)
|
||||
to_chat(attacker, "<span class='warning'>[parent] doesn't seem hungry!</span>")
|
||||
to_chat(attacker, span_warning("[parent] doesn't seem hungry!"))
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
attacker.visible_message("<span class='notice'>[attacker] hand-feeds [food] to [parent].</span>", "<span class='notice'>You hand-feed [food] to [parent].</span>")
|
||||
attacker.visible_message(span_notice("[attacker] hand-feeds [food] to [parent]."), span_notice("You hand-feed [food] to [parent]."))
|
||||
at_least_atom.visible_message(pick(feed_messages))
|
||||
qdel(food)
|
||||
eggs_left += min(eggs_left + eggs_added_from_eating, max_eggs_held)
|
||||
@@ -81,7 +81,7 @@
|
||||
if(!eggs_left || !DT_PROB(1.5, delta_time))
|
||||
return
|
||||
|
||||
at_least_atom.visible_message("<span class='alertalien'>[at_least_atom] [pick(lay_messages)]</span>")
|
||||
at_least_atom.visible_message(span_alertalien("[at_least_atom] [pick(lay_messages)]"))
|
||||
eggs_left--
|
||||
var/obj/item/egg = new egg_type(get_turf(at_least_atom))
|
||||
egg.pixel_x = rand(-6, 6)
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
guinea_pig.electrocute_act(shock_damage, parent_as_movable)
|
||||
break
|
||||
|
||||
parent_as_movable.visible_message("<span class='danger'>The electric chair went off!</span>", "<span class='hear'>You hear a deep sharp shock!</span>")
|
||||
parent_as_movable.visible_message(span_danger("The electric chair went off!"), span_hear("You hear a deep sharp shock!"))
|
||||
|
||||
///a shock that is toggled manually
|
||||
/datum/component/electrified_buckle/proc/shock_on_demand()
|
||||
@@ -193,11 +193,11 @@
|
||||
if(shock_on_loop)
|
||||
shock_on_loop = FALSE
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
parent_as_movable.visible_message("<span class='notice'>The electric chair emits a snap as its circuit opens, making it safe for now.</span>")
|
||||
parent_as_movable.visible_message(span_notice("The electric chair emits a snap as its circuit opens, making it safe for now."))
|
||||
else
|
||||
shock_on_loop = TRUE
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
parent_as_movable.visible_message("<span class='notice'>You hear the sound of an electric circuit closing coming from the electric chair!</span>")
|
||||
parent_as_movable.visible_message(span_notice("You hear the sound of an electric circuit closing coming from the electric chair!"))
|
||||
|
||||
#undef ELECTRIC_BUCKLE_SHOCK_STRENGTH_DIVISOR
|
||||
#undef ELECTRIC_BUCKLE_MINUMUM_POWERNET_STRENGTH
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
limb.embedded_objects |= weapon // on the inside... on the inside...
|
||||
weapon.forceMove(victim)
|
||||
RegisterSignal(weapon, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING), .proc/weaponDeleted)
|
||||
victim.visible_message("<span class='danger'>[weapon] [harmful ? "embeds" : "sticks"] itself [harmful ? "in" : "to"] [victim]'s [limb.name]!</span>", "<span class='userdanger'>[weapon] [harmful ? "embeds" : "sticks"] itself [harmful ? "in" : "to"] your [limb.name]!</span>")
|
||||
victim.visible_message(span_danger("[weapon] [harmful ? "embeds" : "sticks"] itself [harmful ? "in" : "to"] [victim]'s [limb.name]!"), span_userdanger("[weapon] [harmful ? "embeds" : "sticks"] itself [harmful ? "in" : "to"] your [limb.name]!"))
|
||||
|
||||
var/damage = weapon.throwforce
|
||||
if(harmful)
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
if(harmful && prob(pain_chance_current))
|
||||
limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, wound_bonus = CANT_WOUND)
|
||||
to_chat(victim, "<span class='userdanger'>[weapon] embedded in your [limb.name] hurts!</span>")
|
||||
to_chat(victim, span_userdanger("[weapon] embedded in your [limb.name] hurts!"))
|
||||
|
||||
var/fall_chance_current = DT_PROB_RATE(fall_chance / 100, delta_time) * 100
|
||||
if(victim.body_position == LYING_DOWN)
|
||||
@@ -168,7 +168,7 @@
|
||||
if(harmful && prob(chance))
|
||||
var/damage = weapon.w_class * jostle_pain_mult
|
||||
limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, wound_bonus = CANT_WOUND)
|
||||
to_chat(victim, "<span class='userdanger'>[weapon] embedded in your [limb.name] jostles and stings!</span>")
|
||||
to_chat(victim, span_userdanger("[weapon] embedded in your [limb.name] jostles and stings!"))
|
||||
|
||||
|
||||
/// Called when then item randomly falls out of a carbon. This handles the damage and descriptors, then calls safe_remove()
|
||||
@@ -179,7 +179,7 @@
|
||||
var/damage = weapon.w_class * remove_pain_mult
|
||||
limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, wound_bonus = CANT_WOUND)
|
||||
|
||||
victim.visible_message("<span class='danger'>[weapon] falls [harmful ? "out" : "off"] of [victim.name]'s [limb.name]!</span>", "<span class='userdanger'>[weapon] falls [harmful ? "out" : "off"] of your [limb.name]!</span>")
|
||||
victim.visible_message(span_danger("[weapon] falls [harmful ? "out" : "off"] of [victim.name]'s [limb.name]!"), span_userdanger("[weapon] falls [harmful ? "out" : "off"] of your [limb.name]!"))
|
||||
safeRemove()
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
|
||||
/// everything async that ripOut used to do
|
||||
/datum/component/embedded/proc/complete_rip_out(mob/living/carbon/victim, obj/item/I, obj/item/bodypart/limb, time_taken)
|
||||
victim.visible_message("<span class='warning'>[victim] attempts to remove [weapon] from [victim.p_their()] [limb.name].</span>","<span class='notice'>You attempt to remove [weapon] from your [limb.name]... (It will take [DisplayTimeText(time_taken)].)</span>")
|
||||
victim.visible_message(span_warning("[victim] attempts to remove [weapon] from [victim.p_their()] [limb.name]."),span_notice("You attempt to remove [weapon] from your [limb.name]... (It will take [DisplayTimeText(time_taken)].)"))
|
||||
if(!do_after(victim, time_taken, target = victim))
|
||||
return
|
||||
if(!weapon || !limb || weapon.loc != victim || !(weapon in limb.embedded_objects))
|
||||
@@ -206,7 +206,7 @@
|
||||
limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, sharpness=SHARP_EDGED) //It hurts to rip it out, get surgery you dingus. unlike the others, this CAN wound + increase slash bloodflow
|
||||
victim.emote("scream")
|
||||
|
||||
victim.visible_message("<span class='notice'>[victim] successfully rips [weapon] [harmful ? "out" : "off"] of [victim.p_their()] [limb.name]!</span>", "<span class='notice'>You successfully remove [weapon] from your [limb.name].</span>")
|
||||
victim.visible_message(span_notice("[victim] successfully rips [weapon] [harmful ? "out" : "off"] of [victim.p_their()] [limb.name]!"), span_notice("You successfully remove [weapon] from your [limb.name]."))
|
||||
safeRemove(victim)
|
||||
|
||||
/// This proc handles the final step and actual removal of an embedded/stuck item from a carbon, whether or not it was actually removed safely.
|
||||
@@ -235,7 +235,7 @@
|
||||
limb.embedded_objects -= weapon
|
||||
|
||||
if(victim)
|
||||
to_chat(victim, "<span class='userdanger'>\The [weapon] that was embedded in your [limb.name] disappears!</span>")
|
||||
to_chat(victim, span_userdanger("\The [weapon] that was embedded in your [limb.name] disappears!"))
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -264,22 +264,22 @@
|
||||
var/self_pluck = (user == victim)
|
||||
|
||||
if(self_pluck)
|
||||
user.visible_message("<span class='danger'>[user] begins plucking [weapon] from [user.p_their()] [limb.name]</span>", "<span class='notice'>You start plucking [weapon] from your [limb.name]...</span>",\
|
||||
user.visible_message(span_danger("[user] begins plucking [weapon] from [user.p_their()] [limb.name]"), span_notice("You start plucking [weapon] from your [limb.name]..."),\
|
||||
vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=victim)
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] begins plucking [weapon] from [victim]'s [limb.name]</span>","<span class='notice'>You start plucking [weapon] from [victim]'s [limb.name]...</span>", \
|
||||
user.visible_message(span_danger("[user] begins plucking [weapon] from [victim]'s [limb.name]"),span_notice("You start plucking [weapon] from [victim]'s [limb.name]..."), \
|
||||
vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=victim)
|
||||
to_chat(victim, "<span class='userdanger'>[user] begins plucking [weapon] from your [limb.name]...</span>")
|
||||
to_chat(victim, span_userdanger("[user] begins plucking [weapon] from your [limb.name]..."))
|
||||
|
||||
var/pluck_time = 2.5 SECONDS * weapon.w_class * (self_pluck ? 2 : 1)
|
||||
if(!do_after(user, pluck_time, victim))
|
||||
if(self_pluck)
|
||||
to_chat(user, "<span class='danger'>You fail to pluck [weapon] from your [limb.name].</span>")
|
||||
to_chat(user, span_danger("You fail to pluck [weapon] from your [limb.name]."))
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You fail to pluck [weapon] from [victim]'s [limb.name].</span>")
|
||||
to_chat(victim, "<span class='danger'>[user] fails to pluck [weapon] from your [limb.name].</span>")
|
||||
to_chat(user, span_danger("You fail to pluck [weapon] from [victim]'s [limb.name]."))
|
||||
to_chat(victim, span_danger("[user] fails to pluck [weapon] from your [limb.name]."))
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You successfully pluck [weapon] from [victim]'s [limb.name].</span>")
|
||||
to_chat(victim, "<span class='notice'>[user] plucks [weapon] from your [limb.name].</span>")
|
||||
to_chat(user, span_notice("You successfully pluck [weapon] from [victim]'s [limb.name]."))
|
||||
to_chat(victim, span_notice("[user] plucks [weapon] from your [limb.name]."))
|
||||
safeRemove(user)
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
|
||||
if(canFail && prob((quality - 9)*10))
|
||||
var/turf/place = get_turf(parent)
|
||||
place.visible_message("<span class='danger'>[parent] <span class='blue'>violently glows blue</span> for a while, then evaporates.</span>")
|
||||
place.visible_message(span_danger("[parent] [span_blue("violently glows blue")] for a while, then evaporates."))
|
||||
master.burn()
|
||||
return
|
||||
else if(announce)
|
||||
@@ -151,6 +151,6 @@
|
||||
effect_description = "<span class='heavy_brass'>shimmering golden glow</span>"
|
||||
else
|
||||
span = "<span class='danger'>"
|
||||
effect_description = "<span class='bold'>mottled black glow</span>"
|
||||
effect_description = span_bold("mottled black glow")
|
||||
|
||||
location.visible_message("[span][originalName] is covered by a [effect_description] and then transforms into [parent]!</span>")
|
||||
|
||||
@@ -272,37 +272,37 @@ Behavior that's still missing from this component that original food items had t
|
||||
return
|
||||
var/eatverb = pick(eatverbs)
|
||||
if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS))
|
||||
to_chat(eater, "<span class='warning'>You don't feel like eating any more junk food at the moment!</span>")
|
||||
to_chat(eater, span_warning("You don't feel like eating any more junk food at the moment!"))
|
||||
return
|
||||
else if(fullness <= 50)
|
||||
eater.visible_message("<span class='notice'>[eater] hungrily [eatverb]s \the [parent], gobbling it down!</span>", "<span class='notice'>You hungrily [eatverb] \the [parent], gobbling it down!</span>")
|
||||
eater.visible_message(span_notice("[eater] hungrily [eatverb]s \the [parent], gobbling it down!"), span_notice("You hungrily [eatverb] \the [parent], gobbling it down!"))
|
||||
else if(fullness > 50 && fullness < 150)
|
||||
eater.visible_message("<span class='notice'>[eater] hungrily [eatverb]s \the [parent].</span>", "<span class='notice'>You hungrily [eatverb] \the [parent].</span>")
|
||||
eater.visible_message(span_notice("[eater] hungrily [eatverb]s \the [parent]."), span_notice("You hungrily [eatverb] \the [parent]."))
|
||||
else if(fullness > 150 && fullness < 500)
|
||||
eater.visible_message("<span class='notice'>[eater] [eatverb]s \the [parent].</span>", "<span class='notice'>You [eatverb] \the [parent].</span>")
|
||||
eater.visible_message(span_notice("[eater] [eatverb]s \the [parent]."), span_notice("You [eatverb] \the [parent]."))
|
||||
else if(fullness > 500 && fullness < 600)
|
||||
eater.visible_message("<span class='notice'>[eater] unwillingly [eatverb]s a bit of \the [parent].</span>", "<span class='notice'>You unwillingly [eatverb] a bit of \the [parent].</span>")
|
||||
eater.visible_message(span_notice("[eater] unwillingly [eatverb]s a bit of \the [parent]."), span_notice("You unwillingly [eatverb] a bit of \the [parent]."))
|
||||
else if(fullness > (600 * (1 + eater.overeatduration / (4000 SECONDS)))) // The more you eat - the more you can eat
|
||||
eater.visible_message("<span class='warning'>[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!</span>", "<span class='warning'>You cannot force any more of \the [parent] to go down your throat!</span>")
|
||||
eater.visible_message(span_warning("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!"), span_warning("You cannot force any more of \the [parent] to go down your throat!"))
|
||||
return
|
||||
else //If you're feeding it to someone else.
|
||||
if(isbrain(eater))
|
||||
to_chat(feeder, "<span class='warning'>[eater] doesn't seem to have a mouth!</span>")
|
||||
to_chat(feeder, span_warning("[eater] doesn't seem to have a mouth!"))
|
||||
return
|
||||
if(fullness <= (600 * (1 + eater.overeatduration / (2000 SECONDS))))
|
||||
eater.visible_message("<span class='danger'>[feeder] attempts to feed [eater] [parent].</span>", \
|
||||
"<span class='userdanger'>[feeder] attempts to feed you [parent].</span>")
|
||||
eater.visible_message(span_danger("[feeder] attempts to feed [eater] [parent]."), \
|
||||
span_userdanger("[feeder] attempts to feed you [parent]."))
|
||||
else
|
||||
eater.visible_message("<span class='warning'>[feeder] cannot force any more of [parent] down [eater]'s throat!</span>", \
|
||||
"<span class='warning'>[feeder] cannot force any more of [parent] down your throat!</span>")
|
||||
eater.visible_message(span_warning("[feeder] cannot force any more of [parent] down [eater]'s throat!"), \
|
||||
span_warning("[feeder] cannot force any more of [parent] down your throat!"))
|
||||
return
|
||||
if(!do_mob(feeder, eater)) //Wait 3 seconds before you can feed
|
||||
return
|
||||
if(IsFoodGone(owner, feeder))
|
||||
return
|
||||
log_combat(feeder, eater, "fed", owner.reagents.log_list())
|
||||
eater.visible_message("<span class='danger'>[feeder] forces [eater] to eat [parent]!</span>", \
|
||||
"<span class='userdanger'>[feeder] forces you to eat [parent]!</span>")
|
||||
eater.visible_message(span_danger("[feeder] forces [eater] to eat [parent]!"), \
|
||||
span_userdanger("[feeder] forces you to eat [parent]!"))
|
||||
|
||||
TakeBite(eater, feeder)
|
||||
|
||||
@@ -349,7 +349,7 @@ Behavior that's still missing from this component that original food items had t
|
||||
covered = "mask"
|
||||
if(covered)
|
||||
var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]"
|
||||
to_chat(feeder, "<span class='warning'>You have to remove [who] [covered] first!</span>")
|
||||
to_chat(feeder, span_warning("You have to remove [who] [covered] first!"))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -368,7 +368,7 @@ Behavior that's still missing from this component that original food items had t
|
||||
|
||||
if(HAS_TRAIT(H, TRAIT_AGEUSIA))
|
||||
if(foodtypes & H.dna.species.toxic_food)
|
||||
to_chat(H, "<span class='warning'>You don't feel so good...</span>")
|
||||
to_chat(H, span_warning("You don't feel so good..."))
|
||||
H.adjust_disgust(25 + 30 * fraction)
|
||||
return // Don't care about the later checks if user has ageusia
|
||||
|
||||
@@ -387,15 +387,15 @@ Behavior that's still missing from this component that original food items had t
|
||||
|
||||
switch(food_taste_reaction)
|
||||
if(FOOD_TOXIC)
|
||||
to_chat(H,"<span class='warning'>What the hell was that thing?!</span>")
|
||||
to_chat(H,span_warning("What the hell was that thing?!"))
|
||||
H.adjust_disgust(25 + 30 * fraction)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food)
|
||||
if(FOOD_DISLIKED)
|
||||
to_chat(H,"<span class='notice'>That didn't taste very good...</span>")
|
||||
to_chat(H,span_notice("That didn't taste very good..."))
|
||||
H.adjust_disgust(11 + 15 * fraction)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
|
||||
if(FOOD_LIKED)
|
||||
to_chat(H,"<span class='notice'>I love this taste!</span>")
|
||||
to_chat(H,span_notice("I love this taste!"))
|
||||
H.adjust_disgust(-5 + -2.5 * fraction)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
|
||||
|
||||
@@ -405,7 +405,7 @@ Behavior that's still missing from this component that original food items had t
|
||||
|
||||
on_consume?.Invoke(eater, feeder)
|
||||
|
||||
to_chat(feeder, "<span class='warning'>There is nothing left of [parent], oh no!</span>")
|
||||
to_chat(feeder, span_warning("There is nothing left of [parent], oh no!"))
|
||||
if(isturf(parent))
|
||||
var/turf/T = parent
|
||||
T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
|
||||
|
||||
@@ -141,13 +141,13 @@
|
||||
if(dispenser.product_types[dispenser.selected_flavour] > 0)
|
||||
var/datum/ice_cream_flavour/flavour = GLOB.ice_cream_flavours[dispenser.selected_flavour]
|
||||
if(flavour.add_flavour(src, dispenser.beaker?.reagents.total_volume ? dispenser.beaker.reagents : null))
|
||||
dispenser.visible_message("[icon2html(dispenser, viewers(source))] <span class='info'>[user] scoops delicious [dispenser.selected_flavour] ice cream into [source].</span>")
|
||||
dispenser.visible_message("[icon2html(dispenser, viewers(source))] [span_info("[user] scoops delicious [dispenser.selected_flavour] ice cream into [source].")]")
|
||||
dispenser.product_types[dispenser.selected_flavour]--
|
||||
INVOKE_ASYNC(dispenser, /obj/machinery/icecream_vat.proc/updateDialog)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There is not enough ice cream left!</span>")
|
||||
to_chat(user, span_warning("There is not enough ice cream left!"))
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[source] can't hold anymore ice cream!</span>")
|
||||
to_chat(user, span_warning("[source] can't hold anymore ice cream!"))
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/////ICE CREAM FLAVOUR DATUM STUFF
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
return FALSE
|
||||
var/obj/item/bodypart/other_hand = shooter.has_hand_for_held_index(shooter.get_inactive_hand_index())
|
||||
if(weapon_weight == WEAPON_HEAVY && (shooter.get_inactive_held_item() || !other_hand))
|
||||
to_chat(shooter, "<span class='warning'>You need two hands to fire [src]!</span>")
|
||||
to_chat(shooter, span_warning("You need two hands to fire [src]!"))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
/datum/component/gps/item/proc/on_examine(datum/source, mob/user, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
examine_list += "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>"
|
||||
examine_list += span_notice("Alt-click to switch it [tracking ? "off":"on"].")
|
||||
|
||||
///Called on COMSIG_ATOM_EMP_ACT
|
||||
/datum/component/gps/item/proc/on_emp_act(datum/source, severity)
|
||||
@@ -83,21 +83,21 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
if(!user.canUseTopic(parent, BE_CLOSE))
|
||||
return //user not valid to use gps
|
||||
if(emped)
|
||||
to_chat(user, "<span class='warning'>It's busted!</span>")
|
||||
to_chat(user, span_warning("It's busted!"))
|
||||
return
|
||||
var/atom/A = parent
|
||||
if(tracking)
|
||||
A.cut_overlay("working")
|
||||
to_chat(user, "<span class='notice'>[parent] is no longer tracking, or visible to other GPS devices.</span>")
|
||||
to_chat(user, span_notice("[parent] is no longer tracking, or visible to other GPS devices."))
|
||||
tracking = FALSE
|
||||
else
|
||||
A.add_overlay("working")
|
||||
to_chat(user, "<span class='notice'>[parent] is now tracking, and visible to other GPS devices.</span>")
|
||||
to_chat(user, span_notice("[parent] is now tracking, and visible to other GPS devices."))
|
||||
tracking = TRUE
|
||||
|
||||
/datum/component/gps/item/ui_interact(mob/user, datum/tgui/ui)
|
||||
if(emped)
|
||||
to_chat(user, "<span class='hear'>[parent] fizzles weakly.</span>")
|
||||
to_chat(user, span_hear("[parent] fizzles weakly."))
|
||||
return
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
|
||||
@@ -87,16 +87,16 @@
|
||||
|
||||
if(!current_cook_time) //Not grilled yet
|
||||
if(positive_result)
|
||||
examine_list += "<span class='notice'>[parent] can be <b>grilled</b> into \a [initial(cook_result.name)].</span>"
|
||||
examine_list += span_notice("[parent] can be <b>grilled</b> into \a [initial(cook_result.name)].")
|
||||
return
|
||||
|
||||
if(positive_result)
|
||||
if(current_cook_time <= required_cook_time * 0.75)
|
||||
examine_list += "<span class='notice'>[parent] probably needs to be cooked a bit longer!</span>"
|
||||
examine_list += span_notice("[parent] probably needs to be cooked a bit longer!")
|
||||
else if(current_cook_time <= required_cook_time)
|
||||
examine_list += "<span class='notice'>[parent] seems to be almost finished cooking!</span>"
|
||||
examine_list += span_notice("[parent] seems to be almost finished cooking!")
|
||||
else
|
||||
examine_list += "<span class='danger'>[parent] should probably not be cooked for much longer!</span>"
|
||||
examine_list += span_danger("[parent] should probably not be cooked for much longer!")
|
||||
|
||||
///Ran when an object moves from the grill
|
||||
/datum/component/grillable/proc/OnMoved(atom/A, atom/OldLoc, Dir, Forced)
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
|
||||
RegisterSignal(weapon, list(COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED), .proc/cancel)
|
||||
|
||||
shooter.visible_message("<span class='danger'>[shooter] aims [weapon] point blank at [target]!</span>", \
|
||||
"<span class='danger'>You aim [weapon] point blank at [target]!</span>", ignored_mobs = target)
|
||||
to_chat(target, "<span class='userdanger'>[shooter] aims [weapon] point blank at you!</span>")
|
||||
shooter.visible_message(span_danger("[shooter] aims [weapon] point blank at [target]!"), \
|
||||
span_danger("You aim [weapon] point blank at [target]!"), ignored_mobs = target)
|
||||
to_chat(target, span_userdanger("[shooter] aims [weapon] point blank at you!"))
|
||||
|
||||
shooter.apply_status_effect(STATUS_EFFECT_HOLDUP, shooter)
|
||||
target.apply_status_effect(STATUS_EFFECT_HELDUP, shooter)
|
||||
@@ -79,9 +79,9 @@
|
||||
if(A != target)
|
||||
return
|
||||
var/mob/living/shooter = parent
|
||||
shooter.visible_message("<span class='danger'>[shooter] bumps into [target] and fumbles [shooter.p_their()] aim!</span>", \
|
||||
"<span class='danger'>You bump into [target] and fumble your aim!</span>", ignored_mobs = target)
|
||||
to_chat(target, "<span class='userdanger'>[shooter] bumps into you and fumbles [shooter.p_their()] aim!</span>")
|
||||
shooter.visible_message(span_danger("[shooter] bumps into [target] and fumbles [shooter.p_their()] aim!"), \
|
||||
span_danger("You bump into [target] and fumble your aim!"), ignored_mobs = target)
|
||||
to_chat(target, span_userdanger("[shooter] bumps into you and fumbles [shooter.p_their()] aim!"))
|
||||
qdel(src)
|
||||
|
||||
///If the shooter shoves or grabs the target, cancel the holdup to avoid cheesing and forcing the charged shot
|
||||
@@ -90,22 +90,22 @@
|
||||
|
||||
if(T != target || LAZYACCESS(modifiers, RIGHT_CLICK))
|
||||
return
|
||||
shooter.visible_message("<span class='danger'>[shooter] bumps into [target] and fumbles [shooter.p_their()] aim!</span>", \
|
||||
"<span class='danger'>You bump into [target] and fumble your aim!</span>", ignored_mobs = target)
|
||||
to_chat(target, "<span class='userdanger'>[shooter] bumps into you and fumbles [shooter.p_their()] aim!</span>")
|
||||
shooter.visible_message(span_danger("[shooter] bumps into [target] and fumbles [shooter.p_their()] aim!"), \
|
||||
span_danger("You bump into [target] and fumble your aim!"), ignored_mobs = target)
|
||||
to_chat(target, span_userdanger("[shooter] bumps into you and fumbles [shooter.p_their()] aim!"))
|
||||
qdel(src)
|
||||
|
||||
///Update the damage multiplier for whatever stage we're entering into
|
||||
/datum/component/gunpoint/proc/update_stage(new_stage)
|
||||
stage = new_stage
|
||||
if(stage == 2)
|
||||
to_chat(parent, "<span class='danger'>You steady [weapon] on [target].</span>")
|
||||
to_chat(target, "<span class='userdanger'>[parent] has steadied [weapon] on you!</span>")
|
||||
to_chat(parent, span_danger("You steady [weapon] on [target]."))
|
||||
to_chat(target, span_userdanger("[parent] has steadied [weapon] on you!"))
|
||||
damage_mult = GUNPOINT_MULT_STAGE_2
|
||||
addtimer(CALLBACK(src, .proc/update_stage, 3), GUNPOINT_DELAY_STAGE_3)
|
||||
else if(stage == 3)
|
||||
to_chat(parent, "<span class='danger'>You have fully steadied [weapon] on [target].</span>")
|
||||
to_chat(target, "<span class='userdanger'>[parent] has fully steadied [weapon] on you!</span>")
|
||||
to_chat(parent, span_danger("You have fully steadied [weapon] on [target]."))
|
||||
to_chat(target, span_userdanger("[parent] has fully steadied [weapon] on you!"))
|
||||
damage_mult = GUNPOINT_MULT_STAGE_3
|
||||
|
||||
///Cancel the holdup if the shooter moves out of sight or out of range of the target
|
||||
@@ -131,9 +131,9 @@
|
||||
point_of_no_return = TRUE
|
||||
|
||||
if(!weapon.can_shoot() || !weapon.can_trigger_gun(shooter) || (weapon.weapon_weight == WEAPON_HEAVY && shooter.get_inactive_held_item()))
|
||||
shooter.visible_message("<span class='danger'>[shooter] fumbles [weapon]!</span>", \
|
||||
"<span class='danger'>You fumble [weapon] and fail to fire at [target]!</span>", ignored_mobs = target)
|
||||
to_chat(target, "<span class='userdanger'>[shooter] fumbles [weapon] and fails to fire at you!</span>")
|
||||
shooter.visible_message(span_danger("[shooter] fumbles [weapon]!"), \
|
||||
span_danger("You fumble [weapon] and fail to fire at [target]!"), ignored_mobs = target)
|
||||
to_chat(target, span_userdanger("[shooter] fumbles [weapon] and fails to fire at you!"))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -160,9 +160,9 @@
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/mob/living/shooter = parent
|
||||
shooter.visible_message("<span class='danger'>[shooter] breaks [shooter.p_their()] aim on [target]!</span>", \
|
||||
"<span class='danger'>You are no longer aiming [weapon] at [target].</span>", ignored_mobs = target)
|
||||
to_chat(target, "<span class='userdanger'>[shooter] breaks [shooter.p_their()] aim on you!</span>")
|
||||
shooter.visible_message(span_danger("[shooter] breaks [shooter.p_their()] aim on [target]!"), \
|
||||
span_danger("You are no longer aiming [weapon] at [target]."), ignored_mobs = target)
|
||||
to_chat(target, span_userdanger("[shooter] breaks [shooter.p_their()] aim on you!"))
|
||||
SEND_SIGNAL(target, COMSIG_CLEAR_MOOD_EVENT, "gunpoint")
|
||||
qdel(src)
|
||||
|
||||
@@ -184,8 +184,8 @@
|
||||
flinch_chance = 80
|
||||
|
||||
if(prob(flinch_chance))
|
||||
shooter.visible_message("<span class='danger'>[shooter] flinches!</span>", \
|
||||
"<span class='danger'>You flinch!</span>")
|
||||
shooter.visible_message(span_danger("[shooter] flinches!"), \
|
||||
span_danger("You flinch!"))
|
||||
INVOKE_ASYNC(src, .proc/trigger_reaction)
|
||||
|
||||
#undef GUNPOINT_SHOOTER_STRAY_RANGE
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(user.mind == owner)
|
||||
examine_list += "<span class='notice'>It is your precious [family_name] family heirloom. Keep it safe!</span>"
|
||||
examine_list += span_notice("It is your precious [family_name] family heirloom. Keep it safe!")
|
||||
else if(isobserver(user))
|
||||
examine_list += "<span class='notice'>It is the [family_name] family heirloom, belonging to [owner].</span>"
|
||||
examine_list += span_notice("It is the [family_name] family heirloom, belonging to [owner].")
|
||||
else
|
||||
var/datum/antagonist/obsessed/creeper = user.mind.has_antag_datum(/datum/antagonist/obsessed)
|
||||
if(creeper && creeper.trauma.obsession == owner)
|
||||
examine_list += "<span class='nicegreen'>This must be [owner]'s family heirloom! It smells just like them...</span>"
|
||||
examine_list += span_nicegreen("This must be [owner]'s family heirloom! It smells just like them...")
|
||||
|
||||
@@ -31,5 +31,5 @@
|
||||
/datum/component/itempicky/proc/particularly(datum/source, obj/item/pickingup)
|
||||
SIGNAL_HANDLER
|
||||
if(!is_type_in_typecache(pickingup, whitelist))
|
||||
to_chat(source, "<span class='warning'>[replacetext(message, "%TARGET", pickingup)]</span>")
|
||||
to_chat(source, span_warning("[replacetext(message, "%TARGET", pickingup)]"))
|
||||
return COMPONENT_LIVING_CANT_PUT_IN_HAND
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
target.buckled.unbuckle_mob(target)
|
||||
target.Paralyze(knockdown_time)
|
||||
if(length(msg))
|
||||
user.visible_message("<span class='danger'>[msg]!</span>")
|
||||
user.visible_message(span_danger("[msg]!"))
|
||||
|
||||
/datum/component/jousting/proc/mob_move(datum/source, newloc, dir)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
return
|
||||
if(!wearer.dropItemToGround(item))
|
||||
return
|
||||
wearer.visible_message("<span class='warning'>[attacker] knocks off [wearer]'s [item.name]!</span>","<span class='userdanger'>[attacker] knocks off your [item.name]!</span>")
|
||||
wearer.visible_message(span_warning("[attacker] knocks off [wearer]'s [item.name]!"),span_userdanger("[attacker] knocks off your [item.name]!"))
|
||||
|
||||
///Tries to knockoff the item when user is knocked down
|
||||
/datum/component/knockoff/proc/Knockoff_knockdown(mob/living/carbon/human/wearer,amount)
|
||||
@@ -50,7 +50,7 @@
|
||||
return
|
||||
if(!wearer.dropItemToGround(item))
|
||||
return
|
||||
wearer.visible_message("<span class='warning'>[wearer]'s [item.name] gets knocked off!</span>","<span class='userdanger'>Your [item.name] was knocked off!</span>")
|
||||
wearer.visible_message(span_warning("[wearer]'s [item.name] gets knocked off!"),span_userdanger("Your [item.name] was knocked off!"))
|
||||
|
||||
|
||||
/datum/component/knockoff/proc/OnEquipped(datum/source, mob/living/carbon/human/H,slot)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
remove_label()
|
||||
playsound(parent, 'sound/items/poster_ripped.ogg', 20, TRUE)
|
||||
to_chat(user, "<span class='warning'>You remove the label from [parent].</span>")
|
||||
to_chat(user, span_warning("You remove the label from [parent]."))
|
||||
qdel(src) // Remove the component from the object.
|
||||
|
||||
/**
|
||||
@@ -77,7 +77,7 @@
|
||||
/datum/component/label/proc/Examine(datum/source, mob/user, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
examine_list += "<span class='notice'>It has a label with some words written on it. Use a hand labeler to remove it.</span>"
|
||||
examine_list += span_notice("It has a label with some words written on it. Use a hand labeler to remove it.")
|
||||
|
||||
/// Applies a label to the name of the parent in the format of: "parent_name (label)"
|
||||
/datum/component/label/proc/apply_label()
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
if(E)
|
||||
START_PROCESSING(SSdcs, src)
|
||||
last_blink = world.time
|
||||
to_chat(C, "<span class='notice'>You suddenly realize you're blinking manually.</span>")
|
||||
to_chat(C, span_notice("You suddenly realize you're blinking manually."))
|
||||
|
||||
/datum/component/manual_blinking/Destroy(force, silent)
|
||||
E = null
|
||||
STOP_PROCESSING(SSdcs, src)
|
||||
to_chat(parent, "<span class='notice'>You revert back to automatic blinking.</span>")
|
||||
to_chat(parent, span_notice("You revert back to automatic blinking."))
|
||||
return ..()
|
||||
|
||||
/datum/component/manual_blinking/RegisterWithParent()
|
||||
@@ -57,13 +57,13 @@
|
||||
|
||||
if(world.time > (last_blink + check_every + grace_period))
|
||||
if(!warn_dying)
|
||||
to_chat(C, "<span class='userdanger'>Your eyes begin to wither, you need to blink!</span>")
|
||||
to_chat(C, span_userdanger("Your eyes begin to wither, you need to blink!"))
|
||||
warn_dying = TRUE
|
||||
|
||||
E.applyOrganDamage(damage_rate)
|
||||
else if(world.time > (last_blink + check_every))
|
||||
if(!warn_grace)
|
||||
to_chat(C, "<span class='danger'>You feel a need to blink!</span>")
|
||||
to_chat(C, span_danger("You feel a need to blink!"))
|
||||
warn_grace = TRUE
|
||||
|
||||
/datum/component/manual_blinking/proc/check_added_organ(mob/who_cares, obj/item/organ/O)
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
if(L)
|
||||
START_PROCESSING(SSdcs, src)
|
||||
last_breath = world.time
|
||||
to_chat(C, "<span class='notice'>You suddenly realize you're breathing manually.</span>")
|
||||
to_chat(C, span_notice("You suddenly realize you're breathing manually."))
|
||||
|
||||
/datum/component/manual_breathing/Destroy(force, silent)
|
||||
L = null
|
||||
STOP_PROCESSING(SSdcs, src)
|
||||
to_chat(parent, "<span class='notice'>You revert back to automatic breathing.</span>")
|
||||
to_chat(parent, span_notice("You revert back to automatic breathing."))
|
||||
return ..()
|
||||
|
||||
/datum/component/manual_breathing/RegisterWithParent()
|
||||
@@ -58,14 +58,14 @@
|
||||
var/next_text = initial(next_breath_type.key)
|
||||
if(world.time > (last_breath + check_every + grace_period))
|
||||
if(!warn_dying)
|
||||
to_chat(C, "<span class='userdanger'>You begin to suffocate, you need to [next_text]!</span>")
|
||||
to_chat(C, span_userdanger("You begin to suffocate, you need to [next_text]!"))
|
||||
warn_dying = TRUE
|
||||
|
||||
L.applyOrganDamage(damage_rate)
|
||||
C.losebreath += 0.8
|
||||
else if(world.time > (last_breath + check_every))
|
||||
if(!warn_grace)
|
||||
to_chat(C, "<span class='danger'>You feel a need to [next_text]!</span>")
|
||||
to_chat(C, span_danger("You feel a need to [next_text]!"))
|
||||
warn_grace = TRUE
|
||||
|
||||
/datum/component/manual_breathing/proc/check_added_organ(mob/who_cares, obj/item/organ/O)
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
var/datum/material/M = I
|
||||
var/amt = materials[I]
|
||||
if(amt)
|
||||
examine_texts += "<span class='notice'>It has [amt] units of [lowertext(M.name)] stored.</span>"
|
||||
examine_texts += span_notice("It has [amt] units of [lowertext(M.name)] stored.")
|
||||
|
||||
/// Proc that allows players to fill the parent with mats
|
||||
/datum/component/material_container/proc/on_attackby(datum/source, obj/item/I, mob/living/user)
|
||||
@@ -118,7 +118,7 @@
|
||||
return
|
||||
if((I.flags_1 & HOLOGRAM_1) || (I.item_flags & NO_MAT_REDEMPTION) || (tc && !is_type_in_typecache(I, tc)))
|
||||
if(!(mat_container_flags & MATCONTAINER_SILENT))
|
||||
to_chat(user, "<span class='warning'>[parent] won't accept [I]!</span>")
|
||||
to_chat(user, span_warning("[parent] won't accept [I]!"))
|
||||
return
|
||||
. = COMPONENT_NO_AFTERATTACK
|
||||
var/datum/callback/pc = precondition
|
||||
@@ -126,10 +126,10 @@
|
||||
return
|
||||
var/material_amount = get_item_material_amount(I, mat_container_flags)
|
||||
if(!material_amount)
|
||||
to_chat(user, "<span class='warning'>[I] does not contain sufficient materials to be accepted by [parent].</span>")
|
||||
to_chat(user, span_warning("[I] does not contain sufficient materials to be accepted by [parent]."))
|
||||
return
|
||||
if(!has_space(material_amount))
|
||||
to_chat(user, "<span class='warning'>[parent] is full. Please remove materials from [parent] in order to insert more.</span>")
|
||||
to_chat(user, span_warning("[parent] is full. Please remove materials from [parent] in order to insert more."))
|
||||
return
|
||||
user_insert(I, user, mat_container_flags)
|
||||
|
||||
@@ -147,11 +147,11 @@
|
||||
if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || user.physical_can_use_topic(current_parent) < UI_INTERACTIVE || user.get_active_held_item() != active_held)
|
||||
return
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to you and cannot be placed into [parent].</span>")
|
||||
to_chat(user, span_warning("[I] is stuck to you and cannot be placed into [parent]."))
|
||||
return
|
||||
var/inserted = insert_item(I, stack_amt = requested_amount, breakdown_flags= mat_container_flags)
|
||||
if(inserted)
|
||||
to_chat(user, "<span class='notice'>You insert a material total of [inserted] into [parent].</span>")
|
||||
to_chat(user, span_notice("You insert a material total of [inserted] into [parent]."))
|
||||
qdel(I)
|
||||
if(after_insert)
|
||||
after_insert.Invoke(I, last_inserted_id, inserted)
|
||||
|
||||
@@ -47,50 +47,50 @@
|
||||
RegisterSignal(parent, COMSIG_ADD_MOOD_EVENT_RND, .proc/add_event) //Mood events that are only for RnD members
|
||||
|
||||
/datum/component/mood/proc/print_mood(mob/user)
|
||||
var/msg = "<span class='info'>*---------*\n<EM>My current mental status:</EM></span>\n"
|
||||
msg += "<span class='notice'>My current sanity: </span>" //Long term
|
||||
var/msg = "[span_info("*---------*\n<EM>My current mental status:</EM>")]\n"
|
||||
msg += span_notice("My current sanity: ") //Long term
|
||||
switch(sanity)
|
||||
if(SANITY_GREAT to INFINITY)
|
||||
msg += "<span class='nicegreen'>My mind feels like a temple!</span>\n"
|
||||
msg += "[span_nicegreen("My mind feels like a temple!")]\n"
|
||||
if(SANITY_NEUTRAL to SANITY_GREAT)
|
||||
msg += "<span class='nicegreen'>I have been feeling great lately!</span>\n"
|
||||
msg += "[span_nicegreen("I have been feeling great lately!")]\n"
|
||||
if(SANITY_DISTURBED to SANITY_NEUTRAL)
|
||||
msg += "<span class='nicegreen'>I have felt quite decent lately.</span>\n"
|
||||
msg += "[span_nicegreen("I have felt quite decent lately.")]\n"
|
||||
if(SANITY_UNSTABLE to SANITY_DISTURBED)
|
||||
msg += "<span class='warning'>I'm feeling a little bit unhinged...</span>\n"
|
||||
msg += "[span_warning("I'm feeling a little bit unhinged...")]\n"
|
||||
if(SANITY_CRAZY to SANITY_UNSTABLE)
|
||||
msg += "<span class='boldwarning'>I'm freaking out!!</span>\n"
|
||||
msg += "[span_boldwarning("I'm freaking out!!")]\n"
|
||||
if(SANITY_INSANE to SANITY_CRAZY)
|
||||
msg += "<span class='boldwarning'>AHAHAHAHAHAHAHAHAHAH!!</span>\n"
|
||||
msg += "[span_boldwarning("AHAHAHAHAHAHAHAHAHAH!!")]\n"
|
||||
|
||||
msg += "<span class='notice'>My current mood: </span>" //Short term
|
||||
msg += span_notice("My current mood: ") //Short term
|
||||
switch(mood_level)
|
||||
if(1)
|
||||
msg += "<span class='boldwarning'>I wish I was dead!</span>\n"
|
||||
msg += "[span_boldwarning("I wish I was dead!")]\n"
|
||||
if(2)
|
||||
msg += "<span class='boldwarning'>I feel terrible...</span>\n"
|
||||
msg += "[span_boldwarning("I feel terrible...")]\n"
|
||||
if(3)
|
||||
msg += "<span class='boldwarning'>I feel very upset.</span>\n"
|
||||
msg += "[span_boldwarning("I feel very upset.")]\n"
|
||||
if(4)
|
||||
msg += "<span class='boldwarning'>I'm a bit sad.</span>\n"
|
||||
msg += "[span_boldwarning("I'm a bit sad.")]\n"
|
||||
if(5)
|
||||
msg += "<span class='nicegreen'>I'm alright.</span>\n"
|
||||
msg += "[span_nicegreen("I'm alright.")]\n"
|
||||
if(6)
|
||||
msg += "<span class='nicegreen'>I feel pretty okay.</span>\n"
|
||||
msg += "[span_nicegreen("I feel pretty okay.")]\n"
|
||||
if(7)
|
||||
msg += "<span class='nicegreen'>I feel pretty good.</span>\n"
|
||||
msg += "[span_nicegreen("I feel pretty good.")]\n"
|
||||
if(8)
|
||||
msg += "<span class='nicegreen'>I feel amazing!</span>\n"
|
||||
msg += "[span_nicegreen("I feel amazing!")]\n"
|
||||
if(9)
|
||||
msg += "<span class='nicegreen'>I love life!</span>\n"
|
||||
msg += "[span_nicegreen("I love life!")]\n"
|
||||
|
||||
msg += "<span class='notice'>Moodlets:</span>\n"//All moodlets
|
||||
msg += "[span_notice("Moodlets:")]\n"//All moodlets
|
||||
if(mood_events.len)
|
||||
for(var/i in mood_events)
|
||||
var/datum/mood_event/event = mood_events[i]
|
||||
msg += event.description
|
||||
else
|
||||
msg += "<span class='nicegreen'>I don't have much of a reaction to anything right now.</span>\n"
|
||||
msg += "[span_nicegreen("I don't have much of a reaction to anything right now.")]\n"
|
||||
to_chat(user, msg)
|
||||
|
||||
///Called after moodevent/s have been added/removed.
|
||||
|
||||
@@ -212,20 +212,20 @@
|
||||
if(0 to NANITE_EXCESS_MINOR) //Minor excess amount, the extra nanites are quietly expelled without visible effects
|
||||
return
|
||||
if((NANITE_EXCESS_MINOR + 0.1) to NANITE_EXCESS_VOMIT) //Enough nanites getting rejected at once to be visible to the naked eye
|
||||
host_mob.visible_message("<span class='warning'>A grainy grey slurry starts oozing out of [host_mob].</span>", "<span class='warning'>A grainy grey slurry starts oozing out of your skin.</span>", null, 4);
|
||||
host_mob.visible_message(span_warning("A grainy grey slurry starts oozing out of [host_mob]."), span_warning("A grainy grey slurry starts oozing out of your skin."), null, 4);
|
||||
if((NANITE_EXCESS_VOMIT + 0.1) to NANITE_EXCESS_BURST) //Nanites getting rejected in massive amounts, but still enough to make a semi-orderly exit through vomit
|
||||
if(iscarbon(host_mob))
|
||||
var/mob/living/carbon/C = host_mob
|
||||
host_mob.visible_message("<span class='warning'>[host_mob] vomits a grainy grey slurry!</span>", "<span class='warning'>You suddenly vomit a metallic-tasting grainy grey slurry!</span>", null);
|
||||
host_mob.visible_message(span_warning("[host_mob] vomits a grainy grey slurry!"), span_warning("You suddenly vomit a metallic-tasting grainy grey slurry!"), null);
|
||||
C.vomit(0, FALSE, TRUE, FLOOR(excess / 100, 1), FALSE, VOMIT_NANITE, FALSE, TRUE, 0)
|
||||
else
|
||||
host_mob.visible_message("<span class='warning'>A metallic grey slurry bursts out of [host_mob]'s skin!</span>", "<span class='userdanger'>A metallic grey slurry violently bursts out of your skin!</span>", null);
|
||||
host_mob.visible_message(span_warning("A metallic grey slurry bursts out of [host_mob]'s skin!"), span_userdanger("A metallic grey slurry violently bursts out of your skin!"), null);
|
||||
if(isturf(host_mob.drop_location()))
|
||||
var/turf/T = host_mob.drop_location()
|
||||
T.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
|
||||
if((NANITE_EXCESS_BURST + 0.1) to INFINITY) //Way too many nanites, they just leave through the closest exit before they harm/poison the host
|
||||
host_mob.visible_message("<span class='warning'>A torrent of metallic grey slurry violently bursts out of [host_mob]'s face and floods out of [host_mob.p_their()] skin!</span>",
|
||||
"<span class='userdanger'>A torrent of metallic grey slurry violently bursts out of your eyes, ears, and mouth, and floods out of your skin!</span>");
|
||||
host_mob.visible_message(span_warning("A torrent of metallic grey slurry violently bursts out of [host_mob]'s face and floods out of [host_mob.p_their()] skin!"),
|
||||
span_userdanger("A torrent of metallic grey slurry violently bursts out of your eyes, ears, and mouth, and floods out of your skin!"));
|
||||
|
||||
host_mob.blind_eyes(15) //nanites coming out of your eyes
|
||||
host_mob.Paralyze(120)
|
||||
@@ -397,24 +397,24 @@
|
||||
|
||||
if(!full_scan)
|
||||
if(!stealth)
|
||||
to_chat(user, "<span class='notice'><b>Nanites Detected</b></span>")
|
||||
to_chat(user, "<span class='notice'>Saturation: [nanite_volume]/[max_nanites]</span>")
|
||||
to_chat(user, span_notice("<b>Nanites Detected</b>"))
|
||||
to_chat(user, span_notice("Saturation: [nanite_volume]/[max_nanites]"))
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='info'>NANITES DETECTED</span>")
|
||||
to_chat(user, "<span class='info'>================</span>")
|
||||
to_chat(user, "<span class='info'>Saturation: [nanite_volume]/[max_nanites]</span>")
|
||||
to_chat(user, "<span class='info'>Safety Threshold: [safety_threshold]</span>")
|
||||
to_chat(user, "<span class='info'>Cloud ID: [cloud_id ? cloud_id : "None"]</span>")
|
||||
to_chat(user, "<span class='info'>Cloud Sync: [cloud_active ? "Active" : "Disabled"]</span>")
|
||||
to_chat(user, "<span class='info'>================</span>")
|
||||
to_chat(user, "<span class='info'>Program List:</span>")
|
||||
to_chat(user, span_info("NANITES DETECTED"))
|
||||
to_chat(user, span_info("================"))
|
||||
to_chat(user, span_info("Saturation: [nanite_volume]/[max_nanites]"))
|
||||
to_chat(user, span_info("Safety Threshold: [safety_threshold]"))
|
||||
to_chat(user, span_info("Cloud ID: [cloud_id ? cloud_id : "None"]"))
|
||||
to_chat(user, span_info("Cloud Sync: [cloud_active ? "Active" : "Disabled"]"))
|
||||
to_chat(user, span_info("================"))
|
||||
to_chat(user, span_info("Program List:"))
|
||||
if(!diagnostics)
|
||||
to_chat(user, "<span class='alert'>Nanite debugging disabled.</span>")
|
||||
to_chat(user, span_alert("Nanite debugging disabled."))
|
||||
else
|
||||
for(var/X in programs)
|
||||
var/datum/nanite_program/NP = X
|
||||
to_chat(user, "<span class='info'><b>[NP.name]</b> | [NP.activated ? "Active" : "Inactive"]</span>")
|
||||
to_chat(user, span_info("<b>[NP.name]</b> | [NP.activated ? "Active" : "Inactive"]"))
|
||||
return TRUE
|
||||
|
||||
/datum/component/nanites/proc/nanite_ui_data(datum/source, list/data, scan_level)
|
||||
|
||||
@@ -24,15 +24,15 @@
|
||||
var/warning = "You get a bad feeling..."
|
||||
if(permanent)
|
||||
warning += " A very bad feeling... As if you are surrounded by a twisted aura of pure malevolence..."
|
||||
to_chat(parent, "<span class='warning'>[warning]</span>")
|
||||
to_chat(parent, span_warning("[warning]"))
|
||||
|
||||
|
||||
/datum/component/omen/Destroy(force, silent)
|
||||
if(!silent)
|
||||
var/mob/living/person = parent
|
||||
to_chat(person, "<span class='nicegreen'>You feel a horrible omen lifted off your shoulders!</span>")
|
||||
to_chat(person, span_nicegreen("You feel a horrible omen lifted off your shoulders!"))
|
||||
if(vessel)
|
||||
vessel.visible_message("<span class='warning'>[vessel] burns up in a sinister flash, taking an evil energy with it...</span>")
|
||||
vessel.visible_message(span_warning("[vessel] burns up in a sinister flash, taking an evil energy with it..."))
|
||||
vessel = null
|
||||
return ..()
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
var/our_guy_pos = get_turf(living_guy)
|
||||
for(var/turf_content in our_guy_pos)
|
||||
if(istype(turf_content, /obj/machinery/door/airlock))
|
||||
to_chat(living_guy, "<span class='warning'>A malevolent force launches your body to the floor...</span>")
|
||||
to_chat(living_guy, span_warning("A malevolent force launches your body to the floor..."))
|
||||
var/obj/machinery/door/airlock/darth_airlock = turf_content
|
||||
living_guy.apply_status_effect(STATUS_EFFECT_PARALYZED, 10)
|
||||
INVOKE_ASYNC(darth_airlock, /obj/machinery/door/airlock.proc/close, TRUE)
|
||||
@@ -75,7 +75,7 @@
|
||||
var/turf/the_turf = t
|
||||
|
||||
if(the_turf.zPassOut(living_guy, DOWN) && living_guy.can_zFall(the_turf))
|
||||
to_chat(living_guy, "<span class='warning'>A malevolent force guides you towards the edge...</span>")
|
||||
to_chat(living_guy, span_warning("A malevolent force guides you towards the edge..."))
|
||||
living_guy.throw_at(the_turf, 1, 10, force = MOVE_FORCE_EXTREMELY_STRONG)
|
||||
if(!permanent)
|
||||
qdel(src)
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
for(var/obj/machinery/vending/darth_vendor in the_turf)
|
||||
if(darth_vendor.tiltable)
|
||||
to_chat(living_guy, "<span class='warning'>A malevolent force tugs at the [darth_vendor]...</span>")
|
||||
to_chat(living_guy, span_warning("A malevolent force tugs at the [darth_vendor]..."))
|
||||
INVOKE_ASYNC(darth_vendor, /obj/machinery/vending.proc/tilt, living_guy)
|
||||
if(!permanent)
|
||||
qdel(src)
|
||||
@@ -101,7 +101,7 @@
|
||||
return
|
||||
|
||||
playsound(get_turf(our_guy), 'sound/effects/tableheadsmash.ogg', 90, TRUE)
|
||||
our_guy.visible_message("<span class='danger'>[our_guy] hits [our_guy.p_their()] head really badly falling down!</span>", "<span class='userdanger'>You hit your head really badly falling down!</span>")
|
||||
our_guy.visible_message(span_danger("[our_guy] hits [our_guy.p_their()] head really badly falling down!"), span_userdanger("You hit your head really badly falling down!"))
|
||||
the_head.receive_damage(75)
|
||||
our_guy.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100)
|
||||
if(!permanent)
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
orbiter.glide_size = movable_parent.glide_size
|
||||
|
||||
orbiter.forceMove(get_turf(parent))
|
||||
to_chat(orbiter, "<span class='notice'>Now orbiting [parent].</span>")
|
||||
to_chat(orbiter, span_notice("Now orbiting [parent]."))
|
||||
|
||||
/datum/component/orbiter/proc/end_orbit(atom/movable/orbiter, refreshing=FALSE)
|
||||
if(!orbiter_list[orbiter])
|
||||
|
||||
@@ -42,29 +42,29 @@
|
||||
if(!card)
|
||||
switch(transaction_style)
|
||||
if(PAYMENT_FRIENDLY)
|
||||
to_chat(user, "<span class='warning'>ID not detected, sorry [user]!</span>")
|
||||
to_chat(user, span_warning("ID not detected, sorry [user]!"))
|
||||
if(PAYMENT_ANGRY)
|
||||
to_chat(user, "<span class='warning'>WHERE IS YOUR GOD DAMN CARD! GOD DAMNIT!</span>")
|
||||
to_chat(user, span_warning("WHERE IS YOUR GOD DAMN CARD! GOD DAMNIT!"))
|
||||
if(PAYMENT_CLINICAL)
|
||||
to_chat(user, "<span class='warning'>ID card not present. Aborting.</span>")
|
||||
to_chat(user, span_warning("ID card not present. Aborting."))
|
||||
return COMPONENT_OBJ_CANCEL_CHARGE
|
||||
if(!card.registered_account)
|
||||
switch(transaction_style)
|
||||
if(PAYMENT_FRIENDLY)
|
||||
to_chat(user, "<span class='warning'>There's no account detected on your ID, how mysterious!</span>")
|
||||
to_chat(user, span_warning("There's no account detected on your ID, how mysterious!"))
|
||||
if(PAYMENT_ANGRY)
|
||||
to_chat(user, "<span class='warning'>ARE YOU JOKING. YOU DON'T HAVE A BANK ACCOUNT ON YOUR ID YOU IDIOT.</span>")
|
||||
to_chat(user, span_warning("ARE YOU JOKING. YOU DON'T HAVE A BANK ACCOUNT ON YOUR ID YOU IDIOT."))
|
||||
if(PAYMENT_CLINICAL)
|
||||
to_chat(user, "<span class='warning'>ID Card lacks a bank account. Aborting.</span>")
|
||||
to_chat(user, span_warning("ID Card lacks a bank account. Aborting."))
|
||||
return COMPONENT_OBJ_CANCEL_CHARGE
|
||||
if(!(card.registered_account.has_money(cost + extra_fees)))
|
||||
switch(transaction_style)
|
||||
if(PAYMENT_FRIENDLY)
|
||||
to_chat(user, "<span class='warning'>I'm so sorry... You don't seem to have enough money.</span>")
|
||||
to_chat(user, span_warning("I'm so sorry... You don't seem to have enough money."))
|
||||
if(PAYMENT_ANGRY)
|
||||
to_chat(user, "<span class='warning'>YOU MORON. YOU ABSOLUTE BAFOON. YOU INSUFFERABLE TOOL. YOU ARE POOR.</span>")
|
||||
to_chat(user, span_warning("YOU MORON. YOU ABSOLUTE BAFOON. YOU INSUFFERABLE TOOL. YOU ARE POOR."))
|
||||
if(PAYMENT_CLINICAL)
|
||||
to_chat(user, "<span class='warning'>ID Card lacks funds. Aborting.</span>")
|
||||
to_chat(user, span_warning("ID Card lacks funds. Aborting."))
|
||||
return COMPONENT_OBJ_CANCEL_CHARGE
|
||||
target_acc.transfer_money(card.registered_account, cost + extra_fees)
|
||||
card.registered_account.bank_card_talk("[cost + extra_fees] credits deducted from your account.")
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
var/self_harm_radius_mult = 3
|
||||
|
||||
if(punishable_triggerer && prob(60))
|
||||
to_chat(punishable_triggerer, "<span class='userdanger'>Your plan to whack someone with a grenade on a stick backfires on you, literally!</span>")
|
||||
to_chat(punishable_triggerer, span_userdanger("Your plan to whack someone with a grenade on a stick backfires on you, literally!"))
|
||||
self_harm_radius_mult = 1 // we'll still give the guy who got hit some extra shredding, but not 3*radius
|
||||
pellet_delta += radius
|
||||
for(var/i in 1 to radius)
|
||||
@@ -199,13 +199,13 @@
|
||||
for(var/M in martyrs)
|
||||
var/mob/living/martyr = M
|
||||
if(radius > 4)
|
||||
martyr.visible_message("<b><span class='danger'>[martyr] heroically covers \the [parent] with [martyr.p_their()] body, absorbing a load of the shrapnel!</span></b>", "<span class='userdanger'>You heroically cover \the [parent] with your body, absorbing a load of the shrapnel!</span>")
|
||||
martyr.visible_message("<b>[span_danger("[martyr] heroically covers \the [parent] with [martyr.p_their()] body, absorbing a load of the shrapnel!")]</b>", span_userdanger("You heroically cover \the [parent] with your body, absorbing a load of the shrapnel!"))
|
||||
magnitude_absorbed += round(radius * 0.5)
|
||||
else if(radius >= 2)
|
||||
martyr.visible_message("<b><span class='danger'>[martyr] heroically covers \the [parent] with [martyr.p_their()] body, absorbing some of the shrapnel!</span></b>", "<span class='userdanger'>You heroically cover \the [parent] with your body, absorbing some of the shrapnel!</span>")
|
||||
martyr.visible_message("<b>[span_danger("[martyr] heroically covers \the [parent] with [martyr.p_their()] body, absorbing some of the shrapnel!")]</b>", span_userdanger("You heroically cover \the [parent] with your body, absorbing some of the shrapnel!"))
|
||||
magnitude_absorbed += 2
|
||||
else
|
||||
martyr.visible_message("<b><span class='danger'>[martyr] heroically covers \the [parent] with [martyr.p_their()] body, snuffing out the shrapnel!</span></b>", "<span class='userdanger'>You heroically cover \the [parent] with your body, snuffing out the shrapnel!</span>")
|
||||
martyr.visible_message("<b>[span_danger("[martyr] heroically covers \the [parent] with [martyr.p_their()] body, snuffing out the shrapnel!")]</b>", span_userdanger("You heroically cover \the [parent] with your body, snuffing out the shrapnel!"))
|
||||
magnitude_absorbed = radius
|
||||
|
||||
var/pellets_absorbed = (radius ** 2) - ((radius - magnitude_absorbed - 1) ** 2)
|
||||
@@ -308,11 +308,11 @@
|
||||
hit_part.painless_wound_roll(wound_type, damage_dealt, w_bonus, bw_bonus, initial(P.sharpness))
|
||||
|
||||
if(num_hits > 1)
|
||||
target.visible_message("<span class='danger'>[target] is hit by [num_hits] [proj_name]s[hit_part ? " in the [hit_part.name]" : ""][did_damage ? ", which don't leave a mark" : ""]!</span>", null, null, COMBAT_MESSAGE_RANGE, target)
|
||||
to_chat(target, "<span class='userdanger'>You're hit by [num_hits] [proj_name]s[hit_part ? " in the [hit_part.name]" : ""]!</span>")
|
||||
target.visible_message(span_danger("[target] is hit by [num_hits] [proj_name]s[hit_part ? " in the [hit_part.name]" : ""][did_damage ? ", which don't leave a mark" : ""]!"), null, null, COMBAT_MESSAGE_RANGE, target)
|
||||
to_chat(target, span_userdanger("You're hit by [num_hits] [proj_name]s[hit_part ? " in the [hit_part.name]" : ""]!"))
|
||||
else
|
||||
target.visible_message("<span class='danger'>[target] is hit by a [proj_name][hit_part ? " in the [hit_part.name]" : ""][did_damage ? ", which doesn't leave a mark" : ""]!</span>", null, null, COMBAT_MESSAGE_RANGE, target)
|
||||
to_chat(target, "<span class='userdanger'>You're hit by a [proj_name][hit_part ? " in the [hit_part.name]" : ""]!</span>")
|
||||
target.visible_message(span_danger("[target] is hit by a [proj_name][hit_part ? " in the [hit_part.name]" : ""][did_damage ? ", which doesn't leave a mark" : ""]!"), null, null, COMBAT_MESSAGE_RANGE, target)
|
||||
to_chat(target, span_userdanger("You're hit by a [proj_name][hit_part ? " in the [hit_part.name]" : ""]!"))
|
||||
|
||||
for(var/M in purple_hearts)
|
||||
var/mob/living/martyr = M
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
fragments += "[length(fragments) ? " and [master.p_they()] " : "[master] "]hurt[master.p_s()] to look at."
|
||||
|
||||
if(length(fragments))
|
||||
out += "<span class='warning'>[fragments.Join()]</span>"
|
||||
out += span_warning("[fragments.Join()]")
|
||||
|
||||
/datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
to_chat(user, "<span class='warning'>You are not the high priest, and therefore cannot select a religious sect.")
|
||||
return
|
||||
if(!user.canUseTopic(parent, BE_CLOSE, FALSE, NO_TK))
|
||||
to_chat(user,"<span class='warning'>You cannot select a sect at this time.</span>")
|
||||
to_chat(user,span_warning("You cannot select a sect at this time."))
|
||||
return
|
||||
if(GLOB.religious_sect)
|
||||
return
|
||||
@@ -148,7 +148,7 @@
|
||||
to_chat(user, "<span class='notice'>There is a rite currently being performed here already.")
|
||||
return
|
||||
if(!user.canUseTopic(parent, BE_CLOSE, FALSE, NO_TK))
|
||||
to_chat(user,"<span class='warning'>You are not close enough to perform the rite.</span>")
|
||||
to_chat(user,span_warning("You are not close enough to perform the rite."))
|
||||
return
|
||||
performing_rite = new path(parent)
|
||||
if(!performing_rite.perform_rite(user, parent))
|
||||
@@ -228,12 +228,12 @@
|
||||
|
||||
if(!can_i_see)
|
||||
return
|
||||
examine_list += "<span class='notice'>Use a bible to interact with this.</span>"
|
||||
examine_list += span_notice("Use a bible to interact with this.")
|
||||
if(!easy_access_sect)
|
||||
if(operation_flags & RELIGION_TOOL_SECTSELECT)
|
||||
examine_list += "<span class='notice'>This looks like it can be used to select a sect.</span>"
|
||||
examine_list += span_notice("This looks like it can be used to select a sect.")
|
||||
return
|
||||
if(operation_flags & RELIGION_TOOL_SACRIFICE)//this can be moved around if things change but usually no rites == no sacrifice
|
||||
examine_list += "<span class='notice'>Desired items can be used on this to increase favor.</span>"
|
||||
examine_list += span_notice("Desired items can be used on this to increase favor.")
|
||||
if(easy_access_sect.rites_list && operation_flags & RELIGION_TOOL_INVOKE)
|
||||
examine_list += "<span class='notice'>You can invoke rites from this.</span>"
|
||||
examine_list += span_notice("You can invoke rites from this.")
|
||||
|
||||
@@ -103,7 +103,7 @@ handles linking back and forth.
|
||||
var/obj/item/multitool/M = I
|
||||
if (!QDELETED(M.buffer) && istype(M.buffer, /obj/machinery/ore_silo))
|
||||
if (silo == M.buffer)
|
||||
to_chat(user, "<span class='warning'>[parent] is already connected to [silo]!</span>")
|
||||
to_chat(user, span_warning("[parent] is already connected to [silo]!"))
|
||||
return COMPONENT_BLOCK_TOOL_ATTACK
|
||||
if (silo)
|
||||
silo.connected -= src
|
||||
@@ -115,7 +115,7 @@ handles linking back and forth.
|
||||
silo.connected += src
|
||||
silo.updateUsrDialog()
|
||||
mat_container = silo.GetComponent(/datum/component/material_container)
|
||||
to_chat(user, "<span class='notice'>You connect [parent] to [silo] from the multitool's buffer.</span>")
|
||||
to_chat(user, span_notice("You connect [parent] to [silo] from the multitool's buffer."))
|
||||
return COMPONENT_BLOCK_TOOL_ATTACK
|
||||
|
||||
/datum/component/remote_materials/proc/on_hold()
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
if(!kick_us_off)
|
||||
return TRUE
|
||||
|
||||
rider.visible_message("<span class='warning'>[rider] falls off of [living_parent]!</span>", \
|
||||
"<span class='warning'>You fall off of [living_parent]!</span>")
|
||||
rider.visible_message(span_warning("[rider] falls off of [living_parent]!"), \
|
||||
span_warning("You fall off of [living_parent]!"))
|
||||
rider.Paralyze(1 SECONDS)
|
||||
rider.Knockdown(4 SECONDS)
|
||||
living_parent.unbuckle_mob(rider)
|
||||
@@ -84,7 +84,7 @@
|
||||
if(!keycheck(user))
|
||||
if(ispath(keytype, /obj/item))
|
||||
var/obj/item/key = keytype
|
||||
to_chat(user, "<span class='warning'>You need a [initial(key.name)] to ride [movable_parent]!</span>")
|
||||
to_chat(user, span_warning("You need a [initial(key.name)] to ride [movable_parent]!"))
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
var/mob/living/living_parent = parent
|
||||
var/turf/next = get_step(living_parent, direction)
|
||||
@@ -105,12 +105,12 @@
|
||||
rider.Move(targetm)
|
||||
rider.Knockdown(3 SECONDS)
|
||||
if(gentle)
|
||||
rider.visible_message("<span class='warning'>[rider] is thrown clear of [movable_parent]!</span>", \
|
||||
"<span class='warning'>You're thrown clear of [movable_parent]!</span>")
|
||||
rider.visible_message(span_warning("[rider] is thrown clear of [movable_parent]!"), \
|
||||
span_warning("You're thrown clear of [movable_parent]!"))
|
||||
rider.throw_at(target, 8, 3, movable_parent, gentle = TRUE)
|
||||
else
|
||||
rider.visible_message("<span class='warning'>[rider] is thrown violently from [movable_parent]!</span>", \
|
||||
"<span class='warning'>You're thrown violently from [movable_parent]!</span>")
|
||||
rider.visible_message(span_warning("[rider] is thrown violently from [movable_parent]!"), \
|
||||
span_warning("You're thrown violently from [movable_parent]!"))
|
||||
rider.throw_at(target, 14, 5, movable_parent, gentle = FALSE)
|
||||
|
||||
/// If we're a cyborg or animal and we spin, we yeet whoever's on us off us
|
||||
@@ -199,9 +199,9 @@
|
||||
human_parent.unbuckle_mob(rider)
|
||||
rider.Paralyze(1 SECONDS)
|
||||
rider.Knockdown(4 SECONDS)
|
||||
human_parent.visible_message("<span class='danger'>[rider] topples off of [human_parent] as they both fall to the ground!</span>", \
|
||||
"<span class='warning'>You fall to the ground, bringing [rider] with you!</span>", "<span class='hear'>You hear two consecutive thuds.</span>", COMBAT_MESSAGE_RANGE, ignored_mobs=rider)
|
||||
to_chat(rider, "<span class='danger'>[human_parent] falls to the ground, bringing you with [human_parent.p_them()]!</span>")
|
||||
human_parent.visible_message(span_danger("[rider] topples off of [human_parent] as they both fall to the ground!"), \
|
||||
span_warning("You fall to the ground, bringing [rider] with you!"), span_hear("You hear two consecutive thuds."), COMBAT_MESSAGE_RANGE, ignored_mobs=rider)
|
||||
to_chat(rider, span_danger("[human_parent] falls to the ground, bringing you with [human_parent.p_them()]!"))
|
||||
|
||||
/datum/component/riding/creature/human/handle_vehicle_layer(dir)
|
||||
var/atom/movable/AM = parent
|
||||
@@ -235,8 +235,8 @@
|
||||
AM.unbuckle_mob(dismounted_rider)
|
||||
dismounted_rider.Paralyze(1 SECONDS)
|
||||
dismounted_rider.Knockdown(4 SECONDS)
|
||||
dismounted_rider.visible_message("<span class='warning'>[AM] pushes [dismounted_rider] off of [AM.p_them()]!</span>", \
|
||||
"<span class='warning'>[AM] pushes you off of [AM.p_them()]!</span>")
|
||||
dismounted_rider.visible_message(span_warning("[AM] pushes [dismounted_rider] off of [AM.p_them()]!"), \
|
||||
span_warning("[AM] pushes you off of [AM.p_them()]!"))
|
||||
|
||||
|
||||
//Now onto cyborg riding//
|
||||
@@ -250,7 +250,7 @@
|
||||
var/mob/living/carbon/carbonuser = user
|
||||
if(!carbonuser.usable_hands)
|
||||
Unbuckle(user)
|
||||
to_chat(user, "<span class='warning'>You can't grab onto [robot_parent] with no hands!</span>")
|
||||
to_chat(user, span_warning("You can't grab onto [robot_parent] with no hands!"))
|
||||
|
||||
/datum/component/riding/creature/cyborg/handle_vehicle_layer(dir)
|
||||
var/atom/movable/robot_parent = parent
|
||||
|
||||
@@ -16,43 +16,43 @@
|
||||
|
||||
if(!keycheck(user))
|
||||
if(COOLDOWN_FINISHED(src, message_cooldown))
|
||||
to_chat(user, "<span class='warning'>[vehicle_parent] has no key inserted!</span>")
|
||||
to_chat(user, span_warning("[vehicle_parent] has no key inserted!"))
|
||||
COOLDOWN_START(src, message_cooldown, 5 SECONDS)
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
|
||||
if(HAS_TRAIT(user, TRAIT_INCAPACITATED))
|
||||
if(ride_check_flags & UNBUCKLE_DISABLED_RIDER)
|
||||
vehicle_parent.unbuckle_mob(user, TRUE)
|
||||
user.visible_message("<span class='danger'>[user] falls off \the [vehicle_parent].</span>",\
|
||||
"<span class='danger'>You slip off \the [vehicle_parent] as your body slumps!</span>")
|
||||
user.visible_message(span_danger("[user] falls off \the [vehicle_parent]."),\
|
||||
span_danger("You slip off \the [vehicle_parent] as your body slumps!"))
|
||||
user.Stun(3 SECONDS)
|
||||
|
||||
if(COOLDOWN_FINISHED(src, message_cooldown))
|
||||
to_chat(user, "<span class='warning'>You cannot operate \the [vehicle_parent] right now!</span>")
|
||||
to_chat(user, span_warning("You cannot operate \the [vehicle_parent] right now!"))
|
||||
COOLDOWN_START(src, message_cooldown, 5 SECONDS)
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
|
||||
if(ride_check_flags & RIDER_NEEDS_LEGS && HAS_TRAIT(user, TRAIT_FLOORED))
|
||||
if(ride_check_flags & UNBUCKLE_DISABLED_RIDER)
|
||||
vehicle_parent.unbuckle_mob(user, TRUE)
|
||||
user.visible_message("<span class='danger'>[user] falls off \the [vehicle_parent].</span>",\
|
||||
"<span class='danger'>You fall off \the [vehicle_parent] while trying to operate it while unable to stand!</span>")
|
||||
user.visible_message(span_danger("[user] falls off \the [vehicle_parent]."),\
|
||||
span_danger("You fall off \the [vehicle_parent] while trying to operate it while unable to stand!"))
|
||||
user.Stun(3 SECONDS)
|
||||
|
||||
if(COOLDOWN_FINISHED(src, message_cooldown))
|
||||
to_chat(user, "<span class='warning'>You can't seem to manage that while unable to stand up enough to move \the [vehicle_parent]...</span>")
|
||||
to_chat(user, span_warning("You can't seem to manage that while unable to stand up enough to move \the [vehicle_parent]..."))
|
||||
COOLDOWN_START(src, message_cooldown, 5 SECONDS)
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
|
||||
if(ride_check_flags & RIDER_NEEDS_ARMS && HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
|
||||
if(ride_check_flags & UNBUCKLE_DISABLED_RIDER)
|
||||
vehicle_parent.unbuckle_mob(user, TRUE)
|
||||
user.visible_message("<span class='danger'>[user] falls off \the [vehicle_parent].</span>",\
|
||||
"<span class='danger'>You fall off \the [vehicle_parent] while trying to operate it without being able to hold on!</span>")
|
||||
user.visible_message(span_danger("[user] falls off \the [vehicle_parent]."),\
|
||||
span_danger("You fall off \the [vehicle_parent] while trying to operate it without being able to hold on!"))
|
||||
user.Stun(3 SECONDS)
|
||||
|
||||
if(COOLDOWN_FINISHED(src, message_cooldown))
|
||||
to_chat(user, "<span class='warning'>You can't seem to hold onto \the [vehicle_parent] to move it...</span>")
|
||||
to_chat(user, span_warning("You can't seem to hold onto \the [vehicle_parent] to move it..."))
|
||||
COOLDOWN_START(src, message_cooldown, 5 SECONDS)
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
if(!istype(next) || !istype(current))
|
||||
return //not happening.
|
||||
if(!turf_check(next, current))
|
||||
to_chat(user, "<span class='warning'>\The [movable_parent] can not go onto [next]!</span>")
|
||||
to_chat(user, span_warning("\The [movable_parent] can not go onto [next]!"))
|
||||
return
|
||||
if(!Process_Spacemove(direction) || !isturf(movable_parent.loc))
|
||||
return
|
||||
@@ -185,7 +185,7 @@
|
||||
|
||||
if(keycheck(user) && the_secway.eddie_murphy)
|
||||
if(COOLDOWN_FINISHED(src, message_cooldown))
|
||||
the_secway.visible_message("<span class='warning'>[src] sputters and refuses to move!</span>")
|
||||
the_secway.visible_message(span_warning("[src] sputters and refuses to move!"))
|
||||
playsound(get_turf(the_secway), 'sound/effects/stall.ogg', 70)
|
||||
COOLDOWN_START(src, message_cooldown, 0.75 SECONDS)
|
||||
return COMPONENT_DRIVER_BLOCK_MOVE
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(rotation_flags & ROTATION_ALTCLICK)
|
||||
examine_list += "<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||
examine_list += span_notice("Alt-click to rotate it clockwise.")
|
||||
|
||||
/datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction)
|
||||
SIGNAL_HANDLER
|
||||
@@ -142,7 +142,7 @@
|
||||
return !AM.anchored
|
||||
|
||||
/datum/component/simple_rotation/proc/default_after_rotation(mob/user, rotation_type)
|
||||
to_chat(user,"<span class='notice'>You [rotation_type == ROTATION_FLIP ? "flip" : "rotate"] [parent].</span>")
|
||||
to_chat(user,span_notice("You [rotation_type == ROTATION_FLIP ? "flip" : "rotate"] [parent]."))
|
||||
|
||||
/atom/movable/proc/simple_rotate_clockwise()
|
||||
set name = "Rotate Clockwise"
|
||||
|
||||
@@ -69,13 +69,13 @@
|
||||
/datum/component/shell/proc/on_examine(datum/source, mob/user, list/examine_text)
|
||||
SIGNAL_HANDLER
|
||||
if(!attached_circuit)
|
||||
examine_text += "<span class='notice'>There is no integrated circuit attached.</span>"
|
||||
examine_text += span_notice("There is no integrated circuit attached.")
|
||||
return
|
||||
|
||||
examine_text += "<span class='notice'>There is an integrated circuit attached. Use a multitool to access the wiring. Use a screwdriver to remove it from [source].</span>"
|
||||
examine_text += "<span class='notice'>The cover panel to the integrated circuit is [locked? "locked" : "unlocked"].</span>"
|
||||
examine_text += span_notice("There is an integrated circuit attached. Use a multitool to access the wiring. Use a screwdriver to remove it from [source].")
|
||||
examine_text += span_notice("The cover panel to the integrated circuit is [locked? "locked" : "unlocked"].")
|
||||
var/obj/item/stock_parts/cell/cell = attached_circuit.cell
|
||||
examine_text += "<span class='notice'>The charge meter reads [cell ? round(cell.percent(), 1) : 0]%.</span>"
|
||||
examine_text += span_notice("The charge meter reads [cell ? round(cell.percent(), 1) : 0]%.")
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
do_sparks(2, TRUE, owner)
|
||||
owner.visible_message("<span class='danger'>[owner]'s shields deflect [attack_text] in a shower of sparks!<span>")
|
||||
if(current_charges <= 0)
|
||||
owner.visible_message("<span class='warning'>[owner]'s shield overloads!</span>")
|
||||
owner.visible_message(span_warning("[owner]'s shield overloads!"))
|
||||
|
||||
/datum/component/shielded/proc/check_recharge_rune(datum/source, obj/item/wizard_armour_charge/recharge_rune, mob/living/user)
|
||||
SIGNAL_HANDLER
|
||||
@@ -152,9 +152,9 @@
|
||||
return
|
||||
. = COMPONENT_NO_AFTERATTACK
|
||||
if(!istype(parent, /obj/item/clothing/suit/space/hardsuit/shielded/wizard))
|
||||
to_chat(user, "<span class='warning'>The rune can only be used on battlemage armour!</span>")
|
||||
to_chat(user, span_warning("The rune can only be used on battlemage armour!"))
|
||||
return
|
||||
|
||||
current_charges += recharge_rune.restored_charges
|
||||
to_chat(user, "<span class='notice'>You charge \the [parent]. It can now absorb [current_charges] hits.</span>")
|
||||
to_chat(user, span_notice("You charge \the [parent]. It can now absorb [current_charges] hits."))
|
||||
qdel(recharge_rune)
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
C.unequip_everything()
|
||||
C.visible_message("<span class='warning'>[C]'s belongings fall off of [C.p_them()] as they shrink down!</span>",
|
||||
"<span class='userdanger'>Your belongings fall away as everything grows bigger!</span>")
|
||||
C.visible_message(span_warning("[C]'s belongings fall off of [C.p_them()] as they shrink down!"),
|
||||
span_userdanger("Your belongings fall away as everything grows bigger!"))
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
H.physiology.damage_resistance -= 100//carbons take double damage while shrunk
|
||||
parent_atom.visible_message("<span class='warning'>[parent_atom] shrinks down to a tiny size!</span>",
|
||||
"<span class='userdanger'>Everything grows bigger!</span>")
|
||||
parent_atom.visible_message(span_warning("[parent_atom] shrinks down to a tiny size!"),
|
||||
span_userdanger("Everything grows bigger!"))
|
||||
QDEL_IN(src, shrink_time)
|
||||
|
||||
/datum/component/shrink/Destroy()
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if(length(strangers) && locate(/mob/living) in strangers)
|
||||
for(var/mob/living/person in strangers)
|
||||
if(person != owner && !is_type_in_typecache(person, whitelist) && (person.stat != DEAD || dead_shy))
|
||||
to_chat(owner, "<span class='warning'>[replacetext(message, "%TARGET", person)]</span>")
|
||||
to_chat(owner, span_warning("[replacetext(message, "%TARGET", person)]"))
|
||||
result = TRUE
|
||||
break
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
var/area/room = get_area(owner)
|
||||
if(is_type_in_typecache(room, blacklist))
|
||||
to_chat(owner, "<span class='warning'>[replacetext(message, "%ROOM", room)]</span>")
|
||||
to_chat(owner, span_warning("[replacetext(message, "%ROOM", room)]"))
|
||||
return TRUE
|
||||
|
||||
/datum/component/shy_in_room/proc/on_clickon(datum/source, atom/target, params)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user