diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index f786cbbc..ed328c25 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1204,9 +1204,16 @@ return if(safe) for(var/atom/movable/M in get_turf(src)) + if (failCount > failThreshold) //something is continuously blocking the door + do_sparks(5, TRUE, src) + visible_message("[src]'s timing mechanism fails.") + failCount = 0 + return if(M.density && M != src) //something is blocking the door autoclose_in(60) + failCount++ return + failCount = 0 if(forced < 2) if(obj_flags & EMAGGED) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 69363d5a..0551d16e 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -37,6 +37,10 @@ var/poddoor = FALSE var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access + // GS13: Halt autoclose when blocked with static object, like a wooden barricade... + var/failCount = 0 + var/failThreshold = 5 + /obj/machinery/door/examine(mob/user) . = ..() if(red_alert_access) @@ -284,10 +288,16 @@ return if(safe) for(var/atom/movable/M in get_turf(src)) + if (failCount > failThreshold) //something is continuously blocking the door + do_sparks(5, TRUE, src) + visible_message("[src]'s timing mechanism fails.") + failCount = 0 + return if(M.density && M != src) //something is blocking the door if(autoclose) autoclose_in(60) return + failCount = 0 operating = TRUE