mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 02:57:48 +01:00
Ports over the status effect unification
This commit is contained in:
@@ -85,3 +85,18 @@ var/gaussian_next
|
||||
gaussian_next = R2 * working
|
||||
return (mean + stddev * R1)
|
||||
#undef ACCURACY
|
||||
|
||||
|
||||
|
||||
// oof, what a mouthful
|
||||
// Used in status_procs' "adjust" to let them modify a status effect by a given
|
||||
// amount, without inadverdently increasing it in the wrong direction
|
||||
/proc/directional_bounded_sum(orig_val, modifier, bound_lower, bound_upper)
|
||||
var/new_val = orig_val + modifier
|
||||
if(modifier > 0)
|
||||
if(new_val > bound_upper)
|
||||
new_val = max(orig_val, bound_upper)
|
||||
else if(modifier < 0)
|
||||
if(new_val < bound_lower)
|
||||
new_val = min(orig_val, bound_lower)
|
||||
return new_val
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
CtrlClickOn(A)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened)
|
||||
if(incapacitated(ignore_restraints = 1, ignore_grab = 1, ignore_lying = 1))
|
||||
return
|
||||
|
||||
face_atom(A)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
CtrlClickOn(A)
|
||||
return
|
||||
|
||||
if(stat || lockcharge || weakened || stunned || paralysis)
|
||||
if(incapacitated())
|
||||
return
|
||||
|
||||
if(next_move >= world.time)
|
||||
|
||||
@@ -35,6 +35,6 @@ Bonus
|
||||
to_chat(M, "<span class='warning'>[pick("Your head hurts.", "Your mind blanks for a moment.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>You can't think straight!</span>")
|
||||
M.confused = min(100, M.confused + 8)
|
||||
M.AdjustConfused(8, bound_lower = 0, bound_upper = 100)
|
||||
|
||||
return
|
||||
|
||||
@@ -33,11 +33,11 @@ Bonus
|
||||
if(3, 4)
|
||||
to_chat(M, "<span class='warning'>[pick("You hear a ringing in your ear.", "Your ears pop.")]</span>")
|
||||
if(5)
|
||||
if(!(M.ear_deaf))
|
||||
if(!(M.disabilities & DEAF))
|
||||
to_chat(M, "<span class='userdanger'>Your ears pop and begin ringing loudly!</span>")
|
||||
M.setEarDamage(-1,INFINITY) //Shall be enough
|
||||
M.BecomeDeaf()
|
||||
spawn(200)
|
||||
if(M)
|
||||
to_chat(M, "<span class='warning'>The ringing in your ears fades...</span>")
|
||||
M.setEarDamage(-1,0)
|
||||
return
|
||||
M.CureDeaf()
|
||||
return
|
||||
|
||||
@@ -36,6 +36,6 @@ Bonus
|
||||
to_chat(M, "<span class='warning'><b>[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]</b></span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]</span>")
|
||||
M.hallucination += 5
|
||||
M.AdjustHallucinate(5)
|
||||
|
||||
return
|
||||
|
||||
@@ -24,18 +24,18 @@
|
||||
to_chat(affected_mob, "<span class='notice'>You feel panicky.</span>")
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='danger'>You're overtaken with panic!</span>")
|
||||
affected_mob.confused += (rand(2,3))
|
||||
affected_mob.AdjustConfused(rand(2,3))
|
||||
if(4)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel butterflies in your stomach.</span>")
|
||||
if(prob(5))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] stumbles around in a panic.</span>", \
|
||||
"<span class='userdanger'>You have a panic attack!</span>")
|
||||
affected_mob.confused += (rand(6,8))
|
||||
affected_mob.jitteriness += (rand(6,8))
|
||||
affected_mob.AdjustConfused(rand(6,8))
|
||||
affected_mob.AdjustJitter(rand(6,8))
|
||||
if(prob(2))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up butterflies!</span>", \
|
||||
"<span class='userdanger'>You cough up butterflies!</span>")
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
if(3)
|
||||
if(prob(4))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
||||
affected_mob.confused += 10
|
||||
affected_mob.AdjustConfused(10)
|
||||
if(4)
|
||||
if(prob(3))
|
||||
affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."))
|
||||
@@ -241,4 +241,4 @@
|
||||
stage3 = list("<span class='danger'>Your appendages are melting away.</span>", "<span class='danger'>Your limbs begin to lose their shape.</span>")
|
||||
stage4 = list("<span class='danger'>You're ravenous.</span>")
|
||||
stage5 = list("<span class='danger'>You have become a morph.</span>")
|
||||
new_form = /mob/living/simple_animal/hostile/morph
|
||||
new_form = /mob/living/simple_animal/hostile/morph
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
affected_mob.AdjustSleeping(5)
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='userdanger'>You feel your mind relax and your thoughts drift!</span>")
|
||||
affected_mob.confused = min(100, affected_mob.confused + 8)
|
||||
affected_mob.AdjustConfused(8, bound_lower = 0, bound_upper = 100)
|
||||
if(prob(10))
|
||||
affected_mob.vomit(20)
|
||||
if(prob(3))
|
||||
@@ -55,4 +55,3 @@
|
||||
to_chat(affected_mob, "<span class='danger'>[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]</span>")
|
||||
affected_mob.bodytemperature += 40
|
||||
return
|
||||
|
||||
|
||||
@@ -20,15 +20,15 @@
|
||||
|
||||
if(prob(10))
|
||||
affected_mob.emote(pick("cough","groan", "gasp"))
|
||||
affected_mob.losebreath++
|
||||
affected_mob.AdjustLoseBreath(1)
|
||||
|
||||
if(prob(15))
|
||||
if(prob(33))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel sickly and weak.</span>")
|
||||
affected_mob.slowed += 3
|
||||
affected_mob.AdjustSlowed(3)
|
||||
affected_mob.adjustToxLoss(toxdamage)
|
||||
|
||||
if(prob(5))
|
||||
to_chat(affected_mob, "<span class='danger'>Your joints ache horribly!</span>")
|
||||
affected_mob.Weaken(stuntime)
|
||||
affected_mob.Stun(stuntime)
|
||||
affected_mob.Stun(stuntime)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
adjustBrainLoss(80)
|
||||
nutrition = 9000
|
||||
overeatduration = 9000
|
||||
confused = 30
|
||||
Confused(30)
|
||||
if(mind)
|
||||
mind.assigned_role = "Cluwne"
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
adjustBrainLoss(-120)
|
||||
nutrition = NUTRITION_LEVEL_STARVING
|
||||
overeatduration = 0
|
||||
confused = 0
|
||||
jitteriness = 0
|
||||
SetConfused(0)
|
||||
SetJitter(0)
|
||||
if(mind)
|
||||
mind.assigned_role = "Lawyer"
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@
|
||||
target.Paralyse(amt_paralysis)
|
||||
target.Stun(amt_stunned)
|
||||
|
||||
target.eye_blind += amt_eye_blind
|
||||
target.eye_blurry += amt_eye_blurry
|
||||
target.AdjustEyeBlind(amt_eye_blind)
|
||||
target.AdjustEyeBlurry(amt_eye_blurry)
|
||||
//summoning
|
||||
if(summon_type)
|
||||
new summon_type(target.loc, target)
|
||||
new summon_type(target.loc, target)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
datum/announcement/proc/Message(message as text, message_title as text)
|
||||
for(var/mob/M in player_list)
|
||||
if(!istype(M,/mob/new_player) && !isdeaf(M))
|
||||
if(M.can_hear())
|
||||
to_chat(M, "<h2 class='alert'>[title]</h2>")
|
||||
to_chat(M, "<span class='alert'>[message]</span>")
|
||||
if(announcer)
|
||||
@@ -88,7 +88,7 @@ datum/announcement/priority/command/Message(message as text, message_title as te
|
||||
command += "<br><span class='alert'>[message]</span><br>"
|
||||
command += "<br>"
|
||||
for(var/mob/M in player_list)
|
||||
if(!istype(M,/mob/new_player) && !isdeaf(M))
|
||||
if(M.can_hear())
|
||||
to_chat(M, command)
|
||||
|
||||
datum/announcement/priority/enemy/Message(message as text, message_title as text, from as text)
|
||||
@@ -100,7 +100,7 @@ datum/announcement/priority/enemy/Message(message as text, message_title as text
|
||||
command += "<br><span class='alert'>[message]</span><br>"
|
||||
command += "<br>"
|
||||
for(var/mob/M in player_list)
|
||||
if(!istype(M,/mob/new_player) && !isdeaf(M))
|
||||
if(M.can_hear())
|
||||
to_chat(M, command)
|
||||
|
||||
datum/announcement/priority/security/Message(message as text, message_title as text)
|
||||
@@ -125,7 +125,7 @@ datum/announcement/proc/PlaySound(var/message_sound)
|
||||
if(!message_sound)
|
||||
return
|
||||
for(var/mob/M in player_list)
|
||||
if(!istype(M,/mob/new_player) && !isdeaf(M))
|
||||
if(M.can_hear())
|
||||
M << message_sound
|
||||
|
||||
datum/announcement/proc/Sound(var/message_sound)
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
|
||||
if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
if(!ishuman(usr)) //Make sure they're a mob that has dna
|
||||
to_chat(usr, "<span class='notice'>Try as you might, you can not climb up into the [src].</span>")
|
||||
@@ -169,7 +169,7 @@
|
||||
return
|
||||
if(O.loc == user) //no you can't pull things out of your ass
|
||||
return
|
||||
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other
|
||||
if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
if(O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source
|
||||
return
|
||||
@@ -973,4 +973,4 @@
|
||||
return 1
|
||||
|
||||
|
||||
/////////////////////////// DNA MACHINES
|
||||
/////////////////////////// DNA MACHINES
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/datum/dna/gene/disability/can_activate(var/mob/M,var/flags)
|
||||
return 1 // Always set!
|
||||
|
||||
/datum/dna/gene/disability/activate(var/mob/M, var/connected, var/flags)
|
||||
/datum/dna/gene/disability/activate(var/mob/living/M, var/connected, var/flags)
|
||||
..()
|
||||
if(mutation && !(mutation in M.mutations))
|
||||
M.mutations.Add(mutation)
|
||||
@@ -35,7 +35,7 @@
|
||||
else
|
||||
testing("[name] has no activation message.")
|
||||
|
||||
/datum/dna/gene/disability/deactivate(var/mob/M, var/connected, var/flags)
|
||||
/datum/dna/gene/disability/deactivate(var/mob/living/M, var/connected, var/flags)
|
||||
..()
|
||||
if(mutation && (mutation in M.mutations))
|
||||
M.mutations.Remove(mutation)
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
/datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags)
|
||||
..(M,connected,flags)
|
||||
M.ear_deaf = 1
|
||||
M.EarDeaf(1)
|
||||
|
||||
/datum/dna/gene/disability/nearsighted
|
||||
name="Nearsightedness"
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
for(var/mob/living/carbon/human/H in range(2,user))
|
||||
to_chat(H, "<span class='userdanger'>You are blinded by a shower of blood!</span>")
|
||||
H.Stun(1)
|
||||
H.eye_blurry = max(20, H.eye_blurry)
|
||||
H.EyeBlurry(20)
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(istype(E))
|
||||
E.damage = max(E.damage+5, 0)
|
||||
H.confused += 3
|
||||
H.AdjustConfused(3)
|
||||
for(var/mob/living/silicon/S in range(2,user))
|
||||
to_chat(S, "<span class='userdanger'>Your sensors are disabled by a shower of blood!</span>")
|
||||
S.Weaken(3)
|
||||
@@ -37,4 +37,4 @@
|
||||
to_chat(crab, "<span class='warning'>You burst out of the remains of your former body in a shower of gore!</span>")
|
||||
user.gib()
|
||||
feedback_add_details("changeling_powers","LR")
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -17,10 +17,14 @@
|
||||
user.SetStunned(0)
|
||||
user.SetWeakened(0)
|
||||
user.radiation = 0
|
||||
user.eye_blind = 0
|
||||
user.eye_blurry = 0
|
||||
user.setEarDamage(0,0)
|
||||
user.SetEyeBlind(0)
|
||||
user.SetEyeBlurry(0)
|
||||
user.SetEarDamage(0)
|
||||
user.SetEarDeaf(0)
|
||||
user.heal_overall_damage(user.getBruteLoss(), user.getFireLoss())
|
||||
user.CureBlind()
|
||||
user.CureDeaf()
|
||||
user.CureNearsighted()
|
||||
user.reagents.clear_reagents()
|
||||
user.germ_level = 0
|
||||
user.next_pain_time = 0
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
for(var/mob/living/M in get_mobs_in_view(4, user))
|
||||
if(iscarbon(M))
|
||||
if(!M.mind || !M.mind.changeling)
|
||||
M.adjustEarDamage(0, 30)
|
||||
M.confused += 20
|
||||
M.AdjustEarDeaf(30)
|
||||
M.AdjustConfused(20)
|
||||
M.Jitter(50)
|
||||
else
|
||||
M << sound('sound/effects/screech.ogg')
|
||||
@@ -41,5 +41,3 @@
|
||||
L.broken()
|
||||
empulse(get_turf(user), 2, 4, 1)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ obj/effect/proc_holder/changeling/sting/mute
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
add_logs(user, target, "stung", object="mute sting")
|
||||
target.silent += 30
|
||||
target.AdjustSilence(30)
|
||||
feedback_add_details("changeling_powers","MS")
|
||||
return 1
|
||||
|
||||
@@ -165,12 +165,12 @@ obj/effect/proc_holder/changeling/sting/blind
|
||||
chemical_cost = 25
|
||||
dna_cost = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/user, var/mob/target)
|
||||
/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/living/user, var/mob/living/target)
|
||||
add_logs(user, target, "stung", object="blind sting")
|
||||
to_chat(target, "<span class='danger'>Your eyes burn horrifically!</span>")
|
||||
target.disabilities |= NEARSIGHTED
|
||||
target.eye_blind = 20
|
||||
target.eye_blurry = 40
|
||||
target.BecomeNearsighted()
|
||||
target.EyeBlind(20)
|
||||
target.EyeBlurry(40)
|
||||
feedback_add_details("changeling_powers","BS")
|
||||
return 1
|
||||
|
||||
@@ -186,7 +186,7 @@ obj/effect/proc_holder/changeling/sting/LSD
|
||||
add_logs(user, target, "stung", object="LSD sting")
|
||||
spawn(rand(300,600))
|
||||
if(target)
|
||||
target.hallucination = max(400, target.hallucination)
|
||||
target.Hallucinate(400)
|
||||
feedback_add_details("changeling_powers","HS")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -840,7 +840,7 @@ var/list/sacrificed = list()
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.adjustEarDamage(0,50)
|
||||
C.AdjustEarDeaf(50)
|
||||
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
||||
affected++
|
||||
if(prob(1))
|
||||
@@ -859,7 +859,7 @@ var/list/sacrificed = list()
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.adjustEarDamage(0,30)
|
||||
C.AdjustEarDeaf(30)
|
||||
//talismans is weaker.
|
||||
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
||||
affected++
|
||||
@@ -880,12 +880,12 @@ var/list/sacrificed = list()
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.eye_blurry += 50
|
||||
C.eye_blind += 20
|
||||
C.AdjustEyeBlurry(50)
|
||||
C.AdjustEyeBlind(20)
|
||||
if(prob(5))
|
||||
C.disabilities |= NEARSIGHTED
|
||||
C.BecomeNearsighted()
|
||||
if(prob(10))
|
||||
C.disabilities |= BLIND
|
||||
C.BecomeBlind()
|
||||
C.show_message("\red Suddenly you see red flash that blinds you.", 3)
|
||||
affected++
|
||||
if(affected)
|
||||
@@ -902,8 +902,8 @@ var/list/sacrificed = list()
|
||||
var/obj/item/weapon/nullrod/N = locate() in C
|
||||
if(N)
|
||||
continue
|
||||
C.eye_blurry += 30
|
||||
C.eye_blind += 10
|
||||
C.AdjustEyeBlurry(30)
|
||||
C.AdjustEyeBlind(10)
|
||||
//talismans is weaker.
|
||||
affected++
|
||||
C.show_message("\red You feel a sharp pain in your eyes, and the world disappears into darkness..", 3)
|
||||
@@ -1016,7 +1016,7 @@ var/list/sacrificed = list()
|
||||
var/mob/living/carbon/C = T
|
||||
C.flash_eyes()
|
||||
if(!(HULK in C.mutations))
|
||||
C.silent += 15
|
||||
C.AdjustSilence(15)
|
||||
C.Weaken(10)
|
||||
C.Stun(10)
|
||||
return
|
||||
|
||||
@@ -466,7 +466,7 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
L.Sleeping(60)
|
||||
add_logs(user, L, "put to sleep")
|
||||
else
|
||||
L.drowsyness += 1
|
||||
L.AdjustDrowsy(1)
|
||||
to_chat(user, "<span class='warning'>Sleep inducement works fully only on stunned specimens! </span>")
|
||||
L.visible_message("<span class='danger'>[user] tried to induce sleep in [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>You suddenly feel drowsy!</span>")
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
if(H == owner)
|
||||
continue
|
||||
to_chat(H, "<span class='alien'>You hear a buzz in your head.</span>")
|
||||
H.confused += 20
|
||||
H.AdjustConfused(20)
|
||||
|
||||
/obj/item/organ/internal/gland/pop
|
||||
origin_tech = "materials=4;biotech=6;abductor=3"
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
to_chat(human, "<span class='warning'>You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].</span>")
|
||||
human.adjustStaminaLoss(stamdamage)
|
||||
human.adjustToxLoss(toxdamage)
|
||||
human.confused = min(human.confused+confusion, maxconfusion)
|
||||
human.AdjustConfused(confusion, bound_lower = 0, bound_upper = maxconfusion)
|
||||
new/obj/effect/overlay/temp/revenant(human.loc)
|
||||
if(!istype(T, /turf/simulated/shuttle) && !istype(T, /turf/simulated/wall/rust) && !istype(T, /turf/simulated/wall/r_wall) && istype(T, /turf/simulated/wall) && prob(15))
|
||||
new/obj/effect/overlay/temp/revenant(T)
|
||||
@@ -317,4 +317,4 @@
|
||||
playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1)
|
||||
new/obj/effect/overlay/temp/revenant(S.loc)
|
||||
S.spark_system.start()
|
||||
S.emp_act(1)
|
||||
S.emp_act(1)
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
revolutionaries += rev_mind
|
||||
if(iscarbon(rev_mind.current))
|
||||
var/mob/living/carbon/carbon_mob = rev_mind.current
|
||||
carbon_mob.silent = max(carbon_mob.silent, 5)
|
||||
carbon_mob.Silence(5)
|
||||
carbon_mob.flash_eyes(1, 1)
|
||||
rev_mind.current.Stun(5)
|
||||
to_chat(rev_mind.current, "<span class='danger'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>")
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
else //Only alludes to the shadowling if the target is close by
|
||||
to_chat(target, "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights...</span>")
|
||||
target.Stun(10)
|
||||
M.silent += 10
|
||||
M.AdjustSilence(10)
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lesser_glare
|
||||
@@ -79,7 +79,7 @@
|
||||
else
|
||||
to_chat(target, "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by their heavenly beauty...</span>")
|
||||
target.Stun(3) //Roughly 30% as long as the normal one
|
||||
M.silent += 3
|
||||
M.AdjustSilence(3)
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/veil
|
||||
@@ -519,7 +519,7 @@
|
||||
/datum/reagent/shadowling_blindness_smoke/on_mob_life(mob/living/M)
|
||||
if(!is_shadow_or_thrall(M))
|
||||
to_chat(M, "<span class='warning'><b>You breathe in the black smoke, and your eyes burn horribly!</b></span>")
|
||||
M.eye_blind = 5
|
||||
M.EyeBlind(5)
|
||||
if(prob(25))
|
||||
M.visible_message("<b>[M]</b> claws at their eyes!")
|
||||
M.Stun(3)
|
||||
@@ -556,8 +556,8 @@
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
to_chat(M, "<span class='danger'><b>A spike of pain drives into your head and scrambles your thoughts!</b></span>")
|
||||
M.confused += 10
|
||||
M.setEarDamage(M.ear_damage + 3)
|
||||
M.AdjustConfused(10)
|
||||
M.AdjustEarDamage(3)
|
||||
else if(issilicon(target))
|
||||
var/mob/living/silicon/S = target
|
||||
to_chat(S, "<span class='warning'><b>ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#</b></span>")
|
||||
|
||||
@@ -259,8 +259,8 @@
|
||||
continue
|
||||
to_chat(C, "<span class='warning'><font size='3'><b>You hear a ear piercing shriek and your senses dull!</font></b></span>")
|
||||
C.Weaken(4)
|
||||
C.adjustEarDamage(0,20)
|
||||
C.stuttering = 20
|
||||
C.AdjustEarDeaf(20)
|
||||
C.Stuttering(20)
|
||||
C.Stun(4)
|
||||
C.Jitter(150)
|
||||
for(var/obj/structure/window/W in view(4))
|
||||
|
||||
@@ -782,7 +782,7 @@ var/global/list/multiverse = list()
|
||||
else if(istype(I,/obj/item/weapon/bikehorn))
|
||||
to_chat(target, "<span class='userdanger'>HONK</span>")
|
||||
target << 'sound/items/AirHorn.ogg'
|
||||
target.adjustEarDamage(0,3)
|
||||
target.AdjustEarDeaf(3)
|
||||
GiveHint(target)
|
||||
cooldown = world.time +cooldown_time
|
||||
return
|
||||
|
||||
@@ -747,7 +747,7 @@
|
||||
/obj/item/weapon/spellbook/oneuse/blind/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>You go blind!</span>")
|
||||
user.eye_blind = 10
|
||||
user.EyeBlind(10)
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/mindswap
|
||||
spell = /obj/effect/proc_holder/spell/targeted/mind_transfer
|
||||
|
||||
@@ -546,7 +546,7 @@
|
||||
if(panel_open)
|
||||
to_chat(usr, "<span class='boldnotice'>Close the maintenance panel first.</span>")
|
||||
return
|
||||
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
|
||||
if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
for(var/mob/living/carbon/slime/M in range(1,usr))
|
||||
if(M.Victim == usr)
|
||||
@@ -590,4 +590,4 @@
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
RefreshParts()
|
||||
|
||||
#undef ADDICTION_SPEEDUP_TIME
|
||||
#undef ADDICTION_SPEEDUP_TIME
|
||||
|
||||
@@ -448,7 +448,7 @@
|
||||
if(ORION_TRAIL_RAIDERS)
|
||||
if(prob(50))
|
||||
to_chat(usr, "<span class='userdanger'>You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?</span>")
|
||||
M.hallucination += 30
|
||||
M.AdjustHallucinate(30)
|
||||
else
|
||||
to_chat(usr, "<span class='userdanger'>Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...</span>")
|
||||
M.take_organ_damage(30)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
jump_action.Grant(user)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/check_eye(mob/user)
|
||||
if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || user.eye_blind || user.incapacitated())
|
||||
if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || !user.can_see() || user.incapacitated())
|
||||
user.unset_machine()
|
||||
return 0
|
||||
return 1
|
||||
@@ -167,4 +167,4 @@
|
||||
var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T
|
||||
var/obj/machinery/camera/final = T[camera]
|
||||
if(final)
|
||||
remote_eye.setLoc(get_turf(final))
|
||||
remote_eye.setLoc(get_turf(final))
|
||||
|
||||
@@ -80,10 +80,10 @@
|
||||
beaker = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob)
|
||||
if(O.loc == user) //no you can't pull things out of your ass
|
||||
return
|
||||
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other
|
||||
if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
if(get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source
|
||||
return
|
||||
@@ -371,7 +371,7 @@
|
||||
occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity())
|
||||
occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise
|
||||
if(occupant.bodytemperature < T0C)
|
||||
occupant.sleeping = max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency)
|
||||
occupant.Sleeping(max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency))
|
||||
occupant.Paralyse(max(5/efficiency, (1/occupant.bodytemperature)*3000/efficiency))
|
||||
if(air_contents.oxygen > 2)
|
||||
if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1)
|
||||
@@ -469,9 +469,9 @@
|
||||
if(M.Victim == usr)
|
||||
to_chat(usr, "You're too busy getting your life sucked out of you.")
|
||||
return
|
||||
if(usr.stat != 0 || stat & (NOPOWER|BROKEN))
|
||||
if(usr.stat != CONSCIOUS || stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
|
||||
if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
put_mob(usr)
|
||||
return
|
||||
|
||||
@@ -485,7 +485,7 @@
|
||||
|
||||
if(O.loc == user) //no you can't pull things out of your ass
|
||||
return
|
||||
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other
|
||||
if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
if(get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source
|
||||
return
|
||||
|
||||
@@ -100,15 +100,15 @@
|
||||
|
||||
if(drownee.stat == DEAD) //Dead spacemen don't drown more
|
||||
return
|
||||
if(drownee.losebreath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control.
|
||||
if(drownee.lose_breath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control.
|
||||
return
|
||||
|
||||
if(drownee.stat) //Mob is in critical.
|
||||
drownee.losebreath -= 3 //You're gonna die here.
|
||||
drownee.AdjustLoseBreath(3, bound_lower = 0, bound_upper = 20)
|
||||
add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
|
||||
drownee.visible_message("<span class='danger'>\The [drownee] appears to be drowning!</span>","<span class='userdanger'>You're quickly drowning!</span>") //inform them that they are fucked.
|
||||
else
|
||||
drownee.losebreath -= 2 //For every time you drown, you miss 2 breath attempts. Hope you catch on quick!
|
||||
drownee.AdjustLoseBreath(2, bound_lower = 0, bound_upper = 20) //For every time you drown, you miss 2 breath attempts. Hope you catch on quick!
|
||||
add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
|
||||
if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then.
|
||||
drownee.visible_message("<span class='danger'>\The [drownee] flails, almost like they are drowning!</span>","<span class='userdanger'>You're lacking air!</span>") //*gasp* *gasp* *gasp* *gasp* *gasp*
|
||||
|
||||
@@ -164,9 +164,9 @@
|
||||
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
continue
|
||||
to_chat(M, "<font color='red' size='7'>HONK</font>")
|
||||
M.sleeping = 0
|
||||
M.stuttering = 20
|
||||
M.adjustEarDamage(0,30)
|
||||
M.SetSleeping(0)
|
||||
M.Stuttering(20)
|
||||
M.AdjustEarDeaf(30)
|
||||
M.Weaken(3)
|
||||
if(prob(30))
|
||||
M.Stun(10)
|
||||
|
||||
@@ -583,7 +583,7 @@ steam.start() -- spawns the effect
|
||||
// if(M.wear_suit, /obj/item/clothing/suit/wizrobe && (M.hat, /obj/item/clothing/head/wizard) && (M.shoes, /obj/item/clothing/shoes/sandal)) // I'll work on it later
|
||||
else
|
||||
M.drop_item()
|
||||
M:sleeping += 5
|
||||
M.AdjustSleeping(5)
|
||||
if(M.coughedtime != 1)
|
||||
M.coughedtime = 1
|
||||
M.emote("cough")
|
||||
@@ -600,7 +600,7 @@ steam.start() -- spawns the effect
|
||||
return
|
||||
else
|
||||
M.drop_item()
|
||||
M:sleeping += 5
|
||||
M.AdjustSleeping(5)
|
||||
if(M.coughedtime != 1)
|
||||
M.coughedtime = 1
|
||||
M.emote("cough")
|
||||
|
||||
@@ -57,10 +57,11 @@
|
||||
|
||||
var/close = range(world.view+round(devastation_range,1), epicenter)
|
||||
// to all distanced mobs play a different sound
|
||||
for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close))
|
||||
// check if the mob can hear
|
||||
if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
|
||||
M << 'sound/effects/explosionfar.ogg'
|
||||
for(var/mob/M in world)
|
||||
if(M.z == epicenter.z && !(M in close))
|
||||
// check if the mob can hear
|
||||
if(M.can_hear() && !istype(M.loc,/turf/space))
|
||||
M << 'sound/effects/explosionfar.ogg'
|
||||
|
||||
if(heavy_impact_range > 1)
|
||||
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion()
|
||||
|
||||
@@ -474,10 +474,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
if(!(eyes.status & ORGAN_ROBOT) || !(eyes.status & ORGAN_ASSISTED)) //robot eyes bleeding might be a bit silly
|
||||
to_chat(M, "<span class='danger'>Your eyes start to bleed profusely!</span>")
|
||||
if(prob(50))
|
||||
if(M.stat != 2)
|
||||
if(M.stat != DEAD)
|
||||
to_chat(M, "<span class='danger'>You drop what you're holding and clutch at your eyes!</span>")
|
||||
M.drop_item()
|
||||
M.eye_blurry += 10
|
||||
M.AdjustEyeBlurry(10)
|
||||
M.Paralyse(1)
|
||||
M.Weaken(2)
|
||||
if(eyes.damage >= eyes.min_broken_damage)
|
||||
@@ -488,7 +488,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
H.UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(7)
|
||||
M.eye_blurry += rand(3,4)
|
||||
M.AdjustEyeBlurry(rand(3,4))
|
||||
return
|
||||
|
||||
/obj/item/clean_blood()
|
||||
|
||||
@@ -236,10 +236,10 @@
|
||||
var/mob/living/carbon/human/C = target
|
||||
user.visible_message("<span class='danger'> [user] sprays [src] into the face of [target]!</span>")
|
||||
if(C.client)
|
||||
C.eye_blurry = max(C.eye_blurry, 3)
|
||||
C.eye_blind = max(C.eye_blind, 1)
|
||||
C.EyeBlurry(3)
|
||||
C.EyeBlind(1)
|
||||
if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS.
|
||||
C.confused = max(C.confused, 3)
|
||||
C.Confused(3)
|
||||
C.Weaken(3)
|
||||
C.lip_style = "spray_face"
|
||||
C.lip_color = colour
|
||||
@@ -251,4 +251,4 @@
|
||||
overlays.Cut()
|
||||
var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]")
|
||||
I.color = colour
|
||||
overlays += I
|
||||
overlays += I
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/camera_bug/check_eye(var/mob/user as mob)
|
||||
if(user.stat || loc != user || !user.canmove || user.eye_blind || !current)
|
||||
if(user.stat || loc != user || !user.canmove || !user.can_see() || !current)
|
||||
user.reset_view(null)
|
||||
user.unset_machine()
|
||||
return null
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
if(M.weakeyes)
|
||||
M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
|
||||
if(M.flash_eyes(1, 1))
|
||||
M.confused += power
|
||||
M.AdjustConfused(power)
|
||||
terrible_conversion_proc(M, user)
|
||||
M.Stun(1)
|
||||
visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
@@ -96,7 +96,7 @@
|
||||
to_chat(M, "<span class='danger'>[user] fails to blind you with the flash!</span>")
|
||||
else
|
||||
if(M.flash_eyes())
|
||||
M.confused += power
|
||||
M.AdjustConfused(power)
|
||||
|
||||
/obj/item/device/flash/attack(mob/living/M, mob/user)
|
||||
if(!try_use_flash(user))
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
G.state = GRAB_NECK
|
||||
G.hud.icon_state = "kill"
|
||||
G.hud.name = "kill"
|
||||
M.silent += 1
|
||||
M.AdjustSilence(1)
|
||||
|
||||
garrote_time = world.time + 10
|
||||
processing_objects.Add(src)
|
||||
@@ -152,11 +152,11 @@
|
||||
return
|
||||
|
||||
|
||||
strangling.silent = max(strangling.silent, 3) // Non-improvised effects
|
||||
strangling.Silence(3) // Non-improvised effects
|
||||
strangling.apply_damage(4, OXY, "head")
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/garrote/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.</span>")
|
||||
playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1)
|
||||
return (OXYLOSS)
|
||||
return (OXYLOSS)
|
||||
|
||||
@@ -51,12 +51,13 @@
|
||||
if(!ear_safety)
|
||||
M.Stun(max(10/distance, 3))
|
||||
M.Weaken(max(10/distance, 3))
|
||||
M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15))
|
||||
M.EarDeaf(15)
|
||||
M.AdjustEarDamage(rand(0, 5))
|
||||
if(M.ear_damage >= 15)
|
||||
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
|
||||
if(prob(M.ear_damage - 10 + 5))
|
||||
if(prob(M.ear_damage - 5))
|
||||
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
|
||||
M.disabilities |= DEAF
|
||||
M.BecomeDeaf()
|
||||
else
|
||||
if(M.ear_damage >= 5)
|
||||
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
if(do_after(user, 50, target = H))
|
||||
playsound(loc, "sound/weapons/bladeslice.ogg", 50, 1, -1)
|
||||
user.visible_message("<span class='danger'>[user] abruptly stops cutting [M]'s hair and slices their throat!</span>", "<span class='danger'>You stop cutting [M]'s hair and slice their throat!</span>") //Just a little off the top.
|
||||
H.losebreath += 10 //30 Oxy damage over time
|
||||
H.AdjustLoseBreath(10) //30 Oxy damage over time
|
||||
H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors")
|
||||
var/turf/location = get_turf(H)
|
||||
if(istype(location, /turf/simulated))
|
||||
|
||||
@@ -138,8 +138,8 @@
|
||||
affected_mob.setStaminaLoss(0)
|
||||
var/status = CANSTUN | CANWEAKEN | CANPARALYSE
|
||||
affected_mob.status_flags &= ~status
|
||||
affected_mob.dizziness = max(0, affected_mob.dizziness-10)
|
||||
affected_mob.drowsyness = max(0, affected_mob.drowsyness-10)
|
||||
affected_mob.AdjustDizzy(-10)
|
||||
affected_mob.AdjustDrowsy(-10)
|
||||
affected_mob.SetSleeping(0)
|
||||
stage = 1
|
||||
switch(progenitor.hunger)
|
||||
@@ -181,4 +181,4 @@
|
||||
affected_mob.adjustBruteLoss(5)
|
||||
|
||||
if(ismob(progenitor.loc))
|
||||
progenitor.hunger++
|
||||
progenitor.hunger++
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
if(H.get_item_by_slot(slot_head) == src)
|
||||
if(H.internal)
|
||||
return
|
||||
H.losebreath += 1
|
||||
H.AdjustLoseBreath(1)
|
||||
else
|
||||
storage_slots = 7
|
||||
processing_objects.Remove(src)
|
||||
|
||||
@@ -420,8 +420,7 @@
|
||||
H.lip_style = null //Washes off lipstick
|
||||
H.lip_color = initial(H.lip_color)
|
||||
H.regenerate_icons()
|
||||
user.drowsyness -= rand(2,3) //Washing your face wakes you up if you're falling asleep
|
||||
user.drowsyness = Clamp(user.drowsyness, 0, INFINITY)
|
||||
user.AdjustDrowsy(-rand(2,3)) //Washing your face wakes you up if you're falling asleep
|
||||
else
|
||||
user.clean_blood()
|
||||
|
||||
@@ -459,4 +458,3 @@
|
||||
icon_state = "puddle-splash"
|
||||
..()
|
||||
icon_state = "puddle"
|
||||
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effect
|
||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, S)
|
||||
|
||||
/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global, sound/S)
|
||||
if(!src.client || ear_deaf > 0)
|
||||
if(!src.client || !can_hear())
|
||||
return
|
||||
|
||||
if(!S)
|
||||
|
||||
@@ -36,7 +36,7 @@ var/global/list/frozen_mob_list = list()
|
||||
anchored = 1
|
||||
frozen = AO
|
||||
admin_prev_sleeping = sleeping
|
||||
sleeping += 20000
|
||||
AdjustSleeping(20000)
|
||||
if(!(src in frozen_mob_list))
|
||||
frozen_mob_list += src
|
||||
|
||||
@@ -49,7 +49,7 @@ var/global/list/frozen_mob_list = list()
|
||||
anchored = 0
|
||||
overlays -= frozen
|
||||
frozen = null
|
||||
sleeping = admin_prev_sleeping
|
||||
SetSleeping(admin_prev_sleeping)
|
||||
admin_prev_sleeping = null
|
||||
if(src in frozen_mob_list)
|
||||
frozen_mob_list -= src
|
||||
|
||||
@@ -411,11 +411,12 @@
|
||||
var/mob/living/carbon/human/M = src.loc
|
||||
to_chat(M, "\red The Optical Thermal Scanner overloads and blinds you!")
|
||||
if(M.glasses == src)
|
||||
M.eye_blind = 3
|
||||
M.eye_blurry = 5
|
||||
M.disabilities |= NEARSIGHTED
|
||||
spawn(100)
|
||||
M.disabilities &= ~NEARSIGHTED
|
||||
M.EyeBlind(3)
|
||||
M.EyeBlurry(5)
|
||||
if(!(M.disabilities & NEARSIGHTED))
|
||||
M.BecomeNearsighted()
|
||||
spawn(100)
|
||||
M.CureNearsighted()
|
||||
..()
|
||||
|
||||
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(H.head == src)
|
||||
H.slurring = max(3, H.slurring) //always slur
|
||||
H.Slur(3) //always slur
|
||||
|
||||
/obj/item/clothing/head/beret/fluff/linda //Epic_Charger: Linda Clark
|
||||
name = "Green beret"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/armor = H.getarmor(type = "rad")
|
||||
if((H.species.flags & RADIMMUNE) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected
|
||||
continue
|
||||
H.hallucination += rand(50, 100)
|
||||
H.AdjustHallucinate(rand(50, 100))
|
||||
|
||||
/datum/event/mass_hallucination/announce()
|
||||
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
|
||||
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
|
||||
|
||||
@@ -279,11 +279,11 @@ Gunshots/explosions/opening doors/less rare audio (done)
|
||||
/obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir)
|
||||
var/target_dist = get_dist(src,target)
|
||||
if(target_dist<=3) //"Eaten"
|
||||
target.sleeping = 20
|
||||
target.Sleeping(20)
|
||||
target.hal_crit = 1
|
||||
target.hal_screwyhud = 1
|
||||
spawn(rand(50,100))
|
||||
target.sleeping = 0
|
||||
target.SetSleeping(0)
|
||||
target.hal_crit = 0
|
||||
target.hal_screwyhud = 0
|
||||
|
||||
@@ -480,7 +480,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
|
||||
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
|
||||
my_target.staminaloss += 30
|
||||
if(prob(20))
|
||||
my_target.eye_blurry += 3
|
||||
my_target.AdjustEyeBlurry(3)
|
||||
if(prob(33))
|
||||
if(!locate(/obj/effect/overlay) in my_target.loc)
|
||||
fake_blood(my_target)
|
||||
@@ -752,11 +752,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
|
||||
halimage = null
|
||||
if("death")
|
||||
//Fake death
|
||||
src.sleeping = 20
|
||||
Sleeping(20)
|
||||
hal_crit = 1
|
||||
hal_screwyhud = 1
|
||||
spawn(rand(50,100))
|
||||
src.sleeping = 0
|
||||
SetSleeping(0)
|
||||
hal_crit = 0
|
||||
hal_screwyhud = 0
|
||||
if("husks")
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
|
||||
add_logs(user, M, "attacked", src)
|
||||
|
||||
M.eye_blurry += force/7
|
||||
M.AdjustEyeBlurry(force/7)
|
||||
if(prob(20))
|
||||
M.Paralyse(force / 6)
|
||||
M.Weaken(force / 15)
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
D.visible_message("<span class='warning'>[A] pounds [D] on the chest!</span>", \
|
||||
"<span class='userdanger'>[A] slams your chest! You can't breathe!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
D.losebreath += 5
|
||||
D.AdjustLoseBreath(5)
|
||||
D.adjustOxyLoss(10)
|
||||
return 1
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
"<span class='userdanger'>[A] karate chops your neck, rendering you unable to speak for a short time!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE)
|
||||
D.silent += 10
|
||||
D.AdjustSilence(10)
|
||||
return 1
|
||||
|
||||
datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
@@ -170,4 +170,4 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi
|
||||
name = "krav maga gloves"
|
||||
desc = "These gloves can teach you to perform Krav Maga using nanochips."
|
||||
icon_state = "fightgloves"
|
||||
item_state = "fightgloves"
|
||||
item_state = "fightgloves"
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
D.visible_message("<span class='warning'>[A] knees [D] in the stomach!</span>", \
|
||||
"<span class='userdanger'>[A] winds you with a knee in the stomach!</span>")
|
||||
D.audible_message("<b>[D]</b> gags!")
|
||||
D.losebreath += 3
|
||||
D.AdjustLoseBreath(3)
|
||||
D.Stun(2)
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
if(prob(80))
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
//non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet.
|
||||
if(language && (language.flags & NONVERBAL))
|
||||
if(disabilities & BLIND || blinded) //blind people can't see dumbass
|
||||
if(!can_see()) //blind people can't see dumbass
|
||||
message = stars(message)
|
||||
|
||||
if(!speaker || !(speaker in view(src)))
|
||||
@@ -65,7 +65,7 @@
|
||||
if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src))
|
||||
message = "<b>[message]</b>"
|
||||
|
||||
if(disabilities & DEAF || ear_deaf)
|
||||
if(!can_hear())
|
||||
if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set
|
||||
if(speaker == src)
|
||||
to_chat(src, "<span class='warning'>You cannot hear yourself speak!</span>")
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
//non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet.
|
||||
if(language && (language.flags & NONVERBAL))
|
||||
if(disabilities & BLIND || blinded) //blind people can't see dumbass
|
||||
if(!can_see()) //blind people can't see dumbass
|
||||
message = stars(message)
|
||||
|
||||
if(!speaker || !(speaker in view(src)))
|
||||
@@ -182,7 +182,7 @@
|
||||
formatted = language.format_message_radio(message, verb)
|
||||
else
|
||||
formatted = "[verb], <span class=\"body\">\"[message]\"</span>"
|
||||
if(disabilities & DEAF || ear_deaf)
|
||||
if(!can_hear())
|
||||
if(prob(20))
|
||||
to_chat(src, "<span class='warning'>You feel your headset vibrate but can hear nothing from it!</span>")
|
||||
else if(track)
|
||||
|
||||
@@ -605,7 +605,7 @@
|
||||
return ..()
|
||||
|
||||
// Can we speak this language, as opposed to just understanding it?
|
||||
/mob/proc/can_speak(datum/language/speaking)
|
||||
/mob/proc/can_speak_language(datum/language/speaking)
|
||||
|
||||
return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages)
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ In all, this is a lot like the monkey code. /N
|
||||
|
||||
switch(M.a_intent)
|
||||
if(I_HELP)
|
||||
sleeping = max(0,sleeping-5)
|
||||
AdjustSleeping(-5)
|
||||
resting = 0
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
|
||||
@@ -96,13 +96,15 @@
|
||||
|
||||
f_loss += 60
|
||||
|
||||
adjustEarDamage(30, 120)
|
||||
AdjustEarDamage(30)
|
||||
AdjustEarDeaf(120)
|
||||
|
||||
if(3.0)
|
||||
b_loss += 30
|
||||
if(prob(50) && !shielded)
|
||||
Paralyse(1)
|
||||
adjustEarDamage(15,60)
|
||||
AdjustEarDamage(15)
|
||||
AdjustEarDeaf(60)
|
||||
|
||||
adjustBruteLoss(b_loss)
|
||||
adjustFireLoss(f_loss)
|
||||
@@ -298,4 +300,4 @@
|
||||
return initial(pixel_x)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/get_permeability_protection()
|
||||
return 0.8
|
||||
return 0.8
|
||||
|
||||
@@ -57,13 +57,12 @@
|
||||
|
||||
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
|
||||
blinded = 1
|
||||
silent = 0
|
||||
SetSilence(0)
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < config.health_threshold_dead || !get_int_organ(/obj/item/organ/internal/brain))
|
||||
death()
|
||||
blinded = 1
|
||||
stat = DEAD
|
||||
silent = 0
|
||||
SetSilence(0)
|
||||
return 1
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
@@ -80,7 +79,7 @@
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
else if(sleeping)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
AdjustSleeping(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
if( prob(10) && health )
|
||||
@@ -98,18 +97,18 @@
|
||||
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
|
||||
blinded = 1
|
||||
else if(eye_blind) //blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
AdjustEyeBlind(-1)
|
||||
blinded = 1
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
AdjustEyeBlurry(-1)
|
||||
|
||||
//Ears
|
||||
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
|
||||
setEarDamage(-1, max(ear_deaf, 1))
|
||||
EarDeaf(1)
|
||||
else if(ear_deaf) //deafness, heals slowly over time
|
||||
adjustEarDamage(0,-1)
|
||||
AdjustEarDeaf(-1)
|
||||
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
|
||||
adjustEarDamage(-0.05, 0)
|
||||
AdjustEarDamage(-0.05)
|
||||
|
||||
//Other
|
||||
if(stunned)
|
||||
@@ -123,11 +122,11 @@
|
||||
update_icons()
|
||||
|
||||
if(stuttering)
|
||||
stuttering = max(stuttering-1, 0)
|
||||
AdjustStuttering(-1)
|
||||
|
||||
if(silent)
|
||||
silent = max(silent-1, 0)
|
||||
AdjustSilence(-1)
|
||||
|
||||
if(druggy)
|
||||
druggy = max(druggy-1, 0)
|
||||
return 1
|
||||
AdjustDruggy(-1)
|
||||
return 1
|
||||
|
||||
@@ -88,13 +88,15 @@
|
||||
|
||||
f_loss += 60
|
||||
|
||||
adjustEarDamage(30,120)
|
||||
AdjustEarDamage(30)
|
||||
AdjustEarDeaf(120)
|
||||
|
||||
if(3.0)
|
||||
b_loss += 30
|
||||
if(prob(50))
|
||||
Paralyse(1)
|
||||
adjustEarDamage(15,60)
|
||||
AdjustEarDamage(15)
|
||||
AdjustEarDeaf(60)
|
||||
|
||||
adjustBruteLoss(b_loss)
|
||||
adjustFireLoss(f_loss)
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
|
||||
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
|
||||
blinded = 1
|
||||
silent = 0
|
||||
SetSilence(0)
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < -25 || !get_int_organ(/obj/item/organ/internal/brain))
|
||||
death()
|
||||
blinded = 1
|
||||
silent = 0
|
||||
SetSilence(0)
|
||||
return 1
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
@@ -39,7 +39,7 @@
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
else if(sleeping)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
AdjustSleeping(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
if( prob(10) && health )
|
||||
@@ -57,32 +57,32 @@
|
||||
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
|
||||
blinded = 1
|
||||
else if(eye_blind) //blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
AdjustEyeBlind(-1)
|
||||
blinded = 1
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
AdjustEyeBlurry(-1)
|
||||
|
||||
//Ears
|
||||
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
|
||||
setEarDamage(-1, max(ear_deaf, 1))
|
||||
EarDeaf(1)
|
||||
else if(ear_deaf) //deafness, heals slowly over time
|
||||
adjustEarDamage(0,-1)
|
||||
AdjustEarDeaf(-1)
|
||||
else if(ear_damage < 25) //ear damage heals slowly under this threshold.
|
||||
adjustEarDamage(-0.05,0)
|
||||
AdjustEarDamage(-0.05)
|
||||
|
||||
//Other
|
||||
if(stunned)
|
||||
AdjustStunned(-1)
|
||||
|
||||
if(weakened)
|
||||
weakened = max(weakened-1,0)
|
||||
AdjustWeakened(-1)
|
||||
|
||||
if(stuttering)
|
||||
stuttering = max(stuttering-1, 0)
|
||||
AdjustStuttering(-1)
|
||||
|
||||
if(silent)
|
||||
silent = max(silent-1, 0)
|
||||
AdjustSilence(-1)
|
||||
|
||||
if(druggy)
|
||||
druggy = max(druggy-1, 0)
|
||||
return 1
|
||||
AdjustDruggy(-1)
|
||||
return 1
|
||||
|
||||
@@ -100,8 +100,8 @@ I'm using this for Stat to give it a more nifty interface to work with
|
||||
/mob/living/carbon/brain/can_safely_leave_loc()
|
||||
return 0 //You're not supposed to be ethereal jaunting, brains
|
||||
|
||||
/mob/living/carbon/brain/adjustEarDamage()
|
||||
/mob/living/carbon/brain/SetEarDamage() // no ears to damage or heal
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/setEarDamage() // no ears to damage or heal
|
||||
return
|
||||
/mob/living/carbon/brain/SetEarDeaf()
|
||||
return
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
/obj/item/organ/internal/brain/surgeryize()
|
||||
if(!owner)
|
||||
return
|
||||
owner.setEarDamage(0,0) //Yeah, didn't you...hear? The ears are totally inside the brain.
|
||||
owner.SetEarDeaf(0)
|
||||
owner.SetEarDamage(0) //Yeah, didn't you...hear? The ears are totally inside the brain.
|
||||
|
||||
/obj/item/organ/internal/brain/xeno
|
||||
name = "xenomorph brain"
|
||||
|
||||
@@ -52,12 +52,12 @@
|
||||
|
||||
if(stat == DEAD)
|
||||
blinded = 1
|
||||
silent = 0
|
||||
SetSilence(0)
|
||||
else
|
||||
if(!container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)))
|
||||
death()
|
||||
blinded =1
|
||||
silent = 0
|
||||
blinded = 1
|
||||
SetSilence(0)
|
||||
return 1
|
||||
|
||||
. = 1
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
/mob/living/carbon/brain/Login()
|
||||
..()
|
||||
sleeping = 0
|
||||
SetSleeping(0)
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
src.brainmob.loc = src
|
||||
src.brainmob.container = src
|
||||
src.brainmob.stat = 0
|
||||
src.brainmob.silent = 0
|
||||
src.brainmob.SetSilence(0)
|
||||
dead_mob_list -= src.brainmob
|
||||
|
||||
..()
|
||||
|
||||
@@ -158,13 +158,13 @@
|
||||
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
|
||||
"<span class='italics'>You hear a heavy electrical crack.</span>" \
|
||||
)
|
||||
jitteriness += 1000 //High numbers for violent convulsions
|
||||
AdjustJitter(1000) //High numbers for violent convulsions
|
||||
do_jitter_animation(jitteriness)
|
||||
stuttering += 2
|
||||
AdjustStuttering(2)
|
||||
if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5))
|
||||
Stun(2)
|
||||
spawn(20)
|
||||
jitteriness = max(jitteriness - 990, 10) //Still jittery, but vastly less
|
||||
AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less
|
||||
if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5))
|
||||
Stun(3)
|
||||
Weaken(3)
|
||||
@@ -268,7 +268,7 @@
|
||||
if(istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
src.sleeping = max(0,src.sleeping-5)
|
||||
AdjustSleeping(-5)
|
||||
if(src.sleeping == 0)
|
||||
src.resting = 0
|
||||
AdjustParalysis(-3)
|
||||
@@ -327,8 +327,8 @@
|
||||
E.damage += rand(12, 16)
|
||||
|
||||
if(E.damage > E.min_bruised_damage)
|
||||
eye_blind += damage
|
||||
eye_blurry += damage * rand(3, 6)
|
||||
AdjustEyeBlind(damage)
|
||||
AdjustEyeBlurry(damage * rand(3, 6))
|
||||
|
||||
if(E.damage > (E.min_bruised_damage + E.min_broken_damage) / 2)
|
||||
if(!(E.status & ORGAN_ROBOT))
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/mob/living/carbon/death(gibbed)
|
||||
losebreath = 0
|
||||
SetLoseBreath(0)
|
||||
med_hud_set_health()
|
||||
med_hud_set_status()
|
||||
|
||||
if(reagents)
|
||||
reagents.death_metabolize(src)
|
||||
|
||||
..(gibbed)
|
||||
..(gibbed)
|
||||
|
||||
@@ -97,8 +97,8 @@
|
||||
emote("deathgasp") //let the world KNOW WE ARE DEAD
|
||||
|
||||
stat = DEAD
|
||||
dizziness = 0
|
||||
jitteriness = 0
|
||||
SetDizzy(0)
|
||||
SetJitter(0)
|
||||
heart_attack = 0
|
||||
|
||||
//Handle species-specific deaths.
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
act = copytext(act, 1, t1)
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
if(disabilities & MUTE || silent)
|
||||
if(!can_speak())
|
||||
muzzled = 1
|
||||
//var/m_type = 1
|
||||
|
||||
@@ -313,7 +313,7 @@
|
||||
M = null
|
||||
|
||||
if(M)
|
||||
if(lying || weakened)
|
||||
if(lying)
|
||||
message = "<B>[src]</B> flops and flails around on the floor."
|
||||
else
|
||||
message = "<B>[src]</B> flips in [M]'s general direction."
|
||||
@@ -378,7 +378,7 @@
|
||||
message = "<B>[src]</B> faints."
|
||||
if(src.sleeping)
|
||||
return //Can't faint while asleep
|
||||
src.sleeping += 1
|
||||
AdjustSleeping(1)
|
||||
m_type = 1
|
||||
|
||||
if("cough", "coughs")
|
||||
|
||||
@@ -352,7 +352,8 @@
|
||||
else valid_limbs -= processing_dismember
|
||||
|
||||
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
adjustEarDamage(30, 120)
|
||||
AdjustEarDamage(30)
|
||||
AdjustEarDeaf(120)
|
||||
if(prob(70) && !shielded)
|
||||
Paralyse(10)
|
||||
|
||||
@@ -376,7 +377,8 @@
|
||||
else valid_limbs -= processing_dismember
|
||||
|
||||
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
adjustEarDamage(15,60)
|
||||
AdjustEarDamage(15)
|
||||
AdjustEarDeaf(60)
|
||||
if(prob(50) && !shielded)
|
||||
Paralyse(10)
|
||||
|
||||
@@ -491,8 +493,7 @@
|
||||
O.show_message(text("<span class='danger'>The [M.name] has shocked []!</span>", src), 1)
|
||||
|
||||
Weaken(power)
|
||||
if(stuttering < power)
|
||||
stuttering = power
|
||||
Stuttering(power)
|
||||
Stun(power)
|
||||
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
@@ -1728,7 +1729,7 @@
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
if(!canmove)
|
||||
to_chat(src, "You cannot leap in your current state.")
|
||||
return
|
||||
|
||||
@@ -1782,7 +1783,7 @@
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying)
|
||||
if(!canmove)
|
||||
to_chat(src, "\red You cannot do that in your current state.")
|
||||
return
|
||||
|
||||
|
||||
@@ -254,7 +254,7 @@ emp_act
|
||||
visible_message("<span class='danger'>[src] has been knocked down!</span>", \
|
||||
"<span class='userdanger'>[src] has been knocked down!</span>")
|
||||
apply_effect(5, WEAKEN, armor)
|
||||
confused += 15
|
||||
AdjustConfused(15)
|
||||
if(prob(I.force + ((100 - health)/2)) && src != user && I.damtype == BRUTE)
|
||||
ticker.mode.remove_revolutionary(mind)
|
||||
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
|
||||
// If we have the gene for being crazy, have random events.
|
||||
if(dna.GetSEState(HALLUCINATIONBLOCK))
|
||||
if(prob(1) && hallucination < 1)
|
||||
hallucination += 20
|
||||
if(prob(1))
|
||||
Hallucinate(20)
|
||||
|
||||
if(disabilities & COUGHING)
|
||||
if((prob(5) && paralysis <= 1))
|
||||
@@ -111,9 +111,9 @@
|
||||
if(disabilities & NERVOUS)
|
||||
speech_problem_flag = 1
|
||||
if(prob(10))
|
||||
stuttering = max(10, stuttering)
|
||||
Stuttering(10)
|
||||
|
||||
if(getBrainLoss() >= 60 && stat != 2)
|
||||
if(getBrainLoss() >= 60 && stat != DEAD)
|
||||
speech_problem_flag = 1
|
||||
if(prob(3))
|
||||
var/list/s1 = list("IM A PONY NEEEEEEIIIIIIIIIGH",
|
||||
@@ -152,8 +152,8 @@
|
||||
|
||||
if(getBrainLoss() >= 100 && stat != 2) //you lapse into a coma and die without immediate aid; RIP. -Fox
|
||||
Weaken(20)
|
||||
losebreath += 10
|
||||
silent += 2
|
||||
AdjustLoseBreath(10)
|
||||
AdjustSilence(2)
|
||||
|
||||
if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox
|
||||
visible_message("<span class='alert'><B>[src]</B> goes limp, their facial expression utterly blank.</span>")
|
||||
@@ -281,10 +281,10 @@
|
||||
var/datum/gas_mixture/breath
|
||||
|
||||
if(health <= config.health_threshold_crit)
|
||||
losebreath++
|
||||
AdjustLoseBreath(1)
|
||||
|
||||
if(losebreath > 0)
|
||||
losebreath--
|
||||
if(lose_breath > 0)
|
||||
AdjustLoseBreath(-1)
|
||||
if(prob(10))
|
||||
spawn emote("gasp")
|
||||
if(istype(loc, /obj/))
|
||||
@@ -695,21 +695,21 @@
|
||||
else
|
||||
overeatduration -= 2
|
||||
|
||||
if(drowsyness)
|
||||
drowsyness--
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if(drowsy)
|
||||
AdjustDrowsy(-1)
|
||||
EyeBlurry(2)
|
||||
if(prob(5))
|
||||
sleeping += 1
|
||||
AdjustSleeping(1)
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
AdjustConfused(-1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
if(resting)
|
||||
dizziness = max(0, dizziness - 15)
|
||||
jitteriness = max(0, jitteriness - 15)
|
||||
AdjustDizzy(-15)
|
||||
AdjustJitter(-15)
|
||||
else
|
||||
dizziness = max(0, dizziness - 3)
|
||||
jitteriness = max(0, jitteriness - 3)
|
||||
AdjustDizzy(-3)
|
||||
AdjustJitter(-3)
|
||||
|
||||
if(species && species.flags & NO_INTORGANS) return
|
||||
|
||||
@@ -744,8 +744,7 @@
|
||||
alcohol_strength *= 5
|
||||
|
||||
if(alcohol_strength >= slur_start) //slurring
|
||||
if(!slurring) slurring = 1
|
||||
slurring = drunk
|
||||
Slur(drunk)
|
||||
if(alcohol_strength >= brawl_start) //the drunken martial art
|
||||
if(!istype(martial_art, /datum/martial_art/drunk_brawling))
|
||||
var/datum/martial_art/drunk_brawling/F = new
|
||||
@@ -754,18 +753,17 @@
|
||||
if(istype(martial_art, /datum/martial_art/drunk_brawling))
|
||||
martial_art.remove(src)
|
||||
if(alcohol_strength >= confused_start && prob(33)) //confused walking
|
||||
if(!confused) confused = 1
|
||||
confused = max(confused+(3/sober_str),0)
|
||||
if(!confused) Confused(1)
|
||||
AdjustConfused(3/sober_str)
|
||||
if(alcohol_strength >= blur_start) //blurry eyes
|
||||
eye_blurry = max(eye_blurry, 10/sober_str)
|
||||
drowsyness = max(drowsyness, 0)
|
||||
EyeBlurry(10/sober_str)
|
||||
if(!isSynthetic()) //stuff only for non-synthetics
|
||||
if(alcohol_strength >= vomit_start) //vomiting
|
||||
if(prob(8))
|
||||
fakevomit()
|
||||
if(alcohol_strength >= pass_out)
|
||||
Paralyse(5 / sober_str)
|
||||
drowsyness = max(drowsyness, 30/sober_str)
|
||||
Paralyse(5/sober_str)
|
||||
Drowsy(30/sober_str)
|
||||
if(L)
|
||||
L.take_damage(0.1, 1)
|
||||
adjustToxLoss(0.1)
|
||||
@@ -837,14 +835,14 @@
|
||||
vision = get_int_organ(species.vision_organ)
|
||||
|
||||
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
|
||||
eye_blind = 0
|
||||
SetEyeBlind(0)
|
||||
blinded = 0
|
||||
eye_blurry = 0
|
||||
SetEyeBlurry(0)
|
||||
|
||||
else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind.
|
||||
eye_blind = 1
|
||||
EyeBlind(1)
|
||||
blinded = 1
|
||||
eye_blurry = 1
|
||||
EyeBlurry(1)
|
||||
|
||||
else
|
||||
//blindness
|
||||
@@ -852,34 +850,34 @@
|
||||
blinded = 1
|
||||
|
||||
else if(eye_blind) // Blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
AdjustEyeBlind(-1)
|
||||
blinded = 1
|
||||
|
||||
else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster
|
||||
eye_blurry = max(eye_blurry-3, 0)
|
||||
AdjustEyeBlurry(-3)
|
||||
blinded = 1
|
||||
|
||||
//blurry sight
|
||||
if(vision.is_bruised()) // Vision organs impaired? Permablurry.
|
||||
eye_blurry = 1
|
||||
EyeBlurry(1)
|
||||
|
||||
if(eye_blurry) // Blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
AdjustEyeBlurry(-1)
|
||||
|
||||
|
||||
//Ears
|
||||
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
|
||||
setEarDamage(-1, max(ear_deaf, 1))
|
||||
EarDeaf(1)
|
||||
|
||||
else if(ear_deaf) //deafness, heals slowly over time
|
||||
adjustEarDamage(0,-1)
|
||||
AdjustEarDeaf(-1)
|
||||
|
||||
else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster
|
||||
adjustEarDamage(-0.15,0)
|
||||
setEarDamage(-1, max(ear_deaf, 1))
|
||||
AdjustEarDamage(-0.15)
|
||||
EarDeaf(1)
|
||||
|
||||
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
|
||||
adjustEarDamage(-0.05,0)
|
||||
AdjustEarDamage(-0.05)
|
||||
|
||||
if(flying)
|
||||
animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING)
|
||||
@@ -896,7 +894,7 @@
|
||||
|
||||
else //dead
|
||||
blinded = 1
|
||||
silent = 0
|
||||
SetSilence(0)
|
||||
|
||||
|
||||
/mob/living/carbon/human/handle_vision()
|
||||
@@ -995,8 +993,8 @@
|
||||
|
||||
if(shock_stage >= 30)
|
||||
if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.")
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
stuttering = max(stuttering, 5)
|
||||
EyeBlurry(2)
|
||||
Stuttering(5)
|
||||
|
||||
if(shock_stage == 40)
|
||||
to_chat(src, "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!"))
|
||||
@@ -1183,8 +1181,7 @@
|
||||
if(!heart_attack)
|
||||
return
|
||||
else
|
||||
if(losebreath < 3)
|
||||
losebreath += 2
|
||||
AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3)
|
||||
adjustOxyLoss(5)
|
||||
adjustBruteLoss(1)
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
|
||||
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
H.sleeping = min(H.sleeping+2, 10)
|
||||
H.AdjustSleeping(2, bound_lower = 0, bound_upper = 10)
|
||||
else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
if(prob(20))
|
||||
spawn(0)
|
||||
|
||||
@@ -332,7 +332,7 @@
|
||||
if(SA_pp > atmos_requirements["sa_para"]) // Enough to make us paralysed for a bit
|
||||
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > atmos_requirements["sa_sleep"]) // Enough to make us sleep as well
|
||||
H.sleeping = max(H.sleeping + 2, 10)
|
||||
H.AdjustSleeping(2, bound_lower = 0, bound_upper = 10)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
if(prob(20))
|
||||
spawn(0)
|
||||
@@ -509,7 +509,7 @@
|
||||
if(tinted_weldhelh)
|
||||
H.overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2)
|
||||
if(H.tinttotal >= TINT_BLIND)
|
||||
H.eye_blind = max(H.eye_blind, 1)
|
||||
H.EyeBlind(1)
|
||||
else
|
||||
H.clear_fullscreen("tint")
|
||||
|
||||
|
||||
@@ -49,10 +49,10 @@
|
||||
var/datum/gas_mixture/breath
|
||||
|
||||
if(health <= config.health_threshold_crit)
|
||||
losebreath++
|
||||
AdjustLoseBreath(1)
|
||||
|
||||
if(losebreath > 0)
|
||||
losebreath--
|
||||
if(lose_breath > 0)
|
||||
AdjustLoseBreath(-1)
|
||||
if(prob(10))
|
||||
spawn emote("gasp")
|
||||
if(istype(loc, /obj/))
|
||||
@@ -165,7 +165,7 @@
|
||||
if(SA_partialpressure > SA_para_min)
|
||||
Paralyse(3)
|
||||
if(SA_partialpressure > SA_sleep_min)
|
||||
sleeping = max(sleeping+2, 10)
|
||||
AdjustSleeping(2, bound_lower = 0, bound_upper = 10)
|
||||
else if(SA_partialpressure > 0.01)
|
||||
if(prob(20))
|
||||
spawn(0) emote(pick("giggle","laugh"))
|
||||
@@ -319,30 +319,27 @@
|
||||
C.pixel_x -= pixel_x_diff
|
||||
C.pixel_y -= pixel_y_diff
|
||||
src = oldsrc
|
||||
dizziness = max(dizziness - restingpwr, 0)
|
||||
AdjustDizzy(-restingpwr)
|
||||
|
||||
if(drowsyness)
|
||||
drowsyness = max(drowsyness - restingpwr, 0)
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if(drowsy)
|
||||
AdjustDrowsy(-restingpwr)
|
||||
EyeBlurry(2)
|
||||
if(prob(5))
|
||||
sleeping += 1
|
||||
AdjustSleeping(1)
|
||||
Paralyse(5)
|
||||
|
||||
if(confused)
|
||||
confused = max(0, confused - 1)
|
||||
AdjustConfused(-1)
|
||||
|
||||
//Jitteryness
|
||||
if(jitteriness)
|
||||
do_jitter_animation(jitteriness)
|
||||
jitteriness = max(jitteriness - restingpwr, 0)
|
||||
AdjustJitter(-restingpwr)
|
||||
|
||||
if(hallucination)
|
||||
spawn handle_hallucinations()
|
||||
|
||||
if(hallucination<=2)
|
||||
hallucination = 0
|
||||
else
|
||||
hallucination -= 2
|
||||
AdjustHallucinate(-2)
|
||||
|
||||
/mob/living/carbon/handle_sleeping()
|
||||
if(..())
|
||||
@@ -352,8 +349,8 @@
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
// Keep SSD people asleep
|
||||
if(player_logged && sleeping < 2)
|
||||
sleeping = 2
|
||||
if(player_logged)
|
||||
Sleeping(2)
|
||||
return sleeping
|
||||
|
||||
|
||||
|
||||
@@ -208,25 +208,25 @@
|
||||
if(src.stuttering) src.stuttering = 0
|
||||
|
||||
if(src.eye_blind)
|
||||
src.eye_blind = 0
|
||||
src.SetEyeBlind(0)
|
||||
src.blinded = 1
|
||||
|
||||
if(src.ear_deaf > 0) src.ear_deaf = 0
|
||||
if(src.ear_deaf > 0) SetEarDeaf(0)
|
||||
if(src.ear_damage < 25)
|
||||
src.ear_damage = 0
|
||||
SetEarDamage(0)
|
||||
|
||||
src.density = !( src.lying )
|
||||
|
||||
if(src.disabilities & BLIND)
|
||||
src.blinded = 1
|
||||
if(src.disabilities & DEAF)
|
||||
src.ear_deaf = 1
|
||||
EarDeaf(1)
|
||||
|
||||
if(src.eye_blurry > 0)
|
||||
src.eye_blurry = 0
|
||||
SetEyeBlurry(0)
|
||||
|
||||
if(src.druggy > 0)
|
||||
src.druggy = 0
|
||||
SetDruggy(0)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -57,17 +57,16 @@
|
||||
rad_damage = max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm."))/100),0)
|
||||
radiation += rad_damage
|
||||
if(SLUR)
|
||||
slurring = max(slurring,(effect * blocked))
|
||||
Slur(effect * blocked)
|
||||
if(STUTTER)
|
||||
if(status_flags & CANSTUN) // stun is usually associated with stutter
|
||||
stuttering = max(stuttering,(effect * blocked))
|
||||
Stuttering(effect * blocked)
|
||||
if(EYE_BLUR)
|
||||
eye_blurry = max(eye_blurry,(effect * blocked))
|
||||
EyeBlurry(effect * blocked)
|
||||
if(DROWSY)
|
||||
drowsyness = max(drowsyness,(effect * blocked))
|
||||
Drowsy(effect * blocked)
|
||||
if(JITTER)
|
||||
if(status_flags & CANSTUN)
|
||||
jitteriness = max(jitteriness,(effect * blocked))
|
||||
Jitter(effect * blocked)
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -136,17 +136,17 @@
|
||||
|
||||
/mob/living/proc/handle_silent()
|
||||
if(silent)
|
||||
silent = max(silent-1, 0)
|
||||
AdjustSilence(-1)
|
||||
return silent
|
||||
|
||||
/mob/living/proc/handle_drugged()
|
||||
if(druggy)
|
||||
druggy = max(druggy-1, 0)
|
||||
AdjustDruggy(-1)
|
||||
return druggy
|
||||
|
||||
/mob/living/proc/handle_slurring()
|
||||
if(slurring)
|
||||
slurring = max(slurring-1, 0)
|
||||
AdjustSlur(-1)
|
||||
return slurring
|
||||
|
||||
/mob/living/proc/handle_paralysed()
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
/mob/living/proc/handle_slowed()
|
||||
if(slowed)
|
||||
slowed = max(slowed-1, 0)
|
||||
AdjustSlowed(-1)
|
||||
return slowed
|
||||
|
||||
/mob/living/proc/handle_drunk()
|
||||
@@ -175,19 +175,20 @@
|
||||
/mob/living/proc/handle_disabilities()
|
||||
//Eyes
|
||||
if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own
|
||||
eye_blind = max(eye_blind, 1)
|
||||
EyeBlind(1)
|
||||
else if(eye_blind) //blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
AdjustEyeBlind(-1)
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
AdjustEyeBlurry(-1)
|
||||
|
||||
//Ears
|
||||
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
|
||||
setEarDamage(-1, max(ear_deaf, 1))
|
||||
EarDeaf(1)
|
||||
else
|
||||
// deafness heals slowly over time, unless ear_damage is over 100
|
||||
if(ear_damage < 100)
|
||||
adjustEarDamage(-0.05,-1)
|
||||
AdjustEarDamage(-0.05)
|
||||
AdjustEarDeaf(-1)
|
||||
|
||||
//this handles hud updates. Calls update_vision() and handle_hud_icons()
|
||||
/mob/living/proc/handle_regular_hud_updates()
|
||||
|
||||
@@ -261,19 +261,6 @@
|
||||
var/obj/item/organ/external/def_zone = ran_zone(t)
|
||||
return def_zone
|
||||
|
||||
|
||||
//damage/heal the mob ears and adjust the deaf amount
|
||||
/mob/living/adjustEarDamage(damage, deaf)
|
||||
ear_damage = max(0, ear_damage + damage)
|
||||
ear_deaf = max(0, ear_deaf + deaf)
|
||||
|
||||
//pass a negative argument to skip one of the variable
|
||||
/mob/living/setEarDamage(damage, deaf)
|
||||
if(damage >= 0)
|
||||
ear_damage = damage
|
||||
if(deaf >= 0)
|
||||
ear_deaf = deaf
|
||||
|
||||
// heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/mob/living/proc/heal_organ_damage(var/brute, var/burn)
|
||||
adjustBruteLoss(-brute)
|
||||
@@ -328,8 +315,8 @@
|
||||
dead_mob_list -= src
|
||||
living_mob_list |= src
|
||||
mob_list |= src
|
||||
setEarDamage(-1,0)
|
||||
timeofdeath = 0
|
||||
SetEarDeaf(0)
|
||||
timeofdeath = null
|
||||
|
||||
/mob/living/proc/rejuvenate()
|
||||
var/mob/living/carbon/human/human_mob = null //Get this declared for use later.
|
||||
@@ -344,22 +331,30 @@
|
||||
SetParalysis(0)
|
||||
SetStunned(0)
|
||||
SetWeakened(0)
|
||||
slowed = 0
|
||||
losebreath = 0
|
||||
dizziness = 0
|
||||
jitteriness = 0
|
||||
confused = 0
|
||||
drowsyness = 0
|
||||
SetSlowed(0)
|
||||
SetLoseBreath(0)
|
||||
SetDizzy(0)
|
||||
SetJitter(0)
|
||||
SetConfused(0)
|
||||
SetDrowsy(0)
|
||||
radiation = 0
|
||||
druggy = 0
|
||||
hallucination = 0
|
||||
SetDruggy(0)
|
||||
SetHallucinate(0)
|
||||
blinded = 0
|
||||
nutrition = 400
|
||||
bodytemperature = 310
|
||||
disabilities = 0
|
||||
blinded = 0
|
||||
eye_blind = 0
|
||||
eye_blurry = 0
|
||||
setEarDamage(0,0)
|
||||
CureBlind()
|
||||
CureNearsighted()
|
||||
CureMute()
|
||||
CureDeaf()
|
||||
CureTourettes()
|
||||
CureEpilepsy()
|
||||
CureCoughing()
|
||||
CureNervous()
|
||||
SetEyeBlind(0)
|
||||
SetEyeBlurry(0)
|
||||
SetEarDamage(0)
|
||||
SetEarDeaf(0)
|
||||
heal_overall_damage(1000, 1000)
|
||||
ExtinguishMob()
|
||||
fire_stacks = 0
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot.
|
||||
var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are stunned if it gets too high. Holodeck and hallucinations deal this.
|
||||
|
||||
var/hallucination = 0 //Directly affects how long a mob will hallucinate for
|
||||
|
||||
|
||||
var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
|
||||
|
||||
@@ -32,7 +30,6 @@
|
||||
|
||||
var/update_slimes = 1
|
||||
var/implanting = 0 //Used for the mind-slave implant
|
||||
var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
|
||||
var/floating = 0
|
||||
var/mob_size = MOB_SIZE_HUMAN
|
||||
var/nightvision = 0
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts.
|
||||
mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
|
||||
//This causes instant sleep and tags a player as SSD. See life.dm for furthering SSD.
|
||||
if(sleeping < 2 && mind.active)
|
||||
sleeping = 2
|
||||
player_logged = 1
|
||||
if(mind.active)
|
||||
Sleeping(2)
|
||||
player_logged = 1
|
||||
|
||||
@@ -82,7 +82,7 @@ var/const/VOX_PATH = "sound/vox_fem/"
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && T.z == z_level && !isdeaf(M))
|
||||
if(T && T.z == z_level && M.can_hear())
|
||||
M << voice
|
||||
else
|
||||
only_listener << voice
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/silicon/Login()
|
||||
sleeping = 0
|
||||
SetSleeping(0)
|
||||
if(mind && ticker && ticker.mode)
|
||||
ticker.mode.remove_revolutionary(mind, 1)
|
||||
ticker.mode.remove_cultist(mind, 1)
|
||||
@@ -9,4 +9,4 @@
|
||||
ticker.mode.remove_thrall(mind, 0)
|
||||
ticker.mode.remove_shadowling(mind)
|
||||
ticker.mode.remove_abductor(mind)
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
if(sleeping)
|
||||
Paralyse(3)
|
||||
sleeping--
|
||||
AdjustSleeping(-1)
|
||||
|
||||
if(resting)
|
||||
Weaken(5)
|
||||
@@ -90,7 +90,7 @@
|
||||
stat = UNCONSCIOUS
|
||||
|
||||
if(!paralysis > 0)
|
||||
eye_blind = 0
|
||||
SetEyeBlind(0)
|
||||
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
@@ -98,7 +98,7 @@
|
||||
diag_hud_set_health()
|
||||
diag_hud_set_status()
|
||||
else //dead
|
||||
eye_blind = 1
|
||||
SetEyeBlind(0)
|
||||
|
||||
//update the state of modules and components here
|
||||
if(stat != CONSCIOUS)
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
|
||||
//Silicon mob language procs
|
||||
|
||||
/mob/living/silicon/can_speak(datum/language/speaking)
|
||||
/mob/living/silicon/can_speak_language(datum/language/speaking)
|
||||
return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language
|
||||
|
||||
/mob/living/silicon/add_language(var/language, var/can_speak=1)
|
||||
@@ -355,8 +355,8 @@
|
||||
|
||||
/////////////////////////////////// EAR DAMAGE ////////////////////////////////////
|
||||
|
||||
/mob/living/silicon/adjustEarDamage()
|
||||
/mob/living/silicon/SetEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/silicon/setEarDamage()
|
||||
return
|
||||
/mob/living/silicon/SetEarDeaf()
|
||||
return
|
||||
|
||||
@@ -118,11 +118,11 @@
|
||||
for(var/atom/check in check_list)
|
||||
for(var/mob/living/M in viewers(world.view + 1, check) - src)
|
||||
if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege)
|
||||
if(!M.eye_blind)
|
||||
if(M.can_see())
|
||||
return M
|
||||
for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you
|
||||
if(M.occupant && M.occupant.client)
|
||||
if(!M.occupant.eye_blind)
|
||||
if(M.occupant.can_see())
|
||||
return M.occupant
|
||||
return null
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
continue
|
||||
var/turf/T = get_turf(L.loc)
|
||||
if(T && T in targets)
|
||||
L.eye_blind = max(L.eye_blind, 4)
|
||||
L.EyeBlind(4)
|
||||
return
|
||||
|
||||
//Toggle Night Vision
|
||||
|
||||
@@ -706,8 +706,8 @@
|
||||
/mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/adjustEarDamage()
|
||||
/mob/living/simple_animal/SetEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/setEarDamage()
|
||||
return
|
||||
/mob/living/simple_animal/SetEarDeaf()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,522 @@
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
|
||||
// We use these to automatically apply their effects when they are changed, as
|
||||
// opposed to setting them manually and having to either wait for the next `Life`
|
||||
// or update by hand
|
||||
|
||||
// The `updating` argument is only available on effects that cause a visual/physical effect on the mob itself
|
||||
// when applied, such as Stun, Weaken, and Jitter - stuff like Blindness, which has a client-side effect,
|
||||
// lacks this argument.
|
||||
|
||||
// Ideally, code should only read the vars in this file, and not ever directly
|
||||
// modify them
|
||||
|
||||
// If you want a mob type to ignore a given status effect, just override the corresponding
|
||||
// `SetSTATE` proc - since all of the other procs are wrappers around that,
|
||||
// calling them will have no effect
|
||||
|
||||
// BOOLEAN STATES
|
||||
|
||||
/*
|
||||
* EyesBlocked
|
||||
Your eyes are covered somehow
|
||||
* EarsBlocked
|
||||
Your ears are covered somehow
|
||||
* Resting
|
||||
You are lying down of your own volition
|
||||
* Flying
|
||||
For some reason or another you can move while not touching the ground
|
||||
*/
|
||||
|
||||
|
||||
// STATUS EFFECTS
|
||||
// All of these decrement over time - at a rate of 1 per life cycle unless otherwise noted
|
||||
// Status effects sorted alphabetically:
|
||||
/*
|
||||
* Confused *
|
||||
Movement is scrambled
|
||||
* Dizzy *
|
||||
The screen goes all warped
|
||||
* Drowsy
|
||||
You begin to yawn, and have a chance of incrementing "Paralysis"
|
||||
* Druggy *
|
||||
A trippy overlay appears.
|
||||
* Drunk *
|
||||
Essentially what your "BAC" is - the higher it is, the more alcohol you have in you
|
||||
* EarDamage *
|
||||
Doesn't do much, but if it's 25+, you go deaf. Heals much slower than other statuses - 0.05 normally
|
||||
* EarDeaf *
|
||||
You cannot hear. Prevents EarDamage from healing naturally.
|
||||
* EyeBlind *
|
||||
You cannot see. Prevents EyeBlurry from healing naturally.
|
||||
* EyeBlurry *
|
||||
A hazy overlay appears on your screen.
|
||||
* Hallucination *
|
||||
Your character will imagine various effects happening to them, vividly.
|
||||
* Jitter *
|
||||
Your character will visibly twitch. Higher values amplify the effect.
|
||||
* LoseBreath *
|
||||
Your character is unable to breathe.
|
||||
* Paralysis *
|
||||
Your character is knocked out.
|
||||
* Silent *
|
||||
Your character is unable to speak.
|
||||
* Sleeping *
|
||||
Your character is asleep.
|
||||
* Slowed *
|
||||
Your character moves slower.
|
||||
* Slurring *
|
||||
Your character cannot enunciate clearly.
|
||||
* Stunned *
|
||||
Your character is unable to move, and drops stuff in their hands. They keep standing, though.
|
||||
* Stuttering *
|
||||
Your character stutters parts of their messages.
|
||||
* Weakened *
|
||||
Your character collapses, but is still conscious.
|
||||
*/
|
||||
|
||||
// DISABILITIES
|
||||
// These are more permanent than the above.
|
||||
// Disabilities sorted alphabetically
|
||||
/*
|
||||
* Blind (32)
|
||||
Can't see. EyeBlind does not heal when this is active.
|
||||
* Coughing (4)
|
||||
Cough occasionally, causing you to drop your items
|
||||
* Deaf (128)
|
||||
Can't hear. EarDeaf does not heal when this is active
|
||||
* Epilepsy (2)
|
||||
Occasionally go "Epileptic", causing you to become very twitchy, drop all items, and fall to the floor
|
||||
* Mute (64)
|
||||
Cannot talk.
|
||||
* Nearsighted (1)
|
||||
My glasses! I can't see without my glasses! (Nearsighted overlay when not wearing prescription eyewear)
|
||||
* Nervous (16)
|
||||
Occasionally begin to stutter.
|
||||
* Tourettes (8)
|
||||
SHIT (say bad words, and drop stuff occasionally)
|
||||
*/
|
||||
|
||||
/mob/living
|
||||
|
||||
// Booleans
|
||||
var/resting = FALSE
|
||||
|
||||
/*
|
||||
STATUS EFFECTS
|
||||
*/
|
||||
|
||||
/mob // On `/mob` for now, to support legacy code
|
||||
var/confused = 0
|
||||
var/dizziness = 0
|
||||
var/drowsy = 0
|
||||
var/druggy = 0
|
||||
var/drunk = 0
|
||||
var/ear_damage = 0
|
||||
var/ear_deaf = 0
|
||||
var/eye_blind = 0
|
||||
var/eye_blurry = 0
|
||||
var/hallucination = 0
|
||||
var/jitteriness = 0
|
||||
var/lose_breath = 0
|
||||
var/paralysis = 0
|
||||
var/silent = 0
|
||||
var/sleeping = 0
|
||||
var/slowed = 0
|
||||
var/slurring = 0
|
||||
var/stunned = 0
|
||||
var/stuttering = 0
|
||||
var/weakened = 0
|
||||
|
||||
/mob/living
|
||||
// Bitfields
|
||||
var/disabilities = 0
|
||||
|
||||
// RESTING
|
||||
|
||||
/mob/living/proc/StartResting(updating = 1)
|
||||
var/val_change = !resting
|
||||
resting = TRUE
|
||||
if(updating && val_change)
|
||||
update_canmove()
|
||||
|
||||
/mob/living/proc/StopResting(updating = 1)
|
||||
var/val_change = !!resting
|
||||
resting = FALSE
|
||||
if(updating && val_change)
|
||||
update_canmove()
|
||||
|
||||
/mob/living/proc/StartFlying()
|
||||
var/val_change = !flying
|
||||
flying = TRUE
|
||||
if(val_change)
|
||||
update_animations()
|
||||
|
||||
/mob/living/proc/StopFlying()
|
||||
var/val_change = !!flying
|
||||
flying = FALSE
|
||||
if(val_change)
|
||||
update_animations()
|
||||
|
||||
|
||||
// SCALAR STATUS EFFECTS
|
||||
|
||||
// CONFUSED
|
||||
|
||||
/mob/living/Confused(amount)
|
||||
SetConfused(max(confused, amount))
|
||||
|
||||
/mob/living/SetConfused(amount)
|
||||
confused = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustConfused(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(confused, amount, bound_lower, bound_upper)
|
||||
SetConfused(new_value)
|
||||
|
||||
// DIZZY
|
||||
|
||||
/mob/living/Dizzy(amount)
|
||||
SetDizzy(max(dizziness, amount))
|
||||
|
||||
/mob/living/SetDizzy(amount)
|
||||
dizziness = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustDizzy(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(dizziness, amount, bound_lower, bound_upper)
|
||||
SetDizzy(new_value)
|
||||
|
||||
// DROWSY
|
||||
|
||||
/mob/living/Drowsy(amount)
|
||||
SetDrowsy(max(drowsy, amount))
|
||||
|
||||
/mob/living/SetDrowsy(amount)
|
||||
drowsy = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustDrowsy(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(drowsy, amount, bound_lower, bound_upper)
|
||||
SetDrowsy(new_value)
|
||||
|
||||
// DRUNK
|
||||
|
||||
/mob/living/Drunk(amount)
|
||||
SetDrunk(max(drunk, amount))
|
||||
|
||||
/mob/living/SetDrunk(amount)
|
||||
drunk = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustDrunk(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(drunk, amount, bound_lower, bound_upper)
|
||||
SetDrunk(new_value)
|
||||
|
||||
// DRUGGY
|
||||
|
||||
/mob/living/Druggy(amount)
|
||||
SetDruggy(max(druggy, amount))
|
||||
|
||||
/mob/living/SetDruggy(amount)
|
||||
var/old_val = druggy
|
||||
druggy = max(amount, 0)
|
||||
// We transitioned to/from 0, so update the druggy overlays
|
||||
if((old_val == 0 || druggy == 0) && (old_val != druggy))
|
||||
update_druggy_effects()
|
||||
|
||||
/mob/living/AdjustDruggy(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(druggy, amount, bound_lower, bound_upper)
|
||||
SetDruggy(new_value)
|
||||
|
||||
// EAR_DAMAGE
|
||||
|
||||
/mob/living/EarDamage(amount)
|
||||
SetEarDamage(max(ear_damage, amount))
|
||||
|
||||
/mob/living/SetEarDamage(amount)
|
||||
ear_damage = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustEarDamage(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(ear_damage, amount, bound_lower, bound_upper)
|
||||
SetEarDamage(new_value)
|
||||
|
||||
// EAR_DEAF
|
||||
|
||||
/mob/living/EarDeaf(amount)
|
||||
SetEarDeaf(max(ear_deaf, amount))
|
||||
|
||||
/mob/living/SetEarDeaf(amount)
|
||||
ear_deaf = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustEarDeaf(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(ear_deaf, amount, bound_lower, bound_upper)
|
||||
SetEarDeaf(new_value)
|
||||
|
||||
// EYE_BLIND
|
||||
|
||||
/mob/living/EyeBlind(amount)
|
||||
SetEyeBlind(max(eye_blind, amount))
|
||||
|
||||
/mob/living/SetEyeBlind(amount)
|
||||
var/old_val = eye_blind
|
||||
eye_blind = max(amount, 0)
|
||||
// We transitioned to/from 0, so update the eye blind overlays
|
||||
if((old_val == 0 || eye_blind == 0) && (old_val != eye_blind))
|
||||
update_blind_effects()
|
||||
|
||||
/mob/living/AdjustEyeBlind(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(eye_blind, amount, bound_lower, bound_upper)
|
||||
SetEyeBlind(new_value)
|
||||
|
||||
// EYE_BLURRY
|
||||
|
||||
/mob/living/EyeBlurry(amount)
|
||||
SetEyeBlurry(max(eye_blurry, amount))
|
||||
|
||||
/mob/living/SetEyeBlurry(amount)
|
||||
var/old_val = eye_blurry
|
||||
eye_blurry = max(amount, 0)
|
||||
// We transitioned to/from 0, so update the eye blur overlays
|
||||
if((old_val == 0 || eye_blurry == 0) && (old_val != eye_blurry))
|
||||
update_blurry_effects()
|
||||
|
||||
/mob/living/AdjustEyeBlurry(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(eye_blurry, amount, bound_lower, bound_upper)
|
||||
SetEyeBlurry(new_value)
|
||||
|
||||
// HALLUCINATION
|
||||
|
||||
/mob/living/Hallucinate(amount)
|
||||
SetHallucinate(max(hallucination, amount))
|
||||
|
||||
/mob/living/SetHallucinate(amount)
|
||||
hallucination = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustHallucinate(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(hallucination, amount, bound_lower, bound_upper)
|
||||
SetHallucinate(new_value)
|
||||
|
||||
// JITTER
|
||||
|
||||
/mob/living/Jitter(amount, force = 0)
|
||||
SetJitter(max(jitteriness, amount), force)
|
||||
|
||||
/mob/living/SetJitter(amount, force = 0)
|
||||
// Jitter is also associated with stun
|
||||
if(status_flags & CANSTUN || force)
|
||||
jitteriness = max(amount, 0)
|
||||
else
|
||||
jitteriness = 0
|
||||
|
||||
/mob/living/AdjustJitter(amount, bound_lower = 0, bound_upper = INFINITY, force = 0)
|
||||
var/new_value = directional_bounded_sum(jitteriness, amount, bound_lower, bound_upper)
|
||||
SetJitter(new_value, force)
|
||||
|
||||
// LOSE_BREATH
|
||||
|
||||
/mob/living/LoseBreath(amount)
|
||||
SetLoseBreath(max(lose_breath, amount))
|
||||
|
||||
/mob/living/SetLoseBreath(amount)
|
||||
lose_breath = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustLoseBreath(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(lose_breath, amount, bound_lower, bound_upper)
|
||||
SetLoseBreath(new_value)
|
||||
|
||||
// PARALYSE
|
||||
|
||||
/mob/living/Paralyse(amount, updating = 1, force = 0)
|
||||
SetParalysis(max(paralysis, amount), updating, force)
|
||||
|
||||
/mob/living/SetParalysis(amount, updating = 1, force = 0)
|
||||
if(status_flags & CANPARALYSE || force)
|
||||
paralysis = max(amount, 0)
|
||||
else
|
||||
paralysis = 0
|
||||
if(updating)
|
||||
update_canmove()
|
||||
update_stat()
|
||||
|
||||
/mob/living/AdjustParalysis(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0)
|
||||
var/new_value = directional_bounded_sum(paralysis, amount, bound_lower, bound_upper)
|
||||
SetParalysis(new_value, updating, force)
|
||||
|
||||
// SILENT
|
||||
|
||||
/mob/living/Silence(amount)
|
||||
SetSilence(max(silent, amount))
|
||||
|
||||
/mob/living/SetSilence(amount)
|
||||
silent = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustSilence(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(silent, amount, bound_lower, bound_upper)
|
||||
SetSilence(new_value)
|
||||
|
||||
// SLEEPING
|
||||
|
||||
/mob/living/Sleeping(amount, updating = 1)
|
||||
SetSleeping(max(sleeping, amount), updating)
|
||||
|
||||
/mob/living/SetSleeping(amount, updating = 1)
|
||||
sleeping = max(amount, 0)
|
||||
update_sleeping_effects()
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/living/AdjustSleeping(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1)
|
||||
var/new_value = directional_bounded_sum(sleeping, amount, bound_lower, bound_upper)
|
||||
SetSleeping(new_value, updating)
|
||||
|
||||
// SLOWED
|
||||
|
||||
/mob/living/Slowed(amount, updating = 1)
|
||||
SetSlowed(max(slowed, amount), updating)
|
||||
|
||||
/mob/living/SetSlowed(amount, updating = 1)
|
||||
slowed = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustSlowed(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1)
|
||||
var/new_value = directional_bounded_sum(slowed, amount, bound_lower, bound_upper)
|
||||
SetSlowed(new_value, updating)
|
||||
|
||||
// SLURRING
|
||||
|
||||
/mob/living/Slur(amount)
|
||||
SetSlur(max(slurring, amount))
|
||||
|
||||
/mob/living/SetSlur(amount)
|
||||
slurring = max(amount, 0)
|
||||
|
||||
/mob/living/AdjustSlur(amount, bound_lower = 0, bound_upper = INFINITY)
|
||||
var/new_value = directional_bounded_sum(slurring, amount, bound_lower, bound_upper)
|
||||
SetSlur(new_value)
|
||||
|
||||
// STUN
|
||||
|
||||
/mob/living/Stun(amount, updating = 1, force = 0)
|
||||
SetStunned(max(stunned, amount), updating, force)
|
||||
|
||||
/mob/living/SetStunned(amount, updating = 1, force = 0) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(status_flags & CANSTUN || force)
|
||||
stunned = max(amount, 0)
|
||||
else if(stunned)
|
||||
stunned = 0
|
||||
if(updating)
|
||||
update_canmove()
|
||||
|
||||
/mob/living/AdjustStunned(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0)
|
||||
var/new_value = directional_bounded_sum(stunned, amount, bound_lower, bound_upper)
|
||||
SetStunned(new_value, updating, force)
|
||||
|
||||
// STUTTERING
|
||||
|
||||
|
||||
/mob/living/Stuttering(amount, force = 0)
|
||||
SetStuttering(max(stuttering, amount), force)
|
||||
|
||||
/mob/living/SetStuttering(amount, force = 0)
|
||||
//From mob/living/apply_effect: "Stuttering is often associated with Stun"
|
||||
if(status_flags & CANSTUN || force)
|
||||
stuttering = max(stuttering, 0)
|
||||
else
|
||||
stuttering = 0
|
||||
|
||||
/mob/living/AdjustStuttering(amount, bound_lower = 0, bound_upper = INFINITY, force = 0)
|
||||
var/new_value = directional_bounded_sum(stuttering, amount, bound_lower, bound_upper)
|
||||
SetStuttering(new_value, force)
|
||||
|
||||
// WEAKEN
|
||||
|
||||
/mob/living/Weaken(amount, updating = 1, force = 0)
|
||||
SetWeakened(max(weakened, amount), updating, force)
|
||||
|
||||
/mob/living/SetWeakened(amount, updating = 1, force = 0)
|
||||
if(status_flags & CANWEAKEN || force)
|
||||
weakened = max(amount, 0)
|
||||
else
|
||||
weakened = 0
|
||||
if(updating)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/mob/living/AdjustWeakened(amount, bound_lower = 0, bound_upper = INFINITY, updating = 1, force = 0)
|
||||
var/new_value = directional_bounded_sum(weakened, amount, bound_lower, bound_upper)
|
||||
SetWeakened(new_value, updating, force)
|
||||
|
||||
//
|
||||
// DISABILITIES
|
||||
//
|
||||
|
||||
// Blind
|
||||
|
||||
/mob/living/proc/BecomeBlind()
|
||||
var/val_change = !(disabilities & BLIND)
|
||||
disabilities |= BLIND
|
||||
if(val_change)
|
||||
update_blind_effects()
|
||||
|
||||
/mob/living/proc/CureBlind()
|
||||
var/val_change = !!(disabilities & BLIND)
|
||||
disabilities &= ~BLIND
|
||||
if(val_change)
|
||||
update_blind_effects()
|
||||
|
||||
// Coughing
|
||||
|
||||
/mob/living/proc/BecomeCoughing()
|
||||
disabilities |= COUGHING
|
||||
|
||||
/mob/living/proc/CureCoughing()
|
||||
disabilities &= ~COUGHING
|
||||
|
||||
// Deaf
|
||||
|
||||
/mob/living/proc/BecomeDeaf()
|
||||
disabilities |= DEAF
|
||||
|
||||
/mob/living/proc/CureDeaf()
|
||||
disabilities &= ~DEAF
|
||||
|
||||
// Epilepsy
|
||||
|
||||
/mob/living/proc/BecomeEpilepsy()
|
||||
disabilities |= EPILEPSY
|
||||
|
||||
/mob/living/proc/CureEpilepsy()
|
||||
disabilities &= ~EPILEPSY
|
||||
|
||||
// Mute
|
||||
|
||||
/mob/living/proc/BecomeMute()
|
||||
disabilities |= MUTE
|
||||
|
||||
/mob/living/proc/CureMute()
|
||||
disabilities &= ~MUTE
|
||||
|
||||
// Nearsighted
|
||||
|
||||
/mob/living/proc/BecomeNearsighted()
|
||||
var/val_change = !(disabilities & NEARSIGHTED)
|
||||
disabilities |= NEARSIGHTED
|
||||
if(val_change)
|
||||
update_nearsighted_effects()
|
||||
|
||||
/mob/living/proc/CureNearsighted()
|
||||
var/val_change = !!(disabilities & NEARSIGHTED)
|
||||
disabilities &= ~NEARSIGHTED
|
||||
if(val_change)
|
||||
update_nearsighted_effects()
|
||||
|
||||
// Nervous
|
||||
|
||||
/mob/living/proc/BecomeNervous()
|
||||
disabilities |= NERVOUS
|
||||
|
||||
/mob/living/proc/CureNervous()
|
||||
disabilities &= ~NERVOUS
|
||||
|
||||
// Tourettes
|
||||
|
||||
/mob/living/proc/BecomeTourettes()
|
||||
disabilities |= TOURETTES
|
||||
|
||||
/mob/living/proc/CureTourettes()
|
||||
disabilities &= ~TOURETTES
|
||||
@@ -0,0 +1,97 @@
|
||||
/mob/living/update_blind_effects()
|
||||
if(!can_see())
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
return 1
|
||||
else
|
||||
clear_fullscreen("blind")
|
||||
clear_alert("blind")
|
||||
return 0
|
||||
|
||||
/mob/living/update_blurry_effects()
|
||||
if(eyes_blurred())
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
return 1
|
||||
else
|
||||
clear_fullscreen("blurry")
|
||||
return 0
|
||||
|
||||
/mob/living/update_druggy_effects()
|
||||
if(druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
else
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
|
||||
/mob/living/update_nearsighted_effects()
|
||||
if(disabilities & NEARSIGHTED)
|
||||
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
||||
else
|
||||
clear_fullscreen("nearsighted")
|
||||
|
||||
/mob/living/update_sleeping_effects()
|
||||
if(sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
else
|
||||
clear_alert("asleep")
|
||||
|
||||
// Querying status of the mob
|
||||
|
||||
// Whether the mob can hear things
|
||||
/mob/living/can_hear()
|
||||
return !(ear_deaf || (disabilities & DEAF))
|
||||
|
||||
// Whether the mob is able to see
|
||||
/mob/living/can_see()
|
||||
return !(eye_blind || (disabilities & BLIND) || stat)
|
||||
|
||||
// Whether the mob is capable of talking
|
||||
/mob/living/can_speak()
|
||||
return !(silent || (disabilities & MUTE) || is_muzzled())
|
||||
|
||||
// Whether the mob is capable of standing or not
|
||||
/mob/living/proc/can_stand()
|
||||
return !(weakened || paralysis || stat || (status_flags & FAKEDEATH))
|
||||
|
||||
// Whether the mob is capable of actions or not
|
||||
/mob/living/incapacitated(ignore_restraints = 0, ignore_grab = 0, ignore_lying = 0)
|
||||
if(stat || paralysis || stunned || (weakened && lying) || (!ignore_restraints && restrained()) || (!ignore_lying && lying))
|
||||
return 1
|
||||
|
||||
// wonderful proc names, I know - used to check whether the blur overlay
|
||||
// should show or not
|
||||
/mob/living/proc/eyes_blurred()
|
||||
return eye_blurry
|
||||
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
/mob/living/update_canmove(delay_action_updates = 0)
|
||||
var/fall_over = !can_stand()
|
||||
var/buckle_lying = !(buckled && !buckled.buckle_lying)
|
||||
if(fall_over || resting || stunned)
|
||||
drop_r_hand()
|
||||
drop_l_hand()
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
if(buckled)
|
||||
lying = 90 * buckle_lying
|
||||
else if((fall_over || resting) && !lying)
|
||||
fall(fall_over)
|
||||
|
||||
canmove = !(fall_over || resting || stunned || buckled)
|
||||
density = !lying
|
||||
if(lying)
|
||||
if(layer == initial(layer))
|
||||
layer = MOB_LAYER - 0.2
|
||||
else
|
||||
if(layer == MOB_LAYER - 0.2)
|
||||
layer = initial(layer)
|
||||
|
||||
update_transform()
|
||||
if(!delay_action_updates)
|
||||
update_action_buttons_icon()
|
||||
return canmove
|
||||
|
||||
/mob/living/proc/update_stamina()
|
||||
return
|
||||
+4
-119
@@ -62,22 +62,22 @@
|
||||
if(!client) return
|
||||
|
||||
if(type)
|
||||
if(type & 1 && (disabilities & BLIND || blinded || paralysis) )//Vision related
|
||||
if(type & 1 && !can_see())//Vision related
|
||||
if(!( alt ))
|
||||
return
|
||||
else
|
||||
msg = alt
|
||||
type = alt_type
|
||||
if(type & 2 && (disabilities & DEAF || ear_deaf))//Hearing related
|
||||
if(type & 2 && !can_hear())//Hearing related
|
||||
if(!( alt ))
|
||||
return
|
||||
else
|
||||
msg = alt
|
||||
type = alt_type
|
||||
if((type & 1 && disabilities & BLIND))
|
||||
if(type & 1 && !can_see())
|
||||
return
|
||||
// Added voice muffling for Issue 41.
|
||||
if(stat == UNCONSCIOUS || (sleeping > 0 && stat != 2))
|
||||
if(stat == UNCONSCIOUS || (sleeping > 0 && stat != DEAD))
|
||||
to_chat(src, "<I>... You can almost hear someone talking ...</I>")
|
||||
else
|
||||
to_chat(src, msg)
|
||||
@@ -163,13 +163,6 @@
|
||||
// handle_typing_indicator()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/restrained()
|
||||
return
|
||||
|
||||
/mob/proc/incapacitated()
|
||||
return
|
||||
|
||||
//This proc is called whenever someone clicks an inventory ui slot.
|
||||
/mob/proc/attack_ui(slot)
|
||||
var/obj/item/W = get_active_hand()
|
||||
@@ -1031,36 +1024,6 @@ var/list/slot_equipment_priority = list( \
|
||||
if(restrained()) return 0
|
||||
return 1
|
||||
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
/mob/proc/update_canmove(delay_action_updates = 0)
|
||||
var/ko = weakened || paralysis || stat || (status_flags & FAKEDEATH)
|
||||
var/buckle_lying = !(buckled && !buckled.buckle_lying)
|
||||
if(ko || resting || stunned)
|
||||
drop_r_hand()
|
||||
drop_l_hand()
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
if(buckled)
|
||||
lying = 90 * buckle_lying
|
||||
else
|
||||
if((ko || resting) && !lying)
|
||||
fall(ko)
|
||||
|
||||
canmove = !(ko || resting || stunned || buckled)
|
||||
density = !lying
|
||||
if(lying)
|
||||
if(layer == initial(layer))
|
||||
layer = MOB_LAYER - 0.2
|
||||
else
|
||||
if(layer == MOB_LAYER - 0.2)
|
||||
layer = initial(layer)
|
||||
|
||||
update_transform()
|
||||
if(!delay_action_updates)
|
||||
update_action_buttons_icon()
|
||||
return canmove
|
||||
|
||||
/mob/proc/fall(var/forced)
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
@@ -1101,77 +1064,6 @@ var/list/slot_equipment_priority = list( \
|
||||
/mob/proc/activate_hand(selhand)
|
||||
return
|
||||
|
||||
/mob/proc/Jitter(amount)
|
||||
jitteriness = max(jitteriness, amount, 0)
|
||||
|
||||
/mob/proc/Dizzy(amount)
|
||||
dizziness = max(dizziness, amount, 0)
|
||||
|
||||
/mob/proc/AdjustDrunk(amount)
|
||||
drunk = max(drunk + amount, 0)
|
||||
|
||||
/mob/proc/Stun(amount)
|
||||
SetStunned(max(stunned, amount))
|
||||
|
||||
/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(amount, 0)
|
||||
update_canmove()
|
||||
else if(stunned)
|
||||
stunned = 0
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustStunned(amount)
|
||||
SetStunned(stunned + amount)
|
||||
|
||||
/mob/proc/Weaken(amount)
|
||||
SetWeakened(max(weakened, amount))
|
||||
|
||||
/mob/proc/SetWeakened(amount)
|
||||
if(status_flags & CANWEAKEN)
|
||||
weakened = max(amount, 0)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
else if(weakened)
|
||||
weakened = 0
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustWeakened(amount)
|
||||
SetWeakened(weakened + amount)
|
||||
|
||||
/mob/proc/Paralyse(amount)
|
||||
SetParalysis(max(paralysis, amount))
|
||||
|
||||
/mob/proc/SetParalysis(amount)
|
||||
if(status_flags & CANPARALYSE)
|
||||
paralysis = max(amount, 0)
|
||||
update_canmove()
|
||||
else if(paralysis)
|
||||
paralysis = 0
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustParalysis(amount)
|
||||
SetParalysis(paralysis + amount)
|
||||
|
||||
/mob/proc/Sleeping(amount)
|
||||
SetSleeping(max(sleeping, amount))
|
||||
|
||||
/mob/proc/SetSleeping(amount)
|
||||
sleeping = max(amount, 0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustSleeping(amount)
|
||||
SetSleeping(sleeping + amount)
|
||||
|
||||
/mob/proc/Resting(amount)
|
||||
SetResting(max(resting, amount))
|
||||
|
||||
/mob/proc/SetResting(amount)
|
||||
resting = max(amount, 0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustResting(amount)
|
||||
SetResting(resting + amount)
|
||||
|
||||
/mob/proc/get_species()
|
||||
return ""
|
||||
|
||||
@@ -1365,13 +1257,6 @@ mob/proc/yank_out_object()
|
||||
location.add_vomit_floor(src, 1)
|
||||
playsound(location, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
|
||||
/mob/proc/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/setEarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/AddSpell(obj/effect/proc_holder/spell/S)
|
||||
mob_spell_list += S
|
||||
S.action.Grant(src)
|
||||
|
||||
@@ -33,18 +33,11 @@
|
||||
var/obj/machinery/machine = null
|
||||
var/other_mobs = null
|
||||
var/memory = ""
|
||||
var/disabilities = 0 //Carbon
|
||||
var/atom/movable/pulling = null
|
||||
var/next_move = null
|
||||
var/notransform = null //Carbon
|
||||
var/other = 0.0
|
||||
var/hand = null
|
||||
var/eye_blind = 0 //Carbon
|
||||
var/eye_blurry = 0 //Carbon
|
||||
var/ear_deaf = 0 //Carbon
|
||||
var/ear_damage = 0 //Carbon
|
||||
var/stuttering = 0 //Carbon
|
||||
var/slurring = 0 //Carbon
|
||||
var/real_name = null
|
||||
var/flavor_text = ""
|
||||
var/med_record = ""
|
||||
@@ -53,11 +46,6 @@
|
||||
var/blinded = null
|
||||
var/bhunger = 0 //Carbon
|
||||
var/ajourn = 0
|
||||
var/druggy = 0 //Carbon
|
||||
var/confused = 0 //Carbon
|
||||
var/drunk = 0
|
||||
var/sleeping = 0 //Carbon
|
||||
var/resting = 0 //Carbon
|
||||
var/lying = 0
|
||||
var/lying_prev = 0
|
||||
var/canmove = 1
|
||||
@@ -77,19 +65,11 @@
|
||||
|
||||
|
||||
var/bodytemperature = 310.055 //98.7 F
|
||||
var/drowsyness = 0.0//Carbon
|
||||
var/dizziness = 0//Carbon
|
||||
var/jitteriness = 0//Carbon
|
||||
var/flying = 0
|
||||
var/charges = 0.0
|
||||
var/nutrition = 400.0//Carbon
|
||||
|
||||
var/overeatduration = 0 // How long this guy is overeating //Carbon
|
||||
var/paralysis = 0
|
||||
var/stunned = 0
|
||||
var/weakened = 0
|
||||
var/slowed = 0
|
||||
var/losebreath = 0 //Carbon
|
||||
var/intent = null//Living
|
||||
var/shakecamera = 0
|
||||
var/a_intent = I_HELP//Living
|
||||
|
||||
@@ -175,9 +175,9 @@
|
||||
|
||||
if(state >= GRAB_KILL)
|
||||
//affecting.apply_effect(STUTTER, 5) //would do this, but affecting isn't declared as mob/living for some stupid reason.
|
||||
affecting.stuttering = max(affecting.stuttering, 5) //It will hamper your voice, being choked and all.
|
||||
affecting.Stuttering(5) //It will hamper your voice, being choked and all.
|
||||
affecting.Weaken(5) //Should keep you down unless you get help.
|
||||
affecting.losebreath = max(affecting.losebreath + 2, 3)
|
||||
affecting.AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3)
|
||||
|
||||
adjust_position()
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]")
|
||||
|
||||
assailant.next_move = world.time + 10
|
||||
affecting.losebreath += 1
|
||||
affecting.AdjustLoseBreath(1)
|
||||
affecting.set_dir(WEST)
|
||||
adjust_position()
|
||||
|
||||
|
||||
@@ -75,12 +75,6 @@ proc/iscuffed(A)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
proc/isdeaf(A)
|
||||
if(istype(A, /mob))
|
||||
var/mob/M = A
|
||||
return (M.disabilities & DEAF) || M.ear_deaf
|
||||
return 0
|
||||
|
||||
proc/hassensorlevel(A, var/level)
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under))
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
mob.last_movement = world.time
|
||||
switch(mob.m_intent)
|
||||
if("run")
|
||||
if(mob.drowsyness > 0)
|
||||
if(mob.drowsy > 0)
|
||||
move_delay += 6
|
||||
move_delay += 1+config.run_speed
|
||||
if("walk")
|
||||
|
||||
@@ -565,3 +565,7 @@
|
||||
|
||||
/mob/new_player/is_ready()
|
||||
return ready && ..()
|
||||
|
||||
// No hearing announcements
|
||||
/mob/new_player/can_hear()
|
||||
return 0
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
if(length(message) >= 2)
|
||||
var/language_prefix = trim_right(lowertext(copytext(message, 1 ,4)))
|
||||
var/datum/language/L = language_keys[language_prefix]
|
||||
if(can_speak(L))
|
||||
if(can_speak_language(L))
|
||||
return L
|
||||
|
||||
return null
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
// A bunch of empty procs for all the status procs in living/status_procs.dm, because
|
||||
// I can't be bothered to deal with all the merge conflicts it would cause to
|
||||
// typecast every mob in the codebase correctly
|
||||
|
||||
/mob/proc/Confused()
|
||||
return
|
||||
|
||||
/mob/proc/SetConfused()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustConfused()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Dizzy()
|
||||
return
|
||||
|
||||
/mob/proc/SetDizzy()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustDizzy()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Drowsy()
|
||||
return
|
||||
|
||||
/mob/proc/SetDrowsy()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustDrowsy()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Drunk()
|
||||
return
|
||||
|
||||
/mob/proc/SetDrunk()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustDrunk()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Druggy()
|
||||
return
|
||||
|
||||
/mob/proc/SetDruggy()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustDruggy()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/EarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/SetEarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustEarDamage()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/EarDeaf()
|
||||
return
|
||||
|
||||
/mob/proc/SetEarDeaf()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustEarDeaf()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/EyeBlind()
|
||||
return
|
||||
|
||||
/mob/proc/SetEyeBlind()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustEyeBlind()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/EyeBlurry()
|
||||
return
|
||||
|
||||
/mob/proc/SetEyeBlurry()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustEyeBlurry()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Hallucinate()
|
||||
return
|
||||
|
||||
/mob/proc/SetHallucinate()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustHallucinate()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Jitter()
|
||||
return
|
||||
|
||||
/mob/proc/SetJitter()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustJitter()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/LoseBreath()
|
||||
return
|
||||
|
||||
/mob/proc/SetLoseBreath()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustLoseBreath()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Paralyse()
|
||||
return
|
||||
|
||||
/mob/proc/SetParalysis()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustParalysis()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Silence()
|
||||
return
|
||||
|
||||
/mob/proc/SetSilence()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustSilence()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Sleeping()
|
||||
return
|
||||
|
||||
/mob/proc/SetSleeping()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustSleeping()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Slowed()
|
||||
return
|
||||
|
||||
/mob/proc/SetSlowed()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustSlowed()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Slur()
|
||||
return
|
||||
|
||||
/mob/proc/SetSlur()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustSlur()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Stun()
|
||||
return
|
||||
|
||||
/mob/proc/SetStunned()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustStunned()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Stuttering()
|
||||
return
|
||||
|
||||
/mob/proc/SetStuttering()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustStuttering()
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/Weaken()
|
||||
return
|
||||
|
||||
/mob/proc/SetWeakened()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustWeakened()
|
||||
return
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user