diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 238e071ebe9..bf779f346bd 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -73,6 +73,7 @@
if(M.environment_smash)
M.do_attack_animation(src)
visible_message("[M.name] smashes [src] apart!")
+ go_out()
qdel(src)
return
@@ -354,15 +355,21 @@
to_chat(occupant, "You no longer feel reliant on [R.name]!")
occupant.reagents.addiction_list.Remove(R)
+ for(var/mob/M as mob in src) // makes sure that simple mobs don't get stuck inside a sleeper when they resist out of occupant's grasp
+ if(M == occupant)
+ continue
+ else
+ M.forceMove(src.loc)
+
updateDialog()
return
/obj/machinery/sleeper/blob_act()
if(prob(75))
- for(var/atom/movable/A as mob|obj in src)
- A.forceMove(src.loc)
- A.blob_act()
+ var/atom/movable/A = occupant
+ go_out()
+ A.blob_act()
qdel(src)
return
@@ -404,11 +411,14 @@
orient = "RIGHT"
dir = 4
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ return
if(exchange_parts(user, G))
return
- default_deconstruction_crowbar(G)
+ if(istype(G, /obj/item/weapon/crowbar))
+ default_deconstruction_crowbar(G)
+ return
if(istype(G, /obj/item/weapon/grab))
if(panel_open)
@@ -453,24 +463,23 @@
if(1.0)
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
- ex_act(severity)
+ A.ex_act(severity)
qdel(src)
return
if(2.0)
if(prob(50))
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
- ex_act(severity)
+ A.ex_act(severity)
qdel(src)
return
if(3.0)
if(prob(25))
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
- ex_act(severity)
+ A.ex_act(severity)
qdel(src)
return
- return
/obj/machinery/sleeper/emp_act(severity)
if(filtering)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 45ee6e0f4c9..897e3ee51c8 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -19,6 +19,13 @@
else
set_light(0)
+/obj/machinery/bodyscanner/process()
+ for(var/mob/M as mob in src) // makes sure that simple mobs don't get stuck inside a sleeper when they resist out of occupant's grasp
+ if(M == occupant)
+ continue
+ else
+ M.forceMove(src.loc)
+
/obj/machinery/bodyscanner/New()
..()
component_parts = list()
@@ -59,11 +66,14 @@
else
dir = 4
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ return
if(exchange_parts(user, G))
return
- default_deconstruction_crowbar(G)
+ if(istype(G, /obj/item/weapon/crowbar))
+ default_deconstruction_crowbar(G)
+ return
if(istype(G, /obj/item/weapon/grab))
var/obj/item/weapon/grab/TYPECAST_YOUR_SHIT = G
@@ -161,39 +171,40 @@
switch(severity)
if(1.0)
for(var/atom/movable/A as mob|obj in src)
- A.loc = src.loc
- ex_act(severity)
- //Foreach goto(35)
- //SN src = null
+ A.forceMove(src.loc)
+ A.ex_act(severity)
qdel(src)
return
if(2.0)
if (prob(50))
for(var/atom/movable/A as mob|obj in src)
- A.loc = src.loc
- ex_act(severity)
- //Foreach goto(108)
- //SN src = null
+ A.forceMove(src.loc)
+ A.ex_act(severity)
qdel(src)
return
if(3.0)
if (prob(25))
for(var/atom/movable/A as mob|obj in src)
- A.loc = src.loc
- ex_act(severity)
- //Foreach goto(181)
- //SN src = null
+ A.forceMove(src.loc)
+ A.ex_act(severity)
qdel(src)
return
- else
- return
/obj/machinery/bodyscanner/blob_act()
if(prob(50))
- for(var/atom/movable/A as mob|obj in src)
- A.loc = src.loc
+ var/atom/movable/A = occupant
+ go_out()
+ A.blob_act()
qdel(src)
+/obj/machinery/bodyscanner/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
+ if(M.environment_smash)
+ M.do_attack_animation(src)
+ visible_message("[M.name] smashes [src] apart!")
+ go_out()
+ qdel(src)
+ return
+
/obj/machinery/body_scanconsole
var/obj/machinery/bodyscanner/connected
var/delete
@@ -249,6 +260,13 @@
if(prob(50))
qdel(src)
+/obj/machinery/body_scanconsole/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
+ if(M.environment_smash)
+ M.do_attack_animation(src)
+ visible_message("[M.name] smashes [src] apart!")
+ qdel(src)
+ return
+
/obj/machinery/body_scanconsole/proc/findscanner()
var/obj/machinery/bodyscanner/bodyscannernew = null
// Loop through every direction
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 55bfd7f2900..92bca16c5b7 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -54,8 +54,52 @@
if(src.occupant)
process_occupant()
+
+ for(var/mob/M as mob in src) // makes sure that simple mobs don't get stuck inside a sleeper when they resist out of occupant's grasp
+ if(M == occupant)
+ continue
+ else
+ M.forceMove(src.loc)
return 1
+/obj/machinery/recharge_station/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ for(var/atom/movable/A as mob|obj in src)
+ A.forceMove(src.loc)
+ A.ex_act(severity)
+ qdel(src)
+ return
+ if(2.0)
+ if (prob(50))
+ for(var/atom/movable/A as mob|obj in src)
+ A.forceMove(src.loc)
+ A.ex_act(severity)
+ qdel(src)
+ return
+ if(3.0)
+ if (prob(25))
+ for(var/atom/movable/A as mob|obj in src)
+ A.forceMove(src.loc)
+ A.ex_act(severity)
+ qdel(src)
+ return
+
+/obj/machinery/recharge_station/blob_act()
+ if(prob(50))
+ var/atom/movable/A = occupant
+ go_out()
+ A.blob_act()
+ qdel(src)
+
+/obj/machinery/recharge_station/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
+ if(M.environment_smash)
+ M.do_attack_animation(src)
+ visible_message("[M.name] smashes [src] apart!")
+ go_out()
+ qdel(src)
+ return
+
/obj/machinery/recharge_station/Bumped(var/mob/AM)
move_inside(AM)
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index b1627d17af0..72e709d5ac0 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -299,7 +299,7 @@
return
/mob/living/simple_animal/hostile/proc/FindHidden()
- if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper))
+ if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper) || istype(target.loc, /obj/machinery/bodyscanner) || istype(target.loc, /obj/machinery/recharge_station))
var/atom/A = target.loc
Goto(A,move_to_delay,minimum_distance)
if(A.Adjacent(src))