From 564efa888da80a7dc2ebbadfdcba85fd33530956 Mon Sep 17 00:00:00 2001 From: Chompstation Bot Date: Mon, 27 Sep 2021 18:16:10 +0000 Subject: [PATCH] Doors: Now With 100% More Politeness --- code/game/machinery/doors/airlock.dm | 3089 ++++++++++++++++++ code/game/objects/structures/simple_doors.dm | 17 + sound/machines/door/knock_glass.ogg | Bin 0 -> 7682 bytes sound/machines/door/knock_wood.wav | Bin 0 -> 176780 bytes 4 files changed, 3106 insertions(+) create mode 100644 sound/machines/door/knock_glass.ogg create mode 100644 sound/machines/door/knock_wood.wav diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1af0a252bf..b480604c5c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD //VOREStation Edit - Redone a lot of airlock things: /* - Specific department maintenance doors @@ -1530,3 +1531,3091 @@ About the new airlock wires panel: qdel(src) return TRUE return FALSE +||||||| parent of 489d5fc33c... Merge pull request #11594 from KillianKirilenko/kk-knockknock +//VOREStation Edit - Redone a lot of airlock things: +/* +- Specific department maintenance doors +- Named doors properly according to type +- Gave them default access levels with the access constants +- Improper'd all of the names in the new() +*/ + +/obj/machinery/door/airlock + name = "Airlock" + icon = 'icons/obj/doors/Doorint.dmi' + icon_state = "door_closed" + power_channel = ENVIRON + + explosion_resistance = 10 + + // Doors do their own stuff + bullet_vulnerability = 0 + + blocks_emissive = EMISSIVE_BLOCK_GENERIC // Not quite as nice as /tg/'s custom masks. We should make those sometime + + var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. + var/hackProof = 0 // if 1, this door can't be hacked by the AI + var/electrified_until = 0 //World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. + var/main_power_lost_until = 0 //World time when main power is restored. + var/backup_power_lost_until = -1 //World time when backup power is restored. + var/has_beeped = 0 //If 1, will not beep on failed closing attempt. Resets when door closes. + var/spawnPowerRestoreRunning = 0 + var/welded = null + var/locked = 0 + var/lights = 1 // bolt lights show by default + var/aiDisabledIdScanner = 0 + var/aiHacking = 0 + var/obj/machinery/door/airlock/closeOther = null + var/closeOtherId = null + var/lockdownbyai = 0 + autoclose = 1 + var/assembly_type = /obj/structure/door_assembly + var/mineral = null + var/justzap = 0 + var/safe = 1 + normalspeed = 1 + var/obj/item/weapon/airlock_electronics/electronics = null + var/hasShocked = 0 //Prevents multiple shocks from happening + var/secured_wires = 0 + var/datum/wires/airlock/wires = null + + var/open_sound_powered = 'sound/machines/door/covert1o.ogg' + var/open_sound_unpowered = 'sound/machines/door/airlockforced.ogg' + var/close_sound_powered = 'sound/machines/door/covert1c.ogg' + var/legacy_open_powered = 'sound/machines/door/old_airlock.ogg' + var/legacy_close_powered = 'sound/machines/door/old_airlockclose.ogg' + var/department_open_powered = null + var/department_close_powered = null + var/denied_sound = 'sound/machines/deniedbeep.ogg' + var/bolt_up_sound = 'sound/machines/door/boltsup.ogg' + var/bolt_down_sound = 'sound/machines/door/boltsdown.ogg' + +/obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage) + if(stat & (BROKEN|NOPOWER)) + if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) + if(src.locked || src.welded) + visible_message("\The [user] begins breaking into \the [src] internals!") + user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything. + if(do_after(user,10 SECONDS,src)) + src.locked = 0 + src.welded = 0 + update_icon() + open(1) + if(prob(25)) + src.shock(user, 100) + user.set_AI_busy(FALSE) + else if(src.density) + visible_message("\The [user] forces \the [src] open!") + open(1) + else + visible_message("\The [user] forces \the [src] closed!") + close(1) + else + visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].") + return + ..() + +/obj/machinery/door/airlock/attack_alien(var/mob/user) //Familiar, right? Doors. -Mechoid + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/X = user + if(istype(X.species, /datum/species/xenos)) + if(src.locked || src.welded) + visible_message("\The [user] begins tearing into \the [src] internals!") + src.do_animate("deny") + if(do_after(user,15 SECONDS,src)) + visible_message("\The [user] tears \the [src] open, sparks flying from its electronics!") + src.do_animate("spark") + playsound(src, 'sound/machines/door/airlock_tear_apart.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS) + src.locked = 0 + src.welded = 0 + update_icon() + open(1) + src.set_broken() //These aren't emags, these be CLAWS + else if(src.density) + visible_message("\The [user] begins forcing \the [src] open!") + if(do_after(user, 5 SECONDS,src)) + playsound(src, 'sound/machines/door/airlock_creaking.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS) + visible_message("\The [user] forces \the [src] open!") + open(1) + else + visible_message("\The [user] forces \the [src] closed!") + close(1) + else + src.do_animate("deny") + visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].") + return + ..() + +/obj/machinery/door/airlock/get_material() + if(mineral) + return get_material_by_name(mineral) + return get_material_by_name(MAT_STEEL) + +/obj/machinery/door/airlock/command + name = "Command Airlock" + icon = 'icons/obj/doors/Doorcom.dmi' + req_one_access = list(access_heads) + assembly_type = /obj/structure/door_assembly/door_assembly_com + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cmd3o.ogg' + department_close_powered = 'sound/machines/door/cmd3c.ogg' + +/obj/machinery/door/airlock/security + name = "Security Airlock" + icon = 'icons/obj/doors/Doorsec.dmi' + req_one_access = list(access_security) + assembly_type = /obj/structure/door_assembly/door_assembly_sec + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sec1o.ogg' + department_close_powered = 'sound/machines/door/sec1c.ogg' + +/obj/machinery/door/airlock/engineering + name = "Engineering Airlock" + icon = 'icons/obj/doors/Dooreng.dmi' + req_one_access = list(access_engine) + assembly_type = /obj/structure/door_assembly/door_assembly_eng + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/engineeringatmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Doorengatmos.dmi' + req_one_access = list(access_atmospherics) + assembly_type = /obj/structure/door_assembly/door_assembly_eat + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/medical + name = "Medical Airlock" + icon = 'icons/obj/doors/Doormed.dmi' + req_one_access = list(access_medical) + assembly_type = /obj/structure/door_assembly/door_assembly_med + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/med1o.ogg' + department_close_powered = 'sound/machines/door/med1c.ogg' + +/obj/machinery/door/airlock/maintenance + name = "Maintenance Access" + icon = 'icons/obj/doors/Doormaint.dmi' + //req_one_access = list(access_maint_tunnels) //VOREStation Edit - Maintenance is open access + assembly_type = /obj/structure/door_assembly/door_assembly_mai + open_sound_powered = 'sound/machines/door/door2o.ogg' + close_sound_powered = 'sound/machines/door/door2c.ogg' + +/obj/machinery/door/airlock/maintenance/cargo + icon = 'icons/obj/doors/Doormaint_cargo.dmi' + req_one_access = list(access_cargo) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/door2o.ogg' + department_close_powered = 'sound/machines/door/door2c.ogg' + +/obj/machinery/door/airlock/maintenance/command + icon = 'icons/obj/doors/Doormaint_command.dmi' + req_one_access = list(access_heads) + +/obj/machinery/door/airlock/maintenance/common + icon = 'icons/obj/doors/Doormaint_common.dmi' + open_sound_powered = 'sound/machines/door/hall3o.ogg' + close_sound_powered = 'sound/machines/door/hall3c.ogg' + +/obj/machinery/door/airlock/maintenance/engi + icon = 'icons/obj/doors/Doormaint_engi.dmi' + req_one_access = list(access_engine) + +/obj/machinery/door/airlock/maintenance/int + icon = 'icons/obj/doors/Doormaint_int.dmi' + +/obj/machinery/door/airlock/maintenance/medical + icon = 'icons/obj/doors/Doormaint_med.dmi' + req_one_access = list(access_medical) + +/obj/machinery/door/airlock/maintenance/rnd + icon = 'icons/obj/doors/Doormaint_rnd.dmi' + req_one_access = list(access_research) + +/obj/machinery/door/airlock/maintenance/sec + icon = 'icons/obj/doors/Doormaint_sec.dmi' + req_one_access = list(access_security) + +/obj/machinery/door/airlock/external + name = "External Airlock" + icon = 'icons/obj/doors/Doorext.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_ext + open_sound_powered = 'sound/machines/door/space1o.ogg' + close_sound_powered = 'sound/machines/door/space1c.ogg' + +/obj/machinery/door/airlock/external/bolted + icon_state = "door_locked" // So it looks visibly bolted in map editor + locked = 1 + +// For convenience in making docking ports: one that is pre-bolted with frequency set! +/obj/machinery/door/airlock/external/bolted/cycling + frequency = 1379 + +/obj/machinery/door/airlock/glass_external + name = "External Airlock" + icon = 'icons/obj/doors/Doorextglass.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_ext + opacity = 0 + glass = 1 + req_one_access = list(access_external_airlocks) + open_sound_powered = 'sound/machines/door/space1o.ogg' + close_sound_powered = 'sound/machines/door/space1c.ogg' + +/obj/machinery/door/airlock/glass + name = "Glass Airlock" + icon = 'icons/obj/doors/Doorglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + open_sound_powered = 'sound/machines/door/hall1o.ogg' + close_sound_powered = 'sound/machines/door/hall1c.ogg' + legacy_open_powered = 'sound/machines/door/windowdoor.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + glass = 1 + +/obj/machinery/door/airlock/centcom + name = "Centcom Airlock" + icon = 'icons/obj/doors/Doorele.dmi' + req_one_access = list(access_cent_general) + opacity = 1 + open_sound_powered = 'sound/machines/door/cmd3o.ogg' + close_sound_powered = 'sound/machines/door/cmd3c.ogg' + +/obj/machinery/door/airlock/glass_centcom + name = "Airlock" + icon = 'icons/obj/doors/Dooreleglass.dmi' + opacity = 0 + glass = 1 + open_sound_powered = 'sound/machines/door/cmd3o.ogg' + close_sound_powered = 'sound/machines/door/cmd3c.ogg' + +/obj/machinery/door/airlock/vault + name = "Vault" + icon = 'icons/obj/doors/vault.dmi' + explosion_resistance = 20 + opacity = 1 + secured_wires = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites. + req_one_access = list(access_heads_vault) + open_sound_powered = 'sound/machines/door/vault1o.ogg' + close_sound_powered = 'sound/machines/door/vault1c.ogg' + +/obj/machinery/door/airlock/vault/bolted + icon_state = "door_locked" + locked = 1 + +/obj/machinery/door/airlock/freezer + name = "Freezer Airlock" + icon = 'icons/obj/doors/Doorfreezer.dmi' + opacity = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_fre + +/obj/machinery/door/airlock/hatch + name = "Airtight Hatch" + icon = 'icons/obj/doors/Doorhatchele.dmi' + explosion_resistance = 20 + opacity = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_hatch + req_one_access = list(access_maint_tunnels) + open_sound_powered = 'sound/machines/door/hatchopen.ogg' + close_sound_powered = 'sound/machines/door/hatchclose.ogg' + open_sound_unpowered = 'sound/machines/door/hatchforced.ogg' + +/obj/machinery/door/airlock/maintenance_hatch + name = "Maintenance Hatch" + icon = 'icons/obj/doors/Doorhatchmaint2.dmi' + explosion_resistance = 20 + opacity = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_mhatch + req_one_access = list(access_maint_tunnels) + open_sound_powered = 'sound/machines/door/hatchopen.ogg' + close_sound_powered = 'sound/machines/door/hatchclose.ogg' + open_sound_unpowered = 'sound/machines/door/hatchforced.ogg' + +/obj/machinery/door/airlock/glass_command + name = "Command Airlock" + icon = 'icons/obj/doors/Doorcomglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_com + glass = 1 + req_one_access = list(access_heads) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cmd1o.ogg' + department_close_powered = 'sound/machines/door/cmd1c.ogg' + +/obj/machinery/door/airlock/glass_engineering + name = "Engineering Airlock" + icon = 'icons/obj/doors/Doorengglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_eng + glass = 1 + req_one_access = list(access_engine) + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/glass_engineeringatmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Doorengatmoglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_eat + glass = 1 + req_one_access = list(access_atmospherics) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/glass_security + name = "Security Airlock" + icon = 'icons/obj/doors/Doorsecglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_sec + glass = 1 + req_one_access = list(access_security) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sec1o.ogg' + department_close_powered = 'sound/machines/door/sec1c.ogg' + +/obj/machinery/door/airlock/glass_medical + name = "Medical Airlock" + icon = 'icons/obj/doors/Doormedglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_med + glass = 1 + req_one_access = list(access_medical) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/med1o.ogg' + department_close_powered = 'sound/machines/door/med1c.ogg' + +/obj/machinery/door/airlock/mining + name = "Mining Airlock" + icon = 'icons/obj/doors/Doormining.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_min + req_one_access = list(access_mining) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cgo1o.ogg' + department_close_powered = 'sound/machines/door/cgo1c.ogg' + +/obj/machinery/door/airlock/atmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Dooratmo.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_atmo + req_one_access = list(access_atmospherics) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/research + name = "Research Airlock" + icon = 'icons/obj/doors/Doorresearch.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_research + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/glass_research + name = "Research Airlock" + icon = 'icons/obj/doors/Doorresearchglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_research + glass = 1 + req_one_access = list(access_research) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/glass_mining + name = "Mining Airlock" + icon = 'icons/obj/doors/Doorminingglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_min + glass = 1 + req_one_access = list(access_mining) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cgo1o.ogg' + department_close_powered = 'sound/machines/door/cgo1c.ogg' + +/obj/machinery/door/airlock/glass_atmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Dooratmoglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_atmo + glass = 1 + req_one_access = list(access_atmospherics) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/gold + name = "Gold Airlock" + icon = 'icons/obj/doors/Doorgold.dmi' + mineral = "gold" + +/obj/machinery/door/airlock/silver + name = "Silver Airlock" + icon = 'icons/obj/doors/Doorsilver.dmi' + mineral = "silver" + +/obj/machinery/door/airlock/diamond + name = "Diamond Airlock" + icon = 'icons/obj/doors/Doordiamond.dmi' + mineral = "diamond" + +/obj/machinery/door/airlock/uranium + name = "Uranium Airlock" + desc = "And they said I was crazy." + icon = 'icons/obj/doors/Dooruranium.dmi' + mineral = "uranium" + var/last_event = 0 + var/rad_power = 7.5 + +/obj/machinery/door/airlock/process() + // Deliberate no call to parent. + if(main_power_lost_until > 0 && world.time >= main_power_lost_until) + regainMainPower() + + if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until) + regainBackupPower() + + else if(electrified_until > 0 && world.time >= electrified_until) + electrify(0) + + if (..() == PROCESS_KILL && !(main_power_lost_until > 0 || backup_power_lost_until > 0 || electrified_until > 0)) + . = PROCESS_KILL + +/obj/machinery/door/airlock/uranium/process() + if(world.time > last_event+20) + if(prob(50)) + SSradiation.radiate(src, rad_power) + last_event = world.time + ..() + +/obj/machinery/door/airlock/phoron + name = "Phoron Airlock" + desc = "No way this can end badly." + icon = 'icons/obj/doors/Doorphoron.dmi' + mineral = "phoron" + +/obj/machinery/door/airlock/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 300) + PhoronBurn(exposed_temperature) + +/obj/machinery/door/airlock/phoron/proc/ignite(exposed_temperature) + if(exposed_temperature > 300) + PhoronBurn(exposed_temperature) + +/obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature) + for(var/turf/simulated/floor/target_tile in range(2,loc)) + target_tile.assume_gas("phoron", 35, 400+T0C) + spawn (0) target_tile.hotspot_expose(temperature, 400) + for(var/turf/simulated/wall/W in range(3,src)) + W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame + for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) + D.ignite(temperature/4) + new/obj/structure/door_assembly( src.loc ) + qdel(src) + +/obj/machinery/door/airlock/sandstone + name = "Sandstone Airlock" + icon = 'icons/obj/doors/Doorsand.dmi' + mineral = "sandstone" + +/obj/machinery/door/airlock/science + name = "Research Airlock" + icon = 'icons/obj/doors/Doorsci.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_science + req_one_access = list(access_research) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/glass_science + name = "Glass Airlocks" + icon = 'icons/obj/doors/Doorsciglass.dmi' + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_science + glass = 1 + req_one_access = list(access_research) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/highsecurity + name = "Secure Airlock" + icon = 'icons/obj/doors/hightechsecurity.dmi' + explosion_resistance = 20 + secured_wires = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity + req_one_access = list(access_heads_vault) + open_sound_powered = 'sound/machines/door/secure1o.ogg' + close_sound_powered = 'sound/machines/door/secure1c.ogg' + +/obj/machinery/door/airlock/voidcraft + name = "voidcraft hatch" + desc = "It's an extra resilient airlock intended for spacefaring vessels." + icon = 'icons/obj/doors/shuttledoors.dmi' + explosion_resistance = 20 + opacity = 0 + glass = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft + open_sound_powered = 'sound/machines/door/shuttle1o.ogg' + close_sound_powered = 'sound/machines/door/shuttle1c.ogg' + +// Airlock opens from top-bottom instead of left-right. +/obj/machinery/door/airlock/voidcraft/vertical + icon = 'icons/obj/doors/shuttledoors_vertical.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft/vertical + open_sound_powered = 'sound/machines/door/shuttle1o.ogg' + close_sound_powered = 'sound/machines/door/shuttle1c.ogg' + + +/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock + name = "Precursor Alpha Object - Doors" + desc = "This object appears to be used in order to restrict or allow access to \ + rooms based on its physical state. In other words, a door. \ + Despite being designed and created by unknown ancient alien hands, this door has \ + a large number of similarities to the conventional airlock, such as being driven by \ + electricity, opening and closing by physically moving, and being air tight. \ + It also operates by responding to signals through internal electrical conduits. \ + These characteristics make it possible for one with experience with a multitool \ + to manipulate the door.\ +

\ + The symbol on the door does not match any living species' patterns, giving further \ + implications that this door is very old, and yet it remains operational after \ + thousands of years. It is unknown if that is due to superb construction, or \ + unseen autonomous maintenance having been performed." + value = CATALOGUER_REWARD_EASY + +/obj/machinery/door/airlock/alien + name = "alien airlock" + desc = "You're fairly sure this is a door." + catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock) + icon = 'icons/obj/doors/Dooralien.dmi' + explosion_resistance = 20 + secured_wires = TRUE + hackProof = TRUE + assembly_type = /obj/structure/door_assembly/door_assembly_alien + req_one_access = list(access_alien) + +/obj/machinery/door/airlock/alien/locked + icon_state = "door_locked" + locked = TRUE + +/obj/machinery/door/airlock/alien/public // Entry to UFO. + req_one_access = list() + normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside. + hackProof = TRUE //VOREStation Edit - No borgos + +/* +About the new airlock wires panel: +* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. +* one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though) +* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be open, but bolts-raising will not work. Cutting these wires may electrocute the user. +* one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work. +* two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. +* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. +* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. +* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire) +* one wire for controling door safetys. When active, door does not close on someone. When cut, door will ruin someone's shit. When pulsed, door will immedately ruin someone's shit. +* one wire for controlling door speed. When active, dor closes at normal rate. When cut, door does not close manually. When pulsed, door attempts to close every tick. +*/ + + + +/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite + if(!issilicon(usr)) + if(src.isElectrified()) + if(!src.justzap) + if(src.shock(user, 100)) + src.justzap = 1 + spawn (10) + src.justzap = 0 + return + else /*if(src.justzap)*/ + return + else if(user.hallucination > 50 && prob(10) && src.operating == 0) + to_chat(user, "You feel a powerful shock course through your body!") + user.halloss += 10 + user.stunned += 10 + return + ..(user) + +/obj/machinery/door/airlock/proc/isElectrified() + if(src.electrified_until != 0) + return 1 + return 0 + +/obj/machinery/door/airlock/proc/canAIControl() + return ((src.aiControlDisabled!=1) && (!src.isAllPowerLoss())); + +/obj/machinery/door/airlock/proc/canAIHack() + return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss())); + +/obj/machinery/door/airlock/proc/arePowerSystemsOn() + if (stat & (NOPOWER|BROKEN)) + return 0 + return (src.main_power_lost_until==0 || src.backup_power_lost_until==0) + +/obj/machinery/door/airlock/requiresID() + return !(wires.is_cut(WIRE_IDSCAN) || aiDisabledIdScanner) + +/obj/machinery/door/airlock/proc/isAllPowerLoss() + if(stat & (NOPOWER|BROKEN)) + return 1 + if(mainPowerCablesCut() && backupPowerCablesCut()) + return 1 + return 0 + +/obj/machinery/door/airlock/proc/mainPowerCablesCut() + return wires.is_cut(WIRE_MAIN_POWER1) || wires.is_cut(WIRE_MAIN_POWER2) + +/obj/machinery/door/airlock/proc/backupPowerCablesCut() + return wires.is_cut(WIRE_BACKUP_POWER1) || wires.is_cut(WIRE_BACKUP_POWER2) + +/obj/machinery/door/airlock/proc/loseMainPower() + main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) + + // If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running + if(backup_power_lost_until == -1 && !backupPowerCablesCut()) + backup_power_lost_until = world.time + SecondsToTicks(10) + + if(main_power_lost_until > 0 || backup_power_lost_until > 0) + START_MACHINE_PROCESSING(src) + + // Disable electricity if required + if(electrified_until && isAllPowerLoss()) + electrify(0) + + update_icon() + +/obj/machinery/door/airlock/proc/loseBackupPower() + backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) + + if(backup_power_lost_until > 0) + START_MACHINE_PROCESSING(src) + + // Disable electricity if required + if(electrified_until && isAllPowerLoss()) + electrify(0) + + update_icon() + +/obj/machinery/door/airlock/proc/regainMainPower() + if(!mainPowerCablesCut()) + main_power_lost_until = 0 + // If backup power is currently active then disable, otherwise let it count down and disable itself later + if(!backup_power_lost_until) + backup_power_lost_until = -1 + + update_icon() + +/obj/machinery/door/airlock/proc/regainBackupPower() + if(!backupPowerCablesCut()) + // Restore backup power only if main power is offline, otherwise permanently disable + backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0 + + update_icon() + +/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0) + var/message = "" + if(wires.is_cut(WIRE_ELECTRIFY) && arePowerSystemsOn()) + message = text("The electrification wire is cut - Door permanently electrified.") + src.electrified_until = -1 + else if(duration && !arePowerSystemsOn()) + message = text("The door is unpowered - Cannot electrify the door.") + src.electrified_until = 0 + else if(!duration && electrified_until != 0) + message = "The door is now un-electrified." + src.electrified_until = 0 + else if(duration) //electrify door for the given duration seconds + if(usr) + shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])") + add_attack_logs(usr,name,"Electrified a door") + else + shockedby += text("\[[time_stamp()]\] - EMP)") + message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]." + src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration) + + if(electrified_until > 0) + START_MACHINE_PROCESSING(src) + + if(feedback && message) + to_chat(usr,message) + +/obj/machinery/door/airlock/proc/set_idscan(var/activate, var/feedback = 0) + var/message = "" + if(wires.is_cut(WIRE_IDSCAN)) + message = "The IdScan wire is cut - IdScan feature permanently disabled." + else if(activate && src.aiDisabledIdScanner) + src.aiDisabledIdScanner = 0 + message = "IdScan feature has been enabled." + else if(!activate && !src.aiDisabledIdScanner) + src.aiDisabledIdScanner = 1 + message = "IdScan feature has been disabled." + + if(feedback && message) + to_chat(usr,message) + +/obj/machinery/door/airlock/proc/set_safeties(var/activate, var/feedback = 0) + var/message = "" + // Safeties! We don't need no stinking safeties! + if (wires.is_cut(WIRE_SAFETY)) + message = text("The safety wire is cut - Cannot enable safeties.") + else if (!activate && src.safe) + safe = 0 + else if (activate && !src.safe) + safe = 1 + + if(feedback && message) + to_chat(usr,message) + +// shock user with probability prb (if all connections & power are working) +// returns 1 if shocked, 0 otherwise +// The preceding comment was borrowed from the grille's shock script +/obj/machinery/door/airlock/shock(mob/user, prb) + if(!arePowerSystemsOn()) + return 0 + if(hasShocked) + return 0 //Already shocked someone recently? + if(..()) + hasShocked = 1 + sleep(10) + hasShocked = 0 + return 1 + else + return 0 + + +/obj/machinery/door/airlock/update_icon() + cut_overlays() + if(density) + if(locked && lights && src.arePowerSystemsOn()) + icon_state = "door_locked" + else + icon_state = "door_closed" + if(p_open || welded) + if(p_open) + add_overlay("panel_open") + if (!(stat & NOPOWER)) + if(stat & BROKEN) + add_overlay("sparks_broken") + else if (health < maxhealth * 3/4) + add_overlay("sparks_damaged") + if(welded) + add_overlay("welded") + else if (health < maxhealth * 3/4 && !(stat & NOPOWER)) + add_overlay("sparks_damaged") + else + icon_state = "door_open" + if((stat & BROKEN) && !(stat & NOPOWER)) + add_overlay("sparks_open") + return + +/obj/machinery/door/airlock/do_animate(animation) + switch(animation) + if("opening") + cut_overlay() + if(p_open) + flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking + update_icon() + else + flick("door_opening", src)//[stat ? "_stat":] + update_icon() + if("closing") + cut_overlay() + if(p_open) + flick("o_door_closing", src) + update_icon() + else + flick("door_closing", src) + update_icon() + if("spark") + if(density) + flick("door_spark", src) + if("deny") + if(density && src.arePowerSystemsOn()) + flick("door_deny", src) + playsound(src, denied_sound, 50, 0, 3) + return + +/obj/machinery/door/airlock/attack_ai(mob/user as mob) + tgui_interact(user) + +/obj/machinery/door/airlock/attack_ghost(mob/user) + tgui_interact(user) + +/obj/machinery/door/airlock/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/tgui_state/custom_state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiAirlock", name) + ui.open() + if(custom_state) + ui.set_state(custom_state) + return TRUE + +/obj/machinery/door/airlock/tgui_data(mob/user) + var/list/data = list() + + var/list/power = list() + power["main"] = main_power_lost_until > 0 ? 0 : 2 + power["main_timeleft"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1) + power["backup"] = backup_power_lost_until > 0 ? 0 : 2 + power["backup_timeleft"] = round(backup_power_lost_until > 0 ? max(backup_power_lost_until - world.time, 0) / 10 : backup_power_lost_until, 1) + data["power"] = power + + data["shock"] = (electrified_until == 0) ? 2 : 0 + data["shock_timeleft"] = round(electrified_until > 0 ? max(electrified_until - world.time, 0) / 10 : electrified_until, 1) + data["id_scanner"] = !aiDisabledIdScanner + data["locked"] = locked // bolted + data["lights"] = lights // bolt lights + data["safe"] = safe // safeties + data["speed"] = normalspeed // safe speed + data["welded"] = welded // welded + data["opened"] = !density // opened + + var/list/wire = list() + wire["main_1"] = !wires.is_cut(WIRE_MAIN_POWER1) + wire["main_2"] = !wires.is_cut(WIRE_MAIN_POWER2) + wire["backup_1"] = !wires.is_cut(WIRE_BACKUP_POWER1) + wire["backup_2"] = !wires.is_cut(WIRE_BACKUP_POWER2) + wire["shock"] = !wires.is_cut(WIRE_ELECTRIFY) + wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN) + wire["bolts"] = !wires.is_cut(WIRE_DOOR_BOLTS) + wire["lights"] = !wires.is_cut(WIRE_BOLT_LIGHT) + wire["safe"] = !wires.is_cut(WIRE_SAFETY) + wire["timing"] = !wires.is_cut(WIRE_SPEED) + + data["wires"] = wire + return data + +/obj/machinery/door/airlock/proc/hack(mob/user as mob) + if(src.aiHacking==0) + src.aiHacking=1 + spawn(20) + //TODO: Make this take a minute + to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.") + sleep(50) + if(src.canAIControl()) + to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") + src.aiHacking=0 + return + else if(!src.canAIHack(user)) + to_chat(user, "We've lost our connection! Unable to hack airlock.") + src.aiHacking=0 + return + to_chat(user, "Fault confirmed: airlock control wire disabled or cut.") + sleep(20) + to_chat(user, "Attempting to hack into airlock. This may take some time.") + sleep(200) + if(src.canAIControl()) + to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") + src.aiHacking=0 + return + else if(!src.canAIHack(user)) + to_chat(user, "We've lost our connection! Unable to hack airlock.") + src.aiHacking=0 + return + to_chat(user, "Upload access confirmed. Loading control program into airlock software.") + sleep(170) + if(src.canAIControl()) + to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") + src.aiHacking=0 + return + else if(!src.canAIHack(user)) + to_chat(user, "We've lost our connection! Unable to hack airlock.") + src.aiHacking=0 + return + to_chat(user, "Transfer complete. Forcing airlock to execute program.") + sleep(50) + //disable blocked control + src.aiControlDisabled = 2 + to_chat(user, "Receiving control information from airlock.") + sleep(10) + //bring up airlock dialog + src.aiHacking = 0 + if (user) + src.attack_ai(user) + +/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target) + if (src.isElectrified()) + if (istype(mover, /obj/item)) + var/obj/item/i = mover + if (i.matter && (MAT_STEEL in i.matter) && i.matter[MAT_STEEL] > 0) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + return ..() + +/obj/machinery/door/airlock/attack_hand(mob/user as mob) + if(!istype(usr, /mob/living/silicon)) + if(src.isElectrified()) + if(src.shock(user, 100)) + return + + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/X = user + if(istype(X.species, /datum/species/xenos)) + src.attack_alien(user) + return + + if(src.p_open) + user.set_machine(src) + wires.Interact(user) + else + ..(user) + return + +/obj/machinery/door/airlock/tgui_act(action, params) + if(..()) + return TRUE + if(!user_allowed(usr)) + return TRUE + + switch(action) + if("disrupt-main") + if(!main_power_lost_until) + loseMainPower() + update_icon() + else + to_chat(usr, "Main power is already offline.") + . = TRUE + if("disrupt-backup") + if(!backup_power_lost_until) + loseBackupPower() + update_icon() + else + to_chat(usr, "Backup power is already offline.") + . = TRUE + if("shock-restore") + electrify(0, 1) + . = TRUE + if("shock-temp") + electrify(30, 1) + . = TRUE + if("shock-perm") + electrify(-1, 1) + . = TRUE + if("idscan-toggle") + set_idscan(aiDisabledIdScanner, 1) + . = TRUE + // if("emergency-toggle") + // toggle_emergency(usr) + // . = TRUE + if("bolt-toggle") + toggle_bolt(usr) + . = TRUE + if("light-toggle") + if(wires.is_cut(WIRE_BOLT_LIGHT)) + to_chat(usr, "The bolt lights wire is cut - The door bolt lights are permanently disabled.") + return + lights = !lights + update_icon() + . = TRUE + if("safe-toggle") + set_safeties(!safe, 1) + . = TRUE + if("speed-toggle") + if(wires.is_cut(WIRE_SPEED)) + to_chat(usr, "The timing wire is cut - Cannot alter timing.") + return + normalspeed = !normalspeed + . = TRUE + if("open-close") + user_toggle_open(usr) + . = TRUE + + update_icon() + return 1 + +/obj/machinery/door/airlock/proc/user_allowed(mob/user) + var/allowed = (issilicon(user) && canAIControl(user)) + if(!allowed && isobserver(user)) + var/mob/observer/dead/D = user + if(D.can_admin_interact()) + allowed = TRUE + return allowed + +/obj/machinery/door/airlock/proc/toggle_bolt(mob/user) + if(!user_allowed(user)) + return + if(wires.is_cut(WIRE_DOOR_BOLTS)) + to_chat(user, "The door bolt drop wire is cut - you can't toggle the door bolts.") + return + if(locked) + if(!arePowerSystemsOn()) + to_chat(user, "The door has no power - you can't raise the door bolts.") + else + unlock() + to_chat(user, "The door bolts have been raised.") + // log_combat(user, src, "unbolted") + else + lock() + to_chat(user, "The door bolts have been dropped.") + // log_combat(user, src, "bolted") + +/obj/machinery/door/airlock/proc/user_toggle_open(mob/user) + if(!user_allowed(user)) + return + if(welded) + to_chat(user, text("The airlock has been welded shut!")) + else if(locked) + to_chat(user, text("The door bolts are down!")) + else if(!density) + close() + else + open() + +/obj/machinery/door/airlock/proc/can_remove_electronics() + return src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) + +/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob) + //to_world("airlock attackby src [src] obj [C] mob [user]") + if(!istype(usr, /mob/living/silicon)) + if(src.isElectrified()) + if(src.shock(user, 75)) + return + if(istype(C, /obj/item/taperoll)) + return + + src.add_fingerprint(user) + if (attempt_vr(src,"attackby_vr",list(C, user))) return + if(istype(C, /mob/living)) + ..() + return + if(!repairing && istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(0,user)) + if(!src.welded) + src.welded = 1 + else + src.welded = null + playsound(src, C.usesound, 75, 1) + src.update_icon() + return + else + return + else if(C.is_screwdriver()) + if (src.p_open) + if (stat & BROKEN) + to_chat(usr, "The panel is broken and cannot be closed.") + else + src.p_open = 0 + playsound(src, C.usesound, 50, 1) + else + src.p_open = 1 + playsound(src, C.usesound, 50, 1) + src.update_icon() + else if(C.is_wirecutter()) + return src.attack_hand(user) + else if(istype(C, /obj/item/device/multitool)) + return src.attack_hand(user) + else if(istype(C, /obj/item/device/assembly/signaler)) + return src.attack_hand(user) + else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE + var/obj/item/weapon/pai_cable/cable = C + cable.plugin(src, user) + else if(!repairing && C.is_crowbar()) + if(can_remove_electronics()) + playsound(src, C.usesound, 75, 1) + user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") + if(do_after(user,40 * C.toolspeed)) + to_chat(user, "You removed the airlock electronics!") + + var/obj/structure/door_assembly/da = new assembly_type(src.loc) + if (istype(da, /obj/structure/door_assembly/multi_tile)) + da.set_dir(src.dir) + + da.anchored = TRUE + if(mineral) + da.glass = mineral + //else if(glass) + else if(glass && !da.glass) + da.glass = 1 + da.state = 1 + da.created_name = src.name + da.update_state() + + if(operating == -1 || (stat & BROKEN)) + new /obj/item/weapon/circuitboard/broken(src.loc) + operating = 0 + else + if (!electronics) create_electronics() + + electronics.loc = src.loc + electronics = null + + qdel(src) + return + else if(arePowerSystemsOn()) + to_chat(user, "The airlock's motors resist your efforts to force it.") + else if(locked) + to_chat(user, "The airlock's bolts prevent it from being forced.") + else + if(density) + spawn(0) open(1) + else + spawn(0) close(1) + + // Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc). + else if(istype(C, /obj/item/weapon)) + var/obj/item/weapon/W = C + if((W.pry == 1) && !arePowerSystemsOn()) + if(locked) + to_chat(user, "The airlock's bolts prevent it from being forced.") + else if( !welded && !operating ) + if(istype(C, /obj/item/weapon/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands. + var/obj/item/weapon/material/twohanded/fireaxe/F = C + if(!F.wielded) + to_chat(user, "You need to be wielding \the [F] to do that.") + return + // At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it. + if(density) + spawn(0) + open(1) + else + spawn(0) + close(1) + else + ..() + else + ..() + return + +/obj/machinery/door/airlock/phoron/attackby(C as obj, mob/user as mob) + if(C) + ignite(is_hot(C)) + ..() + +/obj/machinery/door/airlock/set_broken() + src.p_open = 1 + stat |= BROKEN + if (secured_wires) + lock() + for (var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message("[src.name]'s control panel bursts open, sparks spewing out!") + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + + update_icon() + return + +/obj/machinery/door/airlock/open(var/forced=0) + if(!can_open(forced)) + return 0 + use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people + + //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator + for(var/mob/M as anything in player_list) + if(!M || !M.client) + continue + var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds) + var/department_door_sounds = M.client.is_preference_enabled(/datum/client_preference/department_door_sounds) + var/sound + var/volume + if(old_sounds) // Do we have old sounds enabled? Play these even if we have department door sounds enabled. + if(arePowerSystemsOn()) + sound = legacy_open_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else if(!old_sounds && department_door_sounds && src.department_open_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these. + if(arePowerSystemsOn()) + sound = department_open_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else // Else, play these. + if(arePowerSystemsOn()) + sound = open_sound_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + + var/turf/T = get_turf(M) + var/distance = get_dist(T, get_turf(src)) + if(distance <= world.view * 2) + if(T && T.z == get_z(src)) + M.playsound_local(get_turf(src), sound, volume, 1, null, 0, TRUE, sound(sound), volume_channel = VOLUME_CHANNEL_DOORS) + + if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density) + src.closeOther.close() + return ..() + +/obj/machinery/door/airlock/can_open(var/forced=0) + if(!forced) + if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) + return 0 + + if(locked || welded) + return 0 + return ..() + +/obj/machinery/door/airlock/can_close(var/forced=0) + if(locked || welded) + return 0 + + if(!forced) + //despite the name, this wire is for general door control. + if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) + return 0 + + return ..() + +/atom/movable/proc/blocks_airlock() + return density + +/obj/machinery/door/blocks_airlock() + return 0 + +/obj/machinery/mech_sensor/blocks_airlock() + return 0 + +/mob/living/blocks_airlock() + return 1 + +/atom/movable/proc/airlock_crush(var/crush_damage) + return 0 + +/obj/machinery/portable_atmospherics/canister/airlock_crush(var/crush_damage) + . = ..() + health -= crush_damage + healthcheck() + +/obj/effect/energy_field/airlock_crush(var/crush_damage) + adjust_strength(crush_damage) + +/obj/structure/closet/airlock_crush(var/crush_damage) + ..() + damage(crush_damage) + for(var/atom/movable/AM in src) + AM.airlock_crush() + return 1 + +/mob/living/airlock_crush(var/crush_damage) + . = ..() + adjustBruteLoss(crush_damage) + SetStunned(5) + SetWeakened(5) + var/turf/T = get_turf(src) + T.add_blood(src) + return 1 + +/mob/living/carbon/airlock_crush(var/crush_damage) + . = ..() + if(can_feel_pain()) + emote("scream") + +/mob/living/silicon/robot/airlock_crush(var/crush_damage) + adjustBruteLoss(crush_damage) + return 0 + +/obj/machinery/door/airlock/close(var/forced=0) + if(!can_close(forced)) + return 0 + + if(safe) + for(var/turf/turf in locs) + for(var/atom/movable/AM in turf) + if(AM.blocks_airlock()) + if(!has_beeped) + playsound(src, 'sound/machines/buzz-two.ogg', 50, 0) + has_beeped = 1 + autoclose_in(6) + return + + for(var/turf/turf in locs) + for(var/atom/movable/AM in turf) + if(AM.airlock_crush(DOOR_CRUSH_DAMAGE)) + take_damage(DOOR_CRUSH_DAMAGE) + + use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people + has_beeped = 0 + for(var/mob/M as anything in player_list) + if(!M || !M.client) + continue + var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds) + var/department_door_sounds = M.client.is_preference_enabled(/datum/client_preference/department_door_sounds) + var/sound + var/volume + if(old_sounds) + if(arePowerSystemsOn()) + sound = legacy_close_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else if(!old_sounds && department_door_sounds && src.department_close_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these. + if(arePowerSystemsOn()) + sound = department_close_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else + if(arePowerSystemsOn()) + sound = close_sound_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + + var/turf/T = get_turf(M) + var/distance = get_dist(T, get_turf(src)) + if(distance <= world.view * 2) + if(T && T.z == get_z(src)) + M.playsound_local(get_turf(src), sound, volume, 1, null, 0, TRUE, sound(sound), volume_channel = VOLUME_CHANNEL_DOORS) + for(var/turf/turf in locs) + var/obj/structure/window/killthis = (locate(/obj/structure/window) in turf) + if(killthis) + killthis.ex_act(2)//Smashin windows + return ..() + +/obj/machinery/door/airlock/proc/lock(var/forced=0) + if(locked) + return 0 + + if (operating && !forced) return 0 + + src.locked = 1 + playsound(src, bolt_down_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS) + for(var/mob/M in range(1,src)) + M.show_message("You hear a click from the bottom of the door.", 2) + update_icon() + return 1 + +/obj/machinery/door/airlock/proc/unlock(var/forced=0) + if(!src.locked) + return + + if (!forced) + if(operating || !src.arePowerSystemsOn() || wires.is_cut(WIRE_DOOR_BOLTS)) return + + src.locked = 0 + playsound(src, bolt_up_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS) + for(var/mob/M in range(1,src)) + M.show_message("You hear a click from the bottom of the door.", 2) + update_icon() + return 1 + +/obj/machinery/door/airlock/allowed(mob/M) + if(locked) + return 0 + return ..(M) + +/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null) + ..() + + //if assembly is given, create the new door from the assembly + if (assembly && istype(assembly)) + assembly_type = assembly.type + + electronics = assembly.electronics + electronics.loc = src + + //update the door's access to match the electronics' + secured_wires = electronics.secure + if(electronics.one_access) + LAZYCLEARLIST(req_access) + req_one_access = src.electronics.conf_access + else + LAZYCLEARLIST(req_one_access) + req_access = src.electronics.conf_access + + //get the name from the assembly + if(assembly.created_name) + name = assembly.created_name + else + name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]" + + //get the dir from the assembly + set_dir(assembly.dir) + + //wires + var/turf/T = get_turf(newloc) + if(T && (T.z in using_map.admin_levels)) + secured_wires = 1 + if (secured_wires) + wires = new/datum/wires/airlock/secure(src) + else + wires = new/datum/wires/airlock(src) + +/obj/machinery/door/airlock/Initialize() + if(src.closeOtherId != null) + for (var/obj/machinery/door/airlock/A in machines) + if(A.closeOtherId == src.closeOtherId && A != src) + src.closeOther = A + break + name = "\improper [name]" + . = ..() + +/obj/machinery/door/airlock/Destroy() + qdel(wires) + wires = null + return ..() + +// Most doors will never be deconstructed over the course of a round, +// so as an optimization defer the creation of electronics until +// the airlock is deconstructed +/obj/machinery/door/airlock/proc/create_electronics() + //create new electronics + if (secured_wires) + src.electronics = new/obj/item/weapon/airlock_electronics/secure( src.loc ) + else + src.electronics = new/obj/item/weapon/airlock_electronics( src.loc ) + + //update the electronics to match the door's access + if(LAZYLEN(req_access)) + electronics.conf_access = req_access + else if (LAZYLEN(req_one_access)) + electronics.conf_access = req_one_access + electronics.one_access = 1 + +/obj/machinery/door/airlock/emp_act(var/severity) + if(prob(40/severity)) + var/duration = world.time + SecondsToTicks(30 / severity) + if(duration > electrified_until) + electrify(duration) + ..() + +/obj/machinery/door/airlock/power_change() //putting this is obj/machinery/door itself makes non-airlock doors turn invisible for some reason + ..() + if(stat & NOPOWER) + // If we lost power, disable electrification + // Keeping door lights on, runs on internal battery or something. + electrified_until = 0 + update_icon() + +/obj/machinery/door/airlock/proc/prison_open() + if(arePowerSystemsOn()) + src.unlock() + src.open() + src.lock() + return + + +/obj/machinery/door/airlock/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + // Old RCD code made it cost 10 units to decon an airlock. + // Now the new one costs ten "sheets". + return list( + RCD_VALUE_MODE = RCD_DECONSTRUCT, + RCD_VALUE_DELAY = 5 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 10 + ) + return FALSE + +/obj/machinery/door/airlock/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + to_chat(user, span("notice", "You deconstruct \the [src].")) + qdel(src) + return TRUE + return FALSE +======= +//VOREStation Edit - Redone a lot of airlock things: +/* +- Specific department maintenance doors +- Named doors properly according to type +- Gave them default access levels with the access constants +- Improper'd all of the names in the new() +*/ + +/obj/machinery/door/airlock + name = "Airlock" + icon = 'icons/obj/doors/Doorint.dmi' + icon_state = "door_closed" + power_channel = ENVIRON + + explosion_resistance = 10 + + // Doors do their own stuff + bullet_vulnerability = 0 + + blocks_emissive = EMISSIVE_BLOCK_GENERIC // Not quite as nice as /tg/'s custom masks. We should make those sometime + + var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. + var/hackProof = 0 // if 1, this door can't be hacked by the AI + var/electrified_until = 0 //World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. + var/main_power_lost_until = 0 //World time when main power is restored. + var/backup_power_lost_until = -1 //World time when backup power is restored. + var/has_beeped = 0 //If 1, will not beep on failed closing attempt. Resets when door closes. + var/spawnPowerRestoreRunning = 0 + var/welded = null + var/locked = 0 + var/lights = 1 // bolt lights show by default + var/aiDisabledIdScanner = 0 + var/aiHacking = 0 + var/obj/machinery/door/airlock/closeOther = null + var/closeOtherId = null + var/lockdownbyai = 0 + autoclose = 1 + var/assembly_type = /obj/structure/door_assembly + var/mineral = null + var/justzap = 0 + var/safe = 1 + normalspeed = 1 + var/obj/item/weapon/airlock_electronics/electronics = null + var/hasShocked = 0 //Prevents multiple shocks from happening + var/secured_wires = 0 + var/datum/wires/airlock/wires = null + + var/open_sound_powered = 'sound/machines/door/covert1o.ogg' + var/open_sound_unpowered = 'sound/machines/door/airlockforced.ogg' + var/close_sound_powered = 'sound/machines/door/covert1c.ogg' + var/legacy_open_powered = 'sound/machines/door/old_airlock.ogg' + var/legacy_close_powered = 'sound/machines/door/old_airlockclose.ogg' + var/department_open_powered = null + var/department_close_powered = null + var/denied_sound = 'sound/machines/deniedbeep.ogg' + var/bolt_up_sound = 'sound/machines/door/boltsup.ogg' + var/bolt_down_sound = 'sound/machines/door/boltsdown.ogg' + var/knock_sound = 'sound/machines/2beeplow.ogg' + var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' + var/knock_unpowered_sound = 'sound/machines/door/knock_glass.ogg' + +/obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage) + if(stat & (BROKEN|NOPOWER)) + if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD) + if(src.locked || src.welded) + visible_message("\The [user] begins breaking into \the [src] internals!") + user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything. + if(do_after(user,10 SECONDS,src)) + src.locked = 0 + src.welded = 0 + update_icon() + open(1) + if(prob(25)) + src.shock(user, 100) + user.set_AI_busy(FALSE) + else if(src.density) + visible_message("\The [user] forces \the [src] open!") + open(1) + else + visible_message("\The [user] forces \the [src] closed!") + close(1) + else + visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].") + return + ..() + +/obj/machinery/door/airlock/attack_alien(var/mob/user) //Familiar, right? Doors. -Mechoid + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/X = user + if(istype(X.species, /datum/species/xenos)) + if(src.locked || src.welded) + visible_message("\The [user] begins tearing into \the [src] internals!") + src.do_animate("deny") + if(do_after(user,15 SECONDS,src)) + visible_message("\The [user] tears \the [src] open, sparks flying from its electronics!") + src.do_animate("spark") + playsound(src, 'sound/machines/door/airlock_tear_apart.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS) + src.locked = 0 + src.welded = 0 + update_icon() + open(1) + src.set_broken() //These aren't emags, these be CLAWS + else if(src.density) + visible_message("\The [user] begins forcing \the [src] open!") + if(do_after(user, 5 SECONDS,src)) + playsound(src, 'sound/machines/door/airlock_creaking.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS) + visible_message("\The [user] forces \the [src] open!") + open(1) + else + visible_message("\The [user] forces \the [src] closed!") + close(1) + else + src.do_animate("deny") + visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].") + return + ..() + +/obj/machinery/door/airlock/get_material() + if(mineral) + return get_material_by_name(mineral) + return get_material_by_name(MAT_STEEL) + +/obj/machinery/door/airlock/command + name = "Command Airlock" + icon = 'icons/obj/doors/Doorcom.dmi' + req_one_access = list(access_heads) + assembly_type = /obj/structure/door_assembly/door_assembly_com + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cmd3o.ogg' + department_close_powered = 'sound/machines/door/cmd3c.ogg' + +/obj/machinery/door/airlock/security + name = "Security Airlock" + icon = 'icons/obj/doors/Doorsec.dmi' + req_one_access = list(access_security) + assembly_type = /obj/structure/door_assembly/door_assembly_sec + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sec1o.ogg' + department_close_powered = 'sound/machines/door/sec1c.ogg' + +/obj/machinery/door/airlock/engineering + name = "Engineering Airlock" + icon = 'icons/obj/doors/Dooreng.dmi' + req_one_access = list(access_engine) + assembly_type = /obj/structure/door_assembly/door_assembly_eng + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/engineeringatmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Doorengatmos.dmi' + req_one_access = list(access_atmospherics) + assembly_type = /obj/structure/door_assembly/door_assembly_eat + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/medical + name = "Medical Airlock" + icon = 'icons/obj/doors/Doormed.dmi' + req_one_access = list(access_medical) + assembly_type = /obj/structure/door_assembly/door_assembly_med + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/med1o.ogg' + department_close_powered = 'sound/machines/door/med1c.ogg' + +/obj/machinery/door/airlock/maintenance + name = "Maintenance Access" + icon = 'icons/obj/doors/Doormaint.dmi' + //req_one_access = list(access_maint_tunnels) //VOREStation Edit - Maintenance is open access + assembly_type = /obj/structure/door_assembly/door_assembly_mai + open_sound_powered = 'sound/machines/door/door2o.ogg' + close_sound_powered = 'sound/machines/door/door2c.ogg' + +/obj/machinery/door/airlock/maintenance/cargo + icon = 'icons/obj/doors/Doormaint_cargo.dmi' + req_one_access = list(access_cargo) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/door2o.ogg' + department_close_powered = 'sound/machines/door/door2c.ogg' + +/obj/machinery/door/airlock/maintenance/command + icon = 'icons/obj/doors/Doormaint_command.dmi' + req_one_access = list(access_heads) + +/obj/machinery/door/airlock/maintenance/common + icon = 'icons/obj/doors/Doormaint_common.dmi' + open_sound_powered = 'sound/machines/door/hall3o.ogg' + close_sound_powered = 'sound/machines/door/hall3c.ogg' + +/obj/machinery/door/airlock/maintenance/engi + icon = 'icons/obj/doors/Doormaint_engi.dmi' + req_one_access = list(access_engine) + +/obj/machinery/door/airlock/maintenance/int + icon = 'icons/obj/doors/Doormaint_int.dmi' + +/obj/machinery/door/airlock/maintenance/medical + icon = 'icons/obj/doors/Doormaint_med.dmi' + req_one_access = list(access_medical) + +/obj/machinery/door/airlock/maintenance/rnd + icon = 'icons/obj/doors/Doormaint_rnd.dmi' + req_one_access = list(access_research) + +/obj/machinery/door/airlock/maintenance/sec + icon = 'icons/obj/doors/Doormaint_sec.dmi' + req_one_access = list(access_security) + +/obj/machinery/door/airlock/external + name = "External Airlock" + icon = 'icons/obj/doors/Doorext.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_ext + open_sound_powered = 'sound/machines/door/space1o.ogg' + close_sound_powered = 'sound/machines/door/space1c.ogg' + +/obj/machinery/door/airlock/external/bolted + icon_state = "door_locked" // So it looks visibly bolted in map editor + locked = 1 + +// For convenience in making docking ports: one that is pre-bolted with frequency set! +/obj/machinery/door/airlock/external/bolted/cycling + frequency = 1379 + +/obj/machinery/door/airlock/glass_external + name = "External Airlock" + icon = 'icons/obj/doors/Doorextglass.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_ext + opacity = 0 + glass = 1 + req_one_access = list(access_external_airlocks) + open_sound_powered = 'sound/machines/door/space1o.ogg' + close_sound_powered = 'sound/machines/door/space1c.ogg' + +/obj/machinery/door/airlock/glass + name = "Glass Airlock" + icon = 'icons/obj/doors/Doorglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + open_sound_powered = 'sound/machines/door/hall1o.ogg' + close_sound_powered = 'sound/machines/door/hall1c.ogg' + legacy_open_powered = 'sound/machines/door/windowdoor.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + glass = 1 + +/obj/machinery/door/airlock/centcom + name = "Centcom Airlock" + icon = 'icons/obj/doors/Doorele.dmi' + req_one_access = list(access_cent_general) + opacity = 1 + open_sound_powered = 'sound/machines/door/cmd3o.ogg' + close_sound_powered = 'sound/machines/door/cmd3c.ogg' + +/obj/machinery/door/airlock/glass_centcom + name = "Airlock" + icon = 'icons/obj/doors/Dooreleglass.dmi' + opacity = 0 + glass = 1 + open_sound_powered = 'sound/machines/door/cmd3o.ogg' + close_sound_powered = 'sound/machines/door/cmd3c.ogg' + +/obj/machinery/door/airlock/vault + name = "Vault" + icon = 'icons/obj/doors/vault.dmi' + explosion_resistance = 20 + opacity = 1 + secured_wires = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites. + req_one_access = list(access_heads_vault) + open_sound_powered = 'sound/machines/door/vault1o.ogg' + close_sound_powered = 'sound/machines/door/vault1c.ogg' + +/obj/machinery/door/airlock/vault/bolted + icon_state = "door_locked" + locked = 1 + +/obj/machinery/door/airlock/freezer + name = "Freezer Airlock" + icon = 'icons/obj/doors/Doorfreezer.dmi' + opacity = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_fre + +/obj/machinery/door/airlock/hatch + name = "Airtight Hatch" + icon = 'icons/obj/doors/Doorhatchele.dmi' + explosion_resistance = 20 + opacity = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_hatch + req_one_access = list(access_maint_tunnels) + open_sound_powered = 'sound/machines/door/hatchopen.ogg' + close_sound_powered = 'sound/machines/door/hatchclose.ogg' + open_sound_unpowered = 'sound/machines/door/hatchforced.ogg' + +/obj/machinery/door/airlock/maintenance_hatch + name = "Maintenance Hatch" + icon = 'icons/obj/doors/Doorhatchmaint2.dmi' + explosion_resistance = 20 + opacity = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_mhatch + req_one_access = list(access_maint_tunnels) + open_sound_powered = 'sound/machines/door/hatchopen.ogg' + close_sound_powered = 'sound/machines/door/hatchclose.ogg' + open_sound_unpowered = 'sound/machines/door/hatchforced.ogg' + +/obj/machinery/door/airlock/glass_command + name = "Command Airlock" + icon = 'icons/obj/doors/Doorcomglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_com + glass = 1 + req_one_access = list(access_heads) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cmd1o.ogg' + department_close_powered = 'sound/machines/door/cmd1c.ogg' + +/obj/machinery/door/airlock/glass_engineering + name = "Engineering Airlock" + icon = 'icons/obj/doors/Doorengglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_eng + glass = 1 + req_one_access = list(access_engine) + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/glass_engineeringatmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Doorengatmoglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_eat + glass = 1 + req_one_access = list(access_atmospherics) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/glass_security + name = "Security Airlock" + icon = 'icons/obj/doors/Doorsecglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_sec + glass = 1 + req_one_access = list(access_security) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sec1o.ogg' + department_close_powered = 'sound/machines/door/sec1c.ogg' + +/obj/machinery/door/airlock/glass_medical + name = "Medical Airlock" + icon = 'icons/obj/doors/Doormedglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_med + glass = 1 + req_one_access = list(access_medical) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/med1o.ogg' + department_close_powered = 'sound/machines/door/med1c.ogg' + +/obj/machinery/door/airlock/mining + name = "Mining Airlock" + icon = 'icons/obj/doors/Doormining.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_min + req_one_access = list(access_mining) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cgo1o.ogg' + department_close_powered = 'sound/machines/door/cgo1c.ogg' + +/obj/machinery/door/airlock/atmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Dooratmo.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_atmo + req_one_access = list(access_atmospherics) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/research + name = "Research Airlock" + icon = 'icons/obj/doors/Doorresearch.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_research + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/glass_research + name = "Research Airlock" + icon = 'icons/obj/doors/Doorresearchglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_research + glass = 1 + req_one_access = list(access_research) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/glass_mining + name = "Mining Airlock" + icon = 'icons/obj/doors/Doorminingglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_min + glass = 1 + req_one_access = list(access_mining) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/cgo1o.ogg' + department_close_powered = 'sound/machines/door/cgo1c.ogg' + +/obj/machinery/door/airlock/glass_atmos + name = "Atmospherics Airlock" + icon = 'icons/obj/doors/Dooratmoglass.dmi' + hitsound = 'sound/effects/Glasshit.ogg' + maxhealth = 300 + explosion_resistance = 5 + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_atmo + glass = 1 + req_one_access = list(access_atmospherics) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/eng1o.ogg' + department_close_powered = 'sound/machines/door/eng1c.ogg' + +/obj/machinery/door/airlock/gold + name = "Gold Airlock" + icon = 'icons/obj/doors/Doorgold.dmi' + mineral = "gold" + +/obj/machinery/door/airlock/silver + name = "Silver Airlock" + icon = 'icons/obj/doors/Doorsilver.dmi' + mineral = "silver" + +/obj/machinery/door/airlock/diamond + name = "Diamond Airlock" + icon = 'icons/obj/doors/Doordiamond.dmi' + mineral = "diamond" + +/obj/machinery/door/airlock/uranium + name = "Uranium Airlock" + desc = "And they said I was crazy." + icon = 'icons/obj/doors/Dooruranium.dmi' + mineral = "uranium" + var/last_event = 0 + var/rad_power = 7.5 + +/obj/machinery/door/airlock/process() + // Deliberate no call to parent. + if(main_power_lost_until > 0 && world.time >= main_power_lost_until) + regainMainPower() + + if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until) + regainBackupPower() + + else if(electrified_until > 0 && world.time >= electrified_until) + electrify(0) + + if (..() == PROCESS_KILL && !(main_power_lost_until > 0 || backup_power_lost_until > 0 || electrified_until > 0)) + . = PROCESS_KILL + +/obj/machinery/door/airlock/uranium/process() + if(world.time > last_event+20) + if(prob(50)) + SSradiation.radiate(src, rad_power) + last_event = world.time + ..() + +/obj/machinery/door/airlock/phoron + name = "Phoron Airlock" + desc = "No way this can end badly." + icon = 'icons/obj/doors/Doorphoron.dmi' + mineral = "phoron" + +/obj/machinery/door/airlock/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 300) + PhoronBurn(exposed_temperature) + +/obj/machinery/door/airlock/phoron/proc/ignite(exposed_temperature) + if(exposed_temperature > 300) + PhoronBurn(exposed_temperature) + +/obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature) + for(var/turf/simulated/floor/target_tile in range(2,loc)) + target_tile.assume_gas("phoron", 35, 400+T0C) + spawn (0) target_tile.hotspot_expose(temperature, 400) + for(var/turf/simulated/wall/W in range(3,src)) + W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame + for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) + D.ignite(temperature/4) + new/obj/structure/door_assembly( src.loc ) + qdel(src) + +/obj/machinery/door/airlock/sandstone + name = "Sandstone Airlock" + icon = 'icons/obj/doors/Doorsand.dmi' + mineral = "sandstone" + +/obj/machinery/door/airlock/science + name = "Research Airlock" + icon = 'icons/obj/doors/Doorsci.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_science + req_one_access = list(access_research) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/glass_science + name = "Glass Airlocks" + icon = 'icons/obj/doors/Doorsciglass.dmi' + opacity = 0 + assembly_type = /obj/structure/door_assembly/door_assembly_science + glass = 1 + req_one_access = list(access_research) + open_sound_powered = 'sound/machines/door/hall1o.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + close_sound_powered = 'sound/machines/door/hall1c.ogg' // VOREStation Edit: Default door sounds for fancy, department-off. + department_open_powered = 'sound/machines/door/sci1o.ogg' + department_close_powered = 'sound/machines/door/sci1c.ogg' + +/obj/machinery/door/airlock/highsecurity + name = "Secure Airlock" + icon = 'icons/obj/doors/hightechsecurity.dmi' + explosion_resistance = 20 + secured_wires = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity + req_one_access = list(access_heads_vault) + open_sound_powered = 'sound/machines/door/secure1o.ogg' + close_sound_powered = 'sound/machines/door/secure1c.ogg' + +/obj/machinery/door/airlock/voidcraft + name = "voidcraft hatch" + desc = "It's an extra resilient airlock intended for spacefaring vessels." + icon = 'icons/obj/doors/shuttledoors.dmi' + explosion_resistance = 20 + opacity = 0 + glass = 1 + assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft + open_sound_powered = 'sound/machines/door/shuttle1o.ogg' + close_sound_powered = 'sound/machines/door/shuttle1c.ogg' + +// Airlock opens from top-bottom instead of left-right. +/obj/machinery/door/airlock/voidcraft/vertical + icon = 'icons/obj/doors/shuttledoors_vertical.dmi' + assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft/vertical + open_sound_powered = 'sound/machines/door/shuttle1o.ogg' + close_sound_powered = 'sound/machines/door/shuttle1c.ogg' + + +/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock + name = "Precursor Alpha Object - Doors" + desc = "This object appears to be used in order to restrict or allow access to \ + rooms based on its physical state. In other words, a door. \ + Despite being designed and created by unknown ancient alien hands, this door has \ + a large number of similarities to the conventional airlock, such as being driven by \ + electricity, opening and closing by physically moving, and being air tight. \ + It also operates by responding to signals through internal electrical conduits. \ + These characteristics make it possible for one with experience with a multitool \ + to manipulate the door.\ +

\ + The symbol on the door does not match any living species' patterns, giving further \ + implications that this door is very old, and yet it remains operational after \ + thousands of years. It is unknown if that is due to superb construction, or \ + unseen autonomous maintenance having been performed." + value = CATALOGUER_REWARD_EASY + +/obj/machinery/door/airlock/alien + name = "alien airlock" + desc = "You're fairly sure this is a door." + catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock) + icon = 'icons/obj/doors/Dooralien.dmi' + explosion_resistance = 20 + secured_wires = TRUE + hackProof = TRUE + assembly_type = /obj/structure/door_assembly/door_assembly_alien + req_one_access = list(access_alien) + +/obj/machinery/door/airlock/alien/locked + icon_state = "door_locked" + locked = TRUE + +/obj/machinery/door/airlock/alien/public // Entry to UFO. + req_one_access = list() + normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside. + hackProof = TRUE //VOREStation Edit - No borgos + +/* +About the new airlock wires panel: +* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. +* one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though) +* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be open, but bolts-raising will not work. Cutting these wires may electrocute the user. +* one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work. +* two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. +* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. +* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. +* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire) +* one wire for controling door safetys. When active, door does not close on someone. When cut, door will ruin someone's shit. When pulsed, door will immedately ruin someone's shit. +* one wire for controlling door speed. When active, dor closes at normal rate. When cut, door does not close manually. When pulsed, door attempts to close every tick. +*/ + + + +/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite + if(!issilicon(usr)) + if(src.isElectrified()) + if(!src.justzap) + if(src.shock(user, 100)) + src.justzap = 1 + spawn (10) + src.justzap = 0 + return + else /*if(src.justzap)*/ + return + else if(user.hallucination > 50 && prob(10) && src.operating == 0) + to_chat(user, "You feel a powerful shock course through your body!") + user.halloss += 10 + user.stunned += 10 + return + ..(user) + +/obj/machinery/door/airlock/proc/isElectrified() + if(src.electrified_until != 0) + return 1 + return 0 + +/obj/machinery/door/airlock/proc/canAIControl() + return ((src.aiControlDisabled!=1) && (!src.isAllPowerLoss())); + +/obj/machinery/door/airlock/proc/canAIHack() + return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss())); + +/obj/machinery/door/airlock/proc/arePowerSystemsOn() + if (stat & (NOPOWER|BROKEN)) + return 0 + return (src.main_power_lost_until==0 || src.backup_power_lost_until==0) + +/obj/machinery/door/airlock/requiresID() + return !(wires.is_cut(WIRE_IDSCAN) || aiDisabledIdScanner) + +/obj/machinery/door/airlock/proc/isAllPowerLoss() + if(stat & (NOPOWER|BROKEN)) + return 1 + if(mainPowerCablesCut() && backupPowerCablesCut()) + return 1 + return 0 + +/obj/machinery/door/airlock/proc/mainPowerCablesCut() + return wires.is_cut(WIRE_MAIN_POWER1) || wires.is_cut(WIRE_MAIN_POWER2) + +/obj/machinery/door/airlock/proc/backupPowerCablesCut() + return wires.is_cut(WIRE_BACKUP_POWER1) || wires.is_cut(WIRE_BACKUP_POWER2) + +/obj/machinery/door/airlock/proc/loseMainPower() + main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) + + // If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running + if(backup_power_lost_until == -1 && !backupPowerCablesCut()) + backup_power_lost_until = world.time + SecondsToTicks(10) + + if(main_power_lost_until > 0 || backup_power_lost_until > 0) + START_MACHINE_PROCESSING(src) + + // Disable electricity if required + if(electrified_until && isAllPowerLoss()) + electrify(0) + + update_icon() + +/obj/machinery/door/airlock/proc/loseBackupPower() + backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) + + if(backup_power_lost_until > 0) + START_MACHINE_PROCESSING(src) + + // Disable electricity if required + if(electrified_until && isAllPowerLoss()) + electrify(0) + + update_icon() + +/obj/machinery/door/airlock/proc/regainMainPower() + if(!mainPowerCablesCut()) + main_power_lost_until = 0 + // If backup power is currently active then disable, otherwise let it count down and disable itself later + if(!backup_power_lost_until) + backup_power_lost_until = -1 + + update_icon() + +/obj/machinery/door/airlock/proc/regainBackupPower() + if(!backupPowerCablesCut()) + // Restore backup power only if main power is offline, otherwise permanently disable + backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0 + + update_icon() + +/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0) + var/message = "" + if(wires.is_cut(WIRE_ELECTRIFY) && arePowerSystemsOn()) + message = text("The electrification wire is cut - Door permanently electrified.") + src.electrified_until = -1 + else if(duration && !arePowerSystemsOn()) + message = text("The door is unpowered - Cannot electrify the door.") + src.electrified_until = 0 + else if(!duration && electrified_until != 0) + message = "The door is now un-electrified." + src.electrified_until = 0 + else if(duration) //electrify door for the given duration seconds + if(usr) + shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])") + add_attack_logs(usr,name,"Electrified a door") + else + shockedby += text("\[[time_stamp()]\] - EMP)") + message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]." + src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration) + + if(electrified_until > 0) + START_MACHINE_PROCESSING(src) + + if(feedback && message) + to_chat(usr,message) + +/obj/machinery/door/airlock/proc/set_idscan(var/activate, var/feedback = 0) + var/message = "" + if(wires.is_cut(WIRE_IDSCAN)) + message = "The IdScan wire is cut - IdScan feature permanently disabled." + else if(activate && src.aiDisabledIdScanner) + src.aiDisabledIdScanner = 0 + message = "IdScan feature has been enabled." + else if(!activate && !src.aiDisabledIdScanner) + src.aiDisabledIdScanner = 1 + message = "IdScan feature has been disabled." + + if(feedback && message) + to_chat(usr,message) + +/obj/machinery/door/airlock/proc/set_safeties(var/activate, var/feedback = 0) + var/message = "" + // Safeties! We don't need no stinking safeties! + if (wires.is_cut(WIRE_SAFETY)) + message = text("The safety wire is cut - Cannot enable safeties.") + else if (!activate && src.safe) + safe = 0 + else if (activate && !src.safe) + safe = 1 + + if(feedback && message) + to_chat(usr,message) + +// shock user with probability prb (if all connections & power are working) +// returns 1 if shocked, 0 otherwise +// The preceding comment was borrowed from the grille's shock script +/obj/machinery/door/airlock/shock(mob/user, prb) + if(!arePowerSystemsOn()) + return 0 + if(hasShocked) + return 0 //Already shocked someone recently? + if(..()) + hasShocked = 1 + sleep(10) + hasShocked = 0 + return 1 + else + return 0 + + +/obj/machinery/door/airlock/update_icon() + cut_overlays() + if(density) + if(locked && lights && src.arePowerSystemsOn()) + icon_state = "door_locked" + else + icon_state = "door_closed" + if(p_open || welded) + if(p_open) + add_overlay("panel_open") + if (!(stat & NOPOWER)) + if(stat & BROKEN) + add_overlay("sparks_broken") + else if (health < maxhealth * 3/4) + add_overlay("sparks_damaged") + if(welded) + add_overlay("welded") + else if (health < maxhealth * 3/4 && !(stat & NOPOWER)) + add_overlay("sparks_damaged") + else + icon_state = "door_open" + if((stat & BROKEN) && !(stat & NOPOWER)) + add_overlay("sparks_open") + return + +/obj/machinery/door/airlock/do_animate(animation) + switch(animation) + if("opening") + cut_overlay() + if(p_open) + flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking + update_icon() + else + flick("door_opening", src)//[stat ? "_stat":] + update_icon() + if("closing") + cut_overlay() + if(p_open) + flick("o_door_closing", src) + update_icon() + else + flick("door_closing", src) + update_icon() + if("spark") + if(density) + flick("door_spark", src) + if("deny") + if(density && src.arePowerSystemsOn()) + flick("door_deny", src) + playsound(src, denied_sound, 50, 0, 3) + return + +/obj/machinery/door/airlock/attack_ai(mob/user as mob) + tgui_interact(user) + +/obj/machinery/door/airlock/attack_ghost(mob/user) + tgui_interact(user) + +/obj/machinery/door/airlock/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/tgui_state/custom_state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiAirlock", name) + ui.open() + if(custom_state) + ui.set_state(custom_state) + return TRUE + +/obj/machinery/door/airlock/tgui_data(mob/user) + var/list/data = list() + + var/list/power = list() + power["main"] = main_power_lost_until > 0 ? 0 : 2 + power["main_timeleft"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1) + power["backup"] = backup_power_lost_until > 0 ? 0 : 2 + power["backup_timeleft"] = round(backup_power_lost_until > 0 ? max(backup_power_lost_until - world.time, 0) / 10 : backup_power_lost_until, 1) + data["power"] = power + + data["shock"] = (electrified_until == 0) ? 2 : 0 + data["shock_timeleft"] = round(electrified_until > 0 ? max(electrified_until - world.time, 0) / 10 : electrified_until, 1) + data["id_scanner"] = !aiDisabledIdScanner + data["locked"] = locked // bolted + data["lights"] = lights // bolt lights + data["safe"] = safe // safeties + data["speed"] = normalspeed // safe speed + data["welded"] = welded // welded + data["opened"] = !density // opened + + var/list/wire = list() + wire["main_1"] = !wires.is_cut(WIRE_MAIN_POWER1) + wire["main_2"] = !wires.is_cut(WIRE_MAIN_POWER2) + wire["backup_1"] = !wires.is_cut(WIRE_BACKUP_POWER1) + wire["backup_2"] = !wires.is_cut(WIRE_BACKUP_POWER2) + wire["shock"] = !wires.is_cut(WIRE_ELECTRIFY) + wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN) + wire["bolts"] = !wires.is_cut(WIRE_DOOR_BOLTS) + wire["lights"] = !wires.is_cut(WIRE_BOLT_LIGHT) + wire["safe"] = !wires.is_cut(WIRE_SAFETY) + wire["timing"] = !wires.is_cut(WIRE_SPEED) + + data["wires"] = wire + return data + +/obj/machinery/door/airlock/proc/hack(mob/user as mob) + if(src.aiHacking==0) + src.aiHacking=1 + spawn(20) + //TODO: Make this take a minute + to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.") + sleep(50) + if(src.canAIControl()) + to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") + src.aiHacking=0 + return + else if(!src.canAIHack(user)) + to_chat(user, "We've lost our connection! Unable to hack airlock.") + src.aiHacking=0 + return + to_chat(user, "Fault confirmed: airlock control wire disabled or cut.") + sleep(20) + to_chat(user, "Attempting to hack into airlock. This may take some time.") + sleep(200) + if(src.canAIControl()) + to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") + src.aiHacking=0 + return + else if(!src.canAIHack(user)) + to_chat(user, "We've lost our connection! Unable to hack airlock.") + src.aiHacking=0 + return + to_chat(user, "Upload access confirmed. Loading control program into airlock software.") + sleep(170) + if(src.canAIControl()) + to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") + src.aiHacking=0 + return + else if(!src.canAIHack(user)) + to_chat(user, "We've lost our connection! Unable to hack airlock.") + src.aiHacking=0 + return + to_chat(user, "Transfer complete. Forcing airlock to execute program.") + sleep(50) + //disable blocked control + src.aiControlDisabled = 2 + to_chat(user, "Receiving control information from airlock.") + sleep(10) + //bring up airlock dialog + src.aiHacking = 0 + if (user) + src.attack_ai(user) + +/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target) + if (src.isElectrified()) + if (istype(mover, /obj/item)) + var/obj/item/i = mover + if (i.matter && (MAT_STEEL in i.matter) && i.matter[MAT_STEEL] > 0) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + return ..() + +/obj/machinery/door/airlock/attack_hand(mob/user as mob) + if(!istype(usr, /mob/living/silicon)) + if(src.isElectrified()) + if(src.shock(user, 100)) + return + + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/X = user + if(istype(X.species, /datum/species/xenos)) + src.attack_alien(user) + return + + if(src.p_open) + user.set_machine(src) + wires.Interact(user) + else + ..(user) + return + +/obj/machinery/door/airlock/AltClick(mob/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(!Adjacent(user)) + return + else if(user.a_intent == I_HURT) + src.visible_message("[user] hammers on \the [src]!", "Someone hammers loudly on \the [src]!") + src.add_fingerprint(user) + if(icon_state == "door_closed" && arePowerSystemsOn()) + flick("door_deny", src) + playsound(src, knock_hammer_sound, 50, 0, 3) + else if(arePowerSystemsOn()) + src.visible_message("[user] presses the door bell on \the [src].", "\The [src]'s bell rings.") + src.add_fingerprint(user) + if(icon_state == "door_closed") + flick("door_deny", src) + playsound(src, knock_sound, 50, 0, 3) + else + src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].") + src.add_fingerprint(user) + playsound(src, knock_unpowered_sound, 50, 0, 3) + return + +/obj/machinery/door/airlock/tgui_act(action, params) + if(..()) + return TRUE + if(!user_allowed(usr)) + return TRUE + + switch(action) + if("disrupt-main") + if(!main_power_lost_until) + loseMainPower() + update_icon() + else + to_chat(usr, "Main power is already offline.") + . = TRUE + if("disrupt-backup") + if(!backup_power_lost_until) + loseBackupPower() + update_icon() + else + to_chat(usr, "Backup power is already offline.") + . = TRUE + if("shock-restore") + electrify(0, 1) + . = TRUE + if("shock-temp") + electrify(30, 1) + . = TRUE + if("shock-perm") + electrify(-1, 1) + . = TRUE + if("idscan-toggle") + set_idscan(aiDisabledIdScanner, 1) + . = TRUE + // if("emergency-toggle") + // toggle_emergency(usr) + // . = TRUE + if("bolt-toggle") + toggle_bolt(usr) + . = TRUE + if("light-toggle") + if(wires.is_cut(WIRE_BOLT_LIGHT)) + to_chat(usr, "The bolt lights wire is cut - The door bolt lights are permanently disabled.") + return + lights = !lights + update_icon() + . = TRUE + if("safe-toggle") + set_safeties(!safe, 1) + . = TRUE + if("speed-toggle") + if(wires.is_cut(WIRE_SPEED)) + to_chat(usr, "The timing wire is cut - Cannot alter timing.") + return + normalspeed = !normalspeed + . = TRUE + if("open-close") + user_toggle_open(usr) + . = TRUE + + update_icon() + return 1 + +/obj/machinery/door/airlock/proc/user_allowed(mob/user) + var/allowed = (issilicon(user) && canAIControl(user)) + if(!allowed && isobserver(user)) + var/mob/observer/dead/D = user + if(D.can_admin_interact()) + allowed = TRUE + return allowed + +/obj/machinery/door/airlock/proc/toggle_bolt(mob/user) + if(!user_allowed(user)) + return + if(wires.is_cut(WIRE_DOOR_BOLTS)) + to_chat(user, "The door bolt drop wire is cut - you can't toggle the door bolts.") + return + if(locked) + if(!arePowerSystemsOn()) + to_chat(user, "The door has no power - you can't raise the door bolts.") + else + unlock() + to_chat(user, "The door bolts have been raised.") + // log_combat(user, src, "unbolted") + else + lock() + to_chat(user, "The door bolts have been dropped.") + // log_combat(user, src, "bolted") + +/obj/machinery/door/airlock/proc/user_toggle_open(mob/user) + if(!user_allowed(user)) + return + if(welded) + to_chat(user, text("The airlock has been welded shut!")) + else if(locked) + to_chat(user, text("The door bolts are down!")) + else if(!density) + close() + else + open() + +/obj/machinery/door/airlock/proc/can_remove_electronics() + return src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) + +/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob) + //to_world("airlock attackby src [src] obj [C] mob [user]") + if(!istype(usr, /mob/living/silicon)) + if(src.isElectrified()) + if(src.shock(user, 75)) + return + if(istype(C, /obj/item/taperoll)) + return + + src.add_fingerprint(user) + if (attempt_vr(src,"attackby_vr",list(C, user))) return + if(istype(C, /mob/living)) + ..() + return + if(!repairing && istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(0,user)) + if(!src.welded) + src.welded = 1 + else + src.welded = null + playsound(src, C.usesound, 75, 1) + src.update_icon() + return + else + return + else if(C.is_screwdriver()) + if (src.p_open) + if (stat & BROKEN) + to_chat(usr, "The panel is broken and cannot be closed.") + else + src.p_open = 0 + playsound(src, C.usesound, 50, 1) + else + src.p_open = 1 + playsound(src, C.usesound, 50, 1) + src.update_icon() + else if(C.is_wirecutter()) + return src.attack_hand(user) + else if(istype(C, /obj/item/device/multitool)) + return src.attack_hand(user) + else if(istype(C, /obj/item/device/assembly/signaler)) + return src.attack_hand(user) + else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE + var/obj/item/weapon/pai_cable/cable = C + cable.plugin(src, user) + else if(!repairing && C.is_crowbar()) + if(can_remove_electronics()) + playsound(src, C.usesound, 75, 1) + user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") + if(do_after(user,40 * C.toolspeed)) + to_chat(user, "You removed the airlock electronics!") + + var/obj/structure/door_assembly/da = new assembly_type(src.loc) + if (istype(da, /obj/structure/door_assembly/multi_tile)) + da.set_dir(src.dir) + + da.anchored = TRUE + if(mineral) + da.glass = mineral + //else if(glass) + else if(glass && !da.glass) + da.glass = 1 + da.state = 1 + da.created_name = src.name + da.update_state() + + if(operating == -1 || (stat & BROKEN)) + new /obj/item/weapon/circuitboard/broken(src.loc) + operating = 0 + else + if (!electronics) create_electronics() + + electronics.loc = src.loc + electronics = null + + qdel(src) + return + else if(arePowerSystemsOn()) + to_chat(user, "The airlock's motors resist your efforts to force it.") + else if(locked) + to_chat(user, "The airlock's bolts prevent it from being forced.") + else + if(density) + spawn(0) open(1) + else + spawn(0) close(1) + + // Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc). + else if(istype(C, /obj/item/weapon)) + var/obj/item/weapon/W = C + if((W.pry == 1) && !arePowerSystemsOn()) + if(locked) + to_chat(user, "The airlock's bolts prevent it from being forced.") + else if( !welded && !operating ) + if(istype(C, /obj/item/weapon/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands. + var/obj/item/weapon/material/twohanded/fireaxe/F = C + if(!F.wielded) + to_chat(user, "You need to be wielding \the [F] to do that.") + return + // At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it. + if(density) + spawn(0) + open(1) + else + spawn(0) + close(1) + else + ..() + else + ..() + return + +/obj/machinery/door/airlock/phoron/attackby(C as obj, mob/user as mob) + if(C) + ignite(is_hot(C)) + ..() + +/obj/machinery/door/airlock/set_broken() + src.p_open = 1 + stat |= BROKEN + if (secured_wires) + lock() + for (var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message("[src.name]'s control panel bursts open, sparks spewing out!") + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + + update_icon() + return + +/obj/machinery/door/airlock/open(var/forced=0) + if(!can_open(forced)) + return 0 + use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people + + //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator + for(var/mob/M as anything in player_list) + if(!M || !M.client) + continue + var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds) + var/department_door_sounds = M.client.is_preference_enabled(/datum/client_preference/department_door_sounds) + var/sound + var/volume + if(old_sounds) // Do we have old sounds enabled? Play these even if we have department door sounds enabled. + if(arePowerSystemsOn()) + sound = legacy_open_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else if(!old_sounds && department_door_sounds && src.department_open_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these. + if(arePowerSystemsOn()) + sound = department_open_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else // Else, play these. + if(arePowerSystemsOn()) + sound = open_sound_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + + var/turf/T = get_turf(M) + var/distance = get_dist(T, get_turf(src)) + if(distance <= world.view * 2) + if(T && T.z == get_z(src)) + M.playsound_local(get_turf(src), sound, volume, 1, null, 0, TRUE, sound(sound), volume_channel = VOLUME_CHANNEL_DOORS) + + if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density) + src.closeOther.close() + return ..() + +/obj/machinery/door/airlock/can_open(var/forced=0) + if(!forced) + if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) + return 0 + + if(locked || welded) + return 0 + return ..() + +/obj/machinery/door/airlock/can_close(var/forced=0) + if(locked || welded) + return 0 + + if(!forced) + //despite the name, this wire is for general door control. + if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) + return 0 + + return ..() + +/atom/movable/proc/blocks_airlock() + return density + +/obj/machinery/door/blocks_airlock() + return 0 + +/obj/machinery/mech_sensor/blocks_airlock() + return 0 + +/mob/living/blocks_airlock() + return 1 + +/atom/movable/proc/airlock_crush(var/crush_damage) + return 0 + +/obj/machinery/portable_atmospherics/canister/airlock_crush(var/crush_damage) + . = ..() + health -= crush_damage + healthcheck() + +/obj/effect/energy_field/airlock_crush(var/crush_damage) + adjust_strength(crush_damage) + +/obj/structure/closet/airlock_crush(var/crush_damage) + ..() + damage(crush_damage) + for(var/atom/movable/AM in src) + AM.airlock_crush() + return 1 + +/mob/living/airlock_crush(var/crush_damage) + . = ..() + adjustBruteLoss(crush_damage) + SetStunned(5) + SetWeakened(5) + var/turf/T = get_turf(src) + T.add_blood(src) + return 1 + +/mob/living/carbon/airlock_crush(var/crush_damage) + . = ..() + if(can_feel_pain()) + emote("scream") + +/mob/living/silicon/robot/airlock_crush(var/crush_damage) + adjustBruteLoss(crush_damage) + return 0 + +/obj/machinery/door/airlock/close(var/forced=0) + if(!can_close(forced)) + return 0 + + if(safe) + for(var/turf/turf in locs) + for(var/atom/movable/AM in turf) + if(AM.blocks_airlock()) + if(!has_beeped) + playsound(src, 'sound/machines/buzz-two.ogg', 50, 0) + has_beeped = 1 + autoclose_in(6) + return + + for(var/turf/turf in locs) + for(var/atom/movable/AM in turf) + if(AM.airlock_crush(DOOR_CRUSH_DAMAGE)) + take_damage(DOOR_CRUSH_DAMAGE) + + use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people + has_beeped = 0 + for(var/mob/M as anything in player_list) + if(!M || !M.client) + continue + var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds) + var/department_door_sounds = M.client.is_preference_enabled(/datum/client_preference/department_door_sounds) + var/sound + var/volume + if(old_sounds) + if(arePowerSystemsOn()) + sound = legacy_close_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else if(!old_sounds && department_door_sounds && src.department_close_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these. + if(arePowerSystemsOn()) + sound = department_close_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + else + if(arePowerSystemsOn()) + sound = close_sound_powered + volume = 50 + else + sound = open_sound_unpowered + volume = 75 + + var/turf/T = get_turf(M) + var/distance = get_dist(T, get_turf(src)) + if(distance <= world.view * 2) + if(T && T.z == get_z(src)) + M.playsound_local(get_turf(src), sound, volume, 1, null, 0, TRUE, sound(sound), volume_channel = VOLUME_CHANNEL_DOORS) + for(var/turf/turf in locs) + var/obj/structure/window/killthis = (locate(/obj/structure/window) in turf) + if(killthis) + killthis.ex_act(2)//Smashin windows + return ..() + +/obj/machinery/door/airlock/proc/lock(var/forced=0) + if(locked) + return 0 + + if (operating && !forced) return 0 + + src.locked = 1 + playsound(src, bolt_down_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS) + for(var/mob/M in range(1,src)) + M.show_message("You hear a click from the bottom of the door.", 2) + update_icon() + return 1 + +/obj/machinery/door/airlock/proc/unlock(var/forced=0) + if(!src.locked) + return + + if (!forced) + if(operating || !src.arePowerSystemsOn() || wires.is_cut(WIRE_DOOR_BOLTS)) return + + src.locked = 0 + playsound(src, bolt_up_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS) + for(var/mob/M in range(1,src)) + M.show_message("You hear a click from the bottom of the door.", 2) + update_icon() + return 1 + +/obj/machinery/door/airlock/allowed(mob/M) + if(locked) + return 0 + return ..(M) + +/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null) + ..() + + //if assembly is given, create the new door from the assembly + if (assembly && istype(assembly)) + assembly_type = assembly.type + + electronics = assembly.electronics + electronics.loc = src + + //update the door's access to match the electronics' + secured_wires = electronics.secure + if(electronics.one_access) + LAZYCLEARLIST(req_access) + req_one_access = src.electronics.conf_access + else + LAZYCLEARLIST(req_one_access) + req_access = src.electronics.conf_access + + //get the name from the assembly + if(assembly.created_name) + name = assembly.created_name + else + name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]" + + //get the dir from the assembly + set_dir(assembly.dir) + + //wires + var/turf/T = get_turf(newloc) + if(T && (T.z in using_map.admin_levels)) + secured_wires = 1 + if (secured_wires) + wires = new/datum/wires/airlock/secure(src) + else + wires = new/datum/wires/airlock(src) + +/obj/machinery/door/airlock/Initialize() + if(src.closeOtherId != null) + for (var/obj/machinery/door/airlock/A in machines) + if(A.closeOtherId == src.closeOtherId && A != src) + src.closeOther = A + break + name = "\improper [name]" + . = ..() + +/obj/machinery/door/airlock/Destroy() + qdel(wires) + wires = null + return ..() + +// Most doors will never be deconstructed over the course of a round, +// so as an optimization defer the creation of electronics until +// the airlock is deconstructed +/obj/machinery/door/airlock/proc/create_electronics() + //create new electronics + if (secured_wires) + src.electronics = new/obj/item/weapon/airlock_electronics/secure( src.loc ) + else + src.electronics = new/obj/item/weapon/airlock_electronics( src.loc ) + + //update the electronics to match the door's access + if(LAZYLEN(req_access)) + electronics.conf_access = req_access + else if (LAZYLEN(req_one_access)) + electronics.conf_access = req_one_access + electronics.one_access = 1 + +/obj/machinery/door/airlock/emp_act(var/severity) + if(prob(40/severity)) + var/duration = world.time + SecondsToTicks(30 / severity) + if(duration > electrified_until) + electrify(duration) + ..() + +/obj/machinery/door/airlock/power_change() //putting this is obj/machinery/door itself makes non-airlock doors turn invisible for some reason + ..() + if(stat & NOPOWER) + // If we lost power, disable electrification + // Keeping door lights on, runs on internal battery or something. + electrified_until = 0 + update_icon() + +/obj/machinery/door/airlock/proc/prison_open() + if(arePowerSystemsOn()) + src.unlock() + src.open() + src.lock() + return + + +/obj/machinery/door/airlock/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + // Old RCD code made it cost 10 units to decon an airlock. + // Now the new one costs ten "sheets". + return list( + RCD_VALUE_MODE = RCD_DECONSTRUCT, + RCD_VALUE_DELAY = 5 SECONDS, + RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 10 + ) + return FALSE + +/obj/machinery/door/airlock/rcd_act(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + to_chat(user, span("notice", "You deconstruct \the [src].")) + qdel(src) + return TRUE + return FALSE +>>>>>>> 489d5fc33c... Merge pull request #11594 from KillianKirilenko/kk-knockknock diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index e7799fcf8f..cfcf280020 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -12,6 +12,8 @@ var/isSwitchingStates = 0 var/hardness = 1 var/oreAmount = 7 + var/knock_sound = 'sound/machines/door/knock_glass.ogg' + var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' /obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) TemperatureAct(exposed_temperature) @@ -68,6 +70,20 @@ /obj/structure/simple_door/attack_hand(mob/user as mob) return TryToSwitchState(user) +/obj/structure/simple_door/AltClick(mob/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(!Adjacent(user)) + return + else if(user.a_intent == I_HURT) + src.visible_message("[user] hammers on \the [src]!", "Someone hammers loudly on \the [src]!") + src.add_fingerprint(user) + playsound(src, knock_hammer_sound, 50, 0, 3) + else + src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].") + src.add_fingerprint(user) + playsound(src, knock_sound, 50, 0, 3) + return + /obj/structure/simple_door/CanPass(atom/movable/mover, turf/target) if(istype(mover, /obj/effect/beam)) return !opacity @@ -225,6 +241,7 @@ /obj/structure/simple_door/wood/Initialize(mapload,var/material_name) ..(mapload, material_name || MAT_WOOD) + knock_sound = 'sound/machines/door/knock_wood.wav' /obj/structure/simple_door/sifwood/Initialize(mapload,var/material_name) ..(mapload, material_name || MAT_SIFWOOD) diff --git a/sound/machines/door/knock_glass.ogg b/sound/machines/door/knock_glass.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8878dda801382c07195c67bdc1e316d4be4ea088 GIT binary patch literal 7682 zcmeHLdpMNc+J9zH2n|u=RD;2cB%>iDF^QSckUq@;XGwA;cJ!aXv?h5K%&2 z#~gATkxnuyNm3-?Tch@V_x@+^>$~>;{`=Ooo@eg0*8SY~TEDgK!y3~wXUriu^t&Vq z{~{JkET>`HVgBd5?P)%oF1W$%-z-0V{oaR}a=!d~;d}`Lt!p3i1`)f~{;4!^{SqV% z#*foHT~tiH&!F6B_D9#nqev((ULRIMm>Z?1wV8I zf)KGe$XIy9<=b!wEQvcClkf(UAg4ulAZ=Y|0eB-IsL@lDlqA}57j4|HY&>9KW*I!B zVQIPGcZ$WSD7>Q>N2(sND78QW^;p0W$t!q*2SNde3^9)pTz`WHvd3seD^#(Ad=kQ) zwOo{1*uI{!Lu`_V5}Tdw)1#%B=F_SO77C^~PvPteLLxAeh0xavVl5Isko+cd0xeIJ755hJ; z>53Nx`VcsMfARf-2dq~gsd3q>2t~}w3qu}?rnTp99M5Y;y9jvm7aQf}B~d@17#6K0 zY{svZ^FokJgea9L6Z!iUEpr)Z-;OOxzr?RpoSz%3)~Q_CrS^pLnl7*G(f+9VC*q($ zX_bgE<=)V7htk@q^s_?!R_feLVlT0T85$Zl)?5`QS+m3*&nhlzSG&VwR?s|E{Q02JjRBtUQF^ zfgo+;UBjb0Lm8KjhPxmf5k9kt<|g)tT>CElE`2`)fmYwvh1*cdK8}mH@#pb9QKI4f z0EV61p-%;%a5Riw$f@gaK%sAGp$f5}{%S%fnnZStEU3TR|IrW7l8J>gF~6NKN0CcO z=uPHtp+F0&L>9$V`j3?S{ut;2iZcIE*G*<9rsVIs6o4XBiNb$F*Z<4-e+2$D0-?Y& zLL0%eDd%aT7)&o63T^UI-ULBXq<&=x@b;H{*sN5Fvl(CjVOIzZ%s8(n7f) zy-+@i~AoBLuvmh6`C)=!i=@8A992!$07ICO|59LDcRI0*Zb5Y8c=v*2<@S>g OX! zZtoQeoEsdHfk7LL?kbzk>-26pG+<%r!kmi9#l#lUN|f;3^XtwYZz;xP2XH!zOG@}D z^Ezgt98Swf4kr_EmP|kX8|RRpOl+nfCu!1meheZ;IXg-$wrEk_$%PrJ1gAAAZwPN)3a*eJ*6~3>Vni) z6t~=Jm&dnlJ7*2tkQvxA++l1X!|pHvBZH46@nRzmlgY&?7Wzc_0;&>kalQrFumHr{ zP85SmRT7J^AS)F>P&wB|@No7Sz`h+M1JTqtTx&Xmifv8zF(DU=I)F^2z%dRtm7Yvh zYrWyqLjrjg$RhF?ah#NcN?uPYKp^L279g7QW`NJI1%O2nf^Ig#AXKAaQa7LBC4RvZ zd{90dLQ1t&004AMMb%0D_+9`doD=3CN>u!&ly<9_|8tS6C9u%Plz7s z16camtz-M4PL*P2VL9Y?s=b1Pf2W$;7#=j8#BY|AbOH!j>xjajSA0T{9*@TD1Wzh{ z>+$t7!v%$+xMd1N31n;pgUX97K!||Q_6npRwghnu-tiEG0JBG-3oe zR%c5I(YPse6~n&wh7W>F+f|*3YeO;UR#)m7JtR`;J!GJgbRL~*j9YkNjFm4KvHw_K zlt@U})jAT`i!0cA^48tO(+=djLr90&`bDI}t-Hf70%vj6N6#kkK(-p1kRE!ZT>CMp z@3<|>^ba3|qV zz(zJogHgT$1|2uWxu*b%s=ZEO3V=moGr|$Td?To25*Cc|=0qH!VzH5&EENbK%NMLu z2r{uC9~@hbBHjW9gUT<@0H5XL)4@3f)8Ng?x1cH&Geiiy@)2}08Jl83<_HB|HjLwC zg?;H}PQn^Y&(|<;)_>(>;v1zI*Cay|y$7wLq#{I5Zb~{RU=^3)9j8ymIws;;^Hb=A zHe~*wy>U*sXkc$`${L| z2(5tWS5e7+0&Vm4Vuc|tAtF#)Hy+W03z^)19kW;G^#;XvqAA+oA_80(4|D;7^e~~( z(av`szk$mgbO_IDp5QXz3_|75D=rA)gUQM=Yx%EiiW7(zOc1)d8El6hColl()q~*h zU+EgB4TrB^g}ImAID-(xxe9YeFF2Kq%gV~gCWIx%21M?VR6r-54+{?o^bQLMi;Rhk zx*Qb~7~t>peDI{)OYod^8rEn&112$J0q37536j=c|wmytV2YI z)2I3}q$geQhv{;puv{GR0#co#T~w(oj8($oTMazgK;$3tO?_yPA|_!`O}B zkl?gUHf|TP9(9`}2$v-}q~8`CeM!*PdKr{A^)vS1OnK(ba2{dw>cf!gV@rqa?oYCr!>CUAhGIFglW*tH(T2q2sR+v9G>^99&AWdHQx_|jM=PhS#tqe524~8>24WO7_4B?@zJDI%)3y?{Rx@31;%dDl z(dyMR2A4D9;Y}vW4%0myXf?>5C_E-w*S1L&BS)`&a9r7SvJot zE-qhO9bEDoa5S$R(%HYJd#@#k+(wbu@OUfJPbFK)7EvReCoknc33IZN=x!|j;b z?#iD1cZ@}^;?mA72brDqxUlBFjFcm$#xI@8K5;}?6s~K%TBpNx_@t_Qv**(E7XelG zCWe5?bYzGudVOb-SW?|avT5<{@rkVHcHUFs&mnq{) zYZEh>wl-(H*WBvA7A*ak|F+`MVAEssG0^Rgv953X8g%SF>|p5kBizd(yldeW+pZ}+ zx>L4QCOchPm`ZJ7eH)VHW>m@%V$XTAQG$((Gl~QPX95Oq_>AW+poI;$@QYa@ExSl2 z+$5aV)^5CtZ`IStR=(BDpwmX5lwW3ykk$g8v=DZ6sW#wY_2LWWVZoXGT!abc;}wjqh>( zx{ta=S#=TvM+b!5q^^xmeKkMkFzPxQ79XC~o|sZWElUxUmyuWgk`)~t4O|iqV-;I1 z*TkLUV29qS`T8lzL((-dAThvo)UY)t=Sz<V@VDG9iPpjHgxHg78rFxIN`UZ$^GbsFb? z^u1`=A1OHxnH^C;k5a6;uoBILSOG(-bWcJs%~NYz>yws7J+|7keJ=qQ&O*MgbQ@&B@3Y`-s*ey zDpsgb*gehZ8Z*eXCnGyg@B1-G%0DmtFsni#BjlXFVH<*dvAXg^?@#S_$~NqS$8;Mc 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 literal 0 HcmV?d00001 diff --git a/sound/machines/door/knock_wood.wav b/sound/machines/door/knock_wood.wav new file mode 100644 index 0000000000000000000000000000000000000000..dae7b95b99557954cda51135aac706100cc81670 GIT binary patch literal 176780 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 z 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