Merge pull request #8424 from uraniummeltdown/airlockoverlay

Airlock Overlays + Tweaks
This commit is contained in:
tigercat2000
2018-02-01 08:19:24 -08:00
committed by GitHub
137 changed files with 1637 additions and 1084 deletions
+5
View File
@@ -18,6 +18,11 @@
#define RWALL_SUPPORT_RODS 5
#define RWALL_SHEATH 6
//airlock assembly construction states
#define AIRLOCK_ASSEMBLY_NEEDS_WIRES 0
#define AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS 1
#define AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER 2
//plastic flaps construction states
#define PLASTIC_FLAPS_NORMAL 0
#define PLASTIC_FLAPS_DETACHED 1
+5
View File
@@ -5,6 +5,11 @@
// Mobs
#define ismegafauna(A) istype(A, /mob/living/simple_animal/hostile/megafauna)
//Simple animals
#define isshade(A) (istype(A, /mob/living/simple_animal/shade))
#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct))
//Objects
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable
+1 -1
View File
@@ -58,7 +58,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 512
if(A.isElectrified())
if(A.shock(L, 100))
return 0
if(A.p_open)
if(A.panel_open)
return 1
return 0
+4
View File
@@ -613,6 +613,10 @@ var/list/blood_splatter_icons = list()
/atom/proc/ratvar_act()
return
//This proc is called on the location of an atom when the atom is Destroy()'d
/atom/proc/handle_atom_del(atom/A)
return
/atom/proc/atom_say(message)
if(!message)
return
+2
View File
@@ -36,6 +36,8 @@
attempt_init()
/atom/movable/Destroy()
if(loc)
loc.handle_atom_del(src)
for(var/atom/movable/AM in contents)
qdel(AM)
var/turf/un_opaque
@@ -601,3 +601,12 @@ Congratulations! You are now trained for invasive xenobiology research!"}
icon_closed = "abductor"
icon_opened = "abductoropen"
material_drop = /obj/item/stack/sheet/mineral/abductor
/obj/structure/door_assembly/door_assembly_abductor
name = "alien airlock assembly"
icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi'
base_name = "alien airlock"
overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/abductor
material_type = /obj/item/stack/sheet/mineral/abductor
noglass = TRUE
+346 -173
View File
@@ -5,7 +5,7 @@
mend - mends a wire and makes any necessary state changes
canAIControl - 1 if the AI can control the airlock, 0 if not (then check canAIHack to see if it can hack in)
canAIHack - 1 if the AI can hack into the airlock to recover control, 0 if not. Also returns 0 if the AI does not *need* to hack it.
arePowerSystemsOn - 1 if the main or backup power are functioning, 0 if not. Does not check whether the power grid is charged or an APC has equipment on or anything like that. (Check (stat & NOPOWER) for that)
arePowerSystemsOn - 1 if the main or backup power are functioning, 0 if not.
requiresIDs - 1 if the airlock is requiring IDs, 0 if not
isAllPowerCut - 1 if the main and backup power both have cut wires.
regainMainPower - handles the effect of main power coming back on.
@@ -18,17 +18,24 @@
// Wires for the airlock are located in the datum folder, inside the wires datum folder.
#define AIRLOCK_CLOSED 1
#define AIRLOCK_CLOSING 2
#define AIRLOCK_OPEN 3
#define AIRLOCK_OPENING 4
#define AIRLOCK_DENY 5
#define AIRLOCK_EMAG 6
var/list/airlock_overlays = list()
/obj/machinery/door/airlock
name = "airlock"
icon = 'icons/obj/doors/doorint.dmi'
icon_state = "door_closed"
icon = 'icons/obj/doors/airlocks/station/public.dmi'
icon_state = "closed"
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/aiControlDisabled = FALSE //If TRUE, 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 = FALSE // if TRUE, this door can't be hacked by the AI
var/electrified_until = 0 // World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
var/main_power_lost_until = 0 //World time when main power is restored.
var/backup_power_lost_until = -1 //World time when backup power is restored.
@@ -44,11 +51,24 @@
var/obj/machinery/door/airlock/closeOther = null
var/closeOtherId = null
var/lockdownbyai = 0
var/mineral = null
var/justzap = 0
var/safe = 1
var/obj/item/weapon/airlock_electronics/electronics = null
var/hasShocked = 0 //Prevents multiple shocks from happening
var/obj/item/weapon/note //Any papers pinned to the airlock
var/previous_airlock = /obj/structure/door_assembly //what airlock assembly mineral plating was applied to
var/airlock_material = null //material of inner filling; if its an airlock with glass, this should be set to "glass"
var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi'
var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //Used for papers and photos pinned to the airlock
var/image/old_frame_overlay //keep those in order to prevent unnecessary updating
var/image/old_filling_overlay
var/image/old_lights_overlay
var/image/old_panel_overlay
var/image/old_weld_overlay
var/image/old_sparks_overlay
var/image/old_note_overlay
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
@@ -84,8 +104,9 @@ About the new airlock wires panel:
if(A.closeOtherId == closeOtherId && A != src)
closeOther = A
break
if(welded)
update_icon()
if(glass)
airlock_material = "glass"
update_icon()
/obj/machinery/door/airlock/Destroy()
QDEL_NULL(electronics)
@@ -99,8 +120,14 @@ About the new airlock wires panel:
if(electrified_timer)
deltimer(electrified_timer)
electrified_timer = null
qdel(note)
return ..()
/obj/machinery/door/airlock/handle_atom_del(atom/A)
if(A == note)
note = null
update_icon()
/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(isElectrified())
@@ -250,65 +277,182 @@ About the new airlock wires panel:
else
return 0
/obj/machinery/door/airlock/update_icon()
if(overlays)
overlays.Cut()
overlays = list()
if(emergency && arePowerSystemsOn())
overlays += image('icons/obj/doors/doorint.dmi', "elights")
if(density)
if(locked && lights)
icon_state = "door_locked"
else
icon_state = "door_closed"
if(p_open || welded)
if(p_open)
overlays += image(icon, "panel_open")
if(welded)
overlays += image(icon, "welded")
else
icon_state = "door_open"
/obj/machinery/door/airlock/update_icon(state=0, override=0)
if(operating && !override)
return
switch(state)
if(0)
if(density)
state = AIRLOCK_CLOSED
else
state = AIRLOCK_OPEN
icon_state = ""
if(AIRLOCK_OPEN, AIRLOCK_CLOSED)
icon_state = ""
if(AIRLOCK_DENY, AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG)
icon_state = "nonexistenticonstate" //MADNESS
set_airlock_overlays(state)
return
/obj/machinery/door/airlock/proc/set_airlock_overlays(state)
var/image/frame_overlay
var/image/filling_overlay
var/image/lights_overlay
var/image/panel_overlay
var/image/weld_overlay
var/image/sparks_overlay
var/image/note_overlay
var/notetype = note_type()
switch(state)
if(AIRLOCK_CLOSED)
frame_overlay = get_airlock_overlay("closed", icon)
if(airlock_material)
filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file)
else
filling_overlay = get_airlock_overlay("fill_closed", icon)
if(panel_open)
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
if(welded)
weld_overlay = get_airlock_overlay("welded", overlays_file)
if(lights)
if(locked)
lights_overlay = get_airlock_overlay("lights_bolts", overlays_file)
else if(emergency)
lights_overlay = get_airlock_overlay("lights_emergency", overlays_file)
if(note)
note_overlay = get_airlock_overlay(notetype, note_overlay_file)
if(AIRLOCK_DENY)
if(!arePowerSystemsOn())
return
frame_overlay = get_airlock_overlay("closed", icon)
if(airlock_material)
filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file)
else
filling_overlay = get_airlock_overlay("fill_closed", icon)
if(panel_open)
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
if(welded)
weld_overlay = get_airlock_overlay("welded", overlays_file)
lights_overlay = get_airlock_overlay("lights_denied", overlays_file)
if(note)
note_overlay = get_airlock_overlay(notetype, note_overlay_file)
if(AIRLOCK_EMAG)
frame_overlay = get_airlock_overlay("closed", icon)
sparks_overlay = get_airlock_overlay("sparks", overlays_file)
if(airlock_material)
filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file)
else
filling_overlay = get_airlock_overlay("fill_closed", icon)
if(panel_open)
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
if(welded)
weld_overlay = get_airlock_overlay("welded", overlays_file)
if(note)
note_overlay = get_airlock_overlay(notetype, note_overlay_file)
if(AIRLOCK_CLOSING)
frame_overlay = get_airlock_overlay("closing", icon)
if(airlock_material)
filling_overlay = get_airlock_overlay("[airlock_material]_closing", overlays_file)
else
filling_overlay = get_airlock_overlay("fill_closing", icon)
if(lights && arePowerSystemsOn())
lights_overlay = get_airlock_overlay("lights_closing", overlays_file)
if(panel_open)
panel_overlay = get_airlock_overlay("panel_closing", overlays_file)
if(note)
note_overlay = get_airlock_overlay("[notetype]_closing", note_overlay_file)
if(AIRLOCK_OPEN)
frame_overlay = get_airlock_overlay("open", icon)
if(airlock_material)
filling_overlay = get_airlock_overlay("[airlock_material]_open", overlays_file)
else
filling_overlay = get_airlock_overlay("fill_open", icon)
if(panel_open)
panel_overlay = get_airlock_overlay("panel_open", overlays_file)
if(note)
note_overlay = get_airlock_overlay("[notetype]_open", note_overlay_file)
if(AIRLOCK_OPENING)
frame_overlay = get_airlock_overlay("opening", icon)
if(airlock_material)
filling_overlay = get_airlock_overlay("[airlock_material]_opening", overlays_file)
else
filling_overlay = get_airlock_overlay("fill_opening", icon)
if(lights && arePowerSystemsOn())
lights_overlay = get_airlock_overlay("lights_opening", overlays_file)
if(panel_open)
panel_overlay = get_airlock_overlay("panel_opening", overlays_file)
if(note)
note_overlay = get_airlock_overlay("[notetype]_opening", note_overlay_file)
//doesn't use overlays.Cut() for performance reasons
if(frame_overlay != old_frame_overlay)
overlays -= old_frame_overlay
overlays += frame_overlay
old_frame_overlay = frame_overlay
if(filling_overlay != old_filling_overlay)
overlays -= old_filling_overlay
overlays += filling_overlay
old_filling_overlay = filling_overlay
if(lights_overlay != old_lights_overlay)
overlays -= old_lights_overlay
overlays += lights_overlay
old_lights_overlay = lights_overlay
if(panel_overlay != old_panel_overlay)
overlays -= old_panel_overlay
overlays += panel_overlay
old_panel_overlay = panel_overlay
if(weld_overlay != old_weld_overlay)
overlays -= old_weld_overlay
overlays += weld_overlay
old_weld_overlay = weld_overlay
if(sparks_overlay != old_sparks_overlay)
overlays -= old_sparks_overlay
overlays += sparks_overlay
old_sparks_overlay = sparks_overlay
if(note_overlay != old_note_overlay)
overlays -= old_note_overlay
overlays += note_overlay
old_note_overlay = note_overlay
/proc/get_airlock_overlay(icon_state, icon_file)
var/iconkey = "[icon_state][icon_file]"
if(airlock_overlays[iconkey])
return airlock_overlays[iconkey]
airlock_overlays[iconkey] = image(icon_file, icon_state)
return airlock_overlays[iconkey]
/obj/machinery/door/airlock/do_animate(animation)
switch(animation)
if("opening")
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
update_icon()
else
flick("door_opening", src)//[stat ? "_stat":]
update_icon()
update_icon(AIRLOCK_OPENING)
if("closing")
if(overlays)
overlays.Cut()
if(p_open)
spawn(2)
flick("o_door_closing", src)
update_icon()
else
flick("door_closing", src)
update_icon()
if("spark")
if(density)
flick("door_spark", src)
update_icon(AIRLOCK_CLOSING)
if("deny")
if(density && arePowerSystemsOn())
playsound(src, doorDeni, 50, 0, 3)
flick("door_deny", src)
return
if(!stat)
update_icon(AIRLOCK_DENY)
playsound(src,doorDeni,50,0,3)
sleep(6)
update_icon(AIRLOCK_CLOSED)
icon_state = "closed"
/obj/machinery/door/airlock/examine(mob/user)
..()
if(emagged)
to_chat(user, "<span class='warning'>Its access panel is smoking slightly.</span>")
if(note)
if(!in_range(user, src))
to_chat(user, "There's a [note.name] pinned to the front. You can't [note_type() == "note" ? "read" : "see"] it from here.")
else
to_chat(user, "There's a [note.name] pinned to the front...")
note.examine(user)
/obj/machinery/door/airlock/attack_ghost(mob/user)
if(p_open)
if(panel_open)
wires.Interact(user)
ui_interact(user)
@@ -354,7 +498,7 @@ About the new airlock wires panel:
aiHacking=0
return
else if(!canAIHack(user))
to_chat(user, "We've lost our connection! Unable to hack airlock.")
to_chat(user, "Connection lost! Unable to hack airlock.")
aiHacking=0
return
to_chat(user, "Fault confirmed: airlock control wire disabled or cut.")
@@ -366,7 +510,7 @@ About the new airlock wires panel:
aiHacking=0
return
else if(!canAIHack(user))
to_chat(user, "We've lost our connection! Unable to hack airlock.")
to_chat(user, "Connection lost! Unable to hack airlock.")
aiHacking=0
return
to_chat(user, "Upload access confirmed. Loading control program into airlock software.")
@@ -376,7 +520,7 @@ About the new airlock wires panel:
aiHacking=0
return
else if(!canAIHack(user))
to_chat(user, "We've lost our connection! Unable to hack airlock.")
to_chat(user, "Connection lost! Unable to hack airlock.")
aiHacking=0
return
to_chat(user, "Transfer complete. Forcing airlock to execute program.")
@@ -407,7 +551,7 @@ About the new airlock wires panel:
if(ishuman(user) && prob(40) && density)
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 60)
if(H.getBrainLoss() >= 60 && Adjacent(user))
playsound(loc, 'sound/effects/bang.ogg', 25, 1)
if(!istype(H.head, /obj/item/clothing/head/helmet))
visible_message("<span class='warning'>[user] headbutts the airlock.</span>")
@@ -420,7 +564,7 @@ About the new airlock wires panel:
visible_message("<span class='warning'>[user] headbutts the airlock. Good thing they're wearing a helmet.</span>")
return
if(p_open)
if(panel_open)
wires.Interact(user)
else
..(user)
@@ -463,9 +607,11 @@ About the new airlock wires panel:
if("main_power")
if(!main_power_lost_until)
loseMainPower()
update_icon()
if("backup_power")
if(!backup_power_lost_until)
loseBackupPower()
update_icon()
if("bolts")
if(isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
to_chat(usr, "The door bolt control wire has been cut - Door bolts permanently dropped.")
@@ -530,6 +676,7 @@ About the new airlock wires panel:
else if(activate && !lights)
lights = 1
to_chat(usr, "The door bolt lights have been enabled.")
update_icon()
if("emergency")
// Emergency access
if(emergency)
@@ -538,12 +685,10 @@ About the new airlock wires panel:
else
emergency = 1
to_chat(usr, "Emergency access has been enabled.")
update_icon()
update_icon()
return 1
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params)
// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user))
if(!issilicon(usr))
if(isElectrified())
if(shock(user, 75))
@@ -564,12 +709,19 @@ About the new airlock wires panel:
else
return
else if(isscrewdriver(C))
p_open = !p_open
to_chat(user, "<span class='notice'>You [p_open ? "open":"close"] the maintenance panel of the airlock.</span>")
panel_open = !panel_open
to_chat(user, "<span class='notice'>You [panel_open ? "open":"close"] the maintenance panel of the airlock.</span>")
playsound(loc, C.usesound, 50, 1)
update_icon()
else if(iswirecutter(C))
return attack_hand(user)
if(note)
user.visible_message("<span class='notice'>[user] cuts down [note] from [src].</span>", "<span class='notice'>You remove [note] from [src].</span>")
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1)
note.forceMove(get_turf(user))
note = null
update_icon()
else
return attack_hand(user)
else if(ismultitool(C))
return attack_hand(user)
else if(istype(C, /obj/item/device/assembly/signaler))
@@ -577,50 +729,30 @@ About the new airlock wires panel:
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/paper) || istype(C, /obj/item/weapon/photo))
if(note)
to_chat(user, "<span class='warning'>There's already something pinned to this airlock! Use wirecutters to remove it.</span>")
return
if(!user.unEquip(C))
to_chat(user, "<span class='warning'>For some reason, you can't attach [C]!</span>")
return
C.forceMove(src)
user.visible_message("<span class='notice'>[user] pins [C] to [src].</span>", "<span class='notice'>You pin [C] to [src].</span>")
note = C
update_icon()
else if(iscrowbar(C) || istype(C, /obj/item/weapon/twohanded/fireaxe))
var/beingcrowbarred = null
if(iscrowbar(C))
beingcrowbarred = 1 //derp, Agouri
else
beingcrowbarred = 0
if(beingcrowbarred && p_open && (emagged || (density && welded && (!operating || emagged) && !arePowerSystemsOn() && !locked)))
if(beingcrowbarred && panel_open && (emagged || (density && welded && !operating && !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, "<span class='notice'>You removed the airlock electronics!</span>")
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)
da.glass = mineral
//else if(glass)
else if(glass && !da.glass)
da.glass = 1
da.state = 1
da.created_name = name
da.update_state()
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
ae = new/obj/item/weapon/airlock_electronics(loc)
if(!req_access)
check_access()
if(req_access.len)
ae.conf_access = req_access
else if(req_one_access.len)
ae.conf_access = req_one_access
ae.one_access = 1
else
ae = electronics
electronics = null
ae.loc = loc
if(emagged)
ae.icon_state = "door_electronics_smoked"
operating = 0
qdel(src)
return
if(loc)
deconstruct(TRUE, user)
return
if(istype(C, /obj/item/weapon/crowbar/power) && density)
if(isElectrified())
shock(user, 100)//it's like sticking a fork in a power socket
@@ -677,66 +809,6 @@ About the new airlock wires panel:
..()
return
/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] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("Plasma wall ignited by [key_name(user)] in ([x],[y],[z])")
investigate_log("was <font color='red'><b>ignited</b></font> by [key_name(user)]","atmos")
ignite(is_hot(C))
..()
/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
@@ -750,7 +822,30 @@ About the new airlock wires panel:
playsound(loc, doorOpen, 30, 1)
if(closeOther != null && istype(closeOther, /obj/machinery/door/airlock/) && !closeOther.density)
closeOther.close()
return ..()
if(!density)
return TRUE
if(operating)
return
if(!ticker)
return 0
operating = TRUE
update_icon(AIRLOCK_OPENING, 1)
sleep(1)
set_opacity(0)
update_freelook_sight()
sleep(4)
density = FALSE
air_update_turf(1)
sleep(1)
layer = open_layer
update_icon(AIRLOCK_OPEN, 1)
operating = FALSE
// The `addtimer` system has the advantage of being cancelable
if(autoclose)
autoclose_timer = addtimer(src, "autoclose", normalspeed ? auto_close_time : auto_close_time_dangerous, unique = 1)
return TRUE
/obj/machinery/door/airlock/close(forced=0, override = 0)
if((operating & !override) || welded || locked || emagged)
@@ -778,28 +873,30 @@ About the new airlock wires panel:
killthis.ex_act(2)//Smashin windows
if(density)
return 1
operating = 1
do_animate("closing")
layer = 3.1
return TRUE
operating = TRUE
update_icon(AIRLOCK_CLOSING, 1)
layer = closed_layer
if(!override)
sleep(5)
density = 1
sleep(1)
density = TRUE
air_update_turf(1)
if(!override)
sleep(4)
if(!safe)
crush()
if(!override)
sleep(5)
update_icon()
if(visible && !glass)
set_opacity(1)
operating = 0
air_update_turf(1)
update_freelook_sight()
sleep(1)
update_icon(AIRLOCK_CLOSED, 1)
operating = FALSE
if(safe)
if(locate(/mob/living) in get_turf(src))
sleep(1)
open()
return
return TRUE
/obj/machinery/door/airlock/proc/lock(forced=0)
if(locked)
@@ -830,6 +927,19 @@ About the new airlock wires panel:
//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/emag_act(mob/user)
if(!operating && density && arePowerSystemsOn() && !emagged)
operating = TRUE
update_icon(AIRLOCK_EMAG, 1)
sleep(6)
if(qdeleted(src))
return
operating = FALSE
if(!open())
update_icon(AIRLOCK_CLOSED, 1)
emagged = TRUE
return 1
/obj/machinery/door/airlock/emp_act(severity)
if(prob(40/severity))
var/duration = world.time + SecondsToTicks(30 / severity)
@@ -872,8 +982,71 @@ About the new airlock wires panel:
open()
safe = TRUE
/obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user)
if(can_deconstruct)
var/obj/structure/door_assembly/DA
if(assemblytype)
DA = new assemblytype(loc)
else
DA = new /obj/structure/door_assembly(loc)
//If you come across a null assemblytype, it will produce the default assembly instead of disintegrating.
DA.heat_proof_finished = heat_proof //tracks whether there's rglass in
DA.anchored = TRUE
DA.glass = src.glass
DA.state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
DA.created_name = name
DA.previous_assembly = previous_airlock
DA.update_name()
DA.update_icon()
if(user)
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
ae = new/obj/item/weapon/airlock_electronics(loc)
if(!req_access)
check_access()
if(req_access.len)
ae.conf_access = req_access
else if(req_one_access.len)
ae.conf_access = req_one_access
ae.one_access = 1
else
ae = electronics
electronics = null
ae.forceMove(loc)
if(emagged)
ae.icon_state = "door_electronics_smoked"
operating = 0
qdel(src)
/obj/machinery/door/airlock/proc/note_type() //Returns a string representing the type of note pinned to this airlock
if(!note)
return
else if(istype(note, /obj/item/weapon/paper))
return "note"
else if(istype(note, /obj/item/weapon/photo))
return "photo"
/obj/machinery/door/airlock/narsie_act()
var/turf/T = get_turf(src)
var/obj/machinery/door/airlock/cult/A = new(T)
var/runed = prob(20)
var/obj/machinery/door/airlock/cult/A
if(glass)
if(runed)
A = new/obj/machinery/door/airlock/cult/glass(T)
else
A = new/obj/machinery/door/airlock/cult/unruned/glass(T)
else
if(runed)
A = new/obj/machinery/door/airlock/cult(T)
else
A = new/obj/machinery/door/airlock/cult/unruned(T)
A.name = name
qdel(src)
#undef AIRLOCK_CLOSED
#undef AIRLOCK_CLOSING
#undef AIRLOCK_OPEN
#undef AIRLOCK_OPENING
#undef AIRLOCK_DENY
#undef AIRLOCK_EMAG
+250 -89
View File
@@ -3,47 +3,52 @@
*/
/obj/machinery/door/airlock/command
icon = 'icons/obj/doors/Doorcom.dmi'
icon = 'icons/obj/doors/airlocks/station/command.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_com
/obj/machinery/door/airlock/security
icon = 'icons/obj/doors/Doorsec.dmi'
icon = 'icons/obj/doors/airlocks/station/security.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_sec
/obj/machinery/door/airlock/engineering
icon = 'icons/obj/doors/Dooreng.dmi'
icon = 'icons/obj/doors/airlocks/station/engineering.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_eng
/obj/machinery/door/airlock/medical
icon = 'icons/obj/doors/Doormed.dmi'
icon = 'icons/obj/doors/airlocks/station/medical.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_med
/obj/machinery/door/airlock/maintenance
name = "maintenance access"
icon = 'icons/obj/doors/Doormaint.dmi'
icon = 'icons/obj/doors/airlocks/station/maintenance.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_mai
/obj/machinery/door/airlock/maintenance/external
name = "external airlock access"
icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_extmai
/obj/machinery/door/airlock/mining
name = "mining airlock"
icon = 'icons/obj/doors/Doormining.dmi'
icon = 'icons/obj/doors/airlocks/station/mining.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_min
/obj/machinery/door/airlock/atmos
name = "atmospherics airlock"
icon = 'icons/obj/doors/Dooratmo.dmi'
icon = 'icons/obj/doors/airlocks/station/atmos.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_atmo
/obj/machinery/door/airlock/research
icon = 'icons/obj/doors/Doorresearch.dmi'
icon = 'icons/obj/doors/airlocks/station/research.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_research
/obj/machinery/door/airlock/freezer
name = "freezer airlock"
icon = 'icons/obj/doors/Doorfreezer.dmi'
icon = 'icons/obj/doors/airlocks/station/freezer.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_fre
/obj/machinery/door/airlock/science
icon = 'icons/obj/doors/Doorsci.dmi'
icon = 'icons/obj/doors/airlocks/station/science.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_science
//////////////////////////////////
@@ -51,53 +56,49 @@
Station Airlocks Glass
*/
/obj/machinery/door/airlock/glass_command
icon = 'icons/obj/doors/Doorcomglass.dmi'
/obj/machinery/door/airlock/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_com
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_engineering
icon = 'icons/obj/doors/Doorengglass.dmi'
/obj/machinery/door/airlock/command/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_eng
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_security
icon = 'icons/obj/doors/Doorsecglass.dmi'
/obj/machinery/door/airlock/engineering/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_sec
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_medical
icon = 'icons/obj/doors/Doormedglass.dmi'
/obj/machinery/door/airlock/security/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_med
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_research
icon = 'icons/obj/doors/Doorresearchglass.dmi'
/obj/machinery/door/airlock/medical/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_research
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_mining
icon = 'icons/obj/doors/Doorminingglass.dmi'
/obj/machinery/door/airlock/research/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_min
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_atmos
icon = 'icons/obj/doors/Dooratmoglass.dmi'
/obj/machinery/door/airlock/mining/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_atmo
glass = 1
glass = TRUE
/obj/machinery/door/airlock/glass_science
icon = 'icons/obj/doors/Doorsciglass.dmi'
/obj/machinery/door/airlock/atmos/glass
opacity = 0
assemblytype = /obj/structure/door_assembly/door_assembly_science
glass = 1
glass = TRUE
/obj/machinery/door/airlock/science/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/maintenance/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/maintenance/external/glass
opacity = 0
glass = TRUE
//////////////////////////////////
/*
@@ -106,24 +107,37 @@
/obj/machinery/door/airlock/gold
name = "gold airlock"
icon = 'icons/obj/doors/Doorgold.dmi'
mineral = "gold"
icon = 'icons/obj/doors/airlocks/station/gold.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_gold
/obj/machinery/door/airlock/gold/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/silver
name = "silver airlock"
icon = 'icons/obj/doors/Doorsilver.dmi'
mineral = "silver"
icon = 'icons/obj/doors/airlocks/station/silver.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_silver
/obj/machinery/door/airlock/silver/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/diamond
name = "diamond airlock"
icon = 'icons/obj/doors/Doordiamond.dmi'
mineral = "diamond"
icon = 'icons/obj/doors/airlocks/station/diamond.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_diamond
explosion_block = 2
/obj/machinery/door/airlock/diamond/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/uranium
name = "uranium airlock"
desc = "And they said I was crazy."
icon = 'icons/obj/doors/Dooruranium.dmi'
mineral = "uranium"
icon = 'icons/obj/doors/airlocks/station/uranium.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_uranium
var/event_step = 20
/obj/machinery/door/airlock/uranium/New()
@@ -136,11 +150,15 @@
L.apply_effect(15,IRRADIATE,0)
addtimer(src, "radiate", event_step)
/obj/machinery/door/airlock/uranium/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/plasma
name = "plasma airlock"
desc = "No way this can end badly."
icon = 'icons/obj/doors/Doorplasma.dmi'
mineral = "plasma"
icon = 'icons/obj/doors/airlocks/station/plasma.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_plasma
/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
@@ -152,23 +170,46 @@
/obj/machinery/door/airlock/plasma/proc/PlasmaBurn(temperature)
atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 500)
new/obj/structure/door_assembly(loc)
var/obj/structure/door_assembly/DA
DA = new /obj/structure/door_assembly(loc)
if(glass)
DA.glass = TRUE
if(heat_proof)
DA.heat_proof_finished = TRUE
DA.update_icon()
DA.update_name()
qdel(src)
/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] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("Plasma airlock ignited by [key_name(user)] in ([x],[y],[z])")
investigate_log("was <font color='red'><b>ignited</b></font> by [key_name(user)]","atmos")
ignite(is_hot(C))
..()
/obj/machinery/door/airlock/plasma/BlockSuperconductivity() //we don't stop the heat~
return 0
/obj/machinery/door/airlock/plasma/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/bananium
name = "bananium airlock"
icon = 'icons/obj/doors/Doorbananium.dmi'
mineral = "bananium"
desc = "Honkhonkhonk"
icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_bananium
doorOpen = 'sound/items/bikehorn.ogg'
doorClose = 'sound/items/bikehorn.ogg'
/obj/machinery/door/airlock/bananium/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/tranquillite
name = "tranquillite airlock"
icon = 'icons/obj/doors/Doorfreezer.dmi'
mineral = "tranquillite"
icon = 'icons/obj/doors/airlocks/station/freezer.dmi'
doorOpen = null // it's silent!
doorClose = null
doorDeni = null
@@ -177,21 +218,35 @@
/obj/machinery/door/airlock/sandstone
name = "sandstone airlock"
icon = 'icons/obj/doors/Doorsand.dmi'
mineral = "sandstone"
icon = 'icons/obj/doors/airlocks/station/sandstone.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_sandstone
/obj/machinery/door/airlock/sandstone/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/wood
name = "wooden airlock"
icon = 'icons/obj/doors/airlocks/station/wood.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_wood
/obj/machinery/door/airlock/wood/glass
opacity = 0
glass = TRUE
//////////////////////////////////
/*
Station2 Airlocks
*/
/obj/machinery/door/airlock/glass
name = "glass airlock"
icon = 'icons/obj/doors/Doorglass.dmi'
/obj/machinery/door/airlock/public
icon = 'icons/obj/doors/airlocks/station2/glass.dmi'
overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_public
/obj/machinery/door/airlock/public/glass
opacity = 0
glass = 1
doorOpen = 'sound/machines/windowdoor.ogg'
doorClose = 'sound/machines/windowdoor.ogg'
glass = TRUE
//////////////////////////////////
/*
@@ -200,19 +255,27 @@
/obj/machinery/door/airlock/external
name = "external airlock"
icon = 'icons/obj/doors/Doorext.dmi'
icon = 'icons/obj/doors/airlocks/external/external.dmi'
overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi'
note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_ext
doorOpen = 'sound/machines/airlock_ext_open.ogg'
doorClose = 'sound/machines/airlock_ext_close.ogg'
/obj/machinery/door/airlock/external/glass
opacity = 0
glass = TRUE
//////////////////////////////////
/*
CentCom Airlocks
*/
/obj/machinery/door/airlock/centcom
icon = 'icons/obj/doors/Doorele.dmi'
icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi'
opacity = 0
explosion_block = 2
assemblytype = /obj/structure/door_assembly/door_assembly_centcom
//////////////////////////////////
@@ -222,7 +285,8 @@
/obj/machinery/door/airlock/vault
name = "vault door"
icon = 'icons/obj/doors/vault.dmi'
icon = 'icons/obj/doors/airlocks/vault/vault.dmi'
overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_vault
explosion_block = 2
@@ -233,7 +297,9 @@
/obj/machinery/door/airlock/hatch
name = "airtight hatch"
icon = 'icons/obj/doors/Doorhatchele.dmi'
icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi'
overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_hatch
/obj/machinery/door/airlock/hatch/gamma
@@ -243,9 +309,37 @@
unacidable = 1
is_special = 1
/obj/machinery/door/airlock/hatch/gamma/attackby(obj/C, mob/user, params)
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))
welded = !welded
update_icon()
return
else
return
/obj/machinery/door/airlock/maintenance_hatch
name = "maintenance hatch"
icon = 'icons/obj/doors/Doorhatchmaint2.dmi'
icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi'
overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_mhatch
//////////////////////////////////
@@ -255,7 +349,8 @@
/obj/machinery/door/airlock/highsecurity
name = "high tech security airlock"
icon = 'icons/obj/doors/hightechsecurity.dmi'
icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi'
overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity
explosion_block = 2
@@ -264,6 +359,27 @@
hackProof = 1
aiControlDisabled = 1
/obj/machinery/door/airlock/highsecurity/red/attackby(obj/C, mob/user, params)
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
//////////////////////////////////
/*
Shuttle Airlocks
@@ -271,9 +387,25 @@
/obj/machinery/door/airlock/shuttle
name = "shuttle airlock"
icon = 'icons/obj/doors/doorshuttle.dmi'
icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi'
overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_shuttle
/obj/machinery/door/airlock/shuttle/glass
opacity = 0
glass = TRUE
/obj/machinery/door/airlock/abductor
name = "alien airlock"
desc = "With humanity's current technological level, it could take years to hack this advanced airlock... or maybe we should give a screwdriver a try?"
icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi'
overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi'
note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_abductor
explosion_block = 3
hackProof = TRUE
aiControlDisabled = 1
//////////////////////////////////
/*
Cult Airlocks
@@ -281,33 +413,35 @@
/obj/machinery/door/airlock/cult
name = "cult airlock"
icon = 'icons/obj/doors/doorcult.dmi'
icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi'
overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_cult
hackProof = 1
aiControlDisabled = 1
hackProof = TRUE
aiControlDisabled = TRUE
var/openingoverlaytype = /obj/effect/temp_visual/cult/door
var/friendly = FALSE
/obj/machinery/door/airlock/cult/New()
..()
new openingoverlaytype(loc)
/obj/machinery/door/airlock/cult/canAIControl(mob/user)
return (iscultist(user))
return (iscultist(user) && !isAllPowerLoss())
/obj/machinery/door/airlock/cult/allowed(mob/M)
/obj/machinery/door/airlock/cult/allowed(mob/living/L)
if(!density)
return 1
if(friendly || \
iscultist(M) || \
istype(M, /mob/living/simple_animal/shade) || \
istype(M, /mob/living/simple_animal/construct))
if(friendly || iscultist(L) || isshade(L)|| isconstruct(L))
new openingoverlaytype(loc)
return 1
else
new /obj/effect/temp_visual/cult/sac(loc)
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)
throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src)))
L << pick(sound('sound/hallucinations/turn_around1.ogg',0,1,50), sound('sound/hallucinations/turn_around2.ogg',0,1,50))
L.Weaken(2)
spawn(0)
M.throw_at(throwtarget, 5, 1,src)
L.throw_at(throwtarget, 5, 1,src)
return 0
/obj/machinery/door/airlock/cult/narsie_act()
@@ -316,6 +450,29 @@
/obj/machinery/door/airlock/cult/friendly
friendly = TRUE
/obj/machinery/door/airlock/cult/glass
glass = TRUE
opacity = 0
/obj/machinery/door/airlock/cult/glass/friendly
friendly = TRUE
/obj/machinery/door/airlock/cult/unruned
icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi'
overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_cult/unruned
openingoverlaytype = /obj/effect/temp_visual/cult/door/unruned
/obj/machinery/door/airlock/cult/unruned/friendly
friendly = TRUE
/obj/machinery/door/airlock/cult/unruned/glass
glass = TRUE
opacity = 0
/obj/machinery/door/airlock/cult/unruned/glass/friendly
friendly = TRUE
//////////////////////////////////
/*
Misc Airlocks
@@ -323,11 +480,15 @@
//Terribly sorry for the code doubling, but things go derpy otherwise.
/obj/machinery/door/airlock/multi_tile
name = "large airlock"
width = 2
icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi'
overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi'
assemblytype = "obj/structure/door_assembly/multi_tile"
/obj/machinery/door/airlock/multi_tile/narsie_act()
return
/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"
glass = TRUE
+2 -1
View File
@@ -1,6 +1,7 @@
/obj/machinery/door/airlock/alarmlock
name = "glass alarm airlock"
icon = 'icons/obj/doors/Doorglass.dmi'
icon = 'icons/obj/doors/airlocks/station2/glass.dmi'
overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi'
opacity = 0
glass = 1
autoclose = 0
+8 -12
View File
@@ -1,6 +1,3 @@
#define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
#define DOOR_CLOSED_LAYER 3.1 //Above most items if closed
/obj/machinery/door
name = "door"
desc = "It opens and closes."
@@ -9,12 +6,11 @@
anchored = 1
opacity = 1
density = 1
layer = DOOR_OPEN_LAYER
layer = OPEN_DOOR_LAYER
power_channel = ENVIRON
var/open_layer = DOOR_OPEN_LAYER
var/closed_layer = DOOR_CLOSED_LAYER
var/open_layer = OPEN_DOOR_LAYER
var/closed_layer = CLOSED_DOOR_LAYER
var/visible = 1
var/p_open = 0
var/operating = 0
var/autoclose = 0
var/autoclose_timer
@@ -36,9 +32,9 @@
/obj/machinery/door/New()
. = ..()
if(density)
layer = closed_layer
layer = closed_layer //Above most items if closed
else
layer = open_layer
layer = open_layer //Under all objects if opened. 2.7 due to tables being at 2.6
update_dir()
update_freelook_sight()
@@ -72,7 +68,7 @@
return ..()
/obj/machinery/door/Bumped(atom/AM)
if(p_open || operating || emagged)
if(panel_open || operating || emagged)
return
if(isliving(AM))
var/mob/living/M = AM
@@ -218,12 +214,12 @@
/obj/machinery/door/proc/do_animate(animation)
switch(animation)
if("opening")
if(p_open)
if(panel_open)
flick("o_doorc0", src)
else
flick("doorc0", src)
if("closing")
if(p_open)
if(panel_open)
flick("o_doorc1", src)
else
flick("doorc1", src)
+1 -1
View File
@@ -27,7 +27,7 @@
var/active_alarm = FALSE
/obj/machinery/door/firedoor/Bumped(atom/AM)
if(p_open || operating)
if(panel_open || operating)
return
if(!density)
return ..()
+4 -4
View File
@@ -262,17 +262,17 @@
to_chat(user, "<span class='warning'>You need to open the door to access the maintenance panel.</span>")
return
playsound(loc, I.usesound, 50, 1)
p_open = !p_open
to_chat(user, "<span class='notice'>You [p_open ? "open":"close"] the maintenance panel of the [name].</span>")
panel_open = !panel_open
to_chat(user, "<span class='notice'>You [panel_open ? "open":"close"] the maintenance panel of the [name].</span>")
return
if(iscrowbar(I))
if(p_open && !density && !operating)
if(panel_open && !density && !operating)
playsound(loc, I.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] removes the electronics from the [name].</span>", \
"You start to remove electronics from the [name].")
if(do_after(user, 40 * I.toolspeed, target = src))
if(p_open && !density && !operating && loc)
if(panel_open && !density && !operating && loc)
var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(loc)
switch(base_state)
if("left")
@@ -97,6 +97,7 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \
new/datum/stack_recipe("alien bed", /obj/structure/stool/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 20, one_per_turf = 1, on_floor = 1), \
null, \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \
)
@@ -61,6 +61,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
null,
new /datum/stack_recipe_list("airlock assemblies", list(
new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("public airlock assembly", /obj/structure/door_assembly/door_assembly_public, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1),
@@ -70,11 +71,12 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
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 maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_extmai, 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("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 8, time = 50, one_per_turf = 1, on_floor = 1),
)),
null,
new /datum/stack_recipe("mass driver button frame", /obj/item/mounted/frame/driver_button, 1, time = 50, one_per_turf = 0, on_floor = 1),
@@ -131,8 +133,8 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list(
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),
new /datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 6, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 6, time = 50, one_per_turf = 1, on_floor = 1),
), 4),
)
@@ -142,7 +144,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list(
desc = "This sheet is an alloy of iron and plasma."
icon_state = "sheet-plasteel"
item_state = "sheet-metal"
materials = list(MAT_METAL=6000, MAT_PLASMA=6000)
materials = list(MAT_METAL=2000, MAT_PLASMA=2000)
throwforce = 10.0
flags = CONDUCT
origin_tech = "materials=2"
+16 -12
View File
@@ -34,18 +34,22 @@ RCD
var/list/door_accesses_list = list()
var/one_access
var/locked = 1
var/static/list/allowed_door_types = list(/obj/machinery/door/airlock = "Standard",
/obj/machinery/door/airlock/command = "Command", /obj/machinery/door/airlock/security = "Security",
/obj/machinery/door/airlock/engineering = "Engineering", /obj/machinery/door/airlock/medical = "Medical",
/obj/machinery/door/airlock/maintenance = "Maintenance", /obj/machinery/door/airlock/external = "External",
/obj/machinery/door/airlock/glass = "Standard (Glass)", /obj/machinery/door/airlock/freezer = "Freezer",
/obj/machinery/door/airlock/glass_command = "Command (Glass)", /obj/machinery/door/airlock/glass_engineering = "Engineering (Glass)",
/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/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")
var/static/list/allowed_door_types = list(
/obj/machinery/door/airlock = "Standard", /obj/machinery/door/airlock/glass = "Standard (Glass)",
/obj/machinery/door/airlock/command = "Command", /obj/machinery/door/airlock/command/glass = "Command (Glass)",
/obj/machinery/door/airlock/security = "Security", /obj/machinery/door/airlock/security/glass = "Security (Glass)",
/obj/machinery/door/airlock/engineering = "Engineering", /obj/machinery/door/airlock/engineering/glass = "Engineering (Glass)",
/obj/machinery/door/airlock/medical = "Medical", /obj/machinery/door/airlock/medical/glass = "Medical (Glass)",
/obj/machinery/door/airlock/maintenance = "Maintenance", /obj/machinery/door/airlock/maintenance/glass = "Maintenance (Glass)",
/obj/machinery/door/airlock/external = "External", /obj/machinery/door/airlock/external/glass = "External (Glass)",
/obj/machinery/door/airlock/maintenance/external = "External Maintenance", /obj/machinery/door/airlock/maintenance/external/glass = "External Maintenance (Glass)",
/obj/machinery/door/airlock/freezer = "Freezer",
/obj/machinery/door/airlock/mining = "Mining", /obj/machinery/door/airlock/mining/glass = "Mining (Glass)",
/obj/machinery/door/airlock/research = "Research", /obj/machinery/door/airlock/research/glass = "Research (Glass)",
/obj/machinery/door/airlock/atmos = "Atmospherics", /obj/machinery/door/airlock/atmos/glass = "Atmospherics (Glass)",
/obj/machinery/door/airlock/science = "Science", /obj/machinery/door/airlock/science/glass = "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."
+179 -252
View File
@@ -1,186 +1,56 @@
/obj/structure/door_assembly
icon = 'icons/obj/doors/door_assembly.dmi'
name = "airlock assembly"
icon_state = "door_as_0"
anchored = 0
density = 1
var/state = 0
var/base_icon_state = ""
icon = 'icons/obj/doors/airlocks/station/public.dmi'
icon_state = "construction"
anchored = FALSE
density = TRUE
var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi'
var/state = AIRLOCK_ASSEMBLY_NEEDS_WIRES
var/mineral = null
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/airlock_type = /obj/machinery/door/airlock //the type path of the airlock once completed
var/glass_type = /obj/machinery/door/airlock/glass
var/glass = 0 // 0 = glass can be installed. 1 = glass is already installed.
var/created_name = null
var/heat_proof_finished = 0 //whether to heat-proof the finished airlock
var/previous_assembly = /obj/structure/door_assembly
var/noglass = FALSE //airlocks with no glass version, also cannot be modified with sheets
var/material_type = /obj/item/stack/sheet/metal
var/material_amt = 4
/obj/structure/door_assembly/New()
update_state()
update_icon()
update_name()
..()
/obj/structure/door_assembly/Destroy()
QDEL_NULL(electronics)
return ..()
/obj/structure/door_assembly/door_assembly_com
name = "command airlock assembly"
base_icon_state = "com"
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"
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"
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"
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"
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"
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"
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"
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"
airlock_type = "/maintenance"
glass = -1
/obj/structure/door_assembly/door_assembly_ext
name = "external airlock assembly"
base_icon_state = "ext"
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"
airlock_type = "/freezer"
glass = -1
/obj/structure/door_assembly/door_assembly_hatch
name = "airtight hatch assembly"
base_icon_state = "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"
airlock_type = "/maintenance_hatch"
glass = -1
/obj/structure/door_assembly/door_assembly_highsecurity
name = "high security airlock assembly"
base_icon_state = "highsec"
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"
airlock_type = "/shuttle"
glass = -1
/obj/structure/door_assembly/multi_tile
icon = 'icons/obj/doors/door_assembly2x1.dmi'
dir = EAST
var/width = 1
base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1.
airlock_type = "/multi_tile/glass"
glass = -1 //To prevent bugs in deconstruction process.
/obj/structure/door_assembly/multi_tile/New()
if(dir in list(EAST, WEST))
bound_width = width * world.icon_size
bound_height = world.icon_size
/obj/structure/door_assembly/examine(mob/user)
..()
var/doorname = ""
if(created_name)
doorname = ", written on it is '[created_name]'"
switch(state)
if(AIRLOCK_ASSEMBLY_NEEDS_WIRES)
if(anchored)
to_chat(user, "<span class='notice'>The anchoring bolts are <b>wrenched</b> in place, but the maintenance panel lacks <i>wiring</i>.</span>")
else
to_chat(user, "<span class='notice'>The assembly is <b>welded together</b>, but the anchoring bolts are <i>unwrenched</i>.</span>")
if(AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
to_chat(user, "<span class='notice'>The maintenance panel is <b>wired</b>, but the circuit slot is <i>empty</i>.</span>")
if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
to_chat(user, "<span class='notice'>The circuit is <b>connected loosely</b> to its slot, but the maintenance panel is <i>unscrewed and open</i>.</span>")
if(!mineral && !glass && !noglass)
to_chat(user, "<span class='notice'>There is a small <i>paper</i> placard on the assembly[doorname]. There are <i>empty</i> slots for glass windows and mineral covers.</span>")
else if(!mineral && glass && !noglass)
to_chat(user, "<span class='notice'>There is a small <i>paper</i> placard on the assembly[doorname]. There are <i>empty</i> slots for mineral covers.</span>")
else if(mineral && !glass && !noglass)
to_chat(user, "<span class='notice'>There is a small <i>paper</i> placard on the assembly[doorname]. There are <i>empty</i> slots for glass windows.</span>")
else
bound_width = world.icon_size
bound_height = width * world.icon_size
update_state()
/obj/structure/door_assembly/multi_tile/Move()
. = ..()
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/structure/door_assembly/door_assembly_cult
icon = 'icons/obj/doors/Doorcult.dmi'
base_icon_state = "construction"
base_name = "engraved airlock"
airlock_type = "/cult"
glass = -1
/obj/structure/door_assembly/door_assembly_cultruned
icon = 'icons/obj/doors/Doorcultruned.dmi'
base_icon_state = "construction"
base_name = "runed airlock"
airlock_type = "/cult/runed"
glass = -1
/obj/structure/door_assembly/door_assembly_centcom
base_icon_state = "ele"
airlock_type = "/centcom"
glass = -1
to_chat(user, "<span class='notice'>There is a small <i>paper</i> placard on the assembly[doorname].</span>")
/obj/structure/door_assembly/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/pen))
@@ -192,20 +62,22 @@
created_name = t
return
if(iswelder(W) && ((istext(glass)) || (glass == 1) || !anchored ))
else if(iswelder(W) && (mineral || glass || !anchored ))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
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...")
if(mineral)
var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]")
user.visible_message("[user] welds the [mineral] plating off the airlock assembly.", "You start to weld the [mineral] plating off the airlock assembly...")
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You weld the [glass] plating off.</span>")
var/M = text2path("/obj/item/stack/sheet/mineral/[glass]")
new M(loc, 2)
glass = 0
else if(glass == 1)
to_chat(user, "<span class='notice'>You weld the [mineral] plating off.</span>")
new mineral_path(loc, 2)
var/obj/structure/door_assembly/PA = new previous_assembly(loc)
transfer_assembly_vars(src, PA)
else if(glass)
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())
@@ -213,23 +85,23 @@
to_chat(user, "<span class='notice'>You weld the glass panel out.</span>")
if(heat_proof_finished)
new /obj/item/stack/sheet/rglass(get_turf(src))
heat_proof_finished = 0
heat_proof_finished = FALSE
else
new /obj/item/stack/sheet/glass(get_turf(src))
glass = 0
glass = FALSE
else if(!anchored)
user.visible_message("[user] disassembles the airlock assembly.", "You start to disassemble the airlock assembly...")
user.visible_message("<span class='warning'>[user] disassembles the airlock assembly.</span>", \
"You start to disassemble the airlock assembly...")
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You disassemble the airlock assembly.</span>")
new material_type(loc, material_amt)
qdel(src)
deconstruct(TRUE)
else
to_chat(user, "<span class='notice'>You need more welding fuel.</span>")
return
else if(iswrench(W) && state == 0)
else if(iswrench(W) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES)
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...")
@@ -242,51 +114,53 @@
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure the airlock assembly.</span>")
anchored = !anchored
else if(iscoil(W) && state == 0 && anchored)
else if(iscoil(W) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES && anchored)
var/obj/item/stack/cable_coil/coil = W
if (coil.amount < 1)
to_chat(user, "<span class='warning'>You need one length of cable to wire the airlock assembly!</span>")
return
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)
if(coil.amount < 1 || state != AIRLOCK_ASSEMBLY_NEEDS_WIRES)
return
coil.use(1)
state = 1
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
to_chat(user, "<span class='notice'>You wire the airlock assembly.</span>")
else if(iswirecutter(W) && state == 1)
else if(iswirecutter(W) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
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)
if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
return
to_chat(user, "<span class='notice'>You cut the wires from the airlock assembly.</span>")
if(state == 1)
new/obj/item/stack/cable_coil(loc, 1)
state = 0
new/obj/item/stack/cable_coil(get_turf(user), 1)
state = AIRLOCK_ASSEMBLY_NEEDS_WIRES
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 && W.icon_state != "door_electronics_smoked")
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && 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)
if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
return
user.drop_item()
W.loc = src
W.forceMove(src)
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
state = 2
state = AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER
name = "near finished airlock assembly"
electronics = W
else if(iscrowbar(W) && state == 2 )
else if(iscrowbar(W) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
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)
if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
return
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
state = 1
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
name = "wired airlock assembly"
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
@@ -294,78 +168,131 @@
else
ae = electronics
electronics = null
ae.loc = loc
ae.forceMove(loc)
else if(istype(W, /obj/item/stack/sheet) && !glass)
else if(istype(W, /obj/item/stack/sheet) && (!glass || !mineral))
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(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, "<span class='notice'>You install reinforced glass windows into the airlock assembly.</span>")
heat_proof_finished = 1 //reinforced glass makes the airlock heat-proof
else
to_chat(user, "<span class='notice'>You install regular glass windows into the airlock assembly.</span>")
S.use(1)
glass = 1
else if(istype(S, /obj/item/stack/sheet/mineral) && S.sheettype)
var/M = S.sheettype
if(S.amount>=2)
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, "<span class='notice'>You install [M] plating into the airlock assembly.</span>")
S.use(2)
glass = "[M]"
if(!noglass)
if(!glass)
if(istype(S, /obj/item/stack/sheet/rglass) || istype(S, /obj/item/stack/sheet/glass))
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.amount < 1 || glass)
return
if(S.type == /obj/item/stack/sheet/rglass)
to_chat(user, "<span class='notice'>You install reinforced glass windows into the airlock assembly.</span>")
heat_proof_finished = TRUE //reinforced glass makes the airlock heat-proof
else
to_chat(user, "<span class='notice'>You install regular glass windows into the airlock assembly.</span>")
S.use(1)
glass = TRUE
if(!mineral)
if(istype(S, /obj/item/stack/sheet/mineral) && S.sheettype)
var/M = S.sheettype
if(S.amount>=2)
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.amount < 2 || mineral)
return
to_chat(user, "<span class='notice'>You install [M] plating into the airlock assembly.</span>")
S.use(2)
var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]")
var/obj/structure/door_assembly/MA = new mineralassembly(loc)
transfer_assembly_vars(src, MA, TRUE)
else
to_chat(user, "<span class='warning'>You need at least two sheets add a mineral cover!</span>")
else
to_chat(user, "<span class='warning'>You cannot add [S] to [src]!</span>")
else
to_chat(user, "<span class='warning'>You cannot add [S] to [src]!</span>")
else if(isscrewdriver(W) && state == 2 )
else if(isscrewdriver(W) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] finishes the airlock.", \
"<span class='notice'>You start finishing the airlock...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src)
return
to_chat(user, "<span class='notice'>You finish the airlock.</span>")
var/path
if(istext(glass))
path = text2path("/obj/machinery/door/airlock/[glass]")
else if(glass == 1)
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(loc)
door.setDir(dir)
door.assemblytype = type
door.electronics = electronics
door.heat_proof = heat_proof_finished
if(electronics.one_access)
door.req_access = null
door.req_one_access = electronics.conf_access
else
door.req_access = electronics.conf_access
if(created_name)
door.name = created_name
else
door.name = "[istext(glass) ? "[glass] airlock" : base_name]"
electronics.loc = door
qdel(src)
if(loc && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
to_chat(user, "<span class='notice'>You finish the airlock.</span>")
var/obj/machinery/door/airlock/door
if(glass)
door = new glass_type(loc)
else
door = new airlock_type(loc)
door.setDir(dir)
door.electronics = electronics
door.heat_proof = heat_proof_finished
if(electronics.one_access)
door.req_access = null
door.req_one_access = electronics.conf_access
else
door.req_access = electronics.conf_access
if(created_name)
door.name = created_name
else
door.name = base_name
door.previous_airlock = previous_assembly
electronics.forceMove(door)
qdel(src)
else
..()
update_state()
update_name()
update_icon()
/obj/structure/door_assembly/proc/update_state()
icon_state = "door_as_[glass == 1 ? "g" : ""][istext(glass) ? glass : base_icon_state][state]"
/obj/structure/door_assembly/update_icon()
overlays.Cut()
if(!glass)
overlays += get_airlock_overlay("fill_construction", icon)
else if(glass)
overlays += get_airlock_overlay("glass_construction", overlays_file)
overlays += get_airlock_overlay("panel_c[state+1]", overlays_file)
/obj/structure/door_assembly/proc/update_name()
name = ""
switch(state)
if(0)
if(AIRLOCK_ASSEMBLY_NEEDS_WIRES)
if(anchored)
name = "secured "
if(1)
if(AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
name = "wired "
if(2)
if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
name = "near finished "
name += "[heat_proof_finished ? "heat-proofed " : ""][glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly"
name += "[heat_proof_finished ? "heat-proofed " : ""][glass ? "window " : ""][base_name] assembly"
/obj/structure/door_assembly/proc/transfer_assembly_vars(obj/structure/door_assembly/source, obj/structure/door_assembly/target, previous = FALSE)
target.glass = source.glass
target.heat_proof_finished = source.heat_proof_finished
target.created_name = source.created_name
target.state = source.state
target.anchored = source.anchored
if(previous)
target.previous_assembly = source.type
if(electronics)
target.electronics = source.electronics
source.electronics.forceMove(target)
target.update_icon()
target.update_name()
qdel(source)
/obj/structure/door_assembly/deconstruct(disassembled = TRUE)
if(can_deconstruct)
var/turf/T = get_turf(src)
if(!disassembled)
material_amt = rand(2,4)
new material_type(T, material_amt)
if(glass)
if(disassembled)
if(heat_proof_finished)
new /obj/item/stack/sheet/rglass(T)
else
new /obj/item/stack/sheet/glass(T)
else
new /obj/item/weapon/shard(T)
if(mineral)
var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]")
new mineral_path(T, 2)
qdel(src)
@@ -0,0 +1,255 @@
/obj/structure/door_assembly/door_assembly_public
name = "public airlock assembly"
icon = 'icons/obj/doors/airlocks/station2/glass.dmi'
overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi'
glass_type = /obj/machinery/door/airlock/public/glass
airlock_type = /obj/machinery/door/airlock/public
/obj/structure/door_assembly/door_assembly_com
name = "command airlock assembly"
icon = 'icons/obj/doors/airlocks/station/command.dmi'
base_name = "command airlock"
glass_type = /obj/machinery/door/airlock/command/glass
airlock_type = /obj/machinery/door/airlock/command
/obj/structure/door_assembly/door_assembly_sec
name = "security airlock assembly"
icon = 'icons/obj/doors/airlocks/station/security.dmi'
base_name = "security airlock"
glass_type = /obj/machinery/door/airlock/security/glass
airlock_type = /obj/machinery/door/airlock/security
/obj/structure/door_assembly/door_assembly_eng
name = "engineering airlock assembly"
icon = 'icons/obj/doors/airlocks/station/engineering.dmi'
base_name = "engineering airlock"
glass_type = /obj/machinery/door/airlock/engineering/glass
airlock_type = /obj/machinery/door/airlock/engineering
/obj/structure/door_assembly/door_assembly_min
name = "mining airlock assembly"
icon = 'icons/obj/doors/airlocks/station/mining.dmi'
base_name = "mining airlock"
glass_type = /obj/machinery/door/airlock/mining/glass
airlock_type = /obj/machinery/door/airlock/mining
/obj/structure/door_assembly/door_assembly_atmo
name = "atmospherics airlock assembly"
icon = 'icons/obj/doors/airlocks/station/atmos.dmi'
base_name = "atmospherics airlock"
glass_type = /obj/machinery/door/airlock/atmos/glass
airlock_type = /obj/machinery/door/airlock/atmos
/obj/structure/door_assembly/door_assembly_research
name = "research airlock assembly"
icon = 'icons/obj/doors/airlocks/station/research.dmi'
base_name = "research airlock"
glass_type = /obj/machinery/door/airlock/research/glass
airlock_type = /obj/machinery/door/airlock/research
/obj/structure/door_assembly/door_assembly_science
name = "science airlock assembly"
icon = 'icons/obj/doors/airlocks/station/science.dmi'
base_name = "science airlock"
glass_type = /obj/machinery/door/airlock/science/glass
airlock_type = /obj/machinery/door/airlock/science
/obj/structure/door_assembly/door_assembly_med
name = "medical airlock assembly"
icon = 'icons/obj/doors/airlocks/station/medical.dmi'
base_name = "medical airlock"
glass_type = /obj/machinery/door/airlock/medical/glass
airlock_type = /obj/machinery/door/airlock/medical
/obj/structure/door_assembly/door_assembly_mai
name = "maintenance airlock assembly"
icon = 'icons/obj/doors/airlocks/station/maintenance.dmi'
base_name = "maintenance airlock"
glass_type = /obj/machinery/door/airlock/maintenance/glass
airlock_type = /obj/machinery/door/airlock/maintenance
/obj/structure/door_assembly/door_assembly_extmai
name = "external maintenance airlock assembly"
icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi'
base_name = "external maintenance airlock"
glass_type = /obj/machinery/door/airlock/maintenance/external/glass
airlock_type = /obj/machinery/door/airlock/maintenance/external
/obj/structure/door_assembly/door_assembly_ext
name = "external airlock assembly"
icon = 'icons/obj/doors/airlocks/external/external.dmi'
base_name = "external airlock"
overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi'
glass_type = /obj/machinery/door/airlock/external/glass
airlock_type = /obj/machinery/door/airlock/external
/obj/structure/door_assembly/door_assembly_fre
name = "freezer airlock assembly"
icon = 'icons/obj/doors/airlocks/station/freezer.dmi'
base_name = "freezer airlock"
airlock_type = /obj/machinery/door/airlock/freezer
noglass = TRUE
/obj/structure/door_assembly/door_assembly_hatch
name = "airtight hatch assembly"
icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi'
base_name = "airtight hatch"
overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/hatch
noglass = TRUE
/obj/structure/door_assembly/door_assembly_mhatch
name = "maintenance hatch assembly"
icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi'
base_name = "maintenance hatch"
overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/maintenance_hatch
noglass = TRUE
/obj/structure/door_assembly/door_assembly_highsecurity
name = "high security airlock assembly"
icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi'
base_name = "high security airlock"
overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/highsecurity
noglass = TRUE
material_type = /obj/item/stack/sheet/plasteel
/obj/structure/door_assembly/door_assembly_vault
name = "vault door assembly"
icon = 'icons/obj/doors/airlocks/vault/vault.dmi'
base_name = "vault door"
overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/vault
noglass = TRUE
material_type = /obj/item/stack/sheet/plasteel
/obj/structure/door_assembly/door_assembly_shuttle
name = "shuttle airlock assembly"
icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi'
base_name = "shuttle airlock"
overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/shuttle
glass_type = /obj/machinery/door/airlock/shuttle/glass
/obj/structure/door_assembly/multi_tile
name = "large airlock assembly"
icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi'
base_name = "large airlock"
overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi'
dir = EAST
var/width = 1
airlock_type = /obj/machinery/door/airlock/multi_tile
glass_type = /obj/machinery/door/airlock/multi_tile/glass
material_amt = 8
/obj/structure/door_assembly/multi_tile/New()
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
update_icon()
/obj/structure/door_assembly/multi_tile/Move()
. = ..()
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/structure/door_assembly/door_assembly_cult
name = "cult airlock assembly"
icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi'
base_name = "cult airlock"
overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/cult
glass_type = /obj/machinery/door/airlock/cult/glass
/obj/structure/door_assembly/door_assembly_cult/unruned
icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi'
overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/cult/unruned
glass_type = /obj/machinery/door/airlock/cult/unruned/glass
/obj/structure/door_assembly/door_assembly_centcom
icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/centcom
noglass = TRUE
/obj/structure/door_assembly/door_assembly_gold
name = "gold airlock assembly"
icon = 'icons/obj/doors/airlocks/station/gold.dmi'
base_name = "gold airlock"
airlock_type = /obj/machinery/door/airlock/gold
mineral = "gold"
glass_type = /obj/machinery/door/airlock/gold/glass
/obj/structure/door_assembly/door_assembly_silver
name = "silver airlock assembly"
icon = 'icons/obj/doors/airlocks/station/silver.dmi'
base_name = "silver airlock"
airlock_type = /obj/machinery/door/airlock/silver
mineral = "silver"
glass_type = /obj/machinery/door/airlock/silver/glass
/obj/structure/door_assembly/door_assembly_diamond
name = "diamond airlock assembly"
icon = 'icons/obj/doors/airlocks/station/diamond.dmi'
base_name = "diamond airlock"
airlock_type = /obj/machinery/door/airlock/diamond
mineral = "diamond"
glass_type = /obj/machinery/door/airlock/diamond/glass
/obj/structure/door_assembly/door_assembly_uranium
name = "uranium airlock assembly"
icon = 'icons/obj/doors/airlocks/station/uranium.dmi'
base_name = "uranium airlock"
airlock_type = /obj/machinery/door/airlock/uranium
mineral = "uranium"
glass_type = /obj/machinery/door/airlock/uranium/glass
/obj/structure/door_assembly/door_assembly_plasma
name = "plasma airlock assembly"
icon = 'icons/obj/doors/airlocks/station/plasma.dmi'
base_name = "plasma airlock"
airlock_type = /obj/machinery/door/airlock/plasma
mineral = "plasma"
glass_type = /obj/machinery/door/airlock/plasma/glass
/obj/structure/door_assembly/door_assembly_bananium
name = "bananium airlock assembly"
desc = "Honk."
icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
base_name = "bananium airlock"
airlock_type = /obj/machinery/door/airlock/bananium
mineral = "bananium"
glass_type = /obj/machinery/door/airlock/bananium/glass
/obj/structure/door_assembly/door_assembly_tranquillite
name = "tranquillite airlock assembly"
icon = 'icons/obj/doors/airlocks/station/freezer.dmi'
base_name = "tranquillite airlock"
airlock_type = /obj/machinery/door/airlock/tranquillite
mineral = "tranquillite"
noglass = TRUE
/obj/structure/door_assembly/door_assembly_sandstone
name = "sandstone airlock assembly"
icon = 'icons/obj/doors/airlocks/station/sandstone.dmi'
base_name = "sandstone airlock"
airlock_type = /obj/machinery/door/airlock/sandstone
mineral = "sandstone"
glass_type = /obj/machinery/door/airlock/sandstone/glass
/obj/structure/door_assembly/door_assembly_wood
name = "wooden airlock assembly"
icon = 'icons/obj/doors/airlocks/station/wood.dmi'
base_name = "wooden airlock"
airlock_type = /obj/machinery/door/airlock/wood
mineral = "wood"
glass_type = /obj/machinery/door/airlock/wood/glass
+2 -2
View File
@@ -13,8 +13,8 @@
/turf/unsimulated/wall/fakedoor
name = "Centcom Access"
icon = 'icons/obj/doors/Doorele.dmi'
icon_state = "door_closed"
icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
icon_state = "closed"
/turf/unsimulated/wall/splashscreen
name = "Space Station 13"
+12 -5
View File
@@ -373,14 +373,21 @@
//Door
/obj/machinery/door/airlock/survival_pod
icon = 'icons/obj/doors/survival.dmi'
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_pod
opacity = 0
glass = 1
/obj/machinery/door/airlock/survival_pod/glass
opacity = FALSE
glass = TRUE
/obj/structure/door_assembly/door_assembly_pod
base_icon_state = "survival_pod"
glass_type = "/survival_pod"
name = "pod airlock assembly"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
base_name = "pod airlock"
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod
glass_type = /obj/machinery/door/airlock/survival_pod/glass
//Windoor
/obj/machinery/door/window/survival_pod
@@ -618,7 +618,7 @@
if(istype(D,/obj/machinery/door/airlock))
var/obj/machinery/door/airlock/AL = D
if(!AL.CanAStarPass(RPID)) // only crack open doors we can't get through
AL.p_open = 1
AL.panel_open = 1
AL.update_icon()
AL.shock(src, mistake_chance)
sleep(5)
@@ -638,7 +638,7 @@
if(prob(mistake_chance) && !AL.wires.IsIndexCut(AIRLOCK_WIRE_ELECTRIFY))
AL.wires.CutWireIndex(AIRLOCK_WIRE_ELECTRIFY)
sleep(5)
AL.p_open = 0
AL.panel_open = 0
AL.update_icon()
D.open()