diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 0632457c1ab..1b9c50b78d5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -69,7 +69,7 @@ new /obj/item/weapon/storage/belt/medical(src) new /obj/item/device/assembly/flash/handheld(src) new /obj/item/weapon/reagent_containers/hypospray/CMO(src) - new /obj/item/device/autoimplanter/cmo(src) + new /obj/item/device/autosurgeon/cmo(src) new /obj/item/weapon/door_remote/chief_medical_officer(src) /obj/structure/closet/secure_closet/animal diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 055905a92a0..114d145cf46 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -47,7 +47,7 @@ I = organ I.removed(C) - organ.loc = get_turf(C) + organ.forceMove(get_turf(C)) if(operation == "remove organ/implant") qdel(organ) @@ -55,4 +55,4 @@ var/obj/item/weapon/implantcase/case = new(get_turf(C)) case.imp = I I.loc = case - case.update_icon() \ No newline at end of file + case.update_icon() diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 384a0f311cd..e7cc68a57a6 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -144,28 +144,19 @@ //BOX O' IMPLANTS /obj/item/weapon/storage/box/cyber_implants - name = "boxed cybernetic implant" + name = "boxed cybernetic implants" desc = "A sleek, sturdy box." icon_state = "cyber_implants" - -/obj/item/weapon/storage/box/cyber_implants/New(loc, implant) - ..() - new /obj/item/device/autoimplanter(src) - if(ispath(implant)) - new implant(src) - -/obj/item/weapon/storage/box/cyber_implants/bundle - name = "boxed cybernetic implants" var/list/boxed = list( - /obj/item/organ/eyes/robotic/xray, - /obj/item/organ/eyes/robotic/thermals, - /obj/item/organ/cyberimp/brain/anti_stun, - /obj/item/organ/cyberimp/chest/reviver) + /obj/item/device/autosurgeon/thermal_eyes, + /obj/item/device/autosurgeon/xray_eyes, + /obj/item/device/autosurgeon/anti_stun, + /obj/item/device/autosurgeon/reviver) var/amount = 5 /obj/item/weapon/storage/box/cyber_implants/bundle/New() ..() var/implant - while(contents.len <= amount + 1) // +1 for the autoimplanter. + while(contents.len <= amount) implant = pick(boxed) new implant(src) diff --git a/code/modules/surgery/organs/autoimplanter.dm b/code/modules/surgery/organs/autosurgeon.dm similarity index 56% rename from code/modules/surgery/organs/autoimplanter.dm rename to code/modules/surgery/organs/autosurgeon.dm index 0f62fb49c5f..981e6000c37 100644 --- a/code/modules/surgery/organs/autoimplanter.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -1,21 +1,27 @@ #define INFINITE -1 -/obj/item/device/autoimplanter - name = "autoimplanter" - desc = "A device that automatically injects a cyber-implant into the user without the hassle of extensive surgery. It has a slot to insert implants and a screwdriver slot for removing accidentally added implants." +/obj/item/device/autosurgeon + name = "autosurgeon" + desc = "A device that automatically inserts an implant or organ into the user without the hassle of extensive surgery. It has a slot to insert implants/organs and a screwdriver slot for removing accidentally added items." icon_state = "autoimplanter" item_state = "walkietalkie"//left as this so as to intentionally not have inhands w_class = WEIGHT_CLASS_SMALL var/obj/item/organ/storedorgan - var/organ_type = /obj/item/organ/cyberimp + var/organ_type = /obj/item/organ var/uses = INFINITE + var/starting_organ -/obj/item/device/autoimplanter/New() +/obj/item/device/autosurgeon/Initialize(mapload) ..() - if(storedorgan) - storedorgan.loc = src + if(starting_organ) + insert_organ(new starting_organ(src)) -/obj/item/device/autoimplanter/attack_self(mob/user)//when the object it used... +/obj/item/device/autosurgeon/proc/insert_organ(var/obj/item/I) + storedorgan = I + I.forceMove(src) + name = "[initial(name)] ([storedorgan.name])" + +/obj/item/device/autosurgeon/attack_self(mob/user)//when the object it used... if(!uses) to_chat(user, "[src] has already been used. The tools are dull and won't reactivate.") return @@ -26,12 +32,13 @@ user.visible_message("[user] presses a button on [src], and you hear a short mechanical noise.", "You feel a sharp sting as [src] plunges into your body.") playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1) storedorgan = null + name = initial(name) if(uses != INFINITE) uses-- if(!uses) desc = "[initial(desc)] Looks like it's been used up." -/obj/item/device/autoimplanter/attackby(obj/item/I, mob/user, params) +/obj/item/device/autosurgeon/attackby(obj/item/I, mob/user, params) if(istype(I, organ_type)) if(storedorgan) to_chat(user, "[src] already has an implant stored.") @@ -41,7 +48,7 @@ return if(!user.drop_item()) return - I.loc = src + I.forceMove(src) storedorgan = I to_chat(user, "You insert the [I] into [src].") else if(istype(I, /obj/item/weapon/screwdriver)) @@ -58,8 +65,20 @@ if(!uses) desc = "[initial(desc)] Looks like it's been used up." -/obj/item/device/autoimplanter/cmo - name = "medical HUD autoimplanter" - desc = "A single use autoimplanter that contains a medical heads-up display augment. A screwdriver can be used to remove it, but implants can't be placed back in." - storedorgan = new/obj/item/organ/cyberimp/eyes/hud/medical() +/obj/item/device/autosurgeon/cmo + desc = "A single use autosurgeon that contains a medical heads-up display augment. A screwdriver can be used to remove it, but implants can't be placed back in." uses = 1 + starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical + + +/obj/item/device/autosurgeon/thermal_eyes + starting_organ = /obj/item/organ/eyes/robotic/thermals + +/obj/item/device/autosurgeon/xray_eyes + starting_organ = /obj/item/organ/eyes/robotic/xray + +/obj/item/device/autosurgeon/anti_stun + starting_organ = /obj/item/organ/cyberimp/brain/anti_stun + +/obj/item/device/autosurgeon/reviver + starting_organ = /obj/item/organ/cyberimp/chest/reviver diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index c2d2b298047..4a7f30138b2 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -12,13 +12,17 @@ var/vital = 0 -/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) if(!iscarbon(M) || owner == M) return var/obj/item/organ/replaced = M.getorganslot(slot) if(replaced) replaced.Remove(M, special = 1) + if(drop_if_replaced) + replaced.forceMove(get_turf(src)) + else + qdel(replaced) owner = M M.internal_organs |= src diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 4d0def2d45c..58bef835181 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -1157,40 +1157,40 @@ var/list/uplink_items = list() // Global list so we only initialize this once. /datum/uplink_item/cyber_implants/spawn_item(turf/loc, obj/item/device/uplink/U) if(item) - if(istype(item, /obj/item/organ/cyberimp)) + if(istype(item, /obj/item/organ)) return new /obj/item/weapon/storage/box/cyber_implants(loc, item) else return ..() /datum/uplink_item/cyber_implants/thermals - name = "Thermal eyes" - desc = "These cybernetic eyes will give you thermal vision. Comes with a free autoimplanter." - item = /obj/item/organ/eyes/robotic/thermals + name = "Thermal Eyes" + desc = "These cybernetic eyes will give you thermal vision. Comes with a free autosurgeon." + item = /obj/item/device/autosurgeon/thermal_eyes cost = 8 /datum/uplink_item/cyber_implants/xray name = "X-Ray Vision Implant" - desc = "These cybernetic eyes will give you X-ray vision. Comes with an autoimplanter." - item = /obj/item/organ/eyes/robotic/xray + desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon." + item = /obj/item/device/autosurgeon/xray_eyes cost = 10 /datum/uplink_item/cyber_implants/antistun name = "CNS Rebooter Implant" - desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autoimplanter." - item = /obj/item/organ/cyberimp/brain/anti_stun + desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon." + item = /obj/item/device/autosurgeon/anti_stun cost = 12 /datum/uplink_item/cyber_implants/reviver name = "Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness. Comes with an autoimplanter." - item = /obj/item/organ/cyberimp/chest/reviver + desc = "This implant will attempt to revive you if you lose consciousness. Comes with an autosurgeon." + item = /obj/item/device/autosurgeon/reviver cost = 8 /datum/uplink_item/cyber_implants/bundle name = "Cybernetic Implants Bundle" - desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autoimplanter." - item = /obj/item/weapon/storage/box/cyber_implants/bundle + desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autosurgeon." + item = /obj/item/weapon/storage/box/cyber_implants cost = 40 cant_discount = TRUE diff --git a/tgstation.dme b/tgstation.dme index c03f2afc526..1b5046b4bb7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2022,7 +2022,7 @@ #include "code\modules\surgery\organs\augments_chest.dm" #include "code\modules\surgery\organs\augments_eyes.dm" #include "code\modules\surgery\organs\augments_internal.dm" -#include "code\modules\surgery\organs\autoimplanter.dm" +#include "code\modules\surgery\organs\autosurgeon.dm" #include "code\modules\surgery\organs\helpers.dm" #include "code\modules\surgery\organs\organ_internal.dm" #include "code\modules\surgery\organs\vocal_cords.dm"