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))