/obj/item/retractor name = "retractor" desc = "Retracts stuff." icon = 'icons/obj/surgery.dmi' icon_state = "retractor" materials = list(MAT_METAL=6000, MAT_GLASS=3000) item_flags = SURGICAL_TOOL flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY tool_behaviour = TOOL_RETRACTOR toolspeed = 1 /obj/item/retractor/advanced name = "mechanical pinches" desc = "An agglomerate of rods and gears." icon = 'icons/obj/surgery.dmi' icon_state = "retractor_a" toolspeed = 0.7 /obj/item/retractor/advanced/attack_self(mob/user) playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) if(tool_behaviour == TOOL_RETRACTOR) tool_behaviour = TOOL_HEMOSTAT to_chat(user, "You configure the gears of [src], they are now in hemostat mode.") icon_state = "hemostat_a" else tool_behaviour = TOOL_RETRACTOR to_chat(user, "You configure the gears of [src], they are now in retractor mode.") icon_state = "retractor_a" /obj/item/retractor/advanced/examine(mob/living/user) . = ..() . += "You focus the lenses of [src], it is now in mending mode.") icon_state = "cautery_a" else tool_behaviour = TOOL_DRILL to_chat(user, "You dilate the lenses of [src], it is now in drilling mode.") icon_state = "surgicaldrill_a" /obj/item/surgicaldrill/advanced/examine(mob/living/user) . = ..() . += "" /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) item_flags = SURGICAL_TOOL attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP_ACCURATE tool_behaviour = TOOL_SCALPEL toolspeed = 1 /obj/item/scalpel/Initialize() . = ..() AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0) /obj/item/scalpel/advanced name = "laser scalpel" desc = "An advanced scalpel which uses laser technology to cut." icon = 'icons/obj/surgery.dmi' icon_state = "scalpel_a" hitsound = 'sound/weapons/blade1.ogg' force = 16 toolspeed = 0.7 light_color = LIGHT_COLOR_GREEN sharpness = IS_SHARP_ACCURATE /obj/item/scalpel/advanced/Initialize() . = ..() set_light(1) /obj/item/scalpel/advanced/attack_self(mob/user) playsound(get_turf(user), 'sound/machines/click.ogg', 50, TRUE) if(tool_behaviour == TOOL_SCALPEL) tool_behaviour = TOOL_SAW to_chat(user, "You increase the power of [src], now it can cut bones.") set_light(2) force += 1 //we don't want to ruin sharpened stuff icon_state = "saw_a" else tool_behaviour = TOOL_SCALPEL to_chat(user, "You lower the power of [src], it can no longer cut bones.") set_light(1) force -= 1 icon_state = "scalpel_a" /obj/item/scalpel/advanced/examine(mob/living/user) . = ..() . += "" /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("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!") 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' item_flags = SURGICAL_TOOL 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 tool_behaviour = TOOL_SAW toolspeed = 1 /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/surgical_drapes/advanced name = "smart surgical drapes" desc = "A quite quirky set of drapes with wireless synchronization to the station's research networks, with an integrated display allowing users to execute advanced surgeries without the aid of an operating computer." var/datum/techweb/linked_techweb /obj/item/surgical_drapes/advanced/Initialize(mapload) . = ..() linked_techweb = SSresearch.science_tech /obj/item/surgical_drapes/advanced/proc/get_advanced_surgeries() . = list() if(!linked_techweb) return for(var/subtype in subtypesof(/datum/design/surgery)) var/datum/design/surgery/prototype = subtype var/id = initial(prototype.id) if(id in linked_techweb.researched_designs) prototype = SSresearch.techweb_design_by_id(id) . |= prototype.surgery /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" item_flags = SURGICAL_TOOL /obj/item/organ_storage/afterattack(obj/item/I, mob/user, proximity) . = ..() if(!proximity) return if(contents.len) to_chat(user, "[src] already has something inside it.") return if(!isorgan(I) && !isbodypart(I)) to_chat(user, "[src] can only hold body parts!") return user.visible_message("[user] puts [I] into [src].", "You put [I] inside [src].") 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].", "You dump [I] from [src].") 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, "You load the surgery protocol from [O] into [src].") 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, "You copy surgery protocols from [O] into [src].") var/obj/machinery/computer/operating/OC = O if(do_after(user, 10, target = O)) advanced_surgeries |= OC.advanced_surgeries return TRUE return