should be ready.
This commit is contained in:
@@ -100,7 +100,7 @@
|
||||
|
||||
//helper for getting the appropriate health status
|
||||
/proc/RoundHealth(mob/living/M)
|
||||
if(M.stat == DEAD || (M.has_trait(TRAIT_FAKEDEATH)))
|
||||
if(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH)))
|
||||
return "health-100" //what's our health? it doesn't matter, we're dead, or faking
|
||||
var/maxi_health = M.maxHealth
|
||||
if(iscarbon(M) && M.health < 0)
|
||||
@@ -172,7 +172,7 @@
|
||||
var/image/holder = hud_list[STATUS_HUD]
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH)))
|
||||
if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||
holder.icon_state = "huddead"
|
||||
else
|
||||
holder.icon_state = "hudhealthy"
|
||||
@@ -182,9 +182,9 @@
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
var/virus_threat = check_virus()
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
if(has_trait(TRAIT_XENO_HOST))
|
||||
if(HAS_TRAIT(src, TRAIT_XENO_HOST))
|
||||
holder.icon_state = "hudxeno"
|
||||
else if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH)))
|
||||
else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||
if(tod)
|
||||
var/tdelta = round(world.time - timeofdeath)
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
@@ -242,7 +242,7 @@
|
||||
var/icon/IC = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = IC.Height() - world.icon_size
|
||||
holder.icon_state = "hud_imp_chem"
|
||||
if(has_trait(TRAIT_MINDSHIELD))
|
||||
if(HAS_TRAIT(src, TRAIT_MINDSHIELD))
|
||||
holder = hud_list[IMPLOYAL_HUD]
|
||||
var/icon/IC = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = IC.Height() - world.icon_size
|
||||
|
||||
@@ -64,7 +64,7 @@ Credit where due:
|
||||
return FALSE
|
||||
if(isliving(M))
|
||||
var/mob/living/L = M
|
||||
if(L.has_trait(TRAIT_MINDSHIELD))
|
||||
if(HAS_TRAIT(L, TRAIT_MINDSHIELD))
|
||||
return FALSE
|
||||
if(ishuman(M) || isbrain(M) || isguardian(M) || issilicon(M) || isclockmob(M) || istype(M, /mob/living/simple_animal/drone/cogscarab) || istype(M, /mob/camera/eminence))
|
||||
return TRUE
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
return FALSE
|
||||
else
|
||||
return FALSE
|
||||
if(M.has_trait(TRAIT_MINDSHIELD) || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M) || !M.client)
|
||||
if(HAS_TRAIT(M, TRAIT_MINDSHIELD) || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M) || !M.client)
|
||||
return FALSE //can't convert machines, shielded, braindead, or ratvar's dogs
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -182,11 +182,11 @@
|
||||
|
||||
//Get the clone body ready
|
||||
maim_clone(H)
|
||||
H.add_trait(TRAIT_STABLEHEART, "cloning")
|
||||
H.add_trait(TRAIT_EMOTEMUTE, "cloning")
|
||||
H.add_trait(TRAIT_MUTE, "cloning")
|
||||
H.add_trait(TRAIT_NOBREATH, "cloning")
|
||||
H.add_trait(TRAIT_NOCRITDAMAGE, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_STABLEHEART, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_EMOTEMUTE, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_MUTE, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_NOBREATH, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, "cloning")
|
||||
H.Unconscious(80)
|
||||
|
||||
clonemind.transfer_to(H)
|
||||
@@ -361,11 +361,11 @@
|
||||
if(!mob_occupant)
|
||||
return
|
||||
|
||||
mob_occupant.remove_trait(TRAIT_STABLEHEART, "cloning")
|
||||
mob_occupant.remove_trait(TRAIT_EMOTEMUTE, "cloning")
|
||||
mob_occupant.remove_trait(TRAIT_MUTE, "cloning")
|
||||
mob_occupant.remove_trait(TRAIT_NOCRITDAMAGE, "cloning")
|
||||
mob_occupant.remove_trait(TRAIT_NOBREATH, "cloning")
|
||||
REMOVE_TRAIT(mob_occupant, TRAIT_STABLEHEART, "cloning")
|
||||
REMOVE_TRAIT(mob_occupant, TRAIT_EMOTEMUTE, "cloning")
|
||||
REMOVE_TRAIT(mob_occupant, TRAIT_MUTE, "cloning")
|
||||
REMOVE_TRAIT(mob_occupant, TRAIT_NOCRITDAMAGE, "cloning")
|
||||
REMOVE_TRAIT(mob_occupant, TRAIT_NOBREATH, "cloning")
|
||||
|
||||
if(grab_ghost_when == CLONER_MATURE_CLONE)
|
||||
mob_occupant.grab_ghost()
|
||||
@@ -452,7 +452,7 @@
|
||||
|
||||
// brain function, they also have no limbs or internal organs.
|
||||
|
||||
if(!H.has_trait(TRAIT_NODISMEMBER))
|
||||
if(!HAS_TRAIT(H, TRAIT_NODISMEMBER))
|
||||
var/static/list/zones = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
|
||||
for(var/zone in zones)
|
||||
var/obj/item/bodypart/BP = H.get_bodypart(zone)
|
||||
|
||||
@@ -450,7 +450,7 @@
|
||||
scantemp = "<font class='bad'>Subject's brain is not responding to scanning stimuli.</font>"
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
return
|
||||
if((mob_occupant.has_trait(TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
|
||||
if((HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
|
||||
scantemp = "<font class='bad'>Subject no longer contains the fundamental materials required to create a living clone.</font>"
|
||||
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
|
||||
return
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
if(connected && connected.is_operational())
|
||||
if(connected.occupant) //set occupant_status message
|
||||
viable_occupant = connected.occupant
|
||||
if(viable_occupant.has_dna() && !viable_occupant.has_trait(TRAIT_RADIMMUNE) && !viable_occupant.has_trait(TRAIT_NOCLONE) || (connected.scan_level == 3)) //occupant is viable for dna modification
|
||||
if(viable_occupant.has_dna() && !HAS_TRAIT(viable_occupant, TRAIT_RADIMMUNE) && !HAS_TRAIT(viable_occupant, TRAIT_NOCLONE) || (connected.scan_level == 3)) //occupant is viable for dna modification
|
||||
occupant_status += "[viable_occupant.name] => "
|
||||
switch(viable_occupant.stat)
|
||||
if(CONSCIOUS)
|
||||
@@ -523,7 +523,7 @@
|
||||
var/mob/living/carbon/viable_occupant = null
|
||||
if(connected)
|
||||
viable_occupant = connected.occupant
|
||||
if(!istype(viable_occupant) || !viable_occupant.dna || viable_occupant.has_trait(TRAIT_RADIMMUNE) || viable_occupant.has_trait(TRAIT_NOCLONE))
|
||||
if(!istype(viable_occupant) || !viable_occupant.dna || HAS_TRAIT(viable_occupant, TRAIT_RADIMMUNE) || HAS_TRAIT(viable_occupant, TRAIT_NOCLONE))
|
||||
viable_occupant = null
|
||||
return viable_occupant
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
|
||||
if(istype(mob_occupant))
|
||||
if(locate_computer(/obj/machinery/computer/cloning))
|
||||
if(!mob_occupant.suiciding && !(mob_occupant.has_trait(TRAIT_NOCLONE)) && !mob_occupant.hellbound)
|
||||
if(!mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && !mob_occupant.hellbound)
|
||||
mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src)
|
||||
|
||||
// DNA manipulators cannot operate on severed heads or brains
|
||||
|
||||
@@ -763,7 +763,7 @@
|
||||
|
||||
if(ishuman(user) && prob(40) && src.density)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if((H.has_trait(TRAIT_DUMB)) && Adjacent(user))
|
||||
if((HAS_TRAIT(H, TRAIT_DUMB)) && Adjacent(user))
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
if(!istype(H.head, /obj/item/clothing/head/helmet))
|
||||
H.visible_message("<span class='danger'>[user] headbutts the airlock.</span>", \
|
||||
|
||||
@@ -42,11 +42,11 @@
|
||||
icon_state = "pod_1"
|
||||
//Get the clone body ready
|
||||
maim_clone(H)
|
||||
H.add_trait(TRAIT_STABLEHEART, "cloning")
|
||||
H.add_trait(TRAIT_EMOTEMUTE, "cloning")
|
||||
H.add_trait(TRAIT_MUTE, "cloning")
|
||||
H.add_trait(TRAIT_NOBREATH, "cloning")
|
||||
H.add_trait(TRAIT_NOCRITDAMAGE, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_STABLEHEART, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_EMOTEMUTE, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_MUTE, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_NOBREATH, "cloning")
|
||||
ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, "cloning")
|
||||
H.Unconscious(80)
|
||||
|
||||
var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone?", null, null, null, 100, H)
|
||||
@@ -268,7 +268,7 @@
|
||||
scantemp = "<font class='bad'>Unable to locate valid genetic data.</font>"
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
return
|
||||
if((mob_occupant.has_trait(TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
|
||||
if((HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
|
||||
scantemp = "<font class='bad'>Subject no longer contains the fundamental materials required to create a living clone.</font>"
|
||||
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
|
||||
return
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
say("Subject is not organic.")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
return
|
||||
if(!allow_living && !(C.stat == DEAD || C.has_trait(TRAIT_FAKEDEATH))) //I mean, the machines scanners arent advanced enough to tell you're alive
|
||||
if(!allow_living && !(C.stat == DEAD || HAS_TRAIT(C, TRAIT_FAKEDEATH))) //I mean, the machines scanners arent advanced enough to tell you're alive
|
||||
say("Subject is still alive.")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
|
||||
return
|
||||
|
||||
@@ -485,7 +485,7 @@
|
||||
threatcount += 4
|
||||
|
||||
if(shoot_unloyal)
|
||||
if (!perp.has_trait(TRAIT_MINDSHIELD))
|
||||
if (!HAS_TRAIT(perp, TRAIT_MINDSHIELD))
|
||||
threatcount += 4
|
||||
|
||||
return threatcount
|
||||
|
||||
@@ -446,13 +446,13 @@
|
||||
var/mob/living/L = user
|
||||
if(!Adjacent(target))
|
||||
if(selected && selected.is_ranged())
|
||||
if(L.has_trait(TRAIT_PACIFISM) && selected.harmful)
|
||||
if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful)
|
||||
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
|
||||
return
|
||||
if(selected.action(target,params))
|
||||
selected.start_cooldown()
|
||||
else if(selected && selected.is_melee())
|
||||
if(isliving(target) && selected.harmful && L.has_trait(TRAIT_PACIFISM))
|
||||
if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
|
||||
return
|
||||
if(selected.action(target,params))
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
..()
|
||||
if(ishuman(O))
|
||||
var/mob/living/carbon/human/H = O
|
||||
if(H.shoes && blood_state && bloodiness && !H.has_trait(TRAIT_LIGHT_STEP))
|
||||
if(H.shoes && blood_state && bloodiness && !HAS_TRAIT(H, TRAIT_LIGHT_STEP))
|
||||
var/obj/item/clothing/shoes/S = H.shoes
|
||||
var/add_blood = 0
|
||||
if(bloodiness >= BLOOD_GAIN_PER_STEP)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/Crossed(mob/living/L)
|
||||
if(istype(L) && has_gravity(loc))
|
||||
playsound(loc, 'sound/effects/gib_step.ogg', L.has_trait(TRAIT_LIGHT_STEP) ? 20 : 50, 1)
|
||||
playsound(loc, 'sound/effects/gib_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 20 : 50, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions)
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
if(!victim.client || !istype(victim))
|
||||
return
|
||||
to_chat(victim, "<span class='notice'>You feel fast!</span>")
|
||||
victim.add_trait(TRAIT_GOTTAGOREALLYFAST, "yellow_orb")
|
||||
ADD_TRAIT(victim, TRAIT_GOTTAGOREALLYFAST, "yellow_orb")
|
||||
sleep(duration)
|
||||
victim.remove_trait(TRAIT_GOTTAGOREALLYFAST, "yellow_orb")
|
||||
REMOVE_TRAIT(victim, TRAIT_GOTTAGOREALLYFAST, "yellow_orb")
|
||||
to_chat(victim, "<span class='notice'>You slow down.</span>")
|
||||
|
||||
@@ -256,7 +256,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
can_handle_hot = TRUE
|
||||
else if(C.gloves && (C.gloves.max_heat_protection_temperature > 360))
|
||||
can_handle_hot = TRUE
|
||||
else if(C.has_trait(TRAIT_RESISTHEAT) || C.has_trait(TRAIT_RESISTHEATHANDS))
|
||||
else if(HAS_TRAIT(C, TRAIT_RESISTHEAT) || HAS_TRAIT(C, TRAIT_RESISTHEATHANDS))
|
||||
can_handle_hot = TRUE
|
||||
|
||||
if(can_handle_hot)
|
||||
@@ -449,10 +449,10 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
return 0
|
||||
|
||||
/obj/item/proc/eyestab(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm [M]!</span>")
|
||||
return
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
M = user
|
||||
var/is_human_victim = 0
|
||||
var/obj/item/bodypart/affecting = M.get_bodypart(BODY_ZONE_HEAD)
|
||||
@@ -523,7 +523,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
M.adjust_blurriness(15)
|
||||
if(M.stat != DEAD)
|
||||
to_chat(M, "<span class='danger'>Your eyes start to bleed profusely!</span>")
|
||||
if(!(M.has_trait(TRAIT_BLIND) || M.has_trait(TRAIT_NEARSIGHT)))
|
||||
if(!(HAS_TRAIT(M, TRAIT_BLIND) || HAS_TRAIT(M, TRAIT_NEARSIGHT)))
|
||||
to_chat(M, "<span class='danger'>You become nearsighted!</span>")
|
||||
M.become_nearsighted(EYE_DAMAGE)
|
||||
if(prob(50))
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
owner.add_trait(TRAIT_XENO_HOST, TRAIT_GENERIC)
|
||||
ADD_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC)
|
||||
START_PROCESSING(SSobj, src)
|
||||
owner.med_hud_set_status()
|
||||
INVOKE_ASYNC(src, .proc/AddInfectionImages, owner)
|
||||
@@ -24,7 +24,7 @@
|
||||
/obj/item/organ/body_egg/Remove(var/mob/living/carbon/M, special = 0)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
if(owner)
|
||||
owner.remove_trait(TRAIT_XENO_HOST, TRAIT_GENERIC)
|
||||
REMOVE_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC)
|
||||
owner.med_hud_set_status()
|
||||
INVOKE_ASYNC(src, .proc/RemoveInfectionImages, owner)
|
||||
..()
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
cost = 0
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if (H.has_trait(TRAIT_TAGGER))
|
||||
if (HAS_TRAIT(H, TRAIT_TAGGER))
|
||||
cost *= 0.5
|
||||
var/charges_used = use_charges(user, cost)
|
||||
if(!charges_used)
|
||||
|
||||
@@ -444,7 +444,7 @@
|
||||
|
||||
/obj/item/twohanded/shockpaddles/proc/can_defib(mob/living/carbon/H)
|
||||
var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain)
|
||||
return (!H.suiciding && !(H.has_trait(TRAIT_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain)
|
||||
return (!H.suiciding && !(HAS_TRAIT(H, TRAIT_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain)
|
||||
|
||||
/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H)
|
||||
if(req_defib)
|
||||
@@ -585,7 +585,7 @@
|
||||
shock_touching(30, H)
|
||||
var/failed
|
||||
|
||||
if (H.suiciding || (H.has_trait(TRAIT_NOCLONE)))
|
||||
if (H.suiciding || (HAS_TRAIT(H, TRAIT_NOCLONE)))
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
|
||||
else if (H.hellbound)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existence. Further attempts futile.</span>"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
add_fingerprint(user)
|
||||
if(istype(M) && on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH))
|
||||
|
||||
if((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
@@ -86,7 +86,7 @@
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] directs [src] to [M]'s eyes.</span>", \
|
||||
"<span class='danger'>You direct [src] to [M]'s eyes.</span>")
|
||||
if(M.stat == DEAD || (M.has_trait(TRAIT_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind
|
||||
if(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind
|
||||
to_chat(user, "<span class='warning'>[M]'s pupils don't react to the light!</span>")
|
||||
else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-ray vision
|
||||
to_chat(user, "<span class='danger'>[M]'s pupils give an eerie glow!</span>")
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
/obj/item/instrument/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/musicaltuner))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if (H.has_trait(TRAIT_MUSICIAN))
|
||||
if (HAS_TRAIT(H, TRAIT_MUSICIAN))
|
||||
if (!tune_time)
|
||||
H.visible_message("[H] tunes the [src] to perfection!", "<span class='notice'>You tune the [src] to perfection!</span>")
|
||||
tune_time = 300
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if (!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(user.has_trait(TRAIT_NOGUNS))
|
||||
if(HAS_TRAIT(user, TRAIT_NOGUNS))
|
||||
to_chat(user, "<span class='warning'>Your fingers can't press the button!</span>")
|
||||
return
|
||||
if(ishuman(user))
|
||||
|
||||
@@ -95,7 +95,7 @@ SLIME SCANNER
|
||||
/obj/item/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user)
|
||||
|
||||
// Clumsiness/brain damage check
|
||||
if ((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50))
|
||||
if ((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50))
|
||||
to_chat(user, "<span class='notice'>You stupidly try to analyze the floor's vitals!</span>")
|
||||
user.visible_message("<span class='warning'>[user] has analyzed the floor's vitals!</span>")
|
||||
var/msg = "<span class='info'>*---------*\nAnalyzing results for The floor:\n\tOverall status: <b>Healthy</b>\n"
|
||||
@@ -127,7 +127,7 @@ SLIME SCANNER
|
||||
var/brute_loss = M.getBruteLoss()
|
||||
var/mob_status = (M.stat == DEAD ? "<span class='alert'><b>Deceased</b></span>" : "<b>[round(M.health/M.maxHealth,0.01)*100] % healthy</b>")
|
||||
|
||||
if(M.has_trait(TRAIT_FAKEDEATH) && !advanced)
|
||||
if(HAS_TRAIT(M, TRAIT_FAKEDEATH) && !advanced)
|
||||
mob_status = "<span class='alert'><b>Deceased</b></span>"
|
||||
oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss
|
||||
|
||||
@@ -199,10 +199,10 @@ SLIME SCANNER
|
||||
msg += "\t<span class='info'><b>==EAR STATUS==</b></span>\n"
|
||||
if(istype(ears))
|
||||
var/healthy = TRUE
|
||||
if(C.has_trait(TRAIT_DEAF, GENETIC_MUTATION))
|
||||
if(HAS_TRAIT_FROM(C, TRAIT_DEAF, GENETIC_MUTATION))
|
||||
healthy = FALSE
|
||||
msg += "\t<span class='alert'>Subject is genetically deaf.</span>\n"
|
||||
else if(C.has_trait(TRAIT_DEAF))
|
||||
else if(HAS_TRAIT(C, TRAIT_DEAF))
|
||||
healthy = FALSE
|
||||
msg += "\t<span class='alert'>Subject is deaf.</span>\n"
|
||||
else
|
||||
@@ -220,10 +220,10 @@ SLIME SCANNER
|
||||
msg += "\t<span class='info'><b>==EYE STATUS==</b></span>\n"
|
||||
if(istype(eyes))
|
||||
var/healthy = TRUE
|
||||
if(C.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(C, TRAIT_BLIND))
|
||||
msg += "\t<span class='alert'>Subject is blind.</span>\n"
|
||||
healthy = FALSE
|
||||
if(C.has_trait(TRAIT_NEARSIGHT))
|
||||
if(HAS_TRAIT(C, TRAIT_NEARSIGHT))
|
||||
msg += "\t<span class='alert'>Subject is nearsighted.</span>\n"
|
||||
healthy = FALSE
|
||||
if(eyes.eye_damage > 30)
|
||||
@@ -290,7 +290,7 @@ SLIME SCANNER
|
||||
msg += "<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)</span>\n"
|
||||
|
||||
// Time of death
|
||||
if(M.tod && (M.stat == DEAD || ((M.has_trait(TRAIT_FAKEDEATH)) && !advanced)))
|
||||
if(M.tod && (M.stat == DEAD || ((HAS_TRAIT(M, TRAIT_FAKEDEATH)) && !advanced)))
|
||||
msg += "<span class='info'>Time of Death:</span> [M.tod]\n"
|
||||
var/tdelta = round(world.time - M.timeofdeath)
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
/obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
|
||||
prepare()
|
||||
|
||||
if(M.has_dna() && !M.has_trait(TRAIT_RADIMMUNE) && !M.has_trait(TRAIT_NOCLONE))
|
||||
if(M.has_dna() && !HAS_TRAIT(M, TRAIT_RADIMMUNE) && !HAS_TRAIT(M, TRAIT_NOCLONE))
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
@@ -313,7 +313,7 @@
|
||||
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
|
||||
return FALSE
|
||||
|
||||
if(M.has_dna() && !(M.has_trait(TRAIT_NOCLONE)))
|
||||
if(M.has_dna() && !(HAS_TRAIT(M, TRAIT_NOCLONE)))
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
var/endtime = world.time+duration
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/proc/clown_check(mob/living/carbon/human/user)
|
||||
var/clumsy = user.has_trait(TRAIT_CLUMSY)
|
||||
var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY)
|
||||
if(clumsy && (clumsy_check == GRENADE_CLUMSY_FUMBLE))
|
||||
if(prob(50))
|
||||
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
if(!istype(C))
|
||||
return
|
||||
|
||||
if(iscarbon(user) && (user.has_trait(TRAIT_CLUMSY) && prob(50)))
|
||||
if(iscarbon(user) && (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)))
|
||||
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
|
||||
apply_cuffs(user,user)
|
||||
return
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = FALSE)
|
||||
if(..())
|
||||
if(!target.mind)
|
||||
target.add_trait(TRAIT_MINDSHIELD, "implant")
|
||||
ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant")
|
||||
target.sec_hud_set_implants()
|
||||
return TRUE
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
else
|
||||
to_chat(target, "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
|
||||
target.add_trait(TRAIT_MINDSHIELD, "implant")
|
||||
ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant")
|
||||
target.sec_hud_set_implants()
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -58,7 +58,7 @@
|
||||
if(..())
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.remove_trait(TRAIT_MINDSHIELD, "implant")
|
||||
REMOVE_TRAIT(L, TRAIT_MINDSHIELD, "implant")
|
||||
L.sec_hud_set_implants()
|
||||
if(target.stat != DEAD && !silent)
|
||||
to_chat(target, "<span class='boldnotice'>Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.</span>")
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] set brainwash machine objective to '[objective]'.")
|
||||
log_game("[key_name(user)] set brainwash machine objective to '[objective]'.")
|
||||
if(C.has_trait(TRAIT_MINDSHIELD))
|
||||
if(HAS_TRAIT(C, TRAIT_MINDSHIELD))
|
||||
return FALSE
|
||||
brainwash(C, objective)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</ol>
|
||||
<p>
|
||||
It really is that easy! Good luck!
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
@@ -344,14 +344,14 @@
|
||||
author = "Sir John Rose"
|
||||
title = "Barman Recipes: Mixing Drinks and Changing Lives"
|
||||
page_link = "Guide_to_food_and_drinks"
|
||||
|
||||
|
||||
/obj/item/book/manual/wiki/robotics_cyborgs
|
||||
name = "Robotics for Dummies"
|
||||
icon_state = "borgbook"
|
||||
author = "XISC"
|
||||
title = "Robotics for Dummies"
|
||||
page_link = "Guide_to_robotics"
|
||||
|
||||
|
||||
/obj/item/book/manual/wiki/research_and_development
|
||||
name = "Research and Development 101"
|
||||
icon_state = "rdbook"
|
||||
@@ -401,7 +401,7 @@
|
||||
author = "the City-state of Atmosia"
|
||||
title = "Lexica Atmosia"
|
||||
page_link = "Guide_to_Atmospherics"
|
||||
|
||||
|
||||
/obj/item/book/manual/wiki/medicine
|
||||
name = "Medical Space Compendium, Volume 638"
|
||||
icon_state = "book8"
|
||||
@@ -441,7 +441,7 @@
|
||||
H.dropItemToGround(W)
|
||||
if(prob(50))
|
||||
step(W, pick(GLOB.alldirs))
|
||||
H.add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
H.bleed_rate = 5
|
||||
H.gib_animation()
|
||||
sleep(3)
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
return //CIT CHANGE - ditto
|
||||
|
||||
add_fingerprint(user)
|
||||
if((user.has_trait(TRAIT_CLUMSY)) && prob(50))
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
|
||||
to_chat(user, "<span class ='danger'>You club yourself over the head.</span>")
|
||||
user.Knockdown(60 * force)
|
||||
if(ishuman(user))
|
||||
|
||||
@@ -82,6 +82,6 @@
|
||||
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
|
||||
|
||||
/obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user)
|
||||
if(clumsy_check && user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if(clumsy_check && 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(5,5)
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting))
|
||||
to_chat(user, "<span class='warning'>\The [src] lets out a weak hiss and doesn't react!</span>")
|
||||
return
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.visible_message("<span class='warning'>[C] loses [C.p_their()] grip on [src], causing it to go off!</span>", "<span class='userdanger'>[src] slips out of your hands and goes off!</span>")
|
||||
C.dropItemToGround(src, TRUE)
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
inspiration_available = FALSE
|
||||
|
||||
/obj/item/banner/command/check_inspiration(mob/living/carbon/human/H)
|
||||
return H.has_trait(TRAIT_MINDSHIELD) //Command is stalwart but rewards their allies.
|
||||
return HAS_TRAIT(H, TRAIT_MINDSHIELD) //Command is stalwart but rewards their allies.
|
||||
|
||||
/datum/crafting_recipe/command_banner
|
||||
name = "Command Banner"
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
return (active)
|
||||
|
||||
/obj/item/shield/energy/attack_self(mob/living/carbon/human/user)
|
||||
if(clumsy_check && user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if(clumsy_check && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
to_chat(user, "<span class='warning'>You beat yourself in the head with [src].</span>")
|
||||
user.take_bodypart_damage(5)
|
||||
active = !active
|
||||
|
||||
@@ -281,12 +281,12 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
var/hit_hand = ((user.active_hand_index % 2 == 0) ? "r_" : "l_") + "arm"
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!H.gloves && !H.has_trait(TRAIT_PIERCEIMMUNE)) // golems, etc
|
||||
if(!H.gloves && !HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) // golems, etc
|
||||
to_chat(H, "<span class='warning'>[src] cuts into your hand!</span>")
|
||||
H.apply_damage(force*0.5, BRUTE, hit_hand)
|
||||
else if(ismonkey(user))
|
||||
var/mob/living/carbon/monkey/M = user
|
||||
if(!M.has_trait(TRAIT_PIERCEIMMUNE))
|
||||
if(!HAS_TRAIT(M, TRAIT_PIERCEIMMUNE))
|
||||
to_chat(M, "<span class='warning'>[src] cuts into your hand!</span>")
|
||||
M.apply_damage(force*0.5, BRUTE, hit_hand)
|
||||
|
||||
@@ -312,7 +312,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
|
||||
/obj/item/shard/Crossed(mob/living/L)
|
||||
if(istype(L) && has_gravity(loc))
|
||||
if(L.has_trait(TRAIT_LIGHT_STEP))
|
||||
if(HAS_TRAIT(L, TRAIT_LIGHT_STEP))
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 30, 1)
|
||||
else
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1)
|
||||
|
||||
@@ -109,7 +109,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
if (user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
to_chat(user, "<span class='danger'>[src] slips out of your hand and hits your head.</span>")
|
||||
user.take_bodypart_damage(10)
|
||||
user.Unconscious(400)
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
|
||||
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
if(status && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
clowning_around(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
H.dropItemToGround(W)
|
||||
if(prob(50))
|
||||
step(W, pick(GLOB.alldirs))
|
||||
H.add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
H.bleed_rate = 5
|
||||
H.gib_animation()
|
||||
sleep(3)
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
unwield()
|
||||
return
|
||||
..()
|
||||
if(user.has_trait(TRAIT_CLUMSY) && (wielded) && prob(40))
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40))
|
||||
impale(user)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
adjusted_climb_time *= 2
|
||||
if(isalien(user))
|
||||
adjusted_climb_time *= 0.25 //aliens are terrifyingly fast
|
||||
if(user.has_trait(TRAIT_FREERUNNING)) //do you have any idea how fast I am???
|
||||
if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am???
|
||||
adjusted_climb_time *= 0.8
|
||||
structureclimber = user
|
||||
if(do_mob(user, user, adjusted_climb_time))
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>")
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.has_trait(TRAIT_SKITTISH))
|
||||
if(HAS_TRAIT(L, TRAIT_SKITTISH))
|
||||
to_chat(user, "<span class='notice'>Ctrl-Shift-click [src] to jump inside.</span>")
|
||||
|
||||
/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
|
||||
@@ -416,7 +416,7 @@
|
||||
togglelock(user)
|
||||
|
||||
/obj/structure/closet/CtrlShiftClick(mob/living/user)
|
||||
if(!user.has_trait(TRAIT_SKITTISH))
|
||||
if(!HAS_TRAIT(user, TRAIT_SKITTISH))
|
||||
return ..()
|
||||
if(!user.canUseTopic(src) || !isturf(user.loc))
|
||||
return
|
||||
|
||||
@@ -182,7 +182,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
|
||||
|
||||
for(var/mob/living/M in compiled)
|
||||
var/mob/living/mob_occupant = get_mob_or_brainmob(M)
|
||||
if(mob_occupant.client && !mob_occupant.suiciding && !(mob_occupant.has_trait(TRAIT_NOCLONE)) && !mob_occupant.hellbound)
|
||||
if(mob_occupant.client && !mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && !mob_occupant.hellbound)
|
||||
icon_state = "morgue4" // Cloneable
|
||||
if(mob_occupant.stat == DEAD && beeper)
|
||||
if(world.time > next_beep)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
L.buckled.unbuckle_mob(L,force=1)
|
||||
L.visible_message("<span class='warning'>[L]'s skin rapidly turns to marble!</span>", "<span class='userdanger'>Your body freezes up! Can't... move... can't... think...</span>")
|
||||
L.forceMove(src)
|
||||
L.add_trait(TRAIT_MUTE, STATUE_MUTE)
|
||||
ADD_TRAIT(L, TRAIT_MUTE, STATUE_MUTE)
|
||||
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
|
||||
L.status_flags |= GODMODE
|
||||
obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
|
||||
@@ -59,7 +59,7 @@
|
||||
if(petrified_mob)
|
||||
petrified_mob.status_flags &= ~GODMODE
|
||||
petrified_mob.forceMove(loc)
|
||||
petrified_mob.remove_trait(TRAIT_MUTE, STATUE_MUTE)
|
||||
REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_MUTE)
|
||||
petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob
|
||||
petrified_mob.faction -= "mimic"
|
||||
petrified_mob = null
|
||||
|
||||
Reference in New Issue
Block a user