diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index d60cde96cc2..bf779f346bd 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -355,13 +355,19 @@ 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)) - var/atom/movable/A = src.occupant + var/atom/movable/A = occupant go_out() A.blob_act() qdel(src) @@ -453,26 +459,27 @@ /obj/machinery/sleeper/ex_act(severity) if(filtering) toggle_filter() - var/mob/M = src.occupant switch(severity) if(1.0) - go_out() - M.ex_act(severity) + 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)) - go_out() - M.ex_act(severity) + 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)) - go_out() - M.ex_act(severity) + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.loc) + 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 24eb10ac92b..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() @@ -161,31 +168,31 @@ return /obj/machinery/bodyscanner/ex_act(severity) - var/mob/M = src.occupant switch(severity) if(1.0) - go_out() - M.ex_act(severity) + 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)) - go_out() - M.ex_act(severity) + 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)) - go_out() - M.ex_act(severity) + for(var/atom/movable/A as mob|obj in src) + A.forceMove(src.loc) + A.ex_act(severity) qdel(src) return - else - return /obj/machinery/bodyscanner/blob_act() if(prob(50)) - var/atom/movable/A = src.occupant + var/atom/movable/A = occupant go_out() A.blob_act() qdel(src) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 5b5a532efdb..914a5733c8c 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 85d7d02ccf8..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) || istype(target.loc, /obj/machinery/bodyscanner)) + 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))