diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 028c0ad3a14..e95315bb88c 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -67,8 +67,8 @@ if(borer) borer.detatch() //Should remove borer if the brain is removed - RR - - B.transfer_identity(user) + if(owner.mind)//don't transfer if the owner does not have a mind. + B.transfer_identity(user) if(istype(owner,/mob/living/carbon/human)) var/mob/living/carbon/human/H = owner diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 6b289d45b9d..d633bb020ad 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -34,9 +34,10 @@ d/=sober_str + var/obj/item/organ/internal/liver/L if(ishuman(M)) var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/liver/L = H.get_int_organ(/obj/item/organ/internal/liver) + L = H.get_int_organ(/obj/item/organ/internal/liver) if(!L || (istype(L) && L.dna.species in list("Skrell", "Neara"))) d*=5 @@ -64,8 +65,7 @@ M.drowsyness = max(M.drowsyness, 30/sober_str) if(ishuman(M)) var/mob/living/carbon/human/H = M - if (H.get_int_organ(/obj/item/organ/internal/liver)) - var/obj/item/organ/internal/liver/L = H.get_int_organ(/obj/item/organ/internal/liver) + if (L) L.take_damage(0.1, 1) H.adjustToxLoss(0.1) ..() diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index ee90720d0bc..ceab7a8c86e 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -15,7 +15,7 @@ possible_transfer_amounts = null //list(5,10,15) volume = 15 w_class = 1 - sharp = 1 + sharp = 0 var/mode = SYRINGE_DRAW on_reagent_change() diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 0b3fbce97b4..81aa947ac7b 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -170,16 +170,21 @@ var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) if(istype(tool, /obj/item/weapon/disk/nuclear)) - user << "Central command would kill you if you implanted the disk into someone." + user << "Central command would kill you if you implanted the disk into someone." return 0//fail if(istype(tool,/obj/item/organ)) - user << "This isn't the type of surgery for that!" + user << "This isn't the type of surgery for organ transplants!" return 0//fail + if(!user.canUnEquip(tool, 0)) + user << "[tool] is stuck to your hand, you can't put it in [target]!" + return 0 + + if(tool) if(IC) - user << "There seems to be something in there already!" + user << "There seems to be something in there already!" return 1 else user.visible_message(" [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index cc142ae3fd0..c020b873354 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -897,7 +897,7 @@ Note that amputating the affected organ does in fact remove the infection from t O.forceMove(src) // Grab all the internal giblets too. - for(var/obj/item/organ/organ in internal_organs) + for(var/obj/item/organ/internal/organ in internal_organs) organ.remove() organ.forceMove(src) diff --git a/code/modules/surgery/organs/subtypes/standard.dm b/code/modules/surgery/organs/subtypes/standard.dm index da8681e1b4e..c9cbbb17906 100644 --- a/code/modules/surgery/organs/subtypes/standard.dm +++ b/code/modules/surgery/organs/subtypes/standard.dm @@ -111,6 +111,11 @@ /obj/item/organ/external/hand/remove() if(owner.gloves) owner.unEquip(owner.gloves) + if(owner.l_hand) + owner.unEquip(owner.l_hand,1) + if(owner.r_hand) + owner.unEquip(owner.r_hand,1) + ..() /obj/item/organ/external/hand/right diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 4fca951c82f..091f104707e 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -143,7 +143,6 @@ return -1 else if(implement_type in implements_mend) - //todo Change message, make it heal the organs... current_type = "mend" var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) @@ -163,11 +162,11 @@ spread_germs_to_organ(I, user) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) - else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) + else if(I.robotic >= 2 && istype(tool, /obj/item/stack/nanopaste)) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) - user << "No organs appear to be damaged." + user << "[I] does not appear to be damaged." H.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) @@ -195,7 +194,7 @@ user.visible_message(" [user] treats damage to [target]'s [I.name] with [tool_name].", \ " You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 - else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) + else if(I.robotic >= 2 && istype (tool, /obj/item/stack/nanopaste)) user.visible_message(" [user] treats damage to [target]'s [I.name] with [tool_name].", \ " You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 @@ -205,6 +204,10 @@ user.drop_item() I.insert(target) spread_germs_to_organ(I, user) + if(!user.canUnEquip(I, 0)) + user << "[I] is stuck to your hand, you can't put it in [target]!" + return 0 + if(affected) user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \ " You have transplanted \the [tool] into [target]'s [affected.name].") diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index fa1d1750648..c1851ecabc6 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -265,7 +265,7 @@ allowed_tools = list(/obj/item/device/mmi = 100) var/implements_extract = list(/obj/item/device/multitool = 100) var/implements_mend = list( /obj/item/stack/nanopaste = 100,/obj/item/weapon/bonegel = 30, /obj/item/weapon/screwdriver = 70) - var/implements_insert = list(/obj/item/weapon/screwdriver = 100) + var/implements_insert = list(/obj/item/organ/internal = 100) var/implements_finish =list(/obj/item/weapon/retractor = 100,/obj/item/weapon/crowbar = 100,/obj/item/weapon/kitchen/utensil = 50) var/current_type var/obj/item/organ/internal/I = null @@ -285,13 +285,11 @@ affected = target.get_organ(target_zone) if(implement_type in implements_insert) current_type = "insert" - //I = tool - var/off_tool = user.get_inactive_hand() + var/obj/item/organ/internal/I = tool + + if(I.status != ORGAN_ROBOT || I.robotic != 2) + user << "You can only implant cybernetic organs." - if(!off_tool || !istype(off_tool,/obj/item/organ/internal)) - user << "You need a replacement internal part in your off hand." - return -1 - I = off_tool //and please god let it be an organ... if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" return -1 @@ -304,8 +302,8 @@ user << " \The [target] already has [I]." return -1 - user.visible_message("[user] begins reattaching [target]'s [off_tool] with \the [tool].", \ - "You start reattaching [target]'s [off_tool] with \the [tool].") + user.visible_message("[user] begins reattaching [target]'s [tool].", \ + "You start reattaching [target]'s [tool].") target.custom_pain("Someone's rooting around in your [affected.name]!",1) else if(istype(tool,/obj/item/device/mmi)) current_type = "install" @@ -407,18 +405,19 @@ " You repair [target]'s [I.name] with [tool]." ) I.damage = 0 else if(current_type == "insert") - var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ) + var/obj/item/organ/internal/I = tool - var/off_tool = user.get_inactive_hand() - I = off_tool - //user.drop_item() + if(!user.canUnEquip(I, 0)) + user << "[I] is stuck to your hand, you can't put it in [target]!" + return 0 + + user.drop_item() I.insert(target) - user.visible_message(" [user] has reattached [target]'s [I] with \the [tool]." , \ - " You have reattached [target]'s [I] with \the [tool].") + user.visible_message(" [user] has reattached [target]'s [I]." , \ + " You have reattached [target]'s [I].") if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY - qdel(off_tool) else if (current_type == "install") user.visible_message(" [user] has installed \the [tool] into [target]'s [affected.name].", \ " You have installed \the [tool] into [target]'s [affected.name].")