From 830ece4a78e37cd836ff0b5273bd9766eb6fb171 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 11 Aug 2023 04:47:54 +0200 Subject: [PATCH] [MIRROR] Multi-tile airlocks [MDB IGNORE] (#23000) * Multi-tile airlocks * remove SR edits as this is upstreamed * Update airlock.dm * Update airlock.dm * Update tgstation.dme * Delete 23000_airlock_repath.txt --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> --- .../lavaland_surface_biodome_winter.dmm | 4 +- .../LavaRuins/lavaland_surface_seed_vault.dmm | 2 +- .../SpaceRuins/spacehotel_skyrat.dmm | 4 +- _maps/RandomRuins/SpaceRuins/the_outlet.dmm | 2 +- _maps/RandomZLevels/SnowCabin.dmm | 2 +- _maps/map_files/Birdshot/birdshot.dmm | 6 +- .../map_files/Deltastation/DeltaStation2.dmm | 4 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 6 +- _maps/map_files/NorthStar/north_star.dmm | 2 +- _maps/templates/battlecruiser_starfury.dmm | 8 +- _maps/templates/lazy_templates/nukie_base.dmm | 2 +- code/__HELPERS/icons.dm | 13 + code/game/machinery/doors/airlock.dm | 739 +++++++++++++++++- code/game/machinery/doors/airlock_types.dm | 663 ---------------- code/game/machinery/doors/door.dm | 95 ++- code/game/objects/structures/door_assembly.dm | 58 +- .../objects/structures/door_assembly_types.dm | 9 + .../industrial_lift/tram/tram_doors.dm | 3 + .../aesthetics/airlock/code/airlock.dm | 19 +- .../multi_tile/{multi_tile.dmi => glass.dmi} | Bin .../{overlays.dmi => glass_overlays.dmi} | Bin .../multi_tile.dmi => multi_tile/metal.dmi} | Bin .../metal_overlays.dmi} | Bin .../modules/large_doors/code/large_doors.dm | 189 ----- .../large_doors/icons/glass/multi_tile.dmi | Bin 27433 -> 0 bytes .../large_doors/icons/glass/overlays.dmi | Bin 29562 -> 0 bytes .../large_doors/icons/metal/multi_tile.dmi | Bin 12140 -> 0 bytes .../large_doors/icons/metal/overlays.dmi | Bin 23793 -> 0 bytes modular_skyrat/modules/large_doors/readme.md | 26 - tgstation.dme | 2 - .../Scripts/76732_multi-tile_airlocks.txt | 3 + 31 files changed, 910 insertions(+), 951 deletions(-) delete mode 100644 code/game/machinery/doors/airlock_types.dm rename modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/{multi_tile.dmi => glass.dmi} (100%) rename modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/{overlays.dmi => glass_overlays.dmi} (100%) rename modular_skyrat/modules/aesthetics/airlock/icons/airlocks/{multi_tile2/multi_tile.dmi => multi_tile/metal.dmi} (100%) rename modular_skyrat/modules/aesthetics/airlock/icons/airlocks/{multi_tile2/overlays.dmi => multi_tile/metal_overlays.dmi} (100%) delete mode 100644 modular_skyrat/modules/large_doors/code/large_doors.dm delete mode 100644 modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi delete mode 100644 modular_skyrat/modules/large_doors/icons/glass/overlays.dmi delete mode 100644 modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi delete mode 100644 modular_skyrat/modules/large_doors/icons/metal/overlays.dmi delete mode 100644 modular_skyrat/modules/large_doors/readme.md create mode 100644 tools/UpdatePaths/Scripts/76732_multi-tile_airlocks.txt diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index f6966f67917..0e893c1882d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -176,7 +176,7 @@ /turf/open/floor/wood, /area/ruin/powered/snow_biodome) "aO" = ( -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /obj/structure/fans/tiny, /turf/open/floor/pod/dark, /area/ruin/powered/snow_biodome) @@ -360,7 +360,7 @@ /area/ruin/powered/snow_biodome) "Ez" = ( /obj/structure/fans/tiny, -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /turf/open/floor/pod/dark, /area/ruin/powered/snow_biodome) "EA" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index 5c327ba1455..6584122df46 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -88,7 +88,7 @@ /turf/open/floor/iron/dark, /area/ruin/powered/seedvault) "as" = ( -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /turf/open/floor/iron/freezer, /area/ruin/powered/seedvault) "at" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm index 98b9cdd0d9e..9c18ebf6929 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm @@ -1618,7 +1618,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ dir = 4; id_tag = "HotelRoom8" }, @@ -5485,7 +5485,7 @@ /area/ruin/space/has_grav/hotel/power) "Fm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ dir = 4; id_tag = "HotelRoom8" }, diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm index 699d509495d..7e238fe600d 100644 --- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm @@ -2006,7 +2006,7 @@ /turf/open/floor/plating/rust, /area/ruin/space/has_grav/the_outlet/researchrooms) "Wz" = ( -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /turf/open/floor/iron, /area/ruin/space/has_grav/the_outlet/storefront) "WC" = ( diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index 471290bc568..a40afa56077 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -2594,7 +2594,7 @@ }, /area/awaymission/cabin/caves/sovietcave) "nM" = ( -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Medical Bay" }, /obj/structure/cable, diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index bf747e57f11..dc50b7c8cd3 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -39287,7 +39287,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Library" }, /obj/machinery/door/firedoor, @@ -53594,7 +53594,7 @@ "sTa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Diner" }, /obj/machinery/door/firedoor, @@ -53677,7 +53677,7 @@ /turf/open/floor/iron, /area/station/commons/dorms) "sTW" = ( -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Theatre" }, /obj/machinery/door/firedoor, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 2c91d906a4b..c50f8f2b12f 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -50468,7 +50468,7 @@ /turf/open/floor/iron, /area/station/service/kitchen/abandoned) "mDO" = ( -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Laundromat" }, /obj/effect/turf_decal/stripes/line, @@ -61976,7 +61976,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Laundromat" }, /turf/open/floor/iron, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 8b5d413621c..9ac3282052f 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -9043,7 +9043,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "cKp" = ( -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Hydroponics" }, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, @@ -27508,7 +27508,7 @@ dir = 1 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "The Girly Boar" }, /turf/open/floor/iron/dark/textured_half, @@ -71127,7 +71127,7 @@ }, /obj/effect/turf_decal/siding/wood, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "The Girly Boar" }, /turf/open/floor/iron/dark/textured_half, diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index c189dd8ded2..9eb43f65788 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -17328,7 +17328,7 @@ /area/station/maintenance/floor1/starboard/fore) "eur" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Xenoflora" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 979b5f2b058..66fa9cba9ab 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -1028,7 +1028,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) @@ -1590,14 +1590,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor/heavy, /obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) "fF" = ( /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/machinery/door/firedoor/heavy, /obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) "fG" = ( @@ -4457,7 +4457,7 @@ "AJ" = ( /obj/machinery/door/firedoor/heavy, /obj/effect/mapping_helpers/airlock/cutaiwire, -/obj/machinery/door/airlock/glass_large, +/obj/machinery/door/airlock/multi_tile/glass, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index c2ace1e7441..1fda7034220 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -647,7 +647,7 @@ dir = 1 }, /obj/effect/turf_decal/siding/wideplating, -/obj/machinery/door/airlock/glass_large{ +/obj/machinery/door/airlock/multi_tile/glass{ name = "Disembarkents" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 4a8aa5e33c7..61eefd916b4 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1433,3 +1433,16 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) if(scream) stack_trace("Icon Lookup for state: [state] in file [file] failed.") return FALSE + +/** + * Returns the size of the sprite in tiles. + * Takes the icon size and divides it by the world icon size (default 32). + * This gives the size of the sprite in tiles. + * + * @return size of the sprite in tiles + */ +/proc/get_size_in_tiles(obj/target) + var/icon/size_check = icon(target.icon, target.icon_state) + var/size = size_check.Width() / world.icon_size + + return size diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ac42acd062c..b6dbd8c5268 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1239,17 +1239,13 @@ update_icon(ALL, AIRLOCK_OPENING, TRUE) sleep(0.1 SECONDS) set_opacity(0) - //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR if(multi_tile) filler.set_opacity(FALSE) - //SKYRAT EDIT END update_freelook_sight() sleep(0.4 SECONDS) set_density(FALSE) - //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR if(multi_tile) filler.set_density(FALSE) - //SKYRAT EDIT END flags_1 &= ~PREVENT_CLICK_UNDER_1 air_update_turf(TRUE, FALSE) sleep(0.1 SECONDS) @@ -1300,10 +1296,9 @@ var/dangerous_close = !safe || force_crush if(!dangerous_close) - for(var/turf/checked_turf in get_turfs()) // SKYRAT EDIT ADD - //for(var/atom/movable/M in get_turf(src)) // Original - for(var/atom/movable/M in checked_turf) // SKYRAT EDIT CHANGE - if(M.density && M != src) //something is blocking the door + for(var/turf/checked_turf in locs) + for(var/atom/movable/blocking in checked_turf) + if(blocking.density && blocking != src) autoclose_in(DOOR_CLOSE_WAIT) return FALSE @@ -1319,6 +1314,8 @@ layer = CLOSED_DOOR_LAYER if(air_tight) set_density(TRUE) + if(multi_tile) + filler.density = TRUE flags_1 |= PREVENT_CLICK_UNDER_1 //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR if(multi_tile) @@ -1327,6 +1324,8 @@ sleep(0.1 SECONDS) if(!air_tight) set_density(TRUE) + if(multi_tile) + filler.density = TRUE flags_1 |= PREVENT_CLICK_UNDER_1 //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR if(multi_tile) @@ -1337,7 +1336,7 @@ if(dangerous_close) crush() if(visible && !glass) - set_opacity(1) + set_opacity(TRUE) if(multi_tile) filler.set_opacity(TRUE) update_freelook_sight() @@ -1764,6 +1763,728 @@ var/area/source_area = get_area(src) return source_area?.airlock_wires ? new source_area.airlock_wires(src) : new /datum/wires/airlock(src) +/obj/structure/fluff/airlock_filler/Destroy(force) + filled_airlock = null + return ..() + +/** + * Create a ref to our parent airlock and listen for a QDEL, which we will al + */ +/obj/structure/fluff/airlock_filler/proc/pair_airlock(obj/machinery/door/parent_airlock) + if(isnull(parent_airlock)) + stack_trace("Attempted to pair an airlock filler with no parent airlock specified!") + return + + filled_airlock = parent_airlock + RegisterSignal(filled_airlock, COMSIG_QDELETING, PROC_REF(no_airlock)) + +/** + * Multi-tile airlocks pair with a filler panel, if one goes so does the other. + */ +/obj/structure/fluff/airlock_filler/proc/no_airlock() + SIGNAL_HANDLER + + qdel(src) + +/** + * Multi-tile airlocks (using a filler panel) have special handling for movables with PASSGLASS + */ +/obj/structure/fluff/airlock_filler/CanAllowThrough(atom/movable/mover, turf/target) + . = ..() + if(.) + return + + if(istype(mover) && (mover.pass_flags & PASSGLASS)) + return !opacity + +/obj/structure/fluff/airlock_filler/can_be_pulled(user, grab_state, force) + return FALSE + +/obj/structure/fluff/airlock_filler/singularity_act() + return + +/obj/structure/fluff/airlock_filler/singularity_pull(S, current_size) + return + +/* + Station Airlocks Regular +*/ + +/obj/machinery/door/airlock/command + icon = 'icons/obj/doors/airlocks/station/command.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_com + normal_integrity = 450 + +/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/engineering + icon = 'icons/obj/doors/airlocks/station/engineering.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_eng + +/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/hydroponics //Hydroponics front doors! + icon = 'icons/obj/doors/airlocks/station/hydroponics.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_hydro + +/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/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/mining + name = "mining airlock" + icon = 'icons/obj/doors/airlocks/station/mining.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_min + +/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/research + icon = 'icons/obj/doors/airlocks/station/research.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_research + +/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/science + icon = 'icons/obj/doors/airlocks/station/science.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_science + +/obj/machinery/door/airlock/virology + icon = 'icons/obj/doors/airlocks/station/virology.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_viro + +////////////////////////////////// +/* + Station Airlocks Glass +*/ + +/obj/machinery/door/airlock/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/glass/incinerator + autoclose = FALSE + heat_proof = TRUE + req_access = list(ACCESS_SYNDICATE) + +/obj/machinery/door/airlock/glass/incinerator/syndicatelava_interior + name = "Turbine Interior Airlock" + id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_INTERIOR + +/obj/machinery/door/airlock/glass/incinerator/syndicatelava_exterior + name = "Turbine Exterior Airlock" + id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_EXTERIOR + +/obj/machinery/door/airlock/command/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/engineering/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/engineering/glass/critical + critical_machine = TRUE //stops greytide virus from opening & bolting doors in critical positions, such as the SM chamber. + +/obj/machinery/door/airlock/security/glass + opacity = FALSE + glass = TRUE + normal_integrity = 400 + +/obj/machinery/door/airlock/medical/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/hydroponics/glass //Uses same icon as medical/glass, maybe update it with its own unique icon one day? + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/research/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/research/glass/incinerator + autoclose = FALSE + heat_proof = TRUE + +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior + name = "Mixing Room Interior Airlock" + id_tag = INCINERATOR_ORDMIX_AIRLOCK_INTERIOR + +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior + name = "Mixing Room Exterior Airlock" + id_tag = INCINERATOR_ORDMIX_AIRLOCK_EXTERIOR + +/obj/machinery/door/airlock/mining/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/atmos/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/atmos/glass/critical + critical_machine = TRUE //stops greytide virus from opening & bolting doors in critical positions, such as the SM chamber. + +/obj/machinery/door/airlock/science/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/virology/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/maintenance/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/maintenance/external/glass + opacity = FALSE + glass = TRUE + normal_integrity = 200 + +////////////////////////////////// +/* + Station Airlocks Mineral +*/ + +/obj/machinery/door/airlock/gold + name = "gold airlock" + icon = 'icons/obj/doors/airlocks/station/gold.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_gold + +/obj/machinery/door/airlock/gold/discoinferno + heat_proof = TRUE + resistance_flags = FIRE_PROOF + armor_type = /datum/armor/discoinferno_airlock + +/datum/armor/discoinferno_airlock + melee = 30 + bullet = 30 + laser = 20 + energy = 20 + bomb = 10 + fire = 100 + acid = 100 + +/obj/machinery/door/airlock/gold/glass + opacity = FALSE + glass = 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 + +/obj/machinery/door/airlock/silver/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/diamond + name = "diamond airlock" + icon = 'icons/obj/doors/airlocks/station/diamond.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_diamond + normal_integrity = 1000 + explosion_block = 2 + +/obj/machinery/door/airlock/diamond/glass + normal_integrity = 950 + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/uranium + name = "uranium airlock" + icon = 'icons/obj/doors/airlocks/station/uranium.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_uranium + var/last_event = 0 + //Is this airlock actually radioactive? + var/actually_radioactive = TRUE + +/obj/machinery/door/airlock/uranium/process() + if(actually_radioactive && world.time > last_event+20) + if(prob(50)) + radiate() + last_event = world.time + ..() + +/obj/machinery/door/airlock/uranium/proc/radiate() + radiation_pulse( + src, + max_range = 2, + threshold = RAD_LIGHT_INSULATION, + chance = URANIUM_IRRADIATION_CHANCE, + minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME, + ) + +/obj/machinery/door/airlock/uranium/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/uranium/safe + actually_radioactive = FALSE + +/obj/machinery/door/airlock/uranium/glass/safe + actually_radioactive = FALSE + +/obj/machinery/door/airlock/plasma + name = "plasma airlock" + desc = "No way this can end badly." + icon = 'icons/obj/doors/airlocks/station/plasma.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_plasma + material_flags = MATERIAL_EFFECTS + material_modifier = 0.25 + +/obj/machinery/door/airlock/plasma/Initialize(mapload) + custom_materials = custom_materials ? custom_materials : list(/datum/material/plasma = SHEET_MATERIAL_AMOUNT * 10) + . = ..() + +/obj/machinery/door/airlock/plasma/block_superconductivity() //we don't stop the heat~ + return 0 + +/obj/machinery/door/airlock/plasma/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/bananium + name = "bananium airlock" + desc = "Honkhonkhonk" + icon = 'icons/obj/doors/airlocks/station/bananium.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_bananium + doorOpen = 'sound/items/bikehorn.ogg' + +/obj/machinery/door/airlock/bananium/glass + opacity = FALSE + glass = 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 + +/obj/machinery/door/airlock/sandstone/glass + opacity = FALSE + glass = 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 + +/obj/machinery/door/airlock/wood/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/titanium + name = "shuttle airlock" + assemblytype = /obj/structure/door_assembly/door_assembly_titanium + icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' + overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' + normal_integrity = 400 + +/obj/machinery/door/airlock/titanium/glass + normal_integrity = 350 + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/bronze + name = "bronze airlock" + icon = 'icons/obj/doors/airlocks/clockwork/pinion_airlock.dmi' + overlays_file = 'icons/obj/doors/airlocks/clockwork/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_bronze + +/obj/machinery/door/airlock/bronze/seethru + assemblytype = /obj/structure/door_assembly/door_assembly_bronze/seethru + opacity = FALSE + glass = TRUE +////////////////////////////////// +/* + Station2 Airlocks +*/ + +/obj/machinery/door/airlock/public + icon = 'icons/obj/doors/airlocks/station2/glass.dmi' + overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_public + +/obj/machinery/door/airlock/public/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/public/glass/incinerator + autoclose = FALSE + heat_proof = TRUE + +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior + name = "Turbine Interior Airlock" + id_tag = INCINERATOR_ATMOS_AIRLOCK_INTERIOR + +/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior + name = "Turbine Exterior Airlock" + id_tag = INCINERATOR_ATMOS_AIRLOCK_EXTERIOR + +////////////////////////////////// +/* + External Airlocks +*/ + +/obj/machinery/door/airlock/external + name = "external airlock" + icon = 'icons/obj/doors/airlocks/external/external.dmi' + overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_ext + + /// Whether or not the airlock can be opened without access from a certain direction while powered, or with bare hands from any direction while unpowered OR pressurized. + var/space_dir = null + +/obj/machinery/door/airlock/external/Initialize(mapload, ...) + // default setting is for mapping only, let overrides work + if(!mapload) + req_access = null + + return ..() + +/obj/machinery/door/airlock/external/LateInitialize() + . = ..() + if(space_dir) + unres_sides |= space_dir + +/obj/machinery/door/airlock/external/examine(mob/user) + . = ..() + if(space_dir) + . += span_notice("It has labels indicating that it has an emergency mechanism to open from the [dir2text(space_dir)] side with just your hands even if there's no power.") + +/obj/machinery/door/airlock/external/cyclelinkairlock() + . = ..() + var/obj/machinery/door/airlock/external/cycle_linked_external_airlock = cyclelinkedairlock + if(istype(cycle_linked_external_airlock)) + cycle_linked_external_airlock.space_dir |= space_dir + space_dir |= cycle_linked_external_airlock.space_dir + +/obj/machinery/door/airlock/external/try_safety_unlock(mob/user) + if(space_dir && density) + if(!hasPower()) + to_chat(user, span_notice("You begin unlocking the airlock safety mechanism...")) + if(do_after(user, 15 SECONDS, target = src)) + try_to_crowbar(null, user, TRUE) + return TRUE + else + // always open from the space side + // get_dir(src, user) & space_dir, checked in unresricted_sides + var/should_safety_open = shuttledocked || cyclelinkedairlock?.shuttledocked || is_safe_turf(get_step(src, space_dir), TRUE, FALSE) + return try_to_activate_door(user, should_safety_open) + + return ..() + +/// Access free external airlock +/obj/machinery/door/airlock/external/ruin + +/obj/machinery/door/airlock/external/glass + opacity = FALSE + glass = TRUE + +/// Access free external glass airlock +/obj/machinery/door/airlock/external/glass/ruin + +////////////////////////////////// +/* + CentCom Airlocks +*/ + +/obj/machinery/door/airlock/centcom //Use grunge as a station side version, as these have special effects related to them via phobias and such. + icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' + overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_centcom + normal_integrity = 1000 + security_level = 6 + explosion_block = 2 + +/obj/machinery/door/airlock/grunge + icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' + overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_grunge + +////////////////////////////////// +/* + Vault Airlocks +*/ + +/obj/machinery/door/airlock/vault + name = "vault door" + icon = 'icons/obj/doors/airlocks/vault/vault.dmi' + overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_vault + explosion_block = 2 + normal_integrity = 400 // reverse engieneerd: 400 * 1.5 (sec lvl 6) = 600 = original + security_level = 6 + +////////////////////////////////// +/* + Hatch Airlocks +*/ + +/obj/machinery/door/airlock/hatch + name = "airtight hatch" + icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' + overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_hatch + +/obj/machinery/door/airlock/maintenance_hatch + name = "maintenance hatch" + icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' + overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_mhatch + +////////////////////////////////// +/* + High Security Airlocks +*/ + +/obj/machinery/door/airlock/highsecurity + name = "high tech security airlock" + icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi' + overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity + explosion_block = 2 + normal_integrity = 500 + security_level = 1 + damage_deflection = 30 + +////////////////////////////////// +/* + Shuttle Airlocks +*/ + +/obj/machinery/door/airlock/shuttle + name = "shuttle airlock" + icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' + overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_shuttle + +/obj/machinery/door/airlock/shuttle/glass + opacity = FALSE + glass = TRUE + +/obj/machinery/door/airlock/abductor + name = "alien airlock" + desc = "With humanity's current technological level, it could take years to hack this advanced airlock... or maybe we should give a screwdriver a try?" + icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi' + overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_abductor + note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' + damage_deflection = 30 + explosion_block = 3 + hackProof = TRUE + aiControlDisabled = AI_WIRE_DISABLED + normal_integrity = 700 + security_level = 1 + +////////////////////////////////// +/* + Cult Airlocks +*/ + +/obj/machinery/door/airlock/cult + name = "cult airlock" + icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' + overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_cult + hackProof = TRUE + aiControlDisabled = AI_WIRE_DISABLED + req_access = list(ACCESS_BLOODCULT) + damage_deflection = 10 + var/openingoverlaytype = /obj/effect/temp_visual/cult/door + var/friendly = FALSE + var/stealthy = FALSE + +/obj/machinery/door/airlock/cult/Initialize(mapload) + . = ..() + new openingoverlaytype(loc) + +/obj/machinery/door/airlock/cult/canAIControl(mob/user) + return (IS_CULTIST(user) && !isAllPowerCut()) + +/obj/machinery/door/airlock/cult/on_break() + set_panel_open(TRUE) + +/obj/machinery/door/airlock/cult/isElectrified() + return FALSE + +/obj/machinery/door/airlock/cult/hasPower() + return TRUE + +/obj/machinery/door/airlock/cult/allowed(mob/living/L) + if(!density) + return TRUE + if(friendly || IS_CULTIST(L) || isshade(L) || isconstruct(L)) + if(!stealthy) + new openingoverlaytype(loc) + return TRUE + else + if(!stealthy) + new /obj/effect/temp_visual/cult/sac(loc) + var/atom/throwtarget + throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) + SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50)) + flash_color(L, flash_color="#960000", flash_time=20) + L.Paralyze(40) + L.throw_at(throwtarget, 5, 1) + return FALSE + +/obj/machinery/door/airlock/cult/proc/conceal() + icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' + overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' + name = "Airlock" + desc = "It opens and closes." + stealthy = TRUE + update_appearance() + +/obj/machinery/door/airlock/cult/proc/reveal() + icon = initial(icon) + overlays_file = initial(overlays_file) + name = initial(name) + desc = initial(desc) + stealthy = initial(stealthy) + update_appearance() + +/obj/machinery/door/airlock/cult/narsie_act() + return + +/obj/machinery/door/airlock/cult/emp_act(severity) + return + +/obj/machinery/door/airlock/cult/friendly + friendly = TRUE + +/obj/machinery/door/airlock/cult/glass + glass = TRUE + opacity = FALSE + +/obj/machinery/door/airlock/cult/glass/friendly + friendly = TRUE + +/obj/machinery/door/airlock/cult/unruned + icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' + overlays_file = 'icons/obj/doors/airlocks/cult/unruned/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/friendly + friendly = TRUE + +/obj/machinery/door/airlock/cult/unruned/glass + glass = TRUE + opacity = FALSE + +/obj/machinery/door/airlock/cult/unruned/glass/friendly + friendly = 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." + normal_integrity = 150 + damage_deflection = 5 + armor_type = /datum/armor/none + + +////////////////////////////////// +/* + Material Airlocks +*/ +/obj/machinery/door/airlock/material + name = "Airlock" + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS + greyscale_config = /datum/greyscale_config/material_airlock + assemblytype = /obj/structure/door_assembly/door_assembly_material + +/obj/machinery/door/airlock/material/close(forced, force_crush) + . = ..() + if(!.) + return + for(var/datum/material/mat in custom_materials) + if(mat.alpha < 255) + set_opacity(FALSE) + break + +/obj/machinery/door/airlock/material/prepare_deconstruction_assembly(obj/structure/door_assembly/assembly) + assembly.set_custom_materials(custom_materials) + ..() + +/obj/machinery/door/airlock/material/glass + opacity = FALSE + glass = TRUE + +////////////////////////////////// +/* + Misc Airlocks +*/ + +/obj/machinery/door/airlock/multi_tile/glass + multi_tile = TRUE + name = "large glass airlock" + icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi' + overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' + opacity = FALSE + assemblytype = /obj/structure/door_assembly/multi_tile/glass + glass = TRUE + bound_width = 64 // 2x1 + +/obj/structure/fluff/airlock_filler + name = "airlock fluff" + desc = "You shouldn't be able to see this fluff!" + icon = null + icon_state = null + density = TRUE + opacity = TRUE + anchored = TRUE + invisibility = INVISIBILITY_MAXIMUM + can_atmos_pass = ATMOS_PASS_DENSITY + /// The door/airlock this fluff panel is attached to + var/obj/machinery/door/filled_airlock + +/obj/machinery/door/airlock/multi_tile/narsie_act() + return + +/// Subtype used in unit tests to ensure instant airlock opening/closing. Pretty much just excises everything that would delay the process or is un-needed for the sake of the test (sleeps, icon animations). +/obj/machinery/door/airlock/instant + +// set_density on both open and close procs has a check and return builtin. + +/obj/machinery/door/airlock/instant/open(forced = DEFAULT_DOOR_CHECKS) + operating = TRUE + SEND_SIGNAL(src, COMSIG_AIRLOCK_OPEN, forced) + set_density(FALSE) + operating = FALSE + return TRUE + +/obj/machinery/door/airlock/instant/close(forced = DEFAULT_DOOR_CHECKS, force_crush = FALSE) + operating = TRUE + SEND_SIGNAL(src, COMSIG_AIRLOCK_CLOSE, forced) + set_density(TRUE) + operating = FALSE + return TRUE + + #undef AIRLOCK_CLOSED #undef AIRLOCK_CLOSING #undef AIRLOCK_OPEN diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm deleted file mode 100644 index 0d5ea4c8bb0..00000000000 --- a/code/game/machinery/doors/airlock_types.dm +++ /dev/null @@ -1,663 +0,0 @@ -/* - Station Airlocks Regular -*/ - -/obj/machinery/door/airlock/command - icon = 'icons/obj/doors/airlocks/station/command.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_com - normal_integrity = 450 - -/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/engineering - icon = 'icons/obj/doors/airlocks/station/engineering.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_eng - -/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/hydroponics //Hydroponics front doors! - icon = 'icons/obj/doors/airlocks/station/hydroponics.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_hydro - -/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/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/mining - name = "mining airlock" - icon = 'icons/obj/doors/airlocks/station/mining.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_min - -/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/research - icon = 'icons/obj/doors/airlocks/station/research.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_research - -/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/science - icon = 'icons/obj/doors/airlocks/station/science.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_science - -/obj/machinery/door/airlock/virology - icon = 'icons/obj/doors/airlocks/station/virology.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_viro - -////////////////////////////////// -/* - Station Airlocks Glass -*/ - -/obj/machinery/door/airlock/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/glass/incinerator - autoclose = FALSE - heat_proof = TRUE - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/door/airlock/glass/incinerator/syndicatelava_interior - name = "Turbine Interior Airlock" - id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_INTERIOR - -/obj/machinery/door/airlock/glass/incinerator/syndicatelava_exterior - name = "Turbine Exterior Airlock" - id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_EXTERIOR - -/obj/machinery/door/airlock/command/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/engineering/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/engineering/glass/critical - critical_machine = TRUE //stops greytide virus from opening & bolting doors in critical positions, such as the SM chamber. - -/obj/machinery/door/airlock/security/glass - opacity = FALSE - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/medical/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/hydroponics/glass //Uses same icon as medical/glass, maybe update it with its own unique icon one day? - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/research/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/research/glass/incinerator - autoclose = FALSE - heat_proof = TRUE - -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior - name = "Mixing Room Interior Airlock" - id_tag = INCINERATOR_ORDMIX_AIRLOCK_INTERIOR - -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior - name = "Mixing Room Exterior Airlock" - id_tag = INCINERATOR_ORDMIX_AIRLOCK_EXTERIOR - -/obj/machinery/door/airlock/mining/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/atmos/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/atmos/glass/critical - critical_machine = TRUE //stops greytide virus from opening & bolting doors in critical positions, such as the SM chamber. - -/obj/machinery/door/airlock/science/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/virology/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/maintenance/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/maintenance/external/glass - opacity = FALSE - glass = TRUE - normal_integrity = 200 - -////////////////////////////////// -/* - Station Airlocks Mineral -*/ - -/obj/machinery/door/airlock/gold - name = "gold airlock" - icon = 'icons/obj/doors/airlocks/station/gold.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_gold - -/obj/machinery/door/airlock/gold/discoinferno - heat_proof = TRUE - resistance_flags = FIRE_PROOF - armor_type = /datum/armor/discoinferno_airlock - -/datum/armor/discoinferno_airlock - melee = 30 - bullet = 30 - laser = 20 - energy = 20 - bomb = 10 - fire = 100 - acid = 100 - -/obj/machinery/door/airlock/gold/glass - opacity = FALSE - glass = 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 - -/obj/machinery/door/airlock/silver/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/diamond - name = "diamond airlock" - icon = 'icons/obj/doors/airlocks/station/diamond.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_diamond - normal_integrity = 1000 - explosion_block = 2 - -/obj/machinery/door/airlock/diamond/glass - normal_integrity = 950 - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/uranium - name = "uranium airlock" - icon = 'icons/obj/doors/airlocks/station/uranium.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_uranium - var/last_event = 0 - //Is this airlock actually radioactive? - var/actually_radioactive = TRUE - -/obj/machinery/door/airlock/uranium/process() - if(actually_radioactive && world.time > last_event+20) - if(prob(50)) - radiate() - last_event = world.time - ..() - -/obj/machinery/door/airlock/uranium/proc/radiate() - radiation_pulse( - src, - max_range = 2, - threshold = RAD_LIGHT_INSULATION, - chance = URANIUM_IRRADIATION_CHANCE, - minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME, - ) - -/obj/machinery/door/airlock/uranium/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/uranium/safe - actually_radioactive = FALSE - -/obj/machinery/door/airlock/uranium/glass/safe - actually_radioactive = FALSE - -/obj/machinery/door/airlock/plasma - name = "plasma airlock" - desc = "No way this can end badly." - icon = 'icons/obj/doors/airlocks/station/plasma.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_plasma - material_flags = MATERIAL_EFFECTS - material_modifier = 0.25 - -/obj/machinery/door/airlock/plasma/Initialize(mapload) - custom_materials = custom_materials ? custom_materials : list(/datum/material/plasma = SHEET_MATERIAL_AMOUNT * 10) - . = ..() - -/obj/machinery/door/airlock/plasma/block_superconductivity() //we don't stop the heat~ - return 0 - -/obj/machinery/door/airlock/plasma/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/bananium - name = "bananium airlock" - desc = "Honkhonkhonk" - icon = 'icons/obj/doors/airlocks/station/bananium.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_bananium - doorOpen = 'sound/items/bikehorn.ogg' - -/obj/machinery/door/airlock/bananium/glass - opacity = FALSE - glass = 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 - -/obj/machinery/door/airlock/sandstone/glass - opacity = FALSE - glass = 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 - -/obj/machinery/door/airlock/wood/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/titanium - name = "shuttle airlock" - assemblytype = /obj/structure/door_assembly/door_assembly_titanium - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - normal_integrity = 400 - -/obj/machinery/door/airlock/titanium/glass - normal_integrity = 350 - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/bronze - name = "bronze airlock" - icon = 'icons/obj/doors/airlocks/clockwork/pinion_airlock.dmi' - overlays_file = 'icons/obj/doors/airlocks/clockwork/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_bronze - -/obj/machinery/door/airlock/bronze/seethru - assemblytype = /obj/structure/door_assembly/door_assembly_bronze/seethru - opacity = FALSE - glass = TRUE -////////////////////////////////// -/* - Station2 Airlocks -*/ - -/obj/machinery/door/airlock/public - icon = 'icons/obj/doors/airlocks/station2/glass.dmi' - overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_public - -/obj/machinery/door/airlock/public/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/public/glass/incinerator - autoclose = FALSE - heat_proof = TRUE - -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior - name = "Turbine Interior Airlock" - id_tag = INCINERATOR_ATMOS_AIRLOCK_INTERIOR - -/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior - name = "Turbine Exterior Airlock" - id_tag = INCINERATOR_ATMOS_AIRLOCK_EXTERIOR - -////////////////////////////////// -/* - External Airlocks -*/ - -/obj/machinery/door/airlock/external - name = "external airlock" - icon = 'icons/obj/doors/airlocks/external/external.dmi' - overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_ext - - /// Whether or not the airlock can be opened without access from a certain direction while powered, or with bare hands from any direction while unpowered OR pressurized. - var/space_dir = null - -/obj/machinery/door/airlock/external/Initialize(mapload, ...) - // default setting is for mapping only, let overrides work - if(!mapload) - req_access = null - - return ..() - -/obj/machinery/door/airlock/external/LateInitialize() - . = ..() - if(space_dir) - unres_sides |= space_dir - -/obj/machinery/door/airlock/external/examine(mob/user) - . = ..() - if(space_dir) - . += span_notice("It has labels indicating that it has an emergency mechanism to open from the [dir2text(space_dir)] side with just your hands even if there's no power.") - -/obj/machinery/door/airlock/external/cyclelinkairlock() - . = ..() - var/obj/machinery/door/airlock/external/cycle_linked_external_airlock = cyclelinkedairlock - if(istype(cycle_linked_external_airlock)) - cycle_linked_external_airlock.space_dir |= space_dir - space_dir |= cycle_linked_external_airlock.space_dir - -/obj/machinery/door/airlock/external/try_safety_unlock(mob/user) - if(space_dir && density) - if(!hasPower()) - to_chat(user, span_notice("You begin unlocking the airlock safety mechanism...")) - if(do_after(user, 15 SECONDS, target = src)) - try_to_crowbar(null, user, TRUE) - return TRUE - else - // always open from the space side - // get_dir(src, user) & space_dir, checked in unresricted_sides - var/should_safety_open = shuttledocked || cyclelinkedairlock?.shuttledocked || is_safe_turf(get_step(src, space_dir), TRUE, FALSE) - return try_to_activate_door(user, should_safety_open) - - return ..() - -/// Access free external airlock -/obj/machinery/door/airlock/external/ruin - -/obj/machinery/door/airlock/external/glass - opacity = FALSE - glass = TRUE - -/// Access free external glass airlock -/obj/machinery/door/airlock/external/glass/ruin - -////////////////////////////////// -/* - CentCom Airlocks -*/ - -/obj/machinery/door/airlock/centcom //Use grunge as a station side version, as these have special effects related to them via phobias and such. - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_centcom - normal_integrity = 1000 - security_level = 6 - explosion_block = 2 - -/obj/machinery/door/airlock/grunge - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_grunge - -////////////////////////////////// -/* - Vault Airlocks -*/ - -/obj/machinery/door/airlock/vault - name = "vault door" - icon = 'icons/obj/doors/airlocks/vault/vault.dmi' - overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_vault - explosion_block = 2 - normal_integrity = 400 // reverse engieneerd: 400 * 1.5 (sec lvl 6) = 600 = original - security_level = 6 - -////////////////////////////////// -/* - Hatch Airlocks -*/ - -/obj/machinery/door/airlock/hatch - name = "airtight hatch" - icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_hatch - -/obj/machinery/door/airlock/maintenance_hatch - name = "maintenance hatch" - icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_mhatch - -////////////////////////////////// -/* - High Security Airlocks -*/ - -/obj/machinery/door/airlock/highsecurity - name = "high tech security airlock" - icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi' - overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity - explosion_block = 2 - normal_integrity = 500 - security_level = 1 - damage_deflection = 30 - -////////////////////////////////// -/* - Shuttle Airlocks -*/ - -/obj/machinery/door/airlock/shuttle - name = "shuttle airlock" - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_shuttle - -/obj/machinery/door/airlock/shuttle/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/abductor - name = "alien airlock" - desc = "With humanity's current technological level, it could take years to hack this advanced airlock... or maybe we should give a screwdriver a try?" - icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi' - overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_abductor - note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - damage_deflection = 30 - explosion_block = 3 - hackProof = TRUE - aiControlDisabled = AI_WIRE_DISABLED - normal_integrity = 700 - security_level = 1 - -////////////////////////////////// -/* - Cult Airlocks -*/ - -/obj/machinery/door/airlock/cult - name = "cult airlock" - icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_cult - hackProof = TRUE - aiControlDisabled = AI_WIRE_DISABLED - req_access = list(ACCESS_BLOODCULT) - damage_deflection = 10 - var/openingoverlaytype = /obj/effect/temp_visual/cult/door - var/friendly = FALSE - var/stealthy = FALSE - -/obj/machinery/door/airlock/cult/Initialize(mapload) - . = ..() - new openingoverlaytype(loc) - -/obj/machinery/door/airlock/cult/canAIControl(mob/user) - return (IS_CULTIST(user) && !isAllPowerCut()) - -/obj/machinery/door/airlock/cult/on_break() - set_panel_open(TRUE) - -/obj/machinery/door/airlock/cult/isElectrified() - return FALSE - -/obj/machinery/door/airlock/cult/hasPower() - return TRUE - -/obj/machinery/door/airlock/cult/allowed(mob/living/L) - if(!density) - return TRUE - if(friendly || IS_CULTIST(L) || isshade(L) || isconstruct(L)) - if(!stealthy) - new openingoverlaytype(loc) - return TRUE - else - if(!stealthy) - new /obj/effect/temp_visual/cult/sac(loc) - var/atom/throwtarget - throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) - SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50)) - flash_color(L, flash_color="#960000", flash_time=20) - L.Paralyze(40) - L.throw_at(throwtarget, 5, 1) - return FALSE - -/obj/machinery/door/airlock/cult/proc/conceal() - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - name = "Airlock" - desc = "It opens and closes." - stealthy = TRUE - update_appearance() - -/obj/machinery/door/airlock/cult/proc/reveal() - icon = initial(icon) - overlays_file = initial(overlays_file) - name = initial(name) - desc = initial(desc) - stealthy = initial(stealthy) - update_appearance() - -/obj/machinery/door/airlock/cult/narsie_act() - return - -/obj/machinery/door/airlock/cult/emp_act(severity) - return - -/obj/machinery/door/airlock/cult/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/glass - glass = TRUE - opacity = FALSE - -/obj/machinery/door/airlock/cult/glass/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/unruned - icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/unruned/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/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/unruned/glass - glass = TRUE - opacity = FALSE - -/obj/machinery/door/airlock/cult/unruned/glass/friendly - friendly = 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." - normal_integrity = 150 - damage_deflection = 5 - armor_type = /datum/armor/none - - -////////////////////////////////// -/* - Material Airlocks -*/ -/obj/machinery/door/airlock/material - name = "Airlock" - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS - greyscale_config = /datum/greyscale_config/material_airlock - assemblytype = /obj/structure/door_assembly/door_assembly_material - -/obj/machinery/door/airlock/material/close(forced, force_crush) - . = ..() - if(!.) - return - for(var/datum/material/mat in custom_materials) - if(mat.alpha < 255) - set_opacity(FALSE) - break - -/obj/machinery/door/airlock/material/prepare_deconstruction_assembly(obj/structure/door_assembly/assembly) - assembly.set_custom_materials(custom_materials) - ..() - -/obj/machinery/door/airlock/material/glass - opacity = FALSE - glass = TRUE - -////////////////////////////////// -/* - Misc Airlocks -*/ - -/obj/machinery/door/airlock/glass_large - name = "large glass airlock" - icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi' - overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' - opacity = FALSE - assemblytype = null - glass = TRUE - bound_width = 64 // 2x1 - -/obj/machinery/door/airlock/glass_large/narsie_act() - return - -/// Subtype used in unit tests to ensure instant airlock opening/closing. Pretty much just excises everything that would delay the process or is un-needed for the sake of the test (sleeps, icon animations). -/obj/machinery/door/airlock/instant - -// set_density on both open and close procs has a check and return builtin. - -/obj/machinery/door/airlock/instant/open(forced = DEFAULT_DOOR_CHECKS) - operating = TRUE - SEND_SIGNAL(src, COMSIG_AIRLOCK_OPEN, forced) - set_density(FALSE) - operating = FALSE - return TRUE - -/obj/machinery/door/airlock/instant/close(forced = DEFAULT_DOOR_CHECKS, force_crush = FALSE) - operating = TRUE - SEND_SIGNAL(src, COMSIG_AIRLOCK_CLOSE, forced) - set_density(TRUE) - operating = FALSE - return TRUE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 671e3efb197..3d9a22387f2 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -27,6 +27,10 @@ var/visible = TRUE var/operating = FALSE var/glass = FALSE + /// Do we need to keep track of a filler panel with the airlock + var/multi_tile + /// A filler object used to fill the space of multi-tile airlocks + var/obj/structure/fluff/airlock_filler/filler var/welded = FALSE var/heat_proof = FALSE // For rglass-windowed airlocks and firedoors var/emergency = FALSE // Emergency access override @@ -66,6 +70,10 @@ AddElement(/datum/element/blocks_explosives) . = ..() set_init_door_layer() + if(bound_width > world.icon_size) + multi_tile = TRUE + set_filler() + update_overlays() update_freelook_sight() air_update_turf(TRUE, TRUE) register_context() @@ -133,9 +141,46 @@ if(spark_system) qdel(spark_system) spark_system = null + QDEL_NULL(filler) air_update_turf(TRUE, FALSE) return ..() +/obj/machinery/door/Move() + if(multi_tile) + set_filler() + return ..() + +/** + * Sets the bounds of the airlock. For use with multi-tile airlocks. + * If the airlock is multi-tile, it will set the bounds to be the size of the airlock. + * If the airlock doesn't already have a filler object, it will create one. + * If the airlock already has a filler object, it will move it to the correct location. + */ +/obj/machinery/door/proc/set_filler() + if(!multi_tile) + return + if(!filler) + filler = new(get_step(src, get_adjusted_dir(dir))) + filler.pair_airlock(src) + else + filler.loc = get_step(src, get_adjusted_dir(dir)) + + filler.density = density + filler.set_opacity(opacity) + +/** + * Checks which way the airlock is facing and adjusts the direction accordingly. + * For use with multi-tile airlocks. + * + * @param dir direction to adjust + * @return adjusted direction + */ +/obj/machinery/door/proc/get_adjusted_dir(dir) + if(dir in list(NORTH, SOUTH)) + return EAST + else + return NORTH + /** * Signal handler for checking if we notify our surrounding that access requirements are lifted accordingly to a newly set security level * @@ -453,31 +498,31 @@ open() /obj/machinery/door/proc/crush() - for(var/mob/living/L in get_turf(src)) - L.visible_message(span_warning("[src] closes on [L], crushing [L.p_them()]!"), span_userdanger("[src] closes on you and crushes you!")) - SEND_SIGNAL(L, COMSIG_LIVING_DOORCRUSHED, src) - if(isalien(L)) //For xenos - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. - L.emote("roar") - else if(ishuman(L)) //For humans - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - L.emote("scream") - //L.Paralyze(100) //SKYRAT EDIT CHANGE - COMBAT - ORIGINAL - L.StaminaKnockdown(20, TRUE, TRUE) - else if(ismonkey(L)) //For monkeys - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - //L.Paralyze(100) //ORIGINAL - L.StaminaKnockdown(20, TRUE, TRUE) - //SKYRAT EDIT END - else //for simple_animals & borgs - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - var/turf/location = get_turf(src) - //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - L.add_splatter_floor(location) - log_combat(src, L, "crushed") - for(var/obj/vehicle/sealed/mecha/M in get_turf(src)) - M.take_damage(DOOR_CRUSH_DAMAGE) - log_combat(src, M, "crushed") + for(var/turf/checked_turf in locs) + for(var/mob/living/future_pancake in checked_turf) + future_pancake.visible_message(span_warning("[src] closes on [future_pancake], crushing [future_pancake.p_them()]!"), span_userdanger("[src] closes on you and crushes you!")) + SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src) + if(isalien(future_pancake)) //For xenos + future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. + future_pancake.emote("roar") + else if(ishuman(future_pancake)) //For humans + future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) + future_pancake.emote("scream") + // future_pancake.Paralyze(100) // ORIGINAL + future_pancake.StaminaKnockdown(20, TRUE, TRUE) // SKYRAT EDIT CHANGE - AIRLOCKS + else if(ismonkey(future_pancake)) //For monkeys + future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) + // future_pancake.Paralyze(100) // ORIGINAL + future_pancake.StaminaKnockdown(20, TRUE, TRUE) // SKYRAT EDIT CHANGE - AIRLOCKS + else //for simple_animals & borgs + future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) + var/turf/location = get_turf(src) + //add_blood doesn't work for borgs/xenos, but add_blood_floor does. + future_pancake.add_splatter_floor(location) + log_combat(src, future_pancake, "crushed") + for(var/obj/vehicle/sealed/mecha/mech in get_turf(src)) // Your fancy metal won't save you here! + mech.take_damage(DOOR_CRUSH_DAMAGE) + log_combat(src, mech, "crushed") /obj/machinery/door/proc/autoclose() if(!QDELETED(src) && !density && !operating && !locked && !welded && autoclose) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 23da14ec788..b09dd7a5f83 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -6,26 +6,51 @@ anchored = FALSE density = TRUE max_integrity = 200 + /// Airlock's current construction state var/state = AIRLOCK_ASSEMBLY_NEEDS_WIRES var/base_name = "Airlock" + var/created_name = null var/mineral = null var/obj/item/electronics/airlock/electronics = null - var/airlock_type = /obj/machinery/door/airlock //the type path of the airlock once completed + /// Do we perform the extra checks required for multi-tile (large) airlocks + var/multi_tile = FALSE + /// The type path of the airlock once completed (solid version) + var/airlock_type = /obj/machinery/door/airlock + /// The type path of the airlock once completed (glass version) var/glass_type = /obj/machinery/door/airlock/glass - var/glass = 0 // 0 = glass can be installed. 1 = glass is already installed. - var/created_name = null - var/heat_proof_finished = 0 //whether to heat-proof the finished airlock + /// FALSE = glass can be installed. TRUE = glass is already installed. + var/glass = FALSE + /// Whether to heat-proof the finished airlock + var/heat_proof_finished = FALSE + /// If you're changing the airlock material, what is the previous type var/previous_assembly = /obj/structure/door_assembly - var/noglass = FALSE //airlocks with no glass version, also cannot be modified with sheets - var/nomineral = FALSE //airlock with glass version, but cannot be modified with sheets + /// Airlocks with no glass version, also cannot be modified with sheets + var/noglass = FALSE + /// Airlock with glass version, but cannot be modified with sheets + var/nomineral = FALSE + /// What type of material the airlock drops when deconstructed var/material_type = /obj/item/stack/sheet/iron + /// Amount of material the airlock drops when deconstructed var/material_amt = 4 +/obj/structure/door_assembly/multi_tile + dir = EAST + multi_tile = TRUE + /obj/structure/door_assembly/Initialize(mapload) . = ..() update_appearance() update_name() +/obj/structure/door_assembly/multi_tile/Initialize(mapload) + . = ..() + set_bounds() + update_overlays() + +/obj/structure/door_assembly/multi_tile/Move() + . = ..() + set_bounds() + /obj/structure/door_assembly/examine(mob/user) . = ..() var/doorname = "" @@ -78,7 +103,7 @@ to_chat(user, span_notice("You weld the glass panel out.")) if(heat_proof_finished) new /obj/item/stack/sheet/rglass(get_turf(src)) - heat_proof_finished = 0 + heat_proof_finished = FALSE else new /obj/item/stack/sheet/glass(get_turf(src)) glass = 0 @@ -259,10 +284,6 @@ else door = new airlock_type( loc ) door.setDir(dir) - //SKYRAT EDIT ADDITION BEGIN - LARGE_DOORS - if(door.multi_tile) - door.set_bounds() - //SKYRAT EDIT END door.unres_sides = electronics.unres_sides //door.req_access = req_access door.electronics = electronics @@ -364,3 +385,18 @@ qdel(src) return TRUE return FALSE + +/** + * Updates the bounds of the airlock assembly + * Sets the bounds of the airlock assembly according to the direction. + * This ensures that the bounds are always correct, even if the airlock is rotated. + */ +/obj/structure/door_assembly/multi_tile/proc/set_bounds() + var/size = get_size_in_tiles(src) + + if(dir in list(NORTH, SOUTH)) + bound_width = size * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = size * world.icon_size diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index 2d7e607cd22..05efc4ae489 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -267,6 +267,15 @@ nomineral = TRUE material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS +/obj/structure/door_assembly/multi_tile/glass + name = "large glass airlock assembly" + base_name = "large glass airlock" + icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi' + overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/multi_tile/glass + glass_type = /obj/machinery/door/airlock/multi_tile/glass + + /obj/structure/door_assembly/door_assembly_material/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) var/turf/T = get_turf(src) diff --git a/code/modules/industrial_lift/tram/tram_doors.dm b/code/modules/industrial_lift/tram/tram_doors.dm index 3515adad900..f0253659eb6 100644 --- a/code/modules/industrial_lift/tram/tram_doors.dm +++ b/code/modules/industrial_lift/tram/tram_doors.dm @@ -3,6 +3,7 @@ desc = "Probably won't crush you if you try to rush them as they close. But we know you live on that danger, try and beat the tram!" icon = 'icons/obj/doors/tramdoor.dmi' req_access = list("tcomms") + multi_tile = TRUE var/associated_lift = MAIN_STATION_TRAM var/datum/weakref/tram_ref /// Are the doors in a malfunctioning state (dangerous) @@ -99,6 +100,8 @@ /obj/machinery/door/window/tram/Initialize(mapload, set_dir, unres_sides) . = ..() RemoveElement(/datum/element/atmos_sensitive, mapload) + if(filler) + filler.set_density(FALSE) // tram doors allow you to stand on the tile INVOKE_ASYNC(src, PROC_REF(open)) GLOB.tram_doors += src find_tram() diff --git a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm index 49425abf1dc..2ee98cd64e0 100644 --- a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm +++ b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm @@ -382,11 +382,20 @@ icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi' overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi' -//GLASS -/obj/machinery/door/airlock/glass_large - icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/multi_tile.dmi' - overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/overlays.dmi' - multi_tile = TRUE +//MULTI-TILE + +/obj/machinery/door/airlock/multi_tile + icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi' + overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi' + bound_width = 64 + +/obj/machinery/door/airlock/multi_tile/glass + icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi' + overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi' + +/obj/machinery/door/airlock/multi_tile/metal + icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi' + overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi' //ASSEMBLYS /obj/structure/door_assembly/door_assembly_public diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/multi_tile.dmi b/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/multi_tile.dmi rename to modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/overlays.dmi b/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/overlays.dmi rename to modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile2/multi_tile.dmi b/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile2/multi_tile.dmi rename to modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile2/overlays.dmi b/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi similarity index 100% rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile2/overlays.dmi rename to modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi diff --git a/modular_skyrat/modules/large_doors/code/large_doors.dm b/modular_skyrat/modules/large_doors/code/large_doors.dm deleted file mode 100644 index 799968fcb8e..00000000000 --- a/modular_skyrat/modules/large_doors/code/large_doors.dm +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Returns the size of the sprite in tiles. - * Takes the icon size and divides it by the world icon size (default 32). - * This gives the size of the sprite in tiles. - * - * @return size of the sprite in tiles - */ -/proc/get_size_in_tiles(obj/target) - var/icon/size_check = icon(target.icon, target.icon_state) - var/size = size_check.Width() / world.icon_size - - return size - -/obj/machinery/door/airlock - /// Whether or not the door is a multi-tile airlock. - var/multi_tile - /// A filler object used to fill the space of multi-tile airlocks. - var/obj/airlock_filler_object/filler - -/obj/machinery/door/airlock/Initialize(mapload) - . = ..() - multi_tile = get_size_in_tiles(src) > 1 - if(multi_tile) - set_bounds() - update_overlays() - -/obj/machinery/door/airlock/Move() - if(multi_tile) - set_bounds() - return ..() - -/obj/machinery/door/airlock/Destroy() - if(filler) - qdel(filler) - filler = null - return ..() - -/** - * Sets the bounds of the airlock. For use with multi-tile airlocks. - * If the airlock is multi-tile, it will set the bounds to be the size of the airlock. - * If the airlock doesn't already have a filler object, it will create one. - * If the airlock already has a filler object, it will move it to the correct location. - */ -/obj/machinery/door/airlock/proc/set_bounds() - if(!multi_tile) - return - var/size = get_size_in_tiles(src) - bound_width = (get_adjusted_dir(dir) == NORTH) ? world.icon_size : size * world.icon_size - bound_height = (get_adjusted_dir(dir) == NORTH) ? size * world.icon_size : world.icon_size - if(!filler) - filler = new(get_step(src, get_adjusted_dir(dir))) - filler.parent_airlock = src - else - filler.loc = get_step(src, get_adjusted_dir(dir)) - - filler.density = density - filler.set_opacity(opacity) - - -/** - * Checks which way the airlock is facing and adjusts the direction accordingly. - * For use with multi-tile airlocks. - * - * @param dir direction to adjust - * @return adjusted direction - */ -/obj/machinery/door/proc/get_adjusted_dir(dir) - if(dir in list(NORTH, SOUTH)) - return EAST - else - return NORTH - -/** - * Returns a list of turfs that the door occupies. - * If the door is multi-tile, it will return a list of turfs that the door occupies. - * If the door is not multi-tile, it will return only the current turf. - * - * @return list of turfs the door occupies - */ -/obj/machinery/door/airlock/proc/get_turfs() - var/turf/current_turf = get_turf(src) - if(!multi_tile) - return current_turf - var/list/occupied_turfs = list() - for(var/i in 1 to get_size_in_tiles(src)) - occupied_turfs += current_turf - current_turf = get_step(current_turf, get_adjusted_dir(dir)) - return occupied_turfs - - -/obj/machinery/door/airlock/multi_tile - multi_tile = TRUE - has_environment_lights = FALSE - -/obj/machinery/door/airlock/multi_tile/glass - name = "large glass airlock" - icon = 'modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi' - overlays_file = 'modular_skyrat/modules/large_doors/icons/glass/overlays.dmi' - opacity = FALSE - airlock_material = "glass" - glass = TRUE - assemblytype = /obj/structure/door_assembly/multi_tile/glass - -/obj/machinery/door/airlock/multi_tile/metal - name = "large airlock" - icon = 'modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi' - overlays_file = 'modular_skyrat/modules/large_doors/icons/metal/overlays.dmi' - assemblytype = /obj/structure/door_assembly/multi_tile/metal - -/obj/airlock_filler_object - name = "" - density = TRUE - opacity = TRUE - anchored = TRUE - can_atmos_pass = ATMOS_PASS_DENSITY - var/parent_airlock - -/obj/airlock_filler_object/CanAllowThrough(atom/movable/mover, turf/target) - . = ..() - if(.) - return - // Snowflake handling for PASSGLASS. - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return !opacity - -/obj/airlock_filler_object/can_be_pulled(user, grab_state, force) - return FALSE - -/obj/airlock_filler_object/singularity_act() - return - -/obj/airlock_filler_object/singularity_pull(S, current_size) - return - -/obj/airlock_filler_object/Destroy(force) - if(parent_airlock) - parent_airlock = null - return ..() - -//ASSEMBLYS! -/obj/structure/door_assembly/multi_tile - dir = EAST - /// Whether or not the assembly is for a multi-tile airlock. - var/multi_tile - -/obj/structure/door_assembly/multi_tile/Initialize(mapload) - . = ..() - multi_tile = get_size_in_tiles(src) > 1 - if(multi_tile) - set_bounds() - update_overlays() - - -/obj/structure/door_assembly/multi_tile/Move() - . = ..() - set_bounds() - - -/** - * Updates the bounds of the airlock assembly - * Sets the bounds of the airlock assembly according to the direction. - * This ensures that the bounds are always correct, even if the airlock is rotated. - */ -/obj/structure/door_assembly/multi_tile/proc/set_bounds() - var/size = get_size_in_tiles(src) - - if(dir in list(NORTH, SOUTH)) - bound_width = size * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = size * world.icon_size - - -/obj/structure/door_assembly/multi_tile/metal - name = "large airlock assembly" - base_name = "large airlock" - icon = 'modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi' - overlays_file = 'modular_skyrat/modules/large_doors/icons/metal/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/multi_tile/metal - glass_type = /obj/machinery/door/airlock/multi_tile/glass - -/obj/structure/door_assembly/multi_tile/glass - name = "large glass airlock assembly" - base_name = "large glass airlock" - icon = 'modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi' - overlays_file = 'modular_skyrat/modules/large_doors/icons/glass/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/multi_tile/glass - diff --git a/modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi b/modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi deleted file mode 100644 index a400cb6c61d7ed75f532c76b4bc3888fe9e34f56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27433 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 )0g3T8YmYa5Wf`C-p}F%-&LOLuVy^oa`~GxT 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 Lk4ffMmvjFEU0QEi diff --git a/modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi b/modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi deleted file mode 100644 index b0b5ca2b20e23cf29d0fdf145beca5a4b3dccf41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12140 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 diff --git a/modular_skyrat/modules/large_doors/icons/metal/overlays.dmi b/modular_skyrat/modules/large_doors/icons/metal/overlays.dmi deleted file mode 100644 index a47008823b444c11130d3f95f5a21b7e2db90a7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23793 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 Wxd=xW^j$zW?1Z~Fy8dX`PyYj3@pO;? diff --git a/modular_skyrat/modules/large_doors/readme.md b/modular_skyrat/modules/large_doors/readme.md deleted file mode 100644 index 1717340292a..00000000000 --- a/modular_skyrat/modules/large_doors/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -## Title: Large Airlocks - -MODULE ID: LARGE_DOORS - -### Description: - -Adds double doors with atmos functionality. - -### TG Proc Changes: - -- /obj/machinery/door/airlock/open() -- /obj/machinery/door/airlock/close() - -### Defines: - - -### Master file additions - - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - Original code -Eris / Tau Ceti - Sprites diff --git a/tgstation.dme b/tgstation.dme index b50ec5d6323..fc4e4326d48 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1851,7 +1851,6 @@ #include "code\game\machinery\dna_infuser\organ_sets\roach_organs.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_electronics.dm" -#include "code\game\machinery\doors\airlock_types.dm" #include "code\game\machinery\doors\brigdoors.dm" #include "code\game\machinery\doors\door.dm" #include "code\game\machinery\doors\firedoor.dm" @@ -6641,7 +6640,6 @@ #include "modular_skyrat\modules\jukebox\code\jukebox_subsystem.dm" #include "modular_skyrat\modules\jungle\code\flora.dm" #include "modular_skyrat\modules\knives\knives.dm" -#include "modular_skyrat\modules\large_doors\code\large_doors.dm" #include "modular_skyrat\modules\layer_shift\code\mob_movement.dm" #include "modular_skyrat\modules\liquids\code\drains.dm" #include "modular_skyrat\modules\liquids\code\height_floors.dm" diff --git a/tools/UpdatePaths/Scripts/76732_multi-tile_airlocks.txt b/tools/UpdatePaths/Scripts/76732_multi-tile_airlocks.txt new file mode 100644 index 00000000000..dffbbbe93d2 --- /dev/null +++ b/tools/UpdatePaths/Scripts/76732_multi-tile_airlocks.txt @@ -0,0 +1,3 @@ +#comment New path for large glass airlock. + +/obj/machinery/door/airlock/glass_large : /obj/machinery/door/airlock/multi_tile/glass{@OLD} \ No newline at end of file