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 0f28f9d2da8..b8f8f2fac00 100644 Binary files a/icons/effects/map_effects.dmi and b/icons/effects/map_effects.dmi differ diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm index 5dec1a7244c..eb3357ac59e 100644 --- a/maps/aurora/aurora-3_sublevel.dmm +++ b/maps/aurora/aurora-3_sublevel.dmm @@ -4351,6 +4351,9 @@ name = "Atmosphere Control"; req_access = list(24) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/atmos) "akd" = ( @@ -4361,6 +4364,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/atmos) "ake" = ( @@ -4793,6 +4799,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/engineering/atmos) "ala" = ( @@ -16155,6 +16164,7 @@ name = "Morgue"; req_access = list(6) }, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 @@ -17931,6 +17941,9 @@ dir = 4 }, /obj/structure/plasticflaps/airtight, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 @@ -27169,6 +27182,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/plating, /area/outpost/engineering/power) "dPZ" = ( diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index 664d580445e..8c65ce7141b 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -2922,6 +2922,9 @@ name = "Biohazard Shutter"; opacity = 0 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/rnd/research) "afn" = ( @@ -6148,6 +6151,7 @@ }, /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/corner/mauve/diagonal, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled/white, /area/rnd/research) "alq" = ( @@ -6858,6 +6862,9 @@ req_access = list(47) }, /obj/effect/floor_decal/corner/mauve/diagonal, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/research) "amH" = ( @@ -10047,6 +10054,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/atmos/storage) "asF" = ( @@ -10059,6 +10069,9 @@ name = "Atmospherics Storage"; req_access = list(24) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/atmos/storage) "asH" = ( @@ -12142,6 +12155,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/engineering/locker_room) "avY" = ( @@ -14941,6 +14957,9 @@ name = "Engineering Hallway"; req_one_access = list(10) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/engine_monitoring) "aAD" = ( @@ -15001,6 +15020,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/atmos/monitoring) "aAH" = ( @@ -15018,6 +15040,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/locker_room) "aAJ" = ( @@ -15535,6 +15560,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/bridge) "aBB" = ( @@ -18067,6 +18095,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/engineering/storage_eva) "aFG" = ( @@ -18240,6 +18271,9 @@ name = "Medical Voidsuits"; req_one_access = list(5) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "aFT" = ( @@ -18306,6 +18340,9 @@ name = "Security Voidsuits"; req_access = list(2) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "aFZ" = ( @@ -19383,6 +19420,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/engineering/storage_eva) "aHH" = ( @@ -19745,6 +19785,9 @@ name = "Security Wing"; req_access = list(63) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/security/lobby) "aIk" = ( @@ -19793,6 +19836,9 @@ name = "Security Wing"; req_access = list(63) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/security/lobby) "aIm" = ( @@ -20148,6 +20194,9 @@ req_access = list(19) }, /obj/effect/floor_decal/corner_wide/paleblue/diagonal, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/bridge) "aIO" = ( @@ -20873,6 +20922,9 @@ name = "Security Blast Door"; opacity = 0 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/security/brig) "aKb" = ( @@ -20959,6 +21011,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/bridge) "aKl" = ( @@ -22572,6 +22627,9 @@ name = "Engineering Voidsuits"; req_one_access = list(11,24) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "aMZ" = ( @@ -23061,6 +23119,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/bridge) "aNV" = ( @@ -23569,6 +23630,9 @@ name = "E.V.A."; req_one_access = list(18) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "aOR" = ( @@ -25653,6 +25717,9 @@ name = "E.V.A. Cycler Access"; req_one_access = list(18) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "aSl" = ( @@ -27168,6 +27235,9 @@ icon_state = "4-8" }, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/bridge/ailobby) "aUN" = ( @@ -27377,6 +27447,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/foyer) "aVf" = ( @@ -27386,6 +27459,9 @@ req_one_access = list(10) }, /obj/structure/disposalpipe/segment, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/foyer) "aVg" = ( @@ -27489,6 +27565,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "aVo" = ( @@ -27586,6 +27665,9 @@ name = "Security Aft Entrance"; req_access = list(63) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/security/brig) "aVw" = ( @@ -27788,6 +27870,9 @@ name = "B Lift Access"; req_access = list(19) }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/bridge/ailobby) "aVT" = ( @@ -35938,6 +36023,9 @@ }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/map_effect/door_helper/unres{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/medical/icu) "bki" = ( @@ -38077,6 +38165,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/medical/med_office{ name = "\improper Medical - Psych Stairway" @@ -38729,6 +38820,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled, /area/medical/gen_treatment) "bpC" = ( @@ -39691,6 +39783,9 @@ req_access = list(66) }, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/medical/gen_treatment) "brM" = ( @@ -40780,6 +40875,9 @@ name = "Biohazard Shutter"; opacity = 0 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/rnd/research) "btS" = ( @@ -41281,6 +41379,9 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/lino/grey, /area/crew_quarters/bar) "buX" = ( @@ -44733,6 +44834,9 @@ /obj/machinery/holosign/surgery{ id = 1 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) "bBY" = ( @@ -45589,6 +45693,9 @@ /obj/machinery/holosign/surgery{ id = 2 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) "bDP" = ( @@ -47294,6 +47401,7 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled/white, /area/medical/surgeryprep) "bHB" = ( @@ -50230,6 +50338,9 @@ req_access = list(28) }, /obj/machinery/door/firedoor, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "bOV" = ( @@ -54533,6 +54644,9 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/quartermaster/lobby) "bZN" = ( @@ -55015,6 +55129,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled, /area/quartermaster/break_room) "caD" = ( @@ -56638,6 +56753,7 @@ req_one_access = list(31,48,67) }, /obj/machinery/door/firedoor, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled, /area/quartermaster/break_room) "cea" = ( @@ -57012,6 +57128,7 @@ }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled, /area/outpost/mining_main/refinery) "ceB" = ( @@ -57672,6 +57789,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/map_effect/door_helper/unres, /turf/simulated/floor/tiled, /area/outpost/mining_main/refinery) "cfT" = ( @@ -62195,6 +62313,9 @@ req_access = list(66) }, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/map_effect/door_helper/unres{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/medical/icu) "jyi" = ( @@ -62393,6 +62514,21 @@ /obj/structure/cable/green, /turf/simulated/floor/plating, /area/maintenance/substation/medical) +"kcx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + autoclose = 0; + icon_state = "door_open"; + id_tag = null; + name = "General Treatment Room"; + req_access = list(66) + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/medical/gen_treatment) "kcG" = ( /obj/structure/cable{ d1 = 4; @@ -104690,7 +104826,7 @@ bpA bqM brR bth -brL +kcx bvv bwn bxP diff --git a/maps/aurora/aurora-6_surface.dmm b/maps/aurora/aurora-6_surface.dmm index c4bf1c11a96..139c757c48a 100644 --- a/maps/aurora/aurora-6_surface.dmm +++ b/maps/aurora/aurora-6_surface.dmm @@ -16866,6 +16866,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/map_effect/door_helper/unres{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/quartermaster/loading) "Fy" = (