Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attaching doors to walls #8422

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cev_eris.dme
Original file line number Diff line number Diff line change
Expand Up @@ -770,6 +770,7 @@
#include "code\game\machinery\doors\brigdoors.dm"
#include "code\game\machinery\doors\checkForMultipleDoors.dm"
#include "code\game\machinery\doors\door.dm"
#include "code\game\machinery\doors\door_visual_object.dm"
#include "code\game\machinery\doors\firedoor.dm"
#include "code\game\machinery\doors\firedoor_assembly.dm"
#include "code\game\machinery\doors\holy_door.dm"
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -366,3 +366,5 @@
#define TTS_SEED_DEFAULT_FEMALE "Female_1"
#define TTS_SEED_DEFAULT_MALE "Male_1"
#define TTS_SEED_ANNOUNCER "Robot_2"

#define DOOR_MISC_ICON 'icons/obj/doors/door_misc.dmi'
92 changes: 61 additions & 31 deletions code/game/machinery/doors/airlock.dm
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)
return get_material_by_name(mineral)
return get_material_by_name(MATERIAL_STEEL)

/obj/machinery/door/airlock/get_overlay_icon()
return DOOR_MISC_ICON

/obj/machinery/door/airlock/command
name = "Airlock"
icon = 'icons/obj/doors/Doorcom.dmi'
Expand Down Expand Up @@ -102,6 +105,9 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)
opacity = 0
glass = 1

/obj/machinery/door/airlock/external/get_overlay_icon()
return 'icons/obj/doors/Doorext_misc.dmi'

/obj/machinery/door/airlock/glass
name = "Glass Airlock"
icon = 'icons/obj/doors/Doorglass.dmi'
Expand All @@ -112,6 +118,9 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)
opacity = 0
glass = 1

/obj/machinery/door/airlock/glass/get_overlay_icon()
return icon

/obj/machinery/door/airlock/centcom
name = "Airlock"
icon = 'icons/obj/doors/Doorele.dmi'
Expand All @@ -126,6 +135,9 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)
secured_wires = 1
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.

/obj/machinery/door/airlock/vault/get_overlay_icon()
return 'icons/obj/doors/vault_misc.dmi'

/obj/machinery/door/airlock/vault/bolted
icon_state = "door_locked"
locked = 1
Expand All @@ -136,6 +148,9 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)
opacity = 1
assembly_type = /obj/structure/door_assembly/door_assembly_fre

/obj/machinery/door/airlock/freezer/get_overlay_icon()
return icon

/obj/machinery/door/airlock/hatch
name = "Airtight Hatch"
icon = 'icons/obj/doors/Doorhatchele.dmi'
Expand Down Expand Up @@ -248,42 +263,45 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)

/* NEW AIRLOCKS BLOCK */

/obj/machinery/door/airlock/maintenance_cargo
/obj/machinery/door/airlock/maintenance/get_overlay_icon()
return 'icons/obj/doors/door_maint_misc.dmi'

/obj/machinery/door/airlock/maintenance/cargo
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_cargo.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_cargo

/obj/machinery/door/airlock/maintenance_command
/obj/machinery/door/airlock/maintenance/command
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_command.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_command

/obj/machinery/door/airlock/maintenance_engineering
/obj/machinery/door/airlock/maintenance/engineering
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_engi.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_engi

/obj/machinery/door/airlock/maintenance_medical
/obj/machinery/door/airlock/maintenance/medical
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_med.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_med

/obj/machinery/door/airlock/maintenance_rnd
/obj/machinery/door/airlock/maintenance/rnd
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_rnd.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_rnd

/obj/machinery/door/airlock/maintenance_security
/obj/machinery/door/airlock/maintenance/security
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_sec.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_sec

/obj/machinery/door/airlock/maintenance_common
/obj/machinery/door/airlock/maintenance/common
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_common.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_common

/obj/machinery/door/airlock/maintenance_interior
/obj/machinery/door/airlock/maintenance/interior
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormaint_int.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_maint_int
Expand Down Expand Up @@ -382,6 +400,9 @@ GLOBAL_LIST_EMPTY(wedge_icon_cache)
secured_wires = 1
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity

/obj/machinery/door/airlock/highsecurity/get_overlay_icon()
return 'icons/obj/doors/hightechsecurity_misc.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.
Expand Down Expand Up @@ -653,58 +674,67 @@ There are 9 wires.
cut_overlays()
if(underlays.len)
underlays.Cut()
if(door_flicker.overlays.len)
door_flicker.overlays.Cut()
if(density)
icon_state = "door_closed"
if(locked && lights && arePowerSystemsOn())
icon_state = "door_locked"
overlays += image(get_overlay_icon(), "door_locked")
set_light(1.5, 0.5, COLOR_RED_LIGHT)
else
icon_state = "door_closed"
overlays += image(get_overlay_icon(), "door_closed")
if(p_open || welded)
overlays = list()
if(p_open)
overlays += image(icon, "panel_open")
door_flicker.overlays += image(get_overlay_icon(), "panel_open")
if (!(stat & NOPOWER))
if(stat & BROKEN)
overlays += image(icon, "sparks_broken")
door_flicker.overlays += image(get_overlay_icon(), "sparks_broken")
else if (health < maxHealth * 3/4)
overlays += image(icon, "sparks_damaged")
door_flicker.overlays += image(get_overlay_icon(), "sparks_damaged")
if(welded)
overlays += image(icon, "welded")
overlays += image(get_overlay_icon(), "welded")
else if (health < maxHealth * 3/4 && !(stat & NOPOWER))
overlays += image(icon, "sparks_damaged")
door_flicker.overlays += image(get_overlay_icon(), "sparks_damaged")
else
icon_state = "door_open"
if((stat & BROKEN) && !(stat & NOPOWER))
overlays += image(icon, "sparks_open")
door_flicker.overlays += image(get_overlay_icon(), "sparks_open")
if(wedged_item)
generate_wedge_overlay()

