[Ready] Refactors stuns and status effects. (#17579)

* Fixes reviver runtime

* Confusion status effect

* Dizzy status effect

* Drowsiness status effect

* decaying -> transient

* Drunkenness status effect

* why use timer when SSfastprocessing work good

* stuns (mostly)

* weaken and immobalise

* stun/weaken times

* update_flags redundancies.

* Slowed()

* Silence + fixes transient decay

* Jittery

* sleeping

* Paralyze -> weaken

* Cult sluring

* paralyse

* Stammer

* slurring + projectile cleanups

* losebreath

* Hallucination

* forgor this

* eyeblurry

* eye blind

* Druggy

* affected didn't like my spacing

* review pass

* second review pass

* some cleanups

* documentation and signal framework

* confusion fix

* Fixes spec_stun

* rejuv fix

* removes a TODO

* conflicted myself

* fixes

* self review

* review

* removes TODOs

* adminfreeze

* TM fixes

* hallucination fix + others

* tones down alchol and runtime fixes

* confusion overlay suggestion

* more fixes

* runtime fix

* losebreath fix

* clamp => directional bounded sum

* steel review

* oops

Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>

* reduces the dizziness cycle rate

* borg hotfix

* sanctified decursening

Co-authored-by: mochi <1496804+dearmochi@users.noreply.github.com>
Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>
This commit is contained in:
Charlie
2022-05-24 16:35:26 +01:00
committed by GitHub
co-authored by SteelSlayer mochi
parent b32fb92770
commit 0f7a8707ef
311 changed files with 2268 additions and 2155 deletions
@@ -60,7 +60,7 @@
for(var/obj/item/grab/G in user.grabbed_by)
var/mob/living/carbon/M = G.assailant
user.visible_message("<span class='warning'>[user] spits acid at [M]'s face and slips out of their grab!</span>")
M.Stun(1) //Drops the grab
M.Stun(2 SECONDS) //Drops the grab
M.apply_damage(5, BURN, "head", M.run_armor_check("head", "melee"))
user.SetStunned(0) //This only triggers if they are grabbed, to have them break out of the grab, without the large stun time. If you use biodegrade as an antistun without being grabbed, it will not work
user.SetWeakened(0)
@@ -22,15 +22,15 @@
explosion(get_turf(user),0,0,2,0,silent=1)
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.EyeBlurry(20)
H.Stun(2 SECONDS)
H.EyeBlurry(40 SECONDS)
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(istype(E))
E.receive_damage(5, 1)
H.AdjustConfused(3)
H.AdjustConfused(6 SECONDS)
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)
S.Weaken(6 SECONDS)
var/new_location = user.drop_location()
spawn(5) // So it's not killed in explosion
var/mob/living/simple_animal/hostile/headslug/crab = new(new_location)
@@ -11,7 +11,7 @@
for(var/obj/item/grab/G in user.grabbed_by)
var/mob/living/carbon/M = G.assailant
user.visible_message("<span class='warning'>[user] suddenly hits [M] in the face and slips out of their grab!</span>")
M.Stun(1) //Drops the grab
M.Stun(2 SECONDS) //Drops the grab
M.apply_damage(5, BRUTE, "head", M.run_armor_check("head", "melee"))
playsound(user.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
user.revive()
@@ -17,14 +17,14 @@
continue
if(!M.mind || !M.mind.changeling)
M.AdjustEarDamage(0, 30)
M.AdjustConfused(20)
M.Jitter(50)
M.AdjustConfused(40 SECONDS)
M.Jitter(100 SECONDS)
else
SEND_SOUND(M, sound('sound/effects/screech.ogg'))
if(issilicon(M))
SEND_SOUND(M, sound('sound/weapons/flash.ogg'))
M.Weaken(rand(5,10))
M.Weaken(rand(10 SECONDS, 20 SECONDS))
for(var/obj/machinery/light/L in range(4, user))
L.on = 1
@@ -35,8 +35,8 @@
var/datum/changeling/changeling = user.mind.changeling
to_chat(user, "<span class='notice'>We tighten our grip. We must hold still....</span>")
target.do_jitter_animation(500)
user.do_jitter_animation(500)
target.Jitter(1000 SECONDS)
user.Jitter(1000 SECONDS)
if(!do_mob(user, target, 10 SECONDS))
to_chat(user, "<span class='warning'>The body swap has been interrupted!</span>")
@@ -62,7 +62,7 @@
GLOB.non_respawnable_keys -= ghost.ckey //they have a new body, let them be able to re-enter their corpse if they die
user.key = ghost.key
qdel(ghost)
user.Paralyse(2)
user.Paralyse(4 SECONDS)
target.add_language("Changeling")
user.remove_language("Changeling")
user.regenerate_icons()
@@ -97,7 +97,7 @@
/datum/action/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target)
add_attack_logs(user, target, "Mute sting (changeling)")
target.AdjustSilence(30)
target.AdjustSilence(60 SECONDS)
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]"))
return 1
@@ -114,8 +114,8 @@
add_attack_logs(user, target, "Blind sting (changeling)")
to_chat(target, "<span class='danger'>Your eyes burn horrifically!</span>")
target.become_nearsighted(EYE_DAMAGE)
target.EyeBlind(20)
target.EyeBlurry(40)
target.EyeBlind(40 SECONDS)
target.EyeBlurry(80 SECONDS)
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]"))
return 1
@@ -132,7 +132,7 @@
add_attack_logs(user, target, "LSD sting (changeling)")
spawn(rand(300,600))
if(target)
target.Hallucinate(400)
target.Hallucinate(400 SECONDS)
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]"))
return 1
+8 -9
View File
@@ -292,7 +292,7 @@
if(!ishuman(target) || iscultist(target))
return
var/mob/living/carbon/human/H = target
H.hallucination = max(H.hallucination, 120)
H.Hallucinate(120 SECONDS)
attached_action.charges--
attached_action.desc = attached_action.base_desc
attached_action.desc += "<br><b><u>Has [attached_action.charges] use\s remaining</u></b>."
@@ -447,18 +447,17 @@
else
to_chat(user, "<span class='cultitalic'>In a brilliant flash of red, [L] falls to the ground!</span>")
// These are in life cycles, so double the time that's stated.
L.Weaken(5)
L.Stun(5)
L.Weaken(10 SECONDS)
L.flash_eyes(1, TRUE)
if(issilicon(target))
var/mob/living/silicon/S = L
S.emp_act(EMP_HEAVY)
else if(iscarbon(target))
var/mob/living/carbon/C = L
C.Silence(3)
C.Stuttering(8)
C.CultSlur(10)
C.Jitter(8)
C.Silence(6 SECONDS)
C.Stuttering(16 SECONDS)
C.CultSlur(20 SECONDS)
C.Jitter(16 SECONDS)
uses--
..()
@@ -558,7 +557,7 @@
if(!C.handcuffed)
C.handcuffed = new /obj/item/restraints/handcuffs/energy/cult/used(C)
C.update_handcuffed()
C.Silence(6)
C.Silence(12 SECONDS)
to_chat(user, "<span class='notice'>You shackle [C].</span>")
add_attack_logs(user, C, "shackled")
uses--
@@ -796,7 +795,7 @@
if(H.stat == DEAD)
to_chat(user, "<span class='warning'>[H.p_their(TRUE)] blood has stopped flowing, you'll have to find another way to extract it.</span>")
return
if(H.cultslurring)
if(H.AmountCultSlurring())
to_chat(user, "<span class='danger'>[H.p_their(TRUE)] blood has been tainted by an even stronger form of blood magic, it's no use to us like this!</span>")
return
if(H.dna && !(NO_BLOOD in H.dna.species.species_traits) && H.dna.species.exotic_blood == null)
+18 -18
View File
@@ -36,7 +36,7 @@
/obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user)
if(!iscultist(user))
user.Weaken(5)
user.Weaken(10 SECONDS)
user.unEquip(src, 1)
user.visible_message("<span class='warning'>A powerful force shoves [user] away from [target]!</span>",
"<span class='cultlarge'>\"You shouldn't play with sharp things. You'll poke someone's eye out.\"</span>")
@@ -53,8 +53,8 @@
if(!iscultist(user))
to_chat(user, "<span class='cultlarge'>\"I wouldn't advise that.\"</span>")
to_chat(user, "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>")
user.Confused(10)
user.Jitter(6)
user.Confused(20 SECONDS)
user.Jitter(12 SECONDS)
if(HAS_TRAIT(user, TRAIT_HULK))
to_chat(user, "<span class='danger'>You can't seem to hold the blade properly!</span>")
@@ -67,7 +67,7 @@
icon_state = "bola_cult"
item_state = "bola_cult"
breakouttime = 45
weaken = 1
weaken = 2 SECONDS
/obj/item/restraints/legcuffs/bola/cult/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(iscultist(hit_atom))
@@ -159,8 +159,8 @@
to_chat(user, "<span class='cultlarge'>\"I wouldn't advise that.\"</span>")
to_chat(user, "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>")
user.unEquip(src, 1)
user.Confused(10)
user.Weaken(5)
user.Confused(20 SECONDS)
user.Weaken(10 SECONDS)
/obj/item/clothing/suit/hooded/cultrobes/cult_shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(current_charges && !owner.holy_check())
@@ -205,8 +205,8 @@
to_chat(user, "<span class='cultlarge'>\"I wouldn't advise that.\"</span>")
to_chat(user, "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>")
user.unEquip(src, 1)
user.Confused(10)
user.Weaken(5)
user.Confused(20 SECONDS)
user.Weaken(10 SECONDS)
else if(slot == slot_wear_suit)
ADD_TRAIT(user, TRAIT_GOTTAGOFAST, "cultrobes")
@@ -266,14 +266,14 @@
prescription = TRUE
origin_tech = null
/obj/item/clothing/glasses/hud/health/night/cultblind/equipped(mob/user, slot)
/obj/item/clothing/glasses/hud/health/night/cultblind/equipped(mob/living/user, slot)
..()
if(!iscultist(user))
to_chat(user, "<span class='cultlarge'>\"You want to be blind, do you?\"</span>")
user.unEquip(src, 1)
user.Confused(30)
user.Weaken(5)
user.EyeBlind(30)
user.Confused(60 SECONDS)
user.Weaken(10 SECONDS)
user.EyeBlind(60 SECONDS)
/obj/item/shuttle_curse
name = "cursed orb"
@@ -282,10 +282,10 @@
icon_state ="shuttlecurse"
var/global/curselimit = 0
/obj/item/shuttle_curse/attack_self(mob/user)
/obj/item/shuttle_curse/attack_self(mob/living/user)
if(!iscultist(user))
user.unEquip(src, 1)
user.Weaken(5)
user.Weaken(10 SECONDS)
to_chat(user, "<span class='warning'>A powerful force shoves you away from [src]!</span>")
return
if(curselimit > 1)
@@ -476,7 +476,7 @@
T.visible_message("<span class='warning'>The sheer force from [P] shatters the mirror shield!</span>")
new /obj/effect/temp_visual/cult/sparks(T)
playsound(T, 'sound/effects/glassbr3.ogg', 100)
owner.Weaken(3)
owner.Weaken(6 SECONDS)
qdel(src)
return FALSE
@@ -576,7 +576,7 @@
L.visible_message("<span class='warning'>[src] bounces off of [L], as if repelled by an unseen force!</span>")
else if(!..())
if(!L.null_rod_check())
L.Weaken(3)
L.Weaken(6 SECONDS)
break_spear(T)
else
..()
@@ -703,9 +703,9 @@
var/mob/living/carbon/M = user
to_chat(M, "<span class='cultlarge'>\"So, you want to explore space?\"</span>")
to_chat(M, "<span class='warning'>Space flashes around you as you are moved somewhere else!</span>")
M.Confused(10)
M.Confused(20 SECONDS)
M.flash_eyes(override_blindness_check = TRUE)
M.EyeBlind(10)
M.EyeBlind(20 SECONDS)
do_teleport(M, get_turf(M), 5, asoundin = 'sound/magic/cult_spell.ogg')
qdel(src)
return
+2 -2
View File
@@ -351,7 +351,7 @@ structure_check() searches for nearby cultist structures required for the invoca
crit.cure()
H.uncuff()
H.Silence(3) //Prevent "HALP MAINT CULT" before you realise you're converted
H.Silence(6 SECONDS) //Prevent "HALP MAINT CULT" before you realise you're converted
var/obj/item/melee/cultblade/dagger/D = new(get_turf(src))
if(H.equip_to_slot_if_possible(D, slot_in_backpack, FALSE, TRUE))
@@ -956,7 +956,7 @@ structure_check() searches for nearby cultist structures required for the invoca
if(user.key || QDELETED(src))
user.visible_message("<span class='warning'>[user] slowly relaxes, the glow around [user.p_them()] dimming.</span>",
"<span class='danger'>You are re-united with your physical form. [src] releases its hold over you.</span>")
user.Weaken(3)
user.Weaken(6 SECONDS)
break
if(user.health <= 10)
to_chat(ghost, "<span class='cultitalic'>Your body can no longer sustain the connection!</span>")
@@ -484,9 +484,9 @@ Congratulations! You are now trained for invasive xenobiology research!"}
L.lastattacker = user.real_name
L.lastattackerckey = user.ckey
L.Stun(7)
L.Weaken(7)
L.apply_effect(STUTTER, 7)
L.Stun(14 SECONDS)
L.Weaken(14 SECONDS)
L.Stuttering(14 SECONDS)
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
@@ -499,14 +499,14 @@ Congratulations! You are now trained for invasive xenobiology research!"}
add_attack_logs(user, L, "Stunned with [src]")
/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
if(L.stunned || L.sleeping)
if(L.IsStunned() || L.IsSleeping())
L.visible_message("<span class='danger'>[user] has induced sleep in [L] with [src]!</span>", \
"<span class='userdanger'>You suddenly feel very drowsy!</span>")
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
L.Sleeping(60)
L.Sleeping(120 SECONDS)
add_attack_logs(user, L, "Put to sleep with [src]")
else
L.AdjustDrowsy(1)
L.AdjustDrowsy(2 SECONDS)
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>")
@@ -159,13 +159,13 @@
switch(pick(1,3))
if(1)
to_chat(H, "<span class='userdanger'>You hear a loud buzz in your head, silencing your thoughts!</span>")
H.Stun(3)
H.Stun(6 SECONDS)
if(2)
to_chat(H, "<span class='warning'>You hear an annoying buzz in your head.</span>")
H.AdjustConfused(15)
H.AdjustConfused(30 SECONDS)
H.adjustBrainLoss(5, 15)
if(3)
H.hallucination += 60
H.AdjustHallucinate(60 SECONDS)
/obj/item/organ/internal/heart/gland/pop
cooldown_low = 900
@@ -169,7 +169,7 @@
/obj/machinery/abductor/experiment/proc/SendBack(mob/living/carbon/human/H)
H.Sleeping(8)
H.Sleeping(16 SECONDS)
if(console && console.pad && console.pad.teleport_target)
H.forceMove(console.pad.teleport_target)
H.uncuff()
@@ -18,7 +18,7 @@
target.forceMove(teleport_target)
new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir)
to_chat(target, "<span class='warning'>The instability of the warp leaves you disoriented!</span>")
target.Stun(3)
target.Stun(6 SECONDS)
/obj/machinery/abductor/pad/proc/Retrieve(mob/living/target)
flick("alien-pad", src)
@@ -528,7 +528,7 @@
to_chat(src, "<span class='warning'>You focus your psychic lance on [M] and freeze [M.p_their()] limbs with a wave of terrible dread.</span>")
to_chat(M, "<span class='warning'>You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.</span>")
M.Weaken(3)
M.Weaken(6 SECONDS)
used_dominate = world.time
attempting_to_dominate = FALSE
@@ -623,7 +623,7 @@
playsound(loc,'sound/effects/snap.ogg',50, 1, -1)
L.electrocute_act(100, src, 1, flags = SHOCK_NOGLOVES | SHOCK_ILLUSION)
if(isrobot(L) || ismachineperson(L))
L.Weaken(5)
L.Weaken(10 SECONDS)
qdel(src)
..()
@@ -158,7 +158,7 @@
/mob/living/simple_animal/hostile/guardian/gib()
if(summoner)
to_chat(summoner, "<span class='danger'>Your [src] was blown up!</span>")
summoner.Weaken(10)// your fermillier has died! ROLL FOR CON LOSS!
summoner.Weaken(20 SECONDS)// your fermillier has died! ROLL FOR CON LOSS!
ghostize()
qdel(src)
@@ -62,7 +62,7 @@
if(H.check_shields(src, 90, "[name]", attack_type = THROWN_PROJECTILE_ATTACK))
blocked = TRUE
if(!blocked)
L.Stun(1)
L.Stun(2 SECONDS)
L.visible_message("<span class='danger'>[src] slams into [L]!</span>", "<span class='userdanger'>[src] slams into you!</span>")
L.apply_damage(20, BRUTE)
playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, 1)
@@ -43,7 +43,7 @@
/// How much damage a successful ambush attack does
var/ambush_damage = 25
/// How much weaken a successful ambush attack applies
var/ambush_weaken = 3
var/ambush_weaken = 6 SECONDS
/// The spell the morph uses to morph
var/obj/effect/proc_holder/spell/mimic/morph/mimic_spell
/// The ambush action used by the morph
@@ -351,7 +351,7 @@
to_chat(src, "<span class='warning'>You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].</span>")
adjustStaminaLoss(25)
adjustToxLoss(5)
AdjustConfused(20, bound_lower = 0, bound_upper = 30)
AdjustConfused(40 SECONDS, bound_lower = 0, bound_upper = 60 SECONDS)
new /obj/effect/temp_visual/revenant(loc)
/obj/structure/window/defile()
@@ -157,7 +157,7 @@
/obj/effect/proc_holder/spell/sense_victims/cast(list/targets, mob/user)
var/mob/living/victim = targets[1]
to_chat(victim, "<span class='userdanger'>You feel an awful sense of being watched...</span>")
victim.Stun(3) //HUE
victim.Stun(6 SECONDS) //HUE
var/area/A = get_area(victim)
if(!A)
to_chat(user, "<span class='warning'>You could not locate any sapient heretics for the Slaughter.</span>")
+3 -3
View File
@@ -241,9 +241,9 @@
revolutionaries += rev_mind
if(iscarbon(rev_mind.current))
var/mob/living/carbon/carbon_mob = rev_mind.current
carbon_mob.Silence(5)
carbon_mob.Silence(10 SECONDS)
carbon_mob.flash_eyes(1, 1)
rev_mind.current.Stun(5)
rev_mind.current.Stun(10 SECONDS)
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>")
rev_mind.current.create_attack_log("<font color='red'>Has been converted to the revolution!</font>")
rev_mind.current.create_log(CONVERSION_LOG, "converted to the revolution")
@@ -271,7 +271,7 @@
message_admins("[key_name_admin(rev_mind.current)] [ADMIN_QUE(rev_mind.current,"?")] ([ADMIN_FLW(rev_mind.current,"FLW")]) has been borged while being a [remove_head ? "leader" : " member"] of the revolution.")
else
rev_mind.current.Paralyse(5)
rev_mind.current.Paralyse(10 SECONDS)
to_chat(rev_mind.current, "<span class='danger'><FONT size = 3>You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...</FONT></span>")
update_rev_icons_removed(rev_mind)
+2 -2
View File
@@ -814,7 +814,7 @@ GLOBAL_LIST_EMPTY(multiverse)
GiveHint(target)
else if(is_pointed(I))
to_chat(target, "<span class='userdanger'>You feel a stabbing pain in [parse_zone(user.zone_selected)]!</span>")
target.Weaken(2)
target.Weaken(4 SECONDS)
GiveHint(target)
else if(istype(I,/obj/item/bikehorn))
to_chat(target, "<span class='userdanger'>HONK</span>")
@@ -886,7 +886,7 @@ GLOBAL_LIST_EMPTY(multiverse)
GiveHint(target)
if("head")
to_chat(user, "<span class='notice'>You smack the doll's head with your hand.</span>")
target.Dizzy(10)
target.Dizzy(20 SECONDS)
to_chat(target, "<span class='warning'>You suddenly feel as if your head was hit with a hammer!</span>")
GiveHint(target,user)
cooldown = world.time + cooldown_time
+4 -4
View File
@@ -61,14 +61,14 @@
item_state = "fleshtostone"
/obj/item/melee/touch_attack/fleshtostone/afterattack(atom/target, mob/living/carbon/user, proximity)
if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //getting hard after touching yourself would also be bad
if(!proximity || target == user || !isliving(target) || !iscarbon(user) || user.lying || user.handcuffed) //getting hard after touching yourself would also be bad
return
if(user.lying || user.handcuffed)
to_chat(user, "<span class='warning'>You can't reach out!</span>")
return
var/mob/M = target
M.Stun(2)
new /obj/structure/closet/statue(M.loc, M)
var/mob/living/L = target
L.Stun(4 SECONDS)
new /obj/structure/closet/statue(L.loc, L)
..()
/obj/item/melee/touch_attack/fake_disintegrate
+9 -9
View File
@@ -67,12 +67,12 @@
return ..()
//////////////////////////////Capturing////////////////////////////////////////////////////////
/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/user)
/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user)
if(M == user)
return
if(!can_use(user))
user.Weaken(5)
user.Weaken(10 SECONDS)
user.emote("scream")
to_chat(user, "<span class='userdanger'>Your body is wracked with debilitating pain!</span>")
return
@@ -203,12 +203,12 @@
else
..()
/obj/item/soulstone/attack_self(mob/user)
/obj/item/soulstone/attack_self(mob/living/user)
if(!in_range(src, user))
return
if(!can_use(user))
user.Weaken(5)
user.Weaken(10 SECONDS)
user.emote("scream")
to_chat(user, "<span class='userdanger'>Your body is wracked with debilitating pain!</span>")
return
@@ -249,12 +249,12 @@
. += "<span class='cultitalic'>A <b>Wraith</b>, which does high damage and can jaunt through walls, though it is quite fragile.</span>"
. += "<span class='cultitalic'>A <b>Juggernaut</b>, which is very hard to kill and can produce temporary walls, but is slow.</span>"
/obj/structure/constructshell/attackby(obj/item/I, mob/user, params)
/obj/structure/constructshell/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/soulstone))
var/obj/item/soulstone/SS = I
if(!SS.can_use(user))
to_chat(user, "<span class='danger'>An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell.</span>")
user.Confused(10)
user.Confused(20 SECONDS)
return
SS.transfer_soul("CONSTRUCT", src, user)
SS.was_used()
@@ -263,7 +263,7 @@
////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
// this whole proc is pain
/obj/item/soulstone/proc/transfer_soul(choice, target, mob/user)
/obj/item/soulstone/proc/transfer_soul(choice, target, mob/living/user)
switch(choice)
if("FORCE")
var/mob/living/T = target
@@ -272,7 +272,7 @@
init_shade(T, user)
else // Poll ghosts
to_chat(user, "<span class='userdanger'>Capture failed!</span> The soul has already fled its mortal frame. You attempt to bring it back...")
T.Paralyse(20)
T.Paralyse(40 SECONDS)
if(!get_cult_ghost(T, user, TRUE))
T.dust() //If we can't get a ghost, kill the sacrifice anyway.
@@ -296,7 +296,7 @@
if("SHADE")
var/mob/living/simple_animal/shade/T = target
if(!can_use(user))
user.Weaken(5)
user.Weaken(10 SECONDS)
to_chat(user, "<span class='userdanger'>Your body is wracked with debilitating pain!</span>")
return
if(T.stat == DEAD)
+7 -5
View File
@@ -971,10 +971,12 @@
icon_state = "bookblind"
desc = "This book looks blurry, no matter how you look at it."
/obj/item/spellbook/oneuse/blind/recoil(mob/user as mob)
/obj/item/spellbook/oneuse/blind/recoil(mob/user)
..()
to_chat(user, "<span class='warning'>You go blind!</span>")
user.EyeBlind(10)
if(isliving(user))
var/mob/living/L = user
to_chat(user, "<span class='warning'>You go blind!</span>")
L.EyeBlind(20 SECONDS)
/obj/item/spellbook/oneuse/mindswap
spell = /obj/effect/proc_holder/spell/mind_transfer
@@ -1027,10 +1029,10 @@
icon_state = "bookknock"
desc = "This book is hard to hold closed properly."
/obj/item/spellbook/oneuse/knock/recoil(mob/user as mob)
/obj/item/spellbook/oneuse/knock/recoil(mob/living/user)
..()
to_chat(user, "<span class='warning'>You're knocked down!</span>")
user.Weaken(20)
user.Weaken(40 SECONDS)
/obj/item/spellbook/oneuse/horsemask
spell = /obj/effect/proc_holder/spell/horsemask