diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index bb43c69b059..f505773b32a 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -21,10 +21,12 @@ /obj/machinery/door/airlock name = "airlock" - icon = 'icons/obj/doors/Doorint.dmi' + icon = 'icons/obj/doors/doorint.dmi' icon_state = "door_closed" - power_channel = ENVIRON - + autoclose = 1 + explosion_block = 1 + assemblytype = /obj/structure/door_assembly + normalspeed = 1 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. @@ -34,7 +36,6 @@ var/main_power_timer = null var/backup_power_timer = null var/spawnPowerRestoreRunning = 0 - var/welded = FALSE var/locked = 0 var/lights = 1 // bolt lights show by default var/datum/wires/airlock/wires = null @@ -43,16 +44,11 @@ var/obj/machinery/door/airlock/closeOther = null var/closeOtherId = null var/lockdownbyai = 0 - 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/frozen = 0 //special condition for airlocks that are frozen shut, this will look weird on not normal airlocks because of a lack of special overlays. - autoclose = 1 - explosion_block = 1 var/doorOpen = 'sound/machines/airlock_open.ogg' var/doorClose = 'sound/machines/airlock_close.ogg' var/doorDeni = 'sound/machines/DeniedBeep.ogg' // i'm thinkin' Deni's @@ -60,276 +56,8 @@ var/boltDown = 'sound/machines/BoltsDown.ogg' var/is_special = 0 -/obj/machinery/door/airlock/command - name = "Airlock" - icon = 'icons/obj/doors/Doorcom.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_com - -/obj/machinery/door/airlock/security - name = "Airlock" - icon = 'icons/obj/doors/Doorsec.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_sec - -/obj/machinery/door/airlock/engineering - name = "Airlock" - icon = 'icons/obj/doors/Dooreng.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_eng - -/obj/machinery/door/airlock/medical - name = "Airlock" - icon = 'icons/obj/doors/Doormed.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_med - -/obj/machinery/door/airlock/maintenance - name = "Maintenance Access" - icon = 'icons/obj/doors/Doormaint.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_mai - -/obj/machinery/door/airlock/external - name = "External Airlock" - icon = 'icons/obj/doors/Doorext.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_ext - doorOpen = 'sound/machines/airlock_ext_open.ogg' - doorClose = 'sound/machines/airlock_ext_close.ogg' - /obj/machinery/door/airlock/welded - welded = 1 - -/obj/machinery/door/airlock/glass - name = "Glass Airlock" - icon = 'icons/obj/doors/Doorglass.dmi' - opacity = 0 - glass = 1 - doorOpen = 'sound/machines/windowdoor.ogg' - doorClose = 'sound/machines/windowdoor.ogg' - -/obj/machinery/door/airlock/centcom - name = "Airlock" - icon = 'icons/obj/doors/Doorele.dmi' - opacity = 0 - -/obj/machinery/door/airlock/vault - name = "Vault" - icon = 'icons/obj/doors/vault.dmi' - opacity = 1 - assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites. - explosion_block = 2 - -/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' - opacity = 1 - assembly_type = /obj/structure/door_assembly/door_assembly_hatch - -/obj/machinery/door/airlock/hatch/gamma - name = "Gamma Level Hatch" - hackProof = 1 - aiControlDisabled = 1 - unacidable = 1 - is_special = 1 - -/obj/machinery/door/airlock/maintenance_hatch - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doorhatchmaint2.dmi' - opacity = 1 - assembly_type = /obj/structure/door_assembly/door_assembly_mhatch - -/obj/machinery/door/airlock/glass_command - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doorcomglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_com - glass = 1 - -/obj/machinery/door/airlock/glass_engineering - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doorengglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_eng - glass = 1 - -/obj/machinery/door/airlock/glass_security - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doorsecglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_sec - glass = 1 - -/obj/machinery/door/airlock/glass_medical - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doormedglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_med - glass = 1 - -/obj/machinery/door/airlock/mining - name = "Mining Airlock" - icon = 'icons/obj/doors/Doormining.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_min - -/obj/machinery/door/airlock/atmos - name = "Atmospherics Airlock" - icon = 'icons/obj/doors/Dooratmo.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_atmo - -/obj/machinery/door/airlock/research - name = "Airlock" - icon = 'icons/obj/doors/Doorresearch.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_research - -/obj/machinery/door/airlock/glass_research - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doorresearchglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_research - glass = 1 - -/obj/machinery/door/airlock/glass_mining - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Doorminingglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_min - glass = 1 - -/obj/machinery/door/airlock/glass_atmos - name = "Maintenance Hatch" - icon = 'icons/obj/doors/Dooratmoglass.dmi' - opacity = 0 - assembly_type = /obj/structure/door_assembly/door_assembly_atmo - glass = 1 - -/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/event_step = 20 - -/obj/machinery/door/airlock/uranium/New() - ..() - addtimer(src, "radiate", event_step) - -/obj/machinery/door/airlock/uranium/proc/radiate() - if(prob(50)) - for(var/mob/living/L in range (3,src)) - L.apply_effect(15,IRRADIATE,0) - addtimer(src, "radiate", event_step) - -/obj/machinery/door/airlock/plasma - name = "plasma airlock" - desc = "No way this can end badly." - icon = 'icons/obj/doors/Doorplasma.dmi' - mineral = "plasma" - -/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/obj/machinery/door/airlock/plasma/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/obj/machinery/door/airlock/plasma/proc/PlasmaBurn(temperature) - atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 500) - new/obj/structure/door_assembly( src.loc ) - qdel(src) - -/obj/machinery/door/airlock/plasma/BlockSuperconductivity() //we don't stop the heat~ - return 0 - -/obj/machinery/door/airlock/bananium - name = "Bananium Airlock" - icon = 'icons/obj/doors/Doorbananium.dmi' - mineral = "bananium" - doorOpen = 'sound/items/bikehorn.ogg' - doorClose = 'sound/items/bikehorn.ogg' - -/obj/machinery/door/airlock/tranquillite - name = "Tranquillite Airlock" - icon = 'icons/obj/doors/Doorfreezer.dmi' - mineral = "tranquillite" - doorOpen = null // it's silent! - doorClose = null - doorDeni = null - boltUp = null - boltDown = null - -/obj/machinery/door/airlock/sandstone - name = "Sandstone Airlock" - icon = 'icons/obj/doors/Doorsand.dmi' - mineral = "sandstone" - -/obj/machinery/door/airlock/science - name = "Airlock" - icon = 'icons/obj/doors/Doorsci.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_science - -/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 - -/obj/machinery/door/airlock/highsecurity - name = "High Tech Security Airlock" - icon = 'icons/obj/doors/hightechsecurity.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity - explosion_block = 2 - -/obj/machinery/door/airlock/highsecurity/red - name = "Secure Armory Airlock" - hackProof = 1 - aiControlDisabled = 1 - -/obj/machinery/door/airlock/shuttle - name = "shuttle airlock" - icon = 'icons/obj/doors/doorshuttle.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_shuttle - -/obj/machinery/door/airlock/alien - name = "Alien Airlock" - desc = "A mysterious alien airlock with a complicated opening mechanism." - hackProof = 1 - icon = 'icons/obj/doors/Doorplasma.dmi' - is_special = 1 - -/obj/machinery/door/airlock/alien/bumpopen(mob/living/user as mob) - if(istype(user,/mob/living/carbon/alien) || isrobot(user) || isAI(user)) - ..(user) - else - to_chat(user, "You do not know how to operate this airlock's mechanism.") - return - -/obj/machinery/door/airlock/alien/attackby(C as obj, mob/user as mob, params) - if(isalien(user) || isrobot(user) || isAI(user)) - ..(C, user) - else - to_chat(user, "You do not know how to operate this airlock's mechanism.") - return - - + welded = TRUE /* 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. @@ -345,6 +73,19 @@ About the new airlock wires panel: */ // You can find code for the airlock wires in the wire datum folder. +/obj/machinery/door/airlock/New() + ..() + wires = new(src) + +/obj/machinery/door/airlock/initialize() + . = ..() + if(closeOtherId != null) + for(var/obj/machinery/door/airlock/A in airlocks) + if(A.closeOtherId == closeOtherId && A != src) + closeOther = A + break + if(welded) + update_icon() /obj/machinery/door/airlock/Destroy() QDEL_NULL(electronics) @@ -360,16 +101,16 @@ About the new airlock wires panel: electrified_timer = null return ..() -/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite +/obj/machinery/door/airlock/bumpopen(mob/living/user) //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 + if(isElectrified()) + if(!justzap) + if(shock(user, 100)) + justzap = 1 spawn (10) - src.justzap = 0 + justzap = 0 return - else /*if(src.justzap)*/ + else /*if(justzap)*/ return else if(user.hallucination > 50 && prob(10) && !operating) to_chat(user, "You feel a powerful shock course through your body!") @@ -378,10 +119,9 @@ About the new airlock wires panel: return ..(user) -/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user as mob) +/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user) ..(user) - /obj/machinery/door/airlock/autoclose() autoclose_timer = 0 if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose) @@ -389,27 +129,27 @@ About the new airlock wires panel: return /obj/machinery/door/airlock/proc/isElectrified() - if(src.electrified_until != 0) + if(electrified_until != 0) return 1 return 0 -/obj/machinery/door/airlock/proc/isWireCut(var/wireIndex) +/obj/machinery/door/airlock/proc/isWireCut(wireIndex) // You can find the wires in the datum folder. return wires.IsIndexCut(wireIndex) /obj/machinery/door/airlock/proc/canAIControl() - return ((src.aiControlDisabled!=1) && (!src.isAllPowerLoss())); + return ((aiControlDisabled!=1) && (!isAllPowerLoss())); /obj/machinery/door/airlock/proc/canAIHack() - return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss())); + return ((aiControlDisabled==1) && (!hackProof) && (!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) + return (main_power_lost_until==0 || backup_power_lost_until==0) /obj/machinery/door/airlock/requiresID() - return !(src.isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner) + return !(isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner) /obj/machinery/door/airlock/proc/isAllPowerLoss() if(stat & (NOPOWER|BROKEN)) @@ -419,10 +159,10 @@ About the new airlock wires panel: return 0 /obj/machinery/door/airlock/proc/mainPowerCablesCut() - return src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1) + return isWireCut(AIRLOCK_WIRE_MAIN_POWER1) /obj/machinery/door/airlock/proc/backupPowerCablesCut() - return src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1) + return isWireCut(AIRLOCK_WIRE_BACKUP_POWER1) /obj/machinery/door/airlock/proc/loseMainPower() main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) @@ -465,7 +205,7 @@ About the new airlock wires panel: backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0 update_icon() -/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0) +/obj/machinery/door/airlock/proc/electrify(duration, feedback = 0) if(electrified_timer) deltimer(electrified_timer) electrified_timer = null @@ -511,7 +251,8 @@ About the new airlock wires panel: return 0 /obj/machinery/door/airlock/update_icon() - if(overlays) overlays.Cut() + if(overlays) + overlays.Cut() overlays = list() if(emergency && arePowerSystemsOn()) overlays += image('icons/obj/doors/doorint.dmi', "elights") @@ -520,24 +261,21 @@ About the new airlock wires panel: icon_state = "door_locked" else icon_state = "door_closed" - if(p_open || welded || frozen) + if(p_open || welded) if(p_open) overlays += image(icon, "panel_open") if(welded) overlays += image(icon, "welded") - if(frozen) - overlays += image(icon, "frozen") - else icon_state = "door_open" return - /obj/machinery/door/airlock/do_animate(animation) switch(animation) if("opening") - if(overlays) overlays.Cut() + if(overlays) + overlays.Cut() if(p_open) spawn(2) // The only work around that works. Downside is that the door will be gone for a millisecond. flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking @@ -546,7 +284,8 @@ About the new airlock wires panel: flick("door_opening", src)//[stat ? "_stat":] update_icon() if("closing") - if(overlays) overlays.Cut() + if(overlays) + overlays.Cut() if(p_open) spawn(2) flick("o_door_closing", src) @@ -558,11 +297,16 @@ About the new airlock wires panel: if(density) flick("door_spark", src) if("deny") - if(density && src.arePowerSystemsOn()) + if(density && arePowerSystemsOn()) playsound(src, doorDeni, 50, 0, 3) flick("door_deny", src) return +/obj/machinery/door/airlock/examine(mob/user) + ..() + if(emagged) + to_chat(user, "Its access panel is smoking slightly.") + /obj/machinery/door/airlock/attack_ghost(mob/user) if(p_open) wires.Interact(user) @@ -571,7 +315,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/attack_ai(mob/user) ui_interact(user) -/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls - [src]", 600, 375) @@ -598,53 +342,53 @@ About the new airlock wires panel: data["commands"] = commands return data -/obj/machinery/door/airlock/proc/hack(mob/user as mob) - if(src.aiHacking==0) - src.aiHacking=1 +/obj/machinery/door/airlock/proc/hack(mob/user) + if(aiHacking==0) + 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()) + if(canAIControl()) to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - src.aiHacking=0 + aiHacking=0 return - else if(!src.canAIHack(user)) + else if(!canAIHack(user)) to_chat(user, "We've lost our connection! Unable to hack airlock.") - src.aiHacking=0 + 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()) + if(canAIControl()) to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - src.aiHacking=0 + aiHacking=0 return - else if(!src.canAIHack(user)) + else if(!canAIHack(user)) to_chat(user, "We've lost our connection! Unable to hack airlock.") - src.aiHacking=0 + aiHacking=0 return to_chat(user, "Upload access confirmed. Loading control program into airlock software.") sleep(170) - if(src.canAIControl()) + if(canAIControl()) to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - src.aiHacking=0 + aiHacking=0 return - else if(!src.canAIHack(user)) + else if(!canAIHack(user)) to_chat(user, "We've lost our connection! Unable to hack airlock.") - src.aiHacking=0 + aiHacking=0 return to_chat(user, "Transfer complete. Forcing airlock to execute program.") sleep(50) //disable blocked control - src.aiControlDisabled = 2 + aiControlDisabled = 2 to_chat(user, "Receiving control information from airlock.") sleep(10) //bring up airlock dialog - src.aiHacking = 0 + aiHacking = 0 if(user) - src.attack_ai(user) + attack_ai(user) /obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0) if(isElectrified() && density && istype(mover, /obj/item)) @@ -655,16 +399,16 @@ About the new airlock wires panel: s.start() return ..() -/obj/machinery/door/airlock/attack_hand(mob/user as mob) - if(!istype(user, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 100)) +/obj/machinery/door/airlock/attack_hand(mob/user) + if(!issilicon(user)) + if(isElectrified()) + if(shock(user, 100)) return - if(ishuman(user) && prob(40) && src.density) + if(ishuman(user) && prob(40) && density) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 60) - playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) + playsound(loc, 'sound/effects/bang.ogg', 25, 1) if(!istype(H.head, /obj/item/clothing/head/helmet)) visible_message("[user] headbutts the airlock.") var/obj/item/organ/external/affecting = H.get_organ("head") @@ -676,13 +420,13 @@ About the new airlock wires panel: visible_message("[user] headbutts the airlock. Good thing they're wearing a helmet.") return - if(src.p_open) + if(p_open) wires.Interact(user) else ..(user) return -/obj/machinery/door/airlock/CanUseTopic(var/mob/user) +/obj/machinery/door/airlock/CanUseTopic(mob/user) if(!issilicon(user) && !isobserver(user)) return STATUS_CLOSE @@ -701,14 +445,14 @@ About the new airlock wires panel: return ..() -/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0) +/obj/machinery/door/airlock/Topic(href, href_list, nowindow = 0) if(..()) return 1 var/activate = text2num(href_list["activate"]) switch(href_list["command"]) if("idscan") - if(src.isWireCut(AIRLOCK_WIRE_IDSCAN)) + if(isWireCut(AIRLOCK_WIRE_IDSCAN)) to_chat(usr, "The IdScan wire has been cut - IdScan feature permanently disabled.") else if(activate && aiDisabledIdScanner) aiDisabledIdScanner = 0 @@ -798,9 +542,9 @@ About the new airlock wires panel: update_icon() return 1 -/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob, params) +/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params) // to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) - if(!istype(usr, /mob/living/silicon)) + if(!issilicon(usr)) if(isElectrified()) if(shock(user, 75)) return @@ -808,11 +552,9 @@ About the new airlock wires panel: return add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !operating && density)) + if((iswelder(C) && !operating && density)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0,user)) - if(frozen) - frozen = 0 if(!welded) welded = 1 else @@ -821,31 +563,33 @@ About the new airlock wires panel: return else return - else if(istype(C, /obj/item/weapon/screwdriver)) - p_open = !( p_open ) + else if(isscrewdriver(C)) + p_open = !p_open + to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the airlock.") + playsound(loc, C.usesound, 50, 1) update_icon() - else if(istype(C, /obj/item/weapon/wirecutters)) + else if(iswirecutter(C)) return attack_hand(user) - else if(istype(C, /obj/item/device/multitool)) + else if(ismultitool(C)) return attack_hand(user) else if(istype(C, /obj/item/device/assembly/signaler)) return 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(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe)) + else if(iscrowbar(C) || istype(C, /obj/item/weapon/twohanded/fireaxe)) var/beingcrowbarred = null - if(istype(C, /obj/item/weapon/crowbar) ) + if(iscrowbar(C)) beingcrowbarred = 1 //derp, Agouri else beingcrowbarred = 0 - if( beingcrowbarred && p_open && (emagged || (density && welded && (!operating || emagged) && !arePowerSystemsOn() && !locked)) ) + if(beingcrowbarred && p_open && (emagged || (density && welded && (!operating || emagged) && !arePowerSystemsOn() && !locked))) playsound(loc, C.usesound, 100, 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, target = src)) to_chat(user, "You removed the airlock electronics!") - var/obj/structure/door_assembly/da = new assembly_type(loc) + var/obj/structure/door_assembly/da = new assemblytype(loc) da.heat_proof_finished = heat_proof //tracks whether there's rglass in da.anchored = 1 if(mineral) @@ -859,7 +603,7 @@ About the new airlock wires panel: var/obj/item/weapon/airlock_electronics/ae if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( loc ) + ae = new/obj/item/weapon/airlock_electronics(loc) if(!req_access) check_access() if(req_access.len) @@ -906,30 +650,34 @@ About the new airlock wires panel: 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( !welded && !operating ) + else if(!welded && !operating) if(density) - if(beingcrowbarred == 0) //being fireaxe'd + if(!beingcrowbarred) //being fireaxe'd var/obj/item/weapon/twohanded/fireaxe/F = C if(F.wielded) - spawn(0) open(1) + spawn(0) + open(1) else to_chat(user, "You need to be wielding \the [C] to do that.") else - spawn(0) open(1) + spawn(0) + open(1) else - if(beingcrowbarred == 0) + if(!beingcrowbarred) var/obj/item/weapon/twohanded/fireaxe/F = C if(F.wielded) - spawn(0) close(1) + spawn(0) + close(1) else to_chat(user, "You need to be wielding \the [C] to do that.") else - spawn(0) close(1) + spawn(0) + close(1) else ..() return -/obj/machinery/door/airlock/plasma/attackby(C as obj, mob/user as mob, params) +/obj/machinery/door/airlock/plasma/attackby(obj/C, mob/user, params) if(is_hot(C) > 300) message_admins("Plasma airlock ignited by [key_name_admin(user)] in ([x],[y],[z] - JMP)") log_game("Plasma wall ignited by [key_name(user)] in ([x],[y],[z])") @@ -937,11 +685,63 @@ About the new airlock wires panel: ignite(is_hot(C)) ..() -/obj/machinery/door/airlock/open(var/forced=0) +/obj/machinery/door/airlock/hatch/gamma/attackby(obj/C, mob/user, params) +// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) + if(!issilicon(user)) + if(isElectrified()) + if(shock(user, 75)) + return + if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) + return + + if(istype(C, /obj/item/weapon/grenade/plastic/c4)) + to_chat(user, "The hatch is coated with a product that prevents the shaped charge from sticking!") + return + + if(istype(C, /obj/item/mecha_parts/mecha_equipment/rcd) || istype(C, /obj/item/weapon/rcd)) + to_chat(user, "The hatch is made of an advanced compound that cannot be deconstructed using an RCD.") + return + + add_fingerprint(user) + if((iswelder(C) && !operating && density)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(0,user)) + if(!welded) + welded = 1 + else + welded = null + update_icon() + return + else + return + +/obj/machinery/door/airlock/highsecurity/red/attackby(obj/C, mob/user, params) +// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) + if(!issilicon(user)) + if(isElectrified()) + if(shock(user, 75)) + return + if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) + return + + add_fingerprint(user) + if((iswelder(C) && !operating && density)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(0,user)) + if(!welded) + welded = 1 + else + welded = null + update_icon() + return + else + return + +/obj/machinery/door/airlock/open(forced=0) if(operating || welded || locked || emagged) return 0 if(!forced) - if( !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR) ) + if(!arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) return 0 use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people if(forced) @@ -952,19 +752,19 @@ About the new airlock wires panel: closeOther.close() return ..() -/obj/machinery/door/airlock/close(var/forced=0, var/override = 0) +/obj/machinery/door/airlock/close(forced=0, override = 0) if((operating & !override) || welded || locked || emagged) return if(!forced) //despite the name, this wire is for general door control. //Bolts are already covered by the check for locked, above - if( !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR) ) + if(!arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) return if(safe) for(var/turf/turf in locs) if(locate(/mob/living) in turf) // playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete - spawn (60) + spawn(60) autoclose() return @@ -982,11 +782,13 @@ About the new airlock wires panel: operating = 1 do_animate("closing") layer = 3.1 - if(!override) sleep(5) + if(!override) + sleep(5) density = 1 if(!safe) crush() - if(!override) sleep(5) + if(!override) + sleep(5) update_icon() if(visible && !glass) set_opacity(1) @@ -999,107 +801,36 @@ About the new airlock wires panel: return -/obj/machinery/door/airlock/proc/lock(var/forced=0) +/obj/machinery/door/airlock/proc/lock(forced=0) if(locked) return 0 - if(operating && !forced) return 0 + if(operating && !forced) + return 0 locked = 1 playsound(src, boltDown, 30, 0, 3) update_icon() return 1 -/obj/machinery/door/airlock/proc/unlock(var/forced=0) +/obj/machinery/door/airlock/proc/unlock(forced=0) if(!locked) return if(!forced) - if(operating || !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return + if(operating || !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) + return locked = 0 playsound(src,boltUp, 30, 0, 3) update_icon() return 1 -/obj/machinery/door/airlock/New() - ..() - wires = new(src) - -/obj/machinery/door/airlock/initialize() - . = ..() - if(closeOtherId != null) - for(var/obj/machinery/door/airlock/A in airlocks) - if(A.closeOtherId == closeOtherId && A != src) - closeOther = A - break - if(frozen) - welded = TRUE - if(welded) - update_icon() - -/obj/machinery/door/airlock/hatch/gamma/attackby(C as obj, mob/user as mob, params) -// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) - if(!istype(usr, /mob/living/silicon)) - if(isElectrified()) - if(shock(user, 75)) - return - if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) - return - - if(istype(C, /obj/item/weapon/grenade/plastic/c4)) - to_chat(user, "The hatch is coated with a product that prevents the shaped charge from sticking!") - return - - if(istype(C, /obj/item/mecha_parts/mecha_equipment/rcd) || istype(C, /obj/item/weapon/rcd)) - to_chat(user, "The hatch is made of an advanced compound that cannot be deconstructed using an RCD.") - return - - add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !operating && density)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(0,user)) - if(frozen) - frozen = 0 - if(!welded) - welded = 1 - else - welded = null - update_icon() - return - else - return - - -/obj/machinery/door/airlock/highsecurity/red/attackby(C as obj, mob/user as mob, params) -// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) - if(!istype(usr, /mob/living/silicon)) - if(isElectrified()) - if(shock(user, 75)) - return - if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) - return - - add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !operating && density)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(0,user)) - if(frozen) - frozen = 0 - if(!welded) - welded = 1 - else - welded = null - update_icon() - return - else - return - -/obj/machinery/door/airlock/CanAStarPass(var/obj/item/weapon/card/id/ID) +/obj/machinery/door/airlock/CanAStarPass(obj/item/weapon/card/id/ID) //Airlock is passable if it is open (!density), bot has access, and is not bolted shut) return !density || (check_access(ID) && !locked && arePowerSystemsOn()) -/obj/machinery/door/airlock/emp_act(var/severity) +/obj/machinery/door/airlock/emp_act(severity) if(prob(40/severity)) var/duration = world.time + SecondsToTicks(30 / severity) if(duration > electrified_until) @@ -1133,7 +864,6 @@ About the new airlock wires panel: if(origin) shockedby += "\[[time_stamp()]\][origin](ckey:[origin.ckey])" - /obj/machinery/door/airlock/disable_lockdown() // Must be powered and have working AI wire. if(canAIControl(src) && !stat) @@ -1144,50 +874,6 @@ About the new airlock wires panel: /obj/machinery/door/airlock/narsie_act() var/turf/T = get_turf(src) - if(prob(20)) - new/obj/machinery/door/airlock/cult(T) - qdel(src) - - - -////////////////////////////////// -/* - Cult Airlocks -*/ - -/obj/machinery/door/airlock/cult - name = "cult airlock" - icon = 'icons/obj/doors/doorcult.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_cult - hackProof = 1 - aiControlDisabled = 1 - var/friendly = FALSE - -/obj/machinery/door/airlock/cult/New() - ..() - -/obj/machinery/door/airlock/cult/canAIControl(mob/user) - return (iscultist(user)) - -/obj/machinery/door/airlock/cult/allowed(mob/M) - if(!density) - return 1 - if(friendly || \ - iscultist(M) || \ - istype(M, /mob/living/simple_animal/shade) || \ - istype(M, /mob/living/simple_animal/construct)) - return 1 - else - var/atom/throwtarget - throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(M, src))) - M << pick(sound('sound/hallucinations/turn_around1.ogg',0,1,50), sound('sound/hallucinations/turn_around2.ogg',0,1,50)) - M.Weaken(2) - spawn(0) - M.throw_at(throwtarget, 5, 1,src) - return 0 - -/obj/machinery/door/airlock/cult/narsie_act() - return - -/obj/machinery/door/airlock/cult/friendly - friendly = TRUE + var/obj/machinery/door/airlock/cult/A = new(T) + A.name = name + qdel(src) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 17ebdf96ce2..cc7da319ddd 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -1,31 +1,34 @@ #define AIRLOCK_CONTROL_RANGE 22 // This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access) -obj/machinery/door/airlock +/obj/machinery/door/airlock var/id_tag var/frequency var/shockedby = list() var/datum/radio_frequency/radio_connection var/cur_command = null //the command the door is currently attempting to complete -obj/machinery/door/airlock/process() +/obj/machinery/door/airlock/process() if(arePowerSystemsOn() && cur_command) execute_current_command() else return PROCESS_KILL -obj/machinery/door/airlock/receive_signal(datum/signal/signal) - if(!arePowerSystemsOn()) return //no power +/obj/machinery/door/airlock/receive_signal(datum/signal/signal) + if(!arePowerSystemsOn()) + return //no power - if(!signal || signal.encryption) return + if(!signal || signal.encryption) + return - if(id_tag != signal.data["tag"] || !signal.data["command"]) return + if(id_tag != signal.data["tag"] || !signal.data["command"]) + return cur_command = signal.data["command"] spawn() execute_current_command() -obj/machinery/door/airlock/proc/execute_current_command() +/obj/machinery/door/airlock/proc/execute_current_command() if(operating || emagged) return //emagged or busy doing something else @@ -39,7 +42,7 @@ obj/machinery/door/airlock/proc/execute_current_command() if(!(src in machine_processing)) machine_processing += src -obj/machinery/door/airlock/proc/do_command(var/command) +/obj/machinery/door/airlock/proc/do_command(command) switch(command) if("open") open() @@ -70,7 +73,7 @@ obj/machinery/door/airlock/proc/do_command(var/command) send_status() -obj/machinery/door/airlock/proc/command_completed(var/command) +/obj/machinery/door/airlock/proc/command_completed(command) switch(command) if("open") return (!density) @@ -92,7 +95,7 @@ obj/machinery/door/airlock/proc/command_completed(var/command) return 1 //Unknown command. Just assume it's completed. -obj/machinery/door/airlock/proc/send_status(var/bumped = 0) +/obj/machinery/door/airlock/proc/send_status(bumped = 0) if(radio_connection) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal @@ -107,33 +110,29 @@ obj/machinery/door/airlock/proc/send_status(var/bumped = 0) radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) - -obj/machinery/door/airlock/open(surpress_send) +/obj/machinery/door/airlock/open(surpress_send) . = ..() if(!surpress_send) send_status() - -obj/machinery/door/airlock/close(surpress_send) +/obj/machinery/door/airlock/close(surpress_send) . = ..() if(!surpress_send) send_status() - -obj/machinery/door/airlock/Bumped(atom/AM) +/obj/machinery/door/airlock/Bumped(atom/AM) ..(AM) if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM - if(density && radio_connection && mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) + if(density && radio_connection && mecha.occupant && (allowed(mecha.occupant) || check_access_list(mecha.operation_req_access))) send_status(1) return -obj/machinery/door/airlock/proc/set_frequency(new_frequency) +/obj/machinery/door/airlock/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) if(new_frequency) frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) - -obj/machinery/door/airlock/initialize() +/obj/machinery/door/airlock/initialize() ..() if(frequency) set_frequency(frequency) @@ -141,20 +140,16 @@ obj/machinery/door/airlock/initialize() update_icon() -obj/machinery/door/airlock/New() +/obj/machinery/door/airlock/New() ..() if(radio_controller) set_frequency(frequency) - - - -obj/machinery/airlock_sensor +/obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_sensor_off" name = "airlock sensor" - anchored = 1 power_channel = ENVIRON @@ -169,7 +164,7 @@ obj/machinery/airlock_sensor var/alert = 0 var/previousPressure -obj/machinery/airlock_sensor/update_icon() +/obj/machinery/airlock_sensor/update_icon() if(on) if(alert) icon_state = "airlock_sensor_alert" @@ -178,7 +173,7 @@ obj/machinery/airlock_sensor/update_icon() else icon_state = "airlock_sensor_off" -obj/machinery/airlock_sensor/attack_hand(mob/user) +/obj/machinery/airlock_sensor/attack_hand(mob/user) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.data["tag"] = master_tag @@ -187,7 +182,7 @@ obj/machinery/airlock_sensor/attack_hand(mob/user) radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) flick("airlock_sensor_cycle", src) -obj/machinery/airlock_sensor/process() +/obj/machinery/airlock_sensor/process() if(on) var/datum/gas_mixture/air_sample = return_air() var/pressure = round(air_sample.return_pressure(),0.1) @@ -207,32 +202,30 @@ obj/machinery/airlock_sensor/process() update_icon() -obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) +/obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) -obj/machinery/airlock_sensor/initialize() +/obj/machinery/airlock_sensor/initialize() ..() set_frequency(frequency) -obj/machinery/airlock_sensor/New() +/obj/machinery/airlock_sensor/New() ..() if(radio_controller) set_frequency(frequency) - -obj/machinery/airlock_sensor/airlock_interior +/obj/machinery/airlock_sensor/airlock_interior command = "cycle_interior" -obj/machinery/airlock_sensor/airlock_exterior +/obj/machinery/airlock_sensor/airlock_exterior command = "cycle_exterior" -obj/machinery/access_button +/obj/machinery/access_button icon = 'icons/obj/airlock_machines.dmi' icon_state = "access_button_standby" name = "access button" - anchored = 1 power_channel = ENVIRON @@ -244,21 +237,20 @@ obj/machinery/access_button var/on = 1 - -obj/machinery/access_button/update_icon() +/obj/machinery/access_button/update_icon() if(on) icon_state = "access_button_standby" else icon_state = "access_button_off" -obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob, params) +/obj/machinery/access_button/attackby(obj/item/I, mob/user, params) //Swiping ID on the access button if(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda)) attack_hand(user) return ..() -obj/machinery/access_button/attack_hand(mob/user) +/obj/machinery/access_button/attack_hand(mob/user) add_fingerprint(usr) if(!allowed(user)) to_chat(user, "Access Denied") @@ -272,28 +264,25 @@ obj/machinery/access_button/attack_hand(mob/user) radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) flick("access_button_cycle", src) - -obj/machinery/access_button/proc/set_frequency(new_frequency) +/obj/machinery/access_button/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) frequency = new_frequency radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) - -obj/machinery/access_button/initialize() +/obj/machinery/access_button/initialize() ..() set_frequency(frequency) - -obj/machinery/access_button/New() +/obj/machinery/access_button/New() ..() if(radio_controller) set_frequency(frequency) -obj/machinery/access_button/airlock_interior +/obj/machinery/access_button/airlock_interior frequency = 1379 command = "cycle_interior" -obj/machinery/access_button/airlock_exterior +/obj/machinery/access_button/airlock_exterior frequency = 1379 command = "cycle_exterior" diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 7c9f6d5b299..9881e58beb6 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -6,14 +6,13 @@ materials = list(MAT_METAL=50, MAT_GLASS=50) origin_tech = "engineering=2;programming=1" req_access = list(access_engine) - + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' var/list/conf_access = null var/one_access = 0 //if set to 1, door would receive req_one_access instead of req_access var/last_configurator = null var/locked = TRUE var/const/max_brain_damage = 60 // Maximum brain damage a mob can have until it can't use the electronics - toolspeed = 1 - usesound = 'sound/items/Deconstruct.ogg' /obj/item/weapon/airlock_electronics/attack_self(mob/user) if(!ishuman(user) && !isrobot(user)) @@ -89,7 +88,7 @@ attack_self(usr) -/obj/item/weapon/airlock_electronics/proc/toggle_access(var/access) +/obj/item/weapon/airlock_electronics/proc/toggle_access(access) if(access == "all") conf_access = null else diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm new file mode 100644 index 00000000000..08c16d77654 --- /dev/null +++ b/code/game/machinery/doors/airlock_types.dm @@ -0,0 +1,333 @@ +/* + Station Airlocks Regular +*/ + +/obj/machinery/door/airlock/command + icon = 'icons/obj/doors/Doorcom.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_com + +/obj/machinery/door/airlock/security + icon = 'icons/obj/doors/Doorsec.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_sec + +/obj/machinery/door/airlock/engineering + icon = 'icons/obj/doors/Dooreng.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_eng + +/obj/machinery/door/airlock/medical + icon = 'icons/obj/doors/Doormed.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_med + +/obj/machinery/door/airlock/maintenance + name = "maintenance access" + icon = 'icons/obj/doors/Doormaint.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_mai + +/obj/machinery/door/airlock/mining + name = "mining airlock" + icon = 'icons/obj/doors/Doormining.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_min + +/obj/machinery/door/airlock/atmos + name = "atmospherics airlock" + icon = 'icons/obj/doors/Dooratmo.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_atmo + +/obj/machinery/door/airlock/research + icon = 'icons/obj/doors/Doorresearch.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_research + +/obj/machinery/door/airlock/freezer + name = "freezer airlock" + icon = 'icons/obj/doors/Doorfreezer.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_fre + +/obj/machinery/door/airlock/science + icon = 'icons/obj/doors/Doorsci.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_science + +////////////////////////////////// +/* + Station Airlocks Glass +*/ + +/obj/machinery/door/airlock/glass_command + icon = 'icons/obj/doors/Doorcomglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_com + glass = 1 + +/obj/machinery/door/airlock/glass_engineering + icon = 'icons/obj/doors/Doorengglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_eng + glass = 1 + +/obj/machinery/door/airlock/glass_security + icon = 'icons/obj/doors/Doorsecglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_sec + glass = 1 + +/obj/machinery/door/airlock/glass_medical + icon = 'icons/obj/doors/Doormedglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_med + glass = 1 + +/obj/machinery/door/airlock/glass_research + icon = 'icons/obj/doors/Doorresearchglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_research + glass = 1 + +/obj/machinery/door/airlock/glass_mining + icon = 'icons/obj/doors/Doorminingglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_min + glass = 1 + +/obj/machinery/door/airlock/glass_atmos + icon = 'icons/obj/doors/Dooratmoglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_atmo + glass = 1 + +/obj/machinery/door/airlock/glass_science + icon = 'icons/obj/doors/Doorsciglass.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_science + glass = 1 + +////////////////////////////////// +/* + Station Airlocks Mineral +*/ + +/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/event_step = 20 + +/obj/machinery/door/airlock/uranium/New() + ..() + addtimer(src, "radiate", event_step) + +/obj/machinery/door/airlock/uranium/proc/radiate() + if(prob(50)) + for(var/mob/living/L in range (3,src)) + L.apply_effect(15,IRRADIATE,0) + addtimer(src, "radiate", event_step) + +/obj/machinery/door/airlock/plasma + name = "plasma airlock" + desc = "No way this can end badly." + icon = 'icons/obj/doors/Doorplasma.dmi' + mineral = "plasma" + +/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 300) + PlasmaBurn(exposed_temperature) + +/obj/machinery/door/airlock/plasma/proc/ignite(exposed_temperature) + if(exposed_temperature > 300) + PlasmaBurn(exposed_temperature) + +/obj/machinery/door/airlock/plasma/proc/PlasmaBurn(temperature) + atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 500) + new/obj/structure/door_assembly(loc) + qdel(src) + +/obj/machinery/door/airlock/plasma/BlockSuperconductivity() //we don't stop the heat~ + return 0 + +/obj/machinery/door/airlock/bananium + name = "bananium airlock" + icon = 'icons/obj/doors/Doorbananium.dmi' + mineral = "bananium" + doorOpen = 'sound/items/bikehorn.ogg' + doorClose = 'sound/items/bikehorn.ogg' + +/obj/machinery/door/airlock/tranquillite + name = "tranquillite airlock" + icon = 'icons/obj/doors/Doorfreezer.dmi' + mineral = "tranquillite" + doorOpen = null // it's silent! + doorClose = null + doorDeni = null + boltUp = null + boltDown = null + +/obj/machinery/door/airlock/sandstone + name = "sandstone airlock" + icon = 'icons/obj/doors/Doorsand.dmi' + mineral = "sandstone" + +////////////////////////////////// +/* + Station2 Airlocks +*/ + +/obj/machinery/door/airlock/glass + name = "glass airlock" + icon = 'icons/obj/doors/Doorglass.dmi' + opacity = 0 + glass = 1 + doorOpen = 'sound/machines/windowdoor.ogg' + doorClose = 'sound/machines/windowdoor.ogg' + +////////////////////////////////// +/* + External Airlocks +*/ + +/obj/machinery/door/airlock/external + name = "external airlock" + icon = 'icons/obj/doors/Doorext.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_ext + doorOpen = 'sound/machines/airlock_ext_open.ogg' + doorClose = 'sound/machines/airlock_ext_close.ogg' + +////////////////////////////////// +/* + CentCom Airlocks +*/ + +/obj/machinery/door/airlock/centcom + icon = 'icons/obj/doors/Doorele.dmi' + opacity = 0 + assemblytype = /obj/structure/door_assembly/door_assembly_centcom + +////////////////////////////////// +/* + Vault Airlocks +*/ + +/obj/machinery/door/airlock/vault + name = "vault door" + icon = 'icons/obj/doors/vault.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_vault + explosion_block = 2 + +////////////////////////////////// +/* + Hatch Airlocks +*/ + +/obj/machinery/door/airlock/hatch + name = "airtight hatch" + icon = 'icons/obj/doors/Doorhatchele.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_hatch + +/obj/machinery/door/airlock/hatch/gamma + name = "gamma level hatch" + hackProof = 1 + aiControlDisabled = 1 + unacidable = 1 + is_special = 1 + +/obj/machinery/door/airlock/maintenance_hatch + name = "maintenance hatch" + icon = 'icons/obj/doors/Doorhatchmaint2.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_mhatch + +////////////////////////////////// +/* + High Security Airlocks +*/ + +/obj/machinery/door/airlock/highsecurity + name = "high tech security airlock" + icon = 'icons/obj/doors/hightechsecurity.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity + explosion_block = 2 + +/obj/machinery/door/airlock/highsecurity/red + name = "secure armory airlock" + hackProof = 1 + aiControlDisabled = 1 + +////////////////////////////////// +/* + Shuttle Airlocks +*/ + +/obj/machinery/door/airlock/shuttle + name = "shuttle airlock" + icon = 'icons/obj/doors/doorshuttle.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_shuttle + +////////////////////////////////// +/* + Cult Airlocks +*/ + +/obj/machinery/door/airlock/cult + name = "cult airlock" + icon = 'icons/obj/doors/doorcult.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_cult + hackProof = 1 + aiControlDisabled = 1 + var/friendly = FALSE + +/obj/machinery/door/airlock/cult/New() + ..() + +/obj/machinery/door/airlock/cult/canAIControl(mob/user) + return (iscultist(user)) + +/obj/machinery/door/airlock/cult/allowed(mob/M) + if(!density) + return 1 + if(friendly || \ + iscultist(M) || \ + istype(M, /mob/living/simple_animal/shade) || \ + istype(M, /mob/living/simple_animal/construct)) + return 1 + else + var/atom/throwtarget + throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(M, src))) + M << pick(sound('sound/hallucinations/turn_around1.ogg',0,1,50), sound('sound/hallucinations/turn_around2.ogg',0,1,50)) + M.Weaken(2) + spawn(0) + M.throw_at(throwtarget, 5, 1,src) + return 0 + +/obj/machinery/door/airlock/cult/narsie_act() + return + +/obj/machinery/door/airlock/cult/friendly + friendly = TRUE + +////////////////////////////////// +/* + Misc Airlocks +*/ + +//Terribly sorry for the code doubling, but things go derpy otherwise. +/obj/machinery/door/airlock/multi_tile + width = 2 + +/obj/machinery/door/airlock/multi_tile/glass + name = "large glass airlock" + icon = 'icons/obj/doors/Door2x1glass.dmi' + opacity = 0 + glass = 1 + assemblytype = "obj/structure/door_assembly/multi_tile" diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index ba5497cdf60..839fb387ddb 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -1,13 +1,11 @@ /obj/machinery/door/airlock/alarmlock - - name = "Glass Alarm Airlock" + name = "glass alarm airlock" icon = 'icons/obj/doors/Doorglass.dmi' opacity = 0 glass = 1 - + autoclose = 0 var/datum/radio_frequency/air_connection var/air_frequency = 1437 - autoclose = 0 /obj/machinery/door/airlock/alarmlock/New() ..() @@ -25,7 +23,6 @@ air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) open() - /obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal) ..() if(stat & (NOPOWER|BROKEN)) @@ -43,4 +40,4 @@ close() if("minor", "clear") autoclose = 0 - open() \ No newline at end of file + open() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 39fa5e04037..5914d9b5d87 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -12,12 +12,12 @@ // Programmer: Veryinky ///////////////////////////////////////////////////////////////////////////////////////////////// /obj/machinery/door_timer - name = "Door Timer" + name = "door timer" icon = 'icons/obj/status_display.dmi' icon_state = "frame" desc = "A remote control for a door." req_access = list(access_brig) - anchored = 1.0 // can't pick it up + anchored = 1 // can't pick it up density = 0 // can walk through it. var/id = null // id of door it controls. var/releasetime = 0 // when world.timeofday reaches it - release the prisoner diff --git a/code/game/machinery/doors/checkForMultipleDoors.dm b/code/game/machinery/doors/checkForMultipleDoors.dm index 9005a7fda49..d1c3c2e2d6b 100644 --- a/code/game/machinery/doors/checkForMultipleDoors.dm +++ b/code/game/machinery/doors/checkForMultipleDoors.dm @@ -1,15 +1,15 @@ /obj/machinery/door/proc/checkForMultipleDoors() - if(!src.loc) + if(!loc) return 0 - for(var/obj/machinery/door/D in src.loc) + for(var/obj/machinery/door/D in loc) if(!istype(D, /obj/machinery/door/window) && D.density) return 0 return 1 /turf/simulated/wall/proc/checkForMultipleDoors() - if(!src.loc) + if(!loc) return 0 - for(var/obj/machinery/door/D in locate(src.x,src.y,src.z)) + for(var/obj/machinery/door/D in locate(x,y,z)) if(!istype(D, /obj/machinery/door/window) && D.density) return 0 //There are no false wall checks because that would be fucking retarded diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 88b750feeb9..db63d48935f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -2,7 +2,7 @@ #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed /obj/machinery/door - name = "Door" + name = "door" desc = "It opens and closes." icon = 'icons/obj/doors/Doorint.dmi' icon_state = "door1" @@ -10,18 +10,20 @@ opacity = 1 density = 1 layer = DOOR_OPEN_LAYER + power_channel = ENVIRON var/open_layer = DOOR_OPEN_LAYER var/closed_layer = DOOR_CLOSED_LAYER - var/visible = 1 var/p_open = 0 var/operating = 0 var/autoclose = 0 var/autoclose_timer var/glass = 0 + var/welded = FALSE var/normalspeed = 1 var/auto_close_time = 150 var/auto_close_time_dangerous = 5 + var/assemblytype //the type of door frame to drop during deconstruction var/heat_proof = 0 // For rglass-windowed airlocks and firedoors var/emergency = 0 var/air_properties_vary_with_direction = 0 @@ -74,7 +76,8 @@ return if(isliving(AM)) var/mob/living/M = AM - if(world.time - M.last_bumped <= 10) return //Can bump-open one airlock per second. This is to prevent shock spam. + if(world.time - M.last_bumped <= 10) + return //Can bump-open one airlock per second. This is to prevent shock spam. M.last_bumped = world.time if(!M.restrained()) if(M.mob_size > MOB_SIZE_SMALL) @@ -95,6 +98,18 @@ return return +/obj/machinery/door/Move(new_loc, new_dir) + var/turf/T = loc + . = ..() + move_update_air(T) + + if(width > 1) + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size /obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSGLASS)) @@ -173,29 +188,26 @@ qdel(src) return - /obj/machinery/door/emp_act(severity) if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) ) spawn(0) open() ..() - /obj/machinery/door/ex_act(severity) switch(severity) - if(1.0) + if(1) qdel(src) - if(2.0) + if(2) if(prob(25)) qdel(src) - if(3.0) + if(3) if(prob(80)) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(2, 1, src) s.start() return - /obj/machinery/door/update_icon() if(density) icon_state = "door1" @@ -285,7 +297,6 @@ var/turf/location = get_turf(src) L.add_splatter_floor(location) - /obj/machinery/door/proc/requiresID() return 1 @@ -295,19 +306,6 @@ close() return -/obj/machinery/door/Move(new_loc, new_dir) - var/turf/T = loc - . = ..() - move_update_air(T) - - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - /obj/machinery/door/proc/update_freelook_sight() // Glass door glass = 1 // don't check then? diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 0f397a51dbb..ee75775f151 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -16,16 +16,13 @@ density = FALSE heat_proof = TRUE glass = TRUE - power_channel = ENVIRON closed_layer = 3.11 auto_close_time = 50 - + assemblytype = /obj/structure/firelock_frame var/can_force = TRUE var/force_open_time = 300 var/can_crush = TRUE - var/assembly_type = /obj/structure/firelock_frame var/nextstate = null - var/welded = FALSE var/boltslocked = TRUE var/can_deconstruct = TRUE var/active_alarm = FALSE @@ -39,9 +36,9 @@ /obj/machinery/door/firedoor/ex_act(severity) switch(severity) - if(1.0) + if(1) qdel(src) - if(2.0) + if(2) if(prob(50)) qdel(src) @@ -53,7 +50,7 @@ stat |= NOPOWER update_icon() -/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob, params) +/obj/machinery/door/firedoor/attackby(obj/item/weapon/C, mob/user, params) add_fingerprint(user) if(operating) @@ -70,7 +67,7 @@ return if(welded) - if(istype(C, /obj/item/weapon/wrench)) + if(iswrench(C)) if(boltslocked) to_chat(user, "There are screws locking the bolts in place!") return @@ -84,7 +81,7 @@ "You undo [src]'s floor bolts.") deconstruct(TRUE) return - else if(istype(C, /obj/item/weapon/screwdriver)) + else if(isscrewdriver(C)) user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts...", \ "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts...") playsound(get_turf(src), C.usesound, 50, 1) @@ -94,7 +91,7 @@ to_chat(user, "\The [src] is welded solid!") return - if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe)) + if(iscrowbar(C) || istype(C, /obj/item/weapon/twohanded/fireaxe)) if(istype(C, /obj/item/weapon/twohanded/fireaxe)) var/obj/item/weapon/twohanded/fireaxe/F = C if(!F.wielded) @@ -210,7 +207,7 @@ /obj/machinery/door/firedoor/deconstruct(disassembled = TRUE) if(can_deconstruct) - var/obj/structure/firelock_frame/F = new assembly_type(get_turf(src)) + var/obj/structure/firelock_frame/F = new assemblytype(get_turf(src)) if(disassembled) F.constructionStep = CONSTRUCTION_PANEL_OPEN else @@ -231,7 +228,7 @@ else return 1 -/obj/machinery/door/firedoor/border_only/CheckExit(atom/movable/mover as mob|obj, turf/target) +/obj/machinery/door/firedoor/border_only/CheckExit(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 if(get_dir(loc, target) == dir) @@ -250,12 +247,12 @@ icon = 'icons/obj/doors/Doorfire.dmi' glass = FALSE opacity = 1 - assembly_type = /obj/structure/firelock_frame/heavy + assemblytype = /obj/structure/firelock_frame/heavy can_force = FALSE /obj/machinery/door/firedoor/heavy/ex_act(severity) switch(severity) - if(1.0) + if(1) qdel(src) /obj/item/weapon/firelock_electronics @@ -304,7 +301,7 @@ /obj/structure/firelock_frame/attackby(obj/item/weapon/C, mob/user) switch(constructionStep) if(CONSTRUCTION_PANEL_OPEN) - if(istype(C, /obj/item/weapon/crowbar)) + if(iscrowbar(C)) playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts prying something out from [src]...", \ "You begin prying out the wire cover...") @@ -318,7 +315,7 @@ constructionStep = CONSTRUCTION_WIRES_EXPOSED update_icon() return - if(istype(C, /obj/item/weapon/wrench)) + if(iswrench(C)) if(locate(/obj/machinery/door/firedoor) in get_turf(src)) to_chat(user, "There's already a firelock there.") return @@ -360,7 +357,7 @@ return if(CONSTRUCTION_WIRES_EXPOSED) - if(istype(C, /obj/item/weapon/wirecutters)) + if(iswirecutter(C)) playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts cutting the wires from [src]...", \ "You begin removing [src]'s wires...") @@ -375,7 +372,7 @@ constructionStep = CONSTRUCTION_GUTTED update_icon() return - if(istype(C, /obj/item/weapon/weldingtool)) + if(iswelder(C)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(1, user)) playsound(get_turf(src), C.usesound, 50, 1) @@ -392,7 +389,7 @@ update_icon() return if(CONSTRUCTION_GUTTED) - if(istype(C, /obj/item/weapon/crowbar)) + if(iscrowbar(C)) user.visible_message("[user] begins removing the circuit board from [src]...", \ "You begin prying out the circuit board from [src]...") playsound(get_turf(src), C.usesound, 50, 1) @@ -407,7 +404,7 @@ constructionStep = CONSTRUCTION_NOCIRCUIT update_icon() return - if(istype(C, /obj/item/stack/cable_coil)) + if(iscoil(C)) var/obj/item/stack/cable_coil/B = C if(B.get_amount() < 5) to_chat(user, "You need more wires to add wiring to [src].") @@ -426,7 +423,7 @@ update_icon() return if(CONSTRUCTION_NOCIRCUIT) - if(istype(C, /obj/item/weapon/weldingtool)) + if(iswelder(C)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(1,user)) playsound(get_turf(src), W.usesound, 50, 1) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm deleted file mode 100644 index aa2b5b479a4..00000000000 --- a/code/game/machinery/doors/multi_tile.dm +++ /dev/null @@ -1,11 +0,0 @@ -//Terribly sorry for the code doubling, but things go derpy otherwise. -/obj/machinery/door/airlock/multi_tile - width = 2 - -/obj/machinery/door/airlock/multi_tile/glass - name = "Glass Airlock" - icon = 'icons/obj/doors/Door2x1glass.dmi' - opacity = 0 - glass = 1 - assembly_type = "obj/structure/door_assembly/multi_tile" - diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index f8ea575dce8..7e483c3bfc5 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -1,5 +1,5 @@ /obj/machinery/door/poddoor - name = "Podlock" + name = "blast door" desc = "That looks like it doesn't open easily." icon = 'icons/obj/doors/rapid_pdoor.dmi' icon_state = "pdoor1" @@ -22,14 +22,14 @@ //"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. /obj/machinery/door/poddoor/ex_act(severity, target) switch(severity) - if(1.0) + if(1) if(prob(80)) qdel(src) else var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(2, 1, src) s.start() - if(2.0) + if(2) if(prob(20)) qdel(src) else @@ -37,24 +37,24 @@ s.set_up(2, 1, src) s.start() - if(3.0) + if(3) if(prob(80)) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(2, 1, src) s.start() -/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob, params) - src.add_fingerprint(user) - if(!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) +/obj/machinery/door/poddoor/attackby(obj/item/weapon/C, mob/user, params) + add_fingerprint(user) + if(!(iscrowbar(C) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1))) return - if((src.density && (stat & NOPOWER) && !operating)) - spawn( 0 ) + if((density && (stat & NOPOWER) && !operating)) + spawn(0) operating = 1 flick("pdoorc0", src) - src.icon_state = "pdoor0" - src.set_opacity(0) + icon_state = "pdoor0" + set_opacity(0) sleep(15) - src.density = 0 + density = 0 operating = 0 return return @@ -67,10 +67,10 @@ if(!operating) //in case of emag operating = 1 flick("pdoorc0", src) - src.icon_state = "pdoor0" - src.set_opacity(0) + icon_state = "pdoor0" + set_opacity(0) sleep(5) - src.density = 0 + density = 0 sleep(5) air_update_turf(1) update_freelook_sight() @@ -87,20 +87,20 @@ return operating = 1 flick("pdoorc1", src) - src.icon_state = "pdoor1" - src.set_opacity(initial(opacity)) + icon_state = "pdoor1" + set_opacity(initial(opacity)) air_update_turf(1) update_freelook_sight() sleep(5) crush() - src.density = 1 + density = 1 sleep(5) operating = 0 return /obj/machinery/door/poddoor/multi_tile // Whoever wrote the old code for multi-tile spesspod doors needs to burn in hell. - name = "Large Pod Door" + name = "large pod door" /obj/machinery/door/poddoor/multi_tile/four_tile_ver/ icon = 'icons/obj/doors/1x4blast_vert.dmi' diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 08f67863760..059c6268005 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -1,8 +1,8 @@ /obj/machinery/door/poddoor/shutters - name = "Shutters" + name = "shutters" + desc = "Heavy duty metal shutters that opens mechanically." icon = 'icons/obj/doors/rapid_pdoor.dmi' icon_state = "shutter1" - power_channel = ENVIRON /obj/machinery/door/poddoor/shutters/New() ..() @@ -13,9 +13,9 @@ density = 0 opacity = 0 -/obj/machinery/door/poddoor/shutters/attackby(obj/item/weapon/C as obj, mob/user as mob, params) +/obj/machinery/door/poddoor/shutters/attackby(obj/item/weapon/C, mob/user, params) add_fingerprint(user) - if(!(istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) + if(!(iscrowbar(C) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1))) return if(density && (stat & NOPOWER) && !operating) operating = 1 diff --git a/code/game/machinery/doors/spacepod.dm b/code/game/machinery/doors/spacepod.dm index 021509a13ed..93419b588f6 100644 --- a/code/game/machinery/doors/spacepod.dm +++ b/code/game/machinery/doors/spacepod.dm @@ -1,11 +1,11 @@ /obj/structure/spacepoddoor - name = "Podlock" + name = "podlock" desc = "Why it no open!!!" icon = 'icons/effects/beam.dmi' icon_state = "n_beam" - var/id = 1.0 density = 0 anchored = 1 + var/id = 1.0 /obj/structure/spacepoddoor/initialize() ..() diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm index a8236f0817c..76caba78cc6 100644 --- a/code/game/machinery/doors/unpowered.dm +++ b/code/game/machinery/doors/unpowered.dm @@ -1,24 +1,20 @@ /obj/machinery/door/unpowered autoclose = 0 - var/locked = 0 explosion_block = 1 + var/locked = 0 /obj/machinery/door/unpowered/Bumped(atom/AM) if(locked) return ..() - /obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/card/emag) || istype(I, /obj/item/weapon/melee/energy/blade)) + if(istype(I, /obj/item/weapon/card/emag) || istype(I, /obj/item/weapon/melee/energy/blade)) return - if(locked) + if(locked) return return ..() /obj/machinery/door/unpowered/shuttle icon = 'icons/turf/shuttle.dmi' - name = "door" icon_state = "door1" - opacity = 1 - density = 1 \ No newline at end of file diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 36a1045894d..a45c19aff29 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -3,12 +3,12 @@ desc = "A strong door." icon = 'icons/obj/doors/windoor.dmi' icon_state = "left" - var/base_state = "left" - var/health = 150.0 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file visible = 0.0 flags = ON_BORDER opacity = 0 var/obj/item/weapon/airlock_electronics/electronics = null + var/base_state = "left" + var/health = 150.0 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file /obj/machinery/door/window/New() ..() @@ -28,7 +28,6 @@ QDEL_NULL(electronics) return ..() - /obj/machinery/door/window/proc/open_and_close() open() if(check_access(null)) @@ -37,7 +36,7 @@ sleep(20) close() -/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) +/obj/machinery/door/window/Bumped(atom/movable/AM) if(operating || !density) return if(!ismob(AM)) @@ -55,8 +54,8 @@ bumpopen(M) return -/obj/machinery/door/window/bumpopen(mob/user as mob) - if( operating || !density ) +/obj/machinery/door/window/bumpopen(mob/user) + if(operating || !density) return add_fingerprint(user) if(!requiresID()) @@ -76,17 +75,17 @@ else return 1 -/obj/machinery/door/window/CanAtmosPass(var/turf/T) +/obj/machinery/door/window/CanAtmosPass(turf/T) if(get_dir(loc, T) == dir) return !density else return 1 //used in the AStar algorithm to determinate if the turf the door is on is passable -/obj/machinery/door/window/CanAStarPass(var/obj/item/weapon/card/id/ID, var/to_dir) +/obj/machinery/door/window/CanAStarPass(obj/item/weapon/card/id/ID, to_dir) return !density || (dir != to_dir) || (check_access(ID) && !(stat & NOPOWER)) -/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) +/obj/machinery/door/window/CheckExit(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 if(get_dir(loc, target) == dir) @@ -94,7 +93,7 @@ else return 1 -/obj/machinery/door/window/open(var/forced=0) +/obj/machinery/door/window/open(forced=0) if(operating) //doors can still open when emag-disabled return 0 if(!ticker) @@ -121,7 +120,7 @@ operating = 0 return 1 -/obj/machinery/door/window/close(var/forced=0) +/obj/machinery/door/window/close(forced=0) if(operating) return 0 if(!forced) @@ -145,7 +144,7 @@ operating = 0 return 1 -/obj/machinery/door/window/proc/take_damage(var/damage) +/obj/machinery/door/window/proc/take_damage(damage) health = max(0, health - damage) if(health <= 0) var/debris = list( @@ -160,7 +159,7 @@ qdel(src) return -/obj/machinery/door/window/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/door/window/bullet_act(obj/item/projectile/Proj) if(Proj.damage) if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) take_damage(round(Proj.damage / 2)) @@ -193,7 +192,7 @@ if(user.can_advanced_admin_interact()) return attack_hand(user) -/obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0) +/obj/machinery/door/window/proc/attack_generic(mob/user, damage = 0) if(operating) return user.changeNext_move(CLICK_CD_MELEE) @@ -203,24 +202,24 @@ "[user] smashes against the [name].") take_damage(damage) -/obj/machinery/door/window/attack_alien(mob/living/user as mob) +/obj/machinery/door/window/attack_alien(mob/living/user) if(islarva(user)) return attack_generic(user, 25) -/obj/machinery/door/window/attack_animal(mob/living/user as mob) +/obj/machinery/door/window/attack_animal(mob/living/user) if(!isanimal(user)) return var/mob/living/simple_animal/M = user if(M.melee_damage_upper > 0 && (M.melee_damage_type == BRUTE || M.melee_damage_type == BURN)) attack_generic(M, M.melee_damage_upper) -/obj/machinery/door/window/attack_slime(mob/living/carbon/slime/user as mob) +/obj/machinery/door/window/attack_slime(mob/living/carbon/slime/user) if(!user.is_adult) return attack_generic(user, 25) -/obj/machinery/door/window/attack_hand(mob/user as mob) +/obj/machinery/door/window/attack_hand(mob/user) return attackby(user, user) /obj/machinery/door/window/emag_act(mob/user, obj/weapon) @@ -245,7 +244,7 @@ emagged = 1 return 1 -/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob, params) +/obj/machinery/door/window/attackby(obj/item/weapon/I, mob/living/user, params) //If it's in the process of opening/closing, ignore the click if(operating) @@ -258,16 +257,16 @@ emag_act(user,I) return 1 - if(istype(I, /obj/item/weapon/screwdriver)) + if(isscrewdriver(I)) if(density || operating) to_chat(user, "You need to open the door to access the maintenance panel.") return playsound(loc, I.usesound, 50, 1) - p_open = !( p_open ) + p_open = !p_open to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the [name].") return - if(istype(I, /obj/item/weapon/crowbar)) + if(iscrowbar(I)) if(p_open && !density && !operating) playsound(loc, I.usesound, 100, 1) user.visible_message("[user] removes the electronics from the [name].", \ @@ -302,7 +301,7 @@ var/obj/item/weapon/airlock_electronics/ae if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( loc ) + ae = new/obj/item/weapon/airlock_electronics(loc) if(!req_access) check_access() if(req_access.len) @@ -320,7 +319,7 @@ //If windoor is unpowered, crowbar, fireaxe and armblade can force it. - if(istype(I, /obj/item/weapon/crowbar) || istype(I, /obj/item/weapon/twohanded/fireaxe)) + if(iscrowbar(I) || istype(I, /obj/item/weapon/twohanded/fireaxe)) if(stat & NOPOWER) if(density) open(2) @@ -329,10 +328,10 @@ return //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) - if(density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) ) + if(density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card)) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - if( (I.flags&NOBLUDGEON) || !I.force ) + if((I.flags&NOBLUDGEON) || !I.force) return var/aforce = I.force playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) @@ -356,16 +355,13 @@ return - - /obj/machinery/door/window/brigdoor name = "secure door" icon = 'icons/obj/doors/windoor.dmi' icon_state = "leftsecure" base_state = "leftsecure" - var/id = null health = 300.0 //Stronger doors for prison (regular window door health is 200) - + var/id = null /obj/machinery/door/window/northleft dir = NORTH diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 6adc0ef4af6..f6fa4d512c4 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -68,13 +68,13 @@ var/global/list/datum/stack_recipe/metal_recipes = list( new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), - new /datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), )), null, @@ -126,7 +126,12 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list( new /datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), new /datum/stack_recipe("Surgery Table", /obj/machinery/optable, 5, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1), - new /datum/stack_recipe("Mass Driver frame", /obj/machinery/mass_driver_frame, 3, time = 50, one_per_turf = 1) + new /datum/stack_recipe("Mass Driver frame", /obj/machinery/mass_driver_frame, 3, time = 50, one_per_turf = 1), + null, + new /datum/stack_recipe_list("airlock assemblies", list( + new /datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 4, time = 50, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), + ), 4), ) /obj/item/stack/sheet/plasteel diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 9142e7bb2ac..b053c48b893 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -43,7 +43,9 @@ RCD /obj/machinery/door/airlock/glass_security = "Security (Glass)", /obj/machinery/door/airlock/glass_medical = "Medical (Glass)", /obj/machinery/door/airlock/mining = "Mining", /obj/machinery/door/airlock/atmos = "Atmospherics", /obj/machinery/door/airlock/research = "Research", /obj/machinery/door/airlock/glass_research = "Research (Glass)", - /obj/machinery/door/airlock/glass_mining = "Mining (Glass)", /obj/machinery/door/airlock/glass_atmos = "Atmospherics (Glass)") + /obj/machinery/door/airlock/glass_mining = "Mining (Glass)", /obj/machinery/door/airlock/glass_atmos = "Atmospherics (Glass)", + /obj/machinery/door/airlock/science = "Science", /obj/machinery/door/airlock/glass_science = "Science (Glass)", + /obj/machinery/door/airlock/hatch = "Airtight Hatch", /obj/machinery/door/airlock/maintenance_hatch = "Maintenance Hatch") /obj/item/weapon/rcd/New() desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index b8ab485512a..7292cc0b68c 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -1,19 +1,20 @@ /obj/structure/door_assembly icon = 'icons/obj/doors/door_assembly.dmi' - - name = "Airlock Assembly" + name = "airlock assembly" icon_state = "door_as_0" anchored = 0 density = 1 var/state = 0 var/base_icon_state = "" - var/base_name = "Airlock" + var/base_name = "airlock" var/obj/item/weapon/airlock_electronics/electronics = null var/airlock_type = "" //the type path of the airlock once completed var/glass_type = "/glass" var/glass = 0 // 0 = glass can be installed. -1 = glass can't be installed. 1 = glass is already installed. Text = mineral plating is installed instead. var/created_name = null var/heat_proof_finished = 0 //whether to heat-proof the finished airlock + var/material_type = /obj/item/stack/sheet/metal + var/material_amt = 4 /obj/structure/door_assembly/New() update_state() @@ -23,92 +24,116 @@ return ..() /obj/structure/door_assembly/door_assembly_com + name = "command airlock assembly" base_icon_state = "com" - base_name = "Command Airlock" + base_name = "command airlock" glass_type = "/glass_command" airlock_type = "/command" /obj/structure/door_assembly/door_assembly_sec + name = "security airlock assembly" base_icon_state = "sec" - base_name = "Security Airlock" + base_name = "security airlock" glass_type = "/glass_security" airlock_type = "/security" /obj/structure/door_assembly/door_assembly_eng + name = "engineering airlock assembly" base_icon_state = "eng" - base_name = "Engineering Airlock" + base_name = "engineering airlock" glass_type = "/glass_engineering" airlock_type = "/engineering" /obj/structure/door_assembly/door_assembly_min + name = "mining airlock assembly" base_icon_state = "min" - base_name = "Mining Airlock" + base_name = "mining airlock" glass_type = "/glass_mining" airlock_type = "/mining" /obj/structure/door_assembly/door_assembly_atmo + name = "atmospherics airlock assembly" base_icon_state = "atmo" - base_name = "Atmospherics Airlock" + base_name = "atmospherics airlock" glass_type = "/glass_atmos" airlock_type = "/atmos" /obj/structure/door_assembly/door_assembly_research + name = "research airlock assembly" base_icon_state = "res" - base_name = "Research Airlock" + base_name = "research airlock" glass_type = "/glass_research" airlock_type = "/research" /obj/structure/door_assembly/door_assembly_science + name = "science airlock assembly" base_icon_state = "sci" - base_name = "Science Airlock" + base_name = "science airlock" glass_type = "/glass_science" airlock_type = "/science" /obj/structure/door_assembly/door_assembly_med + name = "medical airlock assembly" base_icon_state = "med" - base_name = "Medical Airlock" + base_name = "medical airlock" glass_type = "/glass_medical" airlock_type = "/medical" /obj/structure/door_assembly/door_assembly_mai + name = "maintenance airlock assembly" base_icon_state = "mai" - base_name = "Maintenance Airlock" + base_name = "maintenance airlock" airlock_type = "/maintenance" glass = -1 /obj/structure/door_assembly/door_assembly_ext + name = "external airlock assembly" base_icon_state = "ext" - base_name = "External Airlock" + base_name = "external airlock" airlock_type = "/external" glass = -1 /obj/structure/door_assembly/door_assembly_fre + name = "freezer airlock assembly" base_icon_state = "fre" - base_name = "Freezer Airlock" + base_name = "freezer airlock" airlock_type = "/freezer" glass = -1 /obj/structure/door_assembly/door_assembly_hatch + name = "airtight hatch assembly" base_icon_state = "hatch" - base_name = "Airtight Hatch" + base_name = "airtight hatch" airlock_type = "/hatch" glass = -1 /obj/structure/door_assembly/door_assembly_mhatch + name = "maintenance hatch assembly" base_icon_state = "mhatch" - base_name = "Maintenance Hatch" + base_name = "maintenance hatch" airlock_type = "/maintenance_hatch" glass = -1 -/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly +/obj/structure/door_assembly/door_assembly_highsecurity + name = "high security airlock assembly" base_icon_state = "highsec" - base_name = "High Security Airlock" + base_name = "high security airlock" airlock_type = "/highsecurity" glass = -1 + material_type = /obj/item/stack/sheet/plasteel + +/obj/structure/door_assembly/door_assembly_vault + name = "vault door assembly" + base_icon_state = "vault" + base_name = "vault door" + airlock_type = "/vault" + glass = -1 + material_type = /obj/item/stack/sheet/plasteel /obj/structure/door_assembly/door_assembly_shuttle + name = "shuttle airlock assembly" base_icon_state = "shuttle" - base_name = "Shuttle Airlock" + base_name = "shuttle airlock" airlock_type = "/shuttle" glass = -1 @@ -152,31 +177,40 @@ airlock_type = "/cult/runed" glass = -1 -/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/structure/door_assembly/door_assembly_centcom + base_icon_state = "ele" + airlock_type = "/centcom" + glass = -1 + +/obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/pen)) - var/t = copytext(stripped_input(user, "Enter the name for the door.", src.name, src.created_name),1,MAX_NAME_LEN) - if(!t) return - if(!in_range(src, usr) && src.loc != usr) return + var/t = copytext(stripped_input(user, "Enter the name for the door.", name, created_name),1,MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return created_name = t return - if(istype(W, /obj/item/weapon/weldingtool) && ( (istext(glass)) || (glass == 1) || (!anchored) )) + if(iswelder(W) && ((istext(glass)) || (glass == 1) || !anchored )) var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0, user)) - playsound(src.loc, WT.usesound, 50, 1) + playsound(loc, WT.usesound, 50, 1) if(istext(glass)) - user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") + user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly...") if(do_after(user, 40 * WT.toolspeed, target = src)) - if(!src || !WT.isOn()) return - to_chat(user, "You welded the [glass] plating off!") + if(!src || !WT.isOn()) + return + to_chat(user, "You weld the [glass] plating off.") var/M = text2path("/obj/item/stack/sheet/mineral/[glass]") - new M(src.loc, 2) + new M(loc, 2) glass = 0 else if(glass == 1) - user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") + user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly...") if(do_after(user, 40 * WT.toolspeed, target = src)) - if(!src || !WT.isOn()) return - to_chat(user, "You welded the glass panel out!") + if(!src || !WT.isOn()) + return + to_chat(user, "You weld the glass panel out.") if(heat_proof_finished) new /obj/item/stack/sheet/rglass(get_turf(src)) heat_proof_finished = 0 @@ -184,87 +218,91 @@ new /obj/item/stack/sheet/glass(get_turf(src)) glass = 0 else if(!anchored) - user.visible_message("[user] disassembles the airlock assembly.", "You start to disassemble the airlock assembly.") + user.visible_message("[user] disassembles the airlock assembly.", "You start to disassemble the airlock assembly...") if(do_after(user, 40 * WT.toolspeed, target = src)) - if(!src || !WT.isOn()) return - to_chat(user, "You dissasembled the airlock assembly!") - new /obj/item/stack/sheet/metal(src.loc, 4) + if(!src || !WT.isOn()) + return + to_chat(user, "You disassemble the airlock assembly.") + new material_type(loc, material_amt) qdel(src) else to_chat(user, "You need more welding fuel.") return - else if(istype(W, /obj/item/weapon/wrench) && state == 0) - playsound(src.loc, W.usesound, 100, 1) + else if(iswrench(W) && state == 0) + playsound(loc, W.usesound, 100, 1) if(anchored) - user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.") + user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor...") else - user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.") + user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor...") if(do_after(user, 40 * W.toolspeed, target = src)) - if(!src) return - to_chat(user, "You [anchored ? "un" : ""]secured the airlock assembly!") + if(!src) + return + to_chat(user, "You [anchored ? "un" : ""]secure the airlock assembly.") anchored = !anchored - else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored ) + else if(iscoil(W) && state == 0 && anchored) var/obj/item/stack/cable_coil/coil = W - user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") + user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly...") if(do_after(user, 40 * coil.toolspeed, target = src)) - if(!src) return + if(!src) + return coil.use(1) - src.state = 1 - to_chat(user, "You wire the Airlock!") + state = 1 + to_chat(user, "You wire the airlock assembly.") - else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 ) - playsound(src.loc, W.usesound, 100, 1) - user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") + else if(iswirecutter(W) && state == 1) + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly...") if(do_after(user, 40 * W.toolspeed, target = src)) - if(!src) return - to_chat(user, "You cut the airlock's wires!") + if(!src) + return + to_chat(user, "You cut the wires from the airlock assembly.") if(state == 1) - new/obj/item/stack/cable_coil(src.loc, 1) - src.state = 0 + new/obj/item/stack/cable_coil(loc, 1) + state = 0 - else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 && W:icon_state != "door_electronics_smoked") - playsound(src.loc, W.usesound, 100, 1) - user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - user.drop_item() - W.loc = src + else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 && W.icon_state != "door_electronics_smoked") + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...") if(do_after(user, 40 * W.toolspeed, target = src)) - if(!src) return - to_chat(user, "You installed the airlock electronics!") - src.state = 2 - src.name = "Near finished Airlock Assembly" - src.electronics = W - else - W.loc = src.loc + if(!src) + return + user.drop_item() + W.loc = src + to_chat(user, "You install the airlock electronics.") + state = 2 + name = "near finished airlock assembly" + electronics = W - else if(istype(W, /obj/item/weapon/crowbar) && state == 2 ) - playsound(src.loc, W.usesound, 100, 1) - user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to install electronics into the airlock assembly.") + else if(iscrowbar(W) && state == 2 ) + playsound(loc, W.usesound, 100, 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 * W.toolspeed, target = src)) - if(!src) return - to_chat(user, "You removed the airlock electronics!") - src.state = 1 - src.name = "Wired Airlock Assembly" + if(!src) + return + to_chat(user, "You remove the airlock electronics.") + state = 1 + name = "wired airlock assembly" var/obj/item/weapon/airlock_electronics/ae if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( src.loc ) + ae = new/obj/item/weapon/airlock_electronics(loc) else ae = electronics electronics = null - ae.loc = src.loc + ae.loc = loc else if(istype(W, /obj/item/stack/sheet) && !glass) var/obj/item/stack/sheet/S = W if(S) if(S.amount>=1) if(istype(S, /obj/item/stack/sheet/rglass) || istype(S, /obj/item/stack/sheet/glass)) - playsound(src.loc, S.usesound, 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") + playsound(loc, S.usesound, 100, 1) + user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly...") if(do_after(user, 40 * S.toolspeed, target = src)) if(S.type == /obj/item/stack/sheet/rglass) to_chat(user, "You install reinforced glass windows into the airlock assembly.") @@ -276,20 +314,22 @@ else if(istype(S, /obj/item/stack/sheet/mineral) && S.sheettype) var/M = S.sheettype if(S.amount>=2) - playsound(src.loc, S.usesound, 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") + playsound(loc, S.usesound, 100, 1) + user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly...") if(do_after(user, 40 * S.toolspeed, target = src)) - to_chat(user, "You installed [M] plating into the airlock assembly!") + to_chat(user, "You install [M] plating into the airlock assembly.") S.use(2) glass = "[M]" - else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 ) - playsound(src.loc, W.usesound, 100, 1) - to_chat(user, "Now finishing the airlock.") + else if(isscrewdriver(W) && state == 2 ) + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] finishes the airlock.", \ + "You start finishing the airlock...") if(do_after(user, 40 * W.toolspeed, target = src)) - if(!src) return - to_chat(user, "You finish the airlock!") + if(!src) + return + to_chat(user, "You finish the airlock.") var/path if(istext(glass)) path = text2path("/obj/machinery/door/airlock/[glass]") @@ -297,21 +337,21 @@ path = text2path("/obj/machinery/door/airlock[glass_type]") else path = text2path("/obj/machinery/door/airlock[airlock_type]") - var/obj/machinery/door/airlock/door = new path(src.loc) + var/obj/machinery/door/airlock/door = new path(loc) door.setDir(dir) - door.assembly_type = type - door.electronics = src.electronics + door.assemblytype = type + door.electronics = electronics door.heat_proof = heat_proof_finished - if(src.electronics.one_access) + if(electronics.one_access) door.req_access = null - door.req_one_access = src.electronics.conf_access + door.req_one_access = electronics.conf_access else - door.req_access = src.electronics.conf_access + door.req_access = electronics.conf_access if(created_name) door.name = created_name else door.name = "[istext(glass) ? "[glass] airlock" : base_name]" - src.electronics.loc = door + electronics.loc = door qdel(src) else ..() @@ -323,9 +363,9 @@ switch(state) if(0) if(anchored) - name = "Secured " + name = "secured " if(1) - name = "Wired " + name = "wired " if(2) - name = "Near Finished " - name += "[heat_proof_finished ? "Heat-Proofed " : ""][glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly" + name = "near finished " + name += "[heat_proof_finished ? "heat-proofed " : ""][glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly" diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index e86be187329..bac0df5b7f4 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -373,9 +373,8 @@ //Door /obj/machinery/door/airlock/survival_pod - name = "Airlock" icon = 'icons/obj/doors/survival.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_pod + assemblytype = /obj/structure/door_assembly/door_assembly_pod opacity = 0 glass = 1 diff --git a/icons/obj/doors/Door1.dmi b/icons/obj/doors/Door1.dmi index d61529cc5f5..1a49846714d 100644 Binary files a/icons/obj/doors/Door1.dmi and b/icons/obj/doors/Door1.dmi differ diff --git a/icons/obj/doors/Dooratmo.dmi b/icons/obj/doors/Dooratmo.dmi index 3a715a64654..6f71a8668f5 100644 Binary files a/icons/obj/doors/Dooratmo.dmi and b/icons/obj/doors/Dooratmo.dmi differ diff --git a/icons/obj/doors/Dooratmoglass.dmi b/icons/obj/doors/Dooratmoglass.dmi index 6309298843b..9ed2b784780 100644 Binary files a/icons/obj/doors/Dooratmoglass.dmi and b/icons/obj/doors/Dooratmoglass.dmi differ diff --git a/icons/obj/doors/Doorbananium.dmi b/icons/obj/doors/Doorbananium.dmi index b8c0d9cd829..eb43e19972f 100644 Binary files a/icons/obj/doors/Doorbananium.dmi and b/icons/obj/doors/Doorbananium.dmi differ diff --git a/icons/obj/doors/Doorcom.dmi b/icons/obj/doors/Doorcom.dmi index 7f32b092666..fd0ce7e4488 100644 Binary files a/icons/obj/doors/Doorcom.dmi and b/icons/obj/doors/Doorcom.dmi differ diff --git a/icons/obj/doors/Doorcomglass.dmi b/icons/obj/doors/Doorcomglass.dmi index fb48dd5a4a8..f2a1f7dcda7 100644 Binary files a/icons/obj/doors/Doorcomglass.dmi and b/icons/obj/doors/Doorcomglass.dmi differ diff --git a/icons/obj/doors/Doorcult.dmi b/icons/obj/doors/Doorcult.dmi index f9f4aa92466..80f635bbef2 100644 Binary files a/icons/obj/doors/Doorcult.dmi and b/icons/obj/doors/Doorcult.dmi differ diff --git a/icons/obj/doors/Doorcultruned.dmi b/icons/obj/doors/Doorcultruned.dmi index f9f4aa92466..80f635bbef2 100644 Binary files a/icons/obj/doors/Doorcultruned.dmi and b/icons/obj/doors/Doorcultruned.dmi differ diff --git a/icons/obj/doors/Doordiamond.dmi b/icons/obj/doors/Doordiamond.dmi index 943e527a594..19afed88dfc 100644 Binary files a/icons/obj/doors/Doordiamond.dmi and b/icons/obj/doors/Doordiamond.dmi differ diff --git a/icons/obj/doors/Doorele.dmi b/icons/obj/doors/Doorele.dmi index efe31ae8740..de136c425a6 100644 Binary files a/icons/obj/doors/Doorele.dmi and b/icons/obj/doors/Doorele.dmi differ diff --git a/icons/obj/doors/Dooreng.dmi b/icons/obj/doors/Dooreng.dmi index 9602eb48ffa..be6f0f4c7a0 100644 Binary files a/icons/obj/doors/Dooreng.dmi and b/icons/obj/doors/Dooreng.dmi differ diff --git a/icons/obj/doors/Doorengglass.dmi b/icons/obj/doors/Doorengglass.dmi index 04668c155fe..89ebbefba1b 100644 Binary files a/icons/obj/doors/Doorengglass.dmi and b/icons/obj/doors/Doorengglass.dmi differ diff --git a/icons/obj/doors/Doorfreezer.dmi b/icons/obj/doors/Doorfreezer.dmi index 12be27d602f..b3ba56d1710 100644 Binary files a/icons/obj/doors/Doorfreezer.dmi and b/icons/obj/doors/Doorfreezer.dmi differ diff --git a/icons/obj/doors/Doorglass.dmi b/icons/obj/doors/Doorglass.dmi index 1292b24b04f..5ef6d128d2d 100644 Binary files a/icons/obj/doors/Doorglass.dmi and b/icons/obj/doors/Doorglass.dmi differ diff --git a/icons/obj/doors/Doorgold.dmi b/icons/obj/doors/Doorgold.dmi index f9d6bd4841f..a346e3dd46c 100644 Binary files a/icons/obj/doors/Doorgold.dmi and b/icons/obj/doors/Doorgold.dmi differ diff --git a/icons/obj/doors/Doormaint.dmi b/icons/obj/doors/Doormaint.dmi index f8b21251e8b..c117b7db3ef 100644 Binary files a/icons/obj/doors/Doormaint.dmi and b/icons/obj/doors/Doormaint.dmi differ diff --git a/icons/obj/doors/Doormining.dmi b/icons/obj/doors/Doormining.dmi index 63a33d391f2..cf531676bff 100644 Binary files a/icons/obj/doors/Doormining.dmi and b/icons/obj/doors/Doormining.dmi differ diff --git a/icons/obj/doors/Doorminingglass.dmi b/icons/obj/doors/Doorminingglass.dmi index 935d3d64d9f..ebdc59abcd1 100644 Binary files a/icons/obj/doors/Doorminingglass.dmi and b/icons/obj/doors/Doorminingglass.dmi differ diff --git a/icons/obj/doors/Doorplasma.dmi b/icons/obj/doors/Doorplasma.dmi index ea426a59c43..8469bbad64e 100644 Binary files a/icons/obj/doors/Doorplasma.dmi and b/icons/obj/doors/Doorplasma.dmi differ diff --git a/icons/obj/doors/Doorsand.dmi b/icons/obj/doors/Doorsand.dmi index 9c905d25442..6e94cd3b5b8 100644 Binary files a/icons/obj/doors/Doorsand.dmi and b/icons/obj/doors/Doorsand.dmi differ diff --git a/icons/obj/doors/Doorsec.dmi b/icons/obj/doors/Doorsec.dmi index b89c9a6f529..e9cf6c3ad15 100644 Binary files a/icons/obj/doors/Doorsec.dmi and b/icons/obj/doors/Doorsec.dmi differ diff --git a/icons/obj/doors/Doorsecglass.dmi b/icons/obj/doors/Doorsecglass.dmi index 1d6572b2835..14b6ac9f9c0 100644 Binary files a/icons/obj/doors/Doorsecglass.dmi and b/icons/obj/doors/Doorsecglass.dmi differ diff --git a/icons/obj/doors/Doorsilver.dmi b/icons/obj/doors/Doorsilver.dmi index fdae9d2ba06..56f9fb67210 100644 Binary files a/icons/obj/doors/Doorsilver.dmi and b/icons/obj/doors/Doorsilver.dmi differ diff --git a/icons/obj/doors/Dooruranium.dmi b/icons/obj/doors/Dooruranium.dmi index ca519e225b7..fecdb1bd075 100644 Binary files a/icons/obj/doors/Dooruranium.dmi and b/icons/obj/doors/Dooruranium.dmi differ diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi index 232a54da317..f8c1e979ff9 100644 Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ diff --git a/icons/obj/doors/doorint.dmi b/icons/obj/doors/doorint.dmi index 873a872bec2..7f07816ab9f 100644 Binary files a/icons/obj/doors/doorint.dmi and b/icons/obj/doors/doorint.dmi differ diff --git a/icons/obj/doors/doormed.dmi b/icons/obj/doors/doormed.dmi index 077c85937ea..a228ff0bcd9 100644 Binary files a/icons/obj/doors/doormed.dmi and b/icons/obj/doors/doormed.dmi differ diff --git a/icons/obj/doors/doormedglass.dmi b/icons/obj/doors/doormedglass.dmi index 16f8b93f31e..9d1ae0bcde5 100644 Binary files a/icons/obj/doors/doormedglass.dmi and b/icons/obj/doors/doormedglass.dmi differ diff --git a/icons/obj/doors/doorresearch.dmi b/icons/obj/doors/doorresearch.dmi index b0cd9a73f00..03d92b477cb 100644 Binary files a/icons/obj/doors/doorresearch.dmi and b/icons/obj/doors/doorresearch.dmi differ diff --git a/icons/obj/doors/doorresearchglass.dmi b/icons/obj/doors/doorresearchglass.dmi index f1ed3b2d25f..e882ba49fc8 100644 Binary files a/icons/obj/doors/doorresearchglass.dmi and b/icons/obj/doors/doorresearchglass.dmi differ diff --git a/icons/obj/doors/doorsci.dmi b/icons/obj/doors/doorsci.dmi index 1c4483bbff3..e7f660398bc 100644 Binary files a/icons/obj/doors/doorsci.dmi and b/icons/obj/doors/doorsci.dmi differ diff --git a/icons/obj/doors/doorsciglass.dmi b/icons/obj/doors/doorsciglass.dmi index fb038af5ed5..2752994fc67 100644 Binary files a/icons/obj/doors/doorsciglass.dmi and b/icons/obj/doors/doorsciglass.dmi differ diff --git a/icons/obj/doors/hightechsecurity.dmi b/icons/obj/doors/hightechsecurity.dmi index 22c4de5c8ea..4cbdc4391e1 100644 Binary files a/icons/obj/doors/hightechsecurity.dmi and b/icons/obj/doors/hightechsecurity.dmi differ diff --git a/icons/obj/doors/mineral_doors.dmi b/icons/obj/doors/mineral_doors.dmi index f0c0ea592e6..56d5a32bc59 100644 Binary files a/icons/obj/doors/mineral_doors.dmi and b/icons/obj/doors/mineral_doors.dmi differ diff --git a/icons/obj/doors/survival.dmi b/icons/obj/doors/survival.dmi index fcc10adaa17..81265f049f5 100644 Binary files a/icons/obj/doors/survival.dmi and b/icons/obj/doors/survival.dmi differ diff --git a/icons/obj/doors/vault.dmi b/icons/obj/doors/vault.dmi index 957e4c1d661..8e6e9cb134a 100644 Binary files a/icons/obj/doors/vault.dmi and b/icons/obj/doors/vault.dmi differ diff --git a/paradise.dme b/paradise.dme index 99bfb2cab03..334e5326f2d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -627,12 +627,12 @@ #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_control.dm" #include "code\game\machinery\doors\airlock_electronics.dm" +#include "code\game\machinery\doors\airlock_types.dm" #include "code\game\machinery\doors\alarmlock.dm" #include "code\game\machinery\doors\brigdoors.dm" #include "code\game\machinery\doors\checkForMultipleDoors.dm" #include "code\game\machinery\doors\door.dm" #include "code\game\machinery\doors\firedoor.dm" -#include "code\game\machinery\doors\multi_tile.dm" #include "code\game\machinery\doors\poddoor.dm" #include "code\game\machinery\doors\shutters.dm" #include "code\game\machinery\doors\spacepod.dm"