From 9b570fc75c547a16b56dd82dca53dc1471f157ce Mon Sep 17 00:00:00 2001 From: MixityMaxity <189351891+MixityMaxity@users.noreply.github.com> Date: Thu, 14 May 2026 08:10:25 +1000 Subject: [PATCH] Wallening Mapping QoL (#31956) * manual rotation vars and subtypes * hacky (?) spawner fix * light map fixes * linter --- .../LavaRuins/lavaland_surface_hermit.dmm | 4 +- .../SpaceRuins/alien_cache_site.dmm | 6 +- _maps/map_files/stations/boxstation.dmm | 9 +- _maps/map_files/stations/cerestation.dmm | 4 +- _maps/map_files/stations/deltastation.dmm | 24 +- _maps/map_files/stations/emeraldstation.dmm | 19 +- _maps/map_files/stations/metastation.dmm | 11 +- _maps/map_files/templates/shelter_1.dmm | 4 +- _maps/map_files/templates/shelter_2.dmm | 4 +- code/game/machinery/doors/airlock.dm | 16 ++ code/game/machinery/doors/airlock_types.dm | 219 ++++++++++++++++++ code/game/machinery/doors/door.dm | 21 +- code/game/machinery/doors/poddoor.dm | 30 +++ code/game/machinery/doors/shutters.dm | 12 + .../effects/spawners/random_barrier.dm | 10 +- code/modules/mining/equipment/survival_pod.dm | 6 + .../objects_and_mobs/secure_alien_airlock.dm | 3 + 17 files changed, 348 insertions(+), 54 deletions(-) diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 34f48870803..0db4ae7ff3f 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -163,10 +163,8 @@ /obj/effect/decal/cleanable/blood/footprints{ dir = 1 }, -/obj/machinery/door/airlock/survival_pod/glass{ - dir = 4 - }, /obj/structure/fans/tiny, +/obj/machinery/door/airlock/survival_pod/glass/manual_rotation, /turf/simulated/floor/pod/dark, /area/ruin/powered) "Q" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/alien_cache_site.dmm b/_maps/map_files/RandomRuins/SpaceRuins/alien_cache_site.dmm index 2624e4f258e..3c382275b64 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/alien_cache_site.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/alien_cache_site.dmm @@ -112,7 +112,7 @@ /area/ruin/space/powered/alien_cache_site/cache_room) "IP" = ( /obj/structure/fans/tiny/invisible, -/obj/machinery/door/airlock/abductor/secure{ +/obj/machinery/door/airlock/abductor/secure/manual_rotation{ dir = 4 }, /turf/simulated/floor/plating/abductor, @@ -128,10 +128,10 @@ }, /area/ruin/space/powered/alien_cache_site) "PB" = ( -/obj/machinery/door/airlock/abductor{ +/obj/structure/fans/tiny/invisible, +/obj/machinery/door/airlock/abductor/manual_rotation{ dir = 4 }, -/obj/structure/fans/tiny/invisible, /turf/simulated/floor/plating/abductor, /area/ruin/space/powered/alien_cache_site) "TW" = ( diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index 773cf21f505..36b93bd7afe 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -16452,9 +16452,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bjp" = ( -/obj/machinery/door/morgue{ - name = "Confession Booth (Chaplain)"; - req_access = list(22) +/obj/machinery/door/morgue/manual_rotation{ + name = "Confession Booth (Chaplain)" }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel) @@ -17270,7 +17269,7 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/port/east) "bmg" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Confession Booth" }, /turf/simulated/floor/plasteel/dark, @@ -18074,7 +18073,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/sorting) "boy" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Private Study"; req_access = list(37) }, diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index ab74a72735f..31d5c2294ff 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -23758,11 +23758,11 @@ /area/station/supply/storage) "dSn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/morgue{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/morgue/manual_rotation{ name = "Private Study"; req_access = list(37) }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel/dark, /area/station/service/library) "dSo" = ( diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm index 9eb0f0f0217..d9744b4d9d1 100644 --- a/_maps/map_files/stations/deltastation.dmm +++ b/_maps/map_files/stations/deltastation.dmm @@ -26858,7 +26858,9 @@ /turf/simulated/wall, /area/station/service/library) "cdC" = ( -/obj/machinery/door/morgue, +/obj/machinery/door/morgue/manual_rotation{ + name = "Study #2" + }, /turf/simulated/floor/plasteel/dark, /area/station/service/library) "cdD" = ( @@ -30886,12 +30888,12 @@ /turf/simulated/wall, /area/station/service/library) "csI" = ( -/obj/machinery/door/morgue{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/morgue/manual_rotation{ name = "Private Study"; req_access = list(37) }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/dark, /area/station/service/library) "csJ" = ( @@ -46918,8 +46920,8 @@ /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) "dQh" = ( -/obj/machinery/door/morgue{ - name = "Confession Booth" +/obj/machinery/door/morgue/manual_rotation{ + name = "Confession Booth (Chaplain)" }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) @@ -47232,7 +47234,7 @@ /turf/simulated/floor/carpet/black, /area/station/service/chapel/office) "dRN" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Confession Booth" }, /turf/simulated/floor/plasteel/dark, @@ -93023,6 +93025,12 @@ }, /turf/simulated/floor/plasteel/white, /area/station/medical/reception) +"vIt" = ( +/obj/machinery/door/morgue/manual_rotation{ + name = "Study #1" + }, +/turf/simulated/floor/plasteel/dark, +/area/station/service/library) "vIR" = ( /obj/machinery/atmospherics/unary/outlet_injector{ autolink_id = "o2_in"; @@ -133626,7 +133634,7 @@ exy bYj jRu cbO -cdC +vIt ckj crn ciz diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm index 44dddd1ddd6..b2983f87013 100644 --- a/_maps/map_files/stations/emeraldstation.dmm +++ b/_maps/map_files/stations/emeraldstation.dmm @@ -62017,7 +62017,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) "mxo" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Confession Booth" }, /turf/simulated/floor/plating, @@ -67471,9 +67471,8 @@ /turf/simulated/floor/grass/no_creep, /area/station/science/genetics) "nAB" = ( -/obj/machinery/door/morgue{ - name = "Confession Booth (Chaplain)"; - req_access = list(22) +/obj/machinery/door/morgue/manual_rotation{ + name = "Confession Booth (Chaplain)" }, /turf/simulated/floor/plating, /area/station/service/chapel) @@ -72612,7 +72611,7 @@ /turf/simulated/floor/engine, /area/station/science/test_chamber) "oyD" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Study #2" }, /turf/simulated/floor/wood, @@ -78851,10 +78850,6 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos/distribution) "pHY" = ( -/obj/machinery/door/morgue{ - name = "Private Study"; - req_access = list(37) - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -78862,6 +78857,10 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/machinery/door/morgue/manual_rotation{ + name = "Private Study"; + req_access = list(37) + }, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -118470,7 +118469,7 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/apmaint) "xDO" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Study #1" }, /turf/simulated/floor/wood, diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index e1533db2a21..49044b84719 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -20065,9 +20065,8 @@ /turf/simulated/floor/plasteel/dark, /area/station/medical/storage/secondary) "cmn" = ( -/obj/machinery/door/morgue{ - name = "Confession Booth (Chaplain)"; - req_access = list(22) +/obj/machinery/door/morgue/manual_rotation{ + name = "Confession Booth (Chaplain)" }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) @@ -21004,7 +21003,7 @@ /turf/simulated/floor/plating/airless, /area/station/engineering/atmos) "cqY" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Study #1" }, /turf/simulated/floor/wood, @@ -21725,7 +21724,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/medical/surgery/observation) "cuz" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Study #2" }, /turf/simulated/floor/wood, @@ -70313,7 +70312,7 @@ /turf/simulated/floor/wood, /area/station/science/robotics/showroom) "qVA" = ( -/obj/machinery/door/morgue{ +/obj/machinery/door/morgue/manual_rotation{ name = "Confession Booth" }, /turf/simulated/floor/plasteel/dark, diff --git a/_maps/map_files/templates/shelter_1.dmm b/_maps/map_files/templates/shelter_1.dmm index 1f645e9cab6..8b6e95683e4 100644 --- a/_maps/map_files/templates/shelter_1.dmm +++ b/_maps/map_files/templates/shelter_1.dmm @@ -66,9 +66,7 @@ /area/survivalpod) "L" = ( /obj/structure/fans/tiny, -/obj/machinery/door/airlock/survival_pod/glass{ - dir = 4 - }, +/obj/machinery/door/airlock/survival_pod/glass/manual_rotation, /turf/simulated/floor/pod, /area/survivalpod) diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index a950df00cb4..f4573f68123 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -165,9 +165,7 @@ /area/survivalpod/luxurypod) "fL" = ( /obj/structure/fans/tiny, -/obj/machinery/door/airlock/survival_pod/glass{ - dir = 4 - }, +/obj/machinery/door/airlock/survival_pod/glass/manual_rotation, /turf/simulated/floor/pod, /area/survivalpod/luxurypod) "hp" = ( diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index dc2f346e537..d942cf7e1ff 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -121,6 +121,22 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) /obj/machinery/door/airlock/welded welded = TRUE +/// Special case so spawners with doors autorotate, otherwise identicle +/obj/machinery/door/airlock/spawner + +/obj/machinery/door/airlock/spawner/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/// Lateint required to actually rotate +/obj/machinery/door/airlock/spawner/LateInitialize() + . = ..() + var/direction = get_current_direction() + dir = direction + +/obj/machinery/door/airlock/spawner/welded + welded = TRUE + /* * reimp, imitate an access denied event. */ diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 98c0ba6aa96..810cd9f46b7 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -7,57 +7,93 @@ assemblytype = /obj/structure/door_assembly/door_assembly_com normal_integrity = 450 +/obj/machinery/door/airlock/command/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/security icon = 'icons/obj/doors/airlocks/station/security.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_sec normal_integrity = 450 +/obj/machinery/door/airlock/security/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/engineering icon = 'icons/obj/doors/airlocks/station/engineering.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_eng +/obj/machinery/door/airlock/engineering/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/medical icon = 'icons/obj/doors/airlocks/station/medical.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_med +/obj/machinery/door/airlock/medical/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/maintenance name = "maintenance access" icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_mai normal_integrity = 250 +/obj/machinery/door/airlock/maintenance/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/maintenance/external name = "external airlock access" icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_extmai +/obj/machinery/door/airlock/maintenance/external/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/mining name = "mining airlock" icon = 'icons/obj/doors/airlocks/station/mining.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_min +/obj/machinery/door/airlock/mining/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/atmos name = "atmospherics airlock" icon = 'icons/obj/doors/airlocks/station/atmos.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_atmo +/obj/machinery/door/airlock/atmos/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/research icon = 'icons/obj/doors/airlocks/station/research.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_research +/obj/machinery/door/airlock/research/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/freezer name = "freezer airlock" icon = 'icons/obj/doors/airlocks/station/freezer.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_fre +/obj/machinery/door/airlock/freezer/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/science icon = 'icons/obj/doors/airlocks/station/science.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_science +/obj/machinery/door/airlock/science/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/virology icon = 'icons/obj/doors/airlocks/station/virology.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_viro +/obj/machinery/door/airlock/virology/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: Station Airlocks Glass @@ -67,53 +103,89 @@ opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/command/glass opacity = FALSE glass = TRUE normal_integrity = 400 +/obj/machinery/door/airlock/command/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/engineering/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/engineering/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/security/glass opacity = FALSE glass = TRUE normal_integrity = 400 +/obj/machinery/door/airlock/security/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/medical/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/medical/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/virology/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/virology/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/research/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/research/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/mining/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/mining/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/atmos/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/atmos/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/science/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/science/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/maintenance/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/maintenance/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/maintenance/external/glass opacity = FALSE glass = TRUE normal_integrity = 200 +/obj/machinery/door/airlock/maintenance/external/glass/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: Station Airlocks Mineral @@ -125,20 +197,32 @@ assemblytype = /obj/structure/door_assembly/door_assembly_gold paintable = FALSE +/obj/machinery/door/airlock/gold/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/gold/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/gold/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/silver name = "silver airlock" icon = 'icons/obj/doors/airlocks/station/silver.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_silver paintable = FALSE +/obj/machinery/door/airlock/silver/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/silver/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/silver/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/diamond name = "diamond airlock" icon = 'icons/obj/doors/airlocks/station/diamond.dmi' @@ -147,11 +231,17 @@ explosion_block = 2 paintable = FALSE +/obj/machinery/door/airlock/diamond/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/diamond/glass normal_integrity = 950 opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/diamond/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/uranium name = "uranium airlock" desc = "And they said I was crazy." @@ -160,6 +250,9 @@ paintable = FALSE var/last_event = 0 +/obj/machinery/door/airlock/uranium/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/uranium/Initialize(mapload) . = ..() var/datum/component/inherent_radioactivity/radioactivity = AddComponent(/datum/component/inherent_radioactivity, 150, 0, 0, 1.5) @@ -173,6 +266,9 @@ opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/uranium/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/plasma name = "plasma airlock" desc = "No way this can end badly." @@ -180,6 +276,9 @@ assemblytype = /obj/structure/door_assembly/door_assembly_plasma paintable = FALSE +/obj/machinery/door/airlock/plasma/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/plasma/temperature_expose(exposed_temperature, exposed_volume) ..() if(exposed_temperature > 300) @@ -212,6 +311,9 @@ opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/plasma/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/bananium name = "bananium airlock" desc = "Honkhonkhonk!" @@ -221,10 +323,16 @@ doorClose = 'sound/items/bikehorn.ogg' paintable = FALSE +/obj/machinery/door/airlock/bananium/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/bananium/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/bananium/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/tranquillite name = "tranquillite airlock" icon = 'icons/obj/doors/airlocks/station/freezer.dmi' @@ -236,26 +344,41 @@ boltDown = null paintable = FALSE +/obj/machinery/door/airlock/tranquillite/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/sandstone name = "sandstone airlock" icon = 'icons/obj/doors/airlocks/station/sandstone.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_sandstone paintable = FALSE +/obj/machinery/door/airlock/sandstone/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/sandstone/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/sandstone/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/wood name = "wooden airlock" icon = 'icons/obj/doors/airlocks/station/wood.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_wood paintable = FALSE +/obj/machinery/door/airlock/wood/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/wood/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/wood/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/titanium name = "shuttle airlock" assemblytype = /obj/structure/door_assembly/door_assembly_titanium @@ -264,11 +387,17 @@ normal_integrity = 400 paintable = FALSE +/obj/machinery/door/airlock/titanium/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/titanium/glass normal_integrity = 350 opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/titanium/glass/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: Station2 Airlocks @@ -279,10 +408,16 @@ overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_public +/obj/machinery/door/airlock/public/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/public/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/public/glass/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: External Airlocks @@ -304,10 +439,16 @@ return ..() +/obj/machinery/door/airlock/external/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/external/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/external/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/external_no_weld name = "external airlock" icon = 'icons/obj/doors/airlocks/external/external.dmi' @@ -320,6 +461,9 @@ /obj/machinery/door/airlock/external_no_weld/welder_act(mob/user, obj/item/I) return +/obj/machinery/door/airlock/external_no_weld/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: CentCom Airlocks @@ -333,10 +477,16 @@ normal_integrity = 1000 security_level = 6 +/obj/machinery/door/airlock/centcom/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/centcom/glass glass = TRUE opacity = FALSE +/obj/machinery/door/airlock/centcom/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/centcom/glass/Initialize(mapload) . = ..() update_icon() @@ -356,6 +506,9 @@ security_level = 6 paintable = FALSE +/obj/machinery/door/airlock/vault/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: Hatch Airlocks @@ -369,10 +522,16 @@ assemblytype = /obj/structure/door_assembly/door_assembly_hatch paintable = FALSE +/obj/machinery/door/airlock/hatch/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/hatch/syndicate name = "syndicate hatch" req_access = list(ACCESS_SYNDICATE) +/obj/machinery/door/airlock/hatch/syndicate/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/hatch/syndicate/command name = "Command Center" req_access = list(ACCESS_SYNDICATE_COMMAND) @@ -380,6 +539,9 @@ normal_integrity = 1000 security_level = 6 +/obj/machinery/door/airlock/hatch/syndicate/command/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/hatch/syndicate/command/emag_act(mob/user) to_chat(user, SPAN_NOTICE("The electronic systems in this door are far too advanced for your primitive hacking peripherals.")) return @@ -392,6 +554,9 @@ safe = FALSE normal_integrity = 100 // going to get boosted by security level anyway +/obj/machinery/door/airlock/hatch/syndicate/command/trapped/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/hatch/syndicate/command/trapped/process() if(locate(/mob/living) in get_turf(src)) unlock(TRUE) @@ -410,6 +575,9 @@ hackProof = TRUE aiControlDisabled = AICONTROLDISABLED_ON +/obj/machinery/door/airlock/hatch/syndicate/vault/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/maintenance_hatch name = "maintenance hatch" icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' @@ -418,6 +586,9 @@ assemblytype = /obj/structure/door_assembly/door_assembly_mhatch paintable = FALSE +/obj/machinery/door/airlock/maintenance_hatch/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: High Security Airlocks @@ -434,11 +605,17 @@ damage_deflection = 30 paintable = FALSE +/obj/machinery/door/airlock/highsecurity/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/highsecurity/red name = "secure armory airlock" hackProof = TRUE aiControlDisabled = AICONTROLDISABLED_ON +/obj/machinery/door/airlock/highsecurity/red/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/highsecurity/red/Initialize(mapload) . = ..() if(is_station_level(z)) @@ -493,6 +670,9 @@ security_level = 1 paintable = FALSE +/obj/machinery/door/airlock/abductor/manual_rotation + manual_dir = TRUE + // MARK: Clockwork Airlocks /obj/machinery/door/airlock/clockwork @@ -503,6 +683,9 @@ assemblytype = /obj/structure/door_assembly/door_assembly_clockwork paintable = FALSE +/obj/machinery/door/airlock/clockwork/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/clockwork/Initialize(mapload) . = ..() new /obj/effect/temp_visual/ratvar/door(loc) @@ -516,6 +699,9 @@ glass = TRUE opacity = FALSE +/obj/machinery/door/airlock/clockwork/glass/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: Cult Airlocks @@ -547,6 +733,9 @@ /// Inner airlock material (Glass, plasteel) var/stealth_airlock_material = null +/obj/machinery/door/airlock/cult/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/Initialize(mapload) . = ..() icon = GET_CULT_DATA(airlock_runed_icon_file, initial(icon)) @@ -608,10 +797,16 @@ /obj/machinery/door/airlock/cult/friendly friendly = TRUE +/obj/machinery/door/airlock/cult/friendly/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/glass glass = TRUE opacity = FALSE +/obj/machinery/door/airlock/cult/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/glass/Initialize(mapload) . = ..() update_icon() @@ -619,12 +814,18 @@ /obj/machinery/door/airlock/cult/glass/friendly friendly = TRUE +/obj/machinery/door/airlock/cult/glass/friendly/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/unruned icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' overlays_file = 'icons/obj/doors/airlocks/cult/unruned/cult-overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_cult/unruned openingoverlaytype = /obj/effect/temp_visual/cult/door/unruned +/obj/machinery/door/airlock/cult/unruned/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/unruned/Initialize(mapload) . = ..() icon = GET_CULT_DATA(airlock_unruned_icon_file, initial(icon)) @@ -634,10 +835,16 @@ /obj/machinery/door/airlock/cult/unruned/friendly friendly = TRUE +/obj/machinery/door/airlock/cult/unruned/friendly/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/unruned/glass glass = TRUE opacity = FALSE +/obj/machinery/door/airlock/cult/unruned/glass/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/unruned/glass/Initialize(mapload) . = ..() update_icon() @@ -645,6 +852,9 @@ /obj/machinery/door/airlock/cult/unruned/glass/friendly friendly = TRUE +/obj/machinery/door/airlock/cult/unruned/glass/friendly/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/cult/weak name = "brittle cult airlock" desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state." @@ -652,6 +862,9 @@ damage_deflection = 5 armor = null +/obj/machinery/door/airlock/cult/weak/manual_rotation + manual_dir = TRUE + ////////////////////////////////// /* MARK: Misc Airlocks @@ -667,6 +880,9 @@ assemblytype = /obj/structure/door_assembly/multi_tile paintable = FALSE +/obj/machinery/door/airlock/multi_tile/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/multi_tile/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) . = ..() update_bounds() @@ -678,6 +894,9 @@ opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/multi_tile/glass/manual_rotation + manual_dir = TRUE + /// Player view blocking fillers for multi-tile doors /obj/airlock_filler_object name = "airlock fluff" diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7756570c98b..acc9ec598c0 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -51,6 +51,8 @@ /// How many levels of foam do we have on us? Capped at 5 var/foam_level = 0 + /// Is this door prevented from autorotating? + var/manual_dir = FALSE /// Is this door barricaded? var/barricaded = FALSE /// How much this door reduces superconductivity to when closed. @@ -77,10 +79,11 @@ real_explosion_block = explosion_block explosion_block = EXPLOSION_BLOCK_PROC - for(var/d in GLOB.cardinal) - var/turf/T = get_step(src, d) - if(iswallturf(T) || locate(/obj/structure/window/full) in T) - QUEUE_SMOOTH(T) + if(manual_dir == FALSE) + for(var/d in GLOB.cardinal) + var/turf/T = get_step(src, d) + if(iswallturf(T) || locate(/obj/structure/window/full) in T) + QUEUE_SMOOTH(T) update_icon() recalculate_atmos_connectivity() @@ -442,7 +445,7 @@ SEND_SIGNAL(src, COMSIG_DOOR_OPEN) operating = DOOR_OPENING var/direction = get_current_direction() - dir = direction ? direction : NORTH + dir = direction update_icon() recalculate_atmos_connectivity() do_animate("opening") @@ -495,7 +498,7 @@ set_fillers_opacity(TRUE) operating = NONE var/direction = get_current_direction() - dir = direction ? direction : NORTH + dir = direction update_icon() recalculate_atmos_connectivity() update_freelook_sight() @@ -507,6 +510,8 @@ /obj/machinery/door/proc/get_current_direction() // Prioritize walls to avoid adjacent airlock shenanigans + if(manual_dir == TRUE) + return for(var/direction in GLOB.cardinal) if(iswallturf(get_step(src, direction))) return direction @@ -591,6 +596,10 @@ icon = 'icons/obj/doors/doormorgue.dmi' icon_state = "door1" + +/obj/machinery/door/morgue/manual_rotation + manual_dir = TRUE + /obj/machinery/door/proc/lock() return diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 704e437dfe6..8937695c08b 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -80,20 +80,32 @@ crush() return TRUE +/obj/machinery/door/poddoor/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/preopen icon_state = "open" density = FALSE opacity = FALSE +/obj/machinery/door/poddoor/preopen/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/impassable name = "reinforced blast door" desc = "A heavy duty blast door that opens mechanically. Looks even tougher than usual." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF move_resist = INFINITY +/obj/machinery/door/poddoor/impassable/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/impassable/gamma name = "gamma armory hatch" +/obj/machinery/door/poddoor/impassable/gamma/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/impassable/hostile_lockdown() return @@ -158,19 +170,31 @@ layer = CLOSED_BLASTDOOR_LAYER width = 2 +/obj/machinery/door/poddoor/multi_tile/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/multi_tile/triple icon = 'icons/obj/doors/blastdoor_1x3.dmi' width = 3 +/obj/machinery/door/poddoor/multi_tile/triple/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/multi_tile/quad icon = 'icons/obj/doors/blastdoor_1x4.dmi' width = 4 +/obj/machinery/door/poddoor/multi_tile/quad/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/multi_tile/impassable desc = "A heavy duty blast door that opens mechanically. Looks even tougher than usual." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF move_resist = INFINITY +/obj/machinery/door/poddoor/multi_tile/impassable/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/multi_tile/impassable/hostile_lockdown() return @@ -185,6 +209,12 @@ icon = 'icons/obj/doors/blastdoor_1x3.dmi' width = 3 +/obj/machinery/door/poddoor/multi_tile/impassable/triple/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/multi_tile/impassable/quad icon = 'icons/obj/doors/blastdoor_1x4.dmi' width = 4 + +/obj/machinery/door/poddoor/multi_tile/impassable/quad/manual_rotation + manual_dir = TRUE diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 076786b641e..93987a44168 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -8,11 +8,17 @@ damage_deflection = 20 dir = EAST +/obj/machinery/door/poddoor/shutters/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/shutters/preopen icon_state = "open" density = FALSE opacity = FALSE +/obj/machinery/door/poddoor/shutters/preopen/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/shutters/radiation name = "radiation shutters" desc = "Lead-lined shutters with a radiation hazard symbol. Whilst this won't stop you getting irradiated, especially by a supermatter crystal, it will stop radiation travelling as far." @@ -20,6 +26,9 @@ rad_insulation_beta = RAD_BETA_BLOCKER rad_insulation_gamma = RAD_VERY_EXTREME_INSULATION +/obj/machinery/door/poddoor/shutters/radiation/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/shutters/radiation/preopen icon_state = "open" density = FALSE @@ -27,6 +36,9 @@ rad_insulation_beta = RAD_NO_INSULATION rad_insulation_gamma = RAD_NO_INSULATION +/obj/machinery/door/poddoor/shutters/radiation/preopen/manual_rotation + manual_dir = TRUE + /obj/machinery/door/poddoor/shutters/radiation/open() . = ..() rad_insulation_beta = RAD_NO_INSULATION diff --git a/code/game/objects/effects/spawners/random_barrier.dm b/code/game/objects/effects/spawners/random_barrier.dm index ea3dea8dc3b..4be4bd2a91d 100644 --- a/code/game/objects/effects/spawners/random_barrier.dm +++ b/code/game/objects/effects/spawners/random_barrier.dm @@ -3,8 +3,8 @@ icon_state = "barrier" loot = list( /obj/effect/spawner/window/reinforced, - /obj/machinery/door/airlock, - /obj/machinery/door/airlock/welded, + /obj/machinery/door/airlock/spawner, + /obj/machinery/door/airlock/spawner/welded, /obj/structure/barricade/wooden, /obj/structure/falsewall, /turf/simulated/wall, @@ -32,7 +32,7 @@ /obj/effect/spawner/random/barrier/obstruction name = "obstruction" loot = list( - /obj/machinery/door/airlock/welded, + /obj/machinery/door/airlock/spawner/welded, /obj/structure/barricade/wooden, /obj/structure/falsewall, /turf/simulated/wall, @@ -43,8 +43,8 @@ name = "possibly welded airlock" icon_state = "airlock" loot = list( - /obj/machinery/door/airlock = 3, - /obj/machinery/door/airlock/welded = 1, + /obj/machinery/door/airlock/spawner = 3, + /obj/machinery/door/airlock/spawner/welded = 1, ) /obj/effect/spawner/random/barrier/grille_often diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index ed56d7d5f99..39bac6ea28b 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -154,10 +154,16 @@ overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_pod +/obj/machinery/door/airlock/survival_pod/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/survival_pod/glass opacity = FALSE glass = TRUE +/obj/machinery/door/airlock/survival_pod/glass/manual_rotation + manual_dir = TRUE + /obj/structure/door_assembly/door_assembly_pod name = "pod airlock assembly" icon = 'icons/obj/doors/airlocks/survival/survival.dmi' diff --git a/code/modules/ruins/objects_and_mobs/secure_alien_airlock.dm b/code/modules/ruins/objects_and_mobs/secure_alien_airlock.dm index 4b820846491..46a2e5e8aaa 100644 --- a/code/modules/ruins/objects_and_mobs/secure_alien_airlock.dm +++ b/code/modules/ruins/objects_and_mobs/secure_alien_airlock.dm @@ -5,6 +5,9 @@ locked = TRUE req_access = list() +/obj/machinery/door/airlock/abductor/secure/manual_rotation + manual_dir = TRUE + /obj/machinery/door/airlock/abductor/secure/Initialize(mapload) . = ..() // Randomize the wires so they aren't the same as the station