Files
CHOMPStation2/code/game/objects/items/weapons/grenades/concussion.dm
T
Rykka Stormheart 640a73cb06 Adds Deafened Feedback, enhances looping sounds further
Adds deafened ear ring that plays any time you're deafened, and fades back in once you can hear again.

Example of deafened feedback [here](https://streamable.com/8s8vlu). 

Worry not, if you're deafened via mutation or other, you'll simply go deaf, and only hear the fade-in once you regain hearing. 

It will also only play **once** when you are deafened. Further deafening effects while you are already deaf will not force you to hear it again.
2023-03-03 04:08:08 -08:00

91 lines
2.7 KiB
Plaintext

//Concussion, or 'dizzyness' grenades.
/obj/item/weapon/grenade/concussion
name = "concussion grenade"
desc = "A polymer concussion grenade, optimized for disorienting personnel without causing large amounts of injury."
icon_state = "concussion"
item_state = "grenade"
var/blast_radius = 5
/obj/item/weapon/grenade/concussion/detonate()
..()
concussion_blast(get_turf(src), blast_radius)
qdel(src)
return
/obj/proc/concussion_blast(atom/target, var/radius = 5)
var/turf/T = get_turf(target)
if(is_below_sound_pressure(T))
visible_message("<span class='notice'>Whump.</span>")
return
playsound(src, 'sound/effects/bang.ogg', 75, 1, -3)
if(istype(T))
for(var/mob/living/L in orange(T, radius))
if(ishuman(L))
var/mob/living/carbon/human/H = L
to_chat(H, "<span class='critical'>WHUMP.</span>")
var/ear_safety = 0
H.get_ear_protection()
var/bang_effectiveness = H.species.sound_mod
if((get_dist(H, T) <= round(radius * 0.3 * bang_effectiveness) || src.loc == H.loc || src.loc == H))
if(ear_safety > 0)
H.Confuse(2)
else
H.Confuse(8)
H.Weaken(1)
H.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness
if ((prob(14) || (H == src.loc && prob(70))))
H.ear_damage += rand(1, 10)
else
H.ear_damage += rand(0, 5)
H.ear_deaf = max(H.ear_deaf,15)
if(H.client)
if(prob(50))
H.client.spinleft()
else
H.client.spinright()
else if(get_dist(H, T) <= round(radius * 0.5 * bang_effectiveness))
if(!ear_safety)
H.Confuse(6)
H.ear_damage += rand(0, 3)
H.ear_deaf = max(H.ear_deaf,10)
H.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness
if(H.client)
if(prob(50))
H.client.spinleft()
else
H.client.spinright()
else if(!ear_safety && get_dist(H, T) <= (radius * bang_effectiveness))
H.Confuse(4)
H.ear_damage += rand(0, 1)
H.ear_deaf = max(H.ear_deaf,5)
H.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness
if(H.ear_damage >= 15)
to_chat(H, "<span class='danger'>Your ears start to ring badly!</span>")
H.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness
if(prob(H.ear_damage - 5))
to_chat(H, "<span class='danger'>You can't hear anything!</span>")
H.sdisabilities |= DEAF
else if(H.ear_damage >= 5)
to_chat(H, "<span class='danger'>Your ears start to ring!</span>")
H.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness
if(istype(L, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = L
if(L.client)
if(prob(50))
L.client.spinleft()
else
L.client.spinright()
to_chat(R, "<span class='critical'>Gyroscopic failure.</span>")
return