Convert most spans to defines (#31080)

* spanish?

* aaaagain

* keep maptext

* Update robot_items.dm

* Update span_defines.dm

* compiles

* Update silicon_mob.dm

* compile
This commit is contained in:
kyunkyunkyun
2025-12-13 23:55:48 +00:00
committed by GitHub
parent e5f0a6fffb
commit b0463d3c83
1624 changed files with 15737 additions and 15581 deletions
+11 -11
View File
@@ -270,12 +270,12 @@ RESTRICT_TYPE(/mob/living/basic)
if(..()) // if harm or disarm intent.
if(M.a_intent == INTENT_DISARM)
playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1)
visible_message("<span class='danger'>[M] [response_disarm_continuous] [name]!</span>", "<span class='userdanger'>[M] [response_disarm_continuous] you!</span>")
visible_message(SPAN_DANGER("[M] [response_disarm_continuous] [name]!"), SPAN_USERDANGER("[M] [response_disarm_continuous] you!"))
add_attack_logs(M, src, "Alien disarmed")
else
var/damage = rand(15, 30)
visible_message("<span class='danger'>[M] has slashed at [src]!</span>", \
"<span class='userdanger'>[M] has slashed at [src]!</span>")
visible_message(SPAN_DANGER("[M] has slashed at [src]!"), \
SPAN_USERDANGER("[M] has slashed at [src]!"))
playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1)
add_attack_logs(M, src, "Alien attacked")
attack_threshold_check(damage)
@@ -324,9 +324,9 @@ RESTRICT_TYPE(/mob/living/basic)
if(death_sound)
playsound(get_turf(src), death_sound, 200, 1)
if(death_message)
visible_message("<span class='danger'>\The [src] [death_message]</span>")
visible_message(SPAN_DANGER("\The [src] [death_message]"))
else if(!(basic_mob_flags & DEL_ON_DEATH))
visible_message("<span class='danger'>\The [src] stops moving...</span>")
visible_message(SPAN_DANGER("\The [src] stops moving..."))
if(HAS_TRAIT(src, TRAIT_XENOBIO_SPAWNED))
SSmobs.xenobiology_mobs--
if(basic_mob_flags & DEL_ON_DEATH)
@@ -352,8 +352,8 @@ RESTRICT_TYPE(/mob/living/basic)
if(INTENT_HELP)
if(health > 0)
visible_message(
"<span class='notice'>[M] [response_help_continuous] [src].</span>",
"<span class='notice'>[M] [response_help_continuous] you.</span>"
SPAN_NOTICE("[M] [response_help_continuous] [src]."),
SPAN_NOTICE("[M] [response_help_continuous] you.")
)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
@@ -362,12 +362,12 @@ RESTRICT_TYPE(/mob/living/basic)
if(INTENT_HARM, INTENT_DISARM)
if(HAS_TRAIT(M, TRAIT_PACIFISM))
to_chat(M, "<span class='warning'>You don't want to hurt [src]!</span>")
to_chat(M, SPAN_WARNING("You don't want to hurt [src]!"))
return
M.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
visible_message(
"<span class='danger'>[M] [response_harm_continuous] [src]!</span>",
"<span class='userdanger'>[M] [response_harm_continuous] you!</span>"
SPAN_DANGER("[M] [response_harm_continuous] [src]!"),
SPAN_USERDANGER("[M] [response_harm_continuous] you!")
)
playsound(loc, attacked_sound, 25, TRUE, -1)
attack_threshold_check(harm_intent_damage)
@@ -385,7 +385,7 @@ RESTRICT_TYPE(/mob/living/basic)
temp_damage *= damage_coeff[damagetype]
if(temp_damage >= 0 && temp_damage <= force_threshold)
visible_message("<span class='warning'>[src] looks unharmed.</span>")
visible_message(SPAN_WARNING("[src] looks unharmed."))
return FALSE
else
apply_damage(damage, damagetype, null, getarmor(armor_type = armorcheck))
@@ -164,7 +164,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
if(stat == CONSCIOUS && eggsleft < 8)
eggsleft += rand(1, 4)
else
to_chat(feeder, "<span class='warning'>[src] doesn't seem hungry!</span>")
to_chat(feeder, SPAN_WARNING("[src] doesn't seem hungry!"))
return COMSIG_MOB_CANCEL_EAT
/mob/living/basic/chicken/attack_hand(mob/living/carbon/human/M)
@@ -55,7 +55,7 @@
if(. && isdiona(target))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/NB = pick(H.bodyparts)
H.visible_message("<span class='warning'>[src] takes a big chomp out of [H]!</span>", "<span class='userdanger'>[src] takes a big chomp out of your [NB.name]!</span>")
H.visible_message(SPAN_WARNING("[src] takes a big chomp out of [H]!"), SPAN_USERDANGER("[src] takes a big chomp out of your [NB.name]!"))
NB.droplimb()
/mob/living/basic/goat/proc/on_pre_attack(datum/source, atom/target)
@@ -12,13 +12,13 @@
/obj/item/udder/proc/milkAnimal(obj/O, mob/user)
var/obj/item/reagent_containers/glass/G = O
if(G.reagents.total_volume >= G.volume)
to_chat(user, "<span class='danger'>[O] is full.</span>")
to_chat(user, SPAN_DANGER("[O] is full."))
return
var/transfered = reagents.trans_to(O, rand(5,10))
if(transfered)
user.visible_message("[user] milks [src] using \the [O].", "<span class='notice'>You milk [src] using \the [O].</span>")
user.visible_message("[user] milks [src] using \the [O].", SPAN_NOTICE("You milk [src] using \the [O]."))
else
to_chat(user, "<span class='danger'>The udder is dry. Wait a bit longer...</span>")
to_chat(user, SPAN_DANGER("The udder is dry. Wait a bit longer..."))
/obj/item/udder/cow
@@ -12,6 +12,6 @@
var/obj/item/newspaper/paper = O
if(stat != CONSCIOUS || !paper.rolled)
return ..()
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O].</span>")
user.visible_message(SPAN_NOTICE("[user] baps [name] on the nose with the rolled up [O]."))
INVOKE_ASYNC(src, PROC_REF(spin), 7 DECISECONDS, 1)
return ITEM_INTERACT_COMPLETE
@@ -40,12 +40,12 @@
var/mob/living/A = entered
if(A.mob_size > MOB_SIZE_SMALL)
if(prob(squish_chance))
A.visible_message("<span class='notice'>\The [A] squashed \the [name].</span>", "<span class='notice'>You squashed \the [name].</span>")
A.visible_message(SPAN_NOTICE("\The [A] squashed \the [name]."), SPAN_NOTICE("You squashed \the [name]."))
death()
else
visible_message("<span class='notice'>\The [name] avoids getting crushed.</span>")
visible_message(SPAN_NOTICE("\The [name] avoids getting crushed."))
else if(isstructure(entered))
visible_message("<span class='notice'>As \the [entered] moved over \the [name], it was crushed.</span>")
visible_message(SPAN_NOTICE("As \the [entered] moved over \the [name], it was crushed."))
death()
/mob/living/basic/cockroach/ex_act() // Explosions are a terrible way to handle a cockroach.
@@ -127,7 +127,7 @@
M.throw_alert(NYMPH_ALERT, /atom/movable/screen/alert/gestalt, new_master = src)
forceMove(M)
else if(isrobot(M))
M.visible_message("<span class='notice'>[M] playfully boops [src] on the head!</span>", "<span class='notice'>You playfully boop [src] on the head!</span>")
M.visible_message(SPAN_NOTICE("[M] playfully boops [src] on the head!"), SPAN_NOTICE("You playfully boop [src] on the head!"))
else
get_scooped(M)
else
@@ -144,7 +144,7 @@
choices += H
if(!length(choices))
to_chat(src, "<span class='warning'>No suitable diona nearby.</span>")
to_chat(src, SPAN_WARNING("No suitable diona nearby."))
return FALSE
var/mob/living/M = tgui_input_list(src, "Who do you wish to merge with?", "Nymph Merging", choices)
@@ -192,20 +192,20 @@
return FALSE
if(length(donors) < evolve_donors)
to_chat(src, "<span class='warning'>You need more blood in order to ascend to a new state of consciousness...</span>")
to_chat(src, SPAN_WARNING("You need more blood in order to ascend to a new state of consciousness..."))
return FALSE
if(nutrition < nutrition_need)
to_chat(src, "<span class='warning'>You need to binge on weeds in order to have the energy to grow...</span>")
to_chat(src, SPAN_WARNING("You need to binge on weeds in order to have the energy to grow..."))
return FALSE
if(isdiona(loc) && !split()) // if it's merged with diona, needs to able to split before evolving
return FALSE
visible_message("<span class='danger'>[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.</span>","<span class='danger'>You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.</span>")
visible_message(SPAN_DANGER("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea."),SPAN_DANGER("You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form."))
if(master_commander)
to_chat(src, "<span class='userdanger'>As you evolve, your mind grows out of it's restraints. You are no longer loyal to [master_commander]!</span>")
to_chat(src, SPAN_USERDANGER("As you evolve, your mind grows out of it's restraints. You are no longer loyal to [master_commander]!"))
var/mob/living/carbon/human/diona/adult = new(get_turf(loc))
adult.set_species(/datum/species/diona)
@@ -235,7 +235,7 @@
/mob/living/basic/diona_nymph/proc/check_full(datum/source, obj/item/potential_food)
SIGNAL_HANDLER // COMSIG_MOB_PRE_EAT
if(nutrition >= nutrition_need) // Prevents griefing by overeating food items without evolving.
to_chat(src, "<span class='warning'>You're too full to consume this! Perhaps it's time to grow bigger...</span>")
to_chat(src, SPAN_WARNING("You're too full to consume this! Perhaps it's time to grow bigger..."))
return COMSIG_MOB_TERMINATE_EAT
// Consumes plant matter other than weeds to evolve
@@ -256,7 +256,7 @@
choices += H
if(!length(choices))
to_chat(src, "<span class='warning'>No suitable blood donors nearby.</span>")
to_chat(src, SPAN_WARNING("No suitable blood donors nearby."))
return FALSE
var/mob/living/carbon/human/M = tgui_input_list(src, "Who do you wish to take a sample from?", "Blood Sampling", choices)
@@ -265,14 +265,14 @@
return FALSE
if(!M.dna || (NO_BLOOD in M.dna.species.species_traits))
to_chat(src, "<span class='warning'>That donor has no blood to take.</span>")
to_chat(src, SPAN_WARNING("That donor has no blood to take."))
return FALSE
if(donors.Find(M.real_name))
to_chat(src, "<span class='warning'>That donor offers you nothing new.</span>")
to_chat(src, SPAN_WARNING("That donor offers you nothing new."))
return FALSE
visible_message("<span class='danger'>[src] flicks out a feeler and neatly steals a sample of [M]'s blood.</span>","<span class='danger'>You flick out a feeler and neatly steal a sample of [M]'s blood.</span>")
visible_message(SPAN_DANGER("[src] flicks out a feeler and neatly steals a sample of [M]'s blood."),SPAN_DANGER("You flick out a feeler and neatly steal a sample of [M]'s blood."))
donors += M.real_name
for(var/datum/language/L in M.languages)
if(!(L.flags & HIVEMIND))
@@ -286,12 +286,12 @@
return FALSE
if(length(donors) == evolve_donors)
to_chat(src, "<span class='noticealien'>You feel ready to move on to your next stage of growth.</span>")
to_chat(src, SPAN_NOTICEALIEN("You feel ready to move on to your next stage of growth."))
else if(length(donors) == awareness_donors)
universal_understand = TRUE
to_chat(src, "<span class='noticealien'>You feel your awareness expand, and realize you know how to understand the creatures around you.</span>")
to_chat(src, SPAN_NOTICEALIEN("You feel your awareness expand, and realize you know how to understand the creatures around you."))
else
to_chat(src, "<span class='noticealien'>The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind.</span>")
to_chat(src, SPAN_NOTICEALIEN("The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind."))
/mob/living/basic/diona_nymph/put_in_hands(obj/item/W)
@@ -301,7 +301,7 @@
W.dropped()
/mob/living/basic/diona_nymph/put_in_active_hand(obj/item/W)
to_chat(src, "<span class='warning'>You don't have any hands!</span>")
to_chat(src, SPAN_WARNING("You don't have any hands!"))
return
/mob/living/basic/diona_nymph/valid_respawn_target_for(mob/user)
@@ -70,11 +70,11 @@
if(stat != CONSCIOUS)
return
if(!has_tail)
to_chat(usr, "<span class='warning'>You have no tail to shed!</span>")
to_chat(usr, SPAN_WARNING("You have no tail to shed!"))
return
for(var/obj/item/grab/G in usr.grabbed_by)
var/mob/living/carbon/M = G.assailant
usr.visible_message("<span class='warning'>[usr] suddenly sheds their tail and slips out of [M]'s grasp!</span>")
usr.visible_message(SPAN_WARNING("[usr] suddenly sheds their tail and slips out of [M]'s grasp!"))
M.KnockDown(3 SECONDS) // FUCK I TRIPPED
playsound(usr.loc, "sound/misc/slip.ogg", 75, 1)
has_tail = FALSE
@@ -82,12 +82,12 @@
/mob/living/basic/lizard/proc/new_tail()
has_tail = TRUE
to_chat(src, "<span class='notice'>You regrow your tail!</span>")
to_chat(src, SPAN_NOTICE("You regrow your tail!"))
/mob/living/basic/lizard/decompile_act(obj/item/matter_decompiler/C, mob/user)
if(!isdrone(user))
user.visible_message("<span class='notice'>[user] sucks [src] into its decompiler. There's a horrible crunching noise.</span>", \
"<span class='warning'>It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.</span>")
user.visible_message(SPAN_NOTICE("[user] sucks [src] into its decompiler. There's a horrible crunching noise."), \
SPAN_WARNING("It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises."))
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
C.stored_comms["metal"] += 2 // having more metal than glass because blood has iron in it
C.stored_comms["glass"] += 1
+14 -14
View File
@@ -86,7 +86,7 @@
SIGNAL_HANDLER // COMSIG_ATOM_ENTERED
if(ishuman(entered) && stat == CONSCIOUS)
to_chat(entered, "<span class='notice'>Squeak!</span>")
to_chat(entered, SPAN_NOTICE("Squeak!"))
/// Called when a mouse is hand-fed some cheese, it will stop being afraid of humans
/mob/living/basic/mouse/tamed(mob/living/tamer, obj/item/food/sliced/cheesewedge/cheese)
@@ -98,14 +98,14 @@
/mob/living/basic/mouse/proc/try_consume_cheese(obj/item/food/sliced/cheesewedge/cheese)
if(prob(90) || health < maxHealth)
visible_message(
"<span class='notice'>[src] nibbles [cheese].</span>",
"<span class='notice'>You nibble [cheese][health < maxHealth ? ", restoring your health" : ""].</span>"
SPAN_NOTICE("[src] nibbles [cheese]."),
SPAN_NOTICE("You nibble [cheese][health < maxHealth ? ", restoring your health" : ""].")
)
adjustHealth(-maxHealth)
else
visible_message(
"<span class='notice'>[src] nibbles through [cheese], attracting another mouse!</span>",
"<span class='notice'>You nibble through [cheese], attracting another mouse!</span>"
SPAN_NOTICE("[src] nibbles through [cheese], attracting another mouse!"),
SPAN_NOTICE("You nibble through [cheese], attracting another mouse!")
)
new /mob/living/basic/mouse(loc)
qdel(cheese)
@@ -116,11 +116,11 @@
return
var/turf/simulated/floor/F = get_turf(cable)
if(cable.get_available_power() && !HAS_TRAIT(src, TRAIT_SHOCKIMMUNE))
visible_message("<span class='warning'>[src] chews through [cable]. It's toast!</span>")
visible_message(SPAN_WARNING("[src] chews through [cable]. It's toast!"))
playsound(src, 'sound/effects/sparks2.ogg', 100, 1)
toast() // mmmm toasty.
else
visible_message("<span class='warning'>[src] chews through [cable].</span>")
visible_message(SPAN_WARNING("[src] chews through [cable]."))
investigate_log("was chewed through by a mouse in [get_area(F)]([F.x], [F.y], [F.z] - [ADMIN_JMP(F)])",INVESTIGATE_WIRES)
cable.deconstruct()
@@ -128,14 +128,14 @@
if(istype(AM, /obj/item/food/sliced/cheesewedge))
return ..() // Get dem
if(show_message)
to_chat(src, "<span class='warning'>You are too small to pull anything except cheese.</span>")
to_chat(src, SPAN_WARNING("You are too small to pull anything except cheese."))
return
/mob/living/basic/mouse/proc/on_atom_entered(datum/source, atom/movable/entered)
if(ishuman(entered))
if(stat == CONSCIOUS)
var/mob/M = entered
to_chat(M, "<span class='notice'>[bicon(src)] Squeek!</span>")
to_chat(M, SPAN_NOTICE("[bicon(src)] Squeek!"))
/mob/living/basic/mouse/proc/toast()
add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY)
@@ -232,7 +232,7 @@
bursted = TRUE
var/turf/T = get_turf(src)
if(!is_station_level(T.z) || isspaceturf(T))
to_chat(src, "<span class='userdanger'>You feel ready to burst, but this isn't an appropriate place! You must return to the station!</span>")
to_chat(src, SPAN_USERDANGER("You feel ready to burst, but this isn't an appropriate place! You must return to the station!"))
apply_status_effect(STATUS_EFFECT_BLOB_BURST, 5 SECONDS, CALLBACK(src, PROC_REF(burst), FALSE))
return FALSE
var/datum/mind/blobmind = mind
@@ -257,13 +257,13 @@
SSticker.record_biohazard_start(BIOHAZARD_BLOB)
/mob/living/basic/mouse/blobinfected/get_scooped(mob/living/carbon/grabber)
to_chat(grabber, "<span class='warning'>You try to pick up [src], but they slip out of your grasp!</span>")
to_chat(src, "<span class='warning'>[src] tries to pick you up, but you wriggle free of their grasp!</span>")
to_chat(grabber, SPAN_WARNING("You try to pick up [src], but they slip out of your grasp!"))
to_chat(src, SPAN_WARNING("[src] tries to pick you up, but you wriggle free of their grasp!"))
/mob/living/basic/mouse/decompile_act(obj/item/matter_decompiler/C, mob/user)
if(!isdrone(user))
user.visible_message("<span class='notice'>[user] sucks [src] into its decompiler. There's a horrible crunching noise.</span>", \
"<span class='warning'>It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.</span>")
user.visible_message(SPAN_NOTICE("[user] sucks [src] into its decompiler. There's a horrible crunching noise."), \
SPAN_WARNING("It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises."))
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
C.stored_comms["metal"] += 2
C.stored_comms["glass"] += 1
@@ -78,11 +78,11 @@
// A changeling caterpillar shouldn't be restricted from evolving.
// A caterpillar needs to consume food-- similar to a dioan nymph --to evolve.
if((nutrition < nutrition_need) && !IS_CHANGELING(M))
to_chat(src, "<span class='warning'>You need to binge on food in order to have the energy to evolve...</span>")
to_chat(src, SPAN_WARNING("You need to binge on food in order to have the energy to evolve..."))
return
if(master_commander)
to_chat(src, "<span class='userdanger'>As you evolve, your mind grows out of it's restraints. You are no longer loyal to [master_commander]!</span>")
to_chat(src, SPAN_USERDANGER("As you evolve, your mind grows out of it's restraints. You are no longer loyal to [master_commander]!"))
// Worme is the lesser form of nian. The caterpillar evolves into this lesser form.
var/mob/living/carbon/human/nian_worme/adult = new(get_turf(loc))
@@ -125,7 +125,7 @@
/mob/living/basic/nian_caterpillar/proc/check_full(datum/source, obj/item/potential_food)
SIGNAL_HANDLER // COMSIG_MOB_PRE_EAT
if(nutrition >= nutrition_need) // Prevents griefing by overeating food items without evolving.
to_chat(src, "<span class='warning'>You're too full to consume this! Perhaps it's time to grow bigger...</span>")
to_chat(src, SPAN_WARNING("You're too full to consume this! Perhaps it's time to grow bigger..."))
return COMSIG_MOB_TERMINATE_EAT
@@ -141,7 +141,7 @@
if(M.a_intent != INTENT_HELP)
return ..()
if(isrobot(M))
M.visible_message("<span class='notice'>[M] playfully boops [src] on the head!</span>", "<span class='notice'>You playfully boop [src] on the head!</span>")
M.visible_message(SPAN_NOTICE("[M] playfully boops [src] on the head!"), SPAN_NOTICE("You playfully boop [src] on the head!"))
else
get_scooped(M)
@@ -171,7 +171,7 @@
/datum/action/innate/nian_caterpillar_emerge/Activate()
var/mob/living/basic/nian_caterpillar/user = owner
user.visible_message("<span class='notice'>[user] begins to hold still and concentrate on weaving a cocoon...</span>", "<span class='notice'>You begin to focus on weaving a cocoon... (This will take [COCOON_WEAVE_DELAY / 10] seconds, and you must hold still.)</span>")
user.visible_message(SPAN_NOTICE("[user] begins to hold still and concentrate on weaving a cocoon..."), SPAN_NOTICE("You begin to focus on weaving a cocoon... (This will take [COCOON_WEAVE_DELAY / 10] seconds, and you must hold still.)"))
if(do_after(user, COCOON_WEAVE_DELAY, FALSE, user))
var/obj/structure/moth_cocoon/C = new(get_turf(user))
var/datum/mind/H = user.mind
@@ -190,13 +190,13 @@
/datum/action/cooldown/mob_cooldown/spin_mothsilk/Activate(atom/target)
if(owner.nutrition < 425)
to_chat(owner, "<span class='warning'>You don't have enough nutrition to spin silk!</span>")
to_chat(owner, SPAN_WARNING("You don't have enough nutrition to spin silk!"))
return FALSE
if(!do_after(owner, 3 SECONDS))
return FALSE
new /obj/item/stack/sheet/mothsilk(get_turf(owner))
owner.nutrition -= 15
owner.visible_message("<span class='notice'>[owner] spins some mothsilk!</span>")
owner.visible_message(SPAN_NOTICE("[owner] spins some mothsilk!"))
StartCooldown()
return TRUE
@@ -57,10 +57,10 @@
if(istype(O, /obj/item/mmi))
var/obj/item/mmi/B = O
if(mmi) // There's already a brain in it.
to_chat(user, "<span class='warning'>There's already a brain in [src]!</span>")
to_chat(user, SPAN_WARNING("There's already a brain in [src]!"))
return ITEM_INTERACT_COMPLETE
if(!B.brainmob)
to_chat(user, "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose.</span>")
to_chat(user, SPAN_WARNING("Sticking an empty MMI into the frame would sort of defeat the purpose."))
return ITEM_INTERACT_COMPLETE
if(!B.brainmob.key)
var/ghost_can_reenter = 0
@@ -74,18 +74,18 @@
ghost_can_reenter = 1
break
if(!ghost_can_reenter)
to_chat(user, "<span class='notice'>[B] is completely unresponsive; there's no point.</span>")
to_chat(user, SPAN_NOTICE("[B] is completely unresponsive; there's no point."))
return ITEM_INTERACT_COMPLETE
if(B.brainmob.stat == DEAD)
to_chat(user, "<span class='warning'>[B] is dead. Sticking it into the frame would sort of defeat the purpose.</span>")
to_chat(user, SPAN_WARNING("[B] is dead. Sticking it into the frame would sort of defeat the purpose."))
return ITEM_INTERACT_COMPLETE
if(jobban_isbanned(B.brainmob, "Cyborg") || jobban_isbanned(B.brainmob, "nonhumandept"))
to_chat(user, "<span class='warning'>[B] does not seem to fit.</span>")
to_chat(user, SPAN_WARNING("[B] does not seem to fit."))
return ITEM_INTERACT_COMPLETE
to_chat(user, "<span class='notice'>You install [B] in [src]!</span>")
to_chat(user, SPAN_NOTICE("You install [B] in [src]!"))
user.drop_item()
B.forceMove(src)
@@ -97,11 +97,11 @@
else if(istype(O, /obj/item/card/id) || istype(O, /obj/item/pda))
if(!mmi)
to_chat(user, "<span class='warning'>There's no reason to swipe your ID - the spiderbot has no brain to remove.</span>")
to_chat(user, SPAN_WARNING("There's no reason to swipe your ID - the spiderbot has no brain to remove."))
return ITEM_INTERACT_COMPLETE
if(emagged)
to_chat(user, "<span class='warning'>[src] doesn't seem to respond.</span>")
to_chat(user, SPAN_WARNING("[src] doesn't seem to respond."))
return ITEM_INTERACT_COMPLETE
var/obj/item/card/id/id_card
@@ -113,11 +113,11 @@
id_card = pda.id
if(ACCESS_ROBOTICS in id_card.access)
to_chat(user, "<span class='notice'>You swipe your access card and pop the brain out of [src].</span>")
to_chat(user, SPAN_NOTICE("You swipe your access card and pop the brain out of [src]."))
eject_brain()
return ITEM_INTERACT_COMPLETE
else
to_chat(user, "<span class='warning'>You swipe your card, with no effect.</span>")
to_chat(user, SPAN_WARNING("You swipe your card, with no effect."))
return ITEM_INTERACT_COMPLETE
/mob/living/basic/spiderbot/welder_act(mob/user, obj/item/I)
@@ -126,23 +126,23 @@
if(user == src) // No self-repair dummy
return
if(health >= maxHealth)
to_chat(user, "<span class='warning'>[src] does not need repairing!</span>")
to_chat(user, SPAN_WARNING("[src] does not need repairing!"))
return
. = TRUE
if(!I.use_tool(src, user, volume = I.tool_volume))
return
adjustHealth(-5)
add_fingerprint(user)
user.visible_message("[user] repairs [src]!","<span class='notice'>You repair [src].</span>")
user.visible_message("[user] repairs [src]!",SPAN_NOTICE("You repair [src]."))
/mob/living/basic/spiderbot/emag_act(mob/living/user)
if(emagged)
to_chat(user, "<span class='warning'>[src] doesn't seem to respond.</span>")
to_chat(user, SPAN_WARNING("[src] doesn't seem to respond."))
return 0
else
emagged = TRUE
to_chat(user, "<span class='notice'>You short out the security protocols and rewrite [src]'s internal memory.</span>")
to_chat(src, "<span class='userdanger'>You have been emagged; you are now completely loyal to [user] and [user.p_their()] every order!</span>")
to_chat(user, SPAN_NOTICE("You short out the security protocols and rewrite [src]'s internal memory."))
to_chat(src, SPAN_USERDANGER("You have been emagged; you are now completely loyal to [user] and [user.p_their()] every order!"))
emagged_master = user
add_attack_logs(user, src, "Emagged")
maxHealth = 60
@@ -158,7 +158,7 @@
ckey = M.brainmob.ckey
name = "Spider-bot ([M.brainmob.name])"
if(emagged)
to_chat(src, "<span class='userdanger'>You have been emagged; you are now completely loyal to [emagged_master] and [emagged_master.p_their()] every order!</span>")
to_chat(src, SPAN_USERDANGER("You have been emagged; you are now completely loyal to [emagged_master] and [emagged_master.p_their()] every order!"))
/mob/living/basic/spiderbot/update_icon_state()
if(mmi)
@@ -57,7 +57,7 @@
return
if(locate(/obj/structure/alien/weeds/node) in get_turf(src))
return
visible_message("<span class='alertalien'>[src] has planted some alien weeds!</span>")
visible_message(SPAN_ALERTALIEN("[src] has planted some alien weeds!"))
new /obj/structure/alien/weeds/node(loc)
/mob/living/basic/alien/proc/lay_eggs()
@@ -65,7 +65,7 @@
return
if(locate(/obj/structure/alien/egg) in get_turf(src))
return
visible_message("<span class='alertalien'>[src] has laid an egg!</span>")
visible_message(SPAN_ALERTALIEN("[src] has laid an egg!"))
new /obj/structure/alien/egg(loc)
/mob/living/basic/alien/lavaland
@@ -32,7 +32,7 @@
if(ishuman(target))
var/atom/movable/H = target
H.clean_blood()
visible_message("<span class='notice'>\The [src] polishes \the [target].</span>")
visible_message(SPAN_NOTICE("\The [src] polishes \the [target]."))
return FALSE
target.cleaning_act(src, src, cleanspeed, text_description = ".") // LXM is both the user and the cleaning implement itself. Wow!
@@ -47,7 +47,7 @@
if(istype(L))
if(prob(15))
L.Stun(2 SECONDS)
L.visible_message("<span class='danger'>\the [src] scares \the [L]!</span>")
L.visible_message(SPAN_DANGER("\the [src] scares \the [L]!"))
// This mob is for the admin-only ancient vampire, DO NOT USE ELSEWHERE
@@ -68,7 +68,7 @@
/mob/living/basic/bee/examine(mob/user)
. = ..()
if(!bee_syndicate && !beehome)
. += "<span class='warning'>This bee is homeless!</span>"
. += SPAN_WARNING("This bee is homeless!")
/mob/living/basic/bee/Destroy()
if(beehome)
@@ -222,7 +222,7 @@
var/obj/item/reagent_containers/syringe/S = I
if(S.reagents.has_reagent("royal_bee_jelly")) // We check it twice because if we use an if/else statement, it won't catch the check for blacklisted chemicals below
if(!S.reagents.has_reagent("royal_bee_jelly", 5))
to_chat(user, "<span class='warning'>You don't have enough royal bee jelly to split a bee in two!</span>")
to_chat(user, SPAN_WARNING("You don't have enough royal bee jelly to split a bee in two!"))
return
S.reagents.remove_reagent("royal_bee_jelly", 5)
var/obj/item/queen_bee/qb = new(user.drop_location())
@@ -230,20 +230,20 @@
if(queen?.beegent)
qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents.
user.put_in_active_hand(qb)
user.visible_message("<span class='notice'>[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!</span>", "<span class='warning'>You inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!</span>")
user.visible_message(SPAN_NOTICE("[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!"), SPAN_WARNING("You inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!"))
return
var/datum/reagent/R = GLOB.chemical_reagents_list[S.reagents.get_master_reagent_id()]
if(R && S.reagents.has_reagent(R.id, 5))
S.reagents.remove_reagent(R.id, 5) // Whether or not the chemical is blocked, we want it gone just because you tried to
if(R.id in GLOB.blocked_chems)
to_chat(user, "<span class='warning'>The [src]'s immune system rejects [R.name]!</span>")
to_chat(user, SPAN_WARNING("The [src]'s immune system rejects [R.name]!"))
return
queen.assign_reagent(R)
user.visible_message("<span class='warning'>[user] injects [src]'s genome with [R.name], mutating its DNA!</span>", "<span class='warning'>You inject [src]'s genome with [R.name], mutating its DNA!</span>")
user.visible_message(SPAN_WARNING("[user] injects [src]'s genome with [R.name], mutating its DNA!"), SPAN_WARNING("You inject [src]'s genome with [R.name], mutating its DNA!"))
name = queen.name
else
to_chat(user, "<span class='warning'>You don't have enough units of that chemical to modify the bee's DNA!</span>")
to_chat(user, SPAN_WARNING("You don't have enough units of that chemical to modify the bee's DNA!"))
/obj/item/queen_bee/bought/Initialize(mapload)
. = ..()
@@ -13,8 +13,8 @@
return // Just so people don't accidentally waste it
/obj/item/organ/internal/heart/demon/attack_self__legacy__attackchain(mob/living/user)
user.visible_message("<span class='warning'>[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!</span>", \
"<span class='danger'>An unnatural hunger consumes you. You raise [src] to your mouth and devour it!</span>")
user.visible_message(SPAN_WARNING("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!"), \
SPAN_DANGER("An unnatural hunger consumes you. You raise [src] to your mouth and devour it!"))
playsound(user, 'sound/misc/demon_consume.ogg', 50, 1)
/// SLAUGHTER DEMON HEART
@@ -24,8 +24,8 @@
// Eating the heart for the first time. Gives basic bloodcrawling. This is the only time we need to insert the heart.
if(!HAS_TRAIT(user, TRAIT_BLOODCRAWL))
user.visible_message("<span class='warning'>[user]'s eyes flare a deep crimson!</span>", \
"<span class='userdanger'>You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!</span>")
user.visible_message(SPAN_WARNING("[user]'s eyes flare a deep crimson!"), \
SPAN_USERDANGER("You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!"))
ADD_TRAIT(user, TRAIT_BLOODCRAWL, "bloodcrawl")
user.drop_item()
insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E.
@@ -33,13 +33,13 @@
// Eating a 2nd heart. Gives the ability to drag people into blood and eat them.
if(HAS_TRAIT(user, TRAIT_BLOODCRAWL))
to_chat(user, "You feel differ-<span class='danger'> CONSUME THEM!</span>")
to_chat(user, "You feel differ-[SPAN_DANGER(" CONSUME THEM!")]")
ADD_TRAIT(user, TRAIT_BLOODCRAWL_EAT, "bloodcrawl_eat")
qdel(src) // Replacing their demon heart with another demon heart is pointless, just delete this one and return.
return TRUE
// Eating any more than 2 demon hearts does nothing.
to_chat(user, "<span class='warning'>...and you don't feel any different.</span>")
to_chat(user, SPAN_WARNING("...and you don't feel any different."))
qdel(src)
/obj/item/organ/internal/heart/demon/slaughter/insert(mob/living/carbon/M, special = 0)
@@ -16,7 +16,7 @@
validtargets += M
if(!length(validtargets))
to_chat(usr, "<span class='warning'>There are no valid targets!</span>")
to_chat(usr, SPAN_WARNING("There are no valid targets!"))
return
var/mob/living/target = tgui_input_list(user, "Choose the target to talk to", "Targeting", validtargets)
@@ -31,8 +31,8 @@
if(!msg)
return
log_say("(SLAUGHTER to [key_name(choice)]) [msg]", usr)
to_chat(usr, "<span class='notice'><b>You whisper to [choice]: </b>[msg]</span>")
to_chat(choice, "<span class='deadsay'><b>Suddenly a strange, demonic voice resonates in your head... </b></span><i><span class='danger'> [msg]</span></i>")
to_chat(usr, SPAN_NOTICE("<b>You whisper to [choice]: </b>[msg]"))
to_chat(choice, "[SPAN_DEADSAY("<b>Suddenly a strange, demonic voice resonates in your head... </b>")]<i>[SPAN_DANGER(" [msg]")]</i>")
for(var/mob/dead/observer/G in GLOB.player_list)
G.show_message("<i>Demonic message from <b>[usr]</b> ([ghost_follow_link(usr, ghost=G)]) to <b>[choice]</b> ([ghost_follow_link(choice, ghost=G)]): [msg]</i>")
@@ -56,13 +56,13 @@
/datum/spell/sense_victims/cast(list/targets, mob/user)
var/mob/living/victim = targets[1]
to_chat(victim, "<span class='userdanger'>You feel an awful sense of being watched...</span>")
to_chat(victim, SPAN_USERDANGER("You feel an awful sense of being watched..."))
victim.Stun(6 SECONDS) //HUE
var/area/A = get_area(victim)
if(!A)
to_chat(user, "<span class='warning'>You could not locate any sapient heretics for the Slaughter.</span>")
to_chat(user, SPAN_WARNING("You could not locate any sapient heretics for the Slaughter."))
return 0
to_chat(user, "<span class='danger'>You sense a terrified soul at [A]. <b>Show [A.p_them()] the error of [A.p_their()] ways.</b></span>")
to_chat(user, SPAN_DANGER("You sense a terrified soul at [A]. <b>Show [A.p_them()] the error of [A.p_their()] ways.</b>"))
//////////////////////////////
// MARK: SHADOW DEMON
@@ -73,8 +73,8 @@
base_cooldown = 10 SECONDS
fireball_type = /obj/projectile/magic/shadow_hand
selection_activated_message = "<span class='notice'>You raise your hand, full of demonic energy! <b>Left-click to cast at a target!</b></span>"
selection_deactivated_message = "<span class='notice'>You re-absorb the energy...for now.</span>"
selection_activated_message = SPAN_NOTICE("You raise your hand, full of demonic energy! <b>Left-click to cast at a target!</b>")
selection_deactivated_message = SPAN_NOTICE("You re-absorb the energy...for now.")
action_background_icon_state = "shadow_demon_bg"
action_icon_state = "shadow_grapple"
@@ -189,17 +189,17 @@
return FALSE
if(locked)
if(show_message)
to_chat(user, "<span class='warning'>This ability is locked! Alt-click the button to purchase this ability.</span>")
to_chat(user, "<span class='notice'>It costs [format_si_suffix(unlock_cost)] APC\s to unlock.</span>")
to_chat(user, SPAN_WARNING("This ability is locked! Alt-click the button to purchase this ability."))
to_chat(user, SPAN_NOTICE("It costs [format_si_suffix(unlock_cost)] APC\s to unlock."))
return FALSE
if(user.charge < cast_cost)
if(show_message)
to_chat(user, "<span class='warning'>You do not have enough charge to use this ability!</span>")
to_chat(user, "<span class='notice'>It costs [format_si_suffix(cast_cost)]W to use.</span>")
to_chat(user, SPAN_WARNING("You do not have enough charge to use this ability!"))
to_chat(user, SPAN_NOTICE("It costs [format_si_suffix(cast_cost)]W to use."))
return FALSE
if(requires_area && !user.controlling_area)
if(show_message)
to_chat(user, "<span class='warning'>You need to be controlling an area to use this ability!</span>")
to_chat(user, SPAN_WARNING("You need to be controlling an area to use this ability!"))
return FALSE
return TRUE
@@ -209,7 +209,7 @@
if(requires_area && !user.controlling_area)
return FALSE
if(requires_area && user.controlling_area != get_area(targets[1]))
to_chat(user, "<span class='warning'>You can only use this ability in your controlled area!</span>")
to_chat(user, SPAN_WARNING("You can only use this ability in your controlled area!"))
return FALSE
if(try_cast_action(user, targets[1]))
user.adjust_charge(-cast_cost)
@@ -241,36 +241,36 @@
if(user.apcs_remaining >= unlock_cost)
user.apcs_remaining -= unlock_cost
locked = FALSE
to_chat(user, "<span class='notice'>You have unlocked [initial(name)]!</span>")
to_chat(user, SPAN_NOTICE("You have unlocked [initial(name)]!"))
if(cast_cost > 0)
to_chat(user, "<span class='notice'>It costs [format_si_suffix(cast_cost)]W to use once.</span>")
to_chat(user, SPAN_NOTICE("It costs [format_si_suffix(cast_cost)]W to use once."))
if(level_max > 0 && spell_level < level_max)
to_chat(user, "<span class='notice'>It will cost [format_si_suffix(upgrade_cost)] APC\s to upgrade.</span>")
to_chat(user, SPAN_NOTICE("It will cost [format_si_suffix(upgrade_cost)] APC\s to upgrade."))
update_info()
else
to_chat(user, "<span class='warning'>You cannot afford this ability! It costs [format_si_suffix(unlock_cost)] APC\s to unlock.</span>")
to_chat(user, SPAN_WARNING("You cannot afford this ability! It costs [format_si_suffix(unlock_cost)] APC\s to unlock."))
else
if(spell_level >= level_max)
to_chat(user, "<span class='warning'>You have already fully upgraded this ability!</span>")
to_chat(user, SPAN_WARNING("You have already fully upgraded this ability!"))
else if(user.apcs_remaining >= upgrade_cost)
user.apcs_remaining -= upgrade_cost
spell_level = min(spell_level + 1, level_max)
do_upgrade(user)
if(spell_level == level_max)
to_chat(user, "<span class='notice'>You have fully upgraded [initial(name)]!</span>")
to_chat(user, SPAN_NOTICE("You have fully upgraded [initial(name)]!"))
else
to_chat(user, "<span class='notice'>The next upgrade will cost [format_si_suffix(upgrade_cost)] APC\s to unlock.</span>")
to_chat(user, SPAN_NOTICE("The next upgrade will cost [format_si_suffix(upgrade_cost)] APC\s to unlock."))
update_info()
else
to_chat(user, "<span class='warning'>You cannot afford to upgrade this ability! It costs [format_si_suffix(upgrade_cost)] APC\s to upgrade.</span>")
to_chat(user, SPAN_WARNING("You cannot afford to upgrade this ability! It costs [format_si_suffix(upgrade_cost)] APC\s to upgrade."))
/datum/spell/pulse_demon/proc/do_upgrade(mob/living/basic/demon/pulse_demon/user)
cooldown_handler.recharge_duration = round(base_cooldown / (1.5 ** spell_level))
to_chat(user, "<span class='notice'>You have upgraded [initial(name)] to level [spell_level + 1], it now takes [cooldown_handler.recharge_duration / 10] seconds to recharge.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded [initial(name)] to level [spell_level + 1], it now takes [cooldown_handler.recharge_duration / 10] seconds to recharge."))
/datum/spell/pulse_demon/cablehop
name = "Cable Hop"
@@ -287,10 +287,10 @@
var/turf/T = get_turf(target)
var/obj/structure/cable/C = locate(/obj/structure/cable) in T
if(!istype(C))
to_chat(user, "<span class='warning'>No cable found!</span>")
to_chat(user, SPAN_WARNING("No cable found!"))
return FALSE
if(get_dist(O, T) > 15) //Some extra range to account for them possessing machines away from their APC, but blocking demons from using a camera console to zap across the station.
to_chat(user, "<span class='warning'>That cable is too far away!</span>")
to_chat(user, SPAN_WARNING("That cable is too far away!"))
return FALSE
playsound(T, 'sound/magic/lightningshock.ogg', 50, TRUE)
O.Beam(target, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 1 SECONDS)
@@ -314,7 +314,7 @@
revealing = TRUE
/datum/spell/pulse_demon/emagtamper/try_cast_action(mob/living/basic/demon/pulse_demon/user, atom/target)
to_chat(user, "<span class='warning'>You attempt to tamper with [target]!</span>")
to_chat(user, SPAN_WARNING("You attempt to tamper with [target]!"))
target.emag_act(user)
return TRUE
@@ -329,7 +329,7 @@
revealing = TRUE
/datum/spell/pulse_demon/emp/try_cast_action(mob/living/basic/demon/pulse_demon/user, atom/target)
to_chat(user, "<span class='warning'>You attempt to EMP [target]!</span>")
to_chat(user, SPAN_WARNING("You attempt to EMP [target]!"))
empulse(get_turf(target), 1, 1)
return TRUE
@@ -348,12 +348,12 @@
/datum/spell/pulse_demon/overload/try_cast_action(mob/living/basic/demon/pulse_demon/user, atom/target)
var/obj/machinery/M = target
if(!istype(M))
to_chat(user, "<span class='warning'>That is not a machine.</span>")
to_chat(user, SPAN_WARNING("That is not a machine."))
return FALSE
if(target.flags_2 & NO_MALF_EFFECT_2)
to_chat(user, "<span class='warning'>That machine cannot be overloaded.</span>")
to_chat(user, SPAN_WARNING("That machine cannot be overloaded."))
return FALSE
target.audible_message("<span class='italics'>You hear a loud electrical buzzing sound coming from [target]!</span>")
target.audible_message(SPAN_ITALICS("You hear a loud electrical buzzing sound coming from [target]!"))
addtimer(CALLBACK(src, PROC_REF(detonate), user, M), 5 SECONDS)
return TRUE
@@ -378,10 +378,10 @@
/datum/spell/pulse_demon/remotehijack/try_cast_action(mob/living/basic/demon/pulse_demon/user, atom/target)
var/obj/machinery/power/apc/A = target
if(!istype(A))
to_chat(user, "<span class='warning'>That is not an APC.</span>")
to_chat(user, SPAN_WARNING("That is not an APC."))
return FALSE
if(!user.try_hijack_apc(A, TRUE))
to_chat(user, "<span class='warning'>You cannot hijack that APC right now!</span>")
to_chat(user, SPAN_WARNING("You cannot hijack that APC right now!"))
return TRUE
/datum/spell/pulse_demon/remotedrain
@@ -396,14 +396,14 @@
if(isapc(target))
var/drained = user.drain_APC(target, PULSEDEMON_REMOTE_DRAIN_MULTIPLIER)
if(drained == PULSEDEMON_SOURCE_DRAIN_INVALID)
to_chat(user, "<span class='warning'>This APC is being hijacked, you cannot drain from it right now.</span>")
to_chat(user, SPAN_WARNING("This APC is being hijacked, you cannot drain from it right now."))
else
to_chat(user, "<span class='notice'>You drain [format_si_suffix(drained)]W from [target].</span>")
to_chat(user, SPAN_NOTICE("You drain [format_si_suffix(drained)]W from [target]."))
else if(istype(target, /obj/machinery/power/smes))
var/drained = user.drain_SMES(target, PULSEDEMON_REMOTE_DRAIN_MULTIPLIER)
to_chat(user, "<span class='notice'>You drain [format_si_suffix(drained)]W from [target].</span>")
to_chat(user, SPAN_NOTICE("You drain [format_si_suffix(drained)]W from [target]."))
else
to_chat(user, "<span class='warning'>That is not a valid source.</span>")
to_chat(user, SPAN_WARNING("That is not a valid source."))
return FALSE
return TRUE
@@ -425,7 +425,7 @@
action.background_icon_state = varstate ? action_background_icon_state : "[action_background_icon_state]_disabled"
action.build_all_button_icons()
if(user)
to_chat(user, "<span class='notice'>You will [varstate ? "now" : "no longer"] [base_message]</span>")
to_chat(user, SPAN_NOTICE("You will [varstate ? "now" : "no longer"] [base_message]"))
return varstate
/datum/spell/pulse_demon/toggle/do_drain
@@ -446,13 +446,13 @@
var/amount = text2num(input(user, "Input a value between 1 and [user.max_drain_rate]. 0 will reset it to the maximum.", "Drain Speed Setting"))
if(amount == null || amount < 0)
to_chat(user, "<span class='warning'>Invalid input. Drain speed has not been modified.</span>")
to_chat(user, SPAN_WARNING("Invalid input. Drain speed has not been modified."))
return
if(amount == 0)
amount = user.max_drain_rate
user.power_drain_rate = amount
to_chat(user, "<span class='notice'>Drain speed has been set to [format_si_suffix(user.power_drain_rate)]W per second.</span>")
to_chat(user, SPAN_NOTICE("Drain speed has been set to [format_si_suffix(user.power_drain_rate)]W per second."))
/datum/spell/pulse_demon/toggle/can_exit_cable
name = "Toggle Self-Sustaining"
@@ -465,14 +465,14 @@
/datum/spell/pulse_demon/toggle/can_exit_cable/try_cast_action(mob/living/basic/demon/pulse_demon/user, atom/target)
if(user.can_exit_cable && !(user.current_cable || user.current_power))
to_chat(user, "<span class='warning'>Enter a cable or power source first!</span>")
to_chat(user, SPAN_WARNING("Enter a cable or power source first!"))
return FALSE
user.can_exit_cable = do_toggle(!user.can_exit_cable, user)
return TRUE
/datum/spell/pulse_demon/toggle/can_exit_cable/do_upgrade(mob/living/basic/demon/pulse_demon/user)
user.outside_cable_speed = max(initial(user.outside_cable_speed) - spell_level, 1)
to_chat(user, "<span class='notice'>You have upgraded [initial(name)] to level [spell_level + 1], you will now move faster outside of cables.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded [initial(name)] to level [spell_level + 1], you will now move faster outside of cables."))
/datum/spell/pulse_demon/cycle_camera
name = "Cycle Camera View"
@@ -626,7 +626,7 @@
/datum/spell/pulse_demon/open_upgrades/try_cast_action(mob/living/basic/demon/pulse_demon/user, atom/target)
var/upgrades = get_upgrades(user)
if(!length(upgrades))
to_chat(user, "<span class='warning'>You have already fully upgraded everything available!</span>")
to_chat(user, SPAN_WARNING("You have already fully upgraded everything available!"))
return FALSE
var/raw_choice = show_radial_menu(user, user, upgrades, radius = 48)
@@ -638,39 +638,39 @@
if(cost == -1)
return FALSE
if(user.apcs_remaining < cost)
to_chat(user, "<span class='warning'>You do not have enough unused APCs to purchase this upgrade!</span>")
to_chat(user, SPAN_WARNING("You do not have enough unused APCs to purchase this upgrade!"))
return FALSE
user.apcs_remaining -= cost
switch(choice)
if(PD_UPGRADE_HIJACK_SPEED)
user.hijack_time = max(round(user.hijack_time - 3 SECONDS), 6 SECONDS)
to_chat(user, "<span class='notice'>You have upgraded your [choice], it now takes [user.hijack_time / (1 SECONDS)] second\s to hijack APCs.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], it now takes [user.hijack_time / (1 SECONDS)] second\s to hijack APCs."))
if(PD_UPGRADE_DRAIN_SPEED)
var/old = user.max_drain_rate
user.max_drain_rate = user.max_drain_rate + 20 KJ
if(user.power_drain_rate == old)
user.power_drain_rate = user.max_drain_rate
to_chat(user, "<span class='notice'>You have upgraded your [choice], you can now drain [format_si_suffix(user.max_drain_rate)]W.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], you can now drain [format_si_suffix(user.max_drain_rate)]W."))
if(PD_UPGRADE_MAX_HEALTH)
user.maxHealth = min(round(user.maxHealth * 1.5), 200)
to_chat(user, "<span class='notice'>You have upgraded your [choice], your max health is now [user.maxHealth].</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], your max health is now [user.maxHealth]."))
if(PD_UPGRADE_HEALTH_REGEN)
user.health_regen_rate = min(round(user.health_regen_rate + 2), 10)
to_chat(user, "<span class='notice'>You have upgraded your [choice], you will now regenerate [user.health_regen_rate] health per cycle when powered.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], you will now regenerate [user.health_regen_rate] health per cycle when powered."))
if(PD_UPGRADE_HEALTH_LOSS)
user.health_loss_rate = max(round(user.health_loss_rate - 1), 0)
if(user.health_loss_rate == 0)
to_chat(user, "<span class='notice'>You have upgraded your [choice], You will no longer lose health when on an unpowered cable.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], You will no longer lose health when on an unpowered cable."))
else
to_chat(user, "<span class='notice'>You have upgraded your [choice], you will now lose [user.health_loss_rate] health per cycle when unpowered.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], you will now lose [user.health_loss_rate] health per cycle when unpowered."))
if(PD_UPGRADE_HEALTH_COST)
user.power_per_regen = max(round(user.power_per_regen / 1.5), 1)
to_chat(user, "<span class='notice'>You have upgraded your [choice], it now takes [format_si_suffix(user.power_per_regen)]W of power to regenerate health.</span>")
to_chat(user, "<span class='notice'>Additionally, if you enable draining while on a cable, any excess power that would've been used regenerating will be added to your charge.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], it now takes [format_si_suffix(user.power_per_regen)]W of power to regenerate health."))
to_chat(user, SPAN_NOTICE("Additionally, if you enable draining while on a cable, any excess power that would've been used regenerating will be added to your charge."))
if(PD_UPGRADE_MAX_CHARGE)
user.maxcharge = user.maxcharge + 50 KJ
to_chat(user, "<span class='notice'>You have upgraded your [choice], you can now store [format_si_suffix(user.maxcharge)]J of energy.</span>")
to_chat(user, SPAN_NOTICE("You have upgraded your [choice], you can now store [format_si_suffix(user.maxcharge)]J of energy."))
else
return FALSE
return TRUE
@@ -262,12 +262,12 @@
return
mind.wipe_memory()
var/list/greeting = list()
greeting.Add("<span class='warning'><font size=3><b>You are a pulse demon.</b></font></span>")
greeting.Add(SPAN_WARNING("<font size=3><b>You are a pulse demon.</b></font>"))
greeting.Add("<b>A being made of pure electrical energy, you travel through the station's wires and infest machinery.</b>")
greeting.Add("<b>Navigate the station's power cables to find power sources to steal from to power your abilities.</b>")
greeting.Add("<b>Hijack APCs by entering them to unlock more powerful abilities, gain more maximum charge, and gain access to connected machines.</b>")
greeting.Add("<b>If the wire or power source you're connected to runs out of power you'll start losing health and eventually die, but you are otherwise resistant to damage.</b>")
greeting.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Pulse_Demon)</span>")
greeting.Add(SPAN_MOTD("For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Pulse_Demon)"))
for(var/datum/objective/new_obj in list(/datum/objective/pulse_demon/infest, /datum/objective/pulse_demon/drain, /datum/objective/pulse_demon/tamper))
mind.add_mind_objective(new_obj)
greeting.Add(mind.prepare_announce_objectives(FALSE))
@@ -327,7 +327,7 @@
if(!S.locked && !can_exit_cable)
can_exit_cable = TRUE
S.do_toggle(can_exit_cable)
to_chat(src, "<span class='danger'>Your self-sustaining ability has automatically enabled itself to prevent death from having no connection!</span>")
to_chat(src, SPAN_DANGER("Your self-sustaining ability has automatically enabled itself to prevent death from having no connection!"))
/mob/living/basic/demon/pulse_demon/proc/update_controlling_area(reset = FALSE)
var/area/prev = controlling_area
@@ -539,7 +539,7 @@
/mob/living/basic/demon/pulse_demon/say(message, verb, sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE)
if(client && check_mute(client.ckey, MUTE_IC))
to_chat(src, "<span class='danger'>You cannot speak in IC (Muted).</span>")
to_chat(src, SPAN_DANGER("You cannot speak in IC (Muted)."))
return FALSE
if(sanitize)
@@ -554,7 +554,7 @@
var/turf/T = get_turf(src)
log_say("[key_name_admin(src)] (@[T.x], [T.y], [T.z]) made [current_robot]([key_name_admin(current_robot)]) say: [message]")
log_admin("[key_name_admin(src)] made [key_name_admin(current_robot)] say: [message]")
message_admins("<span class='notice'>[key_name_admin(src)] made [key_name_admin(current_robot)] say: [message]</span>")
message_admins(SPAN_NOTICE("[key_name_admin(src)] made [key_name_admin(current_robot)] say: [message]"))
// don't sanitize again
current_robot.say(message, null, FALSE, ignore_speech_problems, ignore_atmospherics, ignore_languages)
return TRUE
@@ -628,7 +628,7 @@
if(!is_valid_apc(A) || (A in hijacked_apcs) || apc_being_hijacked || A.being_hijacked)
return FALSE
to_chat(src, "<span class='notice'>You are now attempting to hijack [A], this will take approximately [hijack_time / 10] seconds.</span>")
to_chat(src, SPAN_NOTICE("You are now attempting to hijack [A], this will take approximately [hijack_time / 10] seconds."))
apc_being_hijacked = A
A.being_hijacked = TRUE
A.update_icon()
@@ -636,7 +636,7 @@
if(is_valid_apc(A))
finish_hijack_apc(A, remote)
else
to_chat(src, "<span class='warning'>Failed to hijack [src].</span>")
to_chat(src, SPAN_WARNING("Failed to hijack [src]."))
apc_being_hijacked = null
A.being_hijacked = FALSE
A.update_icon()
@@ -660,7 +660,7 @@
if(!remote)
update_controlling_area()
maxcharge = calc_maxcharge(length(hijacked_apcs)) + (maxcharge - calc_maxcharge(length(hijacked_apcs) - 1))
to_chat(src, "<span class='notice'>Hijacking complete! You now control [length(hijacked_apcs)] APCs and have [apcs_remaining] left to spend.</span>")
to_chat(src, SPAN_NOTICE("Hijacking complete! You now control [length(hijacked_apcs)] APCs and have [apcs_remaining] left to spend."))
var/turf/T = get_turf(A)
var/distance = 0
strengthen_cables(T, distance)
@@ -763,7 +763,7 @@
SIGNAL_HANDLER
if(emp_debounce)
return
visible_message("<span class='danger'>[src] [pick("fizzles", "wails", "flails")] in anguish!</span>")
visible_message(SPAN_DANGER("[src] [pick("fizzles", "wails", "flails")] in anguish!"))
playsound(get_turf(src), pick(hurt_sounds), 30, TRUE)
throw_alert(ALERT_CATEGORY_NOREGEN, /atom/movable/screen/alert/pulse_noregen)
switch(severity)
@@ -790,19 +790,19 @@
if(C?.charge)
C.use(min(C.charge, power_drain_rate))
adjust_charge(min(C.charge, power_drain_rate))
visible_message("<span class='notice'>[src] touches [O] and drains its power!</span>", "<span class='notice'>You touch [O] and drain it's power!</span>")
visible_message(SPAN_NOTICE("[src] touches [O] and drains its power!"), SPAN_NOTICE("You touch [O] and drain it's power!"))
/mob/living/basic/demon/pulse_demon/attack_hand(mob/living/carbon/human/M)
if(is_under_tile())
to_chat(M, "<span class='danger'>You can't interact with something that's under the floor!</span>")
to_chat(M, SPAN_DANGER("You can't interact with something that's under the floor!"))
return
switch(M.intent)
if(INTENT_HELP)
visible_message("<span class='notice'>[M] [response_help_continuous] [src].</span>")
visible_message(SPAN_NOTICE("[M] [response_help_continuous] [src]."))
if(INTENT_DISARM, INTENT_GRAB)
visible_message("<span class='notice'>[M] [response_disarm_continuous] [src].</span>")
visible_message(SPAN_NOTICE("[M] [response_disarm_continuous] [src]."))
if(INTENT_HELP)
visible_message("<span class='warning'>[M] [response_harm_continuous] [src].</span>")
visible_message(SPAN_WARNING("[M] [response_harm_continuous] [src]."))
try_attack_mob(M)
/mob/living/basic/demon/pulse_demon/attack_by(obj/item/O, mob/living/user, params)
@@ -810,16 +810,16 @@
return FINISH_ATTACK
if(is_under_tile())
to_chat(user, "<span class='danger'>You can't interact with something that's under the floor!</span>")
to_chat(user, SPAN_DANGER("You can't interact with something that's under the floor!"))
return FINISH_ATTACK
var/obj/item/stock_parts/cell/C = O.get_cell()
if(C && C.charge)
C.use(min(C.charge, power_drain_rate))
adjust_charge(min(C.charge, power_drain_rate))
to_chat(user, "<span class='warning'>You touch [src] with [O] and [src] drains it!</span>")
to_chat(src, "<span class='notice'>[user] touches you with [O] and you drain its power!</span>")
visible_message("<span class='notice'>[O] goes right through [src].</span>")
to_chat(user, SPAN_WARNING("You touch [src] with [O] and [src] drains it!"))
to_chat(src, SPAN_NOTICE("[user] touches you with [O] and you drain its power!"))
visible_message(SPAN_NOTICE("[O] goes right through [src]."))
try_shock_mob(user, O.siemens_coefficient)
return FINISH_ATTACK
@@ -836,7 +836,7 @@
regen_lock = max(regen_lock, 1)
return ..()
else
visible_message("<span class='warning'>[proj] goes right through [src]!</span>")
visible_message(SPAN_WARNING("[proj] goes right through [src]!"))
/mob/living/basic/demon/pulse_demon/electrocute_act(shock_damage, source, siemens_coeff, flags)
return
@@ -18,12 +18,12 @@
// we probably shouldn't be firing from inside a recharger or someone's bag
if(iscarbon(G.loc) || isturf(G.loc))
G.process_fire(A, src, FALSE)
visible_message("<span class='danger'>[G] fires itself at [A]!</span>", "<span class='danger'>You force [G] to fire at [A]!</span>", "<span class='italics'>You hear \a [G.fire_sound_text]!</span>")
visible_message(SPAN_DANGER("[G] fires itself at [A]!"), SPAN_DANGER("You force [G] to fire at [A]!"), SPAN_ITALICS("You hear \a [G.fire_sound_text]!"))
changeNext_click(CLICK_CD_RANGE) // I can't actually find what the default gun fire cooldown is, so it's 1 second until someone enlightens me
return
else if(current_robot)
log_admin("[key_name_admin(src)] made [key_name_admin(current_robot)] attack [A]")
message_admins("<span class='notice'>[key_name_admin(src)] made [key_name_admin(current_robot)] attack [A]</span>")
message_admins(SPAN_NOTICE("[key_name_admin(src)] made [key_name_admin(current_robot)] attack [A]"))
current_robot.ClickOn(A, params)
changeNext_click(0.5 SECONDS)
@@ -109,8 +109,8 @@
/mob/living/simple_animal/bot/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
if(user.loc == src)
return
to_chat(user, "<span class='warning'>You are now inside [src]. If it is destroyed, you will be dropped onto the ground, and may die if there is no cable under you.</span>")
to_chat(user, "<span class='notice'>Leave it by jumping to a hijacked APC.</span>")
to_chat(user, SPAN_WARNING("You are now inside [src]. If it is destroyed, you will be dropped onto the ground, and may die if there is no cable under you."))
to_chat(user, SPAN_NOTICE("Leave it by jumping to a hijacked APC."))
ejectpai(user)
user.forceMove(src)
user.current_bot = src
@@ -129,77 +129,77 @@
/obj/machinery/recharger/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
user.forceMove(src)
if(!charging)
to_chat(user, "<span class='warning'>There is no weapon charging. Click again to retry.</span>")
to_chat(user, SPAN_WARNING("There is no weapon charging. Click again to retry."))
return
to_chat(user, "<span class='notice'>You are now attempting to hijack [src], this will take approximately [user.hijack_time / 10] seconds.</span>")
to_chat(user, SPAN_NOTICE("You are now attempting to hijack [src], this will take approximately [user.hijack_time / 10] seconds."))
if(!do_after(user, user.hijack_time, FALSE, src))
return
if(!charging)
to_chat(src, "<span class='warning'>Failed to hijack [src]</span>")
to_chat(src, SPAN_WARNING("Failed to hijack [src]"))
return
to_chat(user, "<span class='notice'>You are now inside [charging]. Click on a hijacked APC to return.</span>")
to_chat(user, SPAN_NOTICE("You are now inside [charging]. Click on a hijacked APC to return."))
user.forceMove(charging)
user.current_weapon = charging
/obj/machinery/cell_charger/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
user.forceMove(src)
if(!charging)
to_chat(user, "<span class='warning'>There is no cell charging. Click again to retry.</span>")
to_chat(user, SPAN_WARNING("There is no cell charging. Click again to retry."))
return
to_chat(user, "<span class='notice'>You are now attempting to hijack [src], this will take approximately [user.hijack_time / 10] seconds.</span>")
to_chat(user, SPAN_NOTICE("You are now attempting to hijack [src], this will take approximately [user.hijack_time / 10] seconds."))
if(charging.rigged)
to_chat(user, "<span class='notice'>You are now inside [charging]. Click on a hijacked APC to return.</span>")
to_chat(user, SPAN_NOTICE("You are now inside [charging]. Click on a hijacked APC to return."))
user.forceMove(charging)
return
if(!do_after(user, user.hijack_time, FALSE, src))
return
if(!charging)
to_chat(src, "<span class='warning'>Failed to hijack [src].</span>")
to_chat(src, SPAN_WARNING("Failed to hijack [src]."))
return
to_chat(user, "<span class='notice'>You are now inside [charging]. Click on a hijacked APC to return.</span>")
to_chat(user, SPAN_NOTICE("You are now inside [charging]. Click on a hijacked APC to return."))
user.forceMove(charging)
/obj/machinery/recharge_station/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
user.forceMove(src)
if(!isrobot(occupant))
to_chat(user, "<span class='warning'>There is no silicon-based occupant inside. Click again to retry.</span>")
to_chat(user, SPAN_WARNING("There is no silicon-based occupant inside. Click again to retry."))
return
to_chat(user, "<span class='notice'>You are now attempting to hijack [occupant], this will take approximately [user.hijack_time / 10] seconds.</span>")
to_chat(user, SPAN_NOTICE("You are now attempting to hijack [occupant], this will take approximately [user.hijack_time / 10] seconds."))
var/mob/living/silicon/robot/R = occupant
if(R in user.hijacked_robots)
user.do_hijack_robot(occupant)
return
to_chat(R, "<span class='userdanger'>ALERT: ELECTRICAL MALEVOLENCE DETECTED, TARGETING SYSTEMS HIJACK IN PROGRESS</span>")
to_chat(R, SPAN_USERDANGER("ALERT: ELECTRICAL MALEVOLENCE DETECTED, TARGETING SYSTEMS HIJACK IN PROGRESS"))
if(!do_after(user, user.hijack_time, FALSE, src))
return
if(isrobot(occupant))
user.do_hijack_robot(occupant)
return
to_chat(src, "<span class='warning'>Failed to hijack [src].</span>")
to_chat(src, SPAN_WARNING("Failed to hijack [src]."))
/mob/living/basic/demon/pulse_demon/proc/do_hijack_robot(mob/living/silicon/robot/R)
to_chat(src, "<span class='notice'>You are now inside [R]. Click on a hijacked APC to return.</span>")
to_chat(src, SPAN_NOTICE("You are now inside [R]. Click on a hijacked APC to return."))
forceMove(R)
current_robot = R
if(!(R in hijacked_robots))
hijacked_robots += R
to_chat(R, "<span class='userdanger'>TARGETING SYSTEMS HIJACKED, REPORT ALL UNWANTED ACTIVITY</span>")
to_chat(R, SPAN_USERDANGER("TARGETING SYSTEMS HIJACKED, REPORT ALL UNWANTED ACTIVITY"))
/obj/machinery/camera/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
if(user.loc != src)
user.forceMove(src)
to_chat(user, "<span class='notice'>You jump towards [src]. Click on a hijacked APC to return.</span>")
to_chat(user, SPAN_NOTICE("You jump towards [src]. Click on a hijacked APC to return."))
// see pulse_demon/say
/obj/machinery/hologram/holopad/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
if(user.loc != src)
user.forceMove(src)
to_chat(user, "<span class='notice'>You jump towards [src]. You can now communicate via the holopad's speaker. Click on a hijacked APC to return.</span>")
to_chat(user, SPAN_NOTICE("You jump towards [src]. You can now communicate via the holopad's speaker. Click on a hijacked APC to return."))
/obj/item/radio/attack_pulsedemon(mob/living/basic/demon/pulse_demon/user)
if(user.loc != src)
user.forceMove(src)
to_chat(user, "<span class='notice'>You jump towards [src]. You can now communicate via radio. Click on a hijacked APC to return.</span>")
to_chat(user, SPAN_NOTICE("You jump towards [src]. You can now communicate via radio. Click on a hijacked APC to return."))
else
attack_ai(user)
@@ -228,7 +228,7 @@
var/turf/simulated/floor/F = A
// there was originally a 1% chance to break to lattice, but that doesn't help a pulse demon, so I don't see the point
F.break_tile_to_plating()
audible_message("<span class='danger'>[src] makes an excited booping sound.</span>")
audible_message(SPAN_DANGER("[src] makes an excited booping sound."))
/mob/living/simple_animal/bot/cleanbot/attack_integrated_pulsedemon(mob/living/basic/demon/pulse_demon/user, atom/A)
if(!on)
@@ -238,7 +238,7 @@
if(prob(50))
F.MakeSlippery(TURF_WET_WATER)
if(prob(50))
visible_message("<span class='warning'>Something flies out of [src]! It seems to be acting oddly.</span>")
visible_message(SPAN_WARNING("Something flies out of [src]! It seems to be acting oddly."))
if(!(locate(/obj/effect/decal/cleanable/blood/gibs) in F))
new /obj/effect/decal/cleanable/blood/gibs(F)
playsound(F, 'sound/effects/blobattack.ogg', 40, TRUE)
@@ -20,13 +20,13 @@
/mob/living/basic/demon/shadow/Login()
..()
var/list/L = list(
"<span class='deadsay'><font size=3><b>You are a shadow demon!</b></font></span>",
SPAN_DEADSAY("<font size=3><b>You are a shadow demon!</b></font>"),
"<b>You are a lethal ambush predator who thrives in the darkness, calling upon the shadows to heal your injured form and increase your speed.</b>",
"<b>Light is however your worst enemy and being exposed for too long will be fatal.</b>",
"<b>Striking your victims with your shadow grapple extinguishes any light sources around them. Striking items silences any light within them.</b>",
"<b>You can wrap your dead victims into a shadow cocoon which provides a shroud of darkness which tears away any light near it.</b>",
"<b><i>You do not remember anything of your past lives, nor will you remember anything about this one after your death.</i></b>",
"<br><span class='motd'>For more information, check the wiki page: [wiki_link("Shadow_Demon")]</span>"
"<br>[SPAN_MOTD("For more information, check the wiki page: [wiki_link("Shadow_Demon")]")]"
)
to_chat(src, chat_box_red(L.Join("<br>")))
@@ -37,7 +37,7 @@
if(lum_count > 0.2)
adjustBruteLoss(40 * damage_mod) // 10 seconds in light
SEND_SOUND(src, sound('sound/weapons/sear.ogg'))
to_chat(src, "<span class='biggerdanger'>The light scalds you!</span>")
to_chat(src, SPAN_BIGGERDANGER("The light scalds you!"))
else
adjustBruteLoss(-20)
@@ -56,16 +56,16 @@
return
if(wrapping)
to_chat(src, "<span class='notice'>We are already wrapping something.</span>")
to_chat(src, SPAN_NOTICE("We are already wrapping something."))
return
visible_message("<span class='danger'>[src] begins wrapping [target] in shadowy threads.</span>")
visible_message(SPAN_DANGER("[src] begins wrapping [target] in shadowy threads."))
wrapping = TRUE
if(!do_after(src, 4 SECONDS, FALSE, target = target))
wrapping = FALSE
return
target.visible_message("<span class='warning'><b>[src] envelops [target] into an ethereal cocoon, and darkness begins to creep from it.</b></span>")
target.visible_message(SPAN_WARNING("<b>[src] envelops [target] into an ethereal cocoon, and darkness begins to creep from it.</b>"))
var/obj/structure/shadowcocoon/C = new(get_turf(target))
target.extinguish_light() // may as well be safe
target.forceMove(C)
@@ -83,7 +83,7 @@
/mob/living/basic/demon/shadow/proc/check_block_shadow_crawl(block_time)
if(block_time == last_block_shadow_crawl)
/// it means 10 seconds passed from last shadow grapple shot and it didnt unset block_shadow_crawl
to_chat(src, "<span class='warning'>You feel good enough to use Shadow Crawl again.</span>")
to_chat(src, SPAN_WARNING("You feel good enough to use Shadow Crawl again."))
unblock_shadow_crawl()
/obj/structure/shadowcocoon
@@ -110,8 +110,8 @@
/obj/structure/shadowcocoon/examine(mob/user)
. = ..()
if(istype(user, /mob/living/basic/demon/shadow))
. += silent ? "<span class='notice'>The tendrils are idle and will not produce noise.</span>" : "<span class='notice'>The tendrils are agitated <b>and will occasionally produce noise to lure in more prey.</b></span>"
. += "<span class='notice'>Alt+Click to toggle whether [src] should produce noise to lure in victims.</span>"
. += silent ? SPAN_NOTICE("The tendrils are idle and will not produce noise.") : SPAN_NOTICE("The tendrils are agitated <b>and will occasionally produce noise to lure in more prey.</b>")
. += SPAN_NOTICE("Alt+Click to toggle whether [src] should produce noise to lure in victims.")
/obj/structure/shadowcocoon/process()
time_since_last_hallucination++
@@ -121,7 +121,7 @@
if(iswelder(to_darken) && length(to_darken.light_sources))
var/obj/item/weldingtool/welder_to_darken = to_darken
welder_to_darken.remove_fuel(welder_to_darken.reagents.get_reagent_amount("fuel"))
welder_to_darken.visible_message("<span class='notice'>The shadows swarm around and overwhelm the flame of [welder_to_darken].</span>")
welder_to_darken.visible_message(SPAN_NOTICE("The shadows swarm around and overwhelm the flame of [welder_to_darken]."))
return
if(istype(to_darken, /obj/item/flashlight/flare))
var/obj/item/flashlight/flare/flare_to_darken = to_darken
@@ -129,7 +129,7 @@
continue
flare_to_darken.turn_off()
flare_to_darken.fuel = 0
flare_to_darken.visible_message("<span class='notice'>[flare_to_darken] suddenly dims.</span>")
flare_to_darken.visible_message(SPAN_NOTICE("[flare_to_darken] suddenly dims."))
to_darken.extinguish_light()
if(!silent && time_since_last_hallucination >= rand(8, 12))
playsound(src, pick('sound/shadowdemon/shadowhalluc1.ogg', 'sound/shadowdemon/shadowhalluc2.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/boltsup.ogg', 'sound/shadowdemon/shadowhalluc3.ogg', get_sfx("bodyfall"), 'sound/weapons/egloves.ogg'), 50)
@@ -141,10 +141,10 @@
if(!isdemon(user))
return ..()
if(silent)
to_chat(user, "<span class='notice'>You twist and change your trapped victim in [src] to lure in more prey.</span>")
to_chat(user, SPAN_NOTICE("You twist and change your trapped victim in [src] to lure in more prey."))
silent = FALSE
return
to_chat(user, "<span class='notice'>The tendrils from [src] snap back to their orignal form.</span>")
to_chat(user, SPAN_NOTICE("The tendrils from [src] snap back to their orignal form."))
silent = TRUE
/obj/structure/shadowcocoon/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
@@ -153,7 +153,7 @@
playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/shadowcocoon/obj_destruction()
visible_message("<span class='danger'>[src] splits open, and the shadows dancing around it fade.</span>")
visible_message(SPAN_DANGER("[src] splits open, and the shadows dancing around it fade."))
return ..()
/obj/structure/shadowcocoon/Destroy()
@@ -54,7 +54,7 @@
mind.add_mind_objective(/datum/objective/demon_fluff)
messages.Add(mind.prepare_announce_objectives(FALSE))
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Slaughter_Demon)</span>")
messages.Add(SPAN_MOTD("For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Slaughter_Demon)"))
to_chat(src, chat_box_red(messages.Join("<br>")))
/obj/effect/decal/cleanable/blood/innards
@@ -104,7 +104,7 @@
spawn(5)
var/list/demon_candidates = SSghost_spawns.poll_candidates("Do you want to play as a slaughter demon?", ROLE_DEMON, TRUE, 10 SECONDS, source = /mob/living/basic/demon/slaughter/cult)
if(!length(demon_candidates))
visible_message("<span class='warning'>[src] disappears in a flash of red light!</span>")
visible_message(SPAN_WARNING("[src] disappears in a flash of red light!"))
qdel(src)
return
if(QDELETED(src)) // Just in case
@@ -112,7 +112,7 @@
var/mob/M = pick(demon_candidates)
var/mob/living/basic/demon/slaughter/cult/S = src
if(!M || !M.client)
visible_message("<span class='warning'>[src] disappears in a flash of red light!</span>")
visible_message(SPAN_WARNING("[src] disappears in a flash of red light!"))
qdel(src)
return
var/client/C = M.client
@@ -164,5 +164,5 @@
if(M.revive())
M.grab_ghost(force = TRUE)
playsound(get_turf(src), feast_sound, 50, TRUE, -1)
to_chat(M, "<span class='clown'>You leave [src]'s warm embrace, and feel ready to take on the world.</span>")
to_chat(M, SPAN_CLOWN("You leave [src]'s warm embrace, and feel ready to take on the world."))
..(M)
@@ -65,7 +65,7 @@
/mob/living/basic/giant_spider/proc/create_web()
var/T = loc
visible_message("<span class='notice'>[src] begins to secrete a sticky substance.</span>")
visible_message(SPAN_NOTICE("[src] begins to secrete a sticky substance."))
if(!do_after_once(src, 4 SECONDS, target = loc, attempt_cancel_message = "You stop spinning a web.", interaction_key = "spider_web_create"))
return
new /obj/structure/spider/stickyweb(T)
@@ -121,7 +121,7 @@
return
if(cocoon_target)
visible_message("<span class='notice'>[src] begins to secrete a sticky substance around [cocoon_target].</span>")
visible_message(SPAN_NOTICE("[src] begins to secrete a sticky substance around [cocoon_target]."))
if(!do_after_once(src, 5 SECONDS, target = cocoon_target, attempt_cancel_message = "You stop wrapping [cocoon_target].", interaction_key = "spider_web_wrap"))
return
if(cocoon_target && isturf(cocoon_target.loc) && get_dist(src, cocoon_target) <= 1)
@@ -149,7 +149,7 @@
C.pixel_x = L.pixel_x
C.pixel_y = L.pixel_y
fed++
visible_message("<span class='danger'>[src] sticks a proboscis into [L] and sucks a viscous substance out.</span>")
visible_message(SPAN_DANGER("[src] sticks a proboscis into [L] and sucks a viscous substance out."))
break
if(large_cocoon)
@@ -158,12 +158,12 @@
/mob/living/basic/giant_spider/nurse/proc/lay_spider_eggs()
var/obj/structure/spider/eggcluster/E = locate() in get_turf(src)
if(E)
to_chat(src, "<span class='notice'>There is already a cluster of eggs here!</span>")
to_chat(src, SPAN_NOTICE("There is already a cluster of eggs here!"))
return
if(!fed)
to_chat(src, "<span class='warning'>You are too hungry to do this!</span>")
to_chat(src, SPAN_WARNING("You are too hungry to do this!"))
return
visible_message("<span class='notice'>[src] begins to lay a cluster of eggs.</span>")
visible_message(SPAN_NOTICE("[src] begins to lay a cluster of eggs."))
if(!do_after_once(src, 4 SECONDS, target = loc, attempt_cancel_message = "You stop laying eggs.", interaction_key = "spider_egg_lay"))
return
var/obj/structure/spider/eggcluster/C = new /obj/structure/spider/eggcluster(loc)
@@ -69,13 +69,13 @@
var/mob/living/basic/gorilla/cargo_domestic/domesticated = gorilla
if(istype(domesticated) && LAZYLEN(domesticated.crates_in_hand))
to_chat(domesticated, "<span class='warning'>You can't get on all fours while carrying something!</span>")
to_chat(domesticated, SPAN_WARNING("You can't get on all fours while carrying something!"))
return
gorilla.is_bipedal = !gorilla.is_bipedal // Toggle
gorilla.visible_message("<span class='notice'>[gorilla] [gorilla.is_bipedal ? "stands up menacingly." : "drops back to all fours."]</span>",
"<span class='notice'>You [gorilla.is_bipedal ? "stand up" : "get down on all fours."]</span>",
"<span class='notice'>You hear the sound of a gorilla rustling.</span>")
gorilla.visible_message(SPAN_NOTICE("[gorilla] [gorilla.is_bipedal ? "stands up menacingly." : "drops back to all fours."]"),
SPAN_NOTICE("You [gorilla.is_bipedal ? "stand up" : "get down on all fours."]"),
SPAN_NOTICE("You hear the sound of a gorilla rustling."))
gorilla.update_icon(UPDATE_ICON_STATE)
@@ -103,13 +103,13 @@
if(is_type_in_typecache(attacked_target, carriable_cache))
var/atom/movable/movable_target = attacked_target
if(LAZYLEN(crates_in_hand) >= crate_limit)
to_chat(src, "<span class='warning'>You are carrying too many crates!</span>")
to_chat(src, SPAN_WARNING("You are carrying too many crates!"))
return COMPONENT_CANCEL_ATTACK_CHAIN
for(var/mob/living/inside_mob in movable_target.contents)
if(inside_mob.mob_size < MOB_SIZE_HUMAN)
continue
to_chat(src, "<span class='warning'>This crate is too heavy!</span>")
to_chat(src, SPAN_WARNING("This crate is too heavy!"))
return COMPONENT_CANCEL_ATTACK_CHAIN
LAZYADD(crates_in_hand, attacked_target)
@@ -143,7 +143,7 @@
return
living_target.apply_damage(stamina_damage, STAMINA)
visible_message("<span class='warning'>[src] knocks [living_target] down!</span>")
visible_message(SPAN_WARNING("[src] knocks [living_target] down!"))
/mob/living/basic/gorilla/update_icon_state()
. = ..()
@@ -216,8 +216,8 @@
/mob/living/basic/gorilla/cargo_domestic/Login()
. = ..()
// Github copilot wrote the below fluff IDK
to_chat(src, "<span class='boldnotice'>You are [name]. You are a domesticated gorilla, and you are Cargo's pet. You are a loyal and hardworking gorilla, and you love your job. You are a good gorilla, and Cargo loves you.</span>")
to_chat(src, "<span class='boldnotice'>You can pick up crates by clicking them, and drop them by clicking on an open floor. You can carry [crate_limit] crates at a time.</span>")
to_chat(src, SPAN_BOLDNOTICE("You are [name]. You are a domesticated gorilla, and you are Cargo's pet. You are a loyal and hardworking gorilla, and you love your job. You are a good gorilla, and Cargo loves you."))
to_chat(src, SPAN_BOLDNOTICE("You can pick up crates by clicking them, and drop them by clicking on an open floor. You can carry [crate_limit] crates at a time."))
/mob/living/basic/gorilla/cargo_domestic/Initialize(mapload)
. = ..()
@@ -74,12 +74,12 @@
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(5, FALSE, loc)
smoke.start()
visible_message("<span class='danger'>[src] warps in!</span>")
visible_message(SPAN_DANGER("[src] warps in!"))
playsound(src.loc, 'sound/effects/empulse.ogg', 25, 1)
/mob/living/basic/hivebot/tele/proc/warpbots()
icon_state = "def_radar"
visible_message("<span class='warning'>[src] turns on!</span>")
visible_message(SPAN_WARNING("[src] turns on!"))
while(bot_amt > 0)
bot_amt--
if(bot_amt > 3)
@@ -58,20 +58,20 @@
if(stat != DEAD)
var/list/msgs = list()
if(key)
msgs += "<span class='warning'>Its eyes have the spark of intelligence.</span>"
msgs += SPAN_WARNING("Its eyes have the spark of intelligence.")
if(health > (maxHealth*0.95))
msgs += "<span class='notice'>It appears to be in excellent health.</span>"
msgs += SPAN_NOTICE("It appears to be in excellent health.")
else if(health > (maxHealth*0.75))
msgs += "<span class='notice'>It has a few injuries.</span>"
msgs += SPAN_NOTICE("It has a few injuries.")
else if(health > (maxHealth*0.55))
msgs += "<span class='warning'>It has many injuries.</span>"
msgs += SPAN_WARNING("It has many injuries.")
else if(health > (maxHealth*0.25))
msgs += "<span class='warning'>It is covered in wounds!</span>"
msgs += SPAN_WARNING("It is covered in wounds!")
if(IS_HORIZONTAL(src))
if(getBruteLoss() || getFireLoss())
msgs += "<span class='warning'>It is currently licking its wounds, regenerating the damage to its body!</span>"
msgs += SPAN_WARNING("It is currently licking its wounds, regenerating the damage to its body!")
else
msgs += "<span class='notice'>It is currently resting.</span>"
msgs += SPAN_NOTICE("It is currently resting.")
. += msgs.Join("<BR>")
/mob/living/basic/hellhound/Move(atom/newloc, direct, glide_size_override, update_dir)
@@ -85,7 +85,7 @@
if(IS_HORIZONTAL(src))
if(life_regen_cycles >= life_regen_cycle_trigger)
life_regen_cycles = 0
to_chat(src, "<span class='notice'>You lick your wounds, helping them close.</span>")
to_chat(src, SPAN_NOTICE("You lick your wounds, helping them close."))
adjustBruteLoss(life_regen_amount)
adjustFireLoss(life_regen_amount)
else
@@ -191,7 +191,7 @@
// First, see if we can get the OG player. If not, choose from Dchat
var/mob/dead/observer/original_ghost = target.get_ghost()
if(original_ghost)
to_chat(original_ghost, "<span class='ghostalert'>You are being revived by otherworldly forces! Return to your body if you want to be revived!</span> (Verbs -> Ghost -> Re-enter corpse)")
to_chat(original_ghost, "[SPAN_GHOSTALERT("You are being revived by otherworldly forces! Return to your body if you want to be revived!")] (Verbs -> Ghost -> Re-enter corpse)")
window_flash(original_ghost.client)
SEND_SOUND(original_ghost, sound('sound/effects/genetics.ogg'))
if(do_after_once(src, 2 SECONDS, target = target, attempt_cancel_message = "You stop reanimating a corpse.", interaction_key = "reanimator_revive"))
@@ -199,12 +199,12 @@
reanimate(target)
/mob/living/basic/skeleton/incursion/reanimator/proc/reanimate(mob/living/carbon/human/H)
visible_message("<span class='warning'>[name] releases dark tendrils into the flesh of [H], morphing their corpse into a grotesque creature!</span>")
visible_message(SPAN_WARNING("[name] releases dark tendrils into the flesh of [H], morphing their corpse into a grotesque creature!"))
var/mob/living/basic/netherworld/blankbody/blank = new(H.loc)
blank.name = "[H]"
blank.desc = "It's [H], but [H.p_their()] flesh has an ashy texture, and [H.p_their()] face is featureless save an eerie smile."
blank.faction = faction.Copy()
visible_message("<span class='warning'>[blank] staggers to [H.p_their()] feet!</span>")
visible_message(SPAN_WARNING("[blank] staggers to [H.p_their()] feet!"))
blank.held_body = H
H.forceMove(blank)
var/mob/dead/observer/ghost = H.get_ghost(TRUE)
@@ -222,7 +222,7 @@
blank.key = chosen_ghost.key
blank.cancel_camera()
dust_if_respawnable(chosen_ghost)
to_chat(blank, "<span class='userdanger'>You have been raised by the dead to serve as a footsoldier in the incursion. Strike down your foes!</span>")
to_chat(blank, SPAN_USERDANGER("You have been raised by the dead to serve as a footsoldier in the incursion. Strike down your foes!"))
/obj/projectile/magic/necrotic_bolt
name = "necrotic bolt"
@@ -244,7 +244,7 @@
/datum/action/cooldown/mob_cooldown/summon_skulls/Activate(atom/target)
var/mob/living/summoner = target
if(!istype(summoner))
to_chat(target, "<span class='warning'>You are unable to summon skulls!</span>")
to_chat(target, SPAN_WARNING("You are unable to summon skulls!"))
return
for(var/i in 1 to 2)
@@ -122,7 +122,7 @@
return
essence = max(0, essence-amount)
if(!essence)
to_chat(src, "<span class='revendanger'>You feel your essence fraying!</span>")
to_chat(src, SPAN_REVENDANGER("You feel your essence fraying!"))
/mob/living/basic/revenant/say(message)
if(!message)
@@ -176,13 +176,13 @@
mind.wipe_memory() // someone kill this and give revenants their own minds please
SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
var/list/messages = list()
messages.Add("<span class='deadsay'><font size=3><b>You are a revenant.</b></font></span>")
messages.Add(SPAN_DEADSAY("<font size=3><b>You are a revenant.</b></font>"))
messages.Add("<b>Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.</b>")
messages.Add("<b>You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds.</b>")
messages.Add("<b>You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.</b>")
messages.Add("<b>To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities.</b>")
messages.Add("<b><i>You do not remember anything of your past lives, nor will you remember anything about this one after your death.</i></b>")
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Revenant)</span>")
messages.Add(SPAN_MOTD("For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Revenant)"))
SSticker.mode.traitors |= mind //Necessary for announcing
mind.add_mind_objective(/datum/objective/revenant)
@@ -214,15 +214,15 @@
if(!.)
return FALSE
to_chat(src, "<span class='revendanger'>NO! No... it's too late, you can feel your essence breaking apart...</span>")
to_chat(src, SPAN_REVENDANGER("NO! No... it's too late, you can feel your essence breaking apart..."))
notransform = TRUE
revealed = TRUE
invisibility = 0
playsound(src, 'sound/effects/screech.ogg', 100, TRUE)
visible_message("<span class='warning'>[src] lets out a waning screech as violet mist swirls around its dissolving body!</span>")
visible_message(SPAN_WARNING("[src] lets out a waning screech as violet mist swirls around its dissolving body!"))
icon_state = "revenant_draining"
animate(src, alpha = 0, time = 3 SECONDS)
visible_message("<span class='danger'>[src]'s body breaks apart into a fine pile of blue dust.</span>")
visible_message(SPAN_DANGER("[src]'s body breaks apart into a fine pile of blue dust."))
ghostize(GHOST_FLAGS_OBSERVE_ONLY)
name = "ectoplasm"
desc = "A pile of clumpy dust from a restless spirit"
@@ -236,8 +236,8 @@
return FINISH_ATTACK
if(istype(W, /obj/item/nullrod))
visible_message("<span class='warning'>[src] violently flinches!</span>", \
"<span class='revendanger'>As \the [W] passes through you, you feel your essence draining away!</span>")
visible_message(SPAN_WARNING("[src] violently flinches!"), \
SPAN_REVENDANGER("As \the [W] passes through you, you feel your essence draining away!"))
adjustBruteLoss(25) //hella effective
inhibited = TRUE
spawn(30)
@@ -250,13 +250,13 @@
return
var/turf/T = get_turf(src)
if(iswallturf(T))
to_chat(src, "<span class='revenwarning'>You cannot use abilities from inside of a wall.</span>")
to_chat(src, SPAN_REVENWARNING("You cannot use abilities from inside of a wall."))
return FALSE
if(inhibited)
to_chat(src, "<span class='revenwarning'>Your powers have been suppressed by nulling energy!</span>")
to_chat(src, SPAN_REVENWARNING("Your powers have been suppressed by nulling energy!"))
return FALSE
if(!change_essence_amount(essence_cost, 1))
to_chat(src, "<span class='revenwarning'>You lack the essence to use that ability.</span>")
to_chat(src, SPAN_REVENWARNING("You lack the essence to use that ability."))
return FALSE
return TRUE
@@ -268,9 +268,9 @@
essence_accumulated = max(0, essence_accumulated + essence_amt)
if(!silent)
if(essence_amt > 0)
to_chat(src, "<span class='revennotice'>Gained [essence_amt]E from [source].</span>")
to_chat(src, SPAN_REVENNOTICE("Gained [essence_amt]E from [source]."))
else
to_chat(src, "<span class='revenminor'>Lost [essence_amt]E from [source].</span>")
to_chat(src, SPAN_REVENMINOR("Lost [essence_amt]E from [source]."))
return TRUE
/mob/living/basic/revenant/proc/reveal(time)
@@ -280,10 +280,10 @@
invisibility = 0
incorporeal_move = NO_INCORPOREAL_MOVE
if(!unreveal_time)
to_chat(src, "<span class='revendanger'>You have been revealed!</span>")
to_chat(src, SPAN_REVENDANGER("You have been revealed!"))
unreveal_time = world.time + time
else
to_chat(src, "<span class='revenwarning'>You have been revealed!</span>")
to_chat(src, SPAN_REVENWARNING("You have been revealed!"))
unreveal_time = unreveal_time + time
update_spooky_icon()
@@ -292,10 +292,10 @@
return
notransform = TRUE
if(!unstun_time)
to_chat(src, "<span class='revendanger'>You cannot move!</span>")
to_chat(src, SPAN_REVENDANGER("You cannot move!"))
unstun_time = world.time + time
else
to_chat(src, "<span class='revenwarning'>You cannot move!</span>")
to_chat(src, SPAN_REVENWARNING("You cannot move!"))
unstun_time = unstun_time + time
update_spooky_icon()
@@ -373,7 +373,7 @@
/obj/item/ectoplasm/examine(mob/user)
. = ..()
. += "<span class='revennotice'>Lifeless ectoplasm, still faintly glimmering in the light. From what was once a spirit seeking revenge on the station.</span>"
. += SPAN_REVENNOTICE("Lifeless ectoplasm, still faintly glimmering in the light. From what was once a spirit seeking revenge on the station.")
#undef INVISIBILITY_REVENANT
#undef REVENANT_NAME_FILE
@@ -43,52 +43,52 @@
if(!castcheck(0))
return
if(draining)
to_chat(src, "<span class='revenwarning'>You are already siphoning the essence of a soul!</span>")
to_chat(src, SPAN_REVENWARNING("You are already siphoning the essence of a soul!"))
return
var/mob_UID = target.UID()
if(mob_UID in drained_mobs)
to_chat(src, "<span class='revenwarning'>[target]'s soul is dead and empty.</span>")
to_chat(src, SPAN_REVENWARNING("[target]'s soul is dead and empty."))
return
if(!target.stat)
to_chat(src, "<span class='revennotice'>This being's soul is too strong to harvest.</span>")
to_chat(src, SPAN_REVENNOTICE("This being's soul is too strong to harvest."))
if(prob(10))
to_chat(target, "You feel as if you are being watched.")
return
draining = TRUE
essence_drained = rand(15, 20)
to_chat(src, "<span class='revennotice'>You search for the soul of [target].</span>")
to_chat(src, SPAN_REVENNOTICE("You search for the soul of [target]."))
if(do_after(src, 10, 0, target = target)) //did they get deleted in that second?
if(target.ckey)
to_chat(src, "<span class='revennotice'>Their soul burns with intelligence.</span>")
to_chat(src, SPAN_REVENNOTICE("Their soul burns with intelligence."))
essence_drained += rand(20, 30)
if(target.stat != DEAD)
to_chat(src, "<span class='revennotice'>Their soul blazes with life!</span>")
to_chat(src, SPAN_REVENNOTICE("Their soul blazes with life!"))
essence_drained += rand(40, 50)
else
to_chat(src, "<span class='revennotice'>Their soul is weak and faltering.</span>")
to_chat(src, SPAN_REVENNOTICE("Their soul is weak and faltering."))
if(do_after(src, 20, 0, target = target)) //did they get deleted NOW?
switch(essence_drained)
if(1 to 30)
to_chat(src, "<span class='revennotice'>[target] will not yield much essence. Still, every bit counts.</span>")
to_chat(src, SPAN_REVENNOTICE("[target] will not yield much essence. Still, every bit counts."))
if(30 to 70)
to_chat(src, "<span class='revennotice'>[target] will yield an average amount of essence.</span>")
to_chat(src, SPAN_REVENNOTICE("[target] will yield an average amount of essence."))
if(70 to 90)
to_chat(src, "<span class='revennotice bold'>Such a feast! [target] will yield much essence to you.</span>")
if(90 to INFINITY)
to_chat(src, "<span class='revenbignotice'>Ah, the perfect soul. [target] will yield massive amounts of essence to you.</span>")
to_chat(src, SPAN_REVENBIGNOTICE("Ah, the perfect soul. [target] will yield massive amounts of essence to you."))
if(do_after(src, 20, 0, target = target)) //how about now
if(!target.stat)
to_chat(src, "<span class='revenwarning'>They are now powerful enough to fight off your draining.</span>")
to_chat(target, "<span class='boldannounceic'>You feel something tugging across your body before subsiding.</span>")
to_chat(src, SPAN_REVENWARNING("They are now powerful enough to fight off your draining."))
to_chat(target, SPAN_BOLDANNOUNCEIC("You feel something tugging across your body before subsiding."))
draining = FALSE
return //hey, wait a minute...
to_chat(src, "<span class='revenminor'>You begin siphoning essence from [target]'s soul.</span>")
to_chat(src, SPAN_REVENMINOR("You begin siphoning essence from [target]'s soul."))
if(target.stat != DEAD)
to_chat(target, "<span class='warning'>You feel a horribly unpleasant draining sensation as your grip on life weakens...</span>")
to_chat(target, SPAN_WARNING("You feel a horribly unpleasant draining sensation as your grip on life weakens..."))
icon_state = "revenant_draining"
reveal(27)
stun(27)
target.visible_message("<span class='warning'>[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray.</span>")
target.visible_message(SPAN_WARNING("[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray."))
target.Beam(src,icon_state="drain_life",icon='icons/effects/effects.dmi',time=26)
if(do_after(src, 30, 0, target)) //As one cannot prove the existance of ghosts, ghosts cannot prove the existance of the target they were draining.
change_essence_amount(essence_drained, 0, target)
@@ -96,22 +96,22 @@
essence_regen_cap += 25
perfectsouls += 1
to_chat(src, "<span class='revennotice bold'>The perfection of [target]'s soul has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].</span>")
to_chat(src, "<span class='revennotice'>[target]'s soul has been considerably weakened and will yield no more essence for the time being.</span>")
target.visible_message("<span class='warning'>[target] slumps onto the ground.</span>", \
"<span class='revenwarning'>Violets lights, dancing in your vision, getting clo--</span>")
to_chat(src, SPAN_REVENNOTICE("[target]'s soul has been considerably weakened and will yield no more essence for the time being."))
target.visible_message(SPAN_WARNING("[target] slumps onto the ground."), \
SPAN_REVENWARNING("Violets lights, dancing in your vision, getting clo--"))
drained_mobs.Add(mob_UID)
add_attack_logs(src, target, "revenant harvested soul")
target.death()
else
to_chat(src, "<span class='revenwarning'>[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken.</span>")
to_chat(src, SPAN_REVENWARNING("[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken."))
draining = 0
essence_drained = 0
if(target) //Wait, target is WHERE NOW?
target.visible_message("<span class='warning'>[target] slumps onto the ground.</span>", \
"<span class='revenwarning'>Violets lights, dancing in your vision, receding--</span>")
target.visible_message(SPAN_WARNING("[target] slumps onto the ground."), \
SPAN_REVENWARNING("Violets lights, dancing in your vision, receding--"))
return
else
to_chat(src, "<span class='revenwarning'>You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken.</span>")
to_chat(src, SPAN_REVENWARNING("You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken."))
draining = FALSE
essence_drained = 0
return
@@ -122,7 +122,7 @@
//Toggle night vision: lets the revenant toggle its night vision
/datum/spell/night_vision/revenant
base_cooldown = 0
message = "<span class='revennotice'>You toggle your night vision.</span>"
message = SPAN_REVENNOTICE("You toggle your night vision.")
action_icon_state = "r_nightvision"
action_background_icon_state = "bg_revenant"
@@ -149,8 +149,8 @@
cooldown_handler.revert_cast()
return
log_say("(REVENANT to [key_name(M)]) [msg]", user)
to_chat(user, "<span class='revennotice'><b>You transmit to [M]:</b> [msg]</span>")
to_chat(M, "<span class='revennotice'><b>An alien voice resonates from all around...</b></span><i> [msg]</I>")
to_chat(user, SPAN_REVENNOTICE("<b>You transmit to [M]:</b> [msg]"))
to_chat(M, "[SPAN_REVENNOTICE("<b>An alien voice resonates from all around...</b>")]<i> [msg]</I>")
/datum/spell/aoe/revenant
clothes_req = FALSE
@@ -179,7 +179,7 @@
/datum/spell/aoe/revenant/revert_cast(mob/user)
. = ..()
to_chat(user, "<span class='revennotice'>Your ability wavers and fails!</span>")
to_chat(user, SPAN_REVENNOTICE("Your ability wavers and fails!"))
var/mob/living/basic/revenant/R = user
R?.essence += cast_amount //refund the spell and reset
@@ -201,7 +201,7 @@
cooldown_handler.revert_cast()
return FALSE
name = "[initial(name)] ([cast_amount]E)"
to_chat(user, "<span class='revennotice'>You have unlocked [initial(name)]!</span>")
to_chat(user, SPAN_REVENNOTICE("You have unlocked [initial(name)]!"))
locked = FALSE
cooldown_handler.revert_cast()
return FALSE
@@ -241,7 +241,7 @@
/datum/spell/aoe/revenant/overload/proc/shock_lights(obj/machinery/light/L, mob/living/basic/revenant/user)
if(!L.on)
return
L.visible_message("<span class='warning'><b>\The [L] suddenly flares brightly and begins to spark!</b></span>")
L.visible_message(SPAN_WARNING("<b>\The [L] suddenly flares brightly and begins to spark!</b>"))
do_sparks(4, 0, L)
new /obj/effect/temp_visual/revenant(L.loc)
sleep(2 SECONDS)
@@ -428,7 +428,7 @@
return
/mob/living/carbon/human/rev_malfunction(cause_emp = TRUE)
to_chat(src, "<span class='warning'>You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")].</span>")
to_chat(src, SPAN_WARNING("You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")]."))
new /obj/effect/temp_visual/revenant(loc)
if(cause_emp)
emp_act(EMP_HEAVY)
@@ -488,7 +488,7 @@
magic_rust_turf()
/mob/living/carbon/human/defile()
to_chat(src, "<span class='warning'>You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].</span>")
to_chat(src, SPAN_WARNING("You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")]."))
apply_damage(60, STAMINA)
adjustToxLoss(5)
AdjustConfused(40 SECONDS, bound_lower = 0, bound_upper = 60 SECONDS)
@@ -72,7 +72,7 @@
S.key = C.key
dust_if_respawnable(C)
if(S.master_commander)
to_chat(S, "<span class='biggerdanger'>You are a spider who is loyal to [S.master_commander], obey [S.master_commander]'s every order and assist [S.master_commander.p_them()] in completing [S.master_commander.p_their()] goals at any cost.</span>")
to_chat(S, SPAN_BIGGERDANGER("You are a spider who is loyal to [S.master_commander], obey [S.master_commander]'s every order and assist [S.master_commander.p_them()] in completing [S.master_commander.p_their()] goals at any cost."))
qdel(src)
/mob/living/basic/spiderling/death(gibbed)
@@ -83,8 +83,8 @@
/mob/living/basic/spiderling/decompile_act(obj/item/matter_decompiler/C, mob/user)
if(isdrone(user))
return ..()
user.visible_message("<span class='notice'>[user] sucks [src] into its decompiler. There's a horrible crunching noise.</span>", \
"<span class='warning'>It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.</span>")
user.visible_message(SPAN_NOTICE("[user] sucks [src] into its decompiler. There's a horrible crunching noise."), \
SPAN_WARNING("It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises."))
C.stored_comms["metal"] += 2
C.stored_comms["glass"] += 1
playsound(src, 'sound/misc/demon_consume.ogg', 10, TRUE, SOUND_RANGE_SET(4))
@@ -118,11 +118,11 @@
/mob/living/basic/swarmer/melee_attack(atom/target, list/modifiers, ignore_cooldown)
face_atom(target)
if(is_type_in_list(target, GLOB.swarmer_blacklist))
to_chat(src, "<span class='warning'>Our sensors have designated this object important to station functionality or to our mission. Aborting.</span>")
to_chat(src, SPAN_WARNING("Our sensors have designated this object important to station functionality or to our mission. Aborting."))
ai_controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET)
return FALSE
if(HAS_TRAIT(target, TRAIT_SWARMER_DISINTEGRATING))
to_chat(src, "<span class='warning'>This asset is already being converted into useable resources. Aborting.</span>")
to_chat(src, SPAN_WARNING("This asset is already being converted into useable resources. Aborting."))
ai_controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET)
return FALSE
if(iswallturf(target))
@@ -141,7 +141,7 @@
return ..()
var/mob/living/L = target
if(istype(L, /mob/living/basic/swarmer))
to_chat(src, "<span class='warning'>We do not wish to harm one of our own. Aborting.</span>")
to_chat(src, SPAN_WARNING("We do not wish to harm one of our own. Aborting."))
ai_controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET)
return FALSE
if(L.stat == DEAD)
@@ -242,7 +242,7 @@
/mob/living/basic/swarmer/proc/disappear_mob(mob/target)
if(!is_station_level(z))
to_chat(src, "<span class='warning'>Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.</span>")
to_chat(src, SPAN_WARNING("Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area."))
return
var/turf/simulated/floor/F = find_safe_turf(zlevels = z)
@@ -262,10 +262,10 @@
var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
var/area/A = get_area(T)
if(isspaceturf(T) || istype(A, /area/shuttle) || istype(A, /area/space) || pressure_dangerlevel)
to_chat(src, "<span class='warning'>Destroying this object has the potential to cause a hull breach. Aborting.</span>")
to_chat(src, SPAN_WARNING("Destroying this object has the potential to cause a hull breach. Aborting."))
return TRUE
else if(istype(A, /area/station/engineering/engine/supermatter))
to_chat(src, "<span class='warning'>Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.</span>")
to_chat(src, SPAN_WARNING("Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting."))
return TRUE
return FALSE
@@ -11,18 +11,18 @@
/datum/action/cooldown/mob_cooldown/swarmer_trap/Activate(atom/target)
var/mob/living/basic/swarmer/user = target
if(!istype(user))
to_chat(target, "<span class='warning'>Incompatible hardware detected. Aborting.</span>")
to_chat(target, SPAN_WARNING("Incompatible hardware detected. Aborting."))
return
var/turf/T = get_turf(user)
for(var/turf/turf_in_view in view(1, T))
if(locate(/obj/structure/swarmer) in turf_in_view)
to_chat(user, "<span class='warning'>Location too close to existing hardware. Aborting.</span>")
to_chat(user, SPAN_WARNING("Location too close to existing hardware. Aborting."))
return
if(user.resources < 25)
to_chat(user, "<span class='warning'>Insufficient resources. Aborting.</span>")
to_chat(user, SPAN_WARNING("Insufficient resources. Aborting."))
return
user.resources -= 25
user.visible_message("<span class='warning'>[user] manufactures a sparking pylon.</span>")
user.visible_message(SPAN_WARNING("[user] manufactures a sparking pylon."))
playsound(get_turf(user), 'sound/machines/click.ogg', 50, TRUE)
new /obj/structure/swarmer/trap(T)
StartCooldown()
@@ -40,29 +40,29 @@
/datum/action/cooldown/mob_cooldown/swarmer_barrier/Activate(atom/target)
var/mob/living/basic/swarmer/user = target
if(!istype(user))
to_chat(target, "<span class='warning'>Incompatible hardware detected. Aborting.</span>")
to_chat(target, SPAN_WARNING("Incompatible hardware detected. Aborting."))
return
if(user.resources < 25)
to_chat(user, "<span class='warning'>Insufficient resources. Aborting.</span>")
to_chat(user, SPAN_WARNING("Insufficient resources. Aborting."))
return
var/turf/T = get_turf(user)
for(var/turf/turf_in_view in view(1, T))
if(locate(/obj/structure/swarmer) in turf_in_view)
to_chat(user, "<span class='warning'>Location too close to existing hardware. Aborting.</span>")
to_chat(user, SPAN_WARNING("Location too close to existing hardware. Aborting."))
return
if(!do_after_once(user, 2 SECONDS, target = T, attempt_cancel_message = "You stop building a barricade.", interaction_key = "swarmer_barricade_create"))
return
// Check again to make sure they still have the requirements
if(user.resources < 25)
to_chat(user, "<span class='warning'>Insufficient resources. Aborting.</span>")
to_chat(user, SPAN_WARNING("Insufficient resources. Aborting."))
return
T = get_turf(user)
for(var/turf/turf_in_view in view(1, T))
if(locate(/obj/structure/swarmer) in turf_in_view)
to_chat(user, "<span class='warning'>Location too close to existing hardware. Aborting.</span>")
to_chat(user, SPAN_WARNING("Location too close to existing hardware. Aborting."))
return
user.resources -= 25
user.visible_message("<span class='warning'>[user] manufactures a holographic shield.</span>")
user.visible_message(SPAN_WARNING("[user] manufactures a holographic shield."))
playsound(get_turf(user), 'sound/machines/click.ogg', 50, TRUE)
new /obj/structure/swarmer/barricade(T)
StartCooldown()
@@ -80,20 +80,20 @@
/datum/action/cooldown/mob_cooldown/swarmer_replicate/Activate(atom/target)
var/mob/living/basic/swarmer/user = target
if(!istype(user))
to_chat(target, "<span class='warning'>Incompatible hardware detected. Aborting.</span>")
to_chat(target, SPAN_WARNING("Incompatible hardware detected. Aborting."))
return
if(user.resources < 50)
to_chat(user, "<span class='warning'>Insufficient resources. Aborting.</span>")
to_chat(user, SPAN_WARNING("Insufficient resources. Aborting."))
return
if(!do_after_once(user, 4 SECONDS, target = user, attempt_cancel_message = "You stop building a new swarmer.", interaction_key = "swarmer_replicate_create"))
return
// Check again after the do-after.
if(user.resources < 50)
to_chat(user, "<span class='warning'>Insufficient resources. Aborting.</span>")
to_chat(user, SPAN_WARNING("Insufficient resources. Aborting."))
return
var/turf/T = get_turf(user)
user.resources -= 50
user.visible_message("<span class='warning'>[user] manufactures a new swarmer.</span>")
user.visible_message(SPAN_WARNING("[user] manufactures a new swarmer."))
playsound(get_turf(user), 'sound/items/rped.ogg', 50, TRUE)
new /mob/living/basic/swarmer/lesser(T)
StartCooldown()
@@ -27,6 +27,6 @@
new /obj/effect/temp_visual/goliath_tentacle(adjacent_target)
if(isliving(target))
owner.visible_message("<span class='warning'>[owner] digs its tentacles under [target]!</span>")
owner.visible_message(SPAN_WARNING("[owner] digs its tentacles under [target]!"))
StartCooldown()
return TRUE
@@ -37,7 +37,7 @@
for(var/mob/living/L in loc)
if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD)
continue
visible_message("<span class='danger'>[src] grabs hold of [L]!</span>")
visible_message(SPAN_DANGER("[src] grabs hold of [L]!"))
L.Stun(10 SECONDS)
L.adjustBruteLoss(rand(10,15))
latched = TRUE
@@ -84,7 +84,7 @@
/datum/status_effect/incapacitating/stun/goliath_tentacled/proc/on_helped(mob/source, mob/helping)
SIGNAL_HANDLER // COMSIG_CARBON_PRE_MISC_HELP
release()
source.visible_message("<span class='notice'>[helping] rips [source] from the tentacle's grasp!</span>")
source.visible_message(SPAN_NOTICE("[helping] rips [source] from the tentacle's grasp!"))
return COMPONENT_BLOCK_MISC_HELP
/// Something happened to make the tentacle let go
@@ -63,8 +63,8 @@
/mob/living/basic/mining_drone/emp_act(severity)
adjustHealth(100 / severity)
to_chat(src, "<span class='userdanger'>NOTICE: EMP detected, systems damaged!</span>")
visible_message("<span class='warning'>[src] crackles and buzzes violently!</span>")
to_chat(src, SPAN_USERDANGER("NOTICE: EMP detected, systems damaged!"))
visible_message(SPAN_WARNING("[src] crackles and buzzes violently!"))
/mob/living/basic/mining_drone/examine(mob/user)
. = ..()
@@ -72,24 +72,24 @@
var/t_s = p_s()
if(health < maxHealth)
if(health >= maxHealth * 0.5)
. += "<span class='warning'>[t_He] look[t_s] slightly dented.</span>"
. += SPAN_WARNING("[t_He] look[t_s] slightly dented.")
else
. += "<span class='boldwarning'>[t_He] look[t_s] severely dented!</span>"
. += SPAN_BOLDWARNING("[t_He] look[t_s] severely dented!")
var/ore_count = 0
for(var/obj/item/stack/ore/ore_stack in contents)
ore_count += ore_stack.amount
. += "<span class='notice'>[t_He] is currently storing [ore_count] ore.</span>"
. += SPAN_NOTICE("[t_He] is currently storing [ore_count] ore.")
if(stored_gun && stored_gun.max_mod_capacity)
. += "<span class='notice'><b>[stored_gun.get_remaining_mod_capacity()]%</b> mod capacity remaining.</span>"
. += SPAN_NOTICE("<b>[stored_gun.get_remaining_mod_capacity()]%</b> mod capacity remaining.")
for(var/A in stored_gun.get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
. += "<span class='notice'>There is \a [M] installed, using <b>[M.cost]%</b> capacity.</span>"
. += SPAN_NOTICE("There is \a [M] installed, using <b>[M.cost]%</b> capacity.")
/mob/living/basic/mining_drone/item_interaction(mob/living/user, obj/item/I, list/modifiers)
if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner))
to_chat(user, "<span class='notice'>You instruct [src] to drop any collected ore.</span>")
to_chat(user, SPAN_NOTICE("You instruct [src] to drop any collected ore."))
drop_ore()
return ITEM_INTERACT_COMPLETE
if(istype(I, /obj/item/borg/upgrade/modkit))
@@ -111,7 +111,7 @@
return
. = TRUE
if(health == maxHealth)
to_chat(user, "<span class='notice'>[src] doesn't need repairing!</span>")
to_chat(user, SPAN_NOTICE("[src] doesn't need repairing!"))
return
if(!I.tool_use_check(user, 1))
return
@@ -159,10 +159,10 @@
/mob/living/basic/mining_drone/proc/drop_ore(message = TRUE)
if(!length(contents))
if(message)
to_chat(src, "<span class='warning'>You attempt to dump your stored ore, but you have none.</span>")
to_chat(src, SPAN_WARNING("You attempt to dump your stored ore, but you have none."))
return
if(message)
to_chat(src, "<span class='notice'>You dump your stored ore.</span>")
to_chat(src, SPAN_NOTICE("You dump your stored ore."))
for(var/obj/item/stack/ore/O in contents)
O.forceMove(drop_location())
@@ -177,8 +177,8 @@
w_class = WEIGHT_CLASS_SMALL
/obj/item/mining_drone_cube/attack_self__legacy__attackchain(mob/user)
user.visible_message("<span class='warning'>\The [src] suddenly expands into a fully functional mining drone!</span>", \
"<span class='warning'>You press center button on [src]. The device suddenly expands into a fully functional mining drone!</span>")
user.visible_message(SPAN_WARNING("\The [src] suddenly expands into a fully functional mining drone!"), \
SPAN_WARNING("You press center button on [src]. The device suddenly expands into a fully functional mining drone!"))
var/mob/living/basic/mining_drone/drone = new(get_turf(src))
drone.befriend(user)
qdel(src)
@@ -14,7 +14,7 @@
else
user.set_light(6)
user.light_on = !user.light_on
to_chat(user, "<span class='notice'>You toggle your light [user.light_on ? "on" : "off"].</span>")
to_chat(user, SPAN_NOTICE("You toggle your light [user.light_on ? "on" : "off"]."))
/datum/action/innate/minedrone/toggle_meson_vision
name = "Toggle Meson Vision"
@@ -30,7 +30,7 @@
ADD_TRAIT(user, TRAIT_MESON_VISION, "minebot")
update_user_sight(user)
to_chat(user, "<span class='notice'>You toggle your meson vision [!active ? "on" : "off"].</span>")
to_chat(user, SPAN_NOTICE("You toggle your meson vision [!active ? "on" : "off"]."))
/datum/action/innate/minedrone/toggle_meson_vision/proc/update_user_sight(mob/living/user)
user.sight = initial(user.sight)
@@ -16,11 +16,11 @@
/obj/item/mine_bot_upgrade/proc/upgrade_bot(mob/living/basic/mining_drone/M, mob/user)
if(M.melee_damage_upper != initial(M.melee_damage_upper))
to_chat(user, "<span class='warning'>[M] already has a combat upgrade installed!</span>")
to_chat(user, SPAN_WARNING("[M] already has a combat upgrade installed!"))
return
M.melee_damage_lower += 7
M.melee_damage_upper += 7
to_chat(user, "<span class='notice'>You upgrade [M]'s combat module.</span>")
to_chat(user, SPAN_NOTICE("You upgrade [M]'s combat module."))
qdel(src)
/// Minebot Health Upgrade
@@ -29,11 +29,11 @@
/obj/item/mine_bot_upgrade/health/upgrade_bot(mob/living/basic/mining_drone/M, mob/user)
if(M.maxHealth != initial(M.maxHealth))
to_chat(user, "<span class='warning'>[M] already has a reinforced chassis!</span>")
to_chat(user, SPAN_WARNING("[M] already has a reinforced chassis!"))
return
M.maxHealth += 45
M.updatehealth()
to_chat(user, "<span class='notice'>You upgrade [M]'s chassis.</span>")
to_chat(user, SPAN_NOTICE("You upgrade [M]'s chassis."))
qdel(src)
/// Minebot AI upgrade/sentience potion
@@ -51,4 +51,4 @@
/mob/living/basic/mining/goldgrub/bullet_act(obj/projectile/P)
if(P.armor_penetration_flat + P.armor_penetration_percentage >= 100)
return ..()
visible_message("<span class='danger'>[P.name] was repelled by [name]'s girth!</span>")
visible_message(SPAN_DANGER("[P.name] was repelled by [name]'s girth!"))
@@ -40,5 +40,5 @@
/// Begin the chase to kill the mob in time
/datum/ai_behavior/burrow_away/proc/burrow(mob/living/pawn)
if(pawn.stat == CONSCIOUS)
pawn.visible_message("<span class='danger'>[pawn] buries into the ground, vanishing from sight!</span>")
pawn.visible_message(SPAN_DANGER("[pawn] buries into the ground, vanishing from sight!"))
qdel(pawn)
@@ -141,5 +141,5 @@
mind?.transfer_to(L)
L.faction = faction.Copy()
L.setDir(dir)
visible_message("<span class='notice'>[src] grows up into [L].</span>")
visible_message(SPAN_NOTICE("[src] grows up into [L]."))
qdel(src)
@@ -149,8 +149,8 @@
return ..()
/mob/living/basic/mining/hivelordbrood/blood/proc/reabsorb_host(mob/living/carbon/C)
C.visible_message("<span class='notice'>[src] is reabsorbed by [C]'s body.</span>", \
"<span class='notice'>[src] is reabsorbed by your body.</span>")
C.visible_message(SPAN_NOTICE("[src] is reabsorbed by [C]'s body."), \
SPAN_NOTICE("[src] is reabsorbed by your body."))
transfer_reagents(C)
death()
@@ -212,7 +212,7 @@
dwarf_mob = TRUE
/mob/living/basic/mining/hivelord/legion/death(gibbed)
visible_message("<span class='warning'>The skulls on [src] wail in anger as they flee from their dying host!</span>")
visible_message(SPAN_WARNING("The skulls on [src] wail in anger as they flee from their dying host!"))
var/turf/T = get_turf(src)
if(T)
if(stored_mob)
@@ -254,13 +254,13 @@
/mob/living/basic/mining/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H)
if(H?.dna?.species && !H.dna.species.can_be_legion_infested())
return
visible_message("<span class='warning'>[name] burrows into the flesh of [H]!</span>")
visible_message(SPAN_WARNING("[name] burrows into the flesh of [H]!"))
var/mob/living/basic/mining/hivelord/legion/L
if(HAS_TRAIT(H, TRAIT_DWARF)) // dwarf legions aren't just fluff!
L = new /mob/living/basic/mining/hivelord/legion/dwarf(H.loc)
else
L = new(H.loc)
visible_message("<span class='warning'>[L] staggers to [L.p_their()] feet!</span>")
visible_message(SPAN_WARNING("[L] staggers to [L.p_their()] feet!"))
H.death()
H.adjustBruteLoss(1000)
L.stored_mob = H
@@ -322,9 +322,9 @@
if(faction_check(faction, L.faction, FALSE))
continue
L.visible_message("<span class='danger'>[L] was thrown by [src]!</span>",
"<span class='userdanger'>You feel a strong force throwing you!</span>",
"<span class='danger'>You hear a thud.</span>")
L.visible_message(SPAN_DANGER("[L] was thrown by [src]!"),
SPAN_USERDANGER("You feel a strong force throwing you!"),
SPAN_DANGER("You hear a thud."))
var/atom/throw_target = get_edge_target_turf(L, get_dir(src, get_step_away(L, src)))
L.throw_at(throw_target, 4, 4)
var/limb_to_hit = L.get_organ(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
@@ -30,14 +30,14 @@
/mob/living/basic/mining/bullet_act(obj/projectile/P) // Reduces damage from most projectiles to curb off-screen kills
if(P.damage < 30 && P.damage_type != BRUTE && has_laser_resist)
P.damage = (P.damage / 3)
visible_message("<span class='danger'>[P] has a reduced effect on [src]!</span>")
visible_message(SPAN_DANGER("[P] has a reduced effect on [src]!"))
..()
/mob/living/basic/mining/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) // No floor tiling them to death, wiseguy
if(isitem(AM))
var/obj/item/T = AM
if(T.throwforce <= 20)
visible_message("<span class='notice'>[T] [throw_blocked_message] [src.name]!</span>")
visible_message(SPAN_NOTICE("[T] [throw_blocked_message] [src.name]!"))
return
..()
@@ -24,9 +24,9 @@
/mob/living/basic/possessed_object/examine(mob/user)
. = possessed_item.examine(user)
if(health > (maxHealth / 30))
. += "<span class='warning'>[src] appears to be floating without any support!</span>"
. += SPAN_WARNING("[src] appears to be floating without any support!")
else
. += "<span class='warning'>[src] appears to be having trouble staying afloat!</span>"
. += SPAN_WARNING("[src] appears to be having trouble staying afloat!")
/mob/living/basic/possessed_object/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect)
@@ -36,7 +36,7 @@
/mob/living/basic/possessed_object/start_pulling(atom/movable/AM, state, force = pull_force, show_message = FALSE) // Silly motherfuckers think they can pull things.
if(show_message)
to_chat(src, "<span class='warning'>You are unable to pull [AM]!</span>")
to_chat(src, SPAN_WARNING("You are unable to pull [AM]!"))
/mob/living/basic/possessed_object/ghost() // Ghosting will return the object to normal, and will not disqualify the ghoster from various mid-round antag positions.
@@ -79,27 +79,27 @@
drop_r_hand()
if(!isturf(loc) && prob(escape_chance)) //someone has stuffed us in their bag, or picked us up? Time to escape
visible_message("<span class='notice'>[src] refuses to be contained!</span>")
visible_message(SPAN_NOTICE("[src] refuses to be contained!"))
forceMove(get_turf(src))
if(possessed_item.loc != src) //safety so the item doesn't somehow become detatched from us while doing this
possessed_item.forceMove(src)
/mob/living/basic/possessed_object/Login()
..()
to_chat(src, "<span class='notice'><b>Your spirit has entered [src] and possessed it.</b><br>You are able to do most things a humanoid would be able to do with a [src] in their hands.<br>If you want to end your ghostly possession, use the '<b>ghost</b>' verb, it won't penalize your ability to respawn.</span>")
to_chat(src, SPAN_NOTICE("<b>Your spirit has entered [src] and possessed it.</b><br>You are able to do most things a humanoid would be able to do with a [src] in their hands.<br>If you want to end your ghostly possession, use the '<b>ghost</b>' verb, it won't penalize your ability to respawn."))
/mob/living/basic/possessed_object/Initialize(mapload)
. = ..()
if(!isitem(loc)) // Some silly motherfucker spawned us directly via the game panel.
message_admins("<span class='adminnotice'>Possessed object improperly spawned, deleting.</span>") // So silly admins with debug off will see the message too and not spam these things.
message_admins(SPAN_ADMINNOTICE("Possessed object improperly spawned, deleting.")) // So silly admins with debug off will see the message too and not spam these things.
stack_trace("[src] spawned manually, no object to assign attributes to.")
qdel(src)
var/turf/possessed_loc = get_turf(loc)
if(!istype(possessed_loc)) // Will this ever happen? Who goddamn knows.
message_admins("<span class='adminnotice'>Possessed object could not find turf, deleting.</span>") // So silly admins with debug off will see the message too and not spam these things.
message_admins(SPAN_ADMINNOTICE("Possessed object could not find turf, deleting.")) // So silly admins with debug off will see the message too and not spam these things.
stack_trace("[src] attempted to find a turf to spawn on, and could not.")
qdel(src)
@@ -115,7 +115,7 @@
melee_damage_lower = max(0, possessed_item.force - 5)
melee_damage_upper = possessed_item.force + 5
visible_message("<span class='notice'>[src] rises into the air and begins to float!</span>") // Inform those around us that shit's gettin' spooky.
visible_message(SPAN_NOTICE("[src] rises into the air and begins to float!")) // Inform those around us that shit's gettin' spooky.
animate_ghostly_presence(src, -1, 20, 1)
@@ -78,11 +78,11 @@
passive = !passive
ai_controller.set_blackboard_key(BB_MALF_DRONE_PASSIVE, passive)
if(passive)
visible_message("<span class='notice'>[src] retracts several targetting vanes.</span>")
visible_message(SPAN_NOTICE("[src] retracts several targetting vanes."))
advanced_bullet_dodge_chance = 0
ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, null)
else
visible_message("<span class='warning'>[src] suddenly lights up, and additional targetting vanes slide into place.</span>")
visible_message(SPAN_WARNING("[src] suddenly lights up, and additional targetting vanes slide into place."))
advanced_bullet_dodge_chance = 25
ai_controller.cancel_actions()
update_icons()
@@ -97,8 +97,8 @@
return NONE
source.visible_message(
"<span class='danger'>[source]'s jets [pick("boosts", "propels", "pulses", "flares up and moves", "shudders and pushes")] it out of '[hitting_projectile]'s way!</span>",
"<span class='userdanger'>You evade [hitting_projectile]!</span>",
SPAN_DANGER("[source]'s jets [pick("boosts", "propels", "pulses", "flares up and moves", "shudders and pushes")] it out of '[hitting_projectile]'s way!"),
SPAN_USERDANGER("You evade [hitting_projectile]!"),
)
playsound(source, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/effects/refill.ogg'), 75, TRUE)
if(prob(50))
@@ -59,7 +59,7 @@
var/rookick_dir = get_dir(src, L)
var/turf/general_direction = get_edge_target_turf(L, rookick_dir)
L.visible_message("<span class='danger'>[L] is kicked hard!</span>", "<span class='userdanger'>The kangaroo kick sends you flying mate!</span>")
L.visible_message(SPAN_DANGER("[L] is kicked hard!"), SPAN_USERDANGER("The kangaroo kick sends you flying mate!"))
L.throw_at(general_direction, 10, 2)
attack_verb_simple = initial(attack_verb_simple)