[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
parent b32fb92770
commit 0f7a8707ef
311 changed files with 2268 additions and 2155 deletions
+1 -2
View File
@@ -29,5 +29,4 @@
flag = BULLET
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
weaken = 5
stun = 5
weaken = 10 SECONDS
@@ -84,8 +84,7 @@
/obj/item/projectile/bullet/sniper
damage = 70
stun = 5
weaken = 5
weaken = 10 SECONDS
armour_penetration = 50
/obj/item/ammo_box/magazine/sniper_rounds/antimatter
@@ -129,13 +128,12 @@
/obj/item/projectile/bullet/sniper/soporific
armour_penetration = 0
nodamage = 1
stun = 0
weaken = 0
/obj/item/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = 0, hit_zone)
if((blocked != 100) && istype(target, /mob/living))
var/mob/living/L = target
L.SetSleeping(20)
L.SetSleeping(40 SECONDS)
return ..()
@@ -158,8 +156,7 @@
/obj/item/projectile/bullet/sniper/haemorrhage
armour_penetration = 25
damage = 45
stun = 3
weaken = 3
weaken = 6 SECONDS
/obj/item/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = 0, hit_zone)
if((blocked != 100) && iscarbon(target))
@@ -188,7 +185,6 @@
name = "penetrator round"
damage = 60
forcedodge = 1
stun = 0
dismemberment = 0
weaken = 0
+1 -1
View File
@@ -7,7 +7,7 @@
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
flag = "laser"
eyeblur = 2
eyeblur = 4 SECONDS
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
is_reflectable = TRUE
light_range = 2
+18 -20
View File
@@ -21,18 +21,18 @@
/obj/item/projectile/bullet/weakbullet/booze/on_hit(atom/target, blocked = 0)
if(..(target, blocked))
var/mob/living/M = target
M.AdjustDizzy(20)
M.AdjustSlur(20)
M.AdjustConfused(20)
M.AdjustEyeBlurry(20)
M.AdjustDrowsy(20)
M.AdjustDizzy(40 SECONDS)
M.AdjustSlur(40 SECONDS)
M.AdjustConfused(40 SECONDS)
M.AdjustEyeBlurry(40 SECONDS)
M.AdjustDrowsy(40 SECONDS)
for(var/datum/reagent/consumable/ethanol/A in M.reagents.reagent_list)
M.AdjustParalysis(2)
M.AdjustDizzy(10)
M.AdjustSlur(10)
M.AdjustConfused(10)
M.AdjustEyeBlurry(10)
M.AdjustDrowsy(10)
M.AdjustParalysis(4 SECONDS)
M.AdjustDizzy(20 SECONDS)
M.AdjustSlur(20 SECONDS)
M.AdjustConfused(20 SECONDS)
M.AdjustEyeBlurry(20 SECONDS)
M.AdjustDrowsy(20 SECONDS)
A.volume += 5 //Because we can
/obj/item/projectile/bullet/weakbullet2
@@ -113,7 +113,7 @@
/obj/item/projectile/bullet/pellet/assassination/on_hit(atom/target, blocked = 0)
if(..(target, blocked))
var/mob/living/M = target
M.AdjustSilence(2) // HELP MIME KILLING ME IN MAINT
M.AdjustSilence(4 SECONDS) // HELP MIME KILLING ME IN MAINT
/obj/item/projectile/bullet/pellet/overload/on_hit(atom/target, blocked = 0)
..()
@@ -158,10 +158,9 @@
/obj/item/projectile/bullet/stunshot //taser slugs for shotguns, nothing special
name = "stunshot"
damage = 5
stun = 5
weaken = 5
stutter = 5
jitter = 20
weaken = 10 SECONDS
stutter = 10 SECONDS
jitter = 40 SECONDS
range = 7
icon_state = "spark"
color = "#FFFF00"
@@ -186,8 +185,7 @@
icon = 'icons/obj/meteor.dmi'
icon_state = "dust"
damage = 30
stun = 1
weaken = 4
weaken = 8 SECONDS
hitsound = 'sound/effects/meteorimpact.ogg'
/obj/item/projectile/bullet/meteorshot/on_hit(atom/target, blocked = 0)
@@ -211,7 +209,7 @@
if(special_effects)
if(iscarbon(target))
var/mob/living/carbon/M = target
M.Silence(10)
M.Silence(20 SECONDS)
else if(istype(target, /obj/mecha/combat/honker))
var/obj/mecha/chassis = target
chassis.occupant_message("A mimetech anti-honk bullet has hit \the [chassis]!")
@@ -278,7 +276,7 @@
icon_state = "neurotoxin"
damage = 5
damage_type = TOX
weaken = 5
weaken = 10 SECONDS
/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = 0)
if(isalien(target))
+10 -11
View File
@@ -11,10 +11,9 @@
icon_state = "spark"
color = "#FFFF00"
nodamage = 1
stun = 5
weaken = 5
stutter = 5
jitter = 20
weaken = 10 SECONDS
stutter = 10 SECONDS
jitter = 40 SECONDS
hitsound = 'sound/weapons/tase.ogg'
range = 7
//Damage will be handled on the MOB side, to prevent window shattering.
@@ -30,7 +29,7 @@
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
else if(C.status_flags & CANWEAKEN)
spawn(5)
C.do_jitter_animation(jitter)
C.Jitter(jitter)
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
do_sparks(1, 1, src)
@@ -51,9 +50,9 @@
damage_type = TOX
nodamage = FALSE
stamina = 60
eyeblur = 10
weaken = 1
slur = 5
eyeblur = 20 SECONDS
weaken = 2 SECONDS
slur = 10 SECONDS
/obj/item/projectile/energy/bolt/large
damage = 20
@@ -85,8 +84,8 @@
damage = 60
damage_type = BURN
range = 9
weaken = 1 //This is going to knock you off your feet
eyeblur = 5
weaken = 2 SECONDS //This is going to knock you off your feet
eyeblur = 10 SECONDS
speed = 2
alwayslog = TRUE
@@ -126,7 +125,7 @@
add_attack_logs(src, M, "Hit heavily by [src]")
if(floored)
to_chat(M, "<span class='userdanger'>You see a flash of briliant blue light as [src] explodes, knocking you to the ground and burning you!</span>")
M.Weaken(1)
M.Weaken(2 SECONDS)
else
to_chat(M, "<span class='userdanger'>You see a flash of briliant blue light as [src] explodes, burning you!</span>")
else
+8 -8
View File
@@ -336,8 +336,8 @@
name = "magical banana"
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "banana"
var/slip_stun = 5
var/slip_weaken = 5
var/slip_stun = 10 SECONDS
var/slip_weaken = 10 SECONDS
hitsound = 'sound/items/bikehorn.ogg'
/obj/item/projectile/magic/slipping/New()
@@ -347,18 +347,18 @@
/obj/item/projectile/magic/slipping/on_hit(atom/target, blocked = 0)
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.slip(src, slip_stun, slip_weaken, 0, FALSE, TRUE) //Slips even with noslips/magboots on. NO ESCAPE!
H.slip(src, slip_weaken, 0, FALSE, TRUE) //Slips even with noslips/magboots on. NO ESCAPE!
else if(isrobot(target)) //You think you're safe, cyborg? FOOL!
var/mob/living/silicon/robot/R = target
if(!R.incapacitated())
to_chat(target, "<span class='warning'>You get splatted by [src], HONKING your sensors!</span>")
R.Stun(slip_stun)
else if(ismob(target))
var/mob/M = target
if(!M.stunned)
else if(isliving(target))
var/mob/living/L = target
if(!L.IsStunned())
to_chat(target, "<span class='notice'>You get splatted by [src].</span>")
M.Weaken(slip_weaken)
M.Stun(slip_stun)
L.Weaken(slip_weaken)
L.Stun(slip_stun)
. = ..()
/obj/item/projectile/magic/arcane_barrage
@@ -149,7 +149,7 @@
if(ishuman(target))
var/mob/living/carbon/human/M = target
M.adjustBrainLoss(20)
M.AdjustHallucinate(20)
M.AdjustHallucinate(20 SECONDS)
/obj/item/projectile/clown
name = "snap-pop"
@@ -194,7 +194,7 @@
/obj/item/projectile/bullet/frag12
name ="explosive slug"
damage = 15
weaken = 1
weaken = 2 SECONDS
alwayslog = TRUE
/obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = 0)