should be ready.
This commit is contained in:
@@ -80,7 +80,7 @@ GLOBAL_VAR(antag_prototypes)
|
||||
var/list/result = list()
|
||||
if(!current)
|
||||
result += "<span class='bad'>No body!</span>"
|
||||
if(current && current.has_trait(TRAIT_MINDSHIELD))
|
||||
if(current && HAS_TRAIT(current, TRAIT_MINDSHIELD))
|
||||
result += "<span class='good'>Mindshielded</span>"
|
||||
//Move these to mob
|
||||
if(iscyborg(current))
|
||||
|
||||
@@ -34,14 +34,14 @@
|
||||
deity = "Nar'Sie"
|
||||
else if(isliving(usr))
|
||||
var/mob/living/L = usr
|
||||
if(L.has_trait(TRAIT_SPIRITUAL))
|
||||
if(HAS_TRAIT(L, TRAIT_SPIRITUAL))
|
||||
cross.icon_state = "holylight"
|
||||
font_color = "blue"
|
||||
prayer_type = "SPIRITUAL PRAYER"
|
||||
|
||||
|
||||
var/msg_tmp = msg
|
||||
msg = "<span class='adminnotice'>[icon2html(cross, GLOB.admins)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""]: </font>[ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]:</b> <span class='linkify'>[msg]</span></span>"
|
||||
|
||||
|
||||
for(var/client/C in GLOB.admins)
|
||||
if(C.prefs.chat_toggles & CHAT_PRAYER)
|
||||
to_chat(C, msg)
|
||||
|
||||
@@ -272,10 +272,10 @@
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
owner.add_trait(TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
|
||||
owner.remove_trait(TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/electric/activate()
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
to_chat(owner.current, "We have reached our capacity for abilities.")
|
||||
return
|
||||
|
||||
if(owner.current.has_trait(TRAIT_DEATHCOMA))//To avoid potential exploits by buying new powers while in stasis, which clears your verblist.
|
||||
if(HAS_TRAIT(owner.current, TRAIT_DEATHCOMA))//To avoid potential exploits by buying new powers while in stasis, which clears your verblist.
|
||||
to_chat(owner.current, "We lack the energy to evolve new abilities right now.")
|
||||
return
|
||||
|
||||
@@ -239,7 +239,7 @@
|
||||
if(verbose)
|
||||
to_chat(user, "<span class='warning'>[target] is not compatible with our biology.</span>")
|
||||
return
|
||||
if((target.has_trait(TRAIT_NOCLONE)) || (target.has_trait(TRAIT_NOCLONE)))
|
||||
if((HAS_TRAIT(target, TRAIT_NOCLONE)) || (HAS_TRAIT(target, TRAIT_NOCLONE)))
|
||||
if(verbose)
|
||||
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
|
||||
return
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
if(req_stat < user.stat)
|
||||
to_chat(user, "<span class='warning'>We are incapacitated.</span>")
|
||||
return 0
|
||||
if((user.has_trait(TRAIT_DEATHCOMA)) && (!ignores_fakedeath))
|
||||
if((HAS_TRAIT(user, TRAIT_DEATHCOMA)) && (!ignores_fakedeath))
|
||||
to_chat(user, "<span class='warning'>We are incapacitated.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
RV.action.Grant(user)
|
||||
|
||||
/obj/effect/proc_holder/changeling/fakedeath/can_sting(mob/living/user)
|
||||
if(user.has_trait(TRAIT_DEATHCOMA, "changeling"))
|
||||
if(HAS_TRAIT_FROM(user, TRAIT_DEATHCOMA, "changeling"))
|
||||
to_chat(user, "<span class='warning'>We are already reviving.</span>")
|
||||
return
|
||||
if(!user.stat) //Confirmation for living changelings if they want to fake their death
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
action_background_icon_state = "bg_ling"
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_comms/sting_action(var/mob/living/user)
|
||||
if (user.has_trait(CHANGELING_HIVEMIND_MUTE))
|
||||
if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE))
|
||||
to_chat(user, "<span class='warning'>The poison in the air hinders our ability to interact with the hivemind.</span>")
|
||||
return
|
||||
var/input = html_decode(stripped_input(usr, "Please choose a message to transmit.", "Changeling Hivemind", ""))
|
||||
@@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(hivemind_bank)
|
||||
action_background_icon_state = "bg_ling"
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/living/user)
|
||||
if (user.has_trait(CHANGELING_HIVEMIND_MUTE))
|
||||
if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE))
|
||||
to_chat(user, "<span class='warning'>The poison in the air hinders our ability to interact with the hivemind.</span>")
|
||||
return
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
@@ -86,7 +86,7 @@ GLOBAL_LIST_EMPTY(hivemind_bank)
|
||||
/obj/effect/proc_holder/changeling/hivemind_download/can_sting(mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
if (user.has_trait(CHANGELING_HIVEMIND_MUTE))
|
||||
if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE))
|
||||
to_chat(user, "<span class='warning'>The poison in the air hinders our ability to interact with the hivemind.</span>")
|
||||
return
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
if(!.)
|
||||
return
|
||||
|
||||
if(user.has_trait(CHANGELING_DRAIN) || ((user.stat != DEAD) && !(user.has_trait(TRAIT_DEATHCOMA))))
|
||||
if(HAS_TRAIT(user, CHANGELING_DRAIN) || ((user.stat != DEAD) && !(HAS_TRAIT(user, TRAIT_DEATHCOMA))))
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
changeling.purchasedpowers -= src
|
||||
return FALSE
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(active)
|
||||
to_chat(user, "<span class='notice'>Our muscles tense and strengthen.</span>")
|
||||
else
|
||||
user.remove_trait(TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
to_chat(user, "<span class='notice'>Our muscles relax.</span>")
|
||||
if(stacks >= 10)
|
||||
to_chat(user, "<span class='danger'>We collapse in exhaustion.</span>")
|
||||
@@ -32,12 +32,12 @@
|
||||
|
||||
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
|
||||
while(active)
|
||||
user.add_trait(TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
ADD_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
|
||||
active = !active
|
||||
to_chat(user, "<span class='notice'>Our muscles relax without the energy to strengthen them.</span>")
|
||||
user.Knockdown(40)
|
||||
user.remove_trait(TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
break
|
||||
|
||||
stacks++
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
/obj/effect/proc_holder/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target)
|
||||
if(!..())
|
||||
return
|
||||
if((target.has_trait(TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits))
|
||||
if((HAS_TRAIT(target, TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>Our sting appears ineffective against its DNA.</span>")
|
||||
return 0
|
||||
return 1
|
||||
@@ -134,7 +134,7 @@
|
||||
return
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if((L.has_trait(TRAIT_HUSK)) || !L.has_dna())
|
||||
if((HAS_TRAIT(L, TRAIT_HUSK)) || !L.has_dna())
|
||||
to_chat(user, "<span class='warning'>Our sting appears ineffective against its DNA.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(src == H.glasses && !up)
|
||||
if(H.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(H, TRAIT_BLIND))
|
||||
to_chat(H, "<span class='heavy_brass'>\"You're blind, idiot. Stop embarrassing yourself.\"</span>")
|
||||
return
|
||||
if(blind_cultist(H))
|
||||
@@ -76,7 +76,7 @@
|
||||
..()
|
||||
if(slot != SLOT_GLASSES || up)
|
||||
return
|
||||
if(user.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(user, TRAIT_BLIND))
|
||||
to_chat(user, "<span class='heavy_brass'>\"You're blind, idiot. Stop embarrassing yourself.\"</span>" )
|
||||
return
|
||||
if(blind_cultist(user)) //Cultists instantly go blind
|
||||
@@ -115,11 +115,11 @@
|
||||
var/obj/item/clothing/glasses/wraith_spectacles/WS = L.glasses
|
||||
desc = "[glasses_right && !WS.up ? "<font color=#DAAA18><b>":""]You are [glasses_right ? "":"not "]wearing wraith spectacles[glasses_right && !WS.up ? "!</b></font>":"."]<br>\
|
||||
You have taken <font color=#DAAA18><b>[W.eye_damage_done]</b></font> eye damage from them.<br>"
|
||||
if(L.has_trait(TRAIT_NEARSIGHT))
|
||||
if(HAS_TRAIT(L, TRAIT_NEARSIGHT))
|
||||
desc += "<font color=#DAAA18><b>You are nearsighted!</b></font><br>"
|
||||
else if(glasses_right && !WS.up)
|
||||
desc += "You will become nearsighted at <font color=#DAAA18><b>[W.nearsight_breakpoint]</b></font> eye damage.<br>"
|
||||
if(L.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(L, TRAIT_BLIND))
|
||||
desc += "<font color=#DAAA18><b>You are blind!</b></font>"
|
||||
else if(glasses_right && !WS.up)
|
||||
desc += "You will become blind at <font color=#DAAA18><b>[W.blind_breakpoint]</b></font> eye damage."
|
||||
@@ -153,18 +153,18 @@
|
||||
qdel(src)
|
||||
|
||||
/datum/status_effect/wraith_spectacles/proc/apply_eye_damage(mob/living/carbon/human/H)
|
||||
if(H.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(H, TRAIT_BLIND))
|
||||
return
|
||||
H.adjust_eye_damage(0.5)
|
||||
eye_damage_done += 0.5
|
||||
if(eye_damage_done >= 20)
|
||||
H.adjust_blurriness(2)
|
||||
if(eye_damage_done >= nearsight_breakpoint)
|
||||
if(!H.has_trait(TRAIT_NEARSIGHT))
|
||||
if(!HAS_TRAIT(H, TRAIT_NEARSIGHT))
|
||||
to_chat(H, "<span class='nzcrentr'>Your vision doubles, then trembles. Darkness begins to close in. You can't keep this up!</span>")
|
||||
H.become_nearsighted(EYE_DAMAGE)
|
||||
if(eye_damage_done >= blind_breakpoint)
|
||||
if(!H.has_trait(TRAIT_BLIND))
|
||||
if(!HAS_TRAIT(H, TRAIT_BLIND))
|
||||
to_chat(H, "<span class='nzcrentr_large'>A piercing white light floods your vision. Suddenly, all goes dark!</span>")
|
||||
H.become_blind(EYE_DAMAGE)
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
if(!(BI.resistance_flags & ON_FIRE))
|
||||
BI.fire_act()
|
||||
continue
|
||||
if(is_servant_of_ratvar(L) || (L.has_trait(TRAIT_BLIND)) || L.anti_magic_check(TRUE, TRUE))
|
||||
if(is_servant_of_ratvar(L) || (HAS_TRAIT(L, TRAIT_BLIND)) || L.anti_magic_check(TRUE, TRUE))
|
||||
continue
|
||||
if(L.stat || L.lying)
|
||||
continue
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
var/mob/living/carbon/human/H = current
|
||||
H.eye_color = initial(H.eye_color)
|
||||
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
||||
H.remove_trait(CULT_EYES)
|
||||
REMOVE_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist")
|
||||
H.update_body()
|
||||
H.cut_overlays()
|
||||
H.regenerate_icons()
|
||||
@@ -225,7 +225,7 @@
|
||||
var/mob/living/carbon/human/H = current
|
||||
H.eye_color = initial(H.eye_color)
|
||||
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
||||
H.remove_trait(CULT_EYES)
|
||||
REMOVE_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist")
|
||||
H.cut_overlays()
|
||||
H.regenerate_icons()
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
var/mob/living/carbon/human/H = cultist
|
||||
H.eye_color = "f00"
|
||||
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
||||
H.add_trait(CULT_EYES)
|
||||
ADD_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist")
|
||||
H.update_body()
|
||||
|
||||
/datum/team/cult/proc/ascend(cultist)
|
||||
|
||||
@@ -123,7 +123,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
continue
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if((H.has_trait(TRAIT_MUTE)) || H.silent)
|
||||
if((HAS_TRAIT(H, TRAIT_MUTE)) || H.silent)
|
||||
continue
|
||||
if(L.stat)
|
||||
continue
|
||||
@@ -250,14 +250,14 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
currentconversionman = convertee
|
||||
conversiontimeout = world.time + (10 SECONDS)
|
||||
convertee.Stun(100)
|
||||
convertee.add_trait(TRAIT_MUTE, "conversionrune")
|
||||
ADD_TRAIT(convertee, TRAIT_MUTE, "conversionrune")
|
||||
conversionresult = FALSE
|
||||
while(world.time < conversiontimeout && convertee && !conversionresult)
|
||||
stoplag(1)
|
||||
currentconversionman = null
|
||||
if(!convertee)
|
||||
return FALSE
|
||||
convertee.remove_trait(TRAIT_MUTE, "conversionrune")
|
||||
REMOVE_TRAIT(convertee, TRAIT_MUTE, "conversionrune")
|
||||
if(get_turf(convertee) != get_turf(src))
|
||||
return FALSE
|
||||
if(!conversionresult)
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
/datum/antagonist/highlander/apply_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/L = owner.current || mob_override
|
||||
L.add_trait(TRAIT_NOGUNS, "highlander")
|
||||
ADD_TRAIT(L, TRAIT_NOGUNS, "highlander")
|
||||
|
||||
/datum/antagonist/highlander/remove_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/L = owner.current || mob_override
|
||||
L.remove_trait(TRAIT_NOGUNS, "highlander")
|
||||
REMOVE_TRAIT(L, TRAIT_NOGUNS, "highlander")
|
||||
|
||||
/datum/antagonist/highlander/proc/forge_objectives()
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
if(M == user)
|
||||
to_chat(user,"<span class='warning'>You cannot convert yourself!</span>")
|
||||
return
|
||||
if(M.has_trait(TRAIT_MINDSHIELD))
|
||||
if(HAS_TRAIT(M, TRAIT_MINDSHIELD))
|
||||
to_chat(user, "<span class='danger'>This mind is too strong to convert, try to remove whatever is protecting it first!</span>")
|
||||
return
|
||||
M.visible_message("<span class='warning'>[user] is attempting to implant [M].</span>")
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
return FALSE
|
||||
if(new_owner.unconvertable)
|
||||
return FALSE
|
||||
if(new_owner.current && new_owner.current.has_trait(TRAIT_MINDSHIELD))
|
||||
if(new_owner.current && HAS_TRAIT(new_owner.current, TRAIT_MINDSHIELD))
|
||||
return FALSE
|
||||
|
||||
/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
holder.update_icon()
|
||||
|
||||
/obj/item/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
flash_carbon(user, user, 15, 0)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(!armed)
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50))
|
||||
if((HAS_TRAIT(user, TRAIT_DUMB) || HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
|
||||
to_chat(user, "<span class='warning'>Your hand slips, setting off the trigger!</span>")
|
||||
pulse(FALSE)
|
||||
update_icon()
|
||||
@@ -38,7 +38,7 @@
|
||||
var/obj/item/bodypart/affecting = null
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.has_trait(TRAIT_PIERCEIMMUNE))
|
||||
if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE))
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, TRUE)
|
||||
armed = FALSE
|
||||
update_icon()
|
||||
@@ -70,7 +70,7 @@
|
||||
if(!armed)
|
||||
to_chat(user, "<span class='notice'>You arm [src].</span>")
|
||||
else
|
||||
if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50))
|
||||
if((HAS_TRAIT(user, TRAIT_DUMB) || HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
|
||||
var/which_hand = BODY_ZONE_PRECISE_L_HAND
|
||||
if(!(user.active_hand_index % 2))
|
||||
which_hand = BODY_ZONE_PRECISE_R_HAND
|
||||
@@ -87,7 +87,7 @@
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/item/assembly/mousetrap/attack_hand(mob/living/carbon/human/user)
|
||||
if(armed)
|
||||
if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50))
|
||||
if((HAS_TRAIT(user, TRAIT_DUMB) || HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
|
||||
var/which_hand = BODY_ZONE_PRECISE_L_HAND
|
||||
if(!(user.active_hand_index % 2))
|
||||
which_hand = BODY_ZONE_PRECISE_R_HAND
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
/obj/item/clothing/glasses/proc/thermal_overload()
|
||||
if(ishuman(src.loc))
|
||||
var/mob/living/carbon/human/H = src.loc
|
||||
if(!(H.has_trait(TRAIT_BLIND)))
|
||||
if(!(HAS_TRAIT(H, TRAIT_BLIND)))
|
||||
if(H.glasses == src)
|
||||
to_chat(H, "<span class='danger'>[src] overloads and blinds you!</span>")
|
||||
H.flash_act(visual = 1)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
var/obj/item/organ/heart/heart = M.getorganslot(ORGAN_SLOT_HEART)
|
||||
var/obj/item/organ/lungs/lungs = M.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
|
||||
if(!(M.stat == DEAD || (M.has_trait(TRAIT_FAKEDEATH))))
|
||||
if(!(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH))))
|
||||
if(heart && istype(heart))
|
||||
heart_strength = "<span class='danger'>an unstable</span>"
|
||||
if(heart.beating)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!(H.has_trait(TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown"))
|
||||
if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown"))
|
||||
return
|
||||
if(slot == SLOT_SHOES)
|
||||
spells = new
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if(H.has_trait(TRAIT_VIRUSIMMUNE)) //Don't pick someone who's virus immune, only for it to not do anything.
|
||||
if(HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) //Don't pick someone who's virus immune, only for it to not do anything.
|
||||
continue
|
||||
var/foundAlready = FALSE // don't infect someone that already has a disease
|
||||
for(var/thing in H.diseases)
|
||||
@@ -51,7 +51,7 @@
|
||||
var/datum/disease/D
|
||||
if(!advanced_virus)
|
||||
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
|
||||
if(!H.dna || (H.has_trait(TRAIT_BLIND))) //A blindness disease would be the worst.
|
||||
if(!H.dna || (HAS_TRAIT(H, TRAIT_BLIND))) //A blindness disease would be the worst.
|
||||
continue
|
||||
D = new virus_type()
|
||||
var/datum/disease/dnaspread/DS = D
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
if(M == user)
|
||||
user.visible_message("<span class='notice'>[user] swallows a gulp of [src].</span>", "<span class='notice'>You swallow a gulp of [src].</span>")
|
||||
if(M.has_trait(TRAIT_VORACIOUS))
|
||||
if(HAS_TRAIT(M, TRAIT_VORACIOUS))
|
||||
M.changeNext_move(CLICK_CD_MELEE * 0.5) //chug! chug! chug!
|
||||
|
||||
else
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
if(user.a_intent != INTENT_HARM || !isGlass)
|
||||
return ..()
|
||||
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm [target]!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(last_check_time + 50 < world.time)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.has_trait(TRAIT_AGEUSIA))
|
||||
if(!HAS_TRAIT(H, TRAIT_AGEUSIA))
|
||||
if(foodtype & H.dna.species.toxic_food)
|
||||
to_chat(H,"<span class='warning'>What the hell was that thing?!</span>")
|
||||
H.adjust_disgust(25 + 30 * fraction)
|
||||
|
||||
@@ -112,7 +112,7 @@ All foods are distributed among various categories. Use common sense.
|
||||
else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
user.visible_message("<span class='warning'>[user] cannot force any more of \the [src] to go down [user.p_their()] throat!</span>", "<span class='danger'>You cannot force any more of \the [src] to go down your throat!</span>")
|
||||
return 0
|
||||
if(M.has_trait(TRAIT_VORACIOUS))
|
||||
if(HAS_TRAIT(M, TRAIT_VORACIOUS))
|
||||
M.changeNext_move(CLICK_CD_MELEE * 0.5) //nom nom nom
|
||||
else
|
||||
if(!isbrain(M)) //If you're feeding it to someone else.
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if(last_check_time + 50 < world.time)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.mind && H.mind.assigned_role == "Security Officer" || H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Warden" || H.mind.assigned_role == "Head of Security" && !H.has_trait(TRAIT_AGEUSIA))
|
||||
if(H.mind && H.mind.assigned_role == "Security Officer" || H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Warden" || H.mind.assigned_role == "Head of Security" && !HAS_TRAIT(H, TRAIT_AGEUSIA))
|
||||
to_chat(H,"<span class='notice'>I love this taste!</span>")
|
||||
H.adjust_disgust(-5 + -2.5 * fraction)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.gloves)
|
||||
return FALSE
|
||||
if(C.has_trait(TRAIT_PIERCEIMMUNE))
|
||||
if(HAS_TRAIT(C, TRAIT_PIERCEIMMUNE))
|
||||
return FALSE
|
||||
var/hit_zone = (C.held_index_to_dir(C.active_hand_index) == "l" ? "l_":"r_") + "arm"
|
||||
var/obj/item/bodypart/affecting = C.get_bodypart(hit_zone)
|
||||
|
||||
@@ -222,9 +222,9 @@
|
||||
to_chat(user, "<span class='warning'>You feel your life being drained by the pendant...</span>")
|
||||
if(do_after(user, 40, target = user))
|
||||
to_chat(user, "<span class='notice'>Your lifeforce is now linked to the pendant! You feel like removing it would kill you, and yet you instinctively know that until then, you won't die.</span>")
|
||||
user.add_trait(TRAIT_NODEATH, "memento_mori")
|
||||
user.add_trait(TRAIT_NOHARDCRIT, "memento_mori")
|
||||
user.add_trait(TRAIT_NOCRITDAMAGE, "memento_mori")
|
||||
ADD_TRAIT(user, TRAIT_NODEATH, "memento_mori")
|
||||
ADD_TRAIT(user, TRAIT_NOHARDCRIT, "memento_mori")
|
||||
ADD_TRAIT(user, TRAIT_NOCRITDAMAGE, "memento_mori")
|
||||
icon_state = "memento_mori_active"
|
||||
active_owner = user
|
||||
|
||||
@@ -662,7 +662,7 @@
|
||||
playsound(user, 'sound/magic/clockwork/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000))
|
||||
|
||||
/obj/item/melee/transforming/cleaving_saw/clumsy_transform_effect(mob/living/user)
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
|
||||
user.take_bodypart_damage(10)
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/handle_blood()
|
||||
if(bodytemperature >= TCRYO && !(has_trait(TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood.
|
||||
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood.
|
||||
//Blood regeneration if there is some space
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
blood_volume += 0.1 // regenerate blood VERY slowly
|
||||
@@ -30,10 +30,10 @@
|
||||
bleed_rate = 0
|
||||
return
|
||||
|
||||
if(bodytemperature >= TCRYO && !(has_trait(TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood.
|
||||
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood.
|
||||
|
||||
//Blood regeneration if there is some space
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL && !has_trait(TRAIT_NOHUNGER))
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL && !HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
var/nutrition_ratio = 0
|
||||
switch(nutrition)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
@@ -69,7 +69,7 @@
|
||||
Unconscious(rand(20,60))
|
||||
to_chat(src, "<span class='warning'>You feel extremely [word].</span>")
|
||||
if(-INFINITY to BLOOD_VOLUME_SURVIVE)
|
||||
if(!has_trait(TRAIT_NODEATH))
|
||||
if(!HAS_TRAIT(src, TRAIT_NODEATH))
|
||||
death()
|
||||
|
||||
var/temp_bleed = 0
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases
|
||||
|
||||
if(bleed_rate && !bleedsuppress && !(has_trait(TRAIT_FAKEDEATH)))
|
||||
if(bleed_rate && !bleedsuppress && !(HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||
bleed(bleed_rate)
|
||||
|
||||
//Makes a blood drop, leaking amt units of blood from the mob
|
||||
@@ -214,13 +214,13 @@
|
||||
return "blood"
|
||||
|
||||
/mob/living/carbon/monkey/get_blood_id()
|
||||
if(!(has_trait(TRAIT_NOCLONE)))
|
||||
if(!(HAS_TRAIT(src, TRAIT_NOCLONE)))
|
||||
return "blood"
|
||||
|
||||
/mob/living/carbon/human/get_blood_id()
|
||||
if(dna.species.exotic_blood)
|
||||
return dna.species.exotic_blood
|
||||
else if((NOBLOOD in dna.species.species_traits) || (has_trait(TRAIT_NOCLONE)))
|
||||
else if((NOBLOOD in dna.species.species_traits) || (HAS_TRAIT(src, TRAIT_NOCLONE)))
|
||||
return
|
||||
return "blood"
|
||||
|
||||
|
||||
@@ -42,13 +42,13 @@
|
||||
INVOKE_ASYNC(is_devil(src), /datum/antagonist/devil.proc/beginResurrectionCheck, src)
|
||||
|
||||
/mob/living/carbon/human/proc/makeSkeleton()
|
||||
add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
ADD_TRAIT(src, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
set_species(/datum/species/skeleton)
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/proc/Drain()
|
||||
become_husk(CHANGELING_DRAIN)
|
||||
add_trait(TRAIT_NOCLONE, CHANGELING_DRAIN)
|
||||
ADD_TRAIT(src, TRAIT_NOCLONE, CHANGELING_DRAIN)
|
||||
blood_volume = 0
|
||||
return 1
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
if(!(SLOT_GLASSES in obscured))
|
||||
if(glasses)
|
||||
msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n"
|
||||
else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES))
|
||||
else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES))
|
||||
msg += "<span class='warning'><B>[t_His] eyes are glowing an unnatural red!</B></span>\n"
|
||||
|
||||
//ears
|
||||
|
||||
@@ -614,7 +614,7 @@
|
||||
facial_hair_style = "Shaved"
|
||||
hair_style = "Bald"
|
||||
update_hair()
|
||||
add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
ADD_TRAIT(src, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
|
||||
update_damage_overlays()
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
/mob/living/carbon/human/handle_traits()
|
||||
if(eye_blind) //blindness, heals slowly over time
|
||||
if(HAS_TRAIT(src, TRAIT_BLIND, EYES_COVERED)) //covering your eyes heals blurry eyes faster
|
||||
if(HAS_TRAIT_FROM(src, TRAIT_BLIND, EYES_COVERED)) //covering your eyes heals blurry eyes faster
|
||||
adjust_blindness(-3)
|
||||
else
|
||||
adjust_blindness(-1)
|
||||
@@ -332,7 +332,7 @@
|
||||
HM.on_life(src)
|
||||
|
||||
/mob/living/carbon/human/proc/handle_heart()
|
||||
var/we_breath = !HAS_TRAIT(src, TRAIT_NOBREATH, SPECIES_TRAIT)
|
||||
var/we_breath = !HAS_TRAIT_FROM(src, TRAIT_NOBREATH, SPECIES_TRAIT)
|
||||
|
||||
if(!undergoing_cardiac_arrest())
|
||||
return
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
/mob/living/carbon/human/IsVocal()
|
||||
// how do species that don't breathe talk? magic, that's what.
|
||||
if(!HAS_TRAIT(src, TRAIT_NOBREATH, SPECIES_TRAIT) && !getorganslot(ORGAN_SLOT_LUNGS))
|
||||
if(!HAS_TRAIT_FROM(src, TRAIT_NOBREATH, SPECIES_TRAIT) && !getorganslot(ORGAN_SLOT_LUNGS))
|
||||
return FALSE
|
||||
if(mind)
|
||||
return !mind.miming
|
||||
|
||||
@@ -286,7 +286,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
C.put_in_hands(new mutanthands())
|
||||
|
||||
for(var/X in inherent_traits)
|
||||
C.add_trait(X, SPECIES_TRAIT)
|
||||
ADD_TRAIT(C, X, SPECIES_TRAIT)
|
||||
|
||||
if(TRAIT_VIRUSIMMUNE in inherent_traits)
|
||||
for(var/datum/disease/A in C.diseases)
|
||||
@@ -313,7 +313,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(TRUE)
|
||||
for(var/X in inherent_traits)
|
||||
C.remove_trait(X, SPECIES_TRAIT)
|
||||
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
|
||||
|
||||
@@ -1161,13 +1161,13 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder.
|
||||
if(H.overeatduration < 100)
|
||||
to_chat(H, "<span class='notice'>You feel fit again!</span>")
|
||||
H.remove_trait(TRAIT_FAT, OBESITY)
|
||||
REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
|
||||
H.update_inv_w_uniform()
|
||||
H.update_inv_wear_suit()
|
||||
else
|
||||
if(H.overeatduration >= 100)
|
||||
to_chat(H, "<span class='danger'>You suddenly feel blubbery!</span>")
|
||||
H.add_trait(TRAIT_FAT, OBESITY)
|
||||
ADD_TRAIT(H, TRAIT_FAT, OBESITY)
|
||||
H.update_inv_w_uniform()
|
||||
H.update_inv_wear_suit()
|
||||
|
||||
@@ -1480,7 +1480,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
"<span class='notice'>You slap [user == target ? "yourself" : "\the [target]"] in the face! </span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (!target.HAS_TRAIT(TRAIT_NYMPHO))
|
||||
if (!HAS_TRAIT(target, TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
@@ -1488,7 +1488,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
if(target.has_trait(TRAIT_ASSBLASTUSA))
|
||||
if(HAS_TRAIT(target, TRAIT_ASSBLASTUSA))
|
||||
var/hit_zone = (user.held_index_to_dir(user.active_hand_index) == "l" ? "l_":"r_") + "arm"
|
||||
user.adjustStaminaLoss(50, affected_zone = hit_zone)
|
||||
var/obj/item/bodypart/affecting = user.get_bodypart(hit_zone)
|
||||
@@ -1512,9 +1512,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
)
|
||||
if (target.canbearoused)
|
||||
target.adjustArousalLoss(5)
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_MASO) && target.has_dna())
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && HAS_TRAIT(target, TRAIT_MASO) && target.has_dna())
|
||||
target.mob_climax(forced_climax=TRUE)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
if (!HAS_TRAIT(target, TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
|
||||
return FALSE
|
||||
@@ -1649,7 +1649,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
//dismemberment
|
||||
var/probability = I.get_dismemberment_chance(affecting)
|
||||
if(prob(probability) || (H.has_trait(TRAIT_EASYDISMEMBER) && prob(probability))) //try twice
|
||||
if(prob(probability) || (HAS_TRAIT(H, TRAIT_EASYDISMEMBER) && prob(probability))) //try twice
|
||||
if(affecting.dismember(I.damtype))
|
||||
I.add_mob_blood(H)
|
||||
playsound(get_turf(H), I.get_dismember_sound(), 80, 1)
|
||||
@@ -1747,7 +1747,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(BP)
|
||||
if(damage > 0 ? BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0) : BP.heal_damage(abs(damage * hit_percent * brutemod * H.physiology.brute_mod), 0))
|
||||
H.update_damage_overlays()
|
||||
if(H.has_trait(TRAIT_MASO))
|
||||
if(HAS_TRAIT(H, TRAIT_MASO))
|
||||
H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
|
||||
if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna())
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
@@ -1796,7 +1796,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
/////////////
|
||||
|
||||
/datum/species/proc/breathe(mob/living/carbon/human/H)
|
||||
if(H.has_trait(TRAIT_NOBREATH))
|
||||
if(HAS_TRAIT(H, TRAIT_NOBREATH))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -1844,7 +1844,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.throw_alert("temp", /obj/screen/alert/hot, 3)
|
||||
|
||||
// +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt.
|
||||
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTHEAT))
|
||||
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTHEAT))
|
||||
//Body temperature is too hot.
|
||||
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
@@ -1862,7 +1862,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.emote("scream")
|
||||
H.apply_damage(burn_damage, BURN)
|
||||
|
||||
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD))
|
||||
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTCOLD))
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
|
||||
switch(H.bodytemperature)
|
||||
@@ -1881,7 +1881,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
|
||||
switch(adjusted_pressure)
|
||||
if(HAZARD_HIGH_PRESSURE to INFINITY)
|
||||
if(!H.has_trait(TRAIT_RESISTHIGHPRESSURE))
|
||||
if(!HAS_TRAIT(H, TRAIT_RESISTHIGHPRESSURE))
|
||||
H.adjustBruteLoss(min(((adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 ) * PRESSURE_DAMAGE_COEFFICIENT, MAX_HIGH_PRESSURE_DAMAGE) * H.physiology.pressure_mod)
|
||||
H.throw_alert("pressure", /obj/screen/alert/highpressure, 2)
|
||||
else
|
||||
@@ -1893,7 +1893,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
|
||||
H.throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
|
||||
else
|
||||
if(H.has_trait(TRAIT_RESISTLOWPRESSURE))
|
||||
if(HAS_TRAIT(H, TRAIT_RESISTLOWPRESSURE))
|
||||
H.clear_alert("pressure")
|
||||
else
|
||||
H.adjustBruteLoss(LOW_PRESSURE_DAMAGE * H.physiology.pressure_mod)
|
||||
@@ -1904,7 +1904,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
//////////
|
||||
|
||||
/datum/species/proc/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
|
||||
if(H.has_trait(TRAIT_NOFIRE))
|
||||
if(HAS_TRAIT(H, TRAIT_NOFIRE))
|
||||
return
|
||||
if(H.on_fire)
|
||||
//the fire tries to damage the exposed clothes and items
|
||||
@@ -1972,7 +1972,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
|
||||
/datum/species/proc/CanIgniteMob(mob/living/carbon/human/H)
|
||||
if(H.has_trait(TRAIT_NOFIRE))
|
||||
if(HAS_TRAIT(H, TRAIT_NOFIRE))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
if(ishuman(H) && !fly)
|
||||
fly = new
|
||||
fly.Grant(H)
|
||||
H.add_trait(TRAIT_HOLY, SPECIES_TRAIT)
|
||||
ADD_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
|
||||
|
||||
/datum/species/angel/on_species_loss(mob/living/carbon/human/H)
|
||||
if(fly)
|
||||
@@ -36,7 +36,7 @@
|
||||
H.dna.species.mutant_bodyparts -= "wings"
|
||||
H.dna.features["wings"] = "None"
|
||||
H.update_body()
|
||||
H.remove_trait(TRAIT_HOLY, SPECIES_TRAIT)
|
||||
REMOVE_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/species/angel/spec_life(mob/living/carbon/human/H)
|
||||
|
||||
@@ -74,10 +74,10 @@
|
||||
|
||||
/datum/species/golem/adamantine/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
..()
|
||||
C.add_trait(TRAIT_ANTIMAGIC, SPECIES_TRAIT)
|
||||
ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT)
|
||||
|
||||
/datum/species/golem/adamantine/on_species_loss(mob/living/carbon/C)
|
||||
C.remove_trait(TRAIT_ANTIMAGIC, SPECIES_TRAIT)
|
||||
REMOVE_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT)
|
||||
..()
|
||||
|
||||
//The suicide bombers of golemkind
|
||||
@@ -175,10 +175,10 @@
|
||||
|
||||
/datum/species/golem/silver/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
..()
|
||||
C.add_trait(TRAIT_HOLY, SPECIES_TRAIT)
|
||||
ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
|
||||
|
||||
/datum/species/golem/silver/on_species_loss(mob/living/carbon/C)
|
||||
C.remove_trait(TRAIT_HOLY, SPECIES_TRAIT)
|
||||
REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
|
||||
..()
|
||||
|
||||
//Harder to stun, deals more damage, but it's even slower
|
||||
@@ -698,10 +698,10 @@
|
||||
|
||||
/datum/species/golem/cloth/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
..()
|
||||
C.add_trait(TRAIT_HOLY, SPECIES_TRAIT)
|
||||
ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
|
||||
|
||||
/datum/species/golem/cloth/on_species_loss(mob/living/carbon/C)
|
||||
C.remove_trait(TRAIT_HOLY, SPECIES_TRAIT)
|
||||
REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/species/golem/cloth/check_roundstart_eligible()
|
||||
@@ -768,7 +768,7 @@
|
||||
/obj/structure/cloth_pile/proc/revive()
|
||||
if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime
|
||||
return
|
||||
if(cloth_golem.suiciding || cloth_golem.has_trait(TRAIT_NOCLONE))
|
||||
if(cloth_golem.suiciding || HAS_TRAIT(cloth_golem, TRAIT_NOCLONE))
|
||||
QDEL_NULL(cloth_golem)
|
||||
return
|
||||
|
||||
|
||||
@@ -594,7 +594,7 @@
|
||||
/datum/species/jelly/stargazer/proc/link_mob(mob/living/M)
|
||||
if(QDELETED(M) || M.stat == DEAD)
|
||||
return FALSE
|
||||
if(M.has_trait(TRAIT_MINDSHIELD)) //mindshield implant, no dice
|
||||
if(HAS_TRAIT(M, TRAIT_MINDSHIELD)) //mindshield implant, no dice
|
||||
return FALSE
|
||||
if(M in linked_mobs)
|
||||
return FALSE
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
|
||||
/mob/living/carbon/human/Unconscious(amount, updating = 1, ignore_canunconscious = 0)
|
||||
amount = dna.species.spec_stun(src,amount)
|
||||
if(has_trait(TRAIT_HEAVY_SLEEPER))
|
||||
if(HAS_TRAIT(src, TRAIT_HEAVY_SLEEPER))
|
||||
amount *= rand(1.25, 1.3)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/Sleeping(amount, updating = 1, ignore_sleepimmune = 0)
|
||||
if(has_trait(TRAIT_HEAVY_SLEEPER))
|
||||
if(HAS_TRAIT(src, TRAIT_HEAVY_SLEEPER))
|
||||
amount *= rand(1.25, 1.3)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -663,7 +663,7 @@ generate/load female uniform sprites matching all previously decided variables
|
||||
else
|
||||
. += "-no_marking"
|
||||
|
||||
if(has_trait(TRAIT_HUSK))
|
||||
if(HAS_TRAIT(src, TRAIT_HUSK))
|
||||
. += "-husk"
|
||||
|
||||
/mob/living/carbon/human/load_limb_from_cache()
|
||||
@@ -705,7 +705,7 @@ generate/load female uniform sprites matching all previously decided variables
|
||||
add_overlay(HD.get_limb_icon())
|
||||
update_damage_overlays()
|
||||
|
||||
if(HD && !(has_trait(TRAIT_HUSK)))
|
||||
if(HD && !(HAS_TRAIT(src, TRAIT_HUSK)))
|
||||
// lipstick
|
||||
if(lip_style && (LIPS in dna.species.species_traits))
|
||||
var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER)
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
cuff_resist(I)
|
||||
|
||||
/mob/living/carbon/monkey/proc/should_target(var/mob/living/L)
|
||||
if(has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(src, TRAIT_PACIFISM))
|
||||
return FALSE
|
||||
|
||||
if(enemies[L])
|
||||
@@ -143,7 +143,7 @@
|
||||
pickupTimer = 0
|
||||
else
|
||||
INVOKE_ASYNC(src, .proc/walk2derpless, pickupTarget.loc)
|
||||
if(Adjacent(pickupTarget) || Adjacent(pickupTarget.loc)) // next to target
|
||||
if(Adjacent(pickupTarget) || Adjacent(pickupTarget.loc)) // next to target
|
||||
drop_all_held_items() // who cares about these items, i want that one!
|
||||
if(isturf(pickupTarget.loc)) // on floor
|
||||
equip_item(pickupTarget)
|
||||
@@ -167,7 +167,7 @@
|
||||
battle_screech()
|
||||
retaliate(L)
|
||||
return TRUE
|
||||
else
|
||||
else
|
||||
bodyDisposal = locate(/obj/machinery/disposal/) in around
|
||||
if(bodyDisposal)
|
||||
target = L
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
adjust_bodytemperature(min((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX))
|
||||
|
||||
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !has_trait(TRAIT_RESISTHEAT))
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTHEAT))
|
||||
switch(bodytemperature)
|
||||
if(360 to 400)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 1)
|
||||
@@ -96,7 +96,7 @@
|
||||
else
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
||||
|
||||
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !has_trait(TRAIT_RESISTCOLD))
|
||||
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTCOLD))
|
||||
if(!istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||
switch(bodytemperature)
|
||||
if(200 to 260)
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
threatcount += 4 //trigger look_for_perp() since they're nonhuman and very likely hostile
|
||||
|
||||
//mindshield implants imply trustworthyness
|
||||
if(has_trait(TRAIT_MINDSHIELD))
|
||||
if(HAS_TRAIT(src, TRAIT_MINDSHIELD))
|
||||
threatcount -= 1
|
||||
|
||||
return threatcount
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(!HD) //Decapitated
|
||||
return
|
||||
|
||||
if(has_trait(TRAIT_HUSK))
|
||||
if(HAS_TRAIT(src, TRAIT_HUSK))
|
||||
return
|
||||
|
||||
var/hair_hidden = 0
|
||||
|
||||
@@ -101,14 +101,14 @@
|
||||
if(EFFECT_SLUR)
|
||||
slurring = max(slurring,(effect * hit_percent))
|
||||
if(EFFECT_STUTTER)
|
||||
if((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) // stun is usually associated with stutter
|
||||
if((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // stun is usually associated with stutter
|
||||
stuttering = max(stuttering,(effect * hit_percent))
|
||||
if(EFFECT_EYE_BLUR)
|
||||
blur_eyes(effect * hit_percent)
|
||||
if(EFFECT_DROWSY)
|
||||
drowsyness = max(drowsyness,(effect * hit_percent))
|
||||
if(EFFECT_JITTER)
|
||||
if((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE))
|
||||
if((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE))
|
||||
jitteriness = max(jitteriness,(effect * hit_percent))
|
||||
return 1
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
/mob/living/proc/handle_traits()
|
||||
//Eyes
|
||||
if(eye_blind) //blindness, heals slowly over time
|
||||
if(!stat && !(has_trait(TRAIT_BLIND)))
|
||||
if(!stat && !(HAS_TRAIT(src, TRAIT_BLIND)))
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
if(client && !eye_blind)
|
||||
clear_alert("blind")
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
return 1
|
||||
if(isliving(M))
|
||||
var/mob/living/L = M
|
||||
if(L.has_trait(TRAIT_PUSHIMMUNE))
|
||||
if(HAS_TRAIT(L, TRAIT_PUSHIMMUNE))
|
||||
return 1
|
||||
//If they're a human, and they're not in help intent, block pushing
|
||||
if(ishuman(M) && (M.a_intent != INTENT_HELP))
|
||||
@@ -306,7 +306,7 @@
|
||||
/mob/living/pointed(atom/A as mob|obj|turf in view())
|
||||
if(incapacitated())
|
||||
return FALSE
|
||||
if(has_trait(TRAIT_DEATHCOMA))
|
||||
if(HAS_TRAIT(src, TRAIT_DEATHCOMA))
|
||||
return FALSE
|
||||
if(!..())
|
||||
return FALSE
|
||||
@@ -889,7 +889,7 @@
|
||||
/mob/living/rad_act(amount)
|
||||
. = ..()
|
||||
|
||||
if(!amount || (amount < RAD_MOB_SKIN_PROTECTION) || has_trait(TRAIT_RADIMMUNE))
|
||||
if(!amount || (amount < RAD_MOB_SKIN_PROTECTION) || HAS_TRAIT(src, TRAIT_RADIMMUNE))
|
||||
return
|
||||
|
||||
amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated
|
||||
@@ -905,7 +905,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if((magic && has_trait(TRAIT_ANTIMAGIC)) || (holy && has_trait(TRAIT_HOLY)))
|
||||
if((magic && HAS_TRAIT(src, TRAIT_ANTIMAGIC)) || (holy && HAS_TRAIT(src, TRAIT_HOLY)))
|
||||
return src
|
||||
|
||||
/mob/living/proc/fakefireextinguish()
|
||||
@@ -988,7 +988,7 @@
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
//Robots, animals and brains have their own version so don't worry about them
|
||||
/mob/living/proc/update_canmove()
|
||||
var/ko = IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_DEATHCOMA))
|
||||
var/ko = IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (HAS_TRAIT(src, TRAIT_DEATHCOMA))
|
||||
var/move_and_fall = stat == SOFT_CRIT && !pulledby
|
||||
var/chokehold = pulledby && pulledby.grab_state >= GRAB_NECK
|
||||
var/buckle_lying = !(buckled && !buckled.buckle_lying)
|
||||
|
||||
@@ -137,11 +137,11 @@
|
||||
user.start_pulling(src, supress_message)
|
||||
return
|
||||
|
||||
if(!(status_flags & CANPUSH) || has_trait(TRAIT_PUSHIMMUNE))
|
||||
if(!(status_flags & CANPUSH) || HAS_TRAIT(src, TRAIT_PUSHIMMUNE))
|
||||
to_chat(user, "<span class='warning'>[src] can't be grabbed more aggressively!</span>")
|
||||
return FALSE
|
||||
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='notice'>You don't want to risk hurting [src]!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
M.Feedstop()
|
||||
return // can't attack while eating!
|
||||
|
||||
if(has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(src, TRAIT_PACIFISM))
|
||||
to_chat(M, "<span class='notice'>You don't want to hurt anyone!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
M.visible_message("<span class='notice'>\The [M] [M.friendly] [src]!</span>")
|
||||
return FALSE
|
||||
else
|
||||
if(M.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(M, TRAIT_PACIFISM))
|
||||
to_chat(M, "<span class='notice'>You don't want to hurt anyone!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -240,7 +240,7 @@
|
||||
return FALSE
|
||||
|
||||
if (M.a_intent == INTENT_HARM)
|
||||
if(M.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(M, TRAIT_PACIFISM))
|
||||
to_chat(M, "<span class='notice'>You don't want to hurt anyone!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
return FALSE
|
||||
|
||||
else
|
||||
if(L.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(L, TRAIT_PACIFISM))
|
||||
to_chat(L, "<span class='notice'>You don't want to hurt anyone!</span>")
|
||||
return
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
grabbedby(M)
|
||||
return FALSE
|
||||
if("harm")
|
||||
if(M.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(M, TRAIT_PACIFISM))
|
||||
to_chat(M, "<span class='notice'>You don't want to hurt anyone!</span>")
|
||||
return FALSE
|
||||
M.do_attack_animation(src)
|
||||
@@ -315,7 +315,7 @@
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_ELECTROCUTE_ACT, shock_damage)
|
||||
if(tesla_shock && (flags_1 & TESLA_IGNORE_1))
|
||||
return FALSE
|
||||
if(has_trait(TRAIT_SHOCKIMMUNE))
|
||||
if(HAS_TRAIT(src, TRAIT_SHOCKIMMUNE))
|
||||
return FALSE
|
||||
if(shock_damage > 0)
|
||||
if(!illusion)
|
||||
@@ -385,7 +385,7 @@
|
||||
|
||||
//called when the mob receives a bright flash
|
||||
/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash)
|
||||
if(get_eye_protection() < intensity && (override_blindness_check || !(has_trait(TRAIT_BLIND))))
|
||||
if(get_eye_protection() < intensity && (override_blindness_check || !(HAS_TRAIT(src, TRAIT_BLIND))))
|
||||
overlay_fullscreen("flash", type)
|
||||
addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25)
|
||||
return TRUE
|
||||
|
||||
@@ -301,7 +301,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
return 1
|
||||
|
||||
/mob/living/proc/can_speak_vocal(message) //Check AFTER handling of xeno and ling channels
|
||||
if(has_trait(TRAIT_MUTE))
|
||||
if(HAS_TRAIT(src, TRAIT_MUTE))
|
||||
return 0
|
||||
|
||||
if(is_muzzled())
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
grabbedby(M)
|
||||
|
||||
if("harm", "disarm")
|
||||
if(M.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(M, TRAIT_PACIFISM))
|
||||
to_chat(M, "<span class='notice'>You don't want to hurt [src]!</span>")
|
||||
return
|
||||
M.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
/mob/living/simple_animal/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='notice'>You don't want to hurt [src]!</span>")
|
||||
return FALSE
|
||||
..(user, 1)
|
||||
|
||||
@@ -343,7 +343,7 @@
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/proc/assess_patient(mob/living/carbon/C)
|
||||
//Time to see if they need medical help!
|
||||
if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH)))
|
||||
if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH)))
|
||||
return FALSE //welp too late for them!
|
||||
|
||||
if(!(loc == C.loc) && !(isturf(C.loc) && isturf(loc)))
|
||||
@@ -421,7 +421,7 @@
|
||||
soft_reset()
|
||||
return
|
||||
|
||||
if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH)))
|
||||
if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH)))
|
||||
var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/medbot/no.ogg',"Live, damnit! LIVE!" = 'sound/voice/medbot/live.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/lost.ogg')
|
||||
var/message = pick(messagevoice)
|
||||
speak(message)
|
||||
|
||||
@@ -343,7 +343,7 @@
|
||||
/mob/living/simple_animal/hostile/construct/harvester/AttackingTarget()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.has_trait(TRAIT_NODISMEMBER))
|
||||
if(HAS_TRAIT(C, TRAIT_NODISMEMBER))
|
||||
return ..() //ATTACK!
|
||||
var/list/parts = list()
|
||||
var/undismembermerable_limbs = 0
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
// Changeling egg can survive in aliens!
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.stat == DEAD)
|
||||
if(C.has_trait(TRAIT_XENO_HOST))
|
||||
if(HAS_TRAIT(C, TRAIT_XENO_HOST))
|
||||
to_chat(src, "<span class='userdanger'>A foreign presence repels us from this body. Perhaps we should try to infest another?</span>")
|
||||
return
|
||||
Infect(target)
|
||||
|
||||
@@ -558,7 +558,7 @@ Difficulty: Very Hard
|
||||
H.regenerate_limbs()
|
||||
H.regenerate_organs()
|
||||
H.revive(1,0)
|
||||
H.add_trait(TRAIT_NOCLONE, MAGIC_TRAIT) //Free revives, but significantly limits your options for reviving except via the crystal
|
||||
ADD_TRAIT(H, TRAIT_NOCLONE, MAGIC_TRAIT) //Free revives, but significantly limits your options for reviving except via the crystal
|
||||
H.grab_ghost(force = TRUE)
|
||||
|
||||
/obj/machinery/anomalous_crystal/helpers //Lets ghost spawn as helpful creatures that can only heal people slightly. Incredibly fragile and they can't converse with humans
|
||||
@@ -721,7 +721,7 @@ Difficulty: Very Hard
|
||||
if(isliving(A) && holder_animal)
|
||||
var/mob/living/L = A
|
||||
L.notransform = 1
|
||||
L.add_trait(TRAIT_MUTE, STASIS_MUTE)
|
||||
ADD_TRAIT(L, TRAIT_MUTE, STASIS_MUTE)
|
||||
L.status_flags |= GODMODE
|
||||
L.mind.transfer_to(holder_animal)
|
||||
var/obj/effect/proc_holder/spell/targeted/exit_possession/P = new /obj/effect/proc_holder/spell/targeted/exit_possession
|
||||
@@ -731,7 +731,7 @@ Difficulty: Very Hard
|
||||
/obj/structure/closet/stasis/dump_contents(var/kill = 1)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
for(var/mob/living/L in src)
|
||||
L.remove_trait(TRAIT_MUTE, STASIS_MUTE)
|
||||
REMOVE_TRAIT(L, TRAIT_MUTE, STASIS_MUTE)
|
||||
L.status_flags &= ~GODMODE
|
||||
L.notransform = 0
|
||||
if(holder_animal)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/proc/Stun(amount, updating = TRUE, ignore_canstun = FALSE) //Can't go below remaining duration
|
||||
if(((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canstun)
|
||||
if(((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
|
||||
if(absorb_stun(amount, ignore_canstun))
|
||||
return
|
||||
var/datum/status_effect/incapacitating/stun/S = IsStun()
|
||||
@@ -26,7 +26,7 @@
|
||||
return S
|
||||
|
||||
/mob/living/proc/SetStun(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration
|
||||
if(((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canstun)
|
||||
if(((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
|
||||
var/datum/status_effect/incapacitating/stun/S = IsStun()
|
||||
if(amount <= 0)
|
||||
if(S)
|
||||
@@ -41,7 +41,7 @@
|
||||
return S
|
||||
|
||||
/mob/living/proc/AdjustStun(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration
|
||||
if(((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canstun)
|
||||
if(((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
|
||||
if(absorb_stun(amount, ignore_canstun))
|
||||
return
|
||||
var/datum/status_effect/incapacitating/stun/S = IsStun()
|
||||
@@ -63,7 +63,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/proc/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Can't go below remaining duration
|
||||
if(((status_flags & CANKNOCKDOWN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
if(((status_flags & CANKNOCKDOWN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
if(absorb_stun(amount, ignore_canknockdown))
|
||||
return
|
||||
var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown()
|
||||
@@ -74,7 +74,7 @@
|
||||
return K
|
||||
|
||||
/mob/living/proc/SetKnockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Sets remaining duration
|
||||
if(((status_flags & CANKNOCKDOWN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
if(((status_flags & CANKNOCKDOWN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown()
|
||||
if(amount <= 0)
|
||||
if(K)
|
||||
@@ -89,7 +89,7 @@
|
||||
return K
|
||||
|
||||
/mob/living/proc/AdjustKnockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Adds to remaining duration
|
||||
if(((status_flags & CANKNOCKDOWN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
if(((status_flags & CANKNOCKDOWN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canknockdown)
|
||||
if(absorb_stun(amount, ignore_canknockdown))
|
||||
return
|
||||
var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown()
|
||||
@@ -141,7 +141,7 @@
|
||||
/////////////////////////////////// DISABILITIES ////////////////////////////////////
|
||||
|
||||
/mob/living/proc/add_quirk(quirk, spawn_effects) //separate proc due to the way these ones are handled
|
||||
if(has_trait(quirk))
|
||||
if(HAS_TRAIT(src, quirk))
|
||||
return
|
||||
if(!SSquirks || !SSquirks.quirks[quirk])
|
||||
return
|
||||
@@ -161,42 +161,42 @@
|
||||
/////////////////////////////////// TRAIT PROCS ////////////////////////////////////
|
||||
|
||||
/mob/living/proc/cure_blind(list/sources)
|
||||
remove_trait(TRAIT_BLIND, sources)
|
||||
if(!has_trait(TRAIT_BLIND))
|
||||
REMOVE_TRAIT(src, TRAIT_BLIND, sources)
|
||||
if(!HAS_TRAIT(src, TRAIT_BLIND))
|
||||
adjust_blindness(-1)
|
||||
|
||||
/mob/living/proc/become_blind(source)
|
||||
if(!has_trait(TRAIT_BLIND))
|
||||
if(!HAS_TRAIT(src, TRAIT_BLIND))
|
||||
blind_eyes(1)
|
||||
add_trait(TRAIT_BLIND, source)
|
||||
ADD_TRAIT(src, TRAIT_BLIND, source)
|
||||
|
||||
/mob/living/proc/cure_nearsighted(list/sources)
|
||||
remove_trait(TRAIT_NEARSIGHT, sources)
|
||||
if(!has_trait(TRAIT_NEARSIGHT))
|
||||
REMOVE_TRAIT(src, TRAIT_NEARSIGHT, sources)
|
||||
if(!HAS_TRAIT(src, TRAIT_NEARSIGHT))
|
||||
clear_fullscreen("nearsighted")
|
||||
|
||||
/mob/living/proc/become_nearsighted(source)
|
||||
if(!has_trait(TRAIT_NEARSIGHT))
|
||||
if(!HAS_TRAIT(src, TRAIT_NEARSIGHT))
|
||||
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
||||
add_trait(TRAIT_NEARSIGHT, source)
|
||||
ADD_TRAIT(src, TRAIT_NEARSIGHT, source)
|
||||
|
||||
/mob/living/proc/cure_husk(list/sources)
|
||||
remove_trait(TRAIT_HUSK, sources)
|
||||
if(!has_trait(TRAIT_HUSK))
|
||||
remove_trait(TRAIT_DISFIGURED, "husk")
|
||||
REMOVE_TRAIT(src, TRAIT_HUSK, sources)
|
||||
if(!HAS_TRAIT(src, TRAIT_HUSK))
|
||||
REMOVE_TRAIT(src, TRAIT_DISFIGURED, "husk")
|
||||
update_body()
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/become_husk(source)
|
||||
if(!has_trait(TRAIT_HUSK))
|
||||
add_trait(TRAIT_DISFIGURED, "husk")
|
||||
if(!HAS_TRAIT(src, TRAIT_HUSK))
|
||||
ADD_TRAIT(src, TRAIT_DISFIGURED, "husk")
|
||||
update_body()
|
||||
. = TRUE
|
||||
add_trait(TRAIT_HUSK, source)
|
||||
ADD_TRAIT(src, TRAIT_HUSK, source)
|
||||
|
||||
/mob/living/proc/cure_fakedeath(list/sources)
|
||||
remove_trait(TRAIT_FAKEDEATH, sources)
|
||||
remove_trait(TRAIT_DEATHCOMA, sources)
|
||||
REMOVE_TRAIT(src, TRAIT_FAKEDEATH, sources)
|
||||
REMOVE_TRAIT(src, TRAIT_DEATHCOMA, sources)
|
||||
if(stat != DEAD)
|
||||
tod = null
|
||||
update_stat()
|
||||
@@ -206,15 +206,15 @@
|
||||
return
|
||||
if(!silent)
|
||||
emote("deathgasp")
|
||||
add_trait(TRAIT_FAKEDEATH, source)
|
||||
add_trait(TRAIT_DEATHCOMA, source)
|
||||
ADD_TRAIT(src, TRAIT_FAKEDEATH, source)
|
||||
ADD_TRAIT(src, TRAIT_DEATHCOMA, source)
|
||||
tod = STATION_TIME_TIMESTAMP("hh:mm:ss")
|
||||
update_stat()
|
||||
|
||||
/mob/living/proc/unignore_slowdown(list/sources)
|
||||
remove_trait(TRAIT_IGNORESLOWDOWN, sources)
|
||||
REMOVE_TRAIT(src, TRAIT_IGNORESLOWDOWN, sources)
|
||||
update_movespeed(FALSE)
|
||||
|
||||
/mob/living/proc/ignore_slowdown(source)
|
||||
add_trait(TRAIT_IGNORESLOWDOWN, source)
|
||||
ADD_TRAIT(src, TRAIT_IGNORESLOWDOWN, source)
|
||||
update_movespeed(FALSE)
|
||||
@@ -28,7 +28,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/proc/Unconscious(amount, updating = TRUE, ignore_canunconscious = FALSE) //Can't go below remaining duration
|
||||
if(((status_flags & CANUNCONSCIOUS) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canunconscious)
|
||||
if(((status_flags & CANUNCONSCIOUS) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canunconscious)
|
||||
var/datum/status_effect/incapacitating/unconscious/U = IsUnconscious()
|
||||
if(U)
|
||||
U.duration = max(world.time + amount, U.duration)
|
||||
@@ -37,7 +37,7 @@
|
||||
return U
|
||||
|
||||
/mob/living/proc/SetUnconscious(amount, updating = TRUE, ignore_canunconscious = FALSE) //Sets remaining duration
|
||||
if(((status_flags & CANUNCONSCIOUS) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canunconscious)
|
||||
if(((status_flags & CANUNCONSCIOUS) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canunconscious)
|
||||
var/datum/status_effect/incapacitating/unconscious/U = IsUnconscious()
|
||||
if(amount <= 0)
|
||||
if(U)
|
||||
@@ -49,7 +49,7 @@
|
||||
return U
|
||||
|
||||
/mob/living/proc/AdjustUnconscious(amount, updating = TRUE, ignore_canunconscious = FALSE) //Adds to remaining duration
|
||||
if(((status_flags & CANUNCONSCIOUS) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canunconscious)
|
||||
if(((status_flags & CANUNCONSCIOUS) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canunconscious)
|
||||
var/datum/status_effect/incapacitating/unconscious/U = IsUnconscious()
|
||||
if(U)
|
||||
U.duration += amount
|
||||
@@ -72,7 +72,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/proc/Sleeping(amount, updating = TRUE, ignore_sleepimmune = FALSE) //Can't go below remaining duration
|
||||
if((!has_trait(TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
if((!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(S)
|
||||
S.duration = max(world.time + amount, S.duration)
|
||||
@@ -81,7 +81,7 @@
|
||||
return S
|
||||
|
||||
/mob/living/proc/SetSleeping(amount, updating = TRUE, ignore_sleepimmune = FALSE) //Sets remaining duration
|
||||
if((!has_trait(TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
if((!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(amount <= 0)
|
||||
if(S)
|
||||
@@ -93,7 +93,7 @@
|
||||
return S
|
||||
|
||||
/mob/living/proc/AdjustSleeping(amount, updating = TRUE, ignore_sleepimmune = FALSE) //Adds to remaining duration
|
||||
if((!has_trait(TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
if((!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(S)
|
||||
S.duration += amount
|
||||
@@ -170,7 +170,7 @@
|
||||
blind_minimum = 1
|
||||
if(isliving(src))
|
||||
var/mob/living/L = src
|
||||
if(L.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(L, TRAIT_BLIND))
|
||||
blind_minimum = 1
|
||||
eye_blind = max(eye_blind+amount, blind_minimum)
|
||||
if(!eye_blind)
|
||||
@@ -191,7 +191,7 @@
|
||||
blind_minimum = 1
|
||||
if(isliving(src))
|
||||
var/mob/living/L = src
|
||||
if(L.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(L, TRAIT_BLIND))
|
||||
blind_minimum = 1
|
||||
eye_blind = blind_minimum
|
||||
if(!eye_blind)
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
if(!user.mind.hasSoul)
|
||||
to_chat(user, "<span class='notice'>You do not possess a soul.</span>")
|
||||
return 0
|
||||
if(user.has_trait(TRAIT_DUMB))
|
||||
if(HAS_TRAIT(user, TRAIT_DUMB))
|
||||
to_chat(user, "<span class='notice'>You quickly scrawl 'your name' on the contract.</span>")
|
||||
signIncorrectly()
|
||||
return 0
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
return
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(H.has_trait(TRAIT_CLUMSY) && prob(25))
|
||||
if(HAS_TRAIT(H, TRAIT_CLUMSY) && prob(25))
|
||||
to_chat(H, "<span class='warning'>You cut yourself on the paper! Ahhhh! Ahhhhh!</span>")
|
||||
H.damageoverlaytemp = 9001
|
||||
H.update_damage_hud()
|
||||
@@ -314,7 +314,7 @@
|
||||
to_chat(user, "<span class='notice'>You stamp the paper with your rubber stamp.</span>")
|
||||
|
||||
if(P.is_hot())
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(10))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10))
|
||||
user.visible_message("<span class='warning'>[user] accidentally ignites [user.p_them()]self!</span>", \
|
||||
"<span class='userdanger'>You miss the paper and accidentally light yourself on fire!</span>")
|
||||
user.dropItemToGround(P)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
update_icon()
|
||||
|
||||
else if(P.is_hot())
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(10))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10))
|
||||
user.visible_message("<span class='warning'>[user] accidentally ignites [user.p_them()]self!</span>", \
|
||||
"<span class='userdanger'>You miss [src] and accidentally light yourself on fire!</span>")
|
||||
user.dropItemToGround(P)
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
var/realcooldown = cooldown
|
||||
var/mob/living/carbon/human/H = user
|
||||
if (H.has_trait(TRAIT_PHOTOGRAPHER))
|
||||
if (HAS_TRAIT(H, TRAIT_PHOTOGRAPHER))
|
||||
realcooldown *= 0.5
|
||||
addtimer(CALLBACK(src, .proc/cooldown), realcooldown)
|
||||
|
||||
|
||||
@@ -604,7 +604,7 @@
|
||||
else
|
||||
prot = 1
|
||||
|
||||
if(prot > 0 || user.has_trait(TRAIT_RESISTHEAT) || user.has_trait(TRAIT_RESISTHEATHANDS))
|
||||
if(prot > 0 || HAS_TRAIT(user, TRAIT_RESISTHEAT) || HAS_TRAIT(user, TRAIT_RESISTHEATHANDS))
|
||||
to_chat(user, "<span class='notice'>You remove the light [fitting].</span>")
|
||||
else if(istype(user) && user.dna.check_mutation(TK))
|
||||
to_chat(user, "<span class='notice'>You telekinetically remove the light [fitting].</span>")
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
//Exclude lasertag guns from the TRAIT_CLUMSY check.
|
||||
if(clumsy_check)
|
||||
if(istype(user))
|
||||
if (user.has_trait(TRAIT_CLUMSY) && prob(40))
|
||||
if (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40))
|
||||
to_chat(user, "<span class='userdanger'>You shoot yourself in the foot with [src]!</span>")
|
||||
var/shot_leg = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
process_fire(user, user, FALSE, params, shot_leg)
|
||||
@@ -220,7 +220,7 @@
|
||||
firing_burst = FALSE
|
||||
return FALSE
|
||||
if(chambered && chambered.BB)
|
||||
if(user.has_trait(TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
|
||||
if(chambered.harmful) // Is the bullet chambered harmful?
|
||||
to_chat(user, "<span class='notice'> [src] is lethally chambered! You don't want to risk harming anyone...</span>")
|
||||
return
|
||||
@@ -259,7 +259,7 @@
|
||||
var/rand_spr = rand()
|
||||
if(spread)
|
||||
randomized_gun_spread = rand(0,spread)
|
||||
if(user.has_trait(TRAIT_POOR_AIM)) //nice shootin' tex
|
||||
if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex
|
||||
bonus_spread += 25
|
||||
var/randomized_bonus_spread = rand(0, bonus_spread)
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
addtimer(CALLBACK(src, .proc/process_burst, user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1))
|
||||
else
|
||||
if(chambered)
|
||||
if(user.has_trait(TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
|
||||
if(chambered.harmful) // Is the bullet chambered harmful?
|
||||
to_chat(user, "<span class='notice'> [src] is lethally chambered! You don't want to risk harming anyone...</span>")
|
||||
return
|
||||
|
||||
@@ -351,7 +351,7 @@
|
||||
clumsy_check = 0
|
||||
|
||||
/obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user)
|
||||
if((user.has_trait(TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown"))
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown"))
|
||||
return ..()
|
||||
if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD))
|
||||
user.visible_message("<span class='warning'>[user] somehow manages to shoot [user.p_them()]self in the face!</span>", "<span class='userdanger'>You somehow shoot yourself in the face! How the hell?!</span>")
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
// A gun with ultra-honk pin is useful for clown and useless for everyone else.
|
||||
/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user)
|
||||
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
|
||||
if(user && (!(user.has_trait(TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")))
|
||||
if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.dna && C.dna.check_mutation(HULK))
|
||||
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE))
|
||||
else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
|
||||
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
|
||||
|
||||
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK)
|
||||
if(C.dna && C.dna.check_mutation(HULK))
|
||||
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
|
||||
else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE))
|
||||
else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
|
||||
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
|
||||
|
||||
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
hal_target.stuttering += 20
|
||||
if(hal_target.dna && hal_target.dna.check_mutation(HULK))
|
||||
hal_target.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
|
||||
else if((hal_target.status_flags & CANKNOCKDOWN) && !hal_target.has_trait(TRAIT_STUNIMMUNE))
|
||||
else if((hal_target.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(hal_target, TRAIT_STUNIMMUNE))
|
||||
addtimer(CALLBACK(hal_target, /mob/living/carbon.proc/do_jitter_animation, 20), 5)
|
||||
|
||||
/obj/item/projectile/hallucination/disabler
|
||||
|
||||
@@ -37,7 +37,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/on_mob_life(mob/living/carbon/C)
|
||||
if(C.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER)
|
||||
var/booze_power = boozepwr
|
||||
if(C.has_trait(TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker
|
||||
if(HAS_TRAIT(C, TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker
|
||||
booze_power *= 0.7
|
||||
C.drunkenness = max((C.drunkenness + (sqrt(volume) * booze_power * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk
|
||||
var/obj/item/organ/liver/L = C.getorganslot(ORGAN_SLOT_LIVER)
|
||||
@@ -129,7 +129,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
M.drowsyness = max(0,M.drowsyness-3)
|
||||
M.AdjustSleeping(-40, FALSE)
|
||||
if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
|
||||
if(!HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
M.Jitter(5)
|
||||
..()
|
||||
. = 1
|
||||
@@ -165,7 +165,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
M.drowsyness = max(0,M.drowsyness-7)
|
||||
M.AdjustSleeping(-40)
|
||||
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
|
||||
if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
|
||||
if(!HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
M.Jitter(5)
|
||||
return ..()
|
||||
|
||||
@@ -186,7 +186,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
to_chat(M, "<span class='notice'>[pick("You have a really bad headache.", "Your eyes hurt.", "You find it hard to stay still.", "You feel your heart practically beating out of your chest.")]</span>")
|
||||
|
||||
if(prob(5) && iscarbon(M))
|
||||
if(M.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(M, TRAIT_BLIND))
|
||||
var/obj/item/organ/eyes/eye = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(istype(eye))
|
||||
eye.Remove(M)
|
||||
@@ -364,7 +364,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
|
||||
/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10) && !M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
|
||||
if(prob(10) && !HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
M.hallucination += 4 //Reference to the urban myth
|
||||
..()
|
||||
|
||||
@@ -640,7 +640,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
|
||||
|
||||
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/M)
|
||||
if(M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
|
||||
if(HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
M.Stun(30, 0) //this realistically does nothing to prevent chainstunning but will cause them to recover faster once it's out of their system
|
||||
else
|
||||
M.Stun(40, 0)
|
||||
@@ -674,7 +674,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/manly_dorf/on_mob_add(mob/living/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.dna.check_mutation(DWARFISM) || H.has_trait(TRAIT_ALCOHOL_TOLERANCE))
|
||||
if(H.dna.check_mutation(DWARFISM) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE))
|
||||
to_chat(H, "<span class='notice'>Now THAT is MANLY!</span>")
|
||||
boozepwr = 5 //We've had worse in the mines
|
||||
dorf_mode = TRUE
|
||||
@@ -1274,7 +1274,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
|
||||
if(!HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
M.confused = max(M.confused+2,0)
|
||||
M.Dizzy(10)
|
||||
M.slurring = max(M.slurring,50)
|
||||
|
||||
@@ -392,10 +392,10 @@
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_GOTTAGOFAST, id)
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_GOTTAGOFAST, id)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -253,16 +253,16 @@
|
||||
|
||||
/datum/reagent/drug/bath_salts/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_STUNIMMUNE, id)
|
||||
L.add_trait(TRAIT_SLEEPIMMUNE, id)
|
||||
ADD_TRAIT(L, TRAIT_STUNIMMUNE, id)
|
||||
ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, id)
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
rage = new()
|
||||
C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||
|
||||
/datum/reagent/drug/bath_salts/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_STUNIMMUNE, id)
|
||||
L.remove_trait(TRAIT_SLEEPIMMUNE, id)
|
||||
REMOVE_TRAIT(L, TRAIT_STUNIMMUNE, id)
|
||||
REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, id)
|
||||
if(rage)
|
||||
QDEL_NULL(rage)
|
||||
..()
|
||||
@@ -372,7 +372,7 @@
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_add(mob/living/L)
|
||||
. = ..()
|
||||
L.add_trait(TRAIT_GOTTAGOFAST, id)
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.next_move_modifier *= 2
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
@@ -383,7 +383,7 @@
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_delete(mob/living/L)
|
||||
. = ..()
|
||||
L.remove_trait(TRAIT_GOTTAGOFAST, id)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.next_move_modifier *= 0.5
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == INGEST)
|
||||
if (quality && !M.has_trait(TRAIT_AGEUSIA))
|
||||
if (quality && !HAS_TRAIT(M, TRAIT_AGEUSIA))
|
||||
switch(quality)
|
||||
if (DRINK_NICE)
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/quality_nice)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
M.adjustToxLoss(-5, 0, TRUE)
|
||||
M.hallucination = 0
|
||||
M.setBrainLoss(0)
|
||||
M.remove_all_traits()
|
||||
REMOVE_TRAITS_NOT_IN(M, list(SPECIES_TRAIT, ROUNDSTART_TRAIT, ORGAN_TRAIT))
|
||||
M.set_blurriness(0)
|
||||
M.set_blindness(0)
|
||||
M.SetKnockdown(0, 0)
|
||||
@@ -136,7 +136,7 @@
|
||||
M.adjustFireLoss(-power, 0)
|
||||
M.adjustToxLoss(-power, 0, TRUE) //heals TOXINLOVERs
|
||||
M.adjustCloneLoss(-power, 0)
|
||||
M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) //fixes common causes for disfiguration
|
||||
REMOVE_TRAIT(M, TRAIT_DISFIGURED, TRAIT_GENERIC) //fixes common causes for disfiguration
|
||||
. = 1
|
||||
metabolization_rate = REAGENTS_METABOLISM * (0.00001 * (M.bodytemperature ** 2) + 0.5)
|
||||
..()
|
||||
@@ -152,7 +152,7 @@
|
||||
/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M)
|
||||
if(M.bodytemperature < T0C)
|
||||
M.adjustCloneLoss(0.00006 * (M.bodytemperature ** 2) - 6, 0)
|
||||
M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
REMOVE_TRAIT(M, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
. = 1
|
||||
metabolization_rate = REAGENTS_METABOLISM * (0.000015 * (M.bodytemperature ** 2) + 0.75)
|
||||
..()
|
||||
@@ -182,7 +182,7 @@
|
||||
M.adjustFireLoss(-1.5 * power, 0)
|
||||
M.adjustToxLoss(-power, 0, TRUE)
|
||||
M.adjustCloneLoss(-power, 0)
|
||||
M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
REMOVE_TRAIT(M, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M)
|
||||
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
|
||||
M.heal_bodypart_damage(1,1)
|
||||
M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
REMOVE_TRAIT(M, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -702,14 +702,14 @@
|
||||
var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
if (!eyes)
|
||||
return
|
||||
if(M.has_trait(TRAIT_BLIND, EYE_DAMAGE))
|
||||
if(HAS_TRAIT_FROM(M, TRAIT_BLIND, EYE_DAMAGE))
|
||||
if(prob(20))
|
||||
to_chat(M, "<span class='warning'>Your vision slowly returns...</span>")
|
||||
M.cure_blind(EYE_DAMAGE)
|
||||
M.cure_nearsighted(EYE_DAMAGE)
|
||||
M.blur_eyes(35)
|
||||
|
||||
else if(M.has_trait(TRAIT_NEARSIGHT, EYE_DAMAGE))
|
||||
else if(HAS_TRAIT_FROM(M, TRAIT_NEARSIGHT, EYE_DAMAGE))
|
||||
to_chat(M, "<span class='warning'>The blackness in your peripheral vision fades.</span>")
|
||||
M.cure_nearsighted(EYE_DAMAGE)
|
||||
M.blur_eyes(10)
|
||||
@@ -800,7 +800,7 @@
|
||||
M.visible_message("<span class='warning'>[M]'s body convulses a bit, and then falls still once more.</span>")
|
||||
return
|
||||
M.visible_message("<span class='warning'>[M]'s body convulses a bit.</span>")
|
||||
if(!M.suiciding && !(M.has_trait(TRAIT_NOCLONE)) && !M.hellbound)
|
||||
if(!M.suiciding && !(HAS_TRAIT(M, TRAIT_NOCLONE)) && !M.hellbound)
|
||||
if(!M)
|
||||
return
|
||||
if(M.notify_ghost_cloning(source = M))
|
||||
@@ -877,10 +877,10 @@
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_GOTTAGOFAST, id)
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_GOTTAGOFAST, id)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1189,10 +1189,10 @@
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_GOTTAGOREALLYFAST, id)
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOREALLYFAST, id)
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOREALLYFAST, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1211,10 +1211,10 @@
|
||||
|
||||
/datum/reagent/medicine/corazone/on_mob_add(mob/living/M)
|
||||
..()
|
||||
M.add_trait(TRAIT_STABLEHEART, id)
|
||||
ADD_TRAIT(M, TRAIT_STABLEHEART, id)
|
||||
|
||||
/datum/reagent/medicine/corazone/on_mob_delete(mob/living/M)
|
||||
M.remove_trait(TRAIT_STABLEHEART, id)
|
||||
REMOVE_TRAIT(M, TRAIT_STABLEHEART, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/muscle_stimulant
|
||||
@@ -1242,11 +1242,11 @@
|
||||
var/overdose_progress = 0 // to track overdose progress
|
||||
|
||||
/datum/reagent/medicine/modafinil/on_mob_add(mob/living/M)
|
||||
M.add_trait(TRAIT_SLEEPIMMUNE, id)
|
||||
ADD_TRAIT(M, TRAIT_SLEEPIMMUNE, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/modafinil/on_mob_delete(mob/living/M)
|
||||
M.remove_trait(TRAIT_SLEEPIMMUNE, id)
|
||||
REMOVE_TRAIT(M, TRAIT_SLEEPIMMUNE, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/modafinil/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -198,10 +198,10 @@
|
||||
|
||||
/datum/reagent/water/holywater/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_HOLY, id)
|
||||
ADD_TRAIT(L, TRAIT_HOLY, id)
|
||||
|
||||
/datum/reagent/water/holywater/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_HOLY, id)
|
||||
REMOVE_TRAIT(L, TRAIT_HOLY, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
@@ -1243,12 +1243,12 @@
|
||||
|
||||
/datum/reagent/stimulum/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_STUNIMMUNE, id)
|
||||
L.add_trait(TRAIT_SLEEPIMMUNE, id)
|
||||
ADD_TRAIT(L, TRAIT_STUNIMMUNE, id)
|
||||
ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, id)
|
||||
|
||||
/datum/reagent/stimulum/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_STUNIMMUNE, id)
|
||||
L.remove_trait(TRAIT_SLEEPIMMUNE, id)
|
||||
REMOVE_TRAIT(L, TRAIT_STUNIMMUNE, id)
|
||||
REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/stimulum/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1268,10 +1268,10 @@
|
||||
|
||||
/datum/reagent/nitryl/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_GOTTAGOFAST, id)
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
|
||||
/datum/reagent/nitryl/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_GOTTAGOFAST, id)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
..()
|
||||
|
||||
/////////////////////////Coloured Crayon Powder////////////////////////////
|
||||
@@ -1779,10 +1779,10 @@
|
||||
|
||||
/datum/reagent/pax/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_PACIFISM, id)
|
||||
ADD_TRAIT(L, TRAIT_PACIFISM, id)
|
||||
|
||||
/datum/reagent/pax/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_PACIFISM, id)
|
||||
REMOVE_TRAIT(L, TRAIT_PACIFISM, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/bz_metabolites
|
||||
@@ -1795,11 +1795,11 @@
|
||||
|
||||
/datum/reagent/bz_metabolites/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(CHANGELING_HIVEMIND_MUTE, id)
|
||||
ADD_TRAIT(L, CHANGELING_HIVEMIND_MUTE, id)
|
||||
|
||||
/datum/reagent/bz_metabolites/on_mob_delete(mob/living/L)
|
||||
..()
|
||||
L.remove_trait(CHANGELING_HIVEMIND_MUTE, id)
|
||||
REMOVE_TRAIT(L, CHANGELING_HIVEMIND_MUTE, id)
|
||||
|
||||
/datum/reagent/bz_metabolites/on_mob_life(mob/living/L)
|
||||
if(L.mind)
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
/datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C)
|
||||
. = TRUE
|
||||
|
||||
if(C.has_trait(TRAIT_NOBREATH))
|
||||
if(HAS_TRAIT(C, TRAIT_NOBREATH))
|
||||
. = FALSE
|
||||
|
||||
if(.)
|
||||
@@ -135,7 +135,7 @@
|
||||
taste_description = "mint"
|
||||
|
||||
/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M)
|
||||
if(M.has_trait(TRAIT_FAT))
|
||||
if(HAS_TRAIT(M, TRAIT_FAT))
|
||||
M.gib()
|
||||
return ..()
|
||||
|
||||
@@ -180,10 +180,10 @@
|
||||
|
||||
/datum/reagent/toxin/ghoulpowder/on_mob_add(mob/living/L)
|
||||
..()
|
||||
L.add_trait(TRAIT_FAKEDEATH, id)
|
||||
ADD_TRAIT(L, TRAIT_FAKEDEATH, id)
|
||||
|
||||
/datum/reagent/toxin/ghoulpowder/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_FAKEDEATH, id)
|
||||
REMOVE_TRAIT(L, TRAIT_FAKEDEATH, id)
|
||||
..()
|
||||
|
||||
/datum/reagent/toxin/ghoulpowder/on_mob_life(mob/living/carbon/M)
|
||||
@@ -883,7 +883,7 @@
|
||||
taste_description = "stillness"
|
||||
|
||||
/datum/reagent/toxin/mimesbane/on_mob_add(mob/living/L)
|
||||
L.add_trait(TRAIT_EMOTEMUTE, id)
|
||||
ADD_TRAIT(L, TRAIT_EMOTEMUTE, id)
|
||||
|
||||
/datum/reagent/toxin/mimesbane/on_mob_delete(mob/living/L)
|
||||
L.remove_trait(TRAIT_EMOTEMUTE, id)
|
||||
REMOVE_TRAIT(L, TRAIT_EMOTEMUTE, id)
|
||||
|
||||
@@ -106,11 +106,11 @@
|
||||
|
||||
/datum/nanite_program/conductive/enable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.add_trait(TRAIT_SHOCKIMMUNE, "nanites")
|
||||
ADD_TRAIT(host_mob, TRAIT_SHOCKIMMUNE, "nanites")
|
||||
|
||||
/datum/nanite_program/conductive/disable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.remove_trait(TRAIT_SHOCKIMMUNE, "nanites")
|
||||
REMOVE_TRAIT(host_mob, TRAIT_SHOCKIMMUNE, "nanites")
|
||||
|
||||
/datum/nanite_program/mindshield
|
||||
name = "Mental Barrier"
|
||||
@@ -121,10 +121,10 @@
|
||||
/datum/nanite_program/mindshield/enable_passive_effect()
|
||||
. = ..()
|
||||
if(!host_mob.mind.has_antag_datum(/datum/antagonist/rev)) //won't work if on a rev, to avoid having implanted revs
|
||||
host_mob.add_trait(TRAIT_MINDSHIELD, "nanites")
|
||||
ADD_TRAIT(host_mob, TRAIT_MINDSHIELD, "nanites")
|
||||
host_mob.sec_hud_set_implants()
|
||||
|
||||
/datum/nanite_program/mindshield/disable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.remove_trait(TRAIT_MINDSHIELD, "nanites")
|
||||
REMOVE_TRAIT(host_mob, TRAIT_MINDSHIELD, "nanites")
|
||||
host_mob.sec_hud_set_implants()
|
||||
@@ -215,7 +215,7 @@
|
||||
if(!iscarbon(host_mob)) //nonstandard biology
|
||||
return FALSE
|
||||
var/mob/living/carbon/C = host_mob
|
||||
if(C.suiciding || C.has_trait(TRAIT_NOCLONE) || C.hellbound) //can't revive
|
||||
if(C.suiciding || HAS_TRAIT(C, TRAIT_NOCLONE) || C.hellbound) //can't revive
|
||||
return FALSE
|
||||
if((world.time - C.timeofdeath) > 1800) //too late
|
||||
return FALSE
|
||||
|
||||
@@ -65,11 +65,11 @@
|
||||
|
||||
/datum/nanite_program/pacifying/enable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.add_trait(TRAIT_PACIFISM, "nanites")
|
||||
ADD_TRAIT(host_mob, TRAIT_PACIFISM, "nanites")
|
||||
|
||||
/datum/nanite_program/pacifying/disable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.remove_trait(TRAIT_PACIFISM, "nanites")
|
||||
REMOVE_TRAIT(host_mob, TRAIT_PACIFISM, "nanites")
|
||||
|
||||
/datum/nanite_program/blinding
|
||||
name = "Blindness"
|
||||
@@ -93,11 +93,11 @@
|
||||
|
||||
/datum/nanite_program/mute/enable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.add_trait(TRAIT_MUTE, "nanites")
|
||||
ADD_TRAIT(host_mob, TRAIT_MUTE, "nanites")
|
||||
|
||||
/datum/nanite_program/mute/disable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.remove_trait(TRAIT_MUTE, "nanites")
|
||||
REMOVE_TRAIT(host_mob, TRAIT_MUTE, "nanites")
|
||||
|
||||
/datum/nanite_program/fake_death
|
||||
name = "Death Simulation"
|
||||
|
||||
@@ -20,14 +20,14 @@ Slimecrossing Armor
|
||||
/obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot)
|
||||
. = ..()
|
||||
if(slot == SLOT_WEAR_MASK)
|
||||
user.add_trait(TRAIT_NOBREATH, "breathmask_[REF(src)]")
|
||||
ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
|
||||
user.failed_last_breath = FALSE
|
||||
user.clear_alert("not_enough_oxy")
|
||||
user.apply_status_effect(/datum/status_effect/rebreathing)
|
||||
|
||||
/obj/item/clothing/mask/nobreath/dropped(mob/living/carbon/human/user)
|
||||
..()
|
||||
user.remove_trait(TRAIT_NOBREATH, "breathmask_[REF(src)]")
|
||||
REMOVE_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
|
||||
user.remove_status_effect(/datum/status_effect/rebreathing)
|
||||
|
||||
/obj/item/clothing/glasses/prism_glasses
|
||||
@@ -112,11 +112,11 @@ Slimecrossing Armor
|
||||
/obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot)
|
||||
. = ..()
|
||||
if(slot == SLOT_HEAD)
|
||||
user.add_trait(TRAIT_PACIFISM, "peaceflower_[REF(src)]")
|
||||
ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
|
||||
|
||||
/obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user)
|
||||
..()
|
||||
user.remove_trait(TRAIT_PACIFISM, "peaceflower_[REF(src)]")
|
||||
REMOVE_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
|
||||
|
||||
/obj/item/clothing/head/peaceflower/attack_hand(mob/user)
|
||||
if(iscarbon(user))
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
if(last_check_time + 50 < world.time)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.mind && !H.has_trait(TRAIT_AGEUSIA))
|
||||
if(H.mind && !HAS_TRAIT(H, TRAIT_AGEUSIA))
|
||||
to_chat(H,"<span class='notice'>That didn't taste very good...</span>") //No disgust, though. It's just not good tasting.
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
|
||||
if(mood)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/datum/status_effect/rainbow_protection/on_apply()
|
||||
owner.status_flags |= GODMODE
|
||||
owner.add_trait(TRAIT_PACIFISM, "slimestatus")
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, "slimestatus")
|
||||
owner.visible_message("<span class='warning'>[owner] shines with a brilliant rainbow light.</span>",
|
||||
"<span class='notice'>You feel protected by an unknown force!</span>")
|
||||
originalcolor = owner.color
|
||||
@@ -24,7 +24,7 @@
|
||||
/datum/status_effect/rainbow_protection/on_remove()
|
||||
owner.status_flags &= ~GODMODE
|
||||
owner.color = originalcolor
|
||||
owner.remove_trait(TRAIT_PACIFISM, "slimestatus")
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, "slimestatus")
|
||||
owner.visible_message("<span class='notice'>[owner] stops glowing, the rainbow light fading away.</span>",
|
||||
"<span class='warning'>You no longer feel protected...</span>")
|
||||
|
||||
@@ -246,12 +246,12 @@ datum/status_effect/rebreathing/tick()
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/firecookie/on_apply()
|
||||
owner.add_trait(TRAIT_RESISTCOLD,"firecookie")
|
||||
ADD_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie")
|
||||
owner.adjust_bodytemperature(110)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/firecookie/on_remove()
|
||||
owner.remove_trait(TRAIT_RESISTCOLD,"firecookie")
|
||||
REMOVE_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie")
|
||||
|
||||
/datum/status_effect/watercookie
|
||||
id = "watercookie"
|
||||
@@ -260,7 +260,7 @@ datum/status_effect/rebreathing/tick()
|
||||
duration = 100
|
||||
|
||||
/datum/status_effect/watercookie/on_apply()
|
||||
owner.add_trait(TRAIT_NOSLIPWATER,"watercookie")
|
||||
ADD_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/watercookie/tick()
|
||||
@@ -268,7 +268,7 @@ datum/status_effect/rebreathing/tick()
|
||||
T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
|
||||
|
||||
/datum/status_effect/watercookie/on_remove()
|
||||
owner.remove_trait(TRAIT_NOSLIPWATER,"watercookie")
|
||||
REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie")
|
||||
|
||||
/datum/status_effect/metalcookie
|
||||
id = "metalcookie"
|
||||
@@ -313,11 +313,11 @@ datum/status_effect/rebreathing/tick()
|
||||
duration = 600
|
||||
|
||||
/datum/status_effect/toxincookie/on_apply()
|
||||
owner.add_trait(TRAIT_TOXINLOVER,"toxincookie")
|
||||
ADD_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/toxincookie/on_remove()
|
||||
owner.remove_trait(TRAIT_TOXINLOVER,"toxincookie")
|
||||
REMOVE_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie")
|
||||
|
||||
/datum/status_effect/timecookie
|
||||
id = "timecookie"
|
||||
@@ -417,11 +417,11 @@ datum/status_effect/rebreathing/tick()
|
||||
duration = 30
|
||||
|
||||
/datum/status_effect/plur/on_apply()
|
||||
owner.add_trait(TRAIT_PACIFISM, "peacecookie")
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, "peacecookie")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/plur/on_remove()
|
||||
owner.remove_trait(TRAIT_PACIFISM, "peacecookie")
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, "peacecookie")
|
||||
|
||||
/datum/status_effect/adamantinecookie
|
||||
id = "adamantinecookie"
|
||||
@@ -515,11 +515,11 @@ datum/status_effect/rebreathing/tick()
|
||||
colour = "blue"
|
||||
|
||||
/datum/status_effect/stabilized/blue/on_apply()
|
||||
owner.add_trait(TRAIT_NOSLIPWATER, "slimestatus")
|
||||
ADD_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus")
|
||||
return ..()
|
||||
|
||||
datum/status_effect/stabilized/blue/on_remove()
|
||||
owner.remove_trait(TRAIT_NOSLIPWATER, "slimestatus")
|
||||
REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus")
|
||||
|
||||
/datum/status_effect/stabilized/metal
|
||||
id = "stabilizedmetal"
|
||||
@@ -580,7 +580,7 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
examine_text = "<span class='notice'>Their fingertips burn brightly!</span>"
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/on_apply()
|
||||
owner.add_trait(TRAIT_RESISTHEATHANDS, "slimestatus")
|
||||
ADD_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus")
|
||||
fire = new(owner)
|
||||
return ..()
|
||||
|
||||
@@ -596,7 +596,7 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/darkpurple/on_remove()
|
||||
owner.remove_trait(TRAIT_RESISTHEATHANDS, "slimestatus")
|
||||
REMOVE_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus")
|
||||
qdel(fire)
|
||||
|
||||
/datum/status_effect/stabilized/darkblue
|
||||
@@ -916,7 +916,7 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
colour = "light pink"
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_apply()
|
||||
owner.add_trait(TRAIT_GOTTAGOFAST,"slimestatus")
|
||||
ADD_TRAIT(owner, TRAIT_GOTTAGOFAST,"slimestatus")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/tick()
|
||||
@@ -927,7 +927,7 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_remove()
|
||||
owner.remove_trait(TRAIT_GOTTAGOFAST,"slimestatus")
|
||||
REMOVE_TRAIT(owner, TRAIT_GOTTAGOFAST,"slimestatus")
|
||||
|
||||
/datum/status_effect/stabilized/adamantine
|
||||
id = "stabilizedadamantine"
|
||||
|
||||
@@ -427,7 +427,7 @@ Charged extracts:
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You drink the pacification potion!</span>")
|
||||
if(isanimal(M))
|
||||
M.add_trait(TRAIT_PACIFISM, MAGIC_TRAIT)
|
||||
ADD_TRAIT(M, TRAIT_PACIFISM, MAGIC_TRAIT)
|
||||
else if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_SURGERY)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
for(var/A in mutations)
|
||||
target.dna.add_mutation(A)
|
||||
for(var/A in traits)
|
||||
target.add_trait(A, GENETICS_SPELL)
|
||||
ADD_TRAIT(target, A, GENETICS_SPELL)
|
||||
active_on += target
|
||||
addtimer(CALLBACK(src, .proc/remove, target), duration)
|
||||
|
||||
@@ -41,4 +41,4 @@
|
||||
for(var/A in mutations)
|
||||
target.dna.remove_mutation(A)
|
||||
for(var/A in traits)
|
||||
target.remove_trait(A, GENETICS_SPELL)
|
||||
REMOVE_TRAIT(target, A, GENETICS_SPELL)
|
||||
@@ -258,25 +258,25 @@
|
||||
var/obj/item/organ/lungs/L = H.internal_organs_slot[ORGAN_SLOT_LUNGS]
|
||||
L.tox_breath_dam_min = 0
|
||||
L.tox_breath_dam_max = 0
|
||||
H.add_trait(TRAIT_VIRUSIMMUNE, "dna_vault")
|
||||
ADD_TRAIT(H, TRAIT_VIRUSIMMUNE, "dna_vault")
|
||||
if(VAULT_NOBREATH)
|
||||
to_chat(H, "<span class='notice'>Your lungs feel great.</span>")
|
||||
H.add_trait(TRAIT_NOBREATH, "dna_vault")
|
||||
ADD_TRAIT(H, TRAIT_NOBREATH, "dna_vault")
|
||||
if(VAULT_FIREPROOF)
|
||||
to_chat(H, "<span class='notice'>You feel fireproof.</span>")
|
||||
S.burnmod = 0.5
|
||||
H.add_trait(TRAIT_RESISTHEAT, "dna_vault")
|
||||
H.add_trait(TRAIT_NOFIRE, "dna_vault")
|
||||
ADD_TRAIT(H, TRAIT_RESISTHEAT, "dna_vault")
|
||||
ADD_TRAIT(H, TRAIT_NOFIRE, "dna_vault")
|
||||
if(VAULT_STUNTIME)
|
||||
to_chat(H, "<span class='notice'>Nothing can keep you down for long.</span>")
|
||||
S.stunmod = 0.5
|
||||
if(VAULT_ARMOUR)
|
||||
to_chat(H, "<span class='notice'>You feel tough.</span>")
|
||||
S.armor = 30
|
||||
H.add_trait(TRAIT_PIERCEIMMUNE, "dna_vault")
|
||||
ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, "dna_vault")
|
||||
if(VAULT_SPEED)
|
||||
to_chat(H, "<span class='notice'>Your legs feel faster.</span>")
|
||||
H.add_trait(TRAIT_GOTTAGOFAST, "dna_vault")
|
||||
ADD_TRAIT(H, TRAIT_GOTTAGOFAST, "dna_vault")
|
||||
if(VAULT_QUICK)
|
||||
to_chat(H, "<span class='notice'>Your arms move as fast as lightning.</span>")
|
||||
H.next_move_modifier = 0.5
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(!target.mind)
|
||||
user.visible_message("[target] doesn't respond to the brainwashing, as if [target.p_they()] lacked a mind...")
|
||||
return FALSE
|
||||
if(target.has_trait(TRAIT_MINDSHIELD))
|
||||
if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
|
||||
user.visible_message("You hear a faint buzzing from a device inside [target]'s brain, and the brainwashing is erased.")
|
||||
return FALSE
|
||||
user.visible_message("[user] successfully brainwashes [target]!", "<span class='notice'>You succeed in brainwashing [target].</span>")
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
return FALSE
|
||||
if(target.stat != DEAD)
|
||||
return FALSE
|
||||
if(target.suiciding || target.has_trait(TRAIT_NOCLONE) || target.hellbound)
|
||||
if(target.suiciding || HAS_TRAIT(target, TRAIT_NOCLONE) || target.hellbound)
|
||||
return FALSE
|
||||
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B)
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
/obj/item/bodypart/attack(mob/living/carbon/C, mob/user)
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(C.has_trait(TRAIT_LIMBATTACHMENT))
|
||||
if(HAS_TRAIT(C, TRAIT_LIMBATTACHMENT))
|
||||
if(!H.get_bodypart(body_zone) && !animal_origin)
|
||||
if(H == user)
|
||||
H.visible_message("<span class='warning'>[H] jams [src] into [H.p_their()] empty socket!</span>",\
|
||||
@@ -221,7 +221,7 @@
|
||||
|
||||
//Checks disabled status thresholds
|
||||
/obj/item/bodypart/proc/check_disabled()
|
||||
if(!can_dismember() || owner.has_trait(TRAIT_NODISMEMBER))
|
||||
if(!can_dismember() || HAS_TRAIT(owner, TRAIT_NODISMEMBER))
|
||||
return
|
||||
if(!disabled && (get_damage(TRUE) >= max_damage))
|
||||
set_disabled(TRUE)
|
||||
@@ -284,7 +284,7 @@
|
||||
C = owner
|
||||
no_update = FALSE
|
||||
|
||||
if(C.has_trait(TRAIT_HUSK) && is_organic_limb())
|
||||
if(HAS_TRAIT(C, TRAIT_HUSK) && is_organic_limb())
|
||||
species_id = "husk" //overrides species_id
|
||||
dmg_overlay_type = "" //no damage overlay shown when husked
|
||||
should_draw_gender = FALSE
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
return FALSE
|
||||
if(C.status_flags & GODMODE)
|
||||
return FALSE
|
||||
if(C.has_trait(TRAIT_NODISMEMBER))
|
||||
if(HAS_TRAIT(C, TRAIT_NODISMEMBER))
|
||||
return FALSE
|
||||
|
||||
var/obj/item/bodypart/affecting = C.get_bodypart(BODY_ZONE_CHEST)
|
||||
@@ -47,7 +47,7 @@
|
||||
var/mob/living/carbon/C = owner
|
||||
if(!dismemberable)
|
||||
return FALSE
|
||||
if(C.has_trait(TRAIT_NODISMEMBER))
|
||||
if(HAS_TRAIT(C, TRAIT_NODISMEMBER))
|
||||
return FALSE
|
||||
. = list()
|
||||
var/organ_spilled = 0
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
C = owner
|
||||
|
||||
real_name = C.real_name
|
||||
if(C.has_trait(TRAIT_HUSK))
|
||||
if(HAS_TRAIT(C, TRAIT_HUSK))
|
||||
real_name = "Unknown"
|
||||
hair_style = "Bald"
|
||||
facial_hair_style = "Shaved"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
|
||||
/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target)
|
||||
if(target.has_trait(TRAIT_FAT))
|
||||
if(HAS_TRAIT(target, TRAIT_FAT))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
return
|
||||
var/mob/living/carbon/C = owner
|
||||
// genetic deafness prevents the body from using the ears, even if healthy
|
||||
if(C.has_trait(TRAIT_DEAF))
|
||||
if(HAS_TRAIT(C, TRAIT_DEAF))
|
||||
deaf = max(deaf, 1)
|
||||
else if(ear_damage < UNHEALING_EAR_DAMAGE) // if higher than UNHEALING_EAR_DAMAGE, no natural healing occurs.
|
||||
ear_damage = max(ear_damage - 0.05, 0)
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
var/mob/living/carbon/C = owner
|
||||
|
||||
if(iscarbon(owner) && C.has_trait(TRAIT_DEAF))
|
||||
if(iscarbon(owner) && HAS_TRAIT(C, TRAIT_DEAF))
|
||||
deaf = 1
|
||||
|
||||
/obj/item/organ/ears/proc/adjustEarDamage(ddmg, ddeaf)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
HMN.regenerate_icons()
|
||||
else
|
||||
eye_color = HMN.eye_color
|
||||
if(HMN.has_trait(TRAIT_NIGHT_VISION) && !lighting_alpha)
|
||||
if(HAS_TRAIT(HMN, TRAIT_NIGHT_VISION) && !lighting_alpha)
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_NV_TRAIT
|
||||
see_in_dark = 8
|
||||
M.update_tint()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
//slowly heal liver damage
|
||||
damage = max(0, damage - 0.1)
|
||||
|
||||
if(filterToxins && !owner.has_trait(TRAIT_TOXINLOVER))
|
||||
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
|
||||
//handle liver toxin filtration
|
||||
for(var/I in C.reagents.reagent_list)
|
||||
var/datum/reagent/pickedreagent = I
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
if((H.status_flags & GODMODE))
|
||||
return
|
||||
if(H.has_trait(TRAIT_NOBREATH))
|
||||
if(HAS_TRAIT(H, TRAIT_NOBREATH))
|
||||
return
|
||||
|
||||
if(!breath || (breath.total_moles() == 0))
|
||||
@@ -66,7 +66,7 @@
|
||||
return
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
||||
else if(!H.has_trait(TRAIT_NOCRITDAMAGE))
|
||||
else if(!HAS_TRAIT(H, TRAIT_NOCRITDAMAGE))
|
||||
H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
|
||||
|
||||
H.failed_last_breath = TRUE
|
||||
@@ -365,7 +365,7 @@
|
||||
/obj/item/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/H) // called by human/life, handles temperatures
|
||||
var/breath_temperature = breath.temperature
|
||||
|
||||
if(!H.has_trait(TRAIT_RESISTCOLD)) // COLD DAMAGE
|
||||
if(!HAS_TRAIT(H, TRAIT_RESISTCOLD)) // COLD DAMAGE
|
||||
var/cold_modifier = H.dna.species.coldmod
|
||||
if(breath_temperature < cold_level_3_threshold)
|
||||
H.apply_damage_type(cold_level_3_damage*cold_modifier, cold_damage_type)
|
||||
@@ -377,7 +377,7 @@
|
||||
if(prob(20))
|
||||
to_chat(H, "<span class='warning'>You feel [cold_message] in your [name]!</span>")
|
||||
|
||||
if(!H.has_trait(TRAIT_RESISTHEAT)) // HEAT DAMAGE
|
||||
if(!HAS_TRAIT(H, TRAIT_RESISTHEAT)) // HEAT DAMAGE
|
||||
var/heat_modifier = H.dna.species.heatmod
|
||||
if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold)
|
||||
H.apply_damage_type(heat_level_1_damage*heat_modifier, heat_damage_type)
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
var/breathes = TRUE
|
||||
var/blooded = TRUE
|
||||
if(dna && dna.species)
|
||||
if(has_trait(TRAIT_NOBREATH, SPECIES_TRAIT))
|
||||
if(HAS_TRAIT_FROM(src, TRAIT_NOBREATH, SPECIES_TRAIT))
|
||||
breathes = FALSE
|
||||
if(NOBLOOD in dna.species.species_traits)
|
||||
blooded = FALSE
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
user.visible_message("[user] begins to alter [target]'s appearance.", "<span class='notice'>You begin to alter [target]'s appearance...</span>")
|
||||
|
||||
/datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.has_trait(TRAIT_DISFIGURED, TRAIT_GENERIC))
|
||||
target.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
if(HAS_TRAIT_FROM(target, TRAIT_DISFIGURED, TRAIT_GENERIC))
|
||||
REMOVE_TRAIT(target, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
user.visible_message("[user] successfully restores [target]'s appearance!", "<span class='notice'>You successfully restore [target]'s appearance.</span>")
|
||||
else
|
||||
var/list/names = list()
|
||||
|
||||
Reference in New Issue
Block a user