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"