diff --git a/code/game/sound.dm b/code/game/sound.dm index d9f55f69f37..7be83a774de 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -584,3 +584,12 @@ 'sound/items/trayhit1.ogg', 'sound/items/trayhit2.ogg' ) + +/decl/sound_category/grab_sound + sounds = list( + 'sound/weapons/grab/grab1.ogg', + 'sound/weapons/grab/grab2.ogg', + 'sound/weapons/grab/grab3.ogg', + 'sound/weapons/grab/grab4.ogg', + 'sound/weapons/grab/grab5.ogg' +) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index a4d08fb29a4..16319810fc5 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -191,7 +191,7 @@ LAssailant = WEAKREF(M) H.do_attack_animation(src) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + playsound(loc, /decl/sound_category/grab_sound, 50, FALSE, -1) if(H.gloves && istype(H.gloves,/obj/item/clothing/gloves/force/syndicate)) //only antag gloves can do this for now G.state = GRAB_AGGRESSIVE G.icon_state = "grabbed1" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d3904e2bf2f..5e0b5f9190f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -706,6 +706,11 @@ if(ishuman(AM)) var/mob/living/carbon/human/H = AM + if(H.lying) // If they're on the ground we're probably dragging their arms to move them + visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s arms."), SPAN_NOTICE("You lean down and grip \the [H]'s arms.")) + else //Otherwise we're probably just holding their arm to lead them somewhere + visible_message(SPAN_WARNING("\The [src] grips \the [H]'s arm."), SPAN_NOTICE("You grip \the [H]'s arm.")) + playsound(loc, /decl/sound_category/grab_sound, 25, FALSE, -1) //Quieter than hugging/grabbing but we still want some audio feedback if(H.pull_damage()) to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.") diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 455a00211d9..dcd4b42b76a 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -47,6 +47,9 @@ item_state = "nothing" w_class = ITEMSIZE_HUGE + drop_sound = null + pickup_sound = null + equip_sound = null /obj/item/grab/New(mob/user, mob/victim) ..() @@ -182,12 +185,12 @@ switch(target_zone) if(BP_MOUTH) if(announce) - user.visible_message(SPAN_WARNING("\The [user] covers [target]'s face!")) + user.visible_message(SPAN_WARNING("\The [user] covers [target]'s face!"), SPAN_WARNING("You cover [target]'s face!")) if(target.silent < 3) target.silent = 3 if(BP_EYES) if(announce) - assailant.visible_message(SPAN_WARNING("[assailant] covers [affecting]'s eyes!")) + assailant.visible_message(SPAN_WARNING("[assailant] covers [affecting]'s eyes!"), SPAN_WARNING("You cover [target]'s eyes!")) if(affecting.eye_blind < 3) affecting.eye_blind = 3 @@ -267,9 +270,9 @@ if(!allow_upgrade) return if(!affecting.lying) - assailant.visible_message(SPAN_WARNING("[assailant] grabs [affecting] aggressively by the hands!")) + assailant.visible_message(SPAN_WARNING("[assailant] grabs [affecting] aggressively by the hands!"), SPAN_WARNING("You grab [affecting] aggressively by the hands!")) else - assailant.visible_message(SPAN_WARNING("[assailant] pins [affecting] down to the ground by the hands!")) + assailant.visible_message(SPAN_WARNING("[assailant] pins [affecting] down to the ground by the hands!"), SPAN_WARNING("You pin [affecting] down to the ground by the hands!")) apply_pinning(affecting, assailant) state = GRAB_AGGRESSIVE @@ -277,9 +280,10 @@ hud.icon_state = "reinforce1" else if(state < GRAB_NECK) if(isslime(affecting)) - to_chat(assailant, SPAN_NOTICE("You try to squeeze [affecting], but your hands sink right through!")) + assailant.visible_message(SPAN_WARNING("[assailant] tries to squeeze [affecting], but [assailant.get_pronoun("his")] hands sink right through!"), SPAN_WARNING("You try to squeeze [affecting], but your hands sink right through!")) return - assailant.visible_message(SPAN_WARNING("[assailant] reinforces [assailant.get_pronoun("his")] grip on [affecting]'s neck'!")) + playsound(loc, /decl/sound_category/grab_sound, 50, FALSE, -1) + assailant.visible_message(SPAN_WARNING("[assailant] reinforces [assailant.get_pronoun("his")] grip on [affecting]'s neck!"), SPAN_WARNING("You reinforce your grip on [affecting]'s neck!")) state = GRAB_NECK icon_state = "grabbed+1" affecting.attack_log += "\[[time_stamp()]\] Has had their neck grabbed by [assailant.name] ([assailant.ckey])" @@ -292,12 +296,13 @@ if(ishuman(affecting)) var/mob/living/carbon/human/H = affecting if(H.head && (H.head.item_flags & AIRTIGHT)) - to_chat(assailant, SPAN_WARNING("[H]'s headgear prevents you from choking them out!")) + assailant.visible_message(SPAN_WARNING("[affecting]'s headgear prevents [assailant] from choking them out!"), SPAN_WARNING("[affecting]'s headgear prevents you from choking them out!")) return hud.icon_state = "kill1" hud.name = "loosen" state = GRAB_KILL - assailant.visible_message(SPAN_DANGER("[assailant] starts strangling [affecting]!")) + playsound(loc, /decl/sound_category/grab_sound, 50, FALSE, -1) + assailant.visible_message(SPAN_DANGER("[assailant] starts strangling [affecting]!"), SPAN_DANGER("You start strangling [affecting]!")) affecting.attack_log += "\[[time_stamp()]\] is being strangled by [assailant.name] ([assailant.ckey])" assailant.attack_log += "\[[time_stamp()]\] is strangling [affecting.name] ([affecting.ckey])" @@ -313,7 +318,7 @@ hud.icon_state = "kill" hud.name = "kill" state = GRAB_NECK - assailant.visible_message(SPAN_WARNING("[assailant] stops strangling [affecting]!")) + assailant.visible_message(SPAN_WARNING("[assailant] stops strangling [affecting]!"), SPAN_WARNING("You stop strangling [affecting]!")) adjust_position() //This is used to make sure the victim hasn't managed to yackety sax away before using the grab. @@ -352,7 +357,7 @@ switch(assailant.a_intent) if(I_HELP) if(force_down) - to_chat(assailant, SPAN_WARNING("You are no longer pinning [affecting] to the ground.")) + assailant.visible_message(SPAN_WARNING("[assailant] is no longer pinning [affecting] to the ground."), SPAN_WARNING("You are no longer pinning [affecting] to the ground.")) force_down = 0 return inspect_organ(affecting, assailant, hit_zone) @@ -385,7 +390,7 @@ /obj/item/grab/proc/reset_kill_state() if(state == GRAB_KILL) - assailant.visible_message(SPAN_DANGER("[assailant] stops strangling [affecting] to move.")) + assailant.visible_message(SPAN_DANGER("[assailant] stops strangling [affecting] to move."), SPAN_DANGER("You stop strangling [affecting] to move.")) hud.icon_state = "kill" state = GRAB_NECK diff --git a/html/changelogs/wezzy_grab_sounds.yml b/html/changelogs/wezzy_grab_sounds.yml new file mode 100644 index 00000000000..86f5b9e7ec7 --- /dev/null +++ b/html/changelogs/wezzy_grab_sounds.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Wowzewow (Wezzy) + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds audiovisual feedback for pulling." + - soundadd: "Adds new sounds for grabbing." \ No newline at end of file diff --git a/sound/weapons/grab/grab1.ogg b/sound/weapons/grab/grab1.ogg new file mode 100644 index 00000000000..fa468de00dd Binary files /dev/null and b/sound/weapons/grab/grab1.ogg differ diff --git a/sound/weapons/grab/grab2.ogg b/sound/weapons/grab/grab2.ogg new file mode 100644 index 00000000000..4ab02bd391a Binary files /dev/null and b/sound/weapons/grab/grab2.ogg differ diff --git a/sound/weapons/grab/grab3.ogg b/sound/weapons/grab/grab3.ogg new file mode 100644 index 00000000000..f17a5c04a30 Binary files /dev/null and b/sound/weapons/grab/grab3.ogg differ diff --git a/sound/weapons/grab/grab4.ogg b/sound/weapons/grab/grab4.ogg new file mode 100644 index 00000000000..b1e2f184410 Binary files /dev/null and b/sound/weapons/grab/grab4.ogg differ diff --git a/sound/weapons/grab/grab5.ogg b/sound/weapons/grab/grab5.ogg new file mode 100644 index 00000000000..1082830fc4d Binary files /dev/null and b/sound/weapons/grab/grab5.ogg differ