diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
index 58ca8bbea9a..182b7e27560 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
@@ -12,6 +12,8 @@
var/list/abductee_minds
var/flash = " - || - "
var/obj/machinery/abductor/console/console
+ var/message_cooldown = 0
+ var/breakout_time = 0.75
/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
@@ -40,25 +42,23 @@
/obj/machinery/abductor/experiment/relaymove(mob/user)
if(user.stat != CONSCIOUS)
return
- container_resist(user)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
/obj/machinery/abductor/experiment/container_resist(mob/living/user)
- var/breakout_time = 600
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- to_chat(user, "You lean on the back of [src] and start pushing the door open... (this will take about a minute.)")
- user.visible_message("You hear a metallic creaking from [src]!")
-
- if(do_after(user,(breakout_time), target = src))
+ user.visible_message("You see [user] kicking against the door of [src]!", \
+ "You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a metallic creaking from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
return
-
- visible_message("[user] successfully broke out of [src]!")
- to_chat(user, "You successfully break out of [src]!")
-
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
open_machine()
-
/obj/machinery/abductor/experiment/proc/dissection_icon(mob/living/carbon/human/H)
var/icon/photo = null
var/g = (H.gender == FEMALE) ? "f" : "m"
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 7ea954a6710..2276b5154b5 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -392,6 +392,9 @@
QDEL_IN(mob_occupant, 40)
/obj/machinery/clonepod/relaymove(mob/user)
+ container_resist()
+
+/obj/machinery/clonepod/container_resist(mob/living/user)
if(user.stat == CONSCIOUS)
go_out()
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 65a60887212..4085b4edb4c 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -14,6 +14,8 @@
var/damage_coeff
var/scan_level
var/precision_coeff
+ var/message_cooldown
+ var/breakout_time = 2
/obj/machinery/dna_scannernew/RefreshParts()
scan_level = 0
@@ -65,23 +67,20 @@
open_machine()
/obj/machinery/dna_scannernew/container_resist(mob/living/user)
- var/breakout_time = 2
- if(state_open || !locked) //Open and unlocked, no need to escape
- state_open = TRUE
+ if(!locked)
+ open_machine()
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- to_chat(user, "You lean on the back of [src] and start pushing the door open... (this will take about [breakout_time] minutes.)")
- user.visible_message("You hear a metallic creaking from [src]!")
-
+ user.visible_message("You see [user] kicking against the door of [src]!", \
+ "You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a metallic creaking from [src].")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
return
-
locked = FALSE
- visible_message("[user] successfully broke out of [src]!")
- to_chat(user, "You successfully break out of [src]!")
-
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
open_machine()
/obj/machinery/dna_scannernew/proc/locate_computer(type_)
@@ -122,10 +121,11 @@
/obj/machinery/dna_scannernew/relaymove(mob/user as mob)
if(user.stat || locked)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
return
-
open_machine()
- return
/obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params)
diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm
index b37c5a10a70..d77e91af90e 100644
--- a/code/game/machinery/gulag_teleporter.dm
+++ b/code/game/machinery/gulag_teleporter.dm
@@ -19,6 +19,8 @@ The console is located at computer/gulag_teleporter.dm
active_power_usage = 5000
circuit = /obj/item/circuitboard/machine/gulag_teleporter
var/locked = FALSE
+ var/message_cooldown
+ var/breakout_time = 1
var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner
var/shoes_type = /obj/item/clothing/shoes/sneakers/orange
var/obj/machinery/gulag_item_reclaimer/linked_reclaimer
@@ -46,7 +48,7 @@ The console is located at computer/gulag_teleporter.dm
/obj/machinery/gulag_teleporter/interact(mob/user)
if(locked)
- to_chat(user, "[src] is locked.")
+ to_chat(user, "[src] is locked!")
return
toggle_open()
@@ -89,28 +91,27 @@ The console is located at computer/gulag_teleporter.dm
if(user.stat != CONSCIOUS)
return
if(locked)
- to_chat(user, "[src] is locked!")
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
return
open_machine()
/obj/machinery/gulag_teleporter/container_resist(mob/living/user)
- var/breakout_time = 600
if(!locked)
open_machine()
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- to_chat(user, "You lean on the back of [src] and start pushing the door open... (this will take about a minute.)")
- user.visible_message("You hear a metallic creaking from [src]!")
-
- if(do_after(user,(breakout_time), target = src))
+ user.visible_message("You see [user] kicking against the door of [src]!", \
+ "You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a metallic creaking from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
return
-
locked = FALSE
- visible_message("[user] successfully broke out of [src]!")
- to_chat(user, "You successfully break out of [src]!")
-
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
open_machine()
/obj/machinery/gulag_teleporter/proc/locate_reclaimer()
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 5393bd9a9e7..a78fa50a6a1 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -26,6 +26,8 @@
var/uv = FALSE
var/uv_super = FALSE
var/uv_cycles = 6
+ var/message_cooldown
+ var/breakout_time = 0.5
/obj/machinery/suit_storage_unit/standard_unit
suit_type = /obj/item/clothing/suit/space/eva
@@ -249,12 +251,36 @@
return 1
/obj/machinery/suit_storage_unit/relaymove(mob/user)
- container_resist(user)
+ if(locked)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
+ return
+ open_machine()
+ dump_contents()
/obj/machinery/suit_storage_unit/container_resist(mob/living/user)
+ if(!locked)
+ open_machine()
+ dump_contents()
+ return
+ user.changeNext_move(CLICK_CD_BREAKOUT)
+ user.last_special = world.time + CLICK_CD_BREAKOUT
+ user.visible_message("You see [user] kicking against the doors of [src]!", \
+ "You start kicking against the doors... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a thump from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
+ if(!user || user.stat != CONSCIOUS || user.loc != src )
+ return
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
+ open_machine()
+ dump_contents()
+
add_fingerprint(user)
if(locked)
- visible_message("You see [user] kicking against the doors of [src]!", "You start kicking against the doors...")
+ visible_message("You see [user] kicking against the doors of [src]!", \
+ "You start kicking against the doors...")
addtimer(CALLBACK(src, .proc/resist_open, user), 300)
else
open_machine()
@@ -262,7 +288,8 @@
/obj/machinery/suit_storage_unit/proc/resist_open(mob/user)
if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here.
- visible_message("You see [user] bursts out of [src]!", "You escape the cramped confines of [src]!")
+ visible_message("You see [user] bursts out of [src]!", \
+ "You escape the cramped confines of [src]!")
open_machine()
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm
index a1e3f37dfc5..2f59020cbe2 100644
--- a/code/game/objects/items/implants/implantchair.dm
+++ b/code/game/objects/items/implants/implantchair.dm
@@ -19,6 +19,8 @@
var/auto_replenish = TRUE
var/special = FALSE
var/special_name = "special function"
+ var/message_cooldown
+ var/breakout_time = 1
/obj/machinery/implantchair/Initialize()
. = ..()
@@ -112,22 +114,22 @@
update_icon()
/obj/machinery/implantchair/container_resist(mob/living/user)
- if(state_open)
- return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- to_chat(user, "You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)")
- audible_message("You hear a metallic creaking from [src]!",hearing_distance = 2)
-
- if(do_after(user, 600, target = src))
+ user.visible_message("You see [user] kicking against the door of [src]!", \
+ "You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a metallic creaking from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
return
- visible_message("[user] successfully broke out of [src]!")
- to_chat(user, "You successfully break out of [src]!")
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
open_machine()
/obj/machinery/implantchair/relaymove(mob/user)
- container_resist(user)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !user.IsAdvancedToolUser())
@@ -184,4 +186,3 @@
message_admins("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
log_game("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
return 1
-
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 78e672e49dc..4f8705aa711 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -16,7 +16,7 @@
integrity_failure = 50
armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60)
var/breakout_time = 2
- var/lastbang
+ var/message_cooldown
var/can_weld_shut = TRUE
var/horizontal = FALSE
var/allow_objects = FALSE
@@ -300,14 +300,12 @@
/obj/structure/closet/relaymove(mob/user)
if(user.stat || !isturf(loc) || !isliving(user))
return
- var/mob/living/L = user
- if(!open())
- if(L.last_special <= world.time)
- container_resist(L)
- if(world.time > lastbang+5)
- lastbang = world.time
- for(var/mob/M in get_hearers_in_view(src, null))
- M.show_message("BANG, bang!", 2)
+ if(locked)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
+ return
+ container_resist()
/obj/structure/closet/attack_hand(mob/user)
..()
@@ -367,9 +365,10 @@
//okay, so the closet is either welded or locked... resist!!!
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- to_chat(user, "You lean on the back of [src] and start pushing the door open.")
- visible_message("[src] begins to shake violently!")
- if(do_after(user,(breakout_time * 60 * 10), target = src)) //minutes * 60seconds * 10deciseconds
+ user.visible_message("[src] begins to shake violently!", \
+ "You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear banging from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) )
return
//we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting
@@ -388,7 +387,7 @@
/obj/structure/closet/AltClick(mob/user)
..()
- if(!user.canUseTopic(src, be_close=TRUE))
+ if(!user.canUseTopic(src, be_close=TRUE) || isturf(loc))
to_chat(user, "You can't do that right now!")
return
if(opened || !secure)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 600e15201d9..f4a98811c05 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -23,6 +23,8 @@
var/obj/structure/tray/connected = null
var/locked = FALSE
var/opendir = SOUTH
+ var/message_cooldown
+ var/breakout_time = 1
/obj/structure/bodycontainer/Destroy()
open()
@@ -41,6 +43,11 @@
/obj/structure/bodycontainer/relaymove(mob/user)
if(user.stat || !isturf(loc))
return
+ if(locked)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
+ return
open()
/obj/structure/bodycontainer/attack_paw(mob/user)
@@ -84,11 +91,20 @@
qdel(src)
/obj/structure/bodycontainer/container_resist(mob/living/user)
- open()
-
-/obj/structure/bodycontainer/relay_container_resist(mob/living/user, obj/O)
- to_chat(user, "You slam yourself into the side of [O].")
- container_resist(user)
+ if(!locked)
+ open()
+ return
+ user.changeNext_move(CLICK_CD_BREAKOUT)
+ user.last_special = world.time + CLICK_CD_BREAKOUT
+ user.visible_message(null, \
+ "You lean on the back of [src] and start pushing the tray open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a metallic creaking from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
+ if(!user || user.stat != CONSCIOUS || user.loc != src )
+ return
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
+ open()
/obj/structure/bodycontainer/proc/open()
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 89f02b13af7..fcd9ead2a71 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -66,6 +66,9 @@
deconstruct(FALSE)
/obj/structure/transit_tube_pod/container_resist(mob/living/user)
+ if(!user.incapacitated())
+ empty_pod()
+ return
if(!moving)
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm
index a83ced850e3..f447b2f3e9a 100644
--- a/code/modules/VR/vr_sleeper.dm
+++ b/code/modules/VR/vr_sleeper.dm
@@ -49,6 +49,10 @@
open_machine()
+/obj/machinery/vr_sleeper/container_resist(mob/living/user)
+ open_machine()
+
+
/obj/machinery/vr_sleeper/Destroy()
open_machine()
cleanup_vr_human()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 94770a45686..e6484b60893 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -32,6 +32,8 @@
var/running_bob_anim = FALSE
var/escape_in_progress = FALSE
+ var/message_cooldown
+ var/breakout_time = 0.5
/obj/machinery/atmospherics/components/unary/cryo_cell/Initialize()
. = ..()
@@ -219,7 +221,9 @@
update_icon()
/obj/machinery/atmospherics/components/unary/cryo_cell/relaymove(mob/user)
- container_resist(user)
+ if(message_cooldown <= world.time)
+ message_cooldown = world.time + 50
+ to_chat(user, "[src]'s door won't budge!")
/obj/machinery/atmospherics/components/unary/cryo_cell/open_machine(drop = 0)
if(!state_open && !panel_open)
@@ -239,16 +243,17 @@
return occupant
/obj/machinery/atmospherics/components/unary/cryo_cell/container_resist(mob/living/user)
- if(escape_in_progress)
- to_chat(user, "You are already trying to exit (This will take around 30 seconds)")
- return
- escape_in_progress = TRUE
- to_chat(user, "You struggle inside the cryotube, kicking the release with your foot... (This will take around 30 seconds.)")
- audible_message("You hear a thump from [src].")
- if(do_after(user, 300))
- if(occupant == user) // Check they're still here.
- open_machine()
- escape_in_progress = FALSE
+ user.changeNext_move(CLICK_CD_BREAKOUT)
+ user.last_special = world.time + CLICK_CD_BREAKOUT
+ user.visible_message("You see [user] kicking against the glass of [src]!", \
+ "You struggle inside [src], kicking the release with your foot... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)", \
+ "You hear a thump from [src].")
+ if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
+ if(!user || user.stat != CONSCIOUS || user.loc != src )
+ return
+ user.visible_message("[user] successfully broke out of [src]!", \
+ "You successfully break out of [src]!")
+ open_machine()
/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user)
..()
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index d9f70160a4e..978e8af62d2 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -51,6 +51,9 @@
/obj/machinery/gibber/container_resist(mob/living/user)
go_out()
+/obj/machinery/gibber/relaymove(mob/living/user)
+ go_out()
+
/obj/machinery/gibber/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
@@ -225,4 +228,4 @@
if(M.loc == input_plate)
M.forceMove(src)
- M.gib()
\ No newline at end of file
+ M.gib()