diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 1e217acf30a..bc2d1e737ba 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -1,4 +1,3 @@
-
// reference: /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0)
client
@@ -993,8 +992,8 @@ client
if(locate(new_organ) in M.internal_organs)
usr << "Mob already has that organ."
return
-
- new new_organ(M)
+ var/obj/item/organ/internal/organ = new new_organ
+ organ.insert(M)
message_admins("[key_name_admin(usr)] has given [key_name_admin(M)] the organ [new_organ]")
log_admin("[key_name(usr)] has given [key_name(M)] the organ [new_organ]")
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index ce95c4dd791..17680b80f56 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -6,7 +6,7 @@ These are general powers. Specific powers are stored under the appropriate alien
Doesn't work on other aliens/AI.*/
-/mob/living/carbon/alien/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null.
+/mob/living/carbon/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null.
if(stat)
src << "You must be conscious to do this."
return 0
diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm
index 4cb965f3727..551d56bc4f8 100644
--- a/code/modules/projectiles/guns/mounted.dm
+++ b/code/modules/projectiles/guns/mounted.dm
@@ -1,7 +1,9 @@
/obj/item/weapon/gun/energy/gun/advtaser/mounted
name = "mounted taser"
desc = "An arm mounted dual-mode weapon that fires electrodes and disabler shots."
- icon_state = "armcannon"
+ icon_state = "armcannon_stun"
+ item_state = "armcannonstun"
+ modifystate = "armcannon_stun"
force = "5"
self_recharge = 1
flags = NODROP
@@ -17,6 +19,7 @@
desc = "An arm mounted cannon that fires lethal lasers. Doesn't come with a charge beam."
icon_state = "armcannon"
item_state = "armcannonlase"
+ modifystate = "armcannon"
force = "5"
self_recharge = 1
flags = NODROP
diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index 63d956e99c5..c26689a9675 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -16,6 +16,8 @@
//surgery steps
/datum/surgery_step/glue_bone
+ name = "mend bone"
+
allowed_tools = list(
/obj/item/weapon/bonegel = 100, \
/obj/item/weapon/screwdriver = 75
@@ -23,7 +25,6 @@
can_infect = 1
blood_level = 1
- min_duration = 50
max_duration = 60
/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -53,12 +54,13 @@
return 0
/datum/surgery_step/set_bone
+ name = "set bone"
+
allowed_tools = list(
/obj/item/weapon/bonesetter = 100, \
/obj/item/weapon/wrench = 75 \
)
- min_duration = 60
max_duration = 70
/datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -82,7 +84,7 @@
else
user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \
"\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].")
- affected.fracture()
+ affected.fracture()//can i remove this please?
return 0
/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -93,12 +95,13 @@
return 0
/datum/surgery_step/mend_skull
+ name = "mend skull"
+
allowed_tools = list(
/obj/item/weapon/bonesetter = 100, \
/obj/item/weapon/wrench = 75 \
)
- min_duration = 60
max_duration = 70
/datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -128,6 +131,8 @@
return 0
/datum/surgery_step/finish_bone
+ name = "medicate bones"
+
allowed_tools = list(
/obj/item/weapon/bonegel = 100, \
/obj/item/weapon/screwdriver = 75
@@ -135,7 +140,6 @@
can_infect = 1
blood_level = 1
- min_duration = 50
max_duration = 60
/datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm
index d7caa513a5c..46d65e8b149 100644
--- a/code/modules/surgery/encased.dm
+++ b/code/modules/surgery/encased.dm
@@ -17,13 +17,13 @@
/datum/surgery_step/open_encased/saw
+ name = "saw bone"
allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/melee/energy/sword/cyborg/saw = 100, \
/obj/item/weapon/hatchet = 75
)
- min_duration = 50
max_duration = 70
/datum/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -70,12 +70,13 @@
/datum/surgery_step/open_encased/retract
+ name = "retract bone"
allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75
)
- min_duration = 30
max_duration = 40
/datum/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -130,12 +131,13 @@
return 0
/datum/surgery_step/open_encased/close
+ name = "unretract bone" //i suck at names okay? give me a new one
allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75
)
- min_duration = 20
max_duration = 40
/datum/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -187,12 +189,12 @@
return 0
/datum/surgery_step/open_encased/mend
+ name = "mend bone"
allowed_tools = list(
/obj/item/weapon/bonegel = 100, \
/obj/item/weapon/screwdriver = 75
)
- min_duration = 20
max_duration = 40
/datum/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index 4f39d969232..3ab54efc376 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -20,13 +20,17 @@
return target_zone == "mouth"
/datum/surgery_step/generic/cut_face
+ name = "make incision"
allowed_tools = list(
+ /obj/item/weapon/scalpel/laser3 = 115, \
+ /obj/item/weapon/scalpel/laser2 = 110, \
+ /obj/item/weapon/scalpel/laser1 = 105, \
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
- min_duration = 90
max_duration = 110
/datum/surgery_step/generic/cut_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -54,13 +58,14 @@
return 0
/datum/surgery_step/face/mend_vocal
+ name = "mend vocal cords"
allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/hemostat = 100, \
/obj/item/stack/cable_coil = 75, \
/obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
)
- min_duration = 70
max_duration = 90
/datum/surgery_step/face/mend_vocal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -84,12 +89,13 @@
return 0
/datum/surgery_step/face/fix_face
+ name = "reshape face"
allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 55, \
/obj/item/weapon/kitchen/utensil/fork = 75)
- min_duration = 80
max_duration = 100
/datum/surgery_step/face/fix_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -114,14 +120,17 @@
return 0
/datum/surgery_step/face/cauterize
+ name = "close incision"
allowed_tools = list(
+ /obj/item/weapon/scalpel/laser3 = 115, \
+ /obj/item/weapon/scalpel/laser2 = 110, \
+ /obj/item/weapon/scalpel/laser1 = 105, \
/obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
- min_duration = 70
max_duration = 100
/datum/surgery_step/face/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index fb329a5deab..f07cef38b97 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -20,109 +20,26 @@
return 0
return 1
-/datum/surgery_step/generic/cut_with_laser
- allowed_tools = list(
- /obj/item/weapon/scalpel/laser3 = 95, \
- /obj/item/weapon/scalpel/laser2 = 85, \
- /obj/item/weapon/scalpel/laser1 = 75, \
- /obj/item/weapon/melee/energy/ = 5, \
- /obj/item/weapon/pen/edagger = 5, \
- )
-
- min_duration = 90
- max_duration = 110
-
-/datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- if(..())
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected.open == 0 && target_zone != "mouth"
-
-/datum/surgery_step/generic/cut_with_laser/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \
- "You start the bloodless incision on [target]'s [affected.name] with \the [tool].")
- target.custom_pain("You feel a horrible, searing pain in your [affected.name]!",1)
- ..()
-
-/datum/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message(" [user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \
- " You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",)
- //Could be cleaner ...
- affected.open = 1
-
- if(istype(target) && !(target.species.flags & NO_BLOOD))
- affected.status |= ORGAN_BLEEDING
-
- affected.createwound(CUT, 1)
- affected.clamp()
- spread_germs_to_organ(affected, user)
- return 1
-
-/datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message(" [user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, 7.5)
- affected.createwound(BURN, 12.5)
- return 0
-
-/datum/surgery_step/generic/incision_manager
- allowed_tools = list(
- /obj/item/weapon/scalpel/manager = 100
- )
-
- min_duration = 80
- max_duration = 120
-
-/datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- if(..())
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected.open == 0 && target_zone != "mouth"
-
-/datum/surgery_step/generic/incision_manager/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \
- "You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].")
- target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!",1)
- ..()
-
-/datum/surgery_step/generic/incision_manager/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].", \
- "\blue You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].",)
- affected.open = 1
-
- if(istype(target) && !(target.species.flags & NO_BLOOD))
- affected.status |= ORGAN_BLEEDING
-
- affected.createwound(CUT, 1)
- affected.clamp()
- affected.open = 2
-
- return 1
-
-/datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, 20)
- affected.createwound(BURN, 15)
-
- return 2
/datum/surgery_step/generic/cut_open
+ name = "make incision"
+
allowed_tools = list(
+ /obj/item/weapon/scalpel/laser3 = 115, \
+ /obj/item/weapon/scalpel/laser2 = 110, \
+ /obj/item/weapon/scalpel/laser1 = 105, \
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
/obj/item/weapon/scissors = 10, \
/obj/item/weapon/twohanded/chainsaw = 1, \
/obj/item/weapon/claymore = 5, \
+ /obj/item/weapon/melee/energy/ = 5, \
+ /obj/item/weapon/pen/edagger = 5, \
)
- min_duration = 90
- max_duration = 110
+ max_duration = 60
/datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -154,13 +71,18 @@
return 0
/datum/surgery_step/generic/clamp_bleeders
+ name = "clamp bleeders"
+
allowed_tools = list(
+ /obj/item/weapon/scalpel/laser3 = 115, \
+ /obj/item/weapon/scalpel/laser2 = 110, \
+ /obj/item/weapon/scalpel/laser1 = 105, \
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/hemostat = 100, \
/obj/item/stack/cable_coil = 75, \
/obj/item/device/assembly/mousetrap = 20
)
- min_duration = 40
max_duration = 60
@@ -192,13 +114,15 @@
return 0
/datum/surgery_step/generic/retract_skin
+ name = "retract skin"
+
allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75, \
/obj/item/weapon/kitchen/utensil/fork = 50
)
- min_duration = 30
max_duration = 40
/datum/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -248,15 +172,20 @@
return 0
/datum/surgery_step/generic/cauterize
+
+ name = "cauterize incision"
+
allowed_tools = list(
+ /obj/item/weapon/scalpel/laser3 = 115, \
+ /obj/item/weapon/scalpel/laser2 = 110, \
+ /obj/item/weapon/scalpel/laser1 = 105, \
/obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
- min_duration = 70
- max_duration = 100
+ max_duration = 90
/datum/surgery_step/generic/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -287,6 +216,8 @@
/datum/surgery_step/generic/amputate
+ name = "amputate limb"
+
allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/melee/energy/sword/cyborg/saw = 100, \
@@ -294,8 +225,7 @@
/obj/item/weapon/melee/arm_blade = 60
)
- min_duration = 110
- max_duration = 160
+ max_duration = 110
/datum/surgery_step/generic/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (target_zone == "eyes") //there are specific steps for eye surgery
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 87c20ada7ed..4cd06a68402 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -54,13 +54,13 @@
affected.createwound(CUT, 20)
/datum/surgery_step/cavity/make_space
+ name = "make cavity space"
allowed_tools = list(
/obj/item/weapon/surgicaldrill = 100, \
/obj/item/weapon/pen = 75, \
/obj/item/stack/rods = 50
)
- min_duration = 60
max_duration = 80
/datum/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -83,15 +83,18 @@
return 1
/datum/surgery_step/cavity/close_space
- priority = 2
+ name = "close cavity space"
allowed_tools = list(
+ /obj/item/weapon/scalpel/laser3 = 115, \
+ /obj/item/weapon/scalpel/laser2 = 110, \
+ /obj/item/weapon/scalpel/laser1 = 105, \
+ /obj/item/weapon/scalpel/manager = 120, \
/obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
- min_duration = 60
max_duration = 80
/datum/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -115,10 +118,12 @@
/datum/surgery_step/cavity/place_item
- priority = 0
+ name = "implant object"
+ accept_hand = 1
+ accept_any_item = 1
+ var/obj/item/IC = null
allowed_tools = list(/obj/item = 100)
- min_duration = 80
max_duration = 100
@@ -131,8 +136,15 @@
/datum/surgery_step/cavity/place_item/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
- "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
+ for(var/obj/item/I in target.internal_organs)
+ if(!istype(I, /obj/item/organ))
+ IC = I
+ break
+ if(tool)
+ user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
+ "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
+ else
+ user.visible_message("[user] checks for items in [target]'s [target_zone].", "You check for items in [target]'s [target_zone]...")
target.custom_pain("The pain in your chest is living hell!",1)
..()
@@ -142,11 +154,12 @@
if(istype(tool, /obj/item/weapon/disk/nuclear))
user << "Central command would kill you if you implanted the disk into someone."
return 0//fail
- else
+
+ if(tool)
user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
"\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
- if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT))
- user << "\red You tear some vessels trying to fit such big object in this cavity."
+ if (IC || (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT)))
+ user << "\red You tear some vessels trying to fit the object in the cavity."
var/datum/wound/internal_bleeding/I = new ()
affected.wounds += I
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1)
@@ -155,39 +168,50 @@
target.internal_organs += tool
tool.loc = target
affected.cavity = 0
-
return 1
+ else
+ if(IC)
+ user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "You pull [IC] out of [target]'s [target_zone].")
+ user.put_in_hands(IC)
+ target.internal_organs -= IC
+ return 1
+ else
+ user << "You don't find anything in [target]'s [target_zone]."
+ return 0
+
//////////////////////////////////////////////////////////////////
// IMPLANT/ITEM REMOVAL SURGERY //
//////////////////////////////////////////////////////////////////
-///Fethas note:I might could condense this down but it would need to take out the part with poking around with a hemostat
/datum/surgery/cavity_implant_rem
name = "implant removal"
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/)
- possible_locs = list("chest","head")
+ possible_locs = list("chest","head")//head is for borers..i can put it elsewhere
/datum/surgery_step/cavity/implant_removal
+ name = "extract implant"
allowed_tools = list(
/obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
-
- min_duration = 80
- max_duration = 100
+ var/obj/item/weapon/implant/I = null
+ max_duration = 70
/datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \
+ I = locate(/obj/item/weapon/implant) in target
+ if(I)
+ user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].", "You begin to extract [I] from [target]'s [target_zone]...")
+ else
+ user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \
"You start poking around inside [target]'s [affected.name] with \the [tool]." )
target.custom_pain("The pain in your [affected.name] is living hell!",1)
..()
/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- var/obj/item/weapon/implant/I = locate(/obj/item/weapon/implant) in target
if (affected.implants.len)
var/obj/item/obj = affected.implants[1]
@@ -228,7 +252,7 @@
user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].")
else
qdel(I)
- target.sec_hud_set_implants()
+ //target.sec_hud_set_implants()
return 1
else if (affected.hidden)
user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index 3ea7fc49acd..bd11f11db1e 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -57,7 +57,6 @@
return 0
/datum/surgery_step/limb/
- priority = 3 // Must be higher than /datum/surgery_step/internal
can_infect = 0
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!hasorgans(target))
@@ -69,9 +68,9 @@
return !isnull(organ_data)
/datum/surgery_step/limb/attach
+ name = "attach limb"
allowed_tools = list(/obj/item/organ/external = 100)
- min_duration = 50
max_duration = 70
/datum/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -99,6 +98,7 @@
return 0
/datum/surgery_step/limb/connect
+ name = "connect limb"
allowed_tools = list(
/obj/item/weapon/hemostat = 100, \
/obj/item/stack/cable_coil = 75, \
@@ -106,7 +106,6 @@
)
can_infect = 1
- min_duration = 100
max_duration = 120
/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -139,9 +138,9 @@
return 0
/datum/surgery_step/limb/mechanize
+ name = "attach robotic limb"
allowed_tools = list(/obj/item/robot_parts = 100)
- min_duration = 80
max_duration = 100
/datum/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index 719cff9dd0c..35e5560e4d3 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -1,4 +1,4 @@
-//note i am putting External in robolimbs.
+datumvars//note i am putting External in robolimbs.
#define STUN_SET_AMOUNT 2
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index 9808f8d6233..0d6942d3b73 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -29,7 +29,11 @@ var/list/organ_cache = list()
var/freezer_update_period = 100
var/is_in_freezer = 0
-/obj/item/organ/Destroy()
+ var/sterile = 0 //can the organ be infected by germs?
+ var/tough = 0 //can organ be easily damaged?
+
+
+/*/obj/item/organ/Destroy()
if(!owner)
return ..()
@@ -49,7 +53,7 @@ var/list/organ_cache = list()
if(src in owner.contents)
owner.contents -= src
- return ..()
+ return ..()*/
@@ -113,7 +117,7 @@ var/list/organ_cache = list()
return
//Process infections
- if ((status & ORGAN_ROBOT) || (owner && owner.species && (owner.species.flags & IS_PLANT)))
+ if ((status & ORGAN_ROBOT) || (sterile) ||(owner && owner.species && (owner.species.flags & IS_PLANT)))
germ_level = 0
return
@@ -244,6 +248,8 @@ var/list/organ_cache = list()
//Note: external organs have their own version of this proc
/obj/item/organ/proc/take_damage(amount, var/silent=0)
+ if(tough)
+ return
if(src.status & ORGAN_ROBOT)
src.damage = between(0, src.damage + (amount * 0.8), max_damage)
else
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 5d3717a3d75..9a1476bdfbc 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -9,8 +9,6 @@
var/slot
vital = 0
var/organ_action_name = null
- var/sterile = 0 //can the organ be infected by germs?
- var/tough = 0 //can organ be easily damaged?
/obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0)
if(!iscarbon(M) || owner == M)
@@ -33,7 +31,6 @@
owner = null
if(M)
M.internal_organs -= src
- //M.internal_organs_by_name[src] -= src
if(vital && !special)
M.death()
@@ -46,6 +43,11 @@
/obj/item/organ/internal/proc/on_life()
return
+/obj/item/organ/internal/Destroy()
+ if(owner)
+ remove(owner, 1)
+ return ..()
+
/obj/item/organ/internal/proc/prepare_eat()
var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new
S.name = name
@@ -129,6 +131,7 @@
organ_tag = "lungs"
parent_organ = "chest"
slot = "lungs"
+ vital = 1
//Insert something neat here.
///obj/item/organ/internal/lungs/remove(mob/living/carbon/M, special = 0)
@@ -358,7 +361,8 @@
if(!owner)
return
-
+ if(lasthonk == 0)
+ lasthonk = world.time
if(lasthonk > world.time + 600|| lasthonk == 0)
lasthonk = world.time
owner << "HONK"
@@ -382,3 +386,37 @@
spawn(20)
if(thingy)
walk(thingy,0)
+
+
+/obj/item/organ/internal/beard
+ name = "beard organ"
+ desc = ""
+ icon_state = "liver"
+ origin_tech = "biotech=1"
+ w_class = 1
+ parent_organ = "head"
+ slot = "hair_organ"
+
+
+/obj/item/organ/internal/beard/on_life()
+
+ if(!owner)
+ return
+
+ if(istype(owner, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = owner
+ if(!(H.h_style == "Very Long Hair" || H.h_style == "Mowhawk"))
+ if(prob(10))
+ H.h_style = "Mohawk"
+ else
+ H.h_style = "Very Long Hair"
+ H.r_hair = 216
+ H.g_hair = 192
+ H.b_hair = 120
+ H.update_hair()
+ if(!(H.f_style == "Very Long Beard"))
+ H.f_style = "Very Long Beard"
+ H.r_facial = 216
+ H.g_facial = 192
+ H.b_facial = 120
+ H.update_fhair()
\ No newline at end of file
diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm
index 0a99983ca49..b99dd1575ab 100644
--- a/code/modules/surgery/organs/subtypes/xenos.dm
+++ b/code/modules/surgery/organs/subtypes/xenos.dm
@@ -15,12 +15,14 @@
///can be changed if xenos get an update..
/obj/item/organ/internal/xenos/insert(mob/living/carbon/M, special = 0)
..()
- for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers)
- verbs += P //at least until xeno powers are vamped to TG
+ for(var/P in alien_powers)
+ M.verbs |= P
+ //M.verbs |= alien_powers.Copy()
/obj/item/organ/internal/xenos/remove(mob/living/carbon/M, special = 0)
- for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers)
- verbs -= P
+ for(var/P in alien_powers)
+ M.verbs -= P
+ //M.verbs -= alien_powers.Copy()
..()
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 48a83ec62f5..2af5a44e88c 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -39,59 +39,6 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return affected && affected.open_enough_for_surgery()
-//////////////////////////////////////////////////////////////////
-// Dethrall Shadowling //
-//////////////////////////////////////////////////////////////////
-/datum/surgery/remove_thrall
- name = "clense contaminations"//RENAME MEH
- steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall)
- possible_locs = list("head")
-
-/datum/surgery_step/internal/dethrall
- allowed_tools = list(
- /obj/item/weapon/hemostat = 100, \
- /obj/item/weapon/wirecutters = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
- )
-
- min_duration = 120
- max_duration = 120
-
-/datum/surgery_step/internal/dethrall/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain")
-
-/datum/surgery_step/internal/dethrall/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/braincase = target.named_organ_parent("brain")
- user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...")
- target << "A small part of your [braincase] pulses with agony as the light impacts it."
- user.visible_message("[user] begins removing something from [target]'s [braincase].", \
- "You begin carefully extracting the tumor...")
- ..()
-
-/datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/braincase = target.named_organ_parent("brain")
- user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \
- "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.")
- ticker.mode.remove_thrall(target.mind,0)
- new /obj/item/organ/internal/shadowtumor(get_turf(target))
-
- return 1
-
-/datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/braincase = target.named_organ_parent("brain")
- if(prob(50))
- user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \
- "You fumble and tear out [target]'s tumor!")
- target.adjustBrainLoss(110) // This is so you can't just defib'n go
- ticker.mode.remove_thrall(target.mind,1)
-
- return 0
- else
- user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!")
- return 0
//////////////////////////////////////////////////////////////////
// ALIEN EMBRYO SURGERY //
@@ -100,7 +47,7 @@
// steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo)
// possible_locs = list("chest")
// disallowed_mob = (/mob/living/carbon/human/machine)
-
+//this is all handled bia organ mainpulation as an On_find
/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for..
allowed_tools = list(
@@ -110,7 +57,6 @@
)
blood_level = 2
- min_duration = 80
max_duration = 100
/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -165,16 +111,15 @@
/datum/surgery_step/internal/manipulate_organs
-
+ name = "manipulate organs"
allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0)
- var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55)
+ var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55)
var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20)
//Finish is just so you can close up after you do other things.
- var/implements_finsh = list(/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75)
+ var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75)
var/current_type
var/obj/item/organ/internal/I = null
var/obj/item/organ/external/affected = null
- min_duration = 70
max_duration = 90
/datum/surgery_step/internal/manipulate_organs/New()
@@ -342,361 +287,6 @@
//todo set up fail steps
-
-//////////////////////////////////////////////////////////////////
-// CHEST INTERNAL ORGAN SURGERY //
-//////////////////////////////////////////////////////////////////
-/*
-/datum/surgery_step/internal/fix_organ
- allowed_tools = list(
- /obj/item/stack/medical/advanced/bruise_pack= 100, \
- /obj/item/stack/medical/bruise_pack = 20
- )
-
- min_duration = 70
- max_duration = 90
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!affected)
- return
- var/is_organ_damaged = 0
- for(var/obj/item/organ/internal/I in affected.internal_organs)
- if(I.damage > 0 && I.robotic < 2)
- is_organ_damaged = 1
- break
- return ..() && is_organ_damaged
-
- begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/tool_name = "\the [tool]"
- if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
- tool_name = "regenerative membrane"
- else if (istype(tool, /obj/item/stack/medical/bruise_pack))
- tool_name = "the bandaid"
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- for(var/obj/item/organ/internal/I in affected.internal_organs)
- if(I && I.damage > 0)
- if(I.robotic < 2)
- if(!I.sterile)
- 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]." )
-
- target.custom_pain("The pain in your [affected.name] is living hell!",1)
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/tool_name = "\the [tool]"
- if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
- tool_name = "regenerative membrane"
- if (istype(tool, /obj/item/stack/medical/bruise_pack))
- tool_name = "the bandaid"
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- for(var/obj/item/organ/internal/I in affected.internal_organs)
- if(I)
- I.surgeryize()
- if(I && I.damage > 0)
- if(I.robotic < 2)
- user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \
- "\blue You treat damage to [target]'s [I.name] with [tool_name]." )
- I.damage = 0
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!")
- var/dam_amt = 2
-
- if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
- target.adjustToxLoss(5)
-
- else if (istype(tool, /obj/item/stack/medical/bruise_pack))
- dam_amt = 5
- target.adjustToxLoss(10)
- affected.createwound(CUT, 5)
-
- for(var/obj/item/organ/internal/I in affected.internal_organs)
- if(I && I.damage > 0)
- I.take_damage(dam_amt,0)
-
-/datum/surgery_step/internal/detatch_organ
-
- allowed_tools = list(
- /obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
- )
-
- min_duration = 90
- max_duration = 110
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- if (!..())
- return 0
-
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- if(!(affected && !(affected.status & ORGAN_ROBOT)))
- return 0
-
- surgery.current_organ = null
- surgery.organ_ref = null
-
- var/list/attached_organs = list()
- for(var/organ in affected.internal_organs)
- var/obj/item/organ/internal/I = organ
- if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
- attached_organs[I.organ_tag] = I
-
- var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
- if(!organ_to_remove)
- return 0
-
- surgery.current_organ = organ_to_remove
- surgery.organ_ref = attached_organs[organ_to_remove]
-
- return ..() && organ_to_remove
-
- begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- user.visible_message("[user] starts to separate [target]'s [surgery.current_organ] with \the [tool].", \
- "You start to separate [target]'s [surgery.current_organ] with \the [tool]." )
- target.custom_pain("The pain in your [affected.name] is living hell!",1)
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- user.visible_message("\blue [user] has separated [target]'s [surgery.current_organ] with \the [tool]." , \
- "\blue You have separated [target]'s [surgery.current_organ] with \the [tool].")
-
- var/obj/item/organ/internal/I = surgery.organ_ref
- if(I && istype(I))
- spread_germs_to_organ(I, user)
- I.status |= ORGAN_CUT_AWAY
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, rand(30,50), 1)
-
-/datum/surgery_step/internal/remove_organ
-
- allowed_tools = list(
- /obj/item/weapon/hemostat = 100, \
- /obj/item/weapon/wirecutters = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
- )
-
- min_duration = 60
- max_duration = 80
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- if (!..())
- return 0
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- if(!istype(affected))
- return 0
-
- surgery.current_organ = null
- surgery.organ_ref = null
-
- var/list/removable_organs = list()
- for(var/organ in affected.internal_organs)
- var/obj/item/organ/internal/I = organ
- if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
- removable_organs[I.organ_tag] = I
-
- var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs
- if(!organ_to_remove)
- return 0
-
- surgery.current_organ = organ_to_remove
- surgery.organ_ref = removable_organs[organ_to_remove]
- return ..()
-
- begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- user.visible_message("[user] starts removing [target]'s [surgery.current_organ] with \the [tool].", \
- "You start removing [target]'s [surgery.current_organ] with \the [tool].")
- target.custom_pain("Someone's ripping out your [surgery.current_organ]!",1)
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- user.visible_message("\blue [user] has removed [target]'s [surgery.current_organ] with \the [tool].", \
- "\blue You have removed [target]'s [surgery.current_organ] with \the [tool].")
-
- // Extract the organ!
- if(surgery.current_organ)
- var/obj/item/organ/internal/O = surgery.organ_ref
- if(O && istype(O))
-
- spread_germs_to_organ(O, user)
- O.remove(target)
- O.loc = get_turf(target)
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
- affected.createwound(BRUISE, 20)
-
-/datum/surgery_step/internal/replace_organ
- allowed_tools = list(
- /obj/item/organ/internal = 100
- )
-
- min_duration = 60
- max_duration = 80
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- var/obj/item/organ/internal/O = tool
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!affected) return
- var/organ_compatible
- var/organ_missing
-
- if(!istype(O))
- return 0
-
- if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT))
- user << "You cannot install a naked organ into a robotic body."
- return 2
-
- if(!target.species)
- user << "\red You have no idea what species this person is. Report this on the bug tracker."
- return 2
-
- var/o_is = (O.gender == PLURAL) ? "are" : "is"
- var/o_a = (O.gender == PLURAL) ? "" : "a "
- var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't"
-
- if(O.organ_tag == "limb")
- return 0
- else if(target.species.has_organ[O.organ_tag])//need to change this around for cybernetic implants
-
- if(O.damage > (O.max_damage * 0.75))
- user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted."
- return 2
-
- if(!target.get_int_organ(O))
- organ_missing = 1
- else
- user << "\red \The [target] already has [o_a][O.organ_tag]."
- return 2
-
- if(O && affected.limb_name == O.parent_organ)
- organ_compatible = 1
- else
- user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]."
- return 2
- else
- user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]."
- return 2
-
- return ..() && organ_missing && organ_compatible
-
- begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \
- "You start transplanting \the [tool] into [target]'s [affected.name].")
- target.custom_pain("Someone's rooting around in your [affected.name]!",1)
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \
- "\blue You have transplanted \the [tool] into [target]'s [affected.name].")
- user.drop_item(tool)
- var/obj/item/organ/internal/O = tool
- if(istype(O))
- O.insert(target)
- spread_germs_to_organ(O, user)
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \
- "\red Your hand slips, damaging \the [tool]!")
- var/obj/item/organ/internal/I = tool
- if(istype(I))
- I.take_damage(rand(3,5),0)
-
-/datum/surgery_step/internal/attach_organ
- allowed_tools = list(
- /obj/item/weapon/FixOVein = 100, \
- /obj/item/stack/cable_coil = 75
- )
-
- min_duration = 100
- max_duration = 120
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
-
- if (!..())
- return 0
-
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- if(!istype(affected))
- return 0
-
- surgery.current_organ = null
- surgery.organ_ref = null
-
- var/list/removable_organs = list()
- for(var/organ in affected.internal_organs)
- var/obj/item/organ/internal/I = organ
- if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone)
- removable_organs[I.organ_tag] = I
-
- var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
- if(!organ_to_replace)
- return 0
-
- surgery.current_organ = organ_to_replace
- surgery.organ_ref = removable_organs[organ_to_replace]
- return ..()
-
- begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- user.visible_message("[user] begins reattaching [target]'s [surgery.current_organ] with \the [tool].", \
- "You start reattaching [target]'s [surgery.current_organ] with \the [tool].")
- target.custom_pain("Someone's digging needles into your [surgery.current_organ]!",1)
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- user.visible_message("\blue [user] has reattached [target]'s [surgery.current_organ] with \the [tool]." , \
- "\blue You have reattached [target]'s [surgery.current_organ] with \the [tool].")
-
- var/obj/item/organ/internal/I = surgery.organ_ref
- if(I && istype(I))
- I.status &= ~ORGAN_CUT_AWAY
- spread_germs_to_organ(I, user)
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!")
- affected.createwound(BRUISE, 20)
-
-*/
//////////////////////////////////////////////////////////////////
// HEART SURGERY //
//////////////////////////////////////////////////////////////////
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index b0aaea718a1..1121810b837 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -5,7 +5,7 @@
/datum/surgery_step/fix_vein
- priority = 2
+ name = "mend internal bleeding"
allowed_tools = list(
/obj/item/weapon/FixOVein = 100, \
/obj/item/stack/cable_coil = 75
@@ -13,7 +13,6 @@
can_infect = 1
blood_level = 1
- min_duration = 70
max_duration = 90
/datum/surgery_step/fix_vein/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -57,7 +56,7 @@
return 0
/datum/surgery_step/fix_dead_tissue //Debridement
- priority = 2
+ name = "remove dead tissue"
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
@@ -67,7 +66,6 @@
can_infect = 1
blood_level = 1
- min_duration = 110
max_duration = 160
/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -105,7 +103,7 @@
return 0
/datum/surgery_step/treat_necrosis
- priority = 2
+ name = "treat necrosis"
allowed_tools = list(
/obj/item/weapon/reagent_containers/dropper = 100,
/obj/item/weapon/reagent_containers/glass/bottle = 75,
@@ -117,7 +115,6 @@
can_infect = 0
blood_level = 0
- min_duration = 50
max_duration = 60
/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -179,3 +176,54 @@
"\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!")
//no damage or anything, just wastes medicine
+
+
+//////////////////////////////////////////////////////////////////
+// Dethrall Shadowling //
+//////////////////////////////////////////////////////////////////
+/datum/surgery/remove_thrall
+ name = "clense contaminations"//RENAME MEH
+ steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall)
+ possible_locs = list("head")
+
+/datum/surgery/remove_thrall/can_start(mob/user, mob/living/carbon/target)
+ return is_thrall(target)//would this be too meta?
+
+/datum/surgery_step/dethrall
+ name = "cleanse contamination"
+ allowed_tools = list(/obj/item/device/flash = 100, /obj/item/device/flashlight/pen = 80, /obj/item/device/flashlight = 40)
+
+ max_duration = 120
+
+/datum/surgery_step/internal/dethrall/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
+ if (!hasorgans(target))
+ return
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain")
+
+/datum/surgery_step/internal/dethrall/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
+ var/braincase = target.named_organ_parent("brain")
+ user.visible_message("[user] reaches into [target]'s head with [tool].", "You begin aligning [tool]'s light to the tumor on [target]'s brain...")
+ target << "A small part of your [braincase] pulses with agony as the light impacts it."
+ ..()
+
+/datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
+ user.visible_message("[user] shines light onto the tumor in [target]'s head!", "You cleanse the contamination from [target]'s brain!")
+ ticker.mode.remove_thrall(target.mind,0)
+ target.visible_message("A strange black mass falls from [target]'s head!")
+ new /obj/item/organ/internal/shadowtumor(get_turf(target))
+
+ return 1
+
+/datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
+ var/braincase = target.named_organ_parent("brain")
+ if(prob(50))
+ user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \
+ "You fumble and tear out [target]'s tumor!")
+ target.adjustBrainLoss(110) // This is so you can't just defib'n go
+ ticker.mode.remove_thrall(target.mind,1)
+
+ return 0
+ else
+ user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!")
+ return 0
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 6df377b56d1..9a1460d98f2 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -55,7 +55,6 @@
/obj/item/weapon/kitchen/utensil/knife = 50
)
- min_duration = 90
max_duration = 110
/datum/surgery_step/robotics/external/unscrew_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -89,7 +88,6 @@
/obj/item/weapon/kitchen/utensil/ = 50
)
- min_duration = 30
max_duration = 40
/datum/surgery_step/robotics/external/open_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -123,7 +121,6 @@
/obj/item/weapon/kitchen/utensil = 50
)
- min_duration = 70
max_duration = 100
/datum/surgery_step/robotics/external/close_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -157,7 +154,6 @@
/obj/item/weapon/gun/energy/plasmacutter = 50
)
- min_duration = 50
max_duration = 60
/datum/surgery_step/robotics/external/repair_brute/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -198,7 +194,6 @@
/obj/item/stack/cable_coil = 100
)
- min_duration = 50
max_duration = 60
/datum/surgery_step/robotics/external/repair_burn/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -242,10 +237,10 @@
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_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
var/obj/item/organ/external/affected = null
- min_duration = 70
max_duration = 90
/datum/surgery_step/robotics/manipulate_robotic_organs/New()
@@ -363,6 +358,12 @@
target.custom_pain("The pain in your [affected.name] is living hell!",1)
+ else if(implement_type in implements_finish)
+ current_type = "finish"
+ user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \
+ "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].")
+
+
..()
/datum/surgery_step/robotics/manipulate_robotic_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -376,13 +377,12 @@
user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \
"\blue You repair [target]'s [I.name] with [tool]." )
I.damage = 0
- return 1
else if(current_type == "insert")
var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ)
var/off_tool = user.get_inactive_hand()
I = off_tool
- user.drop_item()
+ //user.drop_item()
I.insert(target)
user.visible_message("\blue [user] has reattached [target]'s [I] with \the [tool]." , \
"\blue You have reattached [target]'s [I] with \the [tool].")
@@ -420,6 +420,13 @@
else
user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!",
"You can't extract anything from [target]'s [parse_zone(target_zone)]!")
+ else if(current_type == "finish")
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \
+ "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].")
+ affected.open = 0
+ affected.germ_level = 0
+ return 1
return 0
/datum/surgery_step/robotics/manipulate_robotic_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -450,6 +457,10 @@
else if (current_type == "install")
user.visible_message("\red [user]'s hand slips!.", \
"\red Your hand slips!")
+ else if(current_type == "finish")
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].",
+ "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].")
return -1
@@ -459,7 +470,6 @@
/obj/item/device/mmi = 100
)
- min_duration = 60
max_duration = 80
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm
index a2b6dc521c6..c822dc0d8b4 100644
--- a/code/modules/surgery/slime.dm
+++ b/code/modules/surgery/slime.dm
@@ -21,7 +21,6 @@
/obj/item/weapon/shard = 50, \
)
- min_duration = 30
max_duration = 50
/datum/surgery_step/slime/cut_flesh/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
@@ -50,7 +49,6 @@
/obj/item/weapon/shard = 50, \
)
- min_duration = 30
max_duration = 50
/datum/surgery_step/slime/cut_innards/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
@@ -77,7 +75,6 @@
/obj/item/weapon/hatchet = 75
)
- min_duration = 50
max_duration = 70
/datum/surgery_step/slime/saw_core/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 4b10ee37fd2..075c9199534 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -57,7 +57,6 @@
var/implement_type = null
// duration of the step
- var/min_duration = 0
var/max_duration = 0
var/name
@@ -103,13 +102,18 @@
surgery.step_in_progress = 0
return
- if(do_after(user, max_duration, target = target))
- var/advance = 0
- var/prob_chance = 100
+ var/advance = 0
+ var/prob_chance = 100
+
+ if(implement_type) //this means it isn't a require nd or any item step.
+ prob_chance = min(allowed_tools[implement_type], 100)
+ prob_chance *= get_location_modifier(target)
+
+ if(prob_chance > 100)//if we are using a super tool
+ max_duration = max_duration - 50 //PLACEHOLDER VALUES
+
+ if(do_after(user, max_duration, target = target))
- if(implement_type) //this means it isn't a require nd or any item step.
- prob_chance = allowed_tools[implement_type]
- prob_chance *= get_location_modifier(target)
if(prob(prob_chance) || isrobot(user))
if(end_step(user, target, target_zone, tool, surgery))
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 2ccfad81de2..74d0cb05ffd 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -82,9 +82,9 @@
/*
* Researchable Scalpels
*/
-/obj/item/weapon/scalpel/laser1
+/obj/item/weapon/scalpel/laser1 //lasers also count as catuarys
name = "laser scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
+ desc = "A scalpel augmented with a directed laser. This one looks basic and could be improved."
icon_state = "scalpel_laser1_on"
item_state = "scalpel"
damtype = "fire"
@@ -92,7 +92,7 @@
/obj/item/weapon/scalpel/laser2
name = "laser scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
+ desc = "A scalpel augmented with a directed laser. This one looks somewhat advanced."
icon_state = "scalpel_laser2_on"
item_state = "scalpel"
damtype = "fire"
@@ -100,13 +100,13 @@
/obj/item/weapon/scalpel/laser3
name = "laser scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
+ desc = "A scalpel augmented with a directed laser.. This one looks to be the pinnacle of precision energy cutlery!"
icon_state = "scalpel_laser3_on"
item_state = "scalpel"
damtype = "fire"
hitsound = 'sound/weapons/sear.ogg'
-/obj/item/weapon/scalpel/manager
+/obj/item/weapon/scalpel/manager //super tool! Retractor/hemostat
name = "incision management system"
desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
icon_state = "scalpel_manager_on"
diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi
index f92115bf33b..0d4e61b7cac 100644
Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi
index cc7c2527e54..94fe615fb56 100644
Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 04ae145306e..67dadcd2a90 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