mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-30 19:41:56 +00:00
Adds the Surgical Processor upgrade for medical cyborgs, available from exosuit fabricators after 'Cyborg Utilities: Medical' is researched. This upgrade allows medical cyborgs to scan surgery disks, or copy procedures from an operating computer. The cyborg can then initiate scanned procedures. Cyborgs can also now perform surgery steps that have no instrument requirement. Medical cyborgs were generally unable to perform any advanced surgeries outside of some specific circumstances. This update allows cyborgs to make use of the advanced surgeries. Some advanced surgeries have steps that require a hand without any tools; this update allows cyborgs to perform these steps as well. Note that surgeries must be obtained through research or a disk somehow before the cyborgs can scan them.
264 lines
8.3 KiB
Plaintext
264 lines
8.3 KiB
Plaintext
/obj/item/retractor
|
|
name = "retractor"
|
|
desc = "Retracts stuff."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "retractor"
|
|
materials = list(MAT_METAL=6000, MAT_GLASS=3000)
|
|
flags_1 = CONDUCT_1
|
|
w_class = WEIGHT_CLASS_TINY
|
|
|
|
|
|
/obj/item/retractor/augment
|
|
name = "retractor"
|
|
desc = "Micro-mechanical manipulator for retracting stuff."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "retractor"
|
|
materials = list(MAT_METAL=6000, MAT_GLASS=3000)
|
|
flags_1 = CONDUCT_1
|
|
w_class = WEIGHT_CLASS_TINY
|
|
toolspeed = 0.5
|
|
|
|
|
|
/obj/item/hemostat
|
|
name = "hemostat"
|
|
desc = "You think you have seen this before."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "hemostat"
|
|
materials = list(MAT_METAL=5000, MAT_GLASS=2500)
|
|
flags_1 = CONDUCT_1
|
|
w_class = WEIGHT_CLASS_TINY
|
|
attack_verb = list("attacked", "pinched")
|
|
|
|
|
|
/obj/item/hemostat/augment
|
|
name = "hemostat"
|
|
desc = "Tiny servos power a pair of pincers to stop bleeding."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "hemostat"
|
|
materials = list(MAT_METAL=5000, MAT_GLASS=2500)
|
|
flags_1 = CONDUCT_1
|
|
w_class = WEIGHT_CLASS_TINY
|
|
toolspeed = 0.5
|
|
attack_verb = list("attacked", "pinched")
|
|
|
|
|
|
/obj/item/cautery
|
|
name = "cautery"
|
|
desc = "This stops bleeding."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "cautery"
|
|
materials = list(MAT_METAL=2500, MAT_GLASS=750)
|
|
flags_1 = CONDUCT_1
|
|
w_class = WEIGHT_CLASS_TINY
|
|
attack_verb = list("burnt")
|
|
|
|
|
|
/obj/item/cautery/augment
|
|
name = "cautery"
|
|
desc = "A heated element that cauterizes wounds."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "cautery"
|
|
materials = list(MAT_METAL=2500, MAT_GLASS=750)
|
|
flags_1 = CONDUCT_1
|
|
w_class = WEIGHT_CLASS_TINY
|
|
toolspeed = 0.5
|
|
attack_verb = list("burnt")
|
|
|
|
|
|
/obj/item/surgicaldrill
|
|
name = "surgical drill"
|
|
desc = "You can drill using this item. You dig?"
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "drill"
|
|
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
|
hitsound = 'sound/weapons/circsawhit.ogg'
|
|
materials = list(MAT_METAL=10000, MAT_GLASS=6000)
|
|
flags_1 = CONDUCT_1
|
|
force = 15
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
attack_verb = list("drilled")
|
|
|
|
|
|
/obj/item/surgicaldrill/augment
|
|
name = "surgical drill"
|
|
desc = "Effectively a small power drill contained within your arm, edges dulled to prevent tissue damage. May or may not pierce the heavens."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "drill"
|
|
hitsound = 'sound/weapons/circsawhit.ogg'
|
|
materials = list(MAT_METAL=10000, MAT_GLASS=6000)
|
|
flags_1 = CONDUCT_1
|
|
force = 10
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
toolspeed = 0.5
|
|
attack_verb = list("drilled")
|
|
|
|
|
|
/obj/item/scalpel
|
|
name = "scalpel"
|
|
desc = "Cut, cut, and once more cut."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "scalpel"
|
|
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
|
flags_1 = CONDUCT_1
|
|
force = 10
|
|
w_class = WEIGHT_CLASS_TINY
|
|
throwforce = 5
|
|
throw_speed = 3
|
|
throw_range = 5
|
|
materials = list(MAT_METAL=4000, MAT_GLASS=1000)
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
sharpness = IS_SHARP_ACCURATE
|
|
|
|
/obj/item/scalpel/Initialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0)
|
|
|
|
/obj/item/scalpel/augment
|
|
name = "scalpel"
|
|
desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "scalpel"
|
|
flags_1 = CONDUCT_1
|
|
force = 10
|
|
w_class = WEIGHT_CLASS_TINY
|
|
throwforce = 5
|
|
throw_speed = 3
|
|
throw_range = 5
|
|
materials = list(MAT_METAL=4000, MAT_GLASS=1000)
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
toolspeed = 0.5
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
sharpness = IS_SHARP_ACCURATE
|
|
|
|
/obj/item/scalpel/suicide_act(mob/user)
|
|
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
|
return (BRUTELOSS)
|
|
|
|
|
|
/obj/item/circular_saw
|
|
name = "circular saw"
|
|
desc = "For heavy duty cutting."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "saw"
|
|
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
|
hitsound = 'sound/weapons/circsawhit.ogg'
|
|
throwhitsound = 'sound/weapons/pierce.ogg'
|
|
flags_1 = CONDUCT_1
|
|
force = 15
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
throwforce = 9
|
|
throw_speed = 2
|
|
throw_range = 5
|
|
materials = list(MAT_METAL=10000, MAT_GLASS=6000)
|
|
attack_verb = list("attacked", "slashed", "sawed", "cut")
|
|
sharpness = IS_SHARP
|
|
|
|
/obj/item/circular_saw/Initialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/weapons/circsawhit.ogg') //saws are very accurate and fast at butchering
|
|
|
|
/obj/item/circular_saw/augment
|
|
name = "circular saw"
|
|
desc = "A small but very fast spinning saw. Edges dulled to prevent accidental cutting inside of the surgeon."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "saw"
|
|
hitsound = 'sound/weapons/circsawhit.ogg'
|
|
throwhitsound = 'sound/weapons/pierce.ogg'
|
|
flags_1 = CONDUCT_1
|
|
force = 10
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
throwforce = 9
|
|
throw_speed = 2
|
|
throw_range = 5
|
|
materials = list(MAT_METAL=10000, MAT_GLASS=6000)
|
|
toolspeed = 0.5
|
|
attack_verb = list("attacked", "slashed", "sawed", "cut")
|
|
sharpness = IS_SHARP
|
|
|
|
/obj/item/surgical_drapes
|
|
name = "surgical drapes"
|
|
desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "surgical_drapes"
|
|
w_class = WEIGHT_CLASS_TINY
|
|
attack_verb = list("slapped")
|
|
|
|
/obj/item/surgical_drapes/attack(mob/living/M, mob/user)
|
|
if(!attempt_initiate_surgery(src, M, user))
|
|
..()
|
|
|
|
/obj/item/organ_storage //allows medical cyborgs to manipulate organs without hands
|
|
name = "organ storage bag"
|
|
desc = "A container for holding body parts."
|
|
icon = 'icons/obj/storage.dmi'
|
|
icon_state = "evidenceobj"
|
|
|
|
/obj/item/organ_storage/afterattack(obj/item/I, mob/user, proximity)
|
|
. = ..()
|
|
if(!proximity)
|
|
return
|
|
if(contents.len)
|
|
to_chat(user, "<span class='notice'>[src] already has something inside it.</span>")
|
|
return
|
|
if(!isorgan(I) && !isbodypart(I))
|
|
to_chat(user, "<span class='notice'>[src] can only hold body parts!</span>")
|
|
return
|
|
|
|
user.visible_message("[user] puts [I] into [src].", "<span class='notice'>You put [I] inside [src].</span>")
|
|
icon_state = "evidence"
|
|
var/xx = I.pixel_x
|
|
var/yy = I.pixel_y
|
|
I.pixel_x = 0
|
|
I.pixel_y = 0
|
|
var/image/img = image("icon"=I, "layer"=FLOAT_LAYER)
|
|
img.plane = FLOAT_PLANE
|
|
I.pixel_x = xx
|
|
I.pixel_y = yy
|
|
add_overlay(img)
|
|
add_overlay("evidence")
|
|
desc = "An organ storage container holding [I]."
|
|
I.forceMove(src)
|
|
w_class = I.w_class
|
|
|
|
/obj/item/organ_storage/attack_self(mob/user)
|
|
if(contents.len)
|
|
var/obj/item/I = contents[1]
|
|
user.visible_message("[user] dumps [I] from [src].", "<span class='notice'>You dump [I] from [src].</span>")
|
|
cut_overlays()
|
|
I.forceMove(get_turf(src))
|
|
icon_state = "evidenceobj"
|
|
desc = "A container for holding body parts."
|
|
else
|
|
to_chat(user, "[src] is empty.")
|
|
return
|
|
|
|
/obj/item/surgical_processor //allows medical cyborgs to scan and initiate advanced surgeries
|
|
name = "\improper Surgical Processor"
|
|
desc = "A device for scanning and initiating surgeries from a disk or operating computer."
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "spectrometer"
|
|
item_flags = NOBLUDGEON
|
|
var/list/advanced_surgeries = list()
|
|
|
|
/obj/item/surgical_processor/afterattack(obj/item/O, mob/user, proximity)
|
|
. = ..()
|
|
if(!proximity)
|
|
return
|
|
if(istype(O, /obj/item/disk/surgery))
|
|
to_chat(user, "<span class='notice'>You load the surgery protocol from [O] into [src].</span>")
|
|
var/obj/item/disk/surgery/D = O
|
|
if(do_after(user, 10, target = O))
|
|
advanced_surgeries |= D.surgeries
|
|
return TRUE
|
|
if(istype(O, /obj/machinery/computer/operating))
|
|
to_chat(user, "<span class='notice'>You copy surgery protocols from [O] into [src].</span>")
|
|
var/obj/machinery/computer/operating/OC = O
|
|
if(do_after(user, 10, target = O))
|
|
advanced_surgeries |= OC.advanced_surgeries
|
|
return TRUE
|
|
return
|