Revives "Adds sound effects to surgeries" (#65578)

* Adds surgical sounds

Rough implementation as I don't have too much time tonight.

* Fixed falure_sound

Fixed a typo

* Removed the lists

Removed the lists and added sounds to revival surgery, stuff will probably break

* Fixes the playsounds still using pick

* Added sounds to more surgeries

Added sounds to four more surgeries
This commit is contained in:
nmajask
2022-03-25 20:07:00 -04:00
committed by GitHub
parent 83c151c715
commit 64d5de009c
30 changed files with 118 additions and 4 deletions
@@ -33,6 +33,9 @@
/obj/item/stack/package_wrap = 35,
/obj/item/stack/cable_coil = 15)
time = 200
preop_sound = 'sound/surgery/hemostat1.ogg'
success_sound = 'sound/surgery/hemostat1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
var/objective
/datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -30,6 +30,9 @@
/obj/item/shard = 25,
/obj/item = 20)
time = 100
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/scalpel2.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
@@ -26,6 +26,9 @@
TOOL_SCREWDRIVER = 35,
/obj/item/pen = 15)
time = 40
preop_sound = 'sound/surgery/hemostat1.ogg'
success_sound = 'sound/surgery/hemostat1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/pacify/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to pacify [target]..."),
+2
View File
@@ -24,6 +24,8 @@
/obj/item/hatchet = 40,
/obj/item/knife/butcher = 25)
time = 64
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to sever [target]'s [parse_zone(target_zone)]..."),
+1
View File
@@ -21,6 +21,7 @@
implements = list(/obj/item/blood_filter = 95)
repeatable = TRUE
time = 2.5 SECONDS
success_sound = 'sound/machines/ping.ogg'
/datum/surgery_step/filter_blood/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin filtering [target]'s blood..."),
+3
View File
@@ -20,6 +20,9 @@
/obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
repeatable = TRUE
time = 100 //long and complicated
preop_sound = 'sound/surgery/hemostat1.ogg'
success_sound = 'sound/surgery/hemostat1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/brain/target_brain = target.getorganslot(ORGAN_SLOT_BRAIN)
+3
View File
@@ -32,6 +32,9 @@
TOOL_WIRECUTTER = 40)
time = 30
repeatable = TRUE
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/retractor2.ogg'
failure_sound = 'sound/surgery/organ1.ogg'
/// How much sanitization is added per step
var/sanitization_added = 0.5
/// How much infestation is removed per step (positive number)
+2
View File
@@ -18,6 +18,8 @@
implements = list(/obj/item = 100)
repeatable = TRUE
time = 32
preop_sound = 'sound/surgery/organ1.ogg'
success_sound = 'sound/surgery/organ2.ogg'
var/obj/item/item_for_cavity
/datum/surgery_step/handle_cavity/tool_check(mob/user, obj/item/tool)
+6
View File
@@ -28,6 +28,9 @@
/obj/item/knife = 45,
/obj/item/shard = 25)
time = 16
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/scalpel2.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/incise_heart/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to make an incision in [target]'s heart..."),
@@ -67,6 +70,9 @@
/obj/item/stack/package_wrap = 15,
/obj/item/stack/cable_coil = 5)
time = 90
preop_sound = 'sound/surgery/hemostat1.ogg'
success_sound = 'sound/surgery/hemostat1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/coronary_bypass/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to graft a bypass onto [target]'s heart..."),
+3
View File
@@ -29,6 +29,9 @@
/obj/item/knife = 45,
/obj/item/shard = 35)
time = 52
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/organ1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/gastrectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to cut out a damaged piece of [target]'s stomach..."),
+2
View File
@@ -40,6 +40,8 @@
/obj/item/pen = 55)
repeatable = TRUE
time = 25
success_sound = 'sound/surgery/retractor2.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
var/brutehealing = 0
var/burnhealing = 0
var/brute_multiplier = 0 //multiplies the damage that the patient has. if 0 the patient wont get any additional healing from the damage he has.
+3
View File
@@ -28,6 +28,9 @@
/obj/item/knife = 45,
/obj/item/shard = 35)
time = 52
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/organ1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/hepatectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to cut out a damaged piece of [target]'s liver..."),
+1
View File
@@ -18,6 +18,7 @@
TOOL_CROWBAR = 65,
/obj/item/kitchen/fork = 35)
time = 64
success_sound = 'sound/surgery/hemostat1.ogg'
var/obj/item/implant/implant
/datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+3
View File
@@ -27,6 +27,9 @@
/obj/item/knife = 45,
/obj/item/shard = 35)
time = 42
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/organ1.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to make an incision in [target]'s lungs..."),
+33 -1
View File
@@ -3,10 +3,12 @@
name = "unscrew shell"
implements = list(
TOOL_SCREWDRIVER = 100,
TOOL_SCALPEL = 75, // med borgs could try to unskrew shell with scalpel
TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel
/obj/item/knife = 50,
/obj/item = 10) // 10% success with any sharp item.
time = 24
preop_sound = 'sound/items/screwdriver.ogg'
success_sound = 'sound/items/screwdriver2.ogg'
/datum/surgery_step/mechanic_open/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to unscrew the shell of [target]'s [parse_zone(target_zone)]..."),
@@ -17,6 +19,8 @@
/datum/surgery_step/mechanic_open/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
return FALSE
if(tool.usesound)
preop_sound = tool.usesound
return TRUE
@@ -29,6 +33,8 @@
/obj/item/knife = 50,
/obj/item = 10) // 10% success with any sharp item.
time = 24
preop_sound = 'sound/items/screwdriver.ogg'
success_sound = 'sound/items/screwdriver2.ogg'
/datum/surgery_step/mechanic_close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to screw the shell of [target]'s [parse_zone(target_zone)]..."),
@@ -39,6 +45,8 @@
/datum/surgery_step/mechanic_close/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
return FALSE
if(tool.usesound)
preop_sound = tool.usesound
return TRUE
@@ -49,6 +57,8 @@
TOOL_MULTITOOL = 100,
TOOL_HEMOSTAT = 10) // try to reboot internal controllers via short circuit with some conductor
time = 24
preop_sound = 'sound/items/taperecorder/tape_flip.ogg'
success_sound = 'sound/items/taperecorder/taperecorder_close.ogg'
/datum/surgery_step/prepare_electronics/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to prepare electronics in [target]'s [parse_zone(target_zone)]..."),
@@ -63,6 +73,7 @@
TOOL_WRENCH = 100,
TOOL_RETRACTOR = 10)
time = 24
preop_sound = 'sound/items/ratchet.ogg'
/datum/surgery_step/mechanic_unwrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to unwrench some bolts in [target]'s [parse_zone(target_zone)]..."),
@@ -70,6 +81,12 @@
span_notice("[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)]."))
display_pain(target, "You feel a jostle in your [parse_zone(target_zone)] as the bolts begin to loosen.", TRUE)
/datum/surgery_step/mechanic_unwrench/tool_check(mob/user, obj/item/tool)
if(tool.usesound)
preop_sound = tool.usesound
return TRUE
//wrench
/datum/surgery_step/mechanic_wrench
name = "wrench bolts"
@@ -77,6 +94,7 @@
TOOL_WRENCH = 100,
TOOL_RETRACTOR = 10)
time = 24
preop_sound = 'sound/items/ratchet.ogg'
/datum/surgery_step/mechanic_wrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to wrench some bolts in [target]'s [parse_zone(target_zone)]..."),
@@ -84,14 +102,28 @@
span_notice("[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)]."))
display_pain(target, "You feel a jostle in your [parse_zone(target_zone)] as the bolts begin to tighten.", TRUE)
/datum/surgery_step/mechanic_wrench/tool_check(mob/user, obj/item/tool)
if(tool.usesound)
preop_sound = tool.usesound
return TRUE
//open hatch
/datum/surgery_step/open_hatch
name = "open the hatch"
accept_hand = TRUE
time = 10
preop_sound = 'sound/items/ratchet.ogg'
preop_sound = 'sound/machines/doorclick.ogg'
/datum/surgery_step/open_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]..."),
span_notice("[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)]."),
span_notice("[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)]."))
display_pain(target, "The last faint pricks of tactile sensation fade from your [parse_zone(target_zone)] as the hatch is opened.", TRUE)
/datum/surgery_step/mechanic_unwrench/tool_check(mob/user, obj/item/tool)
if(tool.usesound)
preop_sound = tool.usesound
return TRUE
@@ -65,6 +65,8 @@
implements = list(
/obj/item/organ = 100,
/obj/item/borg/apparatus/organ_storage = 100)
preop_sound = 'sound/surgery/organ2.ogg'
success_sound = 'sound/surgery/organ1.ogg'
var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55, /obj/item/kitchen/fork = 35)
var/current_type
var/obj/item/organ/target_organ
@@ -76,6 +78,8 @@
/datum/surgery_step/manipulate_organs/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
target_organ = null
if(istype(tool, /obj/item/borg/apparatus/organ_storage))
preop_sound = initial(preop_sound)
success_sound = initial(success_sound)
if(!length(tool.contents))
to_chat(user, span_warning("There is nothing inside [tool]!"))
return -1
@@ -88,6 +92,8 @@
tool = target_organ
if(isorgan(tool))
current_type = "insert"
preop_sound = 'sound/surgery/hemostat1.ogg'
success_sound = 'sound/surgery/organ2.ogg'
target_organ = tool
if(target_zone != target_organ.zone || target.getorganslot(target_organ.slot))
to_chat(user, span_warning("There is no room for [target_organ] in [target]'s [parse_zone(target_zone)]!"))
+9
View File
@@ -9,6 +9,8 @@
/obj/item/shard = 45,
/obj/item = 30) // 30% success with any sharp item.
time = 16
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/scalpel2.ogg'
/datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to make an incision in [target]'s [parse_zone(target_zone)]..."),
@@ -49,6 +51,7 @@
/obj/item/stack/package_wrap = 35,
/obj/item/stack/cable_coil = 15)
time = 24
preop_sound = 'sound/surgery/hemostat1.ogg'
/datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to clamp bleeders in [target]'s [parse_zone(target_zone)]..."),
@@ -75,6 +78,8 @@
TOOL_WIRECUTTER = 35,
/obj/item/stack/rods = 35)
time = 24
preop_sound = 'sound/surgery/retractor1.ogg'
success_sound = 'sound/surgery/retractor2.ogg'
/datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to retract the skin in [target]'s [parse_zone(target_zone)]..."),
@@ -91,6 +96,8 @@
TOOL_WELDER = 70,
/obj/item = 30) // 30% success with any hot item.
time = 24
preop_sound = 'sound/surgery/cautery1.ogg'
success_sound = 'sound/surgery/cautery2.ogg'
/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to mend the incision in [target]'s [parse_zone(target_zone)]..."),
@@ -127,6 +134,8 @@
/obj/item/knife/butcher = 25,
/obj/item = 20) //20% success (sort of) with any sharp item with a force>=10
time = 54
preop_sound = 'sound/surgery/saw.ogg'
success_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to saw through the bone in [target]'s [parse_zone(target_zone)]..."),
+9 -3
View File
@@ -29,7 +29,7 @@
return TRUE
/datum/surgery_step/revive
name = "shock body"
name = "shock brain"
implements = list(
/obj/item/shockpaddles = 100,
/obj/item/melee/touch_attack/shock = 100,
@@ -37,6 +37,8 @@
/obj/item/gun/energy = 60)
repeatable = TRUE
time = 5 SECONDS
success_sound = 'sound/magic/lightningbolt.ogg'
failure_sound = 'sound/magic/lightningbolt.ogg'
/datum/surgery_step/revive/tool_check(mob/user, obj/item/tool)
. = TRUE
@@ -64,11 +66,16 @@
span_notice("[user] prepares to shock [target]'s brain with [tool]."))
target.notify_ghost_cloning("Someone is trying to zap your brain.", source = target)
/datum/surgery_step/revive/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(istype(tool, /obj/item/shockpaddles))
playsound(tool, 'sound/machines/defib_charge.ogg', 75, 0)
else
..()
/datum/surgery_step/revive/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
display_results(user, target, span_notice("You successfully shock [target]'s brain with [tool]..."),
span_notice("[user] send a powerful shock to [target]'s brain with [tool]..."),
span_notice("[user] send a powerful shock to [target]'s brain with [tool]..."))
playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, TRUE)
target.grab_ghost()
target.adjustOxyLoss(-50, 0)
target.updatehealth()
@@ -85,6 +92,5 @@
display_results(user, target, span_notice("You shock [target]'s brain with [tool], but [target.p_they()] doesn't react."),
span_notice("[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react."),
span_notice("[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react."))
playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, TRUE)
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 180)
return FALSE
+1
View File
@@ -28,6 +28,7 @@
accept_hand = TRUE
repeatable = TRUE
time = 20
success_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/stomach_pump/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin pumping [target]'s stomach..."),
+22
View File
@@ -9,6 +9,9 @@
var/list/chems_needed = list() //list of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob.
var/require_all_chems = TRUE //any on the list or all on the list?
var/silicons_obey_prob = FALSE
var/preop_sound //Sound played when the step is started
var/success_sound //Sound played if the step succeeded
var/failure_sound //Sound played if the step fails
/datum/surgery_step/proc/try_op(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
var/success = FALSE
@@ -75,6 +78,8 @@
surgery.step_in_progress = FALSE
return FALSE
play_preop_sound(user, target, target_zone, tool, surgery) // Here because most steps overwrite preop
if(tool)
speed_mod = tool.toolspeed
@@ -100,9 +105,11 @@
if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && chem_check_result && !try_to_fail)
if(success(user, target, target_zone, tool, surgery))
play_success_sound(user, target, target_zone, tool, surgery)
advance = TRUE
else
if(failure(user, target, target_zone, tool, surgery, fail_prob))
play_failure_sound(user, target, target_zone, tool, surgery)
advance = TRUE
if(chem_check_result)
return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical
@@ -122,6 +129,11 @@
span_notice("[user] begins to perform surgery on [target]."),
span_notice("[user] begins to perform surgery on [target]."))
/datum/surgery_step/proc/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(!preop_sound)
return
playsound(get_turf(target), preop_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
/datum/surgery_step/proc/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = TRUE)
SEND_SIGNAL(user, COMSIG_MOB_SURGERY_STEP_SUCCESS, src, target, target_zone, tool, surgery, default_display_results)
if(default_display_results)
@@ -130,6 +142,11 @@
span_notice("[user] finishes."))
return TRUE
/datum/surgery_step/proc/play_success_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(!success_sound)
return
playsound(get_turf(target), success_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
/datum/surgery_step/proc/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, fail_prob = 0)
var/screwedmessage = ""
switch(fail_prob)
@@ -145,6 +162,11 @@
span_notice("[user] finishes."), TRUE) //By default the patient will notice if the wrong thing has been cut
return FALSE
/datum/surgery_step/proc/play_failure_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(!failure_sound)
return
playsound(get_turf(target), failure_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
/datum/surgery_step/proc/tool_check(mob/user, obj/item/tool)
return TRUE