/obj/machinery/door/airlock/do_animate(animation)
switch(animation)
if("opening")
if(overlays.len)
overlays.Cut()
cut_overlays()
if(underlays.len)
underlays.Cut()
if(door_flicker.overlays.len)
door_flicker.overlays.Cut()


flick("door_opening", src)//[stat ? "_stat":]
if(p_open)
flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking
update_icon()
else
flick("door_opening", src)//[stat ? "_stat":]
update_icon()
flick_door("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking
update_icon()
if("closing")
if(overlays.len)
overlays.Cut()
cut_overlays()
if(underlays.len)
underlays.Cut()
if(door_flicker.overlays.len)
door_flicker.overlays.Cut()

flick("door_closing", src)
if(p_open)
flick("o_door_closing", src)
update_icon()
else
flick("door_closing", src)
update_icon()
flick_door("o_door_closing", src)
update_icon()
if("spark")
if(density)
flick("door_spark", src)
flick_door("door_spark", src)
if("deny")
if(density && src.arePowerSystemsOn())
flick("door_deny", src)
flick_door("door_deny", src)
playsound(src.loc, 'sound/machines/Custom_deny.ogg', 50, 1, -2)
return

Expand Down
3 changes: 3 additions & 0 deletions code/game/machinery/doors/alarmlock.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
var/air_frequency = 1437
autoclose = 0

/obj/machinery/door/airlock/alarmlock/get_overlay_icon()
return icon

/obj/machinery/door/airlock/alarmlock/New()
..()
air_connection = new
Expand Down
2 changes: 2 additions & 0 deletions code/game/machinery/doors/blast_door.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
var/obj/item/electronics/airlock/electronics
// here for map compatibility
var/_wifi_id
auto_change_door_direction = FALSE
can_be_connected_to_wall = FALSE

/obj/machinery/door/blast/Initialize()
. = ..()
Expand Down
46 changes: 43 additions & 3 deletions code/game/machinery/doors/door.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,48 @@
// turf animation
var/atom/movable/overlay/c_animation

/obj/machinery/door/New()
GLOB.all_doors += src
..()
var/atom/movable/overlay/door/door_flicker
var/auto_change_door_direction = TRUE
var/can_be_connected_to_wall = TRUE

/obj/machinery/door/Destroy()
GLOB.all_doors -= src
QDEL_NULL(door_flicker)
..()


/obj/machinery/door/proc/get_overlay_icon()
return icon

/obj/machinery/door/proc/flick_door(icon_flick, target)
if(!icon_flick || !target)
return
door_flicker.flick_door(icon_flick)

/obj/machinery/door/proc/on_door_direction_update_trigger(from_door = FALSE)
if(!auto_change_door_direction)
door_flicker.dir = dir
return
var/turf/simulated/wall/W1 = get_step(src, SOUTH)
var/turf/simulated/wall/W2 = get_step(src, NORTH)
var/south_detected = istype(W1) || locate(/obj/structure/low_wall) in W1
var/north_detected = istype(W2) || locate(/obj/structure/low_wall) in W2
if(!south_detected)
var/obj/machinery/door/D = locate() in W1
south_detected = istype(D)
if(istype(D) && !from_door)
D.on_door_direction_update_trigger(TRUE)
if(!north_detected)
var/obj/machinery/door/D = locate() in W2
north_detected = istype(D)
if(istype(D) && !from_door)
D.on_door_direction_update_trigger(TRUE)
if(south_detected && north_detected)
dir = WEST
else
dir = NORTH
door_flicker.dir = dir

/obj/machinery/door/can_prevent_fall(above)
return above ? density : null

Expand All @@ -67,7 +101,13 @@
attack_animation(user)

/obj/machinery/door/New()
GLOB.all_doors += src
door_flicker = new(src)
door_flicker.master = src
door_flicker.icon = get_overlay_icon()
vis_contents |= door_flicker
. = ..()
on_door_direction_update_trigger()
if(density)
layer = closed_layer
explosion_resistance = initial(explosion_resistance)
Expand Down
12 changes: 12 additions & 0 deletions code/game/machinery/doors/door_visual_object.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// filler object for visual stuff
/atom/movable/overlay/door
name = ""
icon = DOOR_MISC_ICON
icon_state = ""
density = FALSE
anchored = TRUE

/atom/movable/overlay/door/proc/flick_door(icon_flick)
if(!icon_flick)
return
flick(icon_flick, src)
2 changes: 2 additions & 0 deletions code/game/machinery/doors/firedoor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
use_power = IDLE_POWER_USE
idle_power_usage = 5

can_be_connected_to_wall = FALSE

/obj/machinery/door/firedoor/New()
..()

Expand Down
Loading
Loading