From 5cd4e5506345bcd0f466476dca51497c9d59d32b Mon Sep 17 00:00:00 2001 From: SabreML <57483089+SabreML@users.noreply.github.com> Date: Thu, 12 Aug 2021 13:05:42 +0100 Subject: [PATCH] 'Unrestricted access from direction' for windoors (#16501) * Unrestricted Windoor Directions * Mapping helpers --- code/__DEFINES/layers.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 7 +++++++ code/game/objects/effects/mapping_helpers.dm | 17 +++++++++-------- .../game/objects/structures/windoor_assembly.dm | 1 + 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index a633ddab5eb..d9b98c7724f 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -40,7 +40,6 @@ #define BELOW_OPEN_DOOR_LAYER 2.6 #define BLASTDOOR_LAYER 2.65 #define OPEN_DOOR_LAYER 2.7 -#define DOOR_HELPER_LAYER 2.71 //keep this above OPEN_DOOR_LAYER #define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible #define TABLE_LAYER 2.8 #define BELOW_OBJ_LAYER 2.9 @@ -52,6 +51,7 @@ #define SHUTTER_LAYER 3.12 // HERE BE DRAGONS #define ABOVE_OBJ_LAYER 3.2 #define ABOVE_WINDOW_LAYER 3.3 +#define DOOR_HELPER_LAYER 3.31 // Keep this above doors and windoors #define SIGN_LAYER 3.4 #define NOT_HIGH_OBJ_LAYER 3.5 #define HIGH_OBJ_LAYER 3.6 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 88dc39e568c..13cf62ecf3f 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -85,6 +85,13 @@ else do_animate("deny") +/obj/machinery/door/window/unrestricted_side(mob/M) + var/mob_dir = get_dir(src, M) + if(mob_dir == 0) // If the mob is inside the tile + mob_dir = GetOppositeDir(dir) // Set it to the inside direction of the windoor + + return mob_dir & unres_sides + /obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 diff --git a/code/game/objects/effects/mapping_helpers.dm b/code/game/objects/effects/mapping_helpers.dm index dd332f676fb..d1193cb3154 100644 --- a/code/game/objects/effects/mapping_helpers.dm +++ b/code/game/objects/effects/mapping_helpers.dm @@ -67,6 +67,11 @@ /obj/effect/mapping_helpers/no_lava icon_state = "no_lava" +/obj/effect/mapping_helpers/no_lava/New() + var/turf/T = get_turf(src) + T.flags |= NO_LAVA_GEN + ..() + /obj/effect/mapping_helpers/airlock layer = DOOR_HELPER_LAYER @@ -78,13 +83,9 @@ if(!mapload) log_world("### MAP WARNING, [src] spawned outside of mapload!") return - var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in src.loc - if(airlock) - airlock.unres_sides ^= dir + var/obj/machinery/door/door = locate(/obj/machinery/door) in loc + if(door) + door.unres_sides ^= dir else log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") - ..() -/obj/effect/mapping_helpers/no_lava/New() - var/turf/T = get_turf(src) - T.flags |= NO_LAVA_GEN - . = ..() + ..() diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 73e6fadac80..11943049e1e 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -203,6 +203,7 @@ windoor.req_one_access = electronics.selected_accesses else windoor.req_access = electronics.selected_accesses + windoor.unres_sides = electronics.unres_access_from windoor.electronics = src.electronics electronics.forceMove(windoor) electronics = null