diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm
index bd77584ba64..fd2cdf88ade 100644
--- a/code/game/gamemodes/heist/heist.dm
+++ b/code/game/gamemodes/heist/heist.dm
@@ -158,9 +158,6 @@ VOX HEIST ROUNDTYPE
objs += new /datum/objective/heist/inviolate_crew
objs += new /datum/objective/heist/inviolate_death
- for(var/datum/objective/heist/O in objs)
- O.choose_target()
-
return objs
/datum/game_mode/heist/proc/greet_vox(var/datum/mind/raider)
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index d71a43c083e..47718fae917 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -961,7 +961,7 @@ Auto Patrol: []"},
var/turf/T = get_turf(user)
user << "You start to wire [src]..."
sleep(40)
- if(get_turf(user) == T)
+ if(get_turf(user) == T && build_step == 6)
coil.use(1)
build_step++
user << "You wire the ED-209 assembly."
@@ -996,7 +996,7 @@ Auto Patrol: []"},
var/turf/T = get_turf(user)
user << "Now attaching the gun to the frame..."
sleep(40)
- if(get_turf(user) == T)
+ if(get_turf(user) == T && build_step == 8)
build_step++
name = "armed [name]"
user << "Taser gun attached."
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 68d178c6407..821a6e82052 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1014,9 +1014,11 @@
O.status &= ~ORGAN_BROKEN
O.status &= ~ORGAN_BLEEDING
O.status &= ~ORGAN_SPLINTED
+ O.status &= ~ORGAN_CUT_AWAY
O.status &= ~ORGAN_ATTACHABLE
if (!O.amputated)
O.status &= ~ORGAN_DESTROYED
+ O.destspawn = 0
O.wounds.Cut()
O.heal_damage(1000,1000,1,1)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 176a5a85270..2a1e4a10cf5 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -277,6 +277,7 @@
icon = 'icons/mob/custom-synthetic.dmi'
/mob/living/silicon/robot/verb/Namepick()
+ set category = "Robot Commands"
if(custom_name)
return 0
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 53633d5db00..9bb448a8be9 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -600,9 +600,11 @@ This function completely restores a damaged organ to perfect condition.
src.status &= ~ORGAN_BROKEN
src.status &= ~ORGAN_BLEEDING
src.status &= ~ORGAN_SPLINTED
+ src.status &= ~ORGAN_CUT_AWAY
src.status &= ~ORGAN_ATTACHABLE
src.status &= ~ORGAN_DESTROYED
src.status |= ORGAN_ROBOT
+ src.destspawn = 0
for (var/datum/organ/external/T in children)
if(T)
T.robotize()
diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm
index 617351178e7..eb5c6964269 100644
--- a/code/modules/surgery/headreattach.dm
+++ b/code/modules/surgery/headreattach.dm
@@ -14,7 +14,7 @@
if (affected.parent)
if (affected.parent.status & ORGAN_DESTROYED)
return 0
- return target_zone == "head"
+ return affected.name == "head"
/datum/surgery_step/head/peel
@@ -27,6 +27,9 @@
min_duration = 80
max_duration = 100
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return ..() && !(affected.status & ORGAN_CUT_AWAY)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts peeling back tattered flesh where [target]'s head used to be with \the [tool].", \
@@ -59,7 +62,7 @@
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.status & ORGAN_CUT_AWAY
+ return ..() && affected.status & ORGAN_CUT_AWAY && affected.open < 3 && !(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)
diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm
index ee56a46bf59..3be16401be2 100644
--- a/code/modules/surgery/robolimbs.dm
+++ b/code/modules/surgery/robolimbs.dm
@@ -16,7 +16,7 @@
if (affected.parent)
if (affected.parent.status & ORGAN_DESTROYED)
return 0
- return 1
+ return affected.name != "head"
/datum/surgery_step/limb/cut
@@ -29,6 +29,10 @@
min_duration = 80
max_duration = 100
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return ..() && !(affected.status & ORGAN_CUT_AWAY)
+
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 cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \
@@ -61,7 +65,7 @@
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.status & ORGAN_CUT_AWAY
+ return ..() && affected.status & ORGAN_CUT_AWAY && affected.open < 3 && !(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)