diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index c3742ec69b6..f2ba1899005 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -131,6 +131,7 @@
#define PASSMOB 16
#define LETPASSTHROW 32
#define PASSFENCE 64
+#define PASSDOOR 128
//turf-only flags
#define NOJAUNT 1
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index dd0485f03db..c808e1d8fc9 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -739,6 +739,8 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays)
attack_ai(user)
/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0)
+ if(istype(mover) && mover.checkpass(PASSDOOR) && !locked) // We really dont want mice/drones to get shocked on a door they're passing through
+ return TRUE
if(isElectrified() && density && isitem(mover))
var/obj/item/I = mover
if(I.flags & CONDUCT)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 3455b8db834..574eb11000e 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -144,8 +144,11 @@
bound_height = width * world.icon_size
/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0)
- if(istype(mover) && mover.checkpass(PASSGLASS))
- return !opacity
+ if(istype(mover))
+ if(mover.checkpass(PASSDOOR) && !locked)
+ return TRUE
+ if(mover.checkpass(PASSGLASS))
+ return !opacity
return !density
/obj/machinery/door/CanAtmosPass()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
index 6884db20aed..8be7cd050d0 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
@@ -29,9 +29,11 @@
if(layer != TURF_LAYER+0.2)
layer = TURF_LAYER+0.2
to_chat(src, text("You are now hiding."))
+ pass_flags |= PASSDOOR
else
layer = MOB_LAYER
to_chat(src, text("You have stopped hiding."))
+ pass_flags &= ~PASSDOOR
/mob/living/silicon/robot/drone/verb/light()
set name = "Light On/Off"
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 1dc9c6e1bf0..ef2a8e08d63 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -32,6 +32,7 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = FALSE
can_hide = TRUE
+ pass_door_while_hidden = TRUE
holder_type = /obj/item/holder/mouse
can_collar = TRUE
gold_core_spawnable = FRIENDLY_SPAWN
diff --git a/code/modules/mob/living/simple_animal/powers.dm b/code/modules/mob/living/simple_animal/powers.dm
index d85557f350d..0bede11148a 100644
--- a/code/modules/mob/living/simple_animal/powers.dm
+++ b/code/modules/mob/living/simple_animal/powers.dm
@@ -9,6 +9,10 @@
if(layer != TURF_LAYER+0.2)
layer = TURF_LAYER+0.2
visible_message("[src] scurries to the ground!", "You are now hiding.")
+ if(pass_door_while_hidden)
+ pass_flags |= PASSDOOR
else
layer = MOB_LAYER
visible_message("[src] slowly peeks up from the ground...", "You have stopped hiding.")
+ if(pass_door_while_hidden)
+ pass_flags &= ~PASSDOOR
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index a9a6db8742e..c07fb48bd7b 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -69,6 +69,8 @@
var/speed = 1 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
var/can_hide = FALSE
+ /// Allows a mob to pass unbolted doors while hidden
+ var/pass_door_while_hidden = FALSE
var/obj/item/clothing/accessory/petcollar/pcollar = null
var/collar_type //if the mob has collar sprites, define them.