[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>
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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" = (
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
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
|
||||
@@ -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}
|
||||