home streach.

This commit is contained in:
Aurorablade
2016-01-26 20:53:13 -05:00
parent 42d8ac68b5
commit 53f410272a
22 changed files with 260 additions and 595 deletions
@@ -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 << "<span class='noticealien'>You must be conscious to do this.</span>"
return 0
+4 -1
View File
@@ -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
+9 -5
View File
@@ -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)
+6 -4
View File
@@ -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)
+13 -4
View File
@@ -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)
+28 -98
View File
@@ -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("<span class='info'> [user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].</span>", \
"<span class='info'> You have made a bloodless incision on [target]'s [affected.name] with \the [tool].</span>",)
//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("<span class='danger'> [user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</span>", \
"\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
+43 -19
View File
@@ -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].", "<span class='notice'>You check for items in [target]'s [target_zone]...</span>")
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]!", "<span class='notice'>You pull [IC] out of [target]'s [target_zone].</span>")
user.put_in_hands(IC)
target.internal_organs -= IC
return 1
else
user << "<span class='warning'>You don't find anything in [target]'s [target_zone].</span>"
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].", "<span class='notice'>You begin to extract [I] from [target]'s [target_zone]...</span>")
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]!", "<span class='notice'>You place [I] into [case].</span>")
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].", \
+3 -4
View File
@@ -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)
@@ -1,4 +1,4 @@
//note i am putting External in robolimbs.
datumvars//note i am putting External in robolimbs.
#define STUN_SET_AMOUNT 2
+9 -3
View File
@@ -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
+42 -4
View File
@@ -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 << "<font color='red' size='7'>HONK</font>"
@@ -382,3 +386,37 @@
spawn(20)
if(thingy)
walk(thingy,0)
/obj/item/organ/internal/beard
name = "beard organ"
desc = "<placeholder>"
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()
@@ -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()
..()
+4 -414
View File
@@ -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].", "<span class='notice'>You begin looking for foreign influences on [target]'s brain...")
target << "<span class='boldannounce'>A small part of your [braincase] pulses with agony as the light impacts it.</span>"
user.visible_message("[user] begins removing something from [target]'s [braincase].</span>", \
"<span class='notice'>You begin carefully extracting the tumor...</span>")
..()
/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("<span class='notice'>[user] carefully extracts the tumor from [target]'s brain!</span>", \
"<span class='notice'>You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.</span>")
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("<span class='warning'>[user] slips and rips the tumor out from [target]'s [braincase]!</span>", \
"<span class='warning'><b>You fumble and tear out [target]'s tumor!</span>")
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("<span class='warning'>[user]'s hand slips and fumbles! Luckily, they didn't damage anything!</span>")
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 << "<span class='danger'>You cannot install a naked organ into a robotic body.</span>"
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 //
//////////////////////////////////////////////////////////////////
+54 -6
View File
@@ -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].", "<span class='notice'>You begin aligning [tool]'s light to the tumor on [target]'s brain...</span>")
target << "<span class='boldannounce'>A small part of your [braincase] pulses with agony as the light impacts it.</span>"
..()
/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!", "<span class='notice'>You cleanse the contamination from [target]'s brain!</span>")
ticker.mode.remove_thrall(target.mind,0)
target.visible_message("<span class='warning'>A strange black mass falls from [target]'s head!</span>")
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("<span class='warning'>[user] slips and rips the tumor out from [target]'s [braincase]!</span>", \
"<span class='warning'><b>You fumble and tear out [target]'s tumor!</span>")
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("<span class='warning'>[user]'s hand slips and fumbles! Luckily, they didn't damage anything!</span>")
return 0
+19 -9
View File
@@ -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)]!",
"<span class='notice'>You can't extract anything from [target]'s [parse_zone(target_zone)]!</span>")
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)
-3
View File
@@ -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)
+11 -7
View File
@@ -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))
+5 -5
View File
@@ -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"