diff --git a/code/WorkInProgress/Cib/MedicalSideEffects.dm b/code/WorkInProgress/Cib/MedicalSideEffects.dm
index 3419cf54426..cfaea6a7b07 100644
--- a/code/WorkInProgress/Cib/MedicalSideEffects.dm
+++ b/code/WorkInProgress/Cib/MedicalSideEffects.dm
@@ -23,11 +23,11 @@
/datum/medical_effect/proc/cure(mob/living/carbon/human/H)
for(var/R in cures)
if(H.reagents.has_reagent(R))
- H <<"\red [cure_message]"
+ if (cure_message)
+ H <<"\blue [cure_message]"
return 1
return 0
-
// MOB HELPERS
// ===========
/mob/living/carbon/human/var/list/datum/medical_effect/side_effects = list()
@@ -39,16 +39,20 @@
M.start = life_tick
return
- var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect
+ var/T = side_effects[name]
+ if (!T)
+ return
- for(var/T in L)
- var/datum/medical_effect/M = new T
- if(M.name == name)
- M.strength = strength
- M.start = life_tick
- side_effects += M
+ var/datum/medical_effect/M = new T
+ if(M.name == name)
+ M.strength = strength
+ M.start = life_tick
+ side_effects += M
/mob/living/carbon/human/proc/handle_medical_side_effects()
+ //Going to handle those things only every few ticks.
+ if(life_tick % 15 != 0)
+ return 0
var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect
for(var/T in L)
@@ -60,18 +64,14 @@
for (var/datum/medical_effect/M in side_effects)
if (!M) continue
var/strength_percent = sin((life_tick - M.start) / 2)
- log_debug ("[src], tick [life_tick] : Processing [M], Current phase: [strength_percent]")
// Only do anything if the effect is currently strong enough
if(strength_percent >= 0.4)
- log_debug ("[src], tick [life_tick] : Active phase ; strength [M.strength]")
if (M.cure(src) || M.strength > 50)
- log_debug ("[src], tick [life_tick] : [M] cured or reached end of lifecycle")
side_effects -= M
- del(M)
+ M = null
else
if(life_tick % 45 == 0)
- log_debug ("[src], tick [life_tick] : Activating [M] ")
M.on_life(src, strength_percent*M.strength)
// Effect slowly growing stronger
M.strength+=0.08
@@ -92,7 +92,6 @@
H.custom_pain("You feel a throbbing pain in your head!",1)
if(31 to INFINITY)
H.custom_pain("You feel an excrutiating pain in your head!",1)
- H.adjustBrainLoss(1)
// BAD STOMACH
// ===========
@@ -110,7 +109,6 @@
H.custom_pain("Your stomach hurts.",0)
if(31 to INFINITY)
H.custom_pain("You feel sick.",1)
- H.adjustToxLoss(1)
// CRAMPS
// ======
@@ -129,7 +127,6 @@
if(31 to INFINITY)
H.emote("me",1,"flinches as all the muscles in their body cramp up.")
H.custom_pain("There's pain all over your body.",1)
- H.adjustToxLoss(1)
// ITCH
// ====
@@ -147,5 +144,4 @@
H.custom_pain("You want to scratch your itch badly.",0)
if(31 to INFINITY)
H.emote("me",1,"shivers slightly.")
- H.custom_pain("This itch makes it really hard to concentrate.",1)
- H.adjustToxLoss(1)
\ No newline at end of file
+ H.custom_pain("This itch makes it really hard to concentrate.",1)
\ No newline at end of file
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index da3f4cd3b9c..d4c7f2b9df3 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -16,6 +16,7 @@ var/global/list/chemical_reactions_list //list of all /datum/chemical_reactio
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
var/global/list/landmarks_list = list() //list of all landmarks created
var/global/list/surgery_steps = list() //list of all surgery steps |BS12
+var/global/list/side_effects = list() //list of all medical sideeffects types by thier names |BS12
var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking.
//Languages/species/whitelist.
@@ -76,6 +77,13 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
surgery_steps += S
sort_surgeries()
+ //Medical side effects. List all effects by their names
+ paths = typesof(/datum/medical_effect)-/datum/medical_effect
+ for(var/T in paths)
+ var/datum/medical_effect/M = new T
+ side_effects[M.name] = T
+
+
//Languages and species.
paths = typesof(/datum/language)-/datum/language
for(var/T in paths)
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index c192e2c765c..7c17f882cac 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -92,7 +92,7 @@
I.take_damage(rand(3,5))
//Special effects for limbs.
- if(E.name in list("l_hand","l_arm","r_hand","r_arm"))
+ if(E.name in list("l_hand","l_arm","r_hand","r_arm") && (broken||malfunction))
var/obj/item/c_hand //Getting what's in this hand
if(E.name == "l_hand" || E.name == "l_arm")
c_hand = l_hand
@@ -100,8 +100,7 @@
c_hand = r_hand
if (c_hand)
- if (broken||malfunction)
- u_equip(c_hand)
+ u_equip(c_hand)
if(broken)
emote("me", 1, "screams in pain and drops what they were holding in their [E.display_name?"[E.display_name]":"[E]"]!")
@@ -125,39 +124,11 @@
paralysis = 10
//Check arms and legs for existence
- var/canstand_l = 1 //Can stand on left leg
- var/canstand_r = 1 //Can stand on right leg
- var/legispeg_l=0
- var/legispeg_r=0
- var/hasleg_l = 1 //Have left leg
- var/hasleg_r = 1 //Have right leg
- var/hasarm_l = 1 //Have left arm
- var/hasarm_r = 1 //Have right arm
- var/datum/organ/external/E
- E = get_organ("l_leg")
- if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
- canstand_l = 0
- hasleg_l = 0
- legispeg_l=E.status & ORGAN_PEG
- E = get_organ("r_leg")
- if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
- canstand_r = 0
- hasleg_r = 0
- legispeg_r=E.status & ORGAN_PEG
- E = get_organ("l_foot")
- if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED) && !legispeg_l)
- canstand_l = 0
- E = get_organ("r_foot")
- if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED) && !legispeg_r)
- canstand_r = 0
- E = get_organ("l_arm")
- if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
- hasarm_l = 0
- E = get_organ("r_arm")
- if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
- hasarm_r = 0
+ can_stand = 2 //can stand on both legs
+ var/datum/organ/external/E = organs_by_name["l_foot"]
+ if(E.status & ORGAN_DESTROYED)
+ can_stand--
- // Can stand if have at least one full leg (with leg and foot parts present, or an entire pegleg)
- // Has limbs to move around if at least one arm or leg is at least partially there
- can_stand = canstand_l||canstand_r
- has_limbs = hasleg_l||hasleg_r||hasarm_l||hasarm_r
+ E = organs_by_name["r_foot"]
+ if(E.status & ORGAN_DESTROYED)
+ can_stand--
\ No newline at end of file
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 1001405ecf1..14171bd8697 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -44,7 +44,6 @@
// how often wounds should be updated, a higher number means less often
var/wound_update_accuracy = 1
- var/has_fat=0 // Has a _fat variant
/datum/organ/external/New(var/datum/organ/external/P)
if(P)
@@ -77,18 +76,14 @@
if(status & ORGAN_DESTROYED)
return 0
- if(status & (ORGAN_ROBOT|ORGAN_PEG))
+ if(status & ORGAN_ROBOT)
brute *= 0.66 //~2/3 damage for ROBOLIMBS
burn *= 0.66 //~2/3 damage for ROBOLIMBS
//If limb took enough damage, try to cut or tear it off
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
if(config.limbs_can_break && brute_dam >= max_damage * config.organ_health_multiplier)
- if(body_part != HEAD)
- if ( (sharp && prob(8 * brute)) || (brute > 20 && prob(2 * brute)) )
- droplimb(1)
- return
- else if( (sharp && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
+ if( (sharp && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
droplimb(1)
return
@@ -104,7 +99,7 @@
if(used_weapon)
add_autopsy_data("[used_weapon]", brute + burn)
- var/can_cut = (prob(brute*2) || sharp) && !(status & (ORGAN_ROBOT|ORGAN_PEG))
+ var/can_cut = (prob(brute*2) || sharp) && !(status & ORGAN_ROBOT)
// If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking
if((brute_dam + burn_dam + brute + burn) < max_damage || !config.limbs_can_break)
if(brute)
@@ -138,7 +133,7 @@
burn = max(0, burn - can_inflict)
//If there are still hurties to dispense
if (burn || brute)
- if (status & (ORGAN_ROBOT|ORGAN_PEG))
+ if (status & ORGAN_ROBOT)
droplimb(1) //Robot limbs just kinda fail at full damage.
else
//List organs we can pass it to
@@ -165,10 +160,6 @@
if(status & ORGAN_ROBOT && !robo_repair)
return
- // Can't fix peglegs.
- if(status & ORGAN_PEG)
- return
-
//Heal damage on the individual wounds
for(var/datum/wound/W in wounds)
if(brute == 0 && burn == 0)
@@ -191,6 +182,28 @@
var/result = update_icon()
return result
+/*
+This function completely restores a damaged organ to perfect condition.
+*/
+/datum/organ/external/proc/rejuvenate()
+ damage_state = "00"
+ status = 0
+ perma_injury = 0
+ brute_dam = 0
+ burn_dam = 0
+
+ // handle internal organs
+ for(var/datum/organ/internal/current_organ in internal_organs)
+ current_organ.rejuvenate()
+
+ // remove embedded objects and drop them on the floor
+ for(var/obj/implanted_object in implants)
+ if(!istype(implanted_object,/obj/item/weapon/implant)) // We don't want to remove REAL implants. Just shrapnel etc.
+ implanted_object.loc = owner.loc
+ implants -= implanted_object
+
+ owner.updatehealth()
+
/datum/organ/external/proc/createwound(var/type = CUT, var/damage)
if(damage == 0) return
@@ -226,7 +239,7 @@
//Possibly trigger an internal wound, too.
var/local_damage = brute_dam + burn_dam + damage
- if(damage > 10 && type != BURN && local_damage > 20 && prob(damage) && !(status & (ORGAN_ROBOT|ORGAN_PEG)))
+ if(damage > 10 && type != BURN && local_damage > 20 && prob(damage) && !(status & ORGAN_ROBOT))
var/datum/wound/internal_bleeding/I = new (15)
wounds += I
owner.custom_pain("You feel something rip in your [display_name]!", 1)
@@ -270,13 +283,12 @@
return
//Bone fracurtes
- if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(status & (ORGAN_ROBOT|ORGAN_PEG)) && !(istype(owner, /mob/living/carbon/human/slime)))
+ if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(status & ORGAN_ROBOT))
src.fracture()
if(!(status & ORGAN_BROKEN))
perma_injury = 0
update_germs()
- update_icon()
return
//Updating germ levels. Handles organ germ levels and necrosis.
@@ -285,10 +297,6 @@
#define GANGREN_LEVEL_TERMINAL 2500
#define GERM_TRANSFER_AMOUNT germ_level/500
/datum/organ/external/proc/update_germs()
- if(status & (ORGAN_ROBOT|ORGAN_PEG)) //how does robot limb have da germs?
- if(germ_level > 0)
- germ_level = 0
- return
if(germ_level > 0 && owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
//Syncing germ levels with external wounds
for(var/datum/wound/W in wounds)
@@ -304,7 +312,7 @@
if(germ_level > GANGREN_LEVEL_TWO)
germ_level++
owner.adjustToxLoss(1)
-
+/*
if(germ_level > GANGREN_LEVEL_TERMINAL)
if (!(status & ORGAN_DEAD))
status |= ORGAN_DEAD
@@ -313,17 +321,17 @@
if (prob(10)) //Spreading the fun
if (children) //To child organs
for (var/datum/organ/external/child in children)
- if (!(child.status & (ORGAN_DEAD|ORGAN_DESTROYED|ORGAN_ROBOT|ORGAN_PEG)))
+ if (!(child.status & (ORGAN_DEAD|ORGAN_DESTROYED|ORGAN_ROBOT)))
child.germ_level += round(GERM_TRANSFER_AMOUNT)
if (parent)
- if (!(parent.status & (ORGAN_DEAD|ORGAN_DESTROYED|ORGAN_ROBOT|ORGAN_PEG)))
+ if (!(parent.status & (ORGAN_DEAD|ORGAN_DESTROYED|ORGAN_ROBOT)))
parent.germ_level += round(GERM_TRANSFER_AMOUNT)
+*/
-
-//Updating wounds. Handles wound natural healing, internal bleedings and infections
+//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections
/datum/organ/external/proc/update_wounds()
- if((status & (ORGAN_ROBOT|ORGAN_PEG))) //Robotic limbs don't heal or get worse.
+ if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse.
return
for(var/datum/wound/W in wounds)
@@ -335,18 +343,21 @@
// Internal wounds get worse over time. Low temperatures (cryo) stop them.
if(W.internal && !W.is_treated() && owner.bodytemperature >= 170)
- if(!owner.reagents.has_reagent("bicaridine")) //bicard stops internal wounds from growing bigger with time
+ if(!owner.reagents.has_reagent("bicaridine")) //bicard stops internal wounds from growing bigger with time, and also stop bleeding
W.open_wound(0.1 * wound_update_accuracy)
- owner.vessel.remove_reagent("blood",0.07 * W.damage * wound_update_accuracy)
+ owner.vessel.remove_reagent("blood",0.05 * W.damage * wound_update_accuracy)
+
+ owner.vessel.remove_reagent("blood",0.02 * W.damage * wound_update_accuracy)//Bicaridine slows Internal Bleeding
if(prob(1 * wound_update_accuracy))
owner.custom_pain("You feel a stabbing pain in your [display_name]!",1)
- //overdose of bicaridine begins healing IB
- if(owner.reagents.get_reagent_amount("bicaridine") >= 30)
- W.damage = max(0, W.damage - 0.2)
+ //overdose of bicaridine begins healing IB
+ if(owner.reagents.get_reagent_amount("bicaridine") >= 30)
+ W.damage = max(0, W.damage - 0.2)
// slow healing
var/heal_amt = 0
+
if (W.damage < 15) //this thing's edges are not in day's travel of each other, what healing?
heal_amt += 0.2
@@ -370,6 +381,8 @@
// sync the organ's damage with its wounds
src.update_damages()
+ if (update_icon())
+ owner.UpdateDamageIcon(1)
//Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status.
/datum/organ/external/proc/update_damages()
@@ -384,7 +397,7 @@
else if(W.damage_type == BURN)
burn_dam += W.damage
- if(!(status & (ORGAN_ROBOT|ORGAN_PEG)) && W.bleeding())
+ if(!(status & ORGAN_ROBOT) && W.bleeding())
W.bleed_timer--
status |= ORGAN_BLEEDING
@@ -402,10 +415,6 @@
var/n_is = damage_state_text()
if (n_is != damage_state)
damage_state = n_is
- if(status & ORGAN_DESTROYED)
- owner.update_body(1)
- else
- owner.UpdateDamageIcon(1)
return 1
return 0
@@ -491,23 +500,11 @@
if(LEG_RIGHT)
if(status & ORGAN_ROBOT)
organ = new /obj/item/robot_parts/r_leg(owner.loc)
- else if(status & ORGAN_PEG)
- //organ = new /obj/item/stack/sheet/wood(owner.loc)
- owner.visible_message(\
- "\red \The [owner]'s [display_name] snaps!",\
- "\red Your [display_name] snaps!",\
- "You hear wood being split.")
else
organ= new /obj/item/weapon/organ/r_leg(owner.loc, owner)
if(LEG_LEFT)
if(status & ORGAN_ROBOT)
organ = new /obj/item/robot_parts/l_leg(owner.loc)
- else if(status & ORGAN_PEG)
- //organ = new /obj/item/stack/sheet/wood(owner.loc)
- owner.visible_message(\
- "\red \The [owner]'s [display_name] snaps!",\
- "\red Your [display_name] snaps!",\
- "You hear wood being split.")
else
organ= new /obj/item/weapon/organ/l_leg(owner.loc, owner)
if(HAND_RIGHT)
@@ -549,7 +546,7 @@
var/lol = pick(cardinal)
step(organ,lol)
- owner.regenerate_icons()
+ owner.update_body(1)
/****************************************************
@@ -596,24 +593,11 @@
src.status &= ~ORGAN_SPLINTED
src.status &= ~ORGAN_ATTACHABLE
src.status &= ~ORGAN_DESTROYED
- src.status &= ~ORGAN_PEG
src.status |= ORGAN_ROBOT
for (var/datum/organ/external/T in children)
if(T)
T.robotize()
-/datum/organ/external/proc/peggify()
- src.status &= ~ORGAN_BROKEN
- src.status &= ~ORGAN_BLEEDING
- src.status &= ~ORGAN_SPLINTED
- src.status &= ~ORGAN_ATTACHABLE
- src.status &= ~ORGAN_DESTROYED
- src.status &= ~ORGAN_ROBOT
- src.status |= ORGAN_PEG
- for (var/datum/organ/external/T in children)
- if(T)
- T.droplimb(1,1)
-
/datum/organ/external/proc/mutate()
src.status |= ORGAN_MUTATED
owner.update_body()
@@ -631,22 +615,11 @@
return 1
return 0
-/datum/organ/external/get_icon(gender="",isFat=0)
- //stand_icon = new /icon(icobase, "torso_[g][fat?"_fat":""]")
- if (status & ORGAN_ROBOT)
- return new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
- if(gender)
- gender="_[gender]"
- var/fat=""
- if(isFat && has_fat)
- fat="_fat"
- var/icon_state="[icon_name][gender][fat]"
- var/baseicon=owner.race_icon
+/datum/organ/external/get_icon(gender="")
if (status & ORGAN_MUTATED)
- baseicon=owner.deform_icon
- if (status & ORGAN_PEG)
- baseicon='icons/mob/human_races/o_peg.dmi'
- return new /icon(baseicon, icon_state)
+ return new /icon(owner.deform_icon, "[icon_name][gender ? "_[gender]" : ""]")
+ else
+ return new /icon(owner.race_icon, "[icon_name][gender ? "_[gender]" : ""]")
/datum/organ/external/proc/is_usable()
@@ -661,9 +634,8 @@
icon_name = "torso"
display_name = "chest"
max_damage = 75
- min_broken_damage = 55
+ min_broken_damage = 40
body_part = UPPER_TORSO
- has_fat=1
/datum/organ/external/groin
@@ -671,7 +643,7 @@
icon_name = "groin"
display_name = "groin"
max_damage = 50
- min_broken_damage = 40
+ min_broken_damage = 30
body_part = LOWER_TORSO
/datum/organ/external/l_arm
@@ -679,7 +651,7 @@
display_name = "left arm"
icon_name = "l_arm"
max_damage = 50
- min_broken_damage = 30
+ min_broken_damage = 20
body_part = ARM_LEFT
/datum/organ/external/l_leg
@@ -687,7 +659,7 @@
display_name = "left leg"
icon_name = "l_leg"
max_damage = 50
- min_broken_damage = 30
+ min_broken_damage = 20
body_part = LEG_LEFT
icon_position = LEFT
@@ -696,7 +668,7 @@
display_name = "right arm"
icon_name = "r_arm"
max_damage = 50
- min_broken_damage = 30
+ min_broken_damage = 20
body_part = ARM_RIGHT
/datum/organ/external/r_leg
@@ -704,7 +676,7 @@
display_name = "right leg"
icon_name = "r_leg"
max_damage = 50
- min_broken_damage = 30
+ min_broken_damage = 20
body_part = LEG_RIGHT
icon_position = RIGHT
@@ -713,7 +685,7 @@
display_name = "left foot"
icon_name = "l_foot"
max_damage = 30
- min_broken_damage = 25
+ min_broken_damage = 15
body_part = FOOT_LEFT
icon_position = LEFT
@@ -722,7 +694,7 @@
display_name = "right foot"
icon_name = "r_foot"
max_damage = 30
- min_broken_damage = 25
+ min_broken_damage = 15
body_part = FOOT_RIGHT
icon_position = RIGHT
@@ -731,7 +703,7 @@
display_name = "right hand"
icon_name = "r_hand"
max_damage = 30
- min_broken_damage = 25
+ min_broken_damage = 15
body_part = HAND_RIGHT
/datum/organ/external/l_hand
@@ -739,7 +711,7 @@
display_name = "left hand"
icon_name = "l_hand"
max_damage = 30
- min_broken_damage = 25
+ min_broken_damage = 15
body_part = HAND_LEFT
/datum/organ/external/head
@@ -747,21 +719,19 @@
icon_name = "head"
display_name = "head"
max_damage = 75
- min_broken_damage = 55
+ min_broken_damage = 40
body_part = HEAD
var/disfigured = 0
/datum/organ/external/head/get_icon()
if (!owner)
- return ..()
+ return ..()
var/g = "m"
if(owner.gender == FEMALE) g = "f"
- var/baseicon=owner.race_icon
if (status & ORGAN_MUTATED)
- baseicon=owner.deform_icon
- if (status & ORGAN_PEG)
- baseicon='icons/mob/human_races/o_peg.dmi'
- return new /icon(baseicon, "[icon_name]_[g]")
+ . = new /icon(owner.deform_icon, "[icon_name]_[g]")
+ else
+ . = new /icon(owner.race_icon, "[icon_name]_[g]")
/datum/organ/external/head/take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
..(brute, burn, sharp, used_weapon, forbidden_limbs)
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index a3b1d59fe42..cb5148f105c 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -11,6 +11,9 @@
var/min_broken_damage = 30
var/parent_organ = "chest"
+/datum/organ/internal/proc/rejuvenate()
+ damage=0
+
/datum/organ/internal/proc/is_bruised()
return damage >= min_bruised_damage
diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm
index e71edfbed06..985862b0463 100644
--- a/code/modules/surgery/robolimbs.dm
+++ b/code/modules/surgery/robolimbs.dm
@@ -158,43 +158,6 @@
target.UpdateDamageIcon()
del(tool)
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s [affected.display_name]!", \
- "\red Your hand slips, damaging connectors on [target]'s [affected.display_name]!")
- target.apply_damage(10, BRUTE, affected)
-
-/datum/surgery_step/limb/attach_plank
- allowed_tools = list(/obj/item/stack/sheet/wood=100)
- can_infect = 0
-
- min_duration = 80
- max_duration = 100
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/robot_parts/p = tool
- if (p.part)
- if (!(target_zone in p.part))
- return 0
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.status & ORGAN_ATTACHABLE
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts attaching [tool] where [target]'s [affected.display_name] used to be.", \
- "You start attaching [tool] where [target]'s [affected.display_name] used to be.")
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\blue [user] has attached [tool] where [target]'s [affected.display_name] used to be.", \
- "\blue You have attached [tool] where [target]'s [affected.display_name] used to be.")
- affected.peggify()
- target.update_body()
- target.updatehealth()
- target.UpdateDamageIcon()
- var/obj/item/stack/sheet/wood/peg = tool
- peg.use(1)
-
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s [affected.display_name]!", \