From 2880d7098b509ef004cfeb03453cf70b0a40bad1 Mon Sep 17 00:00:00 2001
From: Pirouette <57296132+listerla@users.noreply.github.com>
Date: Fri, 13 Oct 2023 04:01:21 -0400
Subject: [PATCH] Ported surgery sounds from /vg/station (#17531)
* Ported surgery sounds from /vg/station
Source: https://github.com/vgstation-coders/vgstation13/pull/31850
* Requested changes
* accidentally a line
* Moves cautery sound
---
code/game/objects/items/stacks/medical.dm | 1 +
code/game/objects/items/stacks/nanopaste.dm | 1 +
.../game/objects/items/weapons/cigs_lighters.dm | 2 ++
.../objects/items/weapons/material/kitchen.dm | 1 +
.../objects/items/weapons/material/knives.dm | 1 +
.../game/objects/items/weapons/material/misc.dm | 1 +
.../objects/items/weapons/material/shards.dm | 1 +
code/game/objects/items/weapons/melee/misc.dm | 1 +
.../game/objects/items/weapons/surgery_tools.dm | 13 +++++++++++++
code/game/objects/items/weapons/tape.dm | 1 +
code/game/objects/items/weapons/tools.dm | 5 +++++
code/game/objects/objs.dm | 2 ++
code/modules/assembly/mousetrap.dm | 1 +
code/modules/mining/mine_items.dm | 1 +
code/modules/power/cable.dm | 1 +
code/modules/surgery/implant.dm | 1 -
code/modules/surgery/limb_reattach.dm | 1 +
code/modules/surgery/organs_internal.dm | 1 +
code/modules/surgery/slimes.dm | 3 +++
code/modules/surgery/surgery.dm | 1 +
html/changelogs/surgerysound.yml | 6 ++++++
sound/items/surgery/bonegel.ogg | Bin 0 -> 10247 bytes
sound/items/surgery/bonesetter.ogg | Bin 0 -> 23028 bytes
sound/items/surgery/cautery.ogg | Bin 0 -> 27839 bytes
sound/items/surgery/circularsaw.ogg | Bin 0 -> 58200 bytes
sound/items/surgery/fixovein.ogg | Bin 0 -> 36977 bytes
sound/items/surgery/hatchet.ogg | Bin 0 -> 12741 bytes
sound/items/surgery/hemostat.ogg | Bin 0 -> 35226 bytes
sound/items/surgery/retractor.ogg | Bin 0 -> 41933 bytes
sound/items/surgery/scalpel.ogg | Bin 0 -> 13703 bytes
sound/items/surgery/surgicaldrill.ogg | Bin 0 -> 32151 bytes
31 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 html/changelogs/surgerysound.yml
create mode 100644 sound/items/surgery/bonegel.ogg
create mode 100644 sound/items/surgery/bonesetter.ogg
create mode 100644 sound/items/surgery/cautery.ogg
create mode 100644 sound/items/surgery/circularsaw.ogg
create mode 100644 sound/items/surgery/fixovein.ogg
create mode 100644 sound/items/surgery/hatchet.ogg
create mode 100644 sound/items/surgery/hemostat.ogg
create mode 100644 sound/items/surgery/retractor.ogg
create mode 100644 sound/items/surgery/scalpel.ogg
create mode 100644 sound/items/surgery/surgicaldrill.ogg
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 176bea47fbc..e8421f7c95f 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -20,6 +20,7 @@ Contains:
w_class = ITEMSIZE_SMALL
throw_speed = 4
throw_range = 20
+ surgerysound = 'sound/items/surgery/bonegel.ogg'
var/heal_brute = 0
var/heal_burn = 0
var/automatic_charge_overlays = FALSE //Do we handle overlays with base update_icon()? | Stolen from TG egun code
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index 2071cbb49b7..4c11d0aefc0 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -10,6 +10,7 @@
icon_state = "tube"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
amount = 10
+ surgerysound = 'sound/items/surgery/bonegel.ogg'
var/list/construction_cost = list(DEFAULT_WALL_MATERIAL = 7000, MATERIAL_GLASS = 7000)
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index a89e74ec100..23b05ad3cdd 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -306,6 +306,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
type_butt = /obj/item/trash/cigbutt
chem_volume = 30
burn_rate = 0.006 //Lasts ~166 seconds)
+ surgerysound = 'sound/items/surgery/cautery.ogg'
matchmes = "USER lights their NAME with their FLAME."
lightermes = "USER manages to light their NAME with FLAME."
zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME."
@@ -686,6 +687,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/deactivation_sound = 'sound/items/cigs_lighters/cheap_off.ogg'
drop_sound = 'sound/items/drop/card.ogg'
pickup_sound = 'sound/items/pickup/card.ogg'
+ surgerysound = 'sound/items/surgery/cautery.ogg'
var/last_open = 0 //prevent message spamming.
var/last_close = 0
var/flame_light_range = 1
diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm
index f77f7f5915e..ffc87b56bdc 100644
--- a/code/game/objects/items/weapons/material/kitchen.dm
+++ b/code/game/objects/items/weapons/material/kitchen.dm
@@ -95,6 +95,7 @@
desc = "It's a fork. Sure is pointy."
icon_state = "fork"
sharp = TRUE
+ surgerysound = 'sound/items/surgery/hemostat.ogg'
/obj/item/material/kitchen/utensil/fork/plastic
icon_state = "plastic_fork"
diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm
index 049a1bdf1ab..194d260729e 100644
--- a/code/game/objects/items/weapons/material/knives.dm
+++ b/code/game/objects/items/weapons/material/knives.dm
@@ -19,6 +19,7 @@
drop_sound = 'sound/items/drop/knife.ogg'
pickup_sound = 'sound/items/pickup/knife.ogg'
hitsound = 'sound/weapons/bladeslice.ogg'
+ surgerysound = 'sound/items/surgery/scalpel.ogg'
/obj/item/material/knife/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob, var/target_zone)
if(active == 1)
diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm
index ff81e320121..2fc39c6bb69 100644
--- a/code/game/objects/items/weapons/material/misc.dm
+++ b/code/game/objects/items/weapons/material/misc.dm
@@ -44,6 +44,7 @@
applies_material_colour = 0
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
+ surgerysound = 'sound/items/surgery/hatchet.ogg'
/obj/item/material/hatchet/can_woodcut()
return TRUE
diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm
index 15646bf9937..5d5bfca4c94 100644
--- a/code/game/objects/items/weapons/material/shards.dm
+++ b/code/game/objects/items/weapons/material/shards.dm
@@ -18,6 +18,7 @@
unbreakable = 1 //It's already broken.
drops_debris = FALSE
drop_sound = 'sound/effects/glass_step.ogg'
+ surgerysound = 'sound/items/surgery/scalpel.ogg'
/obj/item/material/shard/set_material(var/new_material)
..(new_material)
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 026b9985a6a..e314c1dc624 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -37,6 +37,7 @@
origin_tech = list(TECH_COMBAT = 5)
attack_verb = list("chopped", "sliced", "shredded", "slashed", "cut", "ripped")
hitsound = 'sound/weapons/bladeslice.ogg'
+ surgerysound = 'sound/weapons/saw/chainsword.ogg'
var/active = 0
can_embed = 0//A chainsword can slice through flesh and bone, and the direction can be reversed if it ever did get stuck
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index fdb49e6c00a..5a95dd378bd 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -26,6 +26,7 @@
desc = "A pair of retractor forceps. Allows careful opening of incisions to reach inside someone."
icon_state = "retractor"
item_state = "retractor"
+ surgerysound = 'sound/items/surgery/retractor.ogg'
matter = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000)
flags = CONDUCT
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
@@ -38,6 +39,7 @@
desc = "A pair of hemostatic forceps, able to clamp blood vessels shut to stop bleeding during surgery. Its narrow tip also lets it double as a tool for removing things from surgical sites."
icon_state = "hemostat"
item_state = "hemostat"
+ surgerysound = 'sound/items/surgery/hemostat.ogg'
matter = list(DEFAULT_WALL_MATERIAL = 5000, MATERIAL_GLASS = 2500)
flags = CONDUCT
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
@@ -51,6 +53,7 @@
desc = "An electrocautery pen. Uses electrical currents to burn tissue closed, useful for quickly sealing wounds or incisions."
icon_state = "cautery"
item_state = "cautery"
+ surgerysound = 'sound/items/surgery/cautery.ogg'
matter = list(DEFAULT_WALL_MATERIAL = 5000, MATERIAL_GLASS = 2500)
flags = CONDUCT
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
@@ -64,6 +67,7 @@
desc = "A drill specialized for surgical use. Capable of creating surgical cavities and safely breaching through Vaurcae carapace for initial incisions."
icon_state = "drill"
item_state = "drill"
+ surgerysound = 'sound/items/surgery/surgicaldrill.ogg'
hitsound = /singleton/sound_category/drillhit_sound
matter = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_GLASS = 10000)
flags = CONDUCT
@@ -82,6 +86,7 @@
desc = "A surgical-grade scalpel with an incredibly sharp blade that keeps its edge. Used in a variety of surgical situations from incisions, to transplants, to debridements."
icon_state = "scalpel"
item_state = "scalpel"
+ surgerysound = 'sound/items/surgery/scalpel.ogg'
flags = CONDUCT
force = 10
sharp = 1
@@ -104,12 +109,14 @@
name = "laser scalpel"
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
icon_state = "scalpel_laser1"
+ surgerysound = 'sound/items/surgery/cautery.ogg'
damtype = "fire"
/obj/item/surgery/scalpel/laser2
name = "laser scalpel"
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
icon_state = "scalpel_laser2"
+ surgerysound = 'sound/items/surgery/cautery.ogg'
damtype = "fire"
force = 12
@@ -117,6 +124,7 @@
name = "laser scalpel"
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
icon_state = "scalpel_laser3"
+ surgerysound = 'sound/items/surgery/cautery.ogg'
damtype = "fire"
force = 15
@@ -124,6 +132,7 @@
name = "incision management system"
desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
icon_state = "scalpel_manager"
+ surgerysound = 'sound/items/surgery/cautery.ogg'
force = 7.5
/*
@@ -134,6 +143,7 @@
desc = "A reciprocating electric bonesaw. While designed to cut through bone, it's powerful enough to cut limbs and even hardsuits if necessary. Watch your fingers."
icon_state = "saw"
item_state = "saw"
+ surgerysound = 'sound/items/surgery/circularsaw.ogg'
hitsound = 'sound/weapons/saw/circsawhit.ogg'
flags = CONDUCT
force = 15
@@ -155,6 +165,7 @@
desc = "A bottle-and-nozzle applicator containing a specialized gel. When applied to bone tissue, it can reinforce and repair breakages and act as a glue to keep bones in place while they heal."
icon_state = "bone-gel"
item_state = "bone-gel"
+ surgerysound = 'sound/items/surgery/bonegel.ogg'
force = 2
throwforce = 5
drop_sound = 'sound/items/drop/bottle.ogg'
@@ -165,6 +176,7 @@
desc = "An advanced automatic surgical instrument that operates with extreme finesse. It can quickly and safely repair and recouple ruptured blood vessels and ligaments using highly elaborate, biodegradable microsutures. It can also be used for transplantations to attach organs to the body."
icon_state = "fixovein"
item_state = "fixovein"
+ surgerysound = 'sound/items/surgery/fixovein.ogg'
force = 2
throwforce = 5
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3)
@@ -177,6 +189,7 @@
desc = "A pair of forceps with a screw. It's designed to manipulate bones and hold them together, and is best paired with a bottle of bone gel for mending fractures."
icon_state = "bonesetter"
item_state = "bonesetter"
+ surgerysound = 'sound/items/surgery/bonesetter.ogg'
force = 8
throwforce = 9
throw_speed = 3
diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm
index ea25e0eaa66..00be71d4843 100644
--- a/code/game/objects/items/weapons/tape.dm
+++ b/code/game/objects/items/weapons/tape.dm
@@ -6,6 +6,7 @@
w_class = ITEMSIZE_TINY
drop_sound = 'sound/items/drop/cardboardbox.ogg'
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
+ surgerysound = /singleton/sound_category/rip_sound
/obj/item/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user, var/target_zone)
if(istype(H))
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index dab6908db12..e78a7e062a1 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -34,6 +34,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 150)
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
usesound = 'sound/items/wrench.ogg'
+ surgerysound = 'sound/items/surgery/bonesetter.ogg'
drop_sound = 'sound/items/drop/wrench.ogg'
pickup_sound = 'sound/items/pickup/wrench.ogg'
@@ -63,6 +64,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 75)
attack_verb = list("stabbed")
usesound = 'sound/items/Screwdriver.ogg'
+ surgerysound = 'sound/items/Screwdriver.ogg'
drop_sound = 'sound/items/drop/screwdriver.ogg'
pickup_sound = 'sound/items/pickup/screwdriver.ogg'
lock_picking_level = 5
@@ -138,6 +140,7 @@
sharp = TRUE
edge = TRUE
usesound = 'sound/items/Wirecutter.ogg'
+ surgerysound = 'sound/items/surgery/hemostat.ogg'
drop_sound = 'sound/items/drop/wirecutter.ogg'
pickup_sound = 'sound/items/pickup/wirecutter.ogg'
var/bomb_defusal_chance = 30 // 30% chance to safely defuse a bomb
@@ -220,6 +223,7 @@
drop_sound = 'sound/items/drop/weldingtool.ogg'
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
usesound = 'sound/items/Welder.ogg'
+ surgerysound = 'sound/items/surgery/cautery.ogg'
attack_verb = list("hit", "bludgeoned", "whacked")
@@ -692,6 +696,7 @@
drop_sound = 'sound/items/drop/crowbar.ogg'
pickup_sound = 'sound/items/pickup/crowbar.ogg'
usesound = /singleton/sound_category/crowbar_sound
+ surgerysound = 'sound/items/surgery/retractor.ogg'
origin_tech = list(TECH_ENGINEERING = 1)
matter = list(DEFAULT_WALL_MATERIAL = 50)
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 4b2ae5cc610..e754c5be6d1 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -30,6 +30,8 @@
var/usesound
var/toolspeed = 1
+ var/surgerysound
+
/obj/Destroy()
STOP_PROCESSING(SSprocessing, src)
return ..()
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 9f666521ccf..1ebfc9c17b4 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -8,6 +8,7 @@
icon_state = "mousetrap"
drop_sound = 'sound/items/drop/component.ogg'
pickup_sound = 'sound/items/pickup/component.ogg'
+ surgerysound = 'sound/items/surgery/fixovein.ogg'
origin_tech = list(TECH_COMBAT = 1)
matter = list(DEFAULT_WALL_MATERIAL = 100)
var/armed = FALSE
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 1046bbecfcd..ecc9d49350e 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -20,6 +20,7 @@
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
attack_verb = list("hit", "pierced", "sliced", "attacked")
hitsound = 'sound/weapons/rapidslice.ogg'
+ surgerysound = 'sound/weapons/rapidslice.ogg'
var/drill_sound = /singleton/sound_category/pickaxe_sound
var/drill_verb = "excavating"
var/autodrill = 0 //pickaxes must be manually swung to mine, drills can mine rocks via bump
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 0bae312eb55..a9816552464 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -488,6 +488,7 @@ By design, d1 is the smallest direction and d2 is the highest
stacktype = /obj/item/stack/cable_coil
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
+ surgerysound = 'sound/items/surgery/fixovein.ogg'
var/static/list/possible_cable_coil_colours = list(
"Yellow" = COLOR_YELLOW,
"Green" = COLOR_LIME,
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 15089f651d9..3ba80101e73 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -62,7 +62,6 @@
"You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." )
target.custom_pain("The pain in your chest is living hell!",1)
affected.cavity = CAVITY_OPEN
- playsound(target.loc, 'sound/effects/squelch1.ogg', 25, 1)
..()
/singleton/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index dd69dfa951e..d0f913ade77 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -72,6 +72,7 @@
var/obj/item/organ/external/E = target.get_organ(target_zone)
user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
"You start connecting tendons and muscle in [target]'s [E.amputation_point].")
+ ..()
/singleton/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = target.get_organ(target_zone)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index a187b880767..35310f5ba52 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -58,6 +58,7 @@
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
"You start treating damage to [target]'s [I.name] with [tool_name]." )
target.custom_pain("The pain in your [affected.name] is living hell!",100, affecting = affected)
+ ..()
/singleton/surgery_step/internal/fix_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/tool_name = "\the [tool]"
diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm
index f27ce81525d..5d214c4d7a0 100644
--- a/code/modules/surgery/slimes.dm
+++ b/code/modules/surgery/slimes.dm
@@ -26,6 +26,7 @@
/singleton/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \
"You start cutting through [target]'s flesh with \the [tool].")
+ ..()
/singleton/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
user.visible_message(SPAN_NOTICE("[user] cuts through [target]'s flesh with \the [tool]."), \
@@ -53,6 +54,7 @@
/singleton/surgery_step/slime/cut_innards/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \
"You start cutting [target]'s silky innards apart with \the [tool].")
+ ..()
/singleton/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
user.visible_message(SPAN_NOTICE("[user] cuts [target]'s innards apart with \the [tool], exposing the cores."), \
@@ -79,6 +81,7 @@
/singleton/surgery_step/slime/saw_core/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
user.visible_message("[user] starts cutting out one of [target]'s cores with \the [tool].", \
"You start cutting out one of [target]'s cores with \the [tool].")
+ ..()
/singleton/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
target.cores--
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index fc1e639f10d..694b470ac06 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -66,6 +66,7 @@
H.bloody_hands(target,0)
if(blood_level > 1)
H.bloody_body(target,0)
+ playsound(target.loc, tool.surgerysound, 50, TRUE)
return TRUE
// does stuff to end the step, which is normally print a message + do whatever this step changes
diff --git a/html/changelogs/surgerysound.yml b/html/changelogs/surgerysound.yml
new file mode 100644
index 00000000000..d7ceb587300
--- /dev/null
+++ b/html/changelogs/surgerysound.yml
@@ -0,0 +1,6 @@
+author: Pirouette
+
+delete-after: True
+
+changes:
+ - soundadd: "Added sounds for using tools in surgery, ported from /vg/station."
diff --git a/sound/items/surgery/bonegel.ogg b/sound/items/surgery/bonegel.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..aee49d46ff910d2f0faca8999fa3c5c1d2b29193
GIT binary patch
literal 10247
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
literal 0
HcmV?d00001
diff --git a/sound/items/surgery/bonesetter.ogg b/sound/items/surgery/bonesetter.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..7872f647af8e47d0eb90ac0d48c6b021f8beaea9
GIT binary patch
literal 23028
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