From 98c281e688a290eb4e8b73e30237b1147b7bf997 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sun, 22 May 2016 22:31:18 -0500 Subject: [PATCH 1/3] Makes sleepers not delete you when destroyed fixes some player deletion scenarios and stops some recursive ex_act() nonsense --- code/game/machinery/Sleeper.dm | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 238e071ebe9..0fa6a04cac3 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 @@ -360,9 +361,9 @@ /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 = src.loc + go_out() + A.blob_act() qdel(src) return @@ -404,11 +405,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) @@ -449,25 +453,23 @@ /obj/machinery/sleeper/ex_act(severity) if(filtering) toggle_filter() + var/mob/M = src.occupant switch(severity) if(1.0) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) + go_out() + M.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) + go_out() + M.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) + go_out() + M.ex_act(severity) qdel(src) return return From 3b29f033cb03dc0e5be4f5210ef329c9ad4ca8db Mon Sep 17 00:00:00 2001 From: IK3I Date: Sun, 22 May 2016 23:21:07 -0500 Subject: [PATCH 2/3] Fixes Body Scanner Issues - no longer deletes you on deletion - hostile mobs don't instantly lose sight of you upon jumping in one --- code/game/machinery/Sleeper.dm | 2 +- code/game/machinery/adv_med.dm | 47 ++++++++++++------- .../living/simple_animal/hostile/hostile.dm | 2 +- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 0fa6a04cac3..d60cde96cc2 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -361,7 +361,7 @@ /obj/machinery/sleeper/blob_act() if(prob(75)) - var/atom/movable/A = src.loc + var/atom/movable/A = src.occupant go_out() A.blob_act() qdel(src) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 45ee6e0f4c9..24eb10ac92b 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -59,11 +59,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 @@ -158,31 +161,23 @@ return /obj/machinery/bodyscanner/ex_act(severity) + var/mob/M = src.occupant 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 + go_out() + M.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 + go_out() + M.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 + go_out() + M.ex_act(severity) qdel(src) return else @@ -190,10 +185,19 @@ /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 = src.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 +253,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/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index b1627d17af0..85d7d02ccf8 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)) var/atom/A = target.loc Goto(A,move_to_delay,minimum_distance) if(A.Adjacent(src)) From 454f5d755a9febc9a4038baf3a944114eeccd22d Mon Sep 17 00:00:00 2001 From: IK3I Date: Mon, 23 May 2016 14:28:17 -0500 Subject: [PATCH 3/3] Adds borg chargers to the list of fixed things Also takes some code suggestions into account and clears up some edge cases *cough*drones and diona*cough* --- code/game/machinery/Sleeper.dm | 25 +++++++---- code/game/machinery/adv_med.dm | 27 +++++++----- code/game/machinery/rechargestation.dm | 44 +++++++++++++++++++ .../living/simple_animal/hostile/hostile.dm | 2 +- 4 files changed, 78 insertions(+), 20 deletions(-) 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))