Merge branch 'master' into pr/600

This commit is contained in:
BongaTheProto
2023-01-16 02:31:47 -05:00
386 changed files with 4786 additions and 2514 deletions
@@ -111,18 +111,18 @@
if(isturf(user.loc))
toggle(user)
else
to_chat(user, "<span class='warning'>You can't use [src] while inside something!</span>")
to_chat(user, span_warning("You can't use [src] while inside something!"))
else
to_chat(user, "<span class='warning'>You need at least [activationCost] charge in your cell to use [src]!</span>")
to_chat(user, span_warning("You need at least [activationCost] charge in your cell to use [src]!"))
/obj/item/borg_shapeshifter/proc/toggle(mob/living/silicon/robot/user)
if(active)
playsound(src, 'sound/effects/pop.ogg', 100, TRUE, -6)
to_chat(user, "<span class='notice'>You deactivate \the [src].</span>")
to_chat(user, span_notice("You deactivate \the [src]."))
deactivate(user)
else
if(animation_playing)
to_chat(user, "<span class='notice'>\the [src] is recharging.</span>")
to_chat(user, span_notice("\the [src] is recharging."))
return
var/mob/living/silicon/robot/R = loc
var/static/list/module_icons = sortList(list(
@@ -574,7 +574,7 @@
return FALSE
animation_playing = TRUE
to_chat(user, "<span class='notice'>You activate \the [src].</span>")
to_chat(user, span_notice("You activate \the [src]."))
playsound(src, 'sound/effects/seedling_chargeup.ogg', 100, TRUE, -6)
var/start = user.filters.len
var/X,Y,rsq,i,f
@@ -591,10 +591,10 @@
animate(offset=f:offset-1, time=rand()*20+10)
if (do_after(user, 50, target=user) && user.cell.use(activationCost))
playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6)
to_chat(user, "<span class='notice'>You are now disguised as the Nanotrasen cyborg \"[friendlyName]\".</span>")
to_chat(user, span_notice("You are now disguised as the Nanotrasen cyborg \"[friendlyName]\"."))
activate(user, module_selection)
else
to_chat(user, "<span class='warning'>The chameleon field fizzles.</span>")
to_chat(user, span_warning("The chameleon field fizzles."))
do_sparks(3, FALSE, user)
for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first
f = user.filters[start+i]
@@ -656,7 +656,7 @@
/obj/item/borg_shapeshifter/proc/disrupt(mob/living/silicon/robot/user)
if(active)
to_chat(user, "<span class='danger'>Your chameleon field deactivates.</span>")
to_chat(user, span_danger("Your chameleon field deactivates."))
deactivate(user)
/obj/item/borg_shapeshifter/stable
@@ -86,7 +86,7 @@
var/mob/living/user = loc
if(F.gun)
if(isliving(user) && F.captured)
to_chat(user, "<span class='alert'><b>FAIL: <i>[F.captured]</i> already has an existing connection.</b></span>")
to_chat(user, span_alert("<b>FAIL: <i>[F.captured]</i> already has an existing connection.</b>"))
field_disconnect(F)
else
startpos = get_turf(src)
@@ -94,7 +94,7 @@
F.gun = src
if(isliving(user) && F.captured)
playsound(user,'sound/effects/clock_tick.ogg' , 50, 1)
to_chat(user, "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>")
to_chat(user, span_notice("Connection established with target: <b>[F.captured]</b>"))
/obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/structure/chrono_field/F)
@@ -104,7 +104,7 @@
F.gun = null
if(isliving(user) && F.captured)
F.captured.adjustOrganLoss(ORGAN_SLOT_BRAIN, 199, 199) //not so fast!
to_chat(user, "<span class='alert'>Disconnected from target: <b>[F.captured]</b></span>")
to_chat(user, span_alert("Disconnected from target: <b>[F.captured]</b>"))
field = null
startpos = null
@@ -215,9 +215,9 @@
AM.forceMove(drop_location())
qdel(src)
else if(tickstokill <= 0)
to_chat(captured, "<span class='boldnotice'>As the last essence of your being is erased from time, you are taken back to your most enjoyable memory. You feel happy...</span>")
to_chat(captured, span_boldnotice("As the last essence of your being is erased from time, you are taken back to your most enjoyable memory. You feel happy..."))
playsound(captured,'sound/effects/lingreadapt.ogg' , 50, 1)
captured.visible_message("<span class='danger'>[captured] dematerialises out of the timestream!</span>")
captured.visible_message(span_danger("[captured] dematerialises out of the timestream!"))
var/mob/dead/observer/ghost = captured.ghostize(1)
if(captured.mind)
if(ghost)
@@ -240,7 +240,7 @@
// me fail arithmetic, me brian hurt
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
if(difficulty == "Easy") // me fail arithmetic, me brian hurt //nice one, brain damage for it, very cool.
to_chat(user,"<span class='warning'>You feel sad after failing such an easy question...</span>")
to_chat(user,span_warning("You feel sad after failing such an easy question..."))
SEND_SIGNAL(LM, COMSIG_ADD_MOOD_EVENT, "failed_easy", /datum/mood_event/failed_easy)
return
@@ -4,7 +4,7 @@
/obj/item/razor/proc/new_hairstyle(mob/living/carbon/human/H, mob/user, mirror)
var/location = user.zone_selected
if (H == user && !mirror)
to_chat(user, "<span class='warning'>You need a mirror to properly style your own hair!</span>")
to_chat(user, span_warning("You need a mirror to properly style your own hair!"))
balloon_alert(user, "need mirror!")
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
@@ -13,12 +13,12 @@
if(!new_style)
return
if(!get_location_accessible(H, location))
to_chat(user, "<span class='warning'>The headgear is in the way!</span>")
to_chat(user, span_warning("The headgear is in the way!"))
balloon_alert(user, "headgear in the way!")
return
user.visible_message("<span class='notice'>[user] tries to change [H]'s hairstyle using [src].</span>", "<span class='notice'>You try to change [H]'s hairstyle using [src].</span>")
user.visible_message(span_notice("[user] tries to change [H]'s hairstyle using [src]."), span_notice("You try to change [H]'s hairstyle using [src]."))
if(new_style && do_after(user, 60, target = H))
user.visible_message("<span class='notice'>[user] successfully changes [H]'s hairstyle using [src].</span>", "<span class='notice'>You successfully change [H]'s hairstyle using [src].</span>")
user.visible_message(span_notice("[user] successfully changes [H]'s hairstyle using [src]."), span_notice("You successfully change [H]'s hairstyle using [src]."))
H.balloon_alert(user, "changed hairstyle")
H.hair_style = new_style
H.update_hair()
@@ -26,7 +26,7 @@
/obj/item/razor/proc/new_facial_hairstyle(mob/living/carbon/human/H, mob/user, var/mirror)
var/location = user.zone_selected
if(H == user && !mirror)
to_chat(user, "<span class='warning'>You need a mirror to properly style your own facial hair!</span>")
to_chat(user, span_warning("You need a mirror to properly style your own facial hair!"))
balloon_alert(user, "need mirror!")
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
@@ -35,12 +35,12 @@
if(!new_style)
return
if(!get_location_accessible(H, location))
to_chat(user, "<span class='warning'>The mask is in the way!</span>")
to_chat(user, span_warning("The mask is in the way!"))
balloon_alert(user, "mask in the way!")
return
user.visible_message("<span class='notice'>[user] tries to change [H]'s facial hair style using [src].</span>", "<span class='notice'>You try to change [H]'s facial hair style using [src].</span>")
user.visible_message(span_notice("[user] tries to change [H]'s facial hair style using [src]."), span_notice("You try to change [H]'s facial hair style using [src]."))
if(new_style && do_after(user, 60, target = H))
user.visible_message("<span class='notice'>[user] successfully changes [H]'s facial hair style using [src].</span>", "<span class='notice'>You successfully change [H]'s facial hair style using [src].</span>")
user.visible_message(span_notice("[user] successfully changes [H]'s facial hair style using [src]."), span_notice("You successfully change [H]'s facial hair style using [src]."))
H.balloon_alert(user, "changed facial hair style")
H.facial_hair_style = new_style
H.update_hair()
@@ -64,7 +64,7 @@
var/extended_icon_state = "straightrazor_open"
/obj/item/razor/straightrazor/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message(span_suicide("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return (BRUTELOSS)
/obj/item/razor/straightrazor/attack_self(mob/user)
@@ -102,6 +102,6 @@
/obj/item/handmirror/attack_self(mob/user)
ADD_TRAIT(user, TRAIT_SELF_AWARE, "mirror_trait")
to_chat(user, "<span class='notice'>You look into the mirror</span>")
to_chat(user, span_notice("You look into the mirror"))
sleep(15 SECONDS)
REMOVE_TRAIT(user, TRAIT_SELF_AWARE, "mirror_trait")
@@ -25,20 +25,20 @@
if(!hound || !istype(target) || !proximity || target.anchored)
return
if(length(contents) > (max_item_count - 1))
to_chat(user,"<span class='warning'>Your [src] is full. Eject or process contents to continue.</span>")
to_chat(user,span_warning("Your [src] is full. Eject or process contents to continue."))
return
if(isitem(target))
var/obj/item/I = target
if(CheckAccepted(I))
to_chat(user,"<span class='warning'>[I] registers an error code to your [src]</span>")
to_chat(user,span_warning("[I] registers an error code to your [src]"))
return
if(I.w_class > WEIGHT_CLASS_NORMAL)
to_chat(user,"<span class='warning'>[I] is too large to fit into your [src]</span>")
to_chat(user,span_warning("[I] is too large to fit into your [src]"))
return
user.visible_message("<span class='warning'>[hound.name] is ingesting [I] into their [src.name].</span>", "<span class='notice'>You start ingesting [target] into your [src.name]...</span>")
user.visible_message(span_warning("[hound.name] is ingesting [I] into their [src.name]."), span_notice("You start ingesting [target] into your [src.name]..."))
if(do_after(user, 15, target = target) && length(contents) < max_item_count)
I.forceMove(src)
I.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [I] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [I] slips inside.</span>")
I.visible_message(span_warning("[hound.name]'s garbage processor groans lightly as [I] slips inside."), span_notice("Your garbage compactor groans lightly as [I] slips inside."))
playsound(hound, 'sound/machines/disposalflush.ogg', 50, 1)
if(length(contents) > 11) //grow that tum after a certain junk amount
hound.sleeper_r = 1
@@ -51,18 +51,18 @@
if(iscarbon(target) || issilicon(target))
var/mob/living/trashman = target
if(!CHECK_BITFIELD(trashman.vore_flags,DEVOURABLE))
to_chat(user, "<span class='warning'>[target] registers an error code to your [src]</span>")
to_chat(user, span_warning("[target] registers an error code to your [src]"))
return
if(patient)
to_chat(user,"<span class='warning'>Your [src] is already occupied.</span>")
to_chat(user,span_warning("Your [src] is already occupied."))
return
if(trashman.buckled)
to_chat(user,"<span class='warning'>[trashman] is buckled and can not be put into your [src].</span>")
to_chat(user,span_warning("[trashman] is buckled and can not be put into your [src]."))
return
user.visible_message("<span class='warning'>[hound.name] is ingesting [trashman] into their [src].</span>", "<span class='notice'>You start ingesting [trashman] into your [src.name]...</span>")
user.visible_message(span_warning("[hound.name] is ingesting [trashman] into their [src]."), span_notice("You start ingesting [trashman] into your [src.name]..."))
if(do_after(user, 30, target = trashman) && !patient && !trashman.buckled && length(contents) < max_item_count)
trashman.forceMove(src)
trashman.reset_perspective(src)
update_gut(user)
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
user.visible_message(span_warning("[hound.name]'s garbage processor groans lightly as [trashman] slips inside."), span_notice("Your garbage compactor groans lightly as [trashman] slips inside."))
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
@@ -11,8 +11,8 @@
M.change_number_of_hands(limbs+1)
used = TRUE
icon_state = "extra_arm_none"
M.visible_message("<span class='notice'>[M] presses a button on [src], and you hear a disgusting noise.</span>", "<span class='notice'>You feel a sharp sting as [src] plunges into your body.</span>")
M.visible_message(span_notice("[M] presses a button on [src], and you hear a disgusting noise."), span_notice("You feel a sharp sting as [src] plunges into your body."))
M.balloon_alert(M, "arm implanted")
to_chat(M, "<span class='notice'>You feel more dexterous.</span>")
to_chat(M, span_notice("You feel more dexterous."))
playsound(get_turf(M), 'sound/misc/splort.ogg', 50, 1)
desc += "Looks like it's been used up."
@@ -20,7 +20,7 @@
/obj/item/fleshlight/examine(mob/user)
. = ..()
. += "<span class='notice'>Alt-Click \the [name] to customize it.</span>"
. += span_notice("Alt-Click \the [name] to customize it.")
/obj/item/fleshlight/update_appearance(updates)
. = ..()
@@ -61,7 +61,7 @@
message = (user == M) ? "pumps [src] on [possessive_verb] [genital_name]" : "pumps \the [src] on [M]'s [genital_name]"
lust_amt = NORMAL_LUST
if(message)
user.visible_message("<span class='lewd'>[user] [message].</span>")
user.visible_message(span_lewd("[user] [message]."))
M.handle_post_sex(lust_amt, null, user)
playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang4.ogg',
'modular_sand/sound/interactions/bang5.ogg',
@@ -107,9 +107,9 @@
/obj/item/portallight/examine(mob/user)
. = ..()
if(!portalunderwear)
. += "<span class='notice'>The device is unpaired. To pair, swipe against a pair of portal panties.</span>"
. += span_notice("The device is unpaired. To pair, swipe against a pair of portal panties.")
else
. += "<span class='notice'>The device is paired, and awaiting input. </span>"
. += span_notice("The device is paired, and awaiting input. ")
/obj/item/portallight/update_appearance(updates)
. = ..()
@@ -416,7 +416,7 @@
else
to_chat(user, "<span class='warning'>There is no [user.zone_selected == BODY_ZONE_R_LEG ? "right" : "left"] feet!</span>")
if(!useable)
to_chat(user, "<span class='notice'>It seems the device has failed or your partner is not wearing their device.</span>")
to_chat(user, span_notice("It seems the device has failed or your partner is not wearing their device."))
if(user_message)
if(portal_target && (portal_target?.client?.prefs.toggles & VERB_CONSENT || !portal_target.ckey))
user.visible_message("<span class='lewd'>[user] [user_message].</span>")
@@ -514,7 +514,7 @@
to_chat(M, "<span class='userlove'>urethra fleshlight cumming on dick</span>")
portal_target.do_jitter_animation() //make your partner shake too!
else
user.visible_message("<span class='warning'>\The [src] beeps and does not let [M] through.</span>")
user.visible_message(span_warning("\The [src] beeps and does not let [M] through."))
else if(user.a_intent == INTENT_HARM)
return ..()
@@ -607,7 +607,7 @@
if(isliving(portalunderwear.loc))
portalunderwear.audible_message("[icon2html(portalunderwear, hearers(portalunderwear))] *beep* *beep* *beep*")
playsound(portalunderwear, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
to_chat(portalunderwear.loc, "<span class='notice'>The panties beep as the link to the [src] is lost.</span>")
to_chat(portalunderwear.loc, span_notice("The panties beep as the link to the [src] is lost."))
. = ..()
/**
@@ -653,9 +653,9 @@
/obj/item/clothing/underwear/briefs/panties/portalpanties/examine(mob/user)
. = ..()
if(!portallight)
. += "<span class='notice'>The device is unpaired, to pair, swipe the fleshlight against this pair of portal panties(TM). </span>"
. += span_notice("The device is unpaired, to pair, swipe the fleshlight against this pair of portal panties(TM). ")
else
. += "<span class='notice'>The device is paired, and awaiting attachment. </span>"
. += span_notice("The device is paired, and awaiting attachment. ")
/obj/item/clothing/underwear/briefs/panties/portalpanties/attackby(obj/item/I, mob/living/user) //pairing
if(istype(I, /obj/item/portallight))
@@ -681,11 +681,11 @@
switch(targetting)
if(CUM_TARGET_VAGINA)
if(!human.has_vagina(REQUIRE_EXPOSED))
to_chat(human, "<span class='warning'>The vagina is covered or there is none!</span>")
to_chat(human, span_warning("The vagina is covered or there is none!"))
return FALSE
if(CUM_TARGET_ANUS)
if(!human.has_anus(REQUIRE_EXPOSED))
to_chat(human, "<span class='warning'>The anus is covered or there is none!</span>")
to_chat(human, span_warning("The anus is covered or there is none!"))
return FALSE
if(CUM_TARGET_PENIS)
if(!human.has_penis(REQUIRE_EXPOSED) && !human.has_strapon(REQUIRE_EXPOSED))
@@ -708,7 +708,7 @@
if(!portallight)
audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*")
playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
to_chat(user, "<span class='notice'>The panties are not linked to a portal fleshlight.</span>")
to_chat(user, span_notice("The panties are not linked to a portal fleshlight."))
else
update_portal()
RegisterSignal(user, COMSIG_PARENT_QDELETING, .proc/drop_out)
@@ -26,27 +26,27 @@
if (!targets_to_pick_from.len)
return
target = pick(targets_to_pick_from)
visible_message("<span class='notice'>[src] stares at [target].</span>")
visible_message(span_notice("[src] stares at [target]."))
if (world.time > cooldown && target)
ram()
/obj/item/toy/plush/goatplushie/angry/proc/ram()
if(prob((obj_flags & EMAGGED) ? 98:90) && isturf(loc) && considered_alive(target.mind) && !faction_check(list("goat"), target.faction, FALSE))
throw_at(target, 10, 10)
visible_message("<span class='danger'>[src] rams [target]!</span>")
visible_message(span_danger("[src] rams [target]!"))
cooldown = world.time + cooldown_modifier
target = null
visible_message("<span class='notice'>[src] looks disinterested.</span>")
visible_message(span_notice("[src] looks disinterested."))
/obj/item/toy/plush/goatplushie/angry/emag_act(mob/user)
if (obj_flags&EMAGGED)
visible_message("<span class='notice'>[src] already looks angry enough, you shouldn't anger it more.</span>")
visible_message(span_notice("[src] already looks angry enough, you shouldn't anger it more."))
return
cooldown_modifier = cooldown_modifier/2 * 0.75
throwforce = 12.5
force = 10
obj_flags |= EMAGGED
visible_message("<span class='danger'>[src] stares at [user] angrily before going docile.</span>")
visible_message(span_danger("[src] stares at [user] angrily before going docile."))
/obj/item/toy/plush/goatplushie/angry/Destroy()
STOP_PROCESSING(SSprocessing, src)
@@ -85,14 +85,14 @@
/obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat/attackby(obj/item/I,mob/living/user,params)
if(I.get_sharpness())
user.visible_message("<span class='notice'>[user] attempts to destroy [src]!</span>", "<span class='suicide'>[I] bounces off [src]'s back before breaking into millions of pieces... [src] glares at [user]!</span>") // You fucked up now son
user.visible_message(span_notice("[user] attempts to destroy [src]!"), span_suicide("[I] bounces off [src]'s back before breaking into millions of pieces... [src] glares at [user]!")) // You fucked up now son
I.play_tool_sound(src)
qdel(I)
user.gib()
/obj/item/toy/plush/goatplushie/angry/kinggoat/attackby(obj/item/I,mob/living/user,params)
if(I.get_sharpness())
user.visible_message("<span class='notice'>[user] rips [src] to shreds!</span>", "<span class='notice'>[src]'s death has attracted the attention of the king goat plushie guards!</span>")
user.visible_message(span_notice("[user] rips [src] to shreds!"), span_notice("[src]'s death has attracted the attention of the king goat plushie guards!"))
I.play_tool_sound(src)
qdel(src)
var/turf/location = get_turf(user)
@@ -109,7 +109,7 @@
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
if(istype(I, /obj/item/reagent_containers/food/snacks/grown/cabbage))
user.visible_message("<span class='notice'>[user] watches as [src] takes a bite out of the cabbage!</span>", "<span class='notice'>[src]'s fur starts glowing. It seems they have ascended!</span>")
user.visible_message(span_notice("[user] watches as [src] takes a bite out of the cabbage!"), span_notice("[src]'s fur starts glowing. It seems they have ascended!"))
playsound(src, 'sound/items/eatfood.ogg', 50, 1)
qdel(I)
qdel(src)
@@ -16,7 +16,7 @@
if(!XW)
XW = locate() in R.module
if(XW)
to_chat(user, "<span class='warning'>This unit is already equipped with an experimental welding tool module.</span>")
to_chat(user, span_warning("This unit is already equipped with an experimental welding tool module."))
return FALSE
XW = new(R.module)
qdel(WT)
@@ -83,7 +83,7 @@
if(!BD)
BD = locate() in R.module //There's gotta be a smarter way to do this.
if(BD)
to_chat(user, "<span class='warning'>This unit is already equipped with a BSRPD module.</span>")
to_chat(user, span_warning("This unit is already equipped with a BSRPD module."))
return FALSE
BD = new(R.module)
@@ -138,11 +138,11 @@
if(.)
if(R.hasExpanded)
to_chat(usr, "<span class='notice'>This unit already has an expand module installed!</span>")
to_chat(usr, span_notice("This unit already has an expand module installed!"))
return FALSE
if(R.hasShrunk)
to_chat(usr, "<span class='notice'>This unit already has an shrink module installed!</span>")
to_chat(usr, span_notice("This unit already has an shrink module installed!"))
return FALSE
if(ExpandSize <= 0)
@@ -184,11 +184,11 @@
if(.)
if(R.hasShrunk)
to_chat(usr, "<span class='notice'>This unit already has an shrink module installed!</span>")
to_chat(usr, span_notice("This unit already has an shrink module installed!"))
return FALSE
if(R.hasExpanded)
to_chat(usr, "<span class='notice'>This unit already has an expand module installed!</span>")
to_chat(usr, span_notice("This unit already has an expand module installed!"))
return FALSE
if(ShrinkSize == 0)
@@ -246,7 +246,7 @@
if(!shuttle_maker)
shuttle_maker = locate() in R.module
if(shuttle_maker)
to_chat(user, "<span class='warning'>This unit is already equipped with a rapid shuttle designator module.</span>")
to_chat(user, span_warning("This unit is already equipped with a rapid shuttle designator module."))
return FALSE
shuttle_maker = new(R.module)
R.module.basic_modules += shuttle_maker
@@ -39,4 +39,4 @@ GLOBAL_LIST_EMPTY(tile_reskin_lists)
/obj/item/stack/tile/examine(mob/user)
. = ..()
if(tile_reskin_types)
. += "<span class='notice'>These kinds of tiles can be re-skinned! Use it on hand to reskin.</span>"
. += span_notice("These kinds of tiles can be re-skinned! Use it on hand to reskin.")
@@ -36,7 +36,7 @@
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn, TRAIT_EXEMPT_HEALTH_EVENTS, GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn, TRAIT_NO_MIDROUND_ANTAG, GHOSTROLE_TRAIT) //The mob can't be made into a random antag, they are still eligible for ghost roles popups.
to_chat(new_spawn,"<span class='boldwarning'>Ghosting is free!</span>")
to_chat(new_spawn,span_boldwarning("Ghosting is free!"))
var/datum/action/toggle_dead_chat_mob/D = new(new_spawn)
D.Grant(new_spawn)
var/datum/action/disguise/disguise_action = new(new_spawn)
@@ -30,13 +30,13 @@
/obj/structure/tank_holder/examine(mob/user)
. = ..()
. += "<span class='notice'>It is held together by some <b>screws</b>.</span>"
. += span_notice("It is held together by some <b>screws</b>.")
/obj/structure/tank_holder/attackby(obj/item/W, mob/user, params)
if(user.a_intent == INTENT_HARM)
return ..()
if(!SEND_SIGNAL(W, COMSIG_CONTAINER_TRY_ATTACH, src, user))
to_chat(user, "<span class='warning'>[W] does not fit in [src].</span>")
to_chat(user, span_warning("[W] does not fit in [src]."))
/obj/structure/tank_holder/screwdriver_act(mob/living/user, obj/item/I)
if(..())
@@ -63,7 +63,7 @@
return ..()
if(!Adjacent(user) || issilicon(user))
return ..()
to_chat(user, "<span class='notice'>You take [tank] from [src].</span>")
to_chat(user, span_notice("You take [tank] from [src]."))
add_fingerprint(user)
tank.add_fingerprint(user)
user.put_in_hands(tank)