diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 7675b843202..a3acc605c5b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -119,6 +119,10 @@ /obj/machinery/door/airlock/Initialize() . = ..() + //SKYRAT EDIT ADDITION BEGIN + if(multi_tile) + SetBounds() + //SKYRAT EDIT END wires = set_wires() if(frequency) set_frequency(frequency) @@ -616,8 +620,6 @@ add_overlay(I) /* - SKYRAT ORIGINAL -======= ->>>>>>> 56345975ba6 (The Great Radio Rework: NTNET Part 1 of many. (#54462)) /obj/machinery/door/airlock/proc/check_unres() //unrestricted sides. This overlay indicates which directions the player can access even without an ID if(hasPower() && unres_sides) if(unres_sides & NORTH) @@ -1159,9 +1161,17 @@ update_icon(AIRLOCK_OPENING, 1) sleep(1) set_opacity(0) + //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR + if(multi_tile) + filler.set_opacity(FALSE) + //SKYRAT EDIT END update_freelook_sight() sleep(4) density = FALSE + //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR + if(multi_tile) + filler.density = FALSE + //SKYRAT EDIT END flags_1 &= ~PREVENT_CLICK_UNDER_1 air_update_turf(1) sleep(1) @@ -1210,16 +1220,26 @@ density = TRUE flags_1 |= PREVENT_CLICK_UNDER_1 air_update_turf(1) + //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR + if(multi_tile) + filler.density = TRUE + //SKYRAT EDIT END sleep(1) if(!air_tight) density = TRUE flags_1 |= PREVENT_CLICK_UNDER_1 air_update_turf(1) + //SKYRAT EDIT ADDITION BEGIN - LARGE_DOOR + if(multi_tile) + filler.density = TRUE + //SKYRAT EDIT END sleep(4) if(dangerous_close) crush() if(visible && !glass) set_opacity(1) + if(multi_tile) + filler.set_opacity(TRUE) update_freelook_sight() sleep(1) update_icon(AIRLOCK_CLOSED, 1) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 17d2c49b384..d312499e635 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -248,6 +248,10 @@ else door = new airlock_type( loc ) door.setDir(dir) + //SKYRAT EDIT ADDITION BEGIN - LARGE_DOORS + if(door.multi_tile) + door.SetBounds() + //SKYRAT EDIT END door.unres_sides = electronics.unres_sides //door.req_access = req_access door.electronics = electronics diff --git a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm index 89b72713dc4..d1849fef97f 100644 --- a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm +++ b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm @@ -26,6 +26,15 @@ var/forcedOpen = 'modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg' //Come on guys, why aren't all the sound files like this. var/forcedClosed = 'modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg' + var/has_environment_lights = TRUE //Does this airlock emit a light? + var/light_color_poweron = AIRLOCK_POWERON_LIGHT_COLOR + var/light_color_bolts = AIRLOCK_BOLTS_LIGHT_COLOR + var/light_color_access = AIRLOCK_ACCESS_LIGHT_COLOR + var/light_color_emergency = AIRLOCK_EMERGENCY_LIGHT_COLOR + var/light_color_deny = AIRLOCK_DENY_LIGHT_COLOR + var/door_light_range = AIRLOCK_LIGHT_RANGE + var/door_light_power = AIRLOCK_LIGHT_POWER + /obj/machinery/door/airlock/Initialize() //overlay2 vis_overlay1 = new() @@ -37,6 +46,9 @@ vis_overlay2.plane = 1 vis_contents += vis_overlay1 vis_contents += vis_overlay2 + if(multi_tile) + vis_overlay1.dir = src.dir + vis_overlay2.dir = src.dir set_airlock_overlays() . = ..() @@ -93,17 +105,17 @@ else if(obj_integrity < (0.75 * max_integrity)) damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file) if(lights && hasPower()) - pre_light_range = AIRLOCK_LIGHT_RANGE - pre_light_power = AIRLOCK_LIGHT_POWER + pre_light_range = door_light_range + pre_light_power = door_light_power if(locked) lights_overlay = "lights_bolts" - pre_light_color = AIRLOCK_BOLTS_LIGHT_COLOR + pre_light_color = light_color_bolts else if(emergency) lights_overlay = "lights_emergency" - pre_light_color = AIRLOCK_EMERGENCY_LIGHT_COLOR + pre_light_color = light_color_emergency else lights_overlay = "lights_poweron" - pre_light_color = AIRLOCK_POWERON_LIGHT_COLOR + pre_light_color = light_color_poweron if(note) note_overlay = get_airlock_overlay(notetype, note_overlay_file) @@ -129,10 +141,10 @@ if(seal) seal_overlay = get_airlock_overlay("sealed", overlays_file) if(lights && hasPower()) - pre_light_range = AIRLOCK_LIGHT_RANGE - pre_light_power = AIRLOCK_LIGHT_POWER + pre_light_range = door_light_range + pre_light_power = door_light_power lights_overlay = "lights_denied" - pre_light_color = AIRLOCK_DENY_LIGHT_COLOR + pre_light_color = light_color_deny if(note) note_overlay = get_airlock_overlay(notetype, note_overlay_file) @@ -173,17 +185,17 @@ if(obj_integrity < (0.75 * max_integrity)) damag_overlay = get_airlock_overlay("sparks_open", overlays_file) if(lights && hasPower()) - pre_light_range = AIRLOCK_LIGHT_RANGE - pre_light_power = AIRLOCK_LIGHT_POWER + pre_light_range = door_light_range + pre_light_power = door_light_power if(locked) lights_overlay = "lights_bolts_open" - pre_light_color = AIRLOCK_BOLTS_LIGHT_COLOR + pre_light_color = light_color_bolts else if(emergency) lights_overlay = "lights_emergency_open" - pre_light_color = AIRLOCK_EMERGENCY_LIGHT_COLOR + pre_light_color = light_color_emergency else lights_overlay = "lights_poweron_open" - pre_light_color = AIRLOCK_POWERON_LIGHT_COLOR + pre_light_color = light_color_poweron if(note) note_overlay = get_airlock_overlay("[notetype]_open", note_overlay_file) @@ -194,11 +206,11 @@ else filling_overlay = get_airlock_overlay("fill_closing", icon) if(lights && hasPower()) - pre_light_range = AIRLOCK_LIGHT_RANGE - pre_light_power = AIRLOCK_LIGHT_POWER + pre_light_range = door_light_range + pre_light_power = door_light_power //lights_overlay = get_airlock_overlay("lights_opening", overlays_file) lights_overlay = "lights_closing" - pre_light_color = AIRLOCK_ACCESS_LIGHT_COLOR + pre_light_color = light_color_access if(panel_open) if(security_level) panel_overlay = get_airlock_overlay("panel_closing_protected", overlays_file) @@ -214,11 +226,11 @@ else filling_overlay = get_airlock_overlay("fill_opening", icon) if(lights && hasPower()) - pre_light_range = AIRLOCK_LIGHT_RANGE - pre_light_power = AIRLOCK_LIGHT_POWER + pre_light_range = door_light_range + pre_light_power = door_light_power //lights_overlay = get_airlock_overlay("lights_opening", overlays_file) lights_overlay = "lights_opening" - pre_light_color = AIRLOCK_ACCESS_LIGHT_COLOR + pre_light_color = light_color_access if(panel_open) if(security_level) panel_overlay = get_airlock_overlay("panel_opening_protected", overlays_file) @@ -228,7 +240,10 @@ note_overlay = get_airlock_overlay("[notetype]_opening", note_overlay_file) cut_overlays() - set_light(pre_light_range, pre_light_power, pre_light_color) + if(has_environment_lights) + set_light(pre_light_range, pre_light_power, pre_light_color) + if(multi_tile) + filler.set_light(pre_light_range, pre_light_power, pre_light_color) add_overlay(frame_overlay) add_overlay(filling_overlay) add_overlay(panel_overlay) @@ -244,7 +259,9 @@ /obj/machinery/door/airlock/proc/update_vis_overlays(overlay_state) vis_overlay1.icon_state = overlay_state vis_overlay2.icon_state = overlay_state - + if(multi_tile) + vis_overlay1.dir = src.dir + vis_overlay2.dir = src.dir //STATION AIRLOCKS /obj/machinery/door/airlock diff --git a/modular_skyrat/modules/large_doors/code/large_doors.dm b/modular_skyrat/modules/large_doors/code/large_doors.dm new file mode 100644 index 00000000000..9a3bcc43494 --- /dev/null +++ b/modular_skyrat/modules/large_doors/code/large_doors.dm @@ -0,0 +1,119 @@ +/obj/machinery/door/airlock + var/multi_tile = FALSE + var/width = 1 + var/obj/airlock_filler_object/filler + +/obj/machinery/door/airlock/Move() + if(multi_tile) + SetBounds() + . = ..() + +/obj/machinery/door/airlock/Destroy() + if(filler) + qdel(filler) + . = ..() + +/obj/machinery/door/airlock/proc/SetBounds() + if(!multi_tile) + return + if(dir in list(NORTH, SOUTH)) + bound_width = width * world.icon_size + bound_height = world.icon_size + if(!filler) + filler = new(get_step(src,EAST)) + filler.parent_airlock = src + else + filler.loc = get_step(src,EAST) + else + bound_width = world.icon_size + bound_height = width * world.icon_size + if(!filler) + filler = new(get_step(src,NORTH)) + filler.parent_airlock = src + else + filler.loc = get_step(src,NORTH) + filler.density = density + filler.set_opacity(opacity) + +/obj/machinery/door/airlock/multi_tile + multi_tile = TRUE + width = 2 + has_environment_lights = FALSE + +/obj/machinery/door/airlock/multi_tile/glass + name = "Large Glass Airlock" + icon = 'modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi' + overlays_file = 'modular_skyrat/modules/large_doors/icons/glass/overlays.dmi' + opacity = FALSE + airlock_material = "glass" + glass = TRUE + assemblytype = /obj/structure/door_assembly/multi_tile/glass + +/obj/machinery/door/airlock/multi_tile/metal + name = "Large Airlock" + icon = 'modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi' + overlays_file = 'modular_skyrat/modules/large_doors/icons/metal/overlays.dmi' + assemblytype = /obj/structure/door_assembly/multi_tile/metal + +/obj/airlock_filler_object + name = "test" + density = TRUE + opacity = TRUE + anchored = TRUE + CanAtmosPass = ATMOS_PASS_DENSITY + CanAtmosPassVertical = ATMOS_PASS_DENSITY + var/parent_airlock + +/obj/airlock_filler_object/CanAllowThrough(atom/movable/mover, turf/target) + . = ..() + if(.) + return + // Snowflake handling for PASSGLASS. + if(istype(mover) && (mover.pass_flags & PASSGLASS)) + return !opacity + +/obj/airlock_filler_object/can_be_pulled(user, grab_state, force) + return FALSE + +/obj/airlock_filler_object/singularity_act() + return + +/obj/airlock_filler_object/singularity_pull(S, current_size) + return + +//ASSEMBLYS! +/obj/structure/door_assembly/multi_tile + dir = EAST + var/width = 1 + +/obj/structure/door_assembly/multi_tile/Initialize() + . = ..() + update_dir() + +/obj/structure/door_assembly/multi_tile/Move() + . = ..() + update_dir() + +/obj/structure/door_assembly/multi_tile/proc/update_dir() + if(dir in list(NORTH, SOUTH)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + +/obj/structure/door_assembly/multi_tile/metal + name = "Large Airlock Assembly" + icon = 'modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi' + base_name = "Large Airlock" + overlays_file = 'modular_skyrat/modules/large_doors/icons/metal/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/multi_tile/metal + glass_type = /obj/machinery/door/airlock/multi_tile/glass + +/obj/structure/door_assembly/multi_tile/glass + name = "Large Glass Airlock Assembly" + icon = 'modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi' + base_name = "Large Glass Airlock" + overlays_file = 'modular_skyrat/modules/large_doors/icons/glass/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/multi_tile/glass + diff --git a/modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi b/modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi new file mode 100644 index 00000000000..a400cb6c61d Binary files /dev/null and b/modular_skyrat/modules/large_doors/icons/glass/multi_tile.dmi differ diff --git a/modular_skyrat/modules/large_doors/icons/glass/overlays.dmi b/modular_skyrat/modules/large_doors/icons/glass/overlays.dmi new file mode 100644 index 00000000000..2f08ff85ea3 Binary files /dev/null and b/modular_skyrat/modules/large_doors/icons/glass/overlays.dmi differ diff --git a/modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi b/modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi new file mode 100644 index 00000000000..b0b5ca2b20e Binary files /dev/null and b/modular_skyrat/modules/large_doors/icons/metal/multi_tile.dmi differ diff --git a/modular_skyrat/modules/large_doors/icons/metal/overlays.dmi b/modular_skyrat/modules/large_doors/icons/metal/overlays.dmi new file mode 100644 index 00000000000..a47008823b4 Binary files /dev/null and b/modular_skyrat/modules/large_doors/icons/metal/overlays.dmi differ diff --git a/modular_skyrat/modules/large_doors/readme.md b/modular_skyrat/modules/large_doors/readme.md new file mode 100644 index 00000000000..1717340292a --- /dev/null +++ b/modular_skyrat/modules/large_doors/readme.md @@ -0,0 +1,26 @@ +## Title: Large Airlocks + +MODULE ID: LARGE_DOORS + +### Description: + +Adds double doors with atmos functionality. + +### TG Proc Changes: + +- /obj/machinery/door/airlock/open() +- /obj/machinery/door/airlock/close() + +### Defines: + + +### Master file additions + + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Gandalf2k15 - Original code +Eris / Tau Ceti - Sprites diff --git a/tgstation.dme b/tgstation.dme index b5fa56cdb1b..e09ae7e92ed 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3661,6 +3661,7 @@ #include "modular_skyrat\modules\inflatables\code\inflatable.dm" #include "modular_skyrat\modules\jukebox\code\controllers\subsystem\jukeboxes.dm" #include "modular_skyrat\modules\jukebox\code\controllers\subsystem\game\machinery\dance_machine.dm" +#include "modular_skyrat\modules\large_doors\code\large_doors.dm" #include "modular_skyrat\modules\layer_shift\code\modules\mob\mob_movement.dm" #include "modular_skyrat\modules\mapping\code\dungeon.dm" #include "modular_skyrat\modules\mapping\code\furniture.dm"