diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 5e85802b1fa..41bde491118 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -30,6 +30,8 @@ enter_delay = 3 var/pod_moving = 0 var/automatic_launch_time = 100 + var/cooldown_delay = 30 + var/launch_cooldown = 0 var/const/OPEN_DURATION = 6 var/const/CLOSE_DURATION = 6 @@ -121,9 +123,33 @@ obj/structure/ex_act(severity) open_animation() else if(icon_state == "open") - close_animation() + if(pod.contents.len && user.loc != pod) + user.visible_message("[user] starts emptying [pod]'s contents onto the floor!") + if(do_after(user, 40)) //So it doesn't default to close_animation() on fail + if(pod.loc == loc) + for(var/atom/movable/AM in pod) + AM.loc = get_turf(user) + if(ismob(AM)) + var/mob/M = AM + M.Weaken(5) + + else + close_animation() + break +/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/grab) && icon_state == "open") + var/obj/item/weapon/grab/G = W + if(ismob(G.affecting) && G.state >= GRAB_AGGRESSIVE) + var/mob/GM = G.affecting + for(var/obj/structure/transit_tube_pod/pod in loc) + pod.visible_message("[user] starts putting [GM] into the [pod]!") + if(do_after(user, 60) && GM && G && G.affecting == GM) + GM.Weaken(5) + src.Bumped(GM) + del(G) + break /obj/structure/transit_tube/station/proc/open_animation() if(icon_state == "closed") @@ -150,7 +176,7 @@ obj/structure/ex_act(severity) pod_moving = 1 close_animation() sleep(CLOSE_DURATION + 2) - if(icon_state == "closed" && pod) + if(icon_state == "closed" && pod && launch_cooldown < world.time) pod.follow_tube() pod_moving = 0 @@ -179,6 +205,7 @@ obj/structure/ex_act(severity) /obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir) pod_moving = 1 spawn(5) + launch_cooldown = world.time + min(cooldown_delay, automatic_launch_time) open_animation() sleep(OPEN_DURATION + 2) pod_moving = 0 @@ -422,7 +449,6 @@ obj/structure/ex_act(severity) return - // Parse the icon_state into a list of directions. // This means that mappers can use Dream Maker's built in // "Generate Instances from Icon-states" option to get all