Files
Aurora.3/code/game/objects/items/weapons/surgery_tools.dm
2021-03-24 00:20:12 -03:00

292 lines
8.5 KiB
Plaintext

/* Surgery Tools
* Contains:
* Retractor
* Hemostat
* Cautery
* Surgical Drill
* Scalpel
* Circular Saw
* Tray
*/
/obj/item/surgery
name = "surgery tool"
desc = "hey, you aren't supposed to have this"
icon = 'icons/obj/surgery.dmi'
w_class = ITEMSIZE_SMALL
drop_sound = 'sound/items/drop/weldingtool.ogg'
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_medical.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_medical.dmi',
)
recyclable = TRUE
/*
* Retractor
*/
/obj/item/surgery/retractor
name = "retractor"
desc = "Retracts stuff."
icon_state = "retractor"
item_state = "retractor"
matter = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000)
flags = CONDUCT
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
/*
* Hemostat
*/
/obj/item/surgery/hemostat
name = "hemostat"
desc = "You think you have seen this before."
icon_state = "hemostat"
item_state = "hemostat"
matter = list(DEFAULT_WALL_MATERIAL = 5000, MATERIAL_GLASS = 2500)
flags = CONDUCT
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("attacked", "pinched")
/*
* Cautery
*/
/obj/item/surgery/cautery
name = "cautery"
desc = "This stops bleeding."
icon_state = "cautery"
item_state = "cautery"
matter = list(DEFAULT_WALL_MATERIAL = 5000, MATERIAL_GLASS = 2500)
flags = CONDUCT
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("burnt")
/*
* Surgical Drill
*/
/obj/item/surgery/surgicaldrill
name = "surgical drill"
desc = "You can drill using this item. You dig?"
icon_state = "drill"
item_state = "drill"
hitsound = /decl/sound_category/drillhit_sound
matter = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_GLASS = 10000)
flags = CONDUCT
force = 15.0
w_class = ITEMSIZE_NORMAL
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("drilled")
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
/*
* Scalpel
*/
/obj/item/surgery/scalpel
name = "scalpel"
desc = "Cut, cut, and once more cut."
icon_state = "scalpel"
item_state = "scalpel"
flags = CONDUCT
force = 10.0
sharp = 1
edge = TRUE
w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS
throwforce = 5.0
throw_speed = 3
throw_range = 5
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
matter = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000)
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
drop_sound = 'sound/items/drop/knife.ogg'
pickup_sound = 'sound/items/pickup/knife.ogg'
/*
* Researchable Scalpels
*/
/obj/item/surgery/scalpel/laser1
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"
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"
damtype = "fire"
force = 12.0
/obj/item/surgery/scalpel/laser3
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"
damtype = "fire"
force = 15.0
/obj/item/surgery/scalpel/manager
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"
force = 7.5
/*
* Circular Saw
*/
/obj/item/surgery/circular_saw
name = "circular saw"
desc = "For heavy duty cutting."
icon_state = "saw"
item_state = "saw"
hitsound = 'sound/weapons/saw/circsawhit.ogg'
flags = CONDUCT
force = 15.0
w_class = ITEMSIZE_NORMAL
throwforce = 9.0
throw_speed = 3
throw_range = 5
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
matter = list(DEFAULT_WALL_MATERIAL = 20000, MATERIAL_GLASS = 10000)
attack_verb = list("attacked", "slashed", "sawed", "cut")
sharp = 1
edge = TRUE
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
//misc, formerly from code/defines/weapons.dm
/obj/item/surgery/bonegel
name = "bone gel"
icon_state = "bone-gel"
item_state = "bone-gel"
force = 0
throwforce = 1.0
drop_sound = 'sound/items/drop/bottle.ogg'
pickup_sound = 'sound/items/pickup/bottle.ogg'
/obj/item/surgery/FixOVein
name = "FixOVein"
icon_state = "fixovein"
item_state = "fixovein"
force = 0
throwforce = 1.0
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3)
var/usage_amount = 10
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
/obj/item/surgery/bonesetter
name = "bone setter"
icon_state = "bonesetter"
item_state = "bonesetter"
force = 8.0
throwforce = 9.0
throw_speed = 3
throw_range = 5
attack_verb = list("attacked", "hit", "bludgeoned")
/obj/item/storage/box/fancy/tray
name = "surgery tray"
desc = "A tray of surgical tools."
icon = 'icons/obj/surgery.dmi'
icon_state = "surgerytray"
use_sound = null
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
force = 2
w_class = ITEMSIZE_HUGE
storage_slots = 10
attack_verb = list("slammed")
icon_type = "surgery tool"
storage_type = "tray"
can_hold = list(
/obj/item/surgery/bonesetter,
/obj/item/surgery/cautery,
/obj/item/surgery/circular_saw,
/obj/item/surgery/hemostat,
/obj/item/surgery/retractor,
/obj/item/surgery/scalpel,
/obj/item/surgery/surgicaldrill,
/obj/item/surgery/bonegel,
/obj/item/surgery/FixOVein,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/stack/nanopaste
)
starts_with = list(
/obj/item/surgery/bonesetter = 1,
/obj/item/surgery/cautery = 1,
/obj/item/surgery/circular_saw = 1,
/obj/item/surgery/hemostat = 1,
/obj/item/surgery/retractor = 1,
/obj/item/surgery/scalpel = 1,
/obj/item/surgery/surgicaldrill = 1,
/obj/item/surgery/bonegel = 1,
/obj/item/surgery/FixOVein = 1,
/obj/item/stack/medical/advanced/bruise_pack = 1,
)
/obj/item/storage/box/fancy/tray/update_icon()
cut_overlays()
var/list/types_and_overlays = list(
/obj/item/surgery/bonesetter = "tray_bonesetter",
/obj/item/surgery/cautery = "tray_cautery",
/obj/item/surgery/circular_saw = "tray_saw",
/obj/item/surgery/hemostat = "tray_hemostat",
/obj/item/surgery/retractor = "tray_retractor",
/obj/item/surgery/scalpel = "tray_scalpel",
/obj/item/surgery/scalpel/laser1 = "tray_scalpel_laser1",
/obj/item/surgery/scalpel/laser2 = "tray_scalpel_laser2",
/obj/item/surgery/scalpel/laser3 = "tray_scalpel_laser3",
/obj/item/surgery/scalpel/manager = "tray_scalpel_manager",
/obj/item/surgery/surgicaldrill = "tray_drill",
/obj/item/surgery/bonegel = "tray_bone-gel",
/obj/item/surgery/FixOVein = "tray_fixovein",
/obj/item/stack/medical/advanced/bruise_pack = "tray_bruise_pack"
)
for (var/obj/item/W in contents)
if (types_and_overlays[W.type])
add_overlay(types_and_overlays[W.type])
types_and_overlays -= W.type
/obj/item/storage/box/fancy/tray/fill()
. = ..()
update_icon()
/obj/item/storage/box/fancy/tray/attackby(obj/item/W as obj, mob/user as mob)
..()
update_icon()
/obj/item/storage/box/fancy/tray/attack_hand(mob/user as mob)
if(ishuman(user))
src.open(user)
/obj/item/storage/box/fancy/tray/MouseDrop(mob/user as mob)
if((user && (!use_check(user))) && (user.contents.Find(src) || in_range(src, user)))
if(ishuman(user) && !user.get_active_hand())
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user, "<span class='notice'>You try to move your [temp.name], but cannot!</span>")
return
to_chat(user, "<span class='notice'>You pick up the [src].</span>")
pixel_x = 0
pixel_y = 0
forceMove(get_turf(user))
user.put_in_hands(src)
return
/obj/item/storage/box/fancy/tray/attack(mob/living/M as mob, mob/user as mob, var/target_zone)
if(..() && contents.len)
spill(3, get_turf(M))
playsound(M, /decl/sound_category/tray_hit_sound, 50, 1) //sound playin' again
user.visible_message(SPAN_DANGER("[user] smashes \the [src] into [M], causing it to spill its contents across the area!"))
/obj/item/storage/box/fancy/tray/throw_impact(atom/hit_atom)
..()
spill(3, src.loc)