diff --git a/code/__DEFINES/sound_defines.dm b/code/__DEFINES/sound_defines.dm index 9cb16278aae..eff43522ba3 100644 --- a/code/__DEFINES/sound_defines.dm +++ b/code/__DEFINES/sound_defines.dm @@ -12,13 +12,14 @@ #define CHANNEL_RADIO_NOISE 1014 // radio headset noise #define CHANNEL_BOSS_MUSIC 1013 #define CHANNEL_GENERAL 1012 +#define CHANNEL_SURGERY_SOUNDS 1011 #define USER_VOLUME(M, C) M?.client?.prefs.get_channel_volume(C) //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1011 +#define CHANNEL_HIGHEST_AVAILABLE 1010 #define MAX_INSTRUMENT_CHANNELS (128 * 6) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 430fb278690..c73a61bb1c2 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1971,6 +1971,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return "Radio Noise" if(CHANNEL_BOSS_MUSIC) return "Boss Music" + if(CHANNEL_SURGERY_SOUNDS) + return "Surgery Sounds" /proc/slot_bitfield_to_slot(input_slot_flags) // Kill off this garbage ASAP; slot flags and clothing flags should be IDENTICAL. GOSH DARN IT. Doesn't work with ears or pockets, either. switch(input_slot_flags) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index c22b31f3cd7..9593ccc5c40 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -53,6 +53,8 @@ /datum/surgery_step/internal/extract_organ name = "remove heart" accept_hand = 1 + preop_sound = 'sound/surgery/organ1.ogg' + success_sound = 'sound/surgery/organ2.ogg' time = 32 var/obj/item/organ/internal/IC = null @@ -86,6 +88,8 @@ /datum/surgery_step/internal/gland_insert name = "insert gland" allowed_tools = list(/obj/item/organ/internal/heart/gland = 100) + preop_sound = 'sound/surgery/organ2.ogg' + success_sound = 'sound/surgery/organ1.ogg' time = 32 /datum/surgery_step/internal/gland_insert/begin_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 2191f4a34f4..45983167d45 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -87,7 +87,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts "1016" = 100, // CHANNEL_FIREALARM "1015" = 100, // CHANNEL_ASH_STORM "1014" = 100, // CHANNEL_RADIO_NOISE - "1013" = 100 // CHANNEL_BOSS_MUSIC + "1013" = 100, // CHANNEL_BOSS_MUSIC + "1011" = 100 // CHANNEL_SURGERY_SOUNDS ) /// The volume mixer save timer handle. Used to debounce the DB call to save, to avoid spamming. var/volume_mixer_saving = null diff --git a/code/modules/surgery/bio_chip_removal.dm b/code/modules/surgery/bio_chip_removal.dm index f7c8d88b18b..5b324bbb714 100644 --- a/code/modules/surgery/bio_chip_removal.dm +++ b/code/modules/surgery/bio_chip_removal.dm @@ -29,6 +29,7 @@ /datum/surgery_step/extract_bio_chip name = "extract bio-chip" allowed_tools = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65) + preop_sound = 'sound/surgery/hemostat1.ogg' time = 6.4 SECONDS repeatable = TRUE var/obj/item/bio_chip/I = null diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index acfcbfcdedd..d14ddd44c33 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -51,6 +51,13 @@ TOOL_BONEGEL = 100, TOOL_SCREWDRIVER = 90 ) + + preop_sound = list( + TOOL_BONEGEL = 'sound/surgery/organ1.ogg', + /obj/item/screwdriver/power = 'sound/items/drill_hit.ogg', + /obj/item/screwdriver = 'sound/items/screwdriver.ogg' + ) + can_infect = TRUE blood_level = SURGERY_BLOODSPREAD_HANDS @@ -93,6 +100,7 @@ TOOL_WRENCH = 90 ) + preop_sound = 'sound/surgery/hemostat1.ogg' time = 3.2 SECONDS /datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -164,6 +172,13 @@ TOOL_BONEGEL = 100, TOOL_SCREWDRIVER = 90 ) + + preop_sound = list( + TOOL_BONEGEL = 'sound/surgery/organ1.ogg', + /obj/item/screwdriver/power = 'sound/items/drill_hit.ogg', + /obj/item/screwdriver = 'sound/items/screwdriver.ogg' + ) + can_infect = TRUE blood_level = SURGERY_BLOODSPREAD_HANDS diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 8baebebdff1..37a0ee5b56f 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -151,6 +151,12 @@ /obj/item/stack/rods = 60 ) + preop_sound = list( + TOOL_DRILL = 'sound/items/drill_hit.ogg', + /obj/item/screwdriver/power = 'sound/items/drill_hit.ogg', + /obj/item/pen = 'sound/surgery/organ2.ogg', + /obj/item/stack/rods = 'sound/surgery/organ2.ogg' + ) time = 5.4 SECONDS /datum/surgery_step/cavity/make_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -183,6 +189,9 @@ TOOL_WELDER = 30 ) + preop_sound = 'sound/surgery/cautery1.ogg' + success_sound = 'sound/surgery/cautery2.ogg' + failure_sound = 'sound/items/welder.ogg' time = 2.4 SECONDS /datum/surgery_step/cavity/close_space/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index 65a0ca70a6f..a57178f9734 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -19,6 +19,10 @@ /obj/item/kitchen/knife = 65, /obj/item/shard = 45 ) + + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' time = 1.6 SECONDS /datum/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool) @@ -38,6 +42,8 @@ /datum/surgery_step/slime/extract_core name = "extract core" allowed_tools = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 100) + preop_sound = 'sound/surgery/organ1.ogg' + success_sound = 'sound/surgery/organ2.ogg' time = 1.6 SECONDS /datum/surgery_step/slime/extract_core/begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 13bed7936b0..871f91d8038 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -16,6 +16,15 @@ TOOL_WIRECUTTER = 35 // Silly goose! ) + preop_sound = list( + TOOL_SAW = 'sound/surgery/saw.ogg', + /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', + /obj/item/chainsaw = 'sound/weapons/chainsaw.ogg', + /obj/item/butcher_chainsaw = 'sound/weapons/chainsaw.ogg', + TOOL_WIRECUTTER = 'sound/surgery/scalpel1.ogg' + ) + + success_sound = 'sound/surgery/organ2.ogg' time = 5.4 SECONDS /datum/surgery_step/open_encased/saw/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -64,6 +73,8 @@ TOOL_CROWBAR = 90 ) + preop_sound = 'sound/surgery/retractor1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' time = 2.4 SECONDS /datum/surgery_step/open_encased/retract/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -113,6 +124,8 @@ TOOL_CROWBAR = 90 ) + preop_sound = 'sound/surgery/retractor1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' time = 2.4 SECONDS /datum/surgery_step/open_encased/close/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -158,6 +171,12 @@ TOOL_SCREWDRIVER = 90 ) + preop_sound = list( + TOOL_BONEGEL = 'sound/surgery/organ1.ogg', + /obj/item/screwdriver/power = 'sound/items/drill_hit.ogg', + /obj/item/screwdriver = 'sound/items/screwdriver.ogg' + ) + time = 2.4 SECONDS /datum/surgery_step/open_encased/mend/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index dc6c9895737..b0fa71e9de3 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -23,6 +23,9 @@ /obj/item/butcher_chainsaw = 1 ) + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' time = 1.6 SECONDS /datum/surgery_step/generic/cut_open/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -67,6 +70,7 @@ /obj/item/assembly/mousetrap = 25 ) + preop_sound = 'sound/surgery/hemostat1.ogg' time = 2.4 SECONDS @@ -111,6 +115,9 @@ /obj/item/kitchen/utensil/fork = 60 ) + preop_sound = 'sound/surgery/retractor1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' time = 2.4 SECONDS /datum/surgery_step/generic/retract_skin/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -168,6 +175,9 @@ /obj/item/flamethrower = 1 // You make do with what ya got... ) + preop_sound = 'sound/surgery/cautery1.ogg' + success_sound = 'sound/surgery/cautery2.ogg' + failure_sound = 'sound/items/welder.ogg' time = 2.4 SECONDS /datum/surgery_step/generic/cauterize/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -226,6 +236,15 @@ /obj/item/mecha_parts/mecha_equipment/drill = 60, /obj/item/screwdriver = 20 ) + + preop_sound = list( + TOOL_DRILL = 'sound/items/drill_hit.ogg', + /obj/item/screwdriver/power = 'sound/items/drill_hit.ogg', + /obj/item/pickaxe/drill = 'sound/weapons/drill.ogg', + /obj/item/mecha_parts/mecha_equipment/drill = 'sound/weapons/drill.ogg', + /obj/item/screwdriver = 'sound/items/screwdriver.ogg' + ) + time = 3 SECONDS /datum/surgery_step/generic/drill/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -264,6 +283,13 @@ /obj/item/melee/energy = 75 ) + preop_sound = list( + TOOL_SAW = 'sound/surgery/saw.ogg', + /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', + /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg' + ) + + success_sound = 'sound/surgery/organ2.ogg' time = 10 SECONDS /datum/surgery_step/generic/amputate/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index ba71f0598a0..80fcef082bb 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -182,6 +182,8 @@ /obj/item/stack/nanopaste = 100 ) + preop_sound = 'sound/surgery/organ1.ogg' + /datum/surgery_step/internal/manipulate_organs/mend/proc/get_tool_name(obj/item/tool) var/tool_name = "[tool]" if(istype(tool, /obj/item/stack/medical/bruise_pack)) @@ -296,6 +298,8 @@ /obj/item/kitchen/utensil/fork = 70 ) + preop_sound = 'sound/surgery/organ1.ogg' + success_sound = 'sound/surgery/organ2.ogg' var/obj/item/organ/internal/extracting = null /datum/surgery_step/internal/manipulate_organs/extract/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -390,6 +394,9 @@ /obj/item/food/organ = 0 // there for the flavor text ) + preop_sound = 'sound/surgery/organ2.ogg' + success_sound = 'sound/surgery/organ1.ogg' + /datum/surgery_step/internal/manipulate_organs/implant/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(istype(tool, /obj/item/food/organ)) to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") @@ -643,6 +650,9 @@ TOOL_CROWBAR = 90 ) + preop_sound = 'sound/surgery/retractor1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' + /datum/surgery_step/internal/manipulate_organs/finish/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -707,6 +717,15 @@ TOOL_WIRECUTTER = 35 ) + preop_sound = list( + TOOL_SAW = 'sound/surgery/saw.ogg', + /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', + /obj/item/chainsaw = 'sound/weapons/chainsaw.ogg', + /obj/item/butcher_chainsaw = 'sound/weapons/chainsaw.ogg', + TOOL_WIRECUTTER = 'sound/surgery/scalpel1.ogg' + ) + + success_sound = 'sound/surgery/organ2.ogg' time = 5.4 SECONDS @@ -750,6 +769,9 @@ /obj/item/butcher_chainsaw = 1 ) + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' time = 1.6 SECONDS /datum/surgery_step/cut_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -787,6 +809,8 @@ /obj/item/kitchen/utensil/fork = 60 ) + preop_sound = 'sound/surgery/retractor1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' time = 2.4 SECONDS /datum/surgery_step/retract_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -838,6 +862,9 @@ /obj/item/flamethrower = 1 ) + preop_sound = 'sound/surgery/cautery1.ogg' + success_sound = 'sound/surgery/cautery2.ogg' + failure_sound = 'sound/items/welder.ogg' time = 2.4 SECONDS /datum/surgery_step/generic/seal_carapace/proc/zone_name(target_zone) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 26a174caa34..09ba772bae4 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -81,6 +81,7 @@ can_infect = TRUE blood_level = SURGERY_BLOODSPREAD_HANDS + preop_sound = 'sound/surgery/organ1.ogg' time = 3.2 SECONDS /datum/surgery_step/fix_vein/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -133,6 +134,7 @@ can_infect = TRUE blood_level = SURGERY_BLOODSPREAD_HANDS + preop_sound = 'sound/surgery/organ1.ogg' time = 3.2 SECONDS /datum/surgery_step/treat_burns/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -190,6 +192,9 @@ /obj/item/shard = 60 ) + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' + failure_sound = 'sound/surgery/organ1.ogg' can_infect = TRUE blood_level = SURGERY_BLOODSPREAD_HANDS diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 3a2050d8664..a4941cb7bda 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -15,6 +15,10 @@ allowed_tools = list(TOOL_SCALPEL = 100, /obj/item/kitchen/knife = 50, /obj/item/wirecutters = 35) time = 6.4 SECONDS + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' + /datum/surgery_step/reshape_face/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( "[user] begins to alter [target]'s appearance.", diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 3e5bfdf98ea..4ea5674385d 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -197,6 +197,12 @@ var/silicons_ignore_prob = FALSE /// How many times this step has been automatically repeated. var/times_repeated = 0 + /// Sound played when the step is started. Lists or single value can be used for this var as well as tool defines + var/preop_sound + /// Sound played if the step succeeded. Single value only + var/success_sound + /// Sound played if the step fails. Single value only + var/failure_sound // evil infection stuff that will make everyone hate me @@ -331,6 +337,8 @@ surgery.step_in_progress = FALSE return SURGERY_INITIATE_SUCCESS + play_preop_sound(user, target, target_zone, tool, surgery) + if(tool) speed_mod = tool.toolspeed @@ -386,8 +394,10 @@ surgery.step_in_progress = FALSE if(advance) + play_success_sound(user, target, target_zone, tool, surgery) return SURGERY_INITIATE_SUCCESS else + play_failure_sound(user, target, target_zone, tool, surgery) return SURGERY_INITIATE_FAILURE /** @@ -553,3 +563,26 @@ for(var/reagent in chems_needed) if(target.reagents.has_reagent(reagent)) return TRUE + +/datum/surgery_step/proc/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(!preop_sound || (islist(preop_sound) && !length(preop_sound)) || ismachineperson(target)) + return + var/sound_file_use + if(islist(preop_sound)) + for(var/typepath in preop_sound) + if((ispath(typepath) && istype(tool, typepath)) || ((typepath in GLOB.surgery_tool_behaviors) && istype(tool) && tool.tool_behaviour == typepath)) + sound_file_use = preop_sound[typepath] + break + else + sound_file_use = preop_sound + playsound(get_turf(target), sound_file_use, 75, TRUE, falloff_exponent = 12, falloff_distance = 1, channel = CHANNEL_SURGERY_SOUNDS) + +/datum/surgery_step/proc/play_success_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(!success_sound || ismachineperson(target)) + return + playsound(get_turf(target), success_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1, channel = CHANNEL_SURGERY_SOUNDS) + +/datum/surgery_step/proc/play_failure_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(!failure_sound || ismachineperson(target)) + return + playsound(get_turf(target), failure_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1, channel = CHANNEL_SURGERY_SOUNDS) diff --git a/sound/surgery/cautery1.ogg b/sound/surgery/cautery1.ogg new file mode 100644 index 00000000000..ac15a581266 Binary files /dev/null and b/sound/surgery/cautery1.ogg differ diff --git a/sound/surgery/cautery2.ogg b/sound/surgery/cautery2.ogg new file mode 100644 index 00000000000..334c98f6cde Binary files /dev/null and b/sound/surgery/cautery2.ogg differ diff --git a/sound/surgery/hemostat1.ogg b/sound/surgery/hemostat1.ogg new file mode 100644 index 00000000000..d68c82620d2 Binary files /dev/null and b/sound/surgery/hemostat1.ogg differ diff --git a/sound/surgery/organ1.ogg b/sound/surgery/organ1.ogg new file mode 100644 index 00000000000..d6cdd6271fe Binary files /dev/null and b/sound/surgery/organ1.ogg differ diff --git a/sound/surgery/organ2.ogg b/sound/surgery/organ2.ogg new file mode 100644 index 00000000000..9199c7d1a2d Binary files /dev/null and b/sound/surgery/organ2.ogg differ diff --git a/sound/surgery/retractor1.ogg b/sound/surgery/retractor1.ogg new file mode 100644 index 00000000000..de7c31199e3 Binary files /dev/null and b/sound/surgery/retractor1.ogg differ diff --git a/sound/surgery/retractor2.ogg b/sound/surgery/retractor2.ogg new file mode 100644 index 00000000000..620fafe035d Binary files /dev/null and b/sound/surgery/retractor2.ogg differ diff --git a/sound/surgery/saw.ogg b/sound/surgery/saw.ogg new file mode 100644 index 00000000000..8e7a47f0fa0 Binary files /dev/null and b/sound/surgery/saw.ogg differ diff --git a/sound/surgery/scalpel1.ogg b/sound/surgery/scalpel1.ogg new file mode 100644 index 00000000000..6c0fe5dad9f Binary files /dev/null and b/sound/surgery/scalpel1.ogg differ diff --git a/sound/surgery/scalpel2.ogg b/sound/surgery/scalpel2.ogg new file mode 100644 index 00000000000..49767223939 Binary files /dev/null and b/sound/surgery/scalpel2.ogg differ