From 00cc2e7a1837694c65ed64eca17db642f2dc42b7 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Wed, 19 Jul 2017 05:00:54 +0100 Subject: [PATCH 01/12] Adds the Surgical Tool Arm as a buildable item to the protolathe and exofab --- code/modules/research/designs/medical_designs.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 0f267aa3118..8e25c8860e6 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -211,6 +211,17 @@ materials = list(MAT_METAL = 600, MAT_GLASS = 250) build_path = /obj/item/organ/cyberimp/mouth/breathing_tube category = list("Misc", "Medical Designs") + + /datum/design/cyberimp_surgical + name = "Surgical Arm Implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." + id = "ci-surgey" + req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/surgery + category = list("Misc", "Medical Designs") /datum/design/cyberimp_toolset name = "Toolset Arm Implant" From 6e01b3b4865522c752222d1111e5366369e82225 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Wed, 19 Jul 2017 05:58:47 +0100 Subject: [PATCH 02/12] Update medical_designs.dm --- code/modules/research/designs/medical_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 8e25c8860e6..c25cddc1991 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -211,7 +211,7 @@ materials = list(MAT_METAL = 600, MAT_GLASS = 250) build_path = /obj/item/organ/cyberimp/mouth/breathing_tube category = list("Misc", "Medical Designs") - + /datum/design/cyberimp_surgical name = "Surgical Arm Implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." From c399cb5f1588b828e35f00f23aa849ef0b05a6cf Mon Sep 17 00:00:00 2001 From: Anonmare Date: Wed, 19 Jul 2017 06:30:58 +0100 Subject: [PATCH 03/12] Update medical_designs.dm --- code/modules/research/designs/medical_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index c25cddc1991..0cf4abb52e1 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -212,7 +212,7 @@ build_path = /obj/item/organ/cyberimp/mouth/breathing_tube category = list("Misc", "Medical Designs") - /datum/design/cyberimp_surgical +/datum/design/cyberimp_surgical name = "Surgical Arm Implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." id = "ci-surgey" From 5da8d0f98bc0f1648336d6293fa5e8e33457c568 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Wed, 19 Jul 2017 10:05:09 +0100 Subject: [PATCH 04/12] Adds Surgical toolarm to R&D, makes it less robust Also removes the W_CLASS = HUGE override that all arm augments had for some reason --- augments_arms.dm | 237 +++++++++++++++++++++++++++ medical_designs.dm | 401 +++++++++++++++++++++++++++++++++++++++++++++ tools.dm | 235 ++++++++++++++++++++++++++ 3 files changed, 873 insertions(+) create mode 100644 augments_arms.dm create mode 100644 medical_designs.dm create mode 100644 tools.dm diff --git a/augments_arms.dm b/augments_arms.dm new file mode 100644 index 00000000000..2305309a17b --- /dev/null +++ b/augments_arms.dm @@ -0,0 +1,237 @@ +/obj/item/organ/cyberimp/arm + name = "arm-mounted implant" + desc = "You shouldn't see this! Adminhelp and report this as an issue on github!" + zone = "r_arm" + slot = "r_arm_device" + icon_state = "implant-toolkit" + w_class = WEIGHT_CLASS_NORMAL + actions_types = list(/datum/action/item_action/organ_action/toggle) + + var/list/items_list = list() + // Used to store a list of all items inside, for multi-item implants. + // I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. + + var/obj/item/holder = null + // You can use this var for item path, it would be converted into an item on New() + +/obj/item/organ/cyberimp/arm/Initialize() + . = ..() + if(ispath(holder)) + holder = new holder(src) + + update_icon() + slot = zone + "_device" + items_list = contents.Copy() + +/obj/item/organ/cyberimp/arm/update_icon() + if(zone == "r_arm") + transform = null + else // Mirroring the icon + transform = matrix(-1, 0, 0, 0, 1, 0) + +/obj/item/organ/cyberimp/arm/examine(mob/user) + ..() + to_chat(user, "[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.") + +/obj/item/organ/cyberimp/arm/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/screwdriver)) + if(zone == "r_arm") + zone = "l_arm" + else + zone = "r_arm" + slot = zone + "_device" + to_chat(user, "You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.") + update_icon() + else if(istype(W, /obj/item/weapon/card/emag)) + emag_act() + +/obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0) + Retract() + ..() + +/obj/item/organ/cyberimp/arm/emag_act() + return 0 + +/obj/item/organ/cyberimp/arm/gun/emp_act(severity) + if(prob(15/severity) && owner) + to_chat(owner, "[src] is hit by EMP!") + // give the owner an idea about why his implant is glitching + Retract() + ..() + +/obj/item/organ/cyberimp/arm/proc/Retract() + if(!holder || (holder in src)) + return + + owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [zone == "r_arm" ? "right" : "left"] arm.", + "[holder] snaps back into your [zone == "r_arm" ? "right" : "left"] arm.", + "You hear a short mechanical noise.") + + if(istype(holder, /obj/item/device/assembly/flash/armimplant)) + var/obj/item/device/assembly/flash/F = holder + F.set_light(0) + + owner.transferItemToLoc(holder, src, TRUE) + holder = null + playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + +/obj/item/organ/cyberimp/arm/proc/Extend(var/obj/item/item) + if(!(item in src)) + return + + holder = item + + holder.flags |= NODROP + holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + holder.slot_flags = null + holder.materials = null + + if(istype(holder, /obj/item/device/assembly/flash/armimplant)) + var/obj/item/device/assembly/flash/F = holder + F.set_light(7) + + var/obj/item/arm_item = owner.get_active_held_item() + + if(arm_item) + if(!owner.dropItemToGround(arm_item)) + to_chat(owner, "Your [arm_item] interferes with [src]!") + return + else + to_chat(owner, "You drop [arm_item] to activate [src]!") + + var/result = (zone == "r_arm" ? owner.put_in_r_hand(holder) : owner.put_in_l_hand(holder)) + if(!result) + to_chat(owner, "Your [src] fails to activate!") + return + + // Activate the hand that now holds our item. + owner.swap_hand(result)//... or the 1st hand if the index gets lost somehow + + owner.visible_message("[owner] extends [holder] from [owner.p_their()] [zone == "r_arm" ? "right" : "left"] arm.", + "You extend [holder] from your [zone == "r_arm" ? "right" : "left"] arm.", + "You hear a short mechanical noise.") + playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + +/obj/item/organ/cyberimp/arm/ui_action_click() + if(crit_fail || (!holder && !contents.len)) + to_chat(owner, "The implant doesn't respond. It seems to be broken...") + return + + // You can emag the arm-mounted implant by activating it while holding emag in it's hand. + if(istype(owner.get_active_held_item(), /obj/item/weapon/card/emag) && emag_act()) + return + + if(!holder || (holder in src)) + holder = null + if(contents.len == 1) + Extend(contents[1]) + else // TODO: make it similar to borg's storage-like module selection + var/obj/item/choise = input("Activate which item?", "Arm Implant", null, null) as null|anything in items_list + if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && istype(choise) && (choise in contents)) + // This monster sanity check is a nice example of how bad input() is. + Extend(choise) + else + Retract() + + +/obj/item/organ/cyberimp/arm/gun/emp_act(severity) + if(prob(30/severity) && owner && !crit_fail) + Retract() + owner.visible_message("A loud bang comes from [owner]\'s [zone == "r_arm" ? "right" : "left"] arm!") + playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1) + to_chat(owner, "You feel an explosion erupt inside your [zone == "r_arm" ? "right" : "left"] arm as your implant breaks!") + owner.adjust_fire_stacks(20) + owner.IgniteMob() + owner.adjustFireLoss(25) + crit_fail = 1 + else // The gun will still discharge anyway. + ..() + + +/obj/item/organ/cyberimp/arm/gun/laser + name = "arm-mounted laser implant" + desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." + icon_state = "arm_laser" + origin_tech = "materials=4;combat=4;biotech=4;powerstorage=4;syndicate=3" + contents = newlist(/obj/item/weapon/gun/energy/laser/mounted) + +/obj/item/organ/cyberimp/arm/gun/laser/l + zone = "l_arm" + + +/obj/item/organ/cyberimp/arm/gun/taser + name = "arm-mounted taser implant" + desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." + icon_state = "arm_taser" + origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" + contents = newlist(/obj/item/weapon/gun/energy/e_gun/advtaser/mounted) + +/obj/item/organ/cyberimp/arm/gun/taser/l + zone = "l_arm" + + +/obj/item/organ/cyberimp/arm/toolset + name = "integrated toolset implant" + desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm. Contains all neccessary tools." + origin_tech = "materials=3;engineering=4;biotech=3;powerstorage=4" + contents = newlist(/obj/item/weapon/screwdriver/cyborg, /obj/item/weapon/wrench/cyborg, /obj/item/weapon/weldingtool/largetank/cyborg, + /obj/item/weapon/crowbar/cyborg, /obj/item/weapon/wirecutters/cyborg, /obj/item/device/multitool/cyborg) + +/obj/item/organ/cyberimp/arm/toolset/l + zone = "l_arm" + +/obj/item/organ/cyberimp/arm/toolset/emag_act() + if(!(locate(/obj/item/weapon/kitchen/knife/combat/cyborg) in items_list)) + to_chat(usr, "You unlock [src]'s integrated knife!") + items_list += new /obj/item/weapon/kitchen/knife/combat/cyborg(src) + return 1 + return 0 + +/obj/item/organ/cyberimp/arm/esword + name = "arm-mounted energy blade" + desc = "An illegal, and highly dangerous cybernetic implant that can project a deadly blade of concentrated enregy." + contents = newlist(/obj/item/weapon/melee/transforming/energy/blade/hardlight) + origin_tech = "materials=4;combat=5;biotech=3;powerstorage=2;syndicate=5" + +/obj/item/organ/cyberimp/arm/medibeam + name = "integrated medical beamgun" + desc = "A cybernetic implant that allows the user to project a healing beam from their hand." + contents = newlist(/obj/item/weapon/gun/medbeam) + origin_tech = "materials=5;combat=2;biotech=5;powerstorage=4;syndicate=1" + +/obj/item/organ/cyberimp/arm/flash + name = "integrated high-intensity photon projector" //Why not + desc = "An integrated projector mounted onto a user's arm, that is able to be used as a powerful flash." + contents = newlist(/obj/item/device/assembly/flash/armimplant) + origin_tech = "materials=4;combat=3;biotech=4;magnets=4;powerstorage=3" + +/obj/item/organ/cyberimp/arm/flash/Initialize() + . = ..() + if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) + var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list + F.I = src + +/obj/item/organ/cyberimp/arm/baton + name = "arm electrification implant" + desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm." + contents = newlist(/obj/item/borg/stun) + origin_tech = "materials=3;combat=5;biotech=4;powerstorage=4;syndicate=3" + +/obj/item/organ/cyberimp/arm/combat + name = "combat cybernetics implant" + desc = "A powerful cybernetic implant that contains combat modules built into the user's arm" + contents = newlist(/obj/item/weapon/melee/transforming/energy/blade/hardlight, /obj/item/weapon/gun/medbeam, /obj/item/borg/stun, /obj/item/device/assembly/flash/armimplant) + origin_tech = "materials=5;combat=7;biotech=5;powerstorage=5;syndicate=6;programming=5" + +/obj/item/organ/cyberimp/arm/combat/Initialize() + . = ..() + if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) + var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list + F.I = src + +/obj/item/organ/cyberimp/arm/surgery + name = "surgical toolset implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm" + contents = newlist(/obj/item/weapon/retractor/augment, /obj/item/weapon/hemostat/augment, /obj/item/weapon/cautery/augment, /obj/item/weapon/surgicaldrill/augment, /obj/item/weapon/scalpel/augment, /obj/item/weapon/circular_saw/augment, /obj/item/weapon/surgical_drapes) + origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" diff --git a/medical_designs.dm b/medical_designs.dm new file mode 100644 index 00000000000..7f364f4691c --- /dev/null +++ b/medical_designs.dm @@ -0,0 +1,401 @@ +///////////////////////////////////////// +////////////Medical Tools//////////////// +///////////////////////////////////////// + + +/datum/design/mass_spectrometer + name = "Mass-Spectrometer" + desc = "A device for analyzing chemicals in the blood." + id = "mass_spectrometer" + req_tech = list("magnets" = 2, "plasmatech" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 100) + build_path = /obj/item/device/mass_spectrometer + category = list("Medical Designs") + +/datum/design/adv_mass_spectrometer + name = "Advanced Mass-Spectrometer" + desc = "A device for analyzing chemicals in the blood and their quantities." + id = "adv_mass_spectrometer" + req_tech = list("biotech" = 3, "magnets" = 4, "plasmatech" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 200) + build_path = /obj/item/device/mass_spectrometer/adv + category = list("Medical Designs") + +/datum/design/mmi + name = "Man-Machine Interface" + desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." + id = "mmi" + req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 2) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) + construction_time = 75 + build_path = /obj/item/device/mmi + category = list("Misc","Medical Designs") + +/datum/design/posibrain + name = "Positronic Brain" + desc = "The latest in Artificial Intelligences." + id = "mmi_posi" + req_tech = list("programming" = 5, "biotech" = 4, "plasmatech" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 1700, MAT_GLASS = 1350, MAT_GOLD = 500) //Gold, because SWAG. + construction_time = 75 + build_path = /obj/item/device/mmi/posibrain + category = list("Misc", "Medical Designs") + +/datum/design/bluespacebeaker + name = "Bluespace Beaker" + desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." + id = "bluespacebeaker" + req_tech = list("bluespace" = 6, "materials" = 5, "plasmatech" = 4) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 250, MAT_BLUESPACE = 250) + build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace + category = list("Medical Designs") + +/datum/design/noreactbeaker + name = "Cryostasis Beaker" + desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." + id = "splitbeaker" + req_tech = list("materials" = 3, "engineering" = 3, "plasmatech" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 3000) + build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact + category = list("Medical Designs") + +/datum/design/bluespacesyringe + name = "Bluespace Syringe" + desc = "An advanced syringe that can hold 60 units of chemicals" + id = "bluespacesyringe" + req_tech = list("bluespace" = 5, "materials" = 4, "biotech" = 4) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2000, MAT_PLASMA = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 500) + build_path = /obj/item/weapon/reagent_containers/syringe/bluespace + category = list("Medical Designs") + +/datum/design/noreactsyringe + name = "Cryo Syringe" + desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." + id = "noreactsyringe" + req_tech = list("materials" = 3, "engineering" = 3) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2000, MAT_GOLD = 1000) + build_path = /obj/item/weapon/reagent_containers/syringe/noreact + category = list("Medical Designs") + +/datum/design/piercesyringe + name = "Piercing Syringe" + desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." + id = "piercesyringe" + req_tech = list("materials" = 7, "combat" = 3, "engineering" = 5) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2000, MAT_DIAMOND = 1000) + build_path = /obj/item/weapon/reagent_containers/syringe/piercing + category = list("Medical Designs") + +/datum/design/bluespacebodybag + name = "Bluespace Body Bag" + desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." + id = "bluespacebodybag" + req_tech = list("bluespace" = 5, "materials" = 4, "plasmatech" = 4) + build_type = PROTOLATHE + materials = list(MAT_METAL = 3000, MAT_PLASMA = 2000, MAT_DIAMOND = 500, MAT_BLUESPACE = 500) + build_path = /obj/item/bodybag/bluespace + category = list("Medical Designs") + +/datum/design/plasmarefiller + name = "Plasma-Man Jumpsuit Refill" + desc = "A refill pack for the auto-extinguisher on Plasma-man suits." + id = "plasmarefiller" + req_tech = list("materials" = 2, "plasmatech" = 3) //Why did this have no plasmatech + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000, MAT_PLASMA = 1000) + build_path = /obj/item/device/extinguisher_refill + category = list("Medical Designs") + +/datum/design/alienscalpel + name = "Alien Scalpel" + desc = "An advanced scalpel obtained through Abductor technology." + id = "alien_scalpel" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/scalpel/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical Designs") + +/datum/design/alienhemostat + name = "Alien Hemostat" + desc = "An advanced hemostat obtained through Abductor technology." + id = "alien_hemostat" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/hemostat/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical Designs") + +/datum/design/alienretractor + name = "Alien Retractor" + desc = "An advanced retractor obtained through Abductor technology." + id = "alien_retractor" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/retractor/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical Designs") + +/datum/design/aliensaw + name = "Alien Circular Saw" + desc = "An advanced surgical saw obtained through Abductor technology." + id = "alien_saw" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/circular_saw/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) + category = list("Medical Designs") + +/datum/design/aliendrill + name = "Alien Drill" + desc = "An advanced drill obtained through Abductor technology." + id = "alien_drill" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/surgicaldrill/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) + category = list("Medical Designs") + +/datum/design/aliencautery + name = "Alien Cautery" + desc = "An advanced cautery obtained through Abductor technology." + id = "alien_cautery" + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/cautery/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) + category = list("Medical Designs") + +///////////////////////////////////////// +//////////Cybernetic Implants//////////// +///////////////////////////////////////// + +/datum/design/cyberimp_welding + name = "Welding Shield Eyes" + desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." + id = "ci-welding" + req_tech = list("materials" = 4, "biotech" = 4, "engineering" = 5, "plasmatech" = 4) + build_type = PROTOLATHE | MECHFAB + construction_time = 40 + materials = list(MAT_METAL = 600, MAT_GLASS = 400) + build_path = /obj/item/organ/eyes/robotic/shield + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_gloweyes + name = "Luminescent Eyes" + desc = "A pair of cybernetic eyes that can emit multicolored light" + id = "ci-gloweyes" + req_tech = list("materials" = 3, "biotech" = 3, "engineering" = 4) + build_type = PROTOLATHE | MECHFAB + construction_time = 40 + materials = list(MAT_METAL = 600, MAT_GLASS = 1000) + build_path = /obj/item/organ/eyes/robotic/glow + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_breather + name = "Breathing Tube Implant" + desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." + id = "ci-breather" + req_tech = list("materials" = 2, "biotech" = 3) + build_type = PROTOLATHE | MECHFAB + construction_time = 35 + materials = list(MAT_METAL = 600, MAT_GLASS = 250) + build_path = /obj/item/organ/cyberimp/mouth/breathing_tube + category = list("Misc", "Medical Designs") + + +/datum/design/cyberimp_surgical + name = "Surgical Arm Implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." + id = "ci-surgey" + req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3) + build_type = PROTOLATHE | MECHFAB + materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/surgery + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_toolset + name = "Toolset Arm Implant" + desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." + id = "ci-toolset" + req_tech = list("materials" = 3, "engineering" = 4, "biotech" = 4, "powerstorage" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/toolset + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_medical_hud + name = "Medical HUD Implant" + desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." + id = "ci-medhud" + req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4) + build_type = PROTOLATHE | MECHFAB + construction_time = 50 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500) + build_path = /obj/item/organ/cyberimp/eyes/hud/medical + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_security_hud + name = "Security HUD Implant" + desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." + id = "ci-sechud" + req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4, "combat" = 3) + build_type = PROTOLATHE | MECHFAB + construction_time = 50 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 750, MAT_GOLD = 750) + build_path = /obj/item/organ/cyberimp/eyes/hud/security + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_xray + name = "X-Ray Eyes" + desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." + id = "ci-xray" + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5,"plasmatech" = 6) + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 1000) + build_path = /obj/item/organ/eyes/robotic/xray + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_thermals + name = "Thermal Eyes" + desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." + id = "ci-thermals" + req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "magnets" = 5,"plasmatech" = 4) + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + build_path = /obj/item/organ/eyes/robotic/thermals + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_antidrop + name = "Anti-Drop Implant" + desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." + id = "ci-antidrop" + req_tech = list("materials" = 5, "programming" = 6, "biotech" = 5) + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 400, MAT_GOLD = 400) + build_path = /obj/item/organ/cyberimp/brain/anti_drop + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_antistun + name = "CNS Rebooter Implant" + desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." + id = "ci-antistun" + req_tech = list("materials" = 6, "programming" = 5, "biotech" = 6) + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 1000) + build_path = /obj/item/organ/cyberimp/brain/anti_stun + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_nutriment + name = "Nutriment Pump Implant" + desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." + id = "ci-nutriment" + req_tech = list("materials" = 3, "powerstorage" = 4, "biotech" = 3) + build_type = PROTOLATHE | MECHFAB + construction_time = 40 + materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500) + build_path = /obj/item/organ/cyberimp/chest/nutriment + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_nutriment_plus + name = "Nutriment Pump Implant PLUS" + desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + id = "ci-nutrimentplus" + req_tech = list("materials" = 5, "powerstorage" = 4, "biotech" = 4) + build_type = PROTOLATHE | MECHFAB + construction_time = 50 + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_GOLD = 500, MAT_URANIUM = 750) + build_path = /obj/item/organ/cyberimp/chest/nutriment/plus + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_reviver + name = "Reviver Implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + id = "ci-reviver" + req_tech = list("materials" = 5, "programming" = 4, "biotech" = 5) + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 300, MAT_URANIUM = 500) + build_path = /obj/item/organ/cyberimp/chest/reviver + category = list("Misc", "Medical Designs") + +/datum/design/cyberimp_thrusters + name = "Thrusters Set Implant" + desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas." + id = "ci-thrusters" + req_tech = list("materials" = 5, "biotech" = 5, "magnets" = 4, "engineering" = 7) + build_type = PROTOLATHE | MECHFAB + construction_time = 80 + materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_SILVER = 1000, MAT_DIAMOND = 1000) + build_path = /obj/item/organ/cyberimp/chest/thrusters + category = list("Misc", "Medical Designs") + + +///////////////////////////////////////// +////////////Regular Implants///////////// +///////////////////////////////////////// + +/datum/design/implanter + name = "Implanter" + desc = "A sterile automatic implant injector." + id = "implanter" + req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 200) + build_path = /obj/item/weapon/implanter + category = list("Medical Designs") + +/datum/design/implantcase + name = "Implant Case" + desc = "A glass case for containing an implant." + id = "implantcase" + req_tech = list("biotech" = 2) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/weapon/implantcase + category = list("Medical Designs") + +/datum/design/implant_sadtrombone + name = "Sad Trombone Implant Case" + desc = "Makes death amusing." + id = "implant_trombone" + req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500, MAT_BANANIUM = 500) + build_path = /obj/item/weapon/implantcase/sad_trombone + category = list("Medical Designs") + +/datum/design/implant_chem + name = "Chemical Implant Case" + desc = "A glass case containing an implant." + id = "implant_chem" + req_tech = list("materials" = 3, "biotech" = 5,) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 700) + build_path = /obj/item/weapon/implantcase/chem + category = list("Medical Designs") + +/datum/design/implant_tracking + name = "Tracking Implant Case" + desc = "A glass case containing an implant." + id = "implant_tracking" + req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/weapon/implantcase/track + category = list("Medical Designs") diff --git a/tools.dm b/tools.dm new file mode 100644 index 00000000000..89b10c4e7d3 --- /dev/null +++ b/tools.dm @@ -0,0 +1,235 @@ +/obj/item/weapon/retractor + name = "retractor" + desc = "Retracts stuff." + icon = 'icons/obj/surgery.dmi' + icon_state = "retractor" + materials = list(MAT_METAL=6000, MAT_GLASS=3000) + flags = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + + +/obj/item/weapon/retractor/augment + name = "toolarm 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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + + +/obj/item/weapon/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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + attack_verb = list("attacked", "pinched") + + +/obj/item/weapon/hemostat/augment + name = "toolarm 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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("attacked", "pinched") + + +/obj/item/weapon/cautery + name = "cautery" + desc = "This stops bleeding." + icon = 'icons/obj/surgery.dmi' + icon_state = "cautery" + materials = list(MAT_METAL=2500, MAT_GLASS=750) + flags = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + attack_verb = list("burnt") + + +/obj/item/weapon/cautery/augment + name = "toolarm 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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("burnt") + + +/obj/item/weapon/surgicaldrill + name = "surgical drill" + desc = "You can drill using this item. You dig?" + icon = 'icons/obj/surgery.dmi' + icon_state = "drill" + hitsound = 'sound/weapons/circsawhit.ogg' + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + flags = CONDUCT + force = 15 + w_class = WEIGHT_CLASS_NORMAL + origin_tech = "materials=1;biotech=1" + attack_verb = list("drilled") + + +/obj/item/weapon/surgicaldrill/augment + name = "toolarm surgical drill" + desc = "Effectively a small power drill contained within your arm, edges dulled to prevent tissue damage. May or may not pierce the heavaens." + icon = 'icons/obj/surgery.dmi' + icon_state = "drill" + hitsound = 'sound/weapons/circsawhit.ogg' + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_SMALL + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("drilled") + + +/obj/item/weapon/scalpel + name = "scalpel" + desc = "Cut, cut, and once more cut." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_TINY + throwforce = 5 + throw_speed = 3 + throw_range = 5 + materials = list(MAT_METAL=4000, MAT_GLASS=1000) + origin_tech = "materials=1;biotech=1" + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP_ACCURATE + +/obj/item/weapon/scalpel/augment + name = "toolarm scalpel" + desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_TINY + throwforce = 5 + throw_speed = 3 + throw_range = 5 + materials = list(MAT_METAL=4000, MAT_GLASS=1000) + origin_tech = "materials=1;biotech=1" + 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/weapon/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/weapon/circular_saw + name = "circular saw" + desc = "For heavy duty cutting." + icon = 'icons/obj/surgery.dmi' + icon_state = "saw" + hitsound = 'sound/weapons/circsawhit.ogg' + throwhitsound = 'sound/weapons/pierce.ogg' + flags = CONDUCT + force = 15 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 9 + throw_speed = 2 + throw_range = 5 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + origin_tech = "biotech=1;combat=1" + attack_verb = list("attacked", "slashed", "sawed", "cut") + sharpness = IS_SHARP + +/obj/item/weapon/circular_saw/augment + name = "toolarm 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 = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 9 + throw_speed = 2 + throw_range = 5 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + origin_tech = "biotech=1;combat=1" + toolspeed = 0.5 + attack_verb = list("attacked", "slashed", "sawed", "cut") + sharpness = IS_SHARP + +/obj/item/weapon/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 + origin_tech = "biotech=1" + attack_verb = list("slapped") + +/obj/item/weapon/surgical_drapes/attack(mob/living/M, mob/user) + if(!attempt_initiate_surgery(src, M, user)) + ..() + +/obj/item/weapon/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/weapon/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.loc = src + w_class = I.w_class + +/obj/item/weapon/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 From f60321e8fcff843922beb1105dc78616c51df4b8 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Wed, 19 Jul 2017 10:18:24 +0100 Subject: [PATCH 05/12] Update tools.dm --- tools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools.dm b/tools.dm index 89b10c4e7d3..9211a3136f7 100644 --- a/tools.dm +++ b/tools.dm @@ -87,7 +87,7 @@ /obj/item/weapon/surgicaldrill/augment name = "toolarm surgical drill" - desc = "Effectively a small power drill contained within your arm, edges dulled to prevent tissue damage. May or may not pierce the heavaens." + 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' From cd9c6c587783f278921c6cdf86fb884b5362e29d Mon Sep 17 00:00:00 2001 From: Anonmare Date: Sat, 22 Jul 2017 20:46:06 +0100 Subject: [PATCH 06/12] Delete medical_designs.dm --- medical_designs.dm | 401 --------------------------------------------- 1 file changed, 401 deletions(-) delete mode 100644 medical_designs.dm diff --git a/medical_designs.dm b/medical_designs.dm deleted file mode 100644 index 7f364f4691c..00000000000 --- a/medical_designs.dm +++ /dev/null @@ -1,401 +0,0 @@ -///////////////////////////////////////// -////////////Medical Tools//////////////// -///////////////////////////////////////// - - -/datum/design/mass_spectrometer - name = "Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood." - id = "mass_spectrometer" - req_tech = list("magnets" = 2, "plasmatech" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 100) - build_path = /obj/item/device/mass_spectrometer - category = list("Medical Designs") - -/datum/design/adv_mass_spectrometer - name = "Advanced Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood and their quantities." - id = "adv_mass_spectrometer" - req_tech = list("biotech" = 3, "magnets" = 4, "plasmatech" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 200) - build_path = /obj/item/device/mass_spectrometer/adv - category = list("Medical Designs") - -/datum/design/mmi - name = "Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." - id = "mmi" - req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 2) - build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 1000, MAT_GLASS = 500) - construction_time = 75 - build_path = /obj/item/device/mmi - category = list("Misc","Medical Designs") - -/datum/design/posibrain - name = "Positronic Brain" - desc = "The latest in Artificial Intelligences." - id = "mmi_posi" - req_tech = list("programming" = 5, "biotech" = 4, "plasmatech" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 1700, MAT_GLASS = 1350, MAT_GOLD = 500) //Gold, because SWAG. - construction_time = 75 - build_path = /obj/item/device/mmi/posibrain - category = list("Misc", "Medical Designs") - -/datum/design/bluespacebeaker - name = "Bluespace Beaker" - desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." - id = "bluespacebeaker" - req_tech = list("bluespace" = 6, "materials" = 5, "plasmatech" = 4) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 250, MAT_BLUESPACE = 250) - build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace - category = list("Medical Designs") - -/datum/design/noreactbeaker - name = "Cryostasis Beaker" - desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." - id = "splitbeaker" - req_tech = list("materials" = 3, "engineering" = 3, "plasmatech" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000) - build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact - category = list("Medical Designs") - -/datum/design/bluespacesyringe - name = "Bluespace Syringe" - desc = "An advanced syringe that can hold 60 units of chemicals" - id = "bluespacesyringe" - req_tech = list("bluespace" = 5, "materials" = 4, "biotech" = 4) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 2000, MAT_PLASMA = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 500) - build_path = /obj/item/weapon/reagent_containers/syringe/bluespace - category = list("Medical Designs") - -/datum/design/noreactsyringe - name = "Cryo Syringe" - desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." - id = "noreactsyringe" - req_tech = list("materials" = 3, "engineering" = 3) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 2000, MAT_GOLD = 1000) - build_path = /obj/item/weapon/reagent_containers/syringe/noreact - category = list("Medical Designs") - -/datum/design/piercesyringe - name = "Piercing Syringe" - desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." - id = "piercesyringe" - req_tech = list("materials" = 7, "combat" = 3, "engineering" = 5) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 2000, MAT_DIAMOND = 1000) - build_path = /obj/item/weapon/reagent_containers/syringe/piercing - category = list("Medical Designs") - -/datum/design/bluespacebodybag - name = "Bluespace Body Bag" - desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." - id = "bluespacebodybag" - req_tech = list("bluespace" = 5, "materials" = 4, "plasmatech" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000, MAT_PLASMA = 2000, MAT_DIAMOND = 500, MAT_BLUESPACE = 500) - build_path = /obj/item/bodybag/bluespace - category = list("Medical Designs") - -/datum/design/plasmarefiller - name = "Plasma-Man Jumpsuit Refill" - desc = "A refill pack for the auto-extinguisher on Plasma-man suits." - id = "plasmarefiller" - req_tech = list("materials" = 2, "plasmatech" = 3) //Why did this have no plasmatech - build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_PLASMA = 1000) - build_path = /obj/item/device/extinguisher_refill - category = list("Medical Designs") - -/datum/design/alienscalpel - name = "Alien Scalpel" - desc = "An advanced scalpel obtained through Abductor technology." - id = "alien_scalpel" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) - build_path = /obj/item/weapon/scalpel/alien - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) - category = list("Medical Designs") - -/datum/design/alienhemostat - name = "Alien Hemostat" - desc = "An advanced hemostat obtained through Abductor technology." - id = "alien_hemostat" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) - build_path = /obj/item/weapon/hemostat/alien - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) - category = list("Medical Designs") - -/datum/design/alienretractor - name = "Alien Retractor" - desc = "An advanced retractor obtained through Abductor technology." - id = "alien_retractor" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) - build_path = /obj/item/weapon/retractor/alien - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) - category = list("Medical Designs") - -/datum/design/aliensaw - name = "Alien Circular Saw" - desc = "An advanced surgical saw obtained through Abductor technology." - id = "alien_saw" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) - build_path = /obj/item/weapon/circular_saw/alien - build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) - category = list("Medical Designs") - -/datum/design/aliendrill - name = "Alien Drill" - desc = "An advanced drill obtained through Abductor technology." - id = "alien_drill" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) - build_path = /obj/item/weapon/surgicaldrill/alien - build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) - category = list("Medical Designs") - -/datum/design/aliencautery - name = "Alien Cautery" - desc = "An advanced cautery obtained through Abductor technology." - id = "alien_cautery" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) - build_path = /obj/item/weapon/cautery/alien - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) - category = list("Medical Designs") - -///////////////////////////////////////// -//////////Cybernetic Implants//////////// -///////////////////////////////////////// - -/datum/design/cyberimp_welding - name = "Welding Shield Eyes" - desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." - id = "ci-welding" - req_tech = list("materials" = 4, "biotech" = 4, "engineering" = 5, "plasmatech" = 4) - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(MAT_METAL = 600, MAT_GLASS = 400) - build_path = /obj/item/organ/eyes/robotic/shield - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_gloweyes - name = "Luminescent Eyes" - desc = "A pair of cybernetic eyes that can emit multicolored light" - id = "ci-gloweyes" - req_tech = list("materials" = 3, "biotech" = 3, "engineering" = 4) - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(MAT_METAL = 600, MAT_GLASS = 1000) - build_path = /obj/item/organ/eyes/robotic/glow - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_breather - name = "Breathing Tube Implant" - desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." - id = "ci-breather" - req_tech = list("materials" = 2, "biotech" = 3) - build_type = PROTOLATHE | MECHFAB - construction_time = 35 - materials = list(MAT_METAL = 600, MAT_GLASS = 250) - build_path = /obj/item/organ/cyberimp/mouth/breathing_tube - category = list("Misc", "Medical Designs") - - -/datum/design/cyberimp_surgical - name = "Surgical Arm Implant" - desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." - id = "ci-surgey" - req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) - construction_time = 200 - build_path = /obj/item/organ/cyberimp/arm/surgery - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_toolset - name = "Toolset Arm Implant" - desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." - id = "ci-toolset" - req_tech = list("materials" = 3, "engineering" = 4, "biotech" = 4, "powerstorage" = 4) - build_type = PROTOLATHE | MECHFAB - materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) - construction_time = 200 - build_path = /obj/item/organ/cyberimp/arm/toolset - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_medical_hud - name = "Medical HUD Implant" - desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." - id = "ci-medhud" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4) - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500) - build_path = /obj/item/organ/cyberimp/eyes/hud/medical - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_security_hud - name = "Security HUD Implant" - desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." - id = "ci-sechud" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4, "combat" = 3) - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 750, MAT_GOLD = 750) - build_path = /obj/item/organ/cyberimp/eyes/hud/security - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_xray - name = "X-Ray Eyes" - desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." - id = "ci-xray" - req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5,"plasmatech" = 6) - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 1000) - build_path = /obj/item/organ/eyes/robotic/xray - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_thermals - name = "Thermal Eyes" - desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." - id = "ci-thermals" - req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "magnets" = 5,"plasmatech" = 4) - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) - build_path = /obj/item/organ/eyes/robotic/thermals - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_antidrop - name = "Anti-Drop Implant" - desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." - id = "ci-antidrop" - req_tech = list("materials" = 5, "programming" = 6, "biotech" = 5) - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 400, MAT_GOLD = 400) - build_path = /obj/item/organ/cyberimp/brain/anti_drop - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_antistun - name = "CNS Rebooter Implant" - desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." - id = "ci-antistun" - req_tech = list("materials" = 6, "programming" = 5, "biotech" = 6) - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 1000) - build_path = /obj/item/organ/cyberimp/brain/anti_stun - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_nutriment - name = "Nutriment Pump Implant" - desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." - id = "ci-nutriment" - req_tech = list("materials" = 3, "powerstorage" = 4, "biotech" = 3) - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500) - build_path = /obj/item/organ/cyberimp/chest/nutriment - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_nutriment_plus - name = "Nutriment Pump Implant PLUS" - desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." - id = "ci-nutrimentplus" - req_tech = list("materials" = 5, "powerstorage" = 4, "biotech" = 4) - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_GOLD = 500, MAT_URANIUM = 750) - build_path = /obj/item/organ/cyberimp/chest/nutriment/plus - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_reviver - name = "Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" - id = "ci-reviver" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 5) - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 300, MAT_URANIUM = 500) - build_path = /obj/item/organ/cyberimp/chest/reviver - category = list("Misc", "Medical Designs") - -/datum/design/cyberimp_thrusters - name = "Thrusters Set Implant" - desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas." - id = "ci-thrusters" - req_tech = list("materials" = 5, "biotech" = 5, "magnets" = 4, "engineering" = 7) - build_type = PROTOLATHE | MECHFAB - construction_time = 80 - materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_SILVER = 1000, MAT_DIAMOND = 1000) - build_path = /obj/item/organ/cyberimp/chest/thrusters - category = list("Misc", "Medical Designs") - - -///////////////////////////////////////// -////////////Regular Implants///////////// -///////////////////////////////////////// - -/datum/design/implanter - name = "Implanter" - desc = "A sterile automatic implant injector." - id = "implanter" - req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 200) - build_path = /obj/item/weapon/implanter - category = list("Medical Designs") - -/datum/design/implantcase - name = "Implant Case" - desc = "A glass case for containing an implant." - id = "implantcase" - req_tech = list("biotech" = 2) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 500) - build_path = /obj/item/weapon/implantcase - category = list("Medical Designs") - -/datum/design/implant_sadtrombone - name = "Sad Trombone Implant Case" - desc = "Makes death amusing." - id = "implant_trombone" - req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 500, MAT_BANANIUM = 500) - build_path = /obj/item/weapon/implantcase/sad_trombone - category = list("Medical Designs") - -/datum/design/implant_chem - name = "Chemical Implant Case" - desc = "A glass case containing an implant." - id = "implant_chem" - req_tech = list("materials" = 3, "biotech" = 5,) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 700) - build_path = /obj/item/weapon/implantcase/chem - category = list("Medical Designs") - -/datum/design/implant_tracking - name = "Tracking Implant Case" - desc = "A glass case containing an implant." - id = "implant_tracking" - req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/weapon/implantcase/track - category = list("Medical Designs") From 087dd0e073de31844a66b447a6b94e547c23e742 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Sat, 22 Jul 2017 20:47:51 +0100 Subject: [PATCH 07/12] Update tools.dm --- code/modules/surgery/tools.dm | 97 +++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 887c26038a2..f4bf93bc4c9 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -9,6 +9,18 @@ origin_tech = "materials=1;biotech=1" +/obj/item/weapon/retractor/augment + name = "toolarm 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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + + /obj/item/weapon/hemostat name = "hemostat" desc = "You think you have seen this before." @@ -21,6 +33,19 @@ attack_verb = list("attacked", "pinched") +/obj/item/weapon/hemostat/augment + name = "toolarm 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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("attacked", "pinched") + + /obj/item/weapon/cautery name = "cautery" desc = "This stops bleeding." @@ -33,6 +58,19 @@ attack_verb = list("burnt") +/obj/item/weapon/cautery/augment + name = "toolarm 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 = CONDUCT + w_class = WEIGHT_CLASS_TINY + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("burnt") + + /obj/item/weapon/surgicaldrill name = "surgical drill" desc = "You can drill using this item. You dig?" @@ -46,6 +84,22 @@ origin_tech = "materials=1;biotech=1" attack_verb = list("drilled") + +/obj/item/weapon/surgicaldrill/augment + name = "toolarm 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 = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_SMALL + origin_tech = "materials=1;biotech=1" + toolspeed = 0.5 + attack_verb = list("drilled") + + /obj/item/weapon/scalpel name = "scalpel" desc = "Cut, cut, and once more cut." @@ -63,6 +117,24 @@ hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP_ACCURATE +/obj/item/weapon/scalpel/augment + name = "toolarm scalpel" + desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" + flags = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_TINY + throwforce = 5 + throw_speed = 3 + throw_range = 5 + materials = list(MAT_METAL=4000, MAT_GLASS=1000) + origin_tech = "materials=1;biotech=1" + 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/weapon/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) @@ -86,6 +158,25 @@ attack_verb = list("attacked", "slashed", "sawed", "cut") sharpness = IS_SHARP +/obj/item/weapon/circular_saw/augment + name = "toolarm 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 = CONDUCT + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 9 + throw_speed = 2 + throw_range = 5 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) + origin_tech = "biotech=1;combat=1" + toolspeed = 0.5 + attack_verb = list("attacked", "slashed", "sawed", "cut") + sharpness = IS_SHARP + /obj/item/weapon/surgical_drapes name = "surgical drapes" desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control." @@ -98,7 +189,7 @@ /obj/item/weapon/surgical_drapes/attack(mob/living/M, mob/user) if(!attempt_initiate_surgery(src, M, user)) ..() - + /obj/item/weapon/organ_storage //allows medical cyborgs to manipulate organs without hands name = "organ storage bag" desc = "A container for holding body parts." @@ -114,7 +205,7 @@ 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 @@ -141,4 +232,4 @@ desc = "A container for holding body parts." else to_chat(user, "[src] is empty.") - return +return From 88272be0e1f120af0c4d360afca5530147b68031 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Sat, 22 Jul 2017 20:49:50 +0100 Subject: [PATCH 08/12] Update augments_arms.dm --- code/modules/surgery/organs/augments_arms.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 5c0e31456ed..df0e2c8503e 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -85,7 +85,6 @@ holder.flags |= NODROP holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null - holder.w_class = WEIGHT_CLASS_HUGE holder.materials = null if(istype(holder, /obj/item/device/assembly/flash/armimplant)) @@ -234,5 +233,5 @@ /obj/item/organ/cyberimp/arm/surgery name = "surgical toolset implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm" - contents = newlist(/obj/item/weapon/retractor, /obj/item/weapon/hemostat, /obj/item/weapon/cautery, /obj/item/weapon/surgicaldrill, /obj/item/weapon/scalpel, /obj/item/weapon/circular_saw, /obj/item/weapon/surgical_drapes) - origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" + contents = newlist(/obj/item/weapon/retractor/augment, /obj/item/weapon/hemostat/augment, /obj/item/weapon/cautery/augment, /obj/item/weapon/surgicaldrill/augment, /obj/item/weapon/scalpel/augment, /obj/item/weapon/circular_saw/augment, /obj/item/weapon/surgical_drapes) +origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" From 1cb905758166d332f19bc0f9c728be8f196b1443 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Sat, 22 Jul 2017 20:50:45 +0100 Subject: [PATCH 09/12] Delete augments_arms.dm --- augments_arms.dm | 237 ----------------------------------------------- 1 file changed, 237 deletions(-) delete mode 100644 augments_arms.dm diff --git a/augments_arms.dm b/augments_arms.dm deleted file mode 100644 index 2305309a17b..00000000000 --- a/augments_arms.dm +++ /dev/null @@ -1,237 +0,0 @@ -/obj/item/organ/cyberimp/arm - name = "arm-mounted implant" - desc = "You shouldn't see this! Adminhelp and report this as an issue on github!" - zone = "r_arm" - slot = "r_arm_device" - icon_state = "implant-toolkit" - w_class = WEIGHT_CLASS_NORMAL - actions_types = list(/datum/action/item_action/organ_action/toggle) - - var/list/items_list = list() - // Used to store a list of all items inside, for multi-item implants. - // I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. - - var/obj/item/holder = null - // You can use this var for item path, it would be converted into an item on New() - -/obj/item/organ/cyberimp/arm/Initialize() - . = ..() - if(ispath(holder)) - holder = new holder(src) - - update_icon() - slot = zone + "_device" - items_list = contents.Copy() - -/obj/item/organ/cyberimp/arm/update_icon() - if(zone == "r_arm") - transform = null - else // Mirroring the icon - transform = matrix(-1, 0, 0, 0, 1, 0) - -/obj/item/organ/cyberimp/arm/examine(mob/user) - ..() - to_chat(user, "[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.") - -/obj/item/organ/cyberimp/arm/attackby(obj/item/weapon/W, mob/user, params) - ..() - if(istype(W, /obj/item/weapon/screwdriver)) - if(zone == "r_arm") - zone = "l_arm" - else - zone = "r_arm" - slot = zone + "_device" - to_chat(user, "You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.") - update_icon() - else if(istype(W, /obj/item/weapon/card/emag)) - emag_act() - -/obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0) - Retract() - ..() - -/obj/item/organ/cyberimp/arm/emag_act() - return 0 - -/obj/item/organ/cyberimp/arm/gun/emp_act(severity) - if(prob(15/severity) && owner) - to_chat(owner, "[src] is hit by EMP!") - // give the owner an idea about why his implant is glitching - Retract() - ..() - -/obj/item/organ/cyberimp/arm/proc/Retract() - if(!holder || (holder in src)) - return - - owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [zone == "r_arm" ? "right" : "left"] arm.", - "[holder] snaps back into your [zone == "r_arm" ? "right" : "left"] arm.", - "You hear a short mechanical noise.") - - if(istype(holder, /obj/item/device/assembly/flash/armimplant)) - var/obj/item/device/assembly/flash/F = holder - F.set_light(0) - - owner.transferItemToLoc(holder, src, TRUE) - holder = null - playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) - -/obj/item/organ/cyberimp/arm/proc/Extend(var/obj/item/item) - if(!(item in src)) - return - - holder = item - - holder.flags |= NODROP - holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - holder.slot_flags = null - holder.materials = null - - if(istype(holder, /obj/item/device/assembly/flash/armimplant)) - var/obj/item/device/assembly/flash/F = holder - F.set_light(7) - - var/obj/item/arm_item = owner.get_active_held_item() - - if(arm_item) - if(!owner.dropItemToGround(arm_item)) - to_chat(owner, "Your [arm_item] interferes with [src]!") - return - else - to_chat(owner, "You drop [arm_item] to activate [src]!") - - var/result = (zone == "r_arm" ? owner.put_in_r_hand(holder) : owner.put_in_l_hand(holder)) - if(!result) - to_chat(owner, "Your [src] fails to activate!") - return - - // Activate the hand that now holds our item. - owner.swap_hand(result)//... or the 1st hand if the index gets lost somehow - - owner.visible_message("[owner] extends [holder] from [owner.p_their()] [zone == "r_arm" ? "right" : "left"] arm.", - "You extend [holder] from your [zone == "r_arm" ? "right" : "left"] arm.", - "You hear a short mechanical noise.") - playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) - -/obj/item/organ/cyberimp/arm/ui_action_click() - if(crit_fail || (!holder && !contents.len)) - to_chat(owner, "The implant doesn't respond. It seems to be broken...") - return - - // You can emag the arm-mounted implant by activating it while holding emag in it's hand. - if(istype(owner.get_active_held_item(), /obj/item/weapon/card/emag) && emag_act()) - return - - if(!holder || (holder in src)) - holder = null - if(contents.len == 1) - Extend(contents[1]) - else // TODO: make it similar to borg's storage-like module selection - var/obj/item/choise = input("Activate which item?", "Arm Implant", null, null) as null|anything in items_list - if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && istype(choise) && (choise in contents)) - // This monster sanity check is a nice example of how bad input() is. - Extend(choise) - else - Retract() - - -/obj/item/organ/cyberimp/arm/gun/emp_act(severity) - if(prob(30/severity) && owner && !crit_fail) - Retract() - owner.visible_message("A loud bang comes from [owner]\'s [zone == "r_arm" ? "right" : "left"] arm!") - playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1) - to_chat(owner, "You feel an explosion erupt inside your [zone == "r_arm" ? "right" : "left"] arm as your implant breaks!") - owner.adjust_fire_stacks(20) - owner.IgniteMob() - owner.adjustFireLoss(25) - crit_fail = 1 - else // The gun will still discharge anyway. - ..() - - -/obj/item/organ/cyberimp/arm/gun/laser - name = "arm-mounted laser implant" - desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." - icon_state = "arm_laser" - origin_tech = "materials=4;combat=4;biotech=4;powerstorage=4;syndicate=3" - contents = newlist(/obj/item/weapon/gun/energy/laser/mounted) - -/obj/item/organ/cyberimp/arm/gun/laser/l - zone = "l_arm" - - -/obj/item/organ/cyberimp/arm/gun/taser - name = "arm-mounted taser implant" - desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." - icon_state = "arm_taser" - origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" - contents = newlist(/obj/item/weapon/gun/energy/e_gun/advtaser/mounted) - -/obj/item/organ/cyberimp/arm/gun/taser/l - zone = "l_arm" - - -/obj/item/organ/cyberimp/arm/toolset - name = "integrated toolset implant" - desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm. Contains all neccessary tools." - origin_tech = "materials=3;engineering=4;biotech=3;powerstorage=4" - contents = newlist(/obj/item/weapon/screwdriver/cyborg, /obj/item/weapon/wrench/cyborg, /obj/item/weapon/weldingtool/largetank/cyborg, - /obj/item/weapon/crowbar/cyborg, /obj/item/weapon/wirecutters/cyborg, /obj/item/device/multitool/cyborg) - -/obj/item/organ/cyberimp/arm/toolset/l - zone = "l_arm" - -/obj/item/organ/cyberimp/arm/toolset/emag_act() - if(!(locate(/obj/item/weapon/kitchen/knife/combat/cyborg) in items_list)) - to_chat(usr, "You unlock [src]'s integrated knife!") - items_list += new /obj/item/weapon/kitchen/knife/combat/cyborg(src) - return 1 - return 0 - -/obj/item/organ/cyberimp/arm/esword - name = "arm-mounted energy blade" - desc = "An illegal, and highly dangerous cybernetic implant that can project a deadly blade of concentrated enregy." - contents = newlist(/obj/item/weapon/melee/transforming/energy/blade/hardlight) - origin_tech = "materials=4;combat=5;biotech=3;powerstorage=2;syndicate=5" - -/obj/item/organ/cyberimp/arm/medibeam - name = "integrated medical beamgun" - desc = "A cybernetic implant that allows the user to project a healing beam from their hand." - contents = newlist(/obj/item/weapon/gun/medbeam) - origin_tech = "materials=5;combat=2;biotech=5;powerstorage=4;syndicate=1" - -/obj/item/organ/cyberimp/arm/flash - name = "integrated high-intensity photon projector" //Why not - desc = "An integrated projector mounted onto a user's arm, that is able to be used as a powerful flash." - contents = newlist(/obj/item/device/assembly/flash/armimplant) - origin_tech = "materials=4;combat=3;biotech=4;magnets=4;powerstorage=3" - -/obj/item/organ/cyberimp/arm/flash/Initialize() - . = ..() - if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) - var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list - F.I = src - -/obj/item/organ/cyberimp/arm/baton - name = "arm electrification implant" - desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm." - contents = newlist(/obj/item/borg/stun) - origin_tech = "materials=3;combat=5;biotech=4;powerstorage=4;syndicate=3" - -/obj/item/organ/cyberimp/arm/combat - name = "combat cybernetics implant" - desc = "A powerful cybernetic implant that contains combat modules built into the user's arm" - contents = newlist(/obj/item/weapon/melee/transforming/energy/blade/hardlight, /obj/item/weapon/gun/medbeam, /obj/item/borg/stun, /obj/item/device/assembly/flash/armimplant) - origin_tech = "materials=5;combat=7;biotech=5;powerstorage=5;syndicate=6;programming=5" - -/obj/item/organ/cyberimp/arm/combat/Initialize() - . = ..() - if(locate(/obj/item/device/assembly/flash/armimplant) in items_list) - var/obj/item/device/assembly/flash/armimplant/F = locate(/obj/item/device/assembly/flash/armimplant) in items_list - F.I = src - -/obj/item/organ/cyberimp/arm/surgery - name = "surgical toolset implant" - desc = "A set of surgical tools hidden behind a concealed panel on the user's arm" - contents = newlist(/obj/item/weapon/retractor/augment, /obj/item/weapon/hemostat/augment, /obj/item/weapon/cautery/augment, /obj/item/weapon/surgicaldrill/augment, /obj/item/weapon/scalpel/augment, /obj/item/weapon/circular_saw/augment, /obj/item/weapon/surgical_drapes) - origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" From 4cfdc2f977fe74f78a544dee7da848ee1b173c89 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Sat, 22 Jul 2017 21:01:44 +0100 Subject: [PATCH 10/12] Delete tools.dm --- tools.dm | 235 ------------------------------------------------------- 1 file changed, 235 deletions(-) delete mode 100644 tools.dm diff --git a/tools.dm b/tools.dm deleted file mode 100644 index 9211a3136f7..00000000000 --- a/tools.dm +++ /dev/null @@ -1,235 +0,0 @@ -/obj/item/weapon/retractor - name = "retractor" - desc = "Retracts stuff." - icon = 'icons/obj/surgery.dmi' - icon_state = "retractor" - materials = list(MAT_METAL=6000, MAT_GLASS=3000) - flags = CONDUCT - w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" - - -/obj/item/weapon/retractor/augment - name = "toolarm 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 = CONDUCT - w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" - toolspeed = 0.5 - - -/obj/item/weapon/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 = CONDUCT - w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "pinched") - - -/obj/item/weapon/hemostat/augment - name = "toolarm 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 = CONDUCT - w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" - toolspeed = 0.5 - attack_verb = list("attacked", "pinched") - - -/obj/item/weapon/cautery - name = "cautery" - desc = "This stops bleeding." - icon = 'icons/obj/surgery.dmi' - icon_state = "cautery" - materials = list(MAT_METAL=2500, MAT_GLASS=750) - flags = CONDUCT - w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" - attack_verb = list("burnt") - - -/obj/item/weapon/cautery/augment - name = "toolarm 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 = CONDUCT - w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" - toolspeed = 0.5 - attack_verb = list("burnt") - - -/obj/item/weapon/surgicaldrill - name = "surgical drill" - desc = "You can drill using this item. You dig?" - icon = 'icons/obj/surgery.dmi' - icon_state = "drill" - hitsound = 'sound/weapons/circsawhit.ogg' - materials = list(MAT_METAL=10000, MAT_GLASS=6000) - flags = CONDUCT - force = 15 - w_class = WEIGHT_CLASS_NORMAL - origin_tech = "materials=1;biotech=1" - attack_verb = list("drilled") - - -/obj/item/weapon/surgicaldrill/augment - name = "toolarm 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 = CONDUCT - force = 10 - w_class = WEIGHT_CLASS_SMALL - origin_tech = "materials=1;biotech=1" - toolspeed = 0.5 - attack_verb = list("drilled") - - -/obj/item/weapon/scalpel - name = "scalpel" - desc = "Cut, cut, and once more cut." - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" - flags = CONDUCT - force = 10 - w_class = WEIGHT_CLASS_TINY - throwforce = 5 - throw_speed = 3 - throw_range = 5 - materials = list(MAT_METAL=4000, MAT_GLASS=1000) - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP_ACCURATE - -/obj/item/weapon/scalpel/augment - name = "toolarm scalpel" - desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" - flags = CONDUCT - force = 10 - w_class = WEIGHT_CLASS_TINY - throwforce = 5 - throw_speed = 3 - throw_range = 5 - materials = list(MAT_METAL=4000, MAT_GLASS=1000) - origin_tech = "materials=1;biotech=1" - 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/weapon/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/weapon/circular_saw - name = "circular saw" - desc = "For heavy duty cutting." - icon = 'icons/obj/surgery.dmi' - icon_state = "saw" - hitsound = 'sound/weapons/circsawhit.ogg' - throwhitsound = 'sound/weapons/pierce.ogg' - flags = CONDUCT - force = 15 - w_class = WEIGHT_CLASS_NORMAL - throwforce = 9 - throw_speed = 2 - throw_range = 5 - materials = list(MAT_METAL=10000, MAT_GLASS=6000) - origin_tech = "biotech=1;combat=1" - attack_verb = list("attacked", "slashed", "sawed", "cut") - sharpness = IS_SHARP - -/obj/item/weapon/circular_saw/augment - name = "toolarm 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 = CONDUCT - force = 10 - w_class = WEIGHT_CLASS_SMALL - throwforce = 9 - throw_speed = 2 - throw_range = 5 - materials = list(MAT_METAL=10000, MAT_GLASS=6000) - origin_tech = "biotech=1;combat=1" - toolspeed = 0.5 - attack_verb = list("attacked", "slashed", "sawed", "cut") - sharpness = IS_SHARP - -/obj/item/weapon/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 - origin_tech = "biotech=1" - attack_verb = list("slapped") - -/obj/item/weapon/surgical_drapes/attack(mob/living/M, mob/user) - if(!attempt_initiate_surgery(src, M, user)) - ..() - -/obj/item/weapon/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/weapon/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.loc = src - w_class = I.w_class - -/obj/item/weapon/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 From 0fe067676ac0012c891603d58b1915c6b7e90393 Mon Sep 17 00:00:00 2001 From: Anonmare Date: Thu, 27 Jul 2017 14:34:36 +0100 Subject: [PATCH 11/12] Update augments_arms.dm --- code/modules/surgery/organs/augments_arms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index df0e2c8503e..2305309a17b 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -234,4 +234,4 @@ name = "surgical toolset implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm" contents = newlist(/obj/item/weapon/retractor/augment, /obj/item/weapon/hemostat/augment, /obj/item/weapon/cautery/augment, /obj/item/weapon/surgicaldrill/augment, /obj/item/weapon/scalpel/augment, /obj/item/weapon/circular_saw/augment, /obj/item/weapon/surgical_drapes) -origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" + origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" From 84b4690c16439240b6d749221dc039cf2e67de0f Mon Sep 17 00:00:00 2001 From: Anonmare Date: Thu, 27 Jul 2017 14:35:24 +0100 Subject: [PATCH 12/12] Update tools.dm --- code/modules/surgery/tools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index f4bf93bc4c9..9211a3136f7 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -232,4 +232,4 @@ desc = "A container for holding body parts." else to_chat(user, "[src] is empty.") -return + return