[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>
This commit is contained in:
SkyratBot
2023-08-10 19:47:54 -07:00
committed by GitHub
co-authored by lessthanthree
parent 0e65dc8566
commit 830ece4a78
31 changed files with 910 additions and 951 deletions
@@ -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" = (
@@ -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" = (
@@ -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"
},
+1 -1
View File
@@ -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" = (
+1 -1
View File
@@ -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,
+3 -3
View File
@@ -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,
@@ -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,
@@ -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,
+1 -1
View File
@@ -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,
+4 -4
View File
@@ -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)
@@ -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,
+13
View File
@@ -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
+730 -9
View File
@@ -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 <b>just your hands</b> 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
-663
View File
@@ -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 <b>just your hands</b> 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
+70 -25
View File
@@ -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)
+47 -11
View File
@@ -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
@@ -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)
@@ -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()
@@ -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
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

@@ -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
-2
View File
@@ -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"
@@ -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}