From 576fba37c1c948a9e4a53ac731c2151908dd2e84 Mon Sep 17 00:00:00 2001 From: Geeves Date: Wed, 28 Oct 2020 19:10:57 +0200 Subject: [PATCH] One-way Airlocks (#10353) --- aurorastation.dme | 1 + code/game/machinery/doors/airlock.dm | 2 + .../machinery/doors/airlock_electronics.dm | 16 ++ code/game/machinery/doors/door.dm | 10 +- .../effects/map_effects/door_helper.dm | 13 ++ html/changelogs/geeves-oneway_airlock.yml | 7 + icons/effects/map_effects.dmi | Bin 9181 -> 9619 bytes maps/aurora/aurora-3_sublevel.dmm | 16 ++ maps/aurora/aurora-4_mainlevel.dmm | 138 +++++++++++++++++- maps/aurora/aurora-6_surface.dmm | 3 + 10 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 code/modules/effects/map_effects/door_helper.dm create mode 100644 html/changelogs/geeves-oneway_airlock.yml diff --git a/aurorastation.dme b/aurorastation.dme index e1bc290aaa0..d7ad510aec5 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1538,6 +1538,7 @@ #include "code\modules\effects\ion_trail_follow.dm" #include "code\modules\effects\visual_effect.dm" #include "code\modules\effects\map_effects\beam_point.dm" +#include "code\modules\effects\map_effects\door_helper.dm" #include "code\modules\effects\map_effects\effect_emitter.dm" #include "code\modules\effects\map_effects\map_effects.dm" #include "code\modules\effects\map_effects\perma_light.dm" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 23e8c05a5c7..67285def82c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1463,6 +1463,8 @@ About the new airlock wires panel: //get the dir from the assembly set_dir(assembly.dir) + unres_dir = electronics.unres_dir + if (on_admin_z) secured_wires = TRUE diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 228ef388fe8..44740f2a927 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -14,6 +14,7 @@ var/last_configurator var/locked = TRUE var/is_installed = FALSE // no double-spending + var/unres_dir = null /obj/item/airlock_electronics/attack_self(mob/user) if(!ishuman(user) && !istype(user,/mob/living/silicon/robot)) @@ -29,6 +30,17 @@ else t1 += "Block
" + t1 += "Unrestricted Access Settings
" + + + for(var/direction in cardinal) + if(direction & unres_dir) + t1 += "[capitalize(dir2text(direction))]
" + else + t1 += "[capitalize(dir2text(direction))]
" + + t1 += "
" + t1 += "Access requirement is set to " t1 += one_access ? "ONE
" : "ALL
" @@ -69,6 +81,10 @@ if(locked) return + if(href_list["unres_dir"]) + var/new_unres_dir = text2num(href_list["unres_dir"]) + unres_dir ^= new_unres_dir + if(href_list["logout"]) locked = TRUE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index f708acf0a5d..2d94c11be71 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -21,6 +21,7 @@ var/normalspeed = 1 var/heat_proof = 0 // For glass airlocks/opacity firedoors var/air_properties_vary_with_direction = 0 + var/unres_dir = null // corresponds to dirs. if opened from this dir, no access is required var/maxhealth = 300 var/health var/destroy_hits = 10 //How many strong hits it takes to destroy the door @@ -555,9 +556,16 @@ /obj/machinery/door/allowed(mob/M) if(!requiresID()) - return 1 // Door doesn't require an ID. So obviously they're allowed. + return TRUE // Door doesn't require an ID. So obviously they're allowed. + if(unrestricted_side(M)) + return TRUE return ..(M) +/obj/machinery/door/proc/unrestricted_side(mob/M) //Allows for specific side of airlocks to be unrestrected (IE, can exit maint freely, but need access to enter) + if(!unres_dir) + return FALSE + return get_dir(src, M) & unres_dir + /obj/machinery/door/update_nearby_tiles(need_rebuild) for(var/turf/T in locs) if (istype(T, /turf/simulated)) diff --git a/code/modules/effects/map_effects/door_helper.dm b/code/modules/effects/map_effects/door_helper.dm new file mode 100644 index 00000000000..ddcfc2201cc --- /dev/null +++ b/code/modules/effects/map_effects/door_helper.dm @@ -0,0 +1,13 @@ +/obj/effect/map_effect/door_helper + layer = DOOR_CLOSED_LAYER + 0.1 + +/obj/effect/map_effect/door_helper/unres + icon_state = "unres_door" + +/obj/effect/map_effect/door_helper/unres/Initialize(mapload, ...) + ..() + for(var/obj/machinery/door/D in loc) + if(istype(D, /obj/machinery/door/blast) || istype(D, /obj/machinery/door/firedoor)) + continue + D.unres_dir ^= dir + return INITIALIZE_HINT_QDEL \ No newline at end of file diff --git a/html/changelogs/geeves-oneway_airlock.yml b/html/changelogs/geeves-oneway_airlock.yml new file mode 100644 index 00000000000..952d618dd31 --- /dev/null +++ b/html/changelogs/geeves-oneway_airlock.yml @@ -0,0 +1,7 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Mapped in various airlocks with one-way exits, meaning that you don't need access to exit if you come from that direction. This is primarily to let people out of departments without escorts." + - rscadd: "Added the option to put one-way exits in airlocks via airlock electronics." \ No newline at end of file diff --git a/icons/effects/map_effects.dmi b/icons/effects/map_effects.dmi index 0f28f9d2da8e936f2749a39bd4edfe70c083bf2f..b8f8f2fac0095b4105af947d7cdb98b33612fcfd 100644 GIT binary patch literal 9619 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 literal 9181 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 v$XGvz2{|X