diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 2bd0775f19..e176abc86c 100644
--- a/code/__defines/dcs/signals.dm
+++ b/code/__defines/dcs/signals.dm
@@ -488,6 +488,27 @@
///from base power_change() when power is restored
#define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored"
+// /obj/machinery/door signals
+
+//from /obj/machinery/door/can_open():
+#define COMSIG_DOOR_CAN_OPEN "attempt_door_open"
+ /// Return to stop the door opening
+ #define DOOR_DENY_OPEN (1<<0)
+//from /obj/machinery/door/can_close():
+#define COMSIG_DOOR_CAN_CLOSE "attempt_door_close"
+ /// Return to stop the door closing
+ #define DOOR_DENY_CLOSE (1<<0)
+//from /obj/machinery/door/open(): (forced)
+#define COMSIG_DOOR_OPEN "door_open"
+//from /obj/machinery/door/close(): (forced)
+#define COMSIG_DOOR_CLOSE "door_close"
+///from /obj/machinery/door/airlock/set_bolt():
+#define COMSIG_AIRLOCK_SET_BOLT "airlock_set_bolt"
+///from /obj/machinery/door/bumpopen(), to the mob who bumped: (door)
+#define COMSIG_MOB_BUMPED_DOOR_OPEN "mob_bumped_door_open"
+ /// Return to stop the door opening on bump.
+ #define DOOR_STOP_BUMP (1<<0)
+
// /obj/item signals
///from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm
index d57d6615aa..98d62e8397 100644
--- a/code/_helpers/game.dm
+++ b/code/_helpers/game.dm
@@ -641,12 +641,6 @@
temps[direction] = rstats
return temps
-/proc/MinutesToTicks(var/minutes)
- return SecondsToTicks(60 * minutes)
-
-/proc/SecondsToTicks(var/seconds)
- return seconds * 10
-
///Flash the window of a player
/proc/window_flash(client/flashed_client, ignorepref = FALSE)
if(ismob(flashed_client))
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index d065965a52..f4c605226f 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -627,8 +627,73 @@
if(isAI(usr))
var/mob/living/silicon/ai/ai_user = usr
ai_user.view_images()
- else
- return attempt_vr(src,"Click_vr",list(location,control,params))
+
+ if("shadekin status")
+ var/turf/T = get_turf(usr)
+ if(T)
+ var/darkness = round(1 - T.get_lumcount(),0.1)
+ to_chat(usr,span_notice(span_bold("Darkness:") + " [darkness]"))
+ var/mob/living/H = usr
+ if(ismob(H))
+ var/datum/component/shadekin/SK = H.get_shadekin_component()
+ if(SK)
+ to_chat(usr,span_notice(span_bold("Energy:") + " [SK.shadekin_get_energy()]"))
+
+ if("glamour")
+ var/mob/living/carbon/human/H = usr
+ if(istype(H))
+ to_chat(usr,span_notice(span_bold("Energy:") + " [H.species.lleill_energy]/[H.species.lleill_energy_max]"))
+
+ if("danger level")
+ var/mob/living/carbon/human/H = usr
+ var/datum/component/xenochimera/xc = H.get_xenochimera_component()
+ if(xc)
+ if(xc.feral > 50)
+ to_chat(usr, span_warning("You are currently completely feral."))
+ else if(xc.feral > 10)
+ to_chat(usr, span_warning("You are currently crazed and confused."))
+ else if(xc.feral > 0)
+ to_chat(usr, span_warning("You are currently acting on instinct."))
+ else
+ to_chat(usr, span_notice("You are currently calm and collected."))
+ if(xc.feral > 0)
+ var/feral_passing = TRUE
+ if(H.traumatic_shock > min(60, H.nutrition/10))
+ to_chat(usr, span_warning("Your pain prevents you from regaining focus."))
+ feral_passing = FALSE
+ if(xc.feral + H.nutrition < 150)
+ to_chat(usr, span_warning("Your hunger prevents you from regaining focus."))
+ feral_passing = FALSE
+ if(H.get_jittery() >= 100)
+ to_chat(usr, span_warning("Your jitterness prevents you from regaining focus."))
+ feral_passing = FALSE
+ if(feral_passing)
+ var/turf/T = get_turf(H)
+ if(T.get_lumcount() <= 0.1)
+ to_chat(usr, span_notice("You are slowly calming down in darkness' safety..."))
+ else if(isbelly(H.loc)) // Safety message for if inside a belly.
+ to_chat(usr, span_notice("You are slowly calming down within the darkness of something's belly, listening to their body as it moves around you. ...safe..."))
+ else
+ to_chat(usr, span_notice("You are slowly calming down... But safety of darkness is much preferred."))
+ else
+ if(H.nutrition < 150)
+ to_chat(usr, span_warning("Your hunger is slowly making you unstable."))
+
+ if("Reconstructing Form") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
+ var/mob/living/carbon/human/H = usr
+ var/datum/component/xenochimera/xc = H.get_xenochimera_component()
+ if(xc) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
+ if(xc.revive_ready == REVIVING_NOW)
+ to_chat(usr, span_notice("We are currently reviving, and will be done in [round((xc.revive_finished - world.time) / 10)] seconds, or [round(((xc.revive_finished - world.time) * 0.1) / 60)] minutes."))
+ else if(xc.revive_ready == REVIVING_DONE)
+ to_chat(usr, span_warning("You should have a notification + alert for this! Bug report that this is still here!"))
+
+ if("Ready to Hatch") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
+ var/mob/living/carbon/human/H = usr
+ var/datum/component/xenochimera/xc = H.get_xenochimera_component()
+ if(xc) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
+ if(xc.revive_ready == REVIVING_DONE) // Sanity check.
+ H.hatch() // Hatch.
return 1
/atom/movable/screen/inventory/Click()
diff --git a/code/_onclick/hud/screen_objects_vr.dm b/code/_onclick/hud/screen_objects_vr.dm
deleted file mode 100644
index 925b270b32..0000000000
--- a/code/_onclick/hud/screen_objects_vr.dm
+++ /dev/null
@@ -1,71 +0,0 @@
-/atom/movable/screen/proc/Click_vr(location, control, params)
- if(!usr) return 1
- switch(name)
- if("shadekin status")
- var/turf/T = get_turf(usr)
- if(T)
- var/darkness = round(1 - T.get_lumcount(),0.1)
- to_chat(usr,span_notice(span_bold("Darkness:") + " [darkness]"))
- var/mob/living/H = usr
- if(ismob(H))
- var/datum/component/shadekin/SK = H.get_shadekin_component()
- if(SK)
- to_chat(usr,span_notice(span_bold("Energy:") + " [SK.shadekin_get_energy()]"))
- if("glamour")
- var/mob/living/carbon/human/H = usr
- if(istype(H))
- to_chat(usr,span_notice(span_bold("Energy:") + " [H.species.lleill_energy]/[H.species.lleill_energy_max]"))
- if("danger level")
- var/mob/living/carbon/human/H = usr
- var/datum/component/xenochimera/xc = H.get_xenochimera_component()
- if(xc)
- if(xc.feral > 50)
- to_chat(usr, span_warning("You are currently completely feral."))
- else if(xc.feral > 10)
- to_chat(usr, span_warning("You are currently crazed and confused."))
- else if(xc.feral > 0)
- to_chat(usr, span_warning("You are currently acting on instinct."))
- else
- to_chat(usr, span_notice("You are currently calm and collected."))
- if(xc.feral > 0)
- var/feral_passing = TRUE
- if(H.traumatic_shock > min(60, H.nutrition/10))
- to_chat(usr, span_warning("Your pain prevents you from regaining focus."))
- feral_passing = FALSE
- if(xc.feral + H.nutrition < 150)
- to_chat(usr, span_warning("Your hunger prevents you from regaining focus."))
- feral_passing = FALSE
- if(H.get_jittery() >= 100)
- to_chat(usr, span_warning("Your jitterness prevents you from regaining focus."))
- feral_passing = FALSE
- if(feral_passing)
- var/turf/T = get_turf(H)
- if(T.get_lumcount() <= 0.1)
- to_chat(usr, span_notice("You are slowly calming down in darkness' safety..."))
- else if(isbelly(H.loc)) // Safety message for if inside a belly.
- to_chat(usr, span_notice("You are slowly calming down within the darkness of something's belly, listening to their body as it moves around you. ...safe..."))
- else
- to_chat(usr, span_notice("You are slowly calming down... But safety of darkness is much preferred."))
- else
- if(H.nutrition < 150)
- to_chat(usr, span_warning("Your hunger is slowly making you unstable."))
- if("Reconstructing Form") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
- var/mob/living/carbon/human/H = usr
- var/datum/component/xenochimera/xc = H.get_xenochimera_component()
- if(xc) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
- if(xc.revive_ready == REVIVING_NOW)
- to_chat(usr, span_notice("We are currently reviving, and will be done in [round((xc.revive_finished - world.time) / 10)] seconds, or [round(((xc.revive_finished - world.time) * 0.1) / 60)] minutes."))
- else if(xc.revive_ready == REVIVING_DONE)
- to_chat(usr, span_warning("You should have a notification + alert for this! Bug report that this is still here!"))
-
- if("Ready to Hatch") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
- var/mob/living/carbon/human/H = usr
- var/datum/component/xenochimera/xc = H.get_xenochimera_component()
- if(xc) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
- if(xc.revive_ready == REVIVING_DONE) // Sanity check.
- H.hatch() // Hatch.
-
- else
- return 0
-
- return 1
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index ba18e153c1..71c2096eba 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -65,7 +65,8 @@ avoid code duplication. This includes items that may sometimes act as a standard
if(can_operate(src, user) && I.do_surgery(src,user))
return TRUE
- if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Add - The vore, of course.
+ if(vore_attackby(I, user)) // The vore, of course.
+ return
return I.attack(src, user, user.zone_sel.selecting, attack_modifier)
diff --git a/code/controllers/subsystems/events.dm b/code/controllers/subsystems/events.dm
index cc5e950913..25dcebb81f 100644
--- a/code/controllers/subsystems/events.dm
+++ b/code/controllers/subsystems/events.dm
@@ -88,7 +88,7 @@ SUBSYSTEM_DEF(events)
if(E.isRunning)
message += "and is still running."
else
- if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes
+ if(E.endedAt - E.startedAt > 5 MINUTES) // Only mention end time if the entire duration was more than 5 minutes
message += "and ended at [worldtime2stationtime(E.endedAt)]."
else
message += "and ran to completion."
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 563cd816ad..458e86bdee 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -124,7 +124,8 @@ GLOBAL_LIST_INIT(bluespace_item_types, list(
var/mob/living/L = teleatom
if(L.buckled)
C = L.buckled
- if(attempt_vr(src,"try_televore",args)) return
+ if(try_televore())
+ return
if(force_teleport)
teleatom.forceMove(destturf)
playSpecials(destturf,effectout,soundout)
diff --git a/code/datums/helper_datums/teleport_vr.dm b/code/datums/helper_datums/teleport_vr.dm
index bf98361151..6a9f1a11cc 100644
--- a/code/datums/helper_datums/teleport_vr.dm
+++ b/code/datums/helper_datums/teleport_vr.dm
@@ -10,7 +10,7 @@
return
/datum/teleport/instant/science/noeffect/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout)
- return 1
+ return TRUE
/datum/teleport/proc/try_televore()
//Destination is in a belly
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 911f1dc22b..7104cf073e 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -723,9 +723,6 @@
/atom/movable/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
return
-/atom/movable/proc/Bump_vr(var/atom/A, yes)
- return
-
/atom/movable/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION("", "---------")
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index ce920e2d19..d988e472c5 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -156,13 +156,21 @@ GLOBAL_VAR_INIT(meteor_wave_delay, 625) //minimum wait between waves in tenths o
SpinAnimation()
/obj/effect/meteor/Bump(atom/A)
- if(attempt_vr(src,"Bump_vr",list(A))) return //VOREStation Edit - allows meteors to be deflected by baseball bats
- if(A)
- if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield.
- ram_turf(get_turf(A))
- get_hit()
- else
- die(FALSE)
+ if(!A)
+ return
+ if(istype(A, /mob/living/carbon))
+ var/mob/living/carbon/batter = A
+ var/obj/item/I = batter.get_active_hand()
+ if(!batter.stat && istype(I, /obj/item/material/twohanded/baseballbat))
+ batter.do_attack_animation(src)
+ batter.visible_message("[batter] deflects [src] with [I]]! Home run!", "You deflect [src] with [I]! Home run!")
+ walk_away(src, batter, 100, 1)
+ return
+ if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield.
+ ram_turf(get_turf(A))
+ get_hit()
+ return
+ die(FALSE)
/obj/effect/meteor/CanPass(atom/movable/mover, turf/target)
return istype(mover, /obj/effect/meteor) ? TRUE : ..()
diff --git a/code/game/gamemodes/meteor/meteors_vr.dm b/code/game/gamemodes/meteor/meteors_vr.dm
deleted file mode 100644
index 52e9ebf1ce..0000000000
--- a/code/game/gamemodes/meteor/meteors_vr.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/obj/effect/meteor/Bump_vr(atom/A)//BATTER UP
- if(istype(A, /mob/living/carbon))
- var/mob/living/carbon/batter = A
- var/obj/item/I = batter.get_active_hand()
- if(!batter.stat && istype(I, /obj/item/material/twohanded/baseballbat))
- batter.do_attack_animation(src)
- batter.visible_message("[batter] deflects [src] with [I]]! Home run!", "You deflect [src] with [I]! Home run!")
- walk_away(src, batter, 100, 1)
- return TRUE
- return
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index dbfbf5df00..63c4f288fe 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -374,7 +374,7 @@
occupantData["nearsighted"] = (H.disabilities & NEARSIGHTED)
occupantData["brokenspine"] = (H.disabilities & SPINE)
occupantData["husked"] = (HUSK in H.mutations)
- occupantData = attempt_vr(src, "get_occupant_data_vr", list(occupantData, H))
+ occupantData = get_vored_occupant_data(occupantData, H)
data["occupant"] = occupantData
return data
diff --git a/code/game/machinery/adv_med_vr.dm b/code/game/machinery/adv_med_vr.dm
index 564a717a13..dffd6806c3 100644
--- a/code/game/machinery/adv_med_vr.dm
+++ b/code/game/machinery/adv_med_vr.dm
@@ -7,7 +7,7 @@
icon_state = "scanner_terminal_off"
density = TRUE
-/obj/machinery/bodyscanner/proc/get_occupant_data_vr(list/incoming, mob/living/carbon/human/H)
+/obj/machinery/bodyscanner/proc/get_vored_occupant_data(list/incoming, mob/living/carbon/human/H)
var/humanprey = 0
var/livingprey = 0
var/objectprey = 0
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 780e5114bd..b78fc28f52 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -384,7 +384,7 @@
despawn_occupant(M)
// VOREStation
- hook_vr("despawn", list(to_despawn, src))
+ persist_despawned_mob(to_despawn, src)
if(isliving(to_despawn))
var/mob/living/L = to_despawn
for(var/obj/belly/B as anything in L.vore_organs)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 6c3dea98d3..65643e74fc 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -28,10 +28,10 @@
var/has_beeped = 0 //If 1, will not beep on failed closing attempt. Resets when door closes.
var/spawnPowerRestoreRunning = 0
var/welded = null
- var/locked = 0
+ var/locked = FALSE
var/lights = 1 // bolt lights show by default
var/aiDisabledIdScanner = 0
- var/aiHacking = 0
+ var/aiHacking = FALSE
var/obj/machinery/door/airlock/closeOther = null
var/closeOtherId = null
var/lockdownbyai = 0
@@ -65,20 +65,20 @@
/obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage)
if(stat & (BROKEN|NOPOWER))
if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
- if(src.locked || src.welded)
+ if(locked || welded)
visible_message(span_danger("\The [user] begins breaking into \the [src] internals!"))
user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything.
if(do_after(user, 10 SECONDS, target = src))
- src.locked = 0
- src.welded = 0
+ locked = FALSE
+ welded = FALSE
update_icon()
- open(1)
+ open(TRUE)
if(prob(25))
- src.shock(user, 100)
+ shock(user, 100)
user.set_AI_busy(FALSE)
- else if(src.density)
+ else if(density)
visible_message(span_danger("\The [user] forces \the [src] open!"))
- open(1)
+ open(TRUE)
else
visible_message(span_danger("\The [user] forces \the [src] closed!"))
close(1)
@@ -88,420 +88,41 @@
..()
/obj/machinery/door/airlock/attack_alien(var/mob/user) //Familiar, right? Doors. -Mechoid
- if(ishuman(user))
- var/mob/living/carbon/human/X = user
- if(istype(X.species, /datum/species/xenos))
- if(src.locked || src.welded)
- visible_message(span_alium("\The [user] begins tearing into \the [src] internals!"))
- src.do_animate("deny")
- if(do_after(user, 15 SECONDS, target = src))
- visible_message(span_danger("\The [user] tears \the [src] open, sparks flying from its electronics!"))
- src.do_animate("spark")
- playsound(src, 'sound/machines/door/airlock_tear_apart.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS)
- src.locked = 0
- src.welded = 0
- update_icon()
- open(1)
- src.set_broken() //These aren't emags, these be CLAWS
- else if(src.density)
- visible_message(span_alium("\The [user] begins forcing \the [src] open!"))
- if(do_after(user, 5 SECONDS, target = src))
- playsound(src, 'sound/machines/door/airlock_creaking.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS)
- visible_message(span_danger("\The [user] forces \the [src] open!"))
- open(1)
- else
- visible_message(span_danger("\The [user] forces \the [src] closed!"))
- close(1)
+ if(!ishuman(user))
+ return ..()
+ var/mob/living/carbon/human/X = user
+ if(istype(X.species, /datum/species/xenos))
+ if(locked || welded)
+ visible_message(span_alium("\The [user] begins tearing into \the [src] internals!"))
+ do_animate("deny")
+ if(do_after(user, 15 SECONDS, target = src))
+ visible_message(span_danger("\The [user] tears \the [src] open, sparks flying from its electronics!"))
+ do_animate("spark")
+ playsound(src, 'sound/machines/door/airlock_tear_apart.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS)
+ locked = FALSE
+ welded = FALSE
+ update_icon()
+ open(TRUE)
+ set_broken() //These aren't emags, these be CLAWS
+ else if(density)
+ visible_message(span_alium("\The [user] begins forcing \the [src] open!"))
+ if(do_after(user, 5 SECONDS, target = src))
+ playsound(src, 'sound/machines/door/airlock_creaking.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS)
+ visible_message(span_danger("\The [user] forces \the [src] open!"))
+ open(TRUE)
else
- src.do_animate("deny")
- visible_message(span_notice("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"]."))
- return
- ..()
+ visible_message(span_danger("\The [user] forces \the [src] closed!"))
+ close(1)
+ else
+ do_animate("deny")
+ visible_message(span_notice("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"]."))
+ return
/obj/machinery/door/airlock/get_material()
if(mineral)
return get_material_by_name(mineral)
return get_material_by_name(MAT_STEEL)
-/obj/machinery/door/airlock/command
- name = "Command Airlock"
- icon = 'icons/obj/doors/Doorcom.dmi'
- req_one_access = list(ACCESS_HEADS)
- assembly_type = /obj/structure/door_assembly/door_assembly_com
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/cmd3o.ogg'
- department_close_powered = 'sound/machines/door/cmd3c.ogg'
- security_level = 3
-
-/obj/machinery/door/airlock/security
- name = "Security Airlock"
- icon = 'icons/obj/doors/Doorsec.dmi'
- req_one_access = list(ACCESS_SECURITY)
- assembly_type = /obj/structure/door_assembly/door_assembly_sec
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/sec1o.ogg'
- department_close_powered = 'sound/machines/door/sec1c.ogg'
- security_level = 2
-
-/obj/machinery/door/airlock/engineering
- name = "Engineering Airlock"
- icon = 'icons/obj/doors/Dooreng.dmi'
- req_one_access = list(ACCESS_ENGINE)
- assembly_type = /obj/structure/door_assembly/door_assembly_eng
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/eng1o.ogg'
- department_close_powered = 'sound/machines/door/eng1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/engineeringatmos
- name = "Atmospherics Airlock"
- icon = 'icons/obj/doors/Doorengatmos.dmi'
- req_one_access = list(ACCESS_ATMOSPHERICS)
- assembly_type = /obj/structure/door_assembly/door_assembly_eat
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/eng1o.ogg'
- department_close_powered = 'sound/machines/door/eng1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/medical
- name = "Medical Airlock"
- icon = 'icons/obj/doors/doormed.dmi'
- req_one_access = list(ACCESS_MEDICAL)
- assembly_type = /obj/structure/door_assembly/door_assembly_med
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/med1o.ogg'
- department_close_powered = 'sound/machines/door/med1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/maintenance
- name = "Maintenance Access"
- icon = 'icons/obj/doors/Doormaint.dmi'
- //req_one_access = list(ACCESS_MAINT_TUNNELS) //Maintenance is open access
- assembly_type = /obj/structure/door_assembly/door_assembly_mai
- open_sound_powered = 'sound/machines/door/door2o.ogg'
- close_sound_powered = 'sound/machines/door/door2c.ogg'
-
-/obj/machinery/door/airlock/maintenance/cargo
- icon = 'icons/obj/doors/Doormaint_cargo.dmi'
- req_one_access = list(ACCESS_CARGO)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/door2o.ogg'
- department_close_powered = 'sound/machines/door/door2c.ogg'
-
-/obj/machinery/door/airlock/maintenance/command
- icon = 'icons/obj/doors/Doormaint_command.dmi'
- req_one_access = list(ACCESS_HEADS)
-
-/obj/machinery/door/airlock/maintenance/common
- icon = 'icons/obj/doors/Doormaint_common.dmi'
- open_sound_powered = 'sound/machines/door/hall3o.ogg'
- close_sound_powered = 'sound/machines/door/hall3c.ogg'
-
-/obj/machinery/door/airlock/maintenance/engi
- icon = 'icons/obj/doors/Doormaint_engi.dmi'
- req_one_access = list(ACCESS_ENGINE)
-
-/obj/machinery/door/airlock/maintenance/int
- icon = 'icons/obj/doors/Doormaint_int.dmi'
-
-/obj/machinery/door/airlock/maintenance/medical
- icon = 'icons/obj/doors/Doormaint_med.dmi'
- req_one_access = list(ACCESS_MEDICAL)
-
-/obj/machinery/door/airlock/maintenance/rnd
- icon = 'icons/obj/doors/Doormaint_rnd.dmi'
- req_one_access = list(ACCESS_RESEARCH)
-
-/obj/machinery/door/airlock/maintenance/sec
- icon = 'icons/obj/doors/Doormaint_sec.dmi'
- req_one_access = list(ACCESS_SECURITY)
-
-/obj/machinery/door/airlock/external
- name = "External Airlock"
- icon = 'icons/obj/doors/Doorext.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_ext
- open_sound_powered = 'sound/machines/door/space1o.ogg'
- close_sound_powered = 'sound/machines/door/space1c.ogg'
-
-/obj/machinery/door/airlock/external/bolted
- icon_state = "door_locked" // So it looks visibly bolted in map editor
- locked = 1
-
-// For convenience in making docking ports: one that is pre-bolted with frequency set!
-/obj/machinery/door/airlock/external/bolted/cycling
- frequency = AIRLOCK_FREQ
-
-/obj/machinery/door/airlock/glass_external
- name = "External Airlock"
- icon = 'icons/obj/doors/Doorextglass.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_ext
- opacity = 0
- glass = 1
- req_one_access = list(ACCESS_EXTERNAL_AIRLOCKS)
- open_sound_powered = 'sound/machines/door/space1o.ogg'
- close_sound_powered = 'sound/machines/door/space1c.ogg'
-
-/obj/machinery/door/airlock/glass
- name = "Glass Airlock"
- icon = 'icons/obj/doors/Doorglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- legacy_open_powered = 'sound/machines/door/windowdoor.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- glass = 1
- open_sound_powered = 'sound/machines/hall1o.ogg' //CHOMPEdit
- close_sound_powered = 'sound/machines/hall1c.ogg' //CHOMPEdit
-
-/obj/machinery/door/airlock/centcom
- name = "Centcom Airlock"
- icon = 'icons/obj/doors/Doorele.dmi'
- req_one_access = list(ACCESS_CENT_GENERAL)
- opacity = 1
- open_sound_powered = 'sound/machines/door/cmd3o.ogg'
- close_sound_powered = 'sound/machines/door/cmd3c.ogg'
- security_level = 100
-
-/obj/machinery/door/airlock/glass_centcom
- name = "Airlock"
- icon = 'icons/obj/doors/Dooreleglass.dmi'
- opacity = 0
- glass = 1
- open_sound_powered = 'sound/machines/door/cmd3o.ogg'
- close_sound_powered = 'sound/machines/door/cmd3c.ogg'
- security_level = 100
-
-/obj/machinery/door/airlock/vault
- name = "Vault"
- icon = 'icons/obj/doors/vault.dmi'
- explosion_resistance = 20
- opacity = 1
- secured_wires = 1
- assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
- req_one_access = list(ACCESS_HEADS_VAULT)
- open_sound_powered = 'sound/machines/door/vault1o.ogg'
- close_sound_powered = 'sound/machines/door/vault1c.ogg'
- security_level = 5
-
-/obj/machinery/door/airlock/vault/bolted
- icon_state = "door_locked"
- locked = 1
-
-/obj/machinery/door/airlock/freezer
- name = "Freezer Airlock"
- icon = 'icons/obj/doors/Doorfreezer.dmi'
- opacity = 1
- assembly_type = /obj/structure/door_assembly/door_assembly_fre
-
-/obj/machinery/door/airlock/hatch
- name = "Airtight Hatch"
- icon = 'icons/obj/doors/Doorhatchele.dmi'
- explosion_resistance = 20
- opacity = 1
- assembly_type = /obj/structure/door_assembly/door_assembly_hatch
- req_one_access = list(ACCESS_MAINT_TUNNELS)
- open_sound_powered = 'sound/machines/door/hatchopen.ogg'
- close_sound_powered = 'sound/machines/door/hatchclose.ogg'
- open_sound_unpowered = 'sound/machines/door/hatchforced.ogg'
-
-/obj/machinery/door/airlock/maintenance_hatch
- name = "Maintenance Hatch"
- icon = 'icons/obj/doors/Doorhatchmaint2.dmi'
- explosion_resistance = 20
- opacity = 1
- assembly_type = /obj/structure/door_assembly/door_assembly_mhatch
- req_one_access = list(ACCESS_MAINT_TUNNELS)
- open_sound_powered = 'sound/machines/door/hatchopen.ogg'
- close_sound_powered = 'sound/machines/door/hatchclose.ogg'
- open_sound_unpowered = 'sound/machines/door/hatchforced.ogg'
-
-/obj/machinery/door/airlock/glass_command
- name = "Command Airlock"
- icon = 'icons/obj/doors/Doorcomglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_com
- glass = 1
- req_one_access = list(ACCESS_HEADS)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/cmd1o.ogg'
- department_close_powered = 'sound/machines/door/cmd1c.ogg'
- security_level = 3
-
-/obj/machinery/door/airlock/glass_engineering
- name = "Engineering Airlock"
- icon = 'icons/obj/doors/Doorengglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_eng
- glass = 1
- req_one_access = list(ACCESS_ENGINE)
- department_open_powered = 'sound/machines/door/eng1o.ogg'
- department_close_powered = 'sound/machines/door/eng1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/glass_engineeringatmos
- name = "Atmospherics Airlock"
- icon = 'icons/obj/doors/Doorengatmoglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_eat
- glass = 1
- req_one_access = list(ACCESS_ATMOSPHERICS)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/eng1o.ogg'
- department_close_powered = 'sound/machines/door/eng1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/glass_security
- name = "Security Airlock"
- icon = 'icons/obj/doors/Doorsecglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_sec
- glass = 1
- req_one_access = list(ACCESS_SECURITY)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/sec1o.ogg'
- department_close_powered = 'sound/machines/door/sec1c.ogg'
- security_level = 2
-
-/obj/machinery/door/airlock/glass_medical
- name = "Medical Airlock"
- icon = 'icons/obj/doors/doormedglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_med
- glass = 1
- req_one_access = list(ACCESS_MEDICAL)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/med1o.ogg'
- department_close_powered = 'sound/machines/door/med1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/mining
- name = "Mining Airlock"
- icon = 'icons/obj/doors/Doormining.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_min
- req_one_access = list(ACCESS_MINING)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/cgo1o.ogg'
- department_close_powered = 'sound/machines/door/cgo1c.ogg'
-
-/obj/machinery/door/airlock/atmos
- name = "Atmospherics Airlock"
- icon = 'icons/obj/doors/Dooratmo.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_atmo
- req_one_access = list(ACCESS_ATMOSPHERICS)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/eng1o.ogg'
- department_close_powered = 'sound/machines/door/eng1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/research
- name = "Research Airlock"
- icon = 'icons/obj/doors/doorresearch.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_research
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/sci1o.ogg'
- department_close_powered = 'sound/machines/door/sci1c.ogg'
- security_level = 2
-
-/obj/machinery/door/airlock/glass_research
- name = "Research Airlock"
- icon = 'icons/obj/doors/doorresearchglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_research
- glass = 1
- req_one_access = list(ACCESS_RESEARCH)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/sci1o.ogg'
- department_close_powered = 'sound/machines/door/sci1c.ogg'
- security_level = 2
-
-/obj/machinery/door/airlock/glass_mining
- name = "Mining Airlock"
- icon = 'icons/obj/doors/Doorminingglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_min
- glass = 1
- req_one_access = list(ACCESS_MINING)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/cgo1o.ogg'
- department_close_powered = 'sound/machines/door/cgo1c.ogg'
-
-/obj/machinery/door/airlock/glass_atmos
- name = "Atmospherics Airlock"
- icon = 'icons/obj/doors/Dooratmoglass.dmi'
- hitsound = 'sound/effects/Glasshit.ogg'
- maxhealth = 300
- explosion_resistance = 5
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_atmo
- glass = 1
- req_one_access = list(ACCESS_ATMOSPHERICS)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/eng1o.ogg'
- department_close_powered = 'sound/machines/door/eng1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/gold
- name = "Gold Airlock"
- icon = 'icons/obj/doors/Doorgold.dmi'
- mineral = MAT_GOLD
-
-/obj/machinery/door/airlock/silver
- name = "Silver Airlock"
- icon = 'icons/obj/doors/Doorsilver.dmi'
- mineral = MAT_SILVER
-
-/obj/machinery/door/airlock/diamond
- name = "Diamond Airlock"
- icon = 'icons/obj/doors/Doordiamond.dmi'
- mineral = MAT_DIAMOND
-
-/obj/machinery/door/airlock/uranium
- name = "Uranium Airlock"
- desc = "And they said I was crazy."
- icon = 'icons/obj/doors/Dooruranium.dmi'
- mineral = MAT_URANIUM
- var/last_event = 0
- var/rad_power = 7.5
-
/obj/machinery/door/airlock/process()
// Deliberate no call to parent.
if(main_power_lost_until > 0 && world.time >= main_power_lost_until)
@@ -516,138 +137,6 @@
if (..() == PROCESS_KILL && !(main_power_lost_until > 0 || backup_power_lost_until > 0 || electrified_until > 0))
. = PROCESS_KILL
-/obj/machinery/door/airlock/uranium/process()
- if(world.time > last_event+20)
- if(prob(50))
- SSradiation.radiate(src, rad_power)
- last_event = world.time
- ..()
-
-/obj/machinery/door/airlock/phoron
- name = "Phoron Airlock"
- desc = "No way this can end badly."
- icon = 'icons/obj/doors/Doorphoron.dmi'
- mineral = MAT_PHORON
-
-/obj/machinery/door/airlock/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > 300)
- PhoronBurn(exposed_temperature)
-
-/obj/machinery/door/airlock/phoron/proc/ignite(exposed_temperature)
- if(exposed_temperature > 300)
- PhoronBurn(exposed_temperature)
-
-/obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature)
- for(var/turf/simulated/floor/target_tile in range(2,loc))
- target_tile.assume_gas(GAS_PHORON, 35, 400+T0C)
- spawn (0) target_tile.hotspot_expose(temperature, 400)
- for(var/turf/simulated/wall/W in range(3,src))
- W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
- for(var/obj/machinery/door/airlock/phoron/D in range(3,src))
- D.ignite(temperature/4)
- new/obj/structure/door_assembly( src.loc )
- qdel(src)
-
-/obj/machinery/door/airlock/sandstone
- name = "Sandstone Airlock"
- icon = 'icons/obj/doors/Doorsand.dmi'
- mineral = MAT_SANDSTONE
-
-/obj/machinery/door/airlock/science
- name = "Research Airlock"
- icon = 'icons/obj/doors/doorsci.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_science
- req_one_access = list(ACCESS_RESEARCH)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/sci1o.ogg'
- department_close_powered = 'sound/machines/door/sci1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/glass_science
- name = "Glass Airlocks"
- icon = 'icons/obj/doors/doorsciglass.dmi'
- opacity = 0
- assembly_type = /obj/structure/door_assembly/door_assembly_science
- glass = 1
- req_one_access = list(ACCESS_RESEARCH)
- open_sound_powered = 'sound/machines/door/hall1o.ogg'
- close_sound_powered = 'sound/machines/door/hall1c.ogg'
- department_open_powered = 'sound/machines/door/sci1o.ogg'
- department_close_powered = 'sound/machines/door/sci1c.ogg'
- security_level = 1.5
-
-/obj/machinery/door/airlock/highsecurity
- name = "Secure Airlock"
- icon = 'icons/obj/doors/hightechsecurity.dmi'
- explosion_resistance = 20
- secured_wires = 1
- assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity
- req_one_access = list(ACCESS_HEADS_VAULT)
- open_sound_powered = 'sound/machines/door/secure1o.ogg'
- close_sound_powered = 'sound/machines/door/secure1c.ogg'
- security_level = 4
-
-/obj/machinery/door/airlock/voidcraft
- name = "voidcraft hatch"
- desc = "It's an extra resilient airlock intended for spacefaring vessels."
- icon = 'icons/obj/doors/shuttledoors.dmi'
- explosion_resistance = 20
- opacity = 0
- glass = 1
- assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft
- open_sound_powered = 'sound/machines/door/shuttle1o.ogg'
- close_sound_powered = 'sound/machines/door/shuttle1c.ogg'
-
-// Airlock opens from top-bottom instead of left-right.
-/obj/machinery/door/airlock/voidcraft/vertical
- icon = 'icons/obj/doors/shuttledoors_vertical.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft/vertical
- open_sound_powered = 'sound/machines/door/shuttle1o.ogg'
- close_sound_powered = 'sound/machines/door/shuttle1c.ogg'
-
-
-/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock
- name = "Precursor Alpha Object - Doors"
- desc = "This object appears to be used in order to restrict or allow access to \
- rooms based on its physical state. In other words, a door. \
- Despite being designed and created by unknown ancient alien hands, this door has \
- a large number of similarities to the conventional airlock, such as being driven by \
- electricity, opening and closing by physically moving, and being air tight. \
- It also operates by responding to signals through internal electrical conduits. \
- These characteristics make it possible for one with experience with a multitool \
- to manipulate the door.\
-
\
- The symbol on the door does not match any living species' patterns, giving further \
- implications that this door is very old, and yet it remains operational after \
- thousands of years. It is unknown if that is due to superb construction, or \
- unseen autonomous maintenance having been performed."
- value = CATALOGUER_REWARD_EASY
-
-/obj/machinery/door/airlock/alien
- name = "alien airlock"
- desc = "You're fairly sure this is a door."
- catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock)
- icon = 'icons/obj/doors/Dooralien.dmi'
- explosion_resistance = 20
- secured_wires = TRUE
- hackProof = TRUE
- assembly_type = /obj/structure/door_assembly/door_assembly_alien
- req_one_access = list(ACCESS_ALIEN)
- security_level = 100
-
-/obj/machinery/door/airlock/alien/locked
- icon_state = "door_locked"
- locked = TRUE
-
-/obj/machinery/door/airlock/alien/public // Entry to UFO.
- req_one_access = list()
- normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside.
- hackProof = TRUE //No borgs
-
-/obj/machinery/door/airlock/uranium_appearance
- icon = 'icons/obj/doors/Dooruranium.dmi'
-
/*
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.
@@ -662,20 +151,18 @@ About the new airlock wires panel:
* one wire for controlling door speed. When active, dor closes at normal rate. When cut, door does not close manually. When pulsed, door attempts to close every tick.
*/
-
-
-/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
+/obj/machinery/door/airlock/bumpopen(mob/living/user) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
if(!issilicon(user))
- 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) && src.operating == 0)
+ else if(user.hallucination > 50 && prob(10) && operating == 0)
to_chat(user, span_danger("You feel a powerful shock course through your body!"))
user.playsound_local(get_turf(user), get_sfx("sparks"), vol = 75)
user.halloss += 10
@@ -684,30 +171,30 @@ About the new airlock wires panel:
..(user)
/obj/machinery/door/airlock/proc/isElectrified()
- if(src.electrified_until != 0)
- return 1
- return 0
+ if(electrified_until != 0)
+ return TRUE
+ return FALSE
/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 FALSE
+ return (main_power_lost_until==0 || backup_power_lost_until==0)
/obj/machinery/door/airlock/requiresID()
return !(wires.is_cut(WIRE_IDSCAN) || aiDisabledIdScanner)
/obj/machinery/door/airlock/proc/isAllPowerLoss()
if(stat & (NOPOWER|BROKEN))
- return 1
+ return TRUE
if(mainPowerCablesCut() && backupPowerCablesCut())
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/machinery/door/airlock/proc/mainPowerCablesCut()
return wires.is_cut(WIRE_MAIN_POWER1) || wires.is_cut(WIRE_MAIN_POWER2)
@@ -716,11 +203,11 @@ About the new airlock wires panel:
return wires.is_cut(WIRE_BACKUP_POWER1) || wires.is_cut(WIRE_BACKUP_POWER2)
/obj/machinery/door/airlock/proc/loseMainPower()
- main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
+ main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + (1 MINUTE)
// If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running
if(backup_power_lost_until == -1 && !backupPowerCablesCut())
- backup_power_lost_until = world.time + SecondsToTicks(10)
+ backup_power_lost_until = world.time + (10 SECONDS)
if(main_power_lost_until > 0 || backup_power_lost_until > 0)
START_MACHINE_PROCESSING(src)
@@ -732,7 +219,7 @@ About the new airlock wires panel:
update_icon()
/obj/machinery/door/airlock/proc/loseBackupPower()
- backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
+ backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + (1 MINUTE)
if(backup_power_lost_until > 0)
START_MACHINE_PROCESSING(src)
@@ -763,13 +250,13 @@ About the new airlock wires panel:
var/message = ""
if(wires.is_cut(WIRE_ELECTRIFY) && arePowerSystemsOn())
message = text("The electrification wire is cut - Door permanently electrified.")
- src.electrified_until = -1
+ electrified_until = -1
else if(duration && !arePowerSystemsOn())
message = text("The door is unpowered - Cannot electrify the door.")
- src.electrified_until = 0
+ electrified_until = 0
else if(!duration && electrified_until != 0)
message = "The door is now un-electrified."
- src.electrified_until = 0
+ electrified_until = 0
else if(duration) //electrify door for the given duration seconds
if(usr)
shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])")
@@ -777,7 +264,7 @@ About the new airlock wires panel:
else
shockedby += text("\[[time_stamp()]\] - EMP)")
message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]."
- src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
+ electrified_until = duration == -1 ? -1 : world.time + (duration SECONDS)
if(electrified_until > 0)
START_MACHINE_PROCESSING(src)
@@ -789,11 +276,11 @@ About the new airlock wires panel:
var/message = ""
if(wires.is_cut(WIRE_IDSCAN))
message = "The IdScan wire is cut - IdScan feature permanently disabled."
- else if(activate && src.aiDisabledIdScanner)
- src.aiDisabledIdScanner = 0
+ else if(activate && aiDisabledIdScanner)
+ aiDisabledIdScanner = 0
message = "IdScan feature has been enabled."
- else if(!activate && !src.aiDisabledIdScanner)
- src.aiDisabledIdScanner = 1
+ else if(!activate && !aiDisabledIdScanner)
+ aiDisabledIdScanner = 1
message = "IdScan feature has been disabled."
if(feedback && message)
@@ -804,9 +291,9 @@ About the new airlock wires panel:
// Safeties! We don't need no stinking safeties!
if (wires.is_cut(WIRE_SAFETY))
message = text("The safety wire is cut - Cannot enable safeties.")
- else if (!activate && src.safe)
+ else if (!activate && safe)
safe = 0
- else if (activate && !src.safe)
+ else if (activate && !safe)
safe = 1
if(feedback && message)
@@ -831,7 +318,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/update_icon()
cut_overlays()
if(density)
- if(locked && lights && src.arePowerSystemsOn())
+ if(locked && lights && arePowerSystemsOn())
icon_state = "door_locked"
else
icon_state = "door_closed"
@@ -875,12 +362,12 @@ About the new airlock wires panel:
if(density)
flick("door_spark", src)
if("deny")
- if(density && src.arePowerSystemsOn())
+ if(density && arePowerSystemsOn())
flick("door_deny", src)
playsound(src, denied_sound, 50, 0, 3)
return
-/obj/machinery/door/airlock/attack_ai(mob/user as mob)
+/obj/machinery/door/airlock/attack_ai(mob/user)
tgui_interact(user)
/obj/machinery/door/airlock/attack_ghost(mob/user)
@@ -931,71 +418,73 @@ About the new airlock wires panel:
return data
/obj/machinery/door/airlock/proc/hack(mob/user as mob)
- if(src.aiHacking==0)
- src.aiHacking=1
- spawn(20)
- //TODO: Make this take a minute
- to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.")
- sleep(50)
- if(src.canAIControl())
- to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
- src.aiHacking=0
- return
- else if(!src.canAIHack(user))
- to_chat(user, "We've lost our connection! Unable to hack airlock.")
- src.aiHacking=0
- return
- to_chat(user, "Fault confirmed: airlock control wire disabled or cut.")
- sleep(20)
- to_chat(user, "Attempting to hack into airlock. This may take some time.")
- sleep(200)
- if(src.canAIControl())
- to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
- src.aiHacking=0
- return
- else if(!src.canAIHack(user))
- to_chat(user, "We've lost our connection! Unable to hack airlock.")
- src.aiHacking=0
- return
- to_chat(user, "Upload access confirmed. Loading control program into airlock software.")
- sleep(170)
- if(src.canAIControl())
- to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
- src.aiHacking=0
- return
- else if(!src.canAIHack(user))
- to_chat(user, "We've lost our connection! Unable to hack airlock.")
- src.aiHacking=0
- return
- to_chat(user, "Transfer complete. Forcing airlock to execute program.")
- sleep(50)
- //disable blocked control
- src.aiControlDisabled = 2
- to_chat(user, "Receiving control information from airlock.")
- sleep(10)
- //bring up airlock dialog
- src.aiHacking = 0
- if (user)
- src.attack_ai(user)
+ if(aiHacking)
+ return
+ aiHacking = TRUE
+ spawn(20)
+ //TODO: Make this take a minute
+ to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.")
+ sleep(50)
+ if(canAIControl())
+ to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
+ aiHacking = FALSE
+ return
+ else if(!canAIHack(user))
+ to_chat(user, "We've lost our connection! Unable to hack airlock.")
+ aiHacking = FALSE
+ 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(canAIControl())
+ to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
+ aiHacking = FALSE
+ return
+ else if(!canAIHack(user))
+ to_chat(user, "We've lost our connection! Unable to hack airlock.")
+ aiHacking = FALSE
+ return
+ to_chat(user, "Upload access confirmed. Loading control program into airlock software.")
+ sleep(170)
+ if(canAIControl())
+ to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
+ aiHacking = FALSE
+ return
+ else if(!canAIHack(user))
+ to_chat(user, "We've lost our connection! Unable to hack airlock.")
+ aiHacking = FALSE
+ return
+ to_chat(user, "Transfer complete. Forcing airlock to execute program.")
+ sleep(50)
+ //disable blocked control
+ aiControlDisabled = 2
+ to_chat(user, "Receiving control information from airlock.")
+ sleep(10)
+ //bring up airlock dialog
+ aiHacking = 0
+ if (user)
+ attack_ai(user)
/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target)
- if (src.isElectrified())
+ if (isElectrified())
if (istype(mover, /obj/item))
var/obj/item/i = mover
if (i.matter && (MAT_STEEL in i.matter) && i.matter[MAT_STEEL] > 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
- return ..()
+ . = ..()
-/obj/machinery/door/airlock/attack_hand(mob/user as mob)
- if(!istype(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(!Adjacent(hold_open))
hold_open = null
+
if(hold_open && !density)
if(hold_open == user)
hold_open = null
@@ -1005,33 +494,39 @@ About the new airlock wires panel:
if(ishuman(user))
var/mob/living/carbon/human/X = user
if(istype(X.species, /datum/species/xenos))
- src.attack_alien(user)
+ attack_alien(user)
return
- if(src.p_open)
+ if(p_open)
user.set_machine(src)
wires.Interact(user)
- else
- ..(user)
- return
+ return
+
+ . = ..()
/obj/machinery/door/airlock/CtrlClick(mob/user) //Hold door open
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(user.is_incorporeal())
return
+
if(!Adjacent(user))
return
+
if(user.a_intent == I_HURT)
visible_message(span_warning("[user] hammers on \the [src]!"), span_warning("Someone hammers loudly on \the [src]!"))
add_fingerprint(user)
if(icon_state == "door_closed" && arePowerSystemsOn())
flick("door_deny", src)
playsound(src, knock_hammer_sound, 50, 0, 3)
- else if(user.a_intent == I_GRAB) //Hold door open
+ return
+
+ if(user.a_intent == I_GRAB) //Hold door open
hold_open = user
visible_message(span_info("[user] begins holding \the [src] open."), span_info("Someone has started holding \the [src] open."))
attack_hand(user)
- else if(arePowerSystemsOn())
+ return
+
+ if(arePowerSystemsOn())
if(isElectrified())
visible_message(span_warning("[user] presses the door bell on \the [src], making it violently spark!"), span_warning("\The [src] sparks!"))
add_fingerprint(user)
@@ -1044,11 +539,11 @@ About the new airlock wires panel:
if(icon_state == "door_closed")
flick("door_deny", src)
playsound(src, knock_sound, 50, 0, 3)
- else
- visible_message(span_info("[user] knocks on \the [src]."), span_info("Someone knocks on \the [src]."))
- add_fingerprint(user)
- playsound(src, knock_unpowered_sound, 50, 0, 3)
- return
+ return
+
+ visible_message(span_info("[user] knocks on \the [src]."), span_info("Someone knocks on \the [src]."))
+ add_fingerprint(user)
+ playsound(src, knock_unpowered_sound, 50, 0, 3)
/obj/machinery/door/airlock/tgui_act(action, params, datum/tgui/ui)
if(..())
@@ -1110,7 +605,7 @@ About the new airlock wires panel:
. = TRUE
update_icon()
- return 1
+ return TRUE
/obj/machinery/door/airlock/proc/user_allowed(mob/user)
var/allowed = (issilicon(user) && canAIControl(user))
@@ -1158,71 +653,67 @@ About the new airlock wires panel:
open()
/obj/machinery/door/airlock/proc/can_remove_electronics()
- return src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN))))
+ return p_open && (operating < 0 || (!operating && welded && !arePowerSystemsOn() && density && (!locked || (stat & BROKEN))))
+
+/obj/machinery/door/airlock/attackby(obj/item/C, mob/user)
+ if(!issilicon(user))
+ if(isElectrified() && shock(user, 75))
+ return
-/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob)
- //to_world("airlock attackby src [src] obj [C] mob [user]")
- if(!istype(user, /mob/living/silicon))
- if(src.isElectrified())
- if(src.shock(user, 75))
- return
if(istype(C, /obj/item/taperoll))
return
- src.add_fingerprint(user)
- if (attempt_vr(src,"attackby_vr",list(C, user))) return
- if(isliving(C))
- ..()
- return
- if(C.has_tool_quality(TOOL_WELDER) && !( src.operating > 0 ) && src.density)
- if(health < maxhealth && user.a_intent == I_HELP)
- ..()
- return
+ add_fingerprint(user)
+
+ if(!reinforcing && C.has_tool_quality(TOOL_WELDER) && !(operating > 0) && density && (health >= maxhealth || user.a_intent != I_HELP))
var/obj/item/weldingtool/W = C.get_welder()
if(W.remove_fuel(0,user))
- if(!src.welded)
- src.welded = 1
+ if(!welded)
+ welded = TRUE
else
- src.welded = null
+ welded = null
playsound(src, C.usesound, 75, 1)
- src.update_icon()
- return
- else
- return
- else if(C.has_tool_quality(TOOL_SCREWDRIVER))
- if (src.p_open)
- if (stat & BROKEN)
- to_chat(user, span_warning("The panel is broken and cannot be closed."))
- else
- src.p_open = FALSE
- playsound(src, C.usesound, 50, 1)
- src.update_icon()
- return
- else
- src.p_open = TRUE
+ update_icon()
+ return
+
+ if(C.has_tool_quality(TOOL_SCREWDRIVER))
+ if(!p_open)
+ p_open = TRUE
playsound(src, C.usesound, 50, 1)
- src.update_icon()
- return src.attack_hand(user)
- else if(C.has_tool_quality(TOOL_WIRECUTTER))
- return src.attack_hand(user)
- else if(istype(C, /obj/item/multitool))
- return src.attack_hand(user)
- else if(istype(C, /obj/item/assembly/signaler))
- return src.attack_hand(user)
- else if(istype(C, /obj/item/pai_cable)) // -- TLE
+ update_icon()
+ return attack_hand(user)
+ if(stat & BROKEN)
+ to_chat(user, span_warning("The panel is broken and cannot be closed."))
+ return
+ p_open = FALSE
+ playsound(src, C.usesound, 50, 1)
+ update_icon()
+ return
+
+ if(C.has_tool_quality(TOOL_WIRECUTTER))
+ return attack_hand(user)
+
+ if(istype(C, /obj/item/multitool))
+ return attack_hand(user)
+
+ if(istype(C, /obj/item/assembly/signaler))
+ return attack_hand(user)
+
+ if(istype(C, /obj/item/pai_cable)) // -- TLE
var/obj/item/pai_cable/cable = C
cable.plugin(src, user)
- else if(C.has_tool_quality(TOOL_CROWBAR))
+ return
+
+ if(!reinforcing && C.has_tool_quality(TOOL_CROWBAR) && user.a_intent != I_HURT) // So harm intent can smash airlocks
if(can_remove_electronics())
playsound(src, C.usesound, 75, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
if(do_after(user, 4 SECONDS * C.toolspeed, target = src))
to_chat(user, span_notice("You removed the airlock electronics!"))
- var/obj/structure/door_assembly/da = new assembly_type(src.loc)
+ var/obj/structure/door_assembly/da = new assembly_type(get_turf(src))
if (istype(da, /obj/structure/door_assembly/multi_tile))
- da.set_dir(src.dir)
-
+ da.set_dir(dir)
da.anchored = TRUE
if(mineral)
da.glass = mineral
@@ -1230,37 +721,43 @@ About the new airlock wires panel:
else if(glass && !da.glass)
da.glass = 1
da.state = 1
- da.created_name = src.name
+ da.created_name = name
da.update_state()
if(operating == -1 || (stat & BROKEN))
- new /obj/item/circuitboard/broken(src.loc)
+ new /obj/item/circuitboard/broken(get_turf(src))
operating = 0
else
if (!electronics) create_electronics()
- electronics.loc = src.loc
+ electronics.forceMove(get_turf(src))
electronics = null
-
qdel(src)
- return
- else if(arePowerSystemsOn())
+ return
+
+ if(arePowerSystemsOn())
to_chat(user, span_notice("The airlock's motors resist your efforts to force it."))
- else if(locked)
+ return
+ if(locked)
to_chat(user, span_notice("The airlock's bolts prevent it from being forced."))
+ return
+
+ // Force doors open/closed
+ if(density)
+ open(TRUE)
else
- if(density)
- spawn(0) open(1)
- else
- spawn(0) close(1)
+ close(1)
+ return
// Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc).
- else if(istype(C, /obj/item))
+ if(istype(C, /obj/item))
var/obj/item/W = C
- if((W.pry == 1) && !arePowerSystemsOn())
+ if(W.pry && !arePowerSystemsOn())
if(locked)
to_chat(user, span_notice("The airlock's bolts prevent it from being forced."))
- else if( !welded && !operating )
+ return
+
+ if(!welded && !operating)
if(istype(C, /obj/item/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands.
var/obj/item/material/twohanded/fireaxe/F = C
if(!F.wielded)
@@ -1268,30 +765,20 @@ About the new airlock wires panel:
return
// At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it.
if(density)
- spawn(0)
- open(1)
+ open(TRUE)
else
- spawn(0)
- close(1)
- else
- ..()
- else
- ..()
- return
-
-/obj/machinery/door/airlock/phoron/attackby(C as obj, mob/user as mob)
- if(C)
- ignite(is_hot(C))
- ..()
+ close(1)
+ return
+ . = ..()
/obj/machinery/door/airlock/set_broken()
- src.p_open = TRUE
+ p_open = TRUE
stat |= BROKEN
if (secured_wires)
lock()
for (var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O.show_message("[src.name]'s control panel bursts open, sparks spewing out!")
+ O.show_message("[name]'s control panel bursts open, sparks spewing out!")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
@@ -1302,7 +789,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/open(var/forced=0)
if(!can_open(forced))
- return 0
+ return FALSE
use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
if(hold_open)
@@ -1323,7 +810,7 @@ About the new airlock wires panel:
else
sound = open_sound_unpowered
volume = 75
- else if(!old_sounds && department_door_sounds && src.department_open_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these.
+ else if(!old_sounds && department_door_sounds && department_open_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these.
if(arePowerSystemsOn())
sound = department_open_powered
volume = 50
@@ -1346,49 +833,47 @@ About the new airlock wires panel:
SSmotiontracker.ping(src,100)
- if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
- src.closeOther.close()
- return ..()
+ if(closeOther != null && istype(closeOther, /obj/machinery/door/airlock/) && !closeOther.density)
+ closeOther.close()
+ . = ..()
/obj/machinery/door/airlock/can_open(var/forced=0)
if(!forced)
if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR))
- return 0
+ return FALSE
if(locked || welded)
- return 0
- return ..()
+ return FALSE
+ . = ..()
/obj/machinery/door/airlock/can_close(var/forced=0)
if(locked || welded)
- return 0
-
+ return FALSE
if(!forced)
//despite the name, this wire is for general door control.
if(hold_open)
if(Adjacent(hold_open) && !hold_open.incapacitated())
- return 0
+ return FALSE
else
hold_open = null
if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR))
return 0
-
- return ..()
+ . = ..()
/atom/movable/proc/blocks_airlock()
return density
/obj/machinery/door/blocks_airlock()
- return 0
+ return FALSE
/obj/machinery/mech_sensor/blocks_airlock()
- return 0
+ return FALSE
/mob/living/blocks_airlock()
return !is_incorporeal()
/atom/movable/proc/airlock_crush(var/crush_damage)
- return 0
+ return FALSE
/obj/machinery/portable_atmospherics/canister/airlock_crush(var/crush_damage)
. = ..()
@@ -1403,11 +888,11 @@ About the new airlock wires panel:
damage(crush_damage)
for(var/atom/movable/AM in src)
AM.airlock_crush()
- return 1
+ return TRUE
/mob/living/airlock_crush(var/crush_damage)
if(is_incorporeal())
- return 0
+ return FALSE
. = ..()
var/turf/T = get_turf(src)
adjustBruteLoss(crush_damage)
@@ -1415,7 +900,7 @@ About the new airlock wires panel:
SetWeakened(5)
if(T)
T.add_blood(src)
- return 1
+ return TRUE
/mob/living/carbon/airlock_crush(var/crush_damage)
. = ..()
@@ -1424,11 +909,11 @@ About the new airlock wires panel:
/mob/living/silicon/robot/airlock_crush(var/crush_damage)
adjustBruteLoss(crush_damage)
- return 0
+ return FALSE
/obj/machinery/door/airlock/close(var/forced=0)
if(!can_close(forced))
- return 0
+ return FALSE
hold_open = null //if it passes the can close check, always make sure to clear hold open
@@ -1463,7 +948,7 @@ About the new airlock wires panel:
else
sound = open_sound_unpowered
volume = 75
- else if(!old_sounds && department_door_sounds && src.department_close_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these.
+ else if(!old_sounds && department_door_sounds && department_close_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these.
if(arePowerSystemsOn())
sound = department_close_powered
volume = 50
@@ -1490,39 +975,41 @@ About the new airlock wires panel:
var/obj/structure/window/killthis = (locate(/obj/structure/window) in turf)
if(killthis)
killthis.ex_act(2)//Smashin windows
- return ..()
+ . = ..()
/obj/machinery/door/airlock/proc/lock(var/forced=0)
if(locked)
- return 0
+ return FALSE
- if (operating && !forced) return 0
+ if (operating && !forced) return FALSE
- src.locked = 1
+ locked = TRUE
+ SEND_SIGNAL(src, COMSIG_AIRLOCK_SET_BOLT, locked)
playsound(src, bolt_down_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS)
for(var/mob/M in range(1,src))
M.show_message("You hear a click from the bottom of the door.", 2)
update_icon()
- return 1
+ return TRUE
/obj/machinery/door/airlock/proc/unlock(var/forced=0)
- if(!src.locked)
+ if(!locked)
return
if (!forced)
- if(operating || !src.arePowerSystemsOn() || wires.is_cut(WIRE_DOOR_BOLTS)) return
+ if(operating || !arePowerSystemsOn() || wires.is_cut(WIRE_DOOR_BOLTS)) return
- src.locked = 0
+ locked = FALSE
+ SEND_SIGNAL(src, COMSIG_AIRLOCK_SET_BOLT, locked)
playsound(src, bolt_up_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS)
for(var/mob/M in range(1,src))
M.show_message("You hear a click from the bottom of the door.", 2)
update_icon()
- return 1
+ return TRUE
/obj/machinery/door/airlock/allowed(mob/M)
if(locked)
- return 0
- return ..(M)
+ return FALSE
+ . = ..()
/obj/machinery/door/airlock/Initialize(mapload, var/obj/structure/door_assembly/assembly=null)
//if assembly is given, create the new door from the assembly
@@ -1536,10 +1023,10 @@ About the new airlock wires panel:
secured_wires = electronics.secure
if(electronics.one_access)
LAZYCLEARLIST(req_access)
- req_one_access = src.electronics.conf_access
+ req_one_access = electronics.conf_access
else
LAZYCLEARLIST(req_one_access)
- req_access = src.electronics.conf_access
+ req_access = electronics.conf_access
//get the name from the assembly
if(assembly.created_name)
@@ -1561,10 +1048,10 @@ About the new airlock wires panel:
. = ..()
- if(src.closeOtherId != null)
+ if(closeOtherId != null)
for (var/obj/machinery/door/airlock/A in GLOB.machines)
- if(A.closeOtherId == src.closeOtherId && A != src)
- src.closeOther = A
+ if(A.closeOtherId == closeOtherId && A != src)
+ closeOther = A
break
name = "\improper [name]"
if(frequency)
@@ -1574,7 +1061,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/Destroy()
qdel(wires)
wires = null
- return ..()
+ . = ..()
// Most doors will never be deconstructed over the course of a round,
// so as an optimization defer the creation of electronics until
@@ -1582,9 +1069,9 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/create_electronics()
//create new electronics
if (secured_wires)
- src.electronics = new/obj/item/airlock_electronics/secure( src.loc )
+ electronics = new/obj/item/airlock_electronics/secure(get_turf(src))
else
- src.electronics = new/obj/item/airlock_electronics( src.loc )
+ electronics = new/obj/item/airlock_electronics(get_turf(src))
//update the electronics to match the door's access
if(LAZYLEN(req_access))
@@ -1595,7 +1082,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/emp_act(var/severity)
if(prob(40/severity))
- var/duration = world.time + SecondsToTicks(30 / severity)
+ var/duration = world.time + ((30 / severity) SECONDS)
if(duration > electrified_until)
electrify(duration)
..()
@@ -1610,9 +1097,9 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/prison_open()
if(arePowerSystemsOn())
- src.unlock()
- src.open()
- src.lock()
+ unlock()
+ open()
+ lock()
return
/* CHOMPEdit - moved this block to modular_chomp\code\game\objects\items\weapons\rcd.dm
diff --git a/code/game/machinery/doors/airlock_angled_tgmc.dm b/code/game/machinery/doors/airlock_angled_tgmc.dm
index e58b013e86..52cab7b5d9 100644
--- a/code/game/machinery/doors/airlock_angled_tgmc.dm
+++ b/code/game/machinery/doors/airlock_angled_tgmc.dm
@@ -151,6 +151,10 @@
icon_state_closing = "pdoorc1"
icon_state = "pdoor1"
maxhealth = 600
+ heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage
+
+/obj/machinery/door/blast/angled/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ return // blast doors are immune to fire completely.
/obj/machinery/door/blast/angled/open
icon_state = "pdoor0"
diff --git a/code/game/machinery/doors/airlock_subtypes.dm b/code/game/machinery/doors/airlock_subtypes.dm
new file mode 100644
index 0000000000..a34846084b
--- /dev/null
+++ b/code/game/machinery/doors/airlock_subtypes.dm
@@ -0,0 +1,550 @@
+/obj/machinery/door/airlock/command
+ name = "Command Airlock"
+ icon = 'icons/obj/doors/Doorcom.dmi'
+ req_one_access = list(ACCESS_HEADS)
+ assembly_type = /obj/structure/door_assembly/door_assembly_com
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/cmd3o.ogg'
+ department_close_powered = 'sound/machines/door/cmd3c.ogg'
+ security_level = 3
+
+/obj/machinery/door/airlock/security
+ name = "Security Airlock"
+ icon = 'icons/obj/doors/Doorsec.dmi'
+ req_one_access = list(ACCESS_SECURITY)
+ assembly_type = /obj/structure/door_assembly/door_assembly_sec
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/sec1o.ogg'
+ department_close_powered = 'sound/machines/door/sec1c.ogg'
+ security_level = 2
+
+/obj/machinery/door/airlock/engineering
+ name = "Engineering Airlock"
+ icon = 'icons/obj/doors/Dooreng.dmi'
+ req_one_access = list(ACCESS_ENGINE)
+ assembly_type = /obj/structure/door_assembly/door_assembly_eng
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/engineeringatmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Doorengatmos.dmi'
+ req_one_access = list(ACCESS_ATMOSPHERICS)
+ assembly_type = /obj/structure/door_assembly/door_assembly_eat
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/medical
+ name = "Medical Airlock"
+ icon = 'icons/obj/doors/doormed.dmi'
+ req_one_access = list(ACCESS_MEDICAL)
+ assembly_type = /obj/structure/door_assembly/door_assembly_med
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/med1o.ogg'
+ department_close_powered = 'sound/machines/door/med1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/maintenance
+ name = "Maintenance Access"
+ icon = 'icons/obj/doors/Doormaint.dmi'
+ //req_one_access = list(ACCESS_MAINT_TUNNELS) //Maintenance is open access
+ assembly_type = /obj/structure/door_assembly/door_assembly_mai
+ open_sound_powered = 'sound/machines/door/door2o.ogg'
+ close_sound_powered = 'sound/machines/door/door2c.ogg'
+
+/obj/machinery/door/airlock/maintenance/cargo
+ icon = 'icons/obj/doors/Doormaint_cargo.dmi'
+ req_one_access = list(ACCESS_CARGO)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/door2o.ogg'
+ department_close_powered = 'sound/machines/door/door2c.ogg'
+
+/obj/machinery/door/airlock/maintenance/command
+ icon = 'icons/obj/doors/Doormaint_command.dmi'
+ req_one_access = list(ACCESS_HEADS)
+
+/obj/machinery/door/airlock/maintenance/common
+ icon = 'icons/obj/doors/Doormaint_common.dmi'
+ open_sound_powered = 'sound/machines/door/hall3o.ogg'
+ close_sound_powered = 'sound/machines/door/hall3c.ogg'
+
+/obj/machinery/door/airlock/maintenance/engi
+ icon = 'icons/obj/doors/Doormaint_engi.dmi'
+ req_one_access = list(ACCESS_ENGINE)
+
+/obj/machinery/door/airlock/maintenance/int
+ icon = 'icons/obj/doors/Doormaint_int.dmi'
+
+/obj/machinery/door/airlock/maintenance/medical
+ icon = 'icons/obj/doors/Doormaint_med.dmi'
+ req_one_access = list(ACCESS_MEDICAL)
+
+/obj/machinery/door/airlock/maintenance/rnd
+ icon = 'icons/obj/doors/Doormaint_rnd.dmi'
+ req_one_access = list(ACCESS_RESEARCH)
+
+/obj/machinery/door/airlock/maintenance/sec
+ icon = 'icons/obj/doors/Doormaint_sec.dmi'
+ req_one_access = list(ACCESS_SECURITY)
+
+/obj/machinery/door/airlock/external
+ name = "External Airlock"
+ icon = 'icons/obj/doors/Doorext.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_ext
+ open_sound_powered = 'sound/machines/door/space1o.ogg'
+ close_sound_powered = 'sound/machines/door/space1c.ogg'
+
+/obj/machinery/door/airlock/external/bolted
+ icon_state = "door_locked" // So it looks visibly bolted in map editor
+ locked = TRUE
+
+// For convenience in making docking ports: one that is pre-bolted with frequency set!
+/obj/machinery/door/airlock/external/bolted/cycling
+ frequency = AIRLOCK_FREQ
+
+/obj/machinery/door/airlock/glass_external
+ name = "External Airlock"
+ icon = 'icons/obj/doors/Doorextglass.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_ext
+ opacity = 0
+ glass = 1
+ req_one_access = list(ACCESS_EXTERNAL_AIRLOCKS)
+ open_sound_powered = 'sound/machines/door/space1o.ogg'
+ close_sound_powered = 'sound/machines/door/space1c.ogg'
+
+/obj/machinery/door/airlock/glass
+ name = "Glass Airlock"
+ icon = 'icons/obj/doors/Doorglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ legacy_open_powered = 'sound/machines/door/windowdoor.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ glass = 1
+
+/obj/machinery/door/airlock/centcom
+ name = "Centcom Airlock"
+ icon = 'icons/obj/doors/Doorele.dmi'
+ req_one_access = list(ACCESS_CENT_GENERAL)
+ opacity = 1
+ open_sound_powered = 'sound/machines/door/cmd3o.ogg'
+ close_sound_powered = 'sound/machines/door/cmd3c.ogg'
+ security_level = 100
+
+/obj/machinery/door/airlock/glass_centcom
+ name = "Airlock"
+ icon = 'icons/obj/doors/Dooreleglass.dmi'
+ opacity = 0
+ glass = 1
+ open_sound_powered = 'sound/machines/door/cmd3o.ogg'
+ close_sound_powered = 'sound/machines/door/cmd3c.ogg'
+ security_level = 100
+
+/obj/machinery/door/airlock/vault
+ name = "Vault"
+ icon = 'icons/obj/doors/vault.dmi'
+ explosion_resistance = 20
+ opacity = 1
+ secured_wires = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
+ req_one_access = list(ACCESS_HEADS_VAULT)
+ open_sound_powered = 'sound/machines/door/vault1o.ogg'
+ close_sound_powered = 'sound/machines/door/vault1c.ogg'
+ security_level = 5
+ heat_proof = 1
+
+/obj/machinery/door/airlock/vault/bolted
+ icon_state = "door_locked"
+ locked = TRUE
+
+/obj/machinery/door/airlock/freezer
+ name = "Freezer Airlock"
+ icon = 'icons/obj/doors/Doorfreezer.dmi'
+ opacity = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_fre
+
+/obj/machinery/door/airlock/hatch
+ name = "Airtight Hatch"
+ icon = 'icons/obj/doors/Doorhatchele.dmi'
+ explosion_resistance = 20
+ opacity = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_hatch
+ req_one_access = list(ACCESS_MAINT_TUNNELS)
+ open_sound_powered = 'sound/machines/door/hatchopen.ogg'
+ close_sound_powered = 'sound/machines/door/hatchclose.ogg'
+ open_sound_unpowered = 'sound/machines/door/hatchforced.ogg'
+ heat_proof = 1
+
+/obj/machinery/door/airlock/maintenance_hatch
+ name = "Maintenance Hatch"
+ icon = 'icons/obj/doors/Doorhatchmaint2.dmi'
+ explosion_resistance = 20
+ opacity = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_mhatch
+ req_one_access = list(ACCESS_MAINT_TUNNELS)
+ open_sound_powered = 'sound/machines/door/hatchopen.ogg'
+ close_sound_powered = 'sound/machines/door/hatchclose.ogg'
+ open_sound_unpowered = 'sound/machines/door/hatchforced.ogg'
+
+/obj/machinery/door/airlock/glass_command
+ name = "Command Airlock"
+ icon = 'icons/obj/doors/Doorcomglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_com
+ glass = 1
+ req_one_access = list(ACCESS_HEADS)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/cmd1o.ogg'
+ department_close_powered = 'sound/machines/door/cmd1c.ogg'
+ security_level = 3
+
+/obj/machinery/door/airlock/glass_engineering
+ name = "Engineering Airlock"
+ icon = 'icons/obj/doors/Doorengglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_eng
+ glass = 1
+ req_one_access = list(ACCESS_ENGINE)
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/glass_engineeringatmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Doorengatmoglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_eat
+ glass = 1
+ req_one_access = list(ACCESS_ATMOSPHERICS)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/glass_security
+ name = "Security Airlock"
+ icon = 'icons/obj/doors/Doorsecglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_sec
+ glass = 1
+ req_one_access = list(ACCESS_SECURITY)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/sec1o.ogg'
+ department_close_powered = 'sound/machines/door/sec1c.ogg'
+ security_level = 2
+
+/obj/machinery/door/airlock/glass_medical
+ name = "Medical Airlock"
+ icon = 'icons/obj/doors/doormedglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_med
+ glass = 1
+ req_one_access = list(ACCESS_MEDICAL)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/med1o.ogg'
+ department_close_powered = 'sound/machines/door/med1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/mining
+ name = "Mining Airlock"
+ icon = 'icons/obj/doors/Doormining.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_min
+ req_one_access = list(ACCESS_MINING)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/cgo1o.ogg'
+ department_close_powered = 'sound/machines/door/cgo1c.ogg'
+
+/obj/machinery/door/airlock/atmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Dooratmo.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_atmo
+ req_one_access = list(ACCESS_ATMOSPHERICS)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/research
+ name = "Research Airlock"
+ icon = 'icons/obj/doors/doorresearch.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_research
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+ security_level = 2
+
+/obj/machinery/door/airlock/glass_research
+ name = "Research Airlock"
+ icon = 'icons/obj/doors/doorresearchglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_research
+ glass = 1
+ req_one_access = list(ACCESS_RESEARCH)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+ security_level = 2
+
+/obj/machinery/door/airlock/glass_mining
+ name = "Mining Airlock"
+ icon = 'icons/obj/doors/Doorminingglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_min
+ glass = 1
+ req_one_access = list(ACCESS_MINING)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/cgo1o.ogg'
+ department_close_powered = 'sound/machines/door/cgo1c.ogg'
+
+/obj/machinery/door/airlock/glass_atmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Dooratmoglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_atmo
+ glass = 1
+ req_one_access = list(ACCESS_ATMOSPHERICS)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/gold
+ name = "Gold Airlock"
+ icon = 'icons/obj/doors/Doorgold.dmi'
+ mineral = MAT_GOLD
+
+/obj/machinery/door/airlock/silver
+ name = "Silver Airlock"
+ icon = 'icons/obj/doors/Doorsilver.dmi'
+ mineral = MAT_SILVER
+
+/obj/machinery/door/airlock/diamond
+ name = "Diamond Airlock"
+ icon = 'icons/obj/doors/Doordiamond.dmi'
+ mineral = MAT_DIAMOND
+
+/obj/machinery/door/airlock/uranium
+ name = "Uranium Airlock"
+ desc = "And they said I was crazy."
+ icon = 'icons/obj/doors/Dooruranium.dmi'
+ mineral = MAT_URANIUM
+ var/last_event = 0
+ var/rad_power = 7.5
+
+/obj/machinery/door/airlock/uranium/process()
+ if(world.time > last_event+20)
+ if(prob(50))
+ SSradiation.radiate(src, rad_power)
+ last_event = world.time
+ ..()
+
+/obj/machinery/door/airlock/uranium_appearance
+ icon = 'icons/obj/doors/Dooruranium.dmi'
+
+/obj/machinery/door/airlock/phoron
+ name = "Phoron Airlock"
+ desc = "No way this can end badly."
+ icon = 'icons/obj/doors/Doorphoron.dmi'
+ mineral = MAT_PHORON
+
+/obj/machinery/door/airlock/phoron/attackby(obj/C, mob/user)
+ if(C)
+ ignite(is_hot(C))
+ . = ..()
+
+/obj/machinery/door/airlock/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(exposed_temperature > 300)
+ PhoronBurn(exposed_temperature)
+
+/obj/machinery/door/airlock/phoron/proc/ignite(exposed_temperature)
+ if(exposed_temperature > 300)
+ PhoronBurn(exposed_temperature)
+
+/obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature)
+ for(var/turf/simulated/floor/target_tile in range(2,loc))
+ target_tile.assume_gas(GAS_PHORON, 35, 400+T0C)
+ spawn (0) target_tile.hotspot_expose(temperature, 400)
+ for(var/turf/simulated/wall/W in range(3,src))
+ W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
+ for(var/obj/machinery/door/airlock/phoron/D in range(3,src))
+ D.ignite(temperature/4)
+ new/obj/structure/door_assembly(get_turf(src))
+ qdel(src)
+
+/obj/machinery/door/airlock/sandstone
+ name = "Sandstone Airlock"
+ icon = 'icons/obj/doors/Doorsand.dmi'
+ mineral = MAT_SANDSTONE
+
+/obj/machinery/door/airlock/science
+ name = "Research Airlock"
+ icon = 'icons/obj/doors/doorsci.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_science
+ req_one_access = list(ACCESS_RESEARCH)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/glass_science
+ name = "Glass Airlocks"
+ icon = 'icons/obj/doors/doorsciglass.dmi'
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_science
+ glass = 1
+ req_one_access = list(ACCESS_RESEARCH)
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+ security_level = 1.5
+
+/obj/machinery/door/airlock/highsecurity
+ name = "Secure Airlock"
+ icon = 'icons/obj/doors/hightechsecurity.dmi'
+ explosion_resistance = 20
+ secured_wires = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity
+ req_one_access = list(ACCESS_HEADS_VAULT)
+ open_sound_powered = 'sound/machines/door/secure1o.ogg'
+ close_sound_powered = 'sound/machines/door/secure1c.ogg'
+ security_level = 4
+
+/obj/machinery/door/airlock/voidcraft
+ name = "voidcraft hatch"
+ desc = "It's an extra resilient airlock intended for spacefaring vessels."
+ icon = 'icons/obj/doors/shuttledoors.dmi'
+ explosion_resistance = 20
+ opacity = 0
+ glass = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft
+ open_sound_powered = 'sound/machines/door/shuttle1o.ogg'
+ close_sound_powered = 'sound/machines/door/shuttle1c.ogg'
+
+// Airlock opens from top-bottom instead of left-right.
+/obj/machinery/door/airlock/voidcraft/vertical
+ icon = 'icons/obj/doors/shuttledoors_vertical.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft/vertical
+ open_sound_powered = 'sound/machines/door/shuttle1o.ogg'
+ close_sound_powered = 'sound/machines/door/shuttle1c.ogg'
+
+/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock
+ name = "Precursor Alpha Object - Doors"
+ desc = "This object appears to be used in order to restrict or allow access to \
+ rooms based on its physical state. In other words, a door. \
+ Despite being designed and created by unknown ancient alien hands, this door has \
+ a large number of similarities to the conventional airlock, such as being driven by \
+ electricity, opening and closing by physically moving, and being air tight. \
+ It also operates by responding to signals through internal electrical conduits. \
+ These characteristics make it possible for one with experience with a multitool \
+ to manipulate the door.\
+
\
+ The symbol on the door does not match any living species' patterns, giving further \
+ implications that this door is very old, and yet it remains operational after \
+ thousands of years. It is unknown if that is due to superb construction, or \
+ unseen autonomous maintenance having been performed."
+ value = CATALOGUER_REWARD_EASY
+
+/obj/machinery/door/airlock/alien
+ name = "alien airlock"
+ desc = "You're fairly sure this is a door."
+ catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock)
+ icon = 'icons/obj/doors/Dooralien.dmi'
+ explosion_resistance = 20
+ secured_wires = TRUE
+ hackProof = TRUE
+ assembly_type = /obj/structure/door_assembly/door_assembly_alien
+ req_one_access = list(ACCESS_ALIEN)
+ security_level = 100
+
+/obj/machinery/door/airlock/alien/locked
+ icon_state = "door_locked"
+ locked = TRUE
+
+/obj/machinery/door/airlock/alien/public // Entry to UFO.
+ req_one_access = list()
+ normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside.
+ hackProof = TRUE //No borgs
+
+
+/obj/machinery/door/airlock/glass_external/public
+ req_one_access = list()
+
+/obj/machinery/door/airlock/alien/blue
+ name = "hybrid airlock"
+ desc = "You're fairly sure this is a door."
+ catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock)
+ icon = 'icons/obj/doors/Dooralien_blue.dmi'
+ explosion_resistance = 20
+ secured_wires = TRUE
+ hackProof = TRUE
+ assembly_type = /obj/structure/door_assembly/door_assembly_alien
+ req_one_access = list()
+
+/obj/machinery/door/airlock/alien/blue/locked
+ icon_state = "door_locked"
+ locked = TRUE
+
+/obj/machinery/door/airlock/alien/blue/public // Entry to UFO.
+ req_one_access = list()
+ normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside.
+ hackProof = TRUE //VOREStation Edit - No borgos
+
+/obj/machinery/door/airlock/glass_security/polarized
+ name = "Electrochromic Security Airlock"
+ icon_tinted = 'icons/obj/doors/Doorsectinted_vr.dmi'
+
+/obj/machinery/door/airlock/glass_medical/polarized
+ name = "Electrochromic Medical Airlock"
+ icon_tinted = 'icons/obj/doors/doormedtinted_vr.dmi'
+
+/obj/machinery/door/airlock/glass_command/polarized
+ name = "Electrochormic Command Airlock"
+ icon_tinted = 'icons/obj/doors/Doorcomtinted_vr.dmi'
diff --git a/code/game/machinery/doors/airlock_vr.dm b/code/game/machinery/doors/airlock_vr.dm
deleted file mode 100644
index eb1594283b..0000000000
--- a/code/game/machinery/doors/airlock_vr.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/obj/machinery/door/airlock/glass_external/public
- req_one_access = list()
-
-/obj/machinery/door/airlock/alien/blue
- name = "hybrid airlock"
- desc = "You're fairly sure this is a door."
- catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock)
- icon = 'icons/obj/doors/Dooralien_blue.dmi'
- explosion_resistance = 20
- secured_wires = TRUE
- hackProof = TRUE
- assembly_type = /obj/structure/door_assembly/door_assembly_alien
- req_one_access = list()
-
-/obj/machinery/door/airlock/alien/blue/locked
- icon_state = "door_locked"
- locked = TRUE
-
-/obj/machinery/door/airlock/alien/blue/public // Entry to UFO.
- req_one_access = list()
- normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside.
- hackProof = TRUE //VOREStation Edit - No borgos
-
-/obj/machinery/door/airlock/glass_security/polarized
- name = "Electrochromic Security Airlock"
- icon_tinted = 'icons/obj/doors/Doorsectinted_vr.dmi'
-
-/obj/machinery/door/airlock/glass_medical/polarized
- name = "Electrochromic Medical Airlock"
- icon_tinted = 'icons/obj/doors/doormedtinted_vr.dmi'
-
-/obj/machinery/door/airlock/glass_command/polarized
- name = "Electrochormic Command Airlock"
- icon_tinted = 'icons/obj/doors/Doorcomtinted_vr.dmi'
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 40b0a5da74..08e3cb50dc 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -319,6 +319,10 @@
icon_state_closing = "pdoorc1"
icon_state = "pdoor1"
maxhealth = 600
+ heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage
+
+/obj/machinery/door/blast/regular/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ return // blast doors are immune to fire completely.
/obj/machinery/door/blast/regular/open
icon_state = "pdoor0"
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index af652de037..36defa58be 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -18,7 +18,7 @@
var/autoclose = 0
var/glass = 0
var/normalspeed = 1
- var/heat_proof = 0 // For glass airlocks/opacity firedoors
+ var/heat_proof = FALSE // For glass airlocks/opacity firedoors
var/air_properties_vary_with_direction = 0
var/maxhealth = 300
var/health
@@ -39,6 +39,11 @@
// turf animation
var/atom/movable/overlay/c_animation = null
+ var/reinforcing = 0
+ var/tintable = 0
+ var/icon_tinted
+ var/id_tint
+
/obj/machinery/door/attack_generic(var/mob/user, var/damage)
if(isanimal(user))
var/mob/living/simple_mob/S = user
@@ -100,18 +105,23 @@
/obj/machinery/door/proc/can_open()
if(!density || operating || !SSticker)
- return 0
- return 1
+ return FALSE
+ if(SEND_SIGNAL(src, COMSIG_DOOR_CAN_OPEN) & DOOR_DENY_OPEN)
+ return FALSE
+ return TRUE
/obj/machinery/door/proc/can_close()
if(density || operating || !SSticker)
- return 0
- return 1
+ return FALSE
+ if(SEND_SIGNAL(src, COMSIG_DOOR_CAN_CLOSE) & DOOR_DENY_CLOSE)
+ return FALSE
+ return TRUE
/obj/machinery/door/Bumped(atom/AM)
. = ..()
if(p_open || operating)
return
+
if(ismob(AM))
var/mob/M = AM
if(world.time - M.last_bumped <= 10)
@@ -123,15 +133,18 @@
return //VOREStation Edit: unable to open doors
else
bumpopen(M)
+ return
+
if(istype(AM, /obj/item/uav))
if(check_access(null))
open()
else
do_animate("deny")
+ return
if(isbot(AM))
var/mob/living/bot/bot = AM
- if(src.check_access(bot.botcard))
+ if(check_access(bot.botcard))
if(density)
open()
return
@@ -139,18 +152,20 @@
if(istype(AM, /obj/mecha))
var/obj/mecha/mecha = AM
if(density)
- if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
+ if(mecha.occupant && (allowed(mecha.occupant) || check_access_list(mecha.operation_req_access)))
open()
else
do_animate("deny")
return
+
if(istype(AM, /obj/structure/bed/chair/wheelchair))
var/obj/structure/bed/chair/wheelchair/wheel = AM
if(density)
- if(wheel.pulling && (src.allowed(wheel.pulling)))
+ if(wheel.pulling && (allowed(wheel.pulling)))
open()
else
do_animate("deny")
+ return
/obj/machinery/door/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
@@ -162,15 +177,21 @@
return !block_air_zones // Block merging unless block_air_zones = 0
return !density // Block airflow unless density = FALSE
-/obj/machinery/door/proc/bumpopen(mob/user as mob)
- if(!user) return
- if(operating) return
+/obj/machinery/door/proc/bumpopen(mob/user)
+ if(!user)
+ return
+ if(operating)
+ return
if(user.last_airflow > world.time - vsc.airflow_delay) //Fakkit
return
- src.add_fingerprint(user)
+ if(SEND_SIGNAL(user, COMSIG_MOB_BUMPED_DOOR_OPEN, src) & DOOR_STOP_BUMP)
+ return
+ add_fingerprint(user)
if(density)
- if(allowed(user)) open()
- else do_animate("deny")
+ if(allowed(user))
+ open()
+ else
+ do_animate("deny")
return
/obj/machinery/door/bullet_act(var/obj/item/projectile/Proj)
@@ -182,13 +203,13 @@
if (damage > 90)
destroy_hits--
if (destroy_hits <= 0)
- visible_message(span_danger("\The [src.name] disintegrates!"))
+ visible_message(span_danger("\The [name] disintegrates!"))
switch (Proj.damage_type)
if(BRUTE)
- new /obj/item/stack/material/steel(src.loc, 2)
- new /obj/item/stack/rods(src.loc, 3)
+ new /obj/item/stack/material/steel(loc, 2)
+ new /obj/item/stack/rods(loc, 3)
if(BURN)
- new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes!
+ new /obj/effect/decal/cleanable/ash(loc) // Turn it to ashes!
qdel(src)
if(damage)
@@ -199,7 +220,7 @@
/obj/machinery/door/hitby(atom/movable/source, var/speed=5)
..()
- visible_message(span_danger("[src.name] was hit by [source]."))
+ visible_message(span_danger("[name] was hit by [source]."))
var/tforce = 0
if(ismob(source))
tforce = 15 * (speed/THROWFORCE_SPEED_DIVISOR)
@@ -213,24 +234,83 @@
playsound(src, hitsound, 100, 1)
take_damage(tforce)
-/obj/machinery/door/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+/obj/machinery/door/attack_ai(mob/user)
+ return attack_hand(user)
-/obj/machinery/door/attack_hand(mob/user as mob)
- return src.attackby(user, user)
+/obj/machinery/door/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
+ return try_to_activate_door(user)
-/obj/machinery/door/attack_tk(mob/user as mob)
+/obj/machinery/door/attack_tk(mob/user)
if(requiresID() && !allowed(null))
return
..()
-/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob)
- src.add_fingerprint(user)
+/obj/machinery/door/attackby(obj/item/I, mob/user)
+ add_fingerprint(user)
- if(istype(I))
- if(attackby_vr(I, user)) //VOREStation begin: Fireproofing
- return //VOREStation begin: Fireproofing
- if(health < maxhealth && I.has_tool_quality(TOOL_WELDER))
+ if(istype(I, /obj/item/stack/material) && I.get_material_name() == MAT_PLASTEEL)
+ if(heat_proof)
+ to_chat(user, span_warning("\The [src] is already reinforced."))
+ return
+ if((stat & BROKEN) || (health < maxhealth))
+ to_chat(user, span_notice("It looks like \the [src] broken. Repair it before reinforcing it."))
+ return
+ if(!density)
+ to_chat(user, span_warning("\The [src] must be closed before you can reinforce it."))
+ return
+
+ var/amount_needed = 2
+
+ var/obj/item/stack/stack = I
+ var/amount_given = amount_needed - reinforcing
+ var/mats_given = stack.get_amount()
+ var/singular_name = stack.singular_name
+ if(reinforcing && amount_given <= 0)
+ to_chat(user, span_warning("You must weld or remove \the plasteel from \the [src] before you can add anything else."))
+ else
+ if(mats_given >= amount_given)
+ if(stack.use(amount_given))
+ reinforcing += amount_given
+ else
+ if(stack.use(mats_given))
+ reinforcing += mats_given
+ amount_given = mats_given
+ if(amount_given)
+ to_chat(user, span_notice("You fit [amount_given] [singular_name]\s on \the [src]."))
+ return
+
+ if(reinforcing && I.has_tool_quality(TOOL_CROWBAR))
+ var/obj/item/stack/material/plasteel/reinforcing_sheet = new /obj/item/stack/material/plasteel(get_turf(src), reinforcing)
+ reinforcing = 0
+ to_chat(user, span_notice("You remove \the [reinforcing_sheet]."))
+ playsound(src, I.usesound, 100, 1)
+ return
+
+ if(I.has_tool_quality(TOOL_WELDER))
+ if(reinforcing)
+ if(!density)
+ to_chat(user, span_warning("\The [src] must be closed before you can reinforce it."))
+ return
+
+ if(reinforcing < 2)
+ to_chat(user, span_warning("You will need more plasteel to reinforce \the [src]."))
+ return
+
+ var/obj/item/weldingtool/welder = I.get_welder()
+ if(welder.remove_fuel(0,user))
+ to_chat(user, span_notice("You start welding the plasteel into place."))
+ playsound(src, welder.usesound, 50, 1)
+ if(do_after(user, 1 SECOND * welder.toolspeed, target = src) && welder && welder.isOn())
+ to_chat(user, span_notice("You finish reinforcing \the [src]."))
+ heat_proof = TRUE
+ update_icon()
+ reinforcing = 0
+ return
+
+ if(health < maxhealth)
if(!density)
to_chat(user, span_warning("\The [src] must be closed before you can repair it."))
return
@@ -245,42 +325,47 @@
health = maxhealth
update_icon()
return
- //psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them.
- if(src.density && istype(I, /obj/item) && user.a_intent == I_HURT && !istype(I, /obj/item/card))
- var/obj/item/W = I
- user.setClickCooldown(user.get_attack_speed(W))
- if(W.damtype == BRUTE || W.damtype == BURN)
- user.do_attack_animation(src)
- if(W.force < min_force)
- user.visible_message(span_danger("\The [user] hits \the [src] with \the [W] with no visible effect."))
- else
- user.visible_message(span_danger("\The [user] forcefully strikes \the [src] with \the [W]!"))
- playsound(src, hitsound, 100, 1)
- take_damage(W.force)
- return
- if(src.operating > 0 || isrobot(user))
- return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
-
- if(src.operating)
+ // Handle signals
+ if(..())
return
- if(src.allowed(user) && operable())
- if(src.density)
+ //psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them.
+ if(density && istype(I, /obj/item) && user.a_intent == I_HURT && !istype(I, /obj/item/card))
+ var/obj/item/W = I
+ user.setClickCooldown(user.get_attack_speed(W))
+ if(W.damtype == BRUTE || W.damtype == BURN)
+ user.do_attack_animation(src)
+ if(W.force < min_force)
+ user.visible_message(span_danger("\The [user] hits \the [src] with \the [W] with no visible effect."))
+ else
+ user.visible_message(span_danger("\The [user] forcefully strikes \the [src] with \the [W]!"))
+ playsound(src, hitsound, 100, 1)
+ take_damage(W.force)
+ return
+
+ return try_to_activate_door(user)
+
+/obj/machinery/door/proc/try_to_activate_door(mob/user)
+ add_fingerprint(user)
+ if(operating || isrobot(user))
+ return FALSE //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
+ if(allowed(user) && operable())
+ if(density)
open()
else
close()
- return
-
- if(src.density)
+ return TRUE
+ if(density)
do_animate("deny")
- return
+
+ return FALSE
/obj/machinery/door/emag_act(var/remaining_charges)
if(density && operable())
do_animate("spark")
addtimer(CALLBACK(src, PROC_REF(trigger_emag)), 0.6 SECONDS)
- return 1
+ return TRUE
/obj/machinery/door/proc/trigger_emag()
PRIVATE_PROC(TRUE)
@@ -289,15 +374,15 @@
operating = -1
/obj/machinery/door/take_damage(var/damage)
- var/initialhealth = src.health
- src.health = max(0, src.health - damage)
- if(src.health <= 0 && initialhealth > 0)
- src.set_broken()
- else if(src.health < src.maxhealth / 4 && initialhealth >= src.maxhealth / 4)
+ var/initialhealth = health
+ health = max(0, health - damage)
+ if(health <= 0 && initialhealth > 0)
+ set_broken()
+ else if(health < maxhealth / 4 && initialhealth >= maxhealth / 4)
visible_message("\The [src] looks like it's about to break!" )
- else if(src.health < src.maxhealth / 2 && initialhealth >= src.maxhealth / 2)
+ else if(health < maxhealth / 2 && initialhealth >= maxhealth / 2)
visible_message("\The [src] looks seriously damaged!" )
- else if(src.health < src.maxhealth * 3/4 && initialhealth >= src.maxhealth * 3/4)
+ else if(health < maxhealth * 3/4 && initialhealth >= maxhealth * 3/4)
visible_message("\The [src] shows signs of damage!" )
update_icon()
return
@@ -305,13 +390,13 @@
/obj/machinery/door/examine(mob/user)
. = ..()
- if(src.health <= 0)
+ if(health <= 0)
. += "It is broken!"
- else if(src.health < src.maxhealth / 4)
+ else if(health < maxhealth / 4)
. += "It looks like it's about to break!"
- else if(src.health < src.maxhealth / 2)
+ else if(health < maxhealth / 2)
. += "It looks seriously damaged!"
- else if(src.health < src.maxhealth * 3/4)
+ else if(health < maxhealth * 3/4)
. += "It shows signs of damage!"
@@ -319,7 +404,7 @@
stat |= BROKEN
for (var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O.show_message("[src.name] breaks!" )
+ O.show_message("[name] breaks!" )
update_icon()
return
@@ -390,6 +475,8 @@
return
operating = 1
+ SEND_SIGNAL(src, COMSIG_DOOR_OPEN, forced)
+
do_animate("opening")
icon_state = "door0"
set_opacity(0)
@@ -398,14 +485,14 @@
/obj/machinery/door/proc/open_internalsetdensity(var/forced = 0)
PRIVATE_PROC(TRUE) //do not touch this or BYOND will devour you
SHOULD_NOT_OVERRIDE(TRUE)
- src.density = FALSE
+ density = FALSE
update_nearby_tiles()
addtimer(CALLBACK(src, PROC_REF(open_internalfinish),forced), anim_length_before_finalize)
/obj/machinery/door/proc/open_internalfinish(var/forced = 0)
PRIVATE_PROC(TRUE) //do not touch this or BYOND will devour you
SHOULD_NOT_OVERRIDE(TRUE)
- src.layer = open_layer
+ layer = open_layer
explosion_resistance = 0
update_icon()
set_opacity(0)
@@ -419,8 +506,8 @@
if(autoclose)
autoclose_in(next_close_wait())
+ return TRUE
- return 1
/obj/machinery/door/proc/next_close_wait()
var/lowest_temp = T20C
var/highest_temp = T0C
@@ -445,6 +532,8 @@
return
operating = 1
+ SEND_SIGNAL(src, COMSIG_DOOR_CLOSE, forced)
+
close_door_at = 0
do_animate("closing")
addtimer(CALLBACK(src, PROC_REF(close_internalsetdensity),forced), anim_length_before_density)
@@ -452,9 +541,9 @@
/obj/machinery/door/proc/close_internalsetdensity(var/forced = 0)
PRIVATE_PROC(TRUE) //do not touch this or BYOND will devour you
SHOULD_NOT_OVERRIDE(TRUE)
- src.density = TRUE
+ density = TRUE
explosion_resistance = initial(explosion_resistance)
- src.layer = closed_layer
+ layer = closed_layer
update_nearby_tiles()
addtimer(CALLBACK(src, PROC_REF(close_internalfinish),forced), anim_length_before_finalize)
@@ -476,29 +565,29 @@
addtimer(CALLBACK(las, TYPE_PROC_REF(/obj/effect/step_trigger/claymore_laser,Trigger), src), 1)
*/
- return 1
+ return TRUE
/obj/machinery/door/proc/requiresID()
- return 1
+ return TRUE
/obj/machinery/door/allowed(mob/M)
if(!requiresID())
return ..(null) //don't care who they are or what they have, act as if they're NOTHING
- return ..(M)
+ . = ..()
/obj/machinery/door/update_nearby_tiles(need_rebuild)
if(!SSair)
- return 0
+ return FALSE
for(var/turf/simulated/turf in locs)
update_heat_protection(turf)
SSair.mark_for_update(turf)
- return 1
+ return TRUE
/obj/machinery/door/proc/update_heat_protection(var/turf/simulated/source)
if(istype(source))
- if(src.density && (src.opacity || src.heat_proof))
+ if(density && (opacity || heat_proof))
source.thermal_conductivity = DOOR_HEAT_TRANSFER_COEFFICIENT
else
source.thermal_conductivity = initial(source.thermal_conductivity)
diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm
index 3f70adcb67..76f548ddc7 100644
--- a/code/game/machinery/doors/door_vr.dm
+++ b/code/game/machinery/doors/door_vr.dm
@@ -1,22 +1,3 @@
-/turf/simulated/floor/proc/adjacent_fire_act_vr(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
- for(var/obj/machinery/door/D in src) //makes doors next to fire affected by fire
- D.fire_act(adj_air, adj_temp, adj_volume)
-
-/obj/machinery/door
- var/reinforcing = 0 //vorestation addition
- var/tintable = 0
- var/icon_tinted
- var/id_tint
-
-/obj/machinery/door/firedoor
- heat_proof = 1
-
-/obj/machinery/door/airlock/vault
- heat_proof = 1
-
-/obj/machinery/door/airlock/hatch
- heat_proof = 1
-
/obj/machinery/door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
for(var/obj/machinery/door/blast/B in loc.contents)
if(B.density)
@@ -40,87 +21,6 @@
return ..()
-// Returns true only if one of the actions unique to reinforcing is done, otherwise false and continuing normal attackby
-/obj/machinery/door/proc/attackby_vr(obj/item/I as obj, mob/user as mob)
- if(istype(I, /obj/item/stack/material) && I.get_material_name() == MAT_PLASTEEL)
- if(heat_proof)
- to_chat(user, span_warning("\The [src] is already reinforced."))
- return TRUE
- if((stat & BROKEN) || (health < maxhealth))
- to_chat(user, span_notice("It looks like \the [src] broken. Repair it before reinforcing it."))
- return TRUE
- if(!density)
- to_chat(user, span_warning("\The [src] must be closed before you can reinforce it."))
- return TRUE
-
- var/amount_needed = 2
-
- var/obj/item/stack/stack = I
- var/amount_given = amount_needed - reinforcing
- var/mats_given = stack.get_amount()
- var/singular_name = stack.singular_name
- if(reinforcing && amount_given <= 0)
- to_chat(user, span_warning("You must weld or remove \the plasteel from \the [src] before you can add anything else."))
- else
- if(mats_given >= amount_given)
- if(stack.use(amount_given))
- reinforcing += amount_given
- else
- if(stack.use(mats_given))
- reinforcing += mats_given
- amount_given = mats_given
- if(amount_given)
- to_chat(user, span_notice("You fit [amount_given] [singular_name]\s on \the [src]."))
-
- return TRUE
-
- if(reinforcing && I.has_tool_quality(TOOL_WELDER))
- if(!density)
- to_chat(user, span_warning("\The [src] must be closed before you can reinforce it."))
- return TRUE
-
- if(reinforcing < 2)
- to_chat(user, span_warning("You will need more plasteel to reinforce \the [src]."))
- return TRUE
-
- var/obj/item/weldingtool/welder = I.get_welder()
- if(welder.remove_fuel(0,user))
- to_chat(user, span_notice("You start welding the plasteel into place."))
- playsound(src, welder.usesound, 50, 1)
- if(do_after(user, 1 SECOND * welder.toolspeed, target = src) && welder && welder.isOn())
- to_chat(user, span_notice("You finish reinforcing \the [src]."))
- heat_proof = 1
- update_icon()
- reinforcing = 0
- return TRUE
-
- if(reinforcing && I.has_tool_quality(TOOL_CROWBAR))
- var/obj/item/stack/material/plasteel/reinforcing_sheet = new /obj/item/stack/material/plasteel(src.loc, reinforcing)
- reinforcing = 0
- to_chat(user, span_notice("You remove \the [reinforcing_sheet]."))
- playsound(src, I.usesound, 100, 1)
- return TRUE
-
- return FALSE
-
-/obj/machinery/door/blast/regular/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- return // blast doors are immune to fire completely.
-
-/obj/machinery/door/blast/regular
- heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage
-
-/obj/machinery/door/blast/angled/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- return // blast doors are immune to fire completely.
-
-/obj/machinery/door/blast/angled
- heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage
-
-/obj/machinery/door/blast/puzzle/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- return // blast doors are immune to fire completely.
-
-/obj/machinery/door/blast/puzzle
- heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage
-
/obj/machinery/door/proc/toggle()
if(glass)
icon = icon_tinted
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 151e2dcc66..0f57f2a772 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -22,6 +22,7 @@
//These are frequenly used with windows, so make sure zones can pass.
//Generally if a firedoor is at a place where there should be a zone boundery then there will be a regular door underneath it.
block_air_zones = 0
+ heat_proof = 1
var/blocked = 0
var/prying = 0
diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm
index 3c14e0b6ab..5ac735574b 100644
--- a/code/game/objects/items/toys/toys_vr.dm
+++ b/code/game/objects/items/toys/toys_vr.dm
@@ -552,7 +552,7 @@
var/list/players = list()
for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > MinutesToTicks(10))
+ if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > 10 MINUTES)
continue
players += player.real_name
diff --git a/code/game/objects/structures/props/puzzledoor.dm b/code/game/objects/structures/props/puzzledoor.dm
index adca46240e..285daa6b02 100644
--- a/code/game/objects/structures/props/puzzledoor.dm
+++ b/code/game/objects/structures/props/puzzledoor.dm
@@ -12,6 +12,7 @@
explosion_resistance = 100
maxhealth = 9999999 //No.
+ heat_proof = 1 //just so repairing them doesn't try to fireproof something that never takes fire damage
var/list/locks = list()
var/lockID = null
@@ -94,3 +95,6 @@
/obj/machinery/door/blast/puzzle/attack_alien(var/mob/user)
if(check_locks())
force_toggle(1, user)
+
+/obj/machinery/door/blast/puzzle/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ return // blast doors are immune to fire completely.
diff --git a/code/game/turfs/simulated/floor_acts.dm b/code/game/turfs/simulated/floor_acts.dm
index 15332c87de..417d87821c 100644
--- a/code/game/turfs/simulated/floor_acts.dm
+++ b/code/game/turfs/simulated/floor_acts.dm
@@ -45,4 +45,5 @@
if(W.dir == dir_to || W.is_fulltile()) //Same direction or diagonal (full tile)
W.fire_act(adj_air, adj_temp, adj_volume)
- attempt_vr(src,"adjacent_fire_act_vr",list(adj_turf,adj_air,adj_temp,adj_volume))
+ for(var/obj/machinery/door/D in src) //makes doors next to fire affected by fire
+ D.fire_act(adj_air, adj_temp, adj_volume)
diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm
index 89fe38a38f..fc1c54f631 100644
--- a/code/modules/alarm/alarm.dm
+++ b/code/modules/alarm/alarm.dm
@@ -54,7 +54,7 @@
src.hidden = hidden
// Currently only non-0 durations can be altered (normal alarms VS EMP blasts)
if(AS.duration)
- duration = SecondsToTicks(duration)
+ duration = duration SECONDS
AS.duration = duration
AS.severity = severity
src.hidden = min(src.hidden, hidden)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 7b123bda4a..f43d9d2353 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -266,7 +266,7 @@ var/list/preferences_datums = list()
else if(href_list["reload"])
load_preferences(TRUE)
load_character()
- attempt_vr(client.prefs_vr,"load_vore","")
+ client.prefs_vr.load_vore()
sanitize_preferences()
else if(href_list["load"])
if(!IsGuestKey(usr.key))
@@ -360,7 +360,7 @@ var/list/preferences_datums = list()
load_preferences(TRUE)
load_character(slotnum)
- attempt_vr(user.client?.prefs_vr,"load_vore","")
+ user.client?.prefs_vr.load_vore()
sanitize_preferences()
save_preferences()
ShowChoices(user)
@@ -405,7 +405,7 @@ var/list/preferences_datums = list()
save_preferences()
load_preferences(TRUE)
load_character()
- attempt_vr(user.client?.prefs_vr,"load_vore","")
+ user.client?.prefs_vr.load_vore()
ShowChoices(user)
/datum/preferences/proc/vanity_copy_to(var/mob/living/carbon/human/character, var/copy_name, var/copy_flavour = TRUE, var/copy_ooc_notes = FALSE, var/convert_to_prosthetics = FALSE, var/apply_bloodtype = TRUE)
diff --git a/code/modules/client/preferences_tgui.dm b/code/modules/client/preferences_tgui.dm
index 30f71da8b6..87e63ff698 100644
--- a/code/modules/client/preferences_tgui.dm
+++ b/code/modules/client/preferences_tgui.dm
@@ -148,7 +148,7 @@
if("reload")
load_preferences(TRUE)
load_character()
- attempt_vr(client.prefs_vr,"load_vore","") //VOREStation Edit
+ client.prefs_vr.load_vore()
sanitize_preferences()
. = TRUE
if("resetslot")
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index aa4ed0e371..9b616c6315 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -27,7 +27,7 @@
/datum/event/ionstorm/start()
for (var/mob/living/carbon/human/player in GLOB.player_list)
- if( !player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > MinutesToTicks(10))
+ if( !player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > 10 MINUTES)
continue
players += player.real_name
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 51a15a9f94..9656c2c8bc 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -854,8 +854,6 @@
else
resist_restraints()
- if(attempt_vr(src,"vore_process_resist",args)) return TRUE
-
/mob/living/proc/resist_buckle()
if(buckled)
if(istype(buckled, /obj/vehicle))
diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm
index 0ca6e88c58..eedd1656d3 100644
--- a/code/modules/mob/living/silicon/laws.dm
+++ b/code/modules/mob/living/silicon/laws.dm
@@ -137,7 +137,7 @@
var/list/players = list()
for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > MinutesToTicks(10))
+ if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > 10 MINUTES)
continue
players += player.real_name
diff --git a/code/modules/mob/living/silicon/pai/pai_hud.dm b/code/modules/mob/living/silicon/pai/pai_hud.dm
index 6242c9af5c..f52f26284d 100644
--- a/code/modules/mob/living/silicon/pai/pai_hud.dm
+++ b/code/modules/mob/living/silicon/pai/pai_hud.dm
@@ -5,9 +5,10 @@
icon = 'icons/mob/pai_hud.dmi'
var/base_state
-/atom/movable/screen/pai/Click_vr(location, control, params)
- if(!usr) return 1
- if(!ispAI(usr)) return 1
+/atom/movable/pai/Click(location, control, params)
+ . = ..()
+ if(!ispAI(usr))
+ return
var/mob/living/silicon/pai/p = usr
switch(name)
if("fold/unfold")
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index da72905cb3..7f94a29462 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -319,7 +319,7 @@
/mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised)
if(!next_alarm_notice)
- next_alarm_notice = world.time + SecondsToTicks(10)
+ next_alarm_notice = world.time + (10 SECONDS)
if(alarm.hidden)
return
if(alarm.origin && !(get_z(alarm.origin) in using_map.get_map_levels(get_z(src), TRUE, om_range = DEFAULT_OVERMAP_RANGE)))
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 72b6ba6c5a..f505373bd8 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -183,7 +183,6 @@
// Body writing
else if(istype(I, /obj/item/pen))
- // Avoids having an override on this proc because attempt_vr won't call the override
if(!ishuman(src))
return FALSE
var/mob/living/carbon/human/us = src
@@ -213,20 +212,6 @@
return FALSE
-//
-// Our custom resist catches for /mob/living
-//
-/mob/living/proc/vore_process_resist()
- //Are we resisting from inside a belly?
- // if(isbelly(loc))
- // var/obj/belly/B = loc
- // B.relay_resist(src)
- // return TRUE //resist() on living does this TRUE thing.
- // Note: This is no longer required, as the refactors to resisting allow bellies to just define container_resist
-
- //Other overridden resists go here
- return FALSE
-
//
// Verb for saving vore preferences to save file
//
@@ -364,14 +349,14 @@
return
load_character(slotnum)
- attempt_vr(user.client?.prefs_vr,"load_vore","")
+ user.client?.prefs_vr.load_vore()
sanitize_preferences()
return remember_default
/datum/preferences/proc/return_to_character_slot(mob/user, var/remembered_default)
load_character(remembered_default)
- attempt_vr(user.client?.prefs_vr,"load_vore","")
+ user.client?.prefs_vr.load_vore()
sanitize_preferences()
//
diff --git a/code/modules/vore/hook-defs_vr.dm b/code/modules/vore/hook-defs_vr.dm
deleted file mode 100644
index 5482d2b2a3..0000000000
--- a/code/modules/vore/hook-defs_vr.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-// Hook for when a mob de-spawns!
-/hook/despawn
diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm
index fd66428c3d..2aa3f1b99e 100644
--- a/code/modules/vore/persist/persist_vr.dm
+++ b/code/modules/vore/persist/persist_vr.dm
@@ -72,7 +72,7 @@
/**
* Called when mob despawns early (via cryopod)!
*/
-/hook/despawn/proc/persist_despawned_mob(var/mob/occupant, var/obj/machinery/cryopod/pod)
+/proc/persist_despawned_mob(var/mob/occupant, var/obj/machinery/cryopod/pod)
ASSERT(istype(pod))
ASSERT(ispath(pod.spawnpoint_type, /datum/spawnpoint))
persist_interround_data(occupant, pod.spawnpoint_type)
diff --git a/code/modules/vore/trycatch_vr.dm b/code/modules/vore/trycatch_vr.dm
deleted file mode 100644
index b553055512..0000000000
--- a/code/modules/vore/trycatch_vr.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-This file is for jamming single-line procs into Polaris procs.
-It will prevent runtimes and allow their code to run if VOREStation's fails.
-It will also log when we mess up our code rather than making it vague.
-
-Call it at the top of a stock proc with...
-
-if(attempt_vr(object,proc to call,args)) return
-
-...if you are replacing an entire proc.
-
-The proc you're attemping should return nonzero values on success.
-*/
-
-/proc/attempt_vr(callon, procname, list/arguments=null)
- try
- if(!callon || !procname)
- log_world("## ERROR attempt_vr: Invalid obj/proc: [callon]/[procname]")
- return 0
-
- var/result = call(callon,procname)(arglist(arguments))
-
- return result
-
- catch(var/exception/e)
- log_world("## ERROR attempt_vr runtimed when calling [procname] on [callon].")
- log_world("## ERROR attempt_vr catch: [e] on [e.file]:[e.line]")
- log_runtime(e)
- return 0
-
-/*
-This is the _vr version of calling hooks.
-It's meant to have different messages, and also the try/catch block.
-For when you want hooks and want to know when you ruin everything,
-vs when Polaris ruins everything.
-
-Call it at the top of a stock proc with...
-
-if(hook_vr(proc,args)) return
-
-...if you are replacing an entire proc.
-
-The hooks you're calling should return nonzero values on success.
-*/
-/proc/hook_vr(hook, list/arguments=null)
- try
- var/hook_path = text2path("/hook/[hook]")
- if(!hook_path)
- log_world("## ERROR hook_vr: Invalid hook '/hook/[hook]' called.")
- return 0
-
- var/hook_instance = new hook_path
- var/status = 1
- for(var/P in typesof("[hook_path]/proc"))
- if(!call(hook_instance, P)(arglist(arguments)))
- log_world("## ERROR hook_vr: Hook '[P]' failed or runtimed.")
- status = 0
-
- return status
-
- catch(var/exception/e)
- log_world("## ERROR hook_vr itself failed or runtimed. Exception below.")
- log_world("## ERROR hook_vr catch: [e] on [e.file]:[e.line]")
- log_runtime(e)
diff --git a/vorestation.dme b/vorestation.dme
index 4e57a3f33e..1f40c43ba3 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -370,7 +370,6 @@
#include "code\_onclick\hud\robot_vr.dm"
#include "code\_onclick\hud\screen_objects.dm"
#include "code\_onclick\hud\screen_objects_ch.dm"
-#include "code\_onclick\hud\screen_objects_vr.dm"
#include "code\_onclick\hud\skybox.dm"
#include "code\_onclick\hud\soulcatcher_guest.dm"
#include "code\_onclick\hud\spell_screen_objects.dm"
@@ -1031,7 +1030,6 @@
#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
-#include "code\game\gamemodes\meteor\meteors_vr.dm"
#include "code\game\gamemodes\mixed\conflux.dm"
#include "code\game\gamemodes\mixed\infestation.dm"
#include "code\game\gamemodes\mixed\intrigue.dm"
@@ -1290,7 +1288,7 @@
#include "code\game\machinery\doors\airlock_ch.dm"
#include "code\game\machinery\doors\airlock_control.dm"
#include "code\game\machinery\doors\airlock_electronics.dm"
-#include "code\game\machinery\doors\airlock_vr.dm"
+#include "code\game\machinery\doors\airlock_subtypes.dm"
#include "code\game\machinery\doors\alarmlock.dm"
#include "code\game\machinery\doors\blast_door.dm"
#include "code\game\machinery\doors\blast_door_yw.dm"
@@ -4811,10 +4809,8 @@
#include "code\modules\ventcrawl\ventcrawl_multiz.dm"
#include "code\modules\ventcrawl\ventcrawl_verb.dm"
#include "code\modules\vore\chat_healthbars.dm"
-#include "code\modules\vore\hook-defs_vr.dm"
#include "code\modules\vore\mob_tf.dm"
#include "code\modules\vore\mouseray.dm"
-#include "code\modules\vore\trycatch_vr.dm"
#include "code\modules\vore\appearance\preferences_vr.dm"
#include "code\modules\vore\appearance\sprite_accessories_yw.dm"
#include "code\modules\vore\appearance\update_icons_vr.dm"