diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 2d377be606..e2b51e0b81 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -75,41 +75,47 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. var/list/signalers[9] var/lockdownbyai = 0 autoclose = 1 - + var/doortype = 0 /obj/machinery/door/airlock/command name = "Airlock" icon = 'Doorcom.dmi' req_access = list(access_heads) + doortype = 1 /obj/machinery/door/airlock/security name = "Airlock" icon = 'Doorsec.dmi' req_access = list(access_security) - + doortype = 2 /obj/machinery/door/airlock/engineering name = "Airlock" icon = 'Dooreng.dmi' req_access = list(access_engine) + doortype = 3 /obj/machinery/door/airlock/medical name = "Airlock" icon = 'Doormed.dmi' req_access = list(access_medical) + doortype = 4 /obj/machinery/door/airlock/maintenance name = "Maintenance Access" icon = 'Doormaint.dmi' req_access = list(access_maint_tunnels) + doortype = 5 /obj/machinery/door/airlock/external name = "External Airlock" icon = 'Doorext.dmi' + doortype = 6 /obj/machinery/door/airlock/glass name = "Glass Airlock" icon = 'Doorglass.dmi' opacity = 0 + doortype = 7 /* About the new airlock wires panel: @@ -841,6 +847,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/attackby(C as obj, mob/user as mob) //world << text("airlock attackby src [] obj [] mob []", src, C, user) + var/turf/T = get_turf(user) if (!istype(usr, /mob/living/silicon)) if (src.isElectrified()) if(src.shock(user, 75)) @@ -872,6 +879,24 @@ About the new airlock wires panel: else if (istype(C, /obj/item/device/radio/signaler)) return src.attack_hand(user) else if (istype(C, /obj/item/weapon/crowbar)) + if ((src.density) && ( src.welded ) && !( src.operating ) && src.p_open ) + playsound(src.loc, 'Crowbar.ogg', 100, 1) + user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics into the airlock assembly.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You removed the airlock electronics!" + switch(src.doortype) + if(0) new/obj/door_assembly/door_assembly_0( src.loc ) + if(1) new/obj/door_assembly/door_assembly_com( src.loc ) + if(2) new/obj/door_assembly/door_assembly_sec( src.loc ) + if(3) new/obj/door_assembly/door_assembly_eng( src.loc ) + if(4) new/obj/door_assembly/door_assembly_med( src.loc ) + if(5) new/obj/door_assembly/door_assembly_mai( src.loc ) + if(6) new/obj/door_assembly/door_assembly_ext( src.loc ) + if(7) new/obj/door_assembly/door_assembly_g( src.loc ) + new/obj/item/device/multitool( src.loc ) + del(src) + return if ((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked ))) spawn( 0 ) src.operating = 1 diff --git a/code/game/objects/door_assembly.dm b/code/game/objects/door_assembly.dm new file mode 100644 index 0000000000..694c81615b --- /dev/null +++ b/code/game/objects/door_assembly.dm @@ -0,0 +1,232 @@ +obj/door_assembly + icon = 'door_assembly.dmi' + + name = "Airlock Assembly" + icon_state = "door_as0" + anchored = 0 + density = 1 + var/doortype = 0 + var/state = 0 + var/glass = 0 + + door_assembly_0 + name = "Airlock Assembly" + icon_state = "door_as1" + anchored = 1 + density = 1 + doortype = 0 + state = 1 + glass = 0 + + door_assembly_com + name = "Command Airlock Assembly" + icon_state = "door_as1_com" + anchored = 1 + density = 1 + doortype = 1 + state = 1 + glass = 0 + + door_assembly_sec + name = "Security Airlock Assembly" + icon_state = "door_as1_sec" + anchored = 1 + density = 1 + doortype = 2 + state = 1 + glass = 0 + + door_assembly_eng + name = "Engineering Airlock Assembly" + icon_state = "door_as1_eng" + anchored = 1 + density = 1 + doortype = 3 + state = 1 + glass = 0 + + door_assembly_med + name = "Medical Airlock Assembly" + icon_state = "door_as1_med" + anchored = 1 + density = 1 + doortype = 4 + state = 1 + glass = 0 + + door_assembly_mai + name = "Maintenance Airlock Assembly" + icon_state = "door_as1_mai" + anchored = 1 + density = 1 + doortype = 5 + state = 1 + glass = 0 + + door_assembly_ext + name = "External Airlock Assembly" + icon_state = "door_as1_ext" + anchored = 1 + density = 1 + doortype = 6 + state = 1 + glass = 0 + + door_assembly_g + name = "Glass Airlock Assembly" + icon_state = "door_as1_g" + anchored = 1 + density = 1 + doortype = 7 + state = 1 + glass = 1 + +/obj/door_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/weldingtool) && W:welding && !anchored ) + if (W:get_fuel() < 1) + user << "\blue You need more welding fuel to dissassemble the airlock assembly." + return + W:use_fuel(1) + user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") + playsound(src.loc, 'Welder2.ogg', 50, 1) + var/turf/T = get_turf(user) + sleep(40) + if(get_turf(user) == T) + user << "\blue You dissasembled the airlock assembly!" + new /obj/item/weapon/sheet/metal(get_turf(src)) + new /obj/item/weapon/sheet/metal(get_turf(src)) + new /obj/item/weapon/sheet/metal(get_turf(src)) + new /obj/item/weapon/sheet/metal(get_turf(src)) + if(src.glass==1) + new /obj/item/weapon/sheet/rglass(get_turf(src)) + del(src) + else if(istype(W, /obj/item/weapon/wrench) && !anchored ) + playsound(src.loc, 'Ratchet.ogg', 100, 1) + var/turf/T = get_turf(user) + user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You secured the airlock assembly!" + src.name = "Secured Airlock Assembly" + src.anchored = 1 + else if(istype(W, /obj/item/weapon/wrench) && anchored ) + playsound(src.loc, 'Ratchet.ogg', 100, 1) + var/turf/T = get_turf(user) + user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You unsecured the airlock assembly!" + src.name = "Airlock Assembly" + src.anchored = 0 + else if(istype(W, /obj/item/weapon/cable_coil) && state == 0 && anchored ) + var/obj/item/weapon/cable_coil/coil = W + var/turf/T = get_turf(user) + user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") + sleep(40) + if(get_turf(user) == T) + coil.use(1) + src.state = 1 + switch(src.doortype) + if(0) src.icon_state = "door_as1" + if(1) src.icon_state = "door_as1_com" + if(2) src.icon_state = "door_as1_sec" + if(3) src.icon_state = "door_as1_eng" + if(4) src.icon_state = "door_as1_med" + if(5) src.icon_state = "door_as1_mai" + if(6) src.icon_state = "door_as1_ext" + if(7) src.icon_state = "door_as1_g" + user << "\blue You wire the Airlock!" + src.name = "Wired Airlock Assembly" + else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 ) + playsound(src.loc, 'Wirecutter.ogg', 100, 1) + var/turf/T = get_turf(user) + user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You cut the airlock wires.!" + new/obj/item/weapon/cable_coil(T, 1) + src.state = 0 + switch(doortype) + if(0) src.icon_state = "door_as0" + if(1) src.icon_state = "door_as0_com" + if(2) src.icon_state = "door_as0_sec" + if(3) src.icon_state = "door_as0_eng" + if(4) src.icon_state = "door_as0_med" + if(5) src.icon_state = "door_as0_mai" + if(6) src.icon_state = "door_as0_ext" + if(7) src.icon_state = "door_as0_g" + src.name = "Secured Airlock Assembly" + else if(istype(W, /obj/item/device/multitool) && state == 1 ) + playsound(src.loc, 'Screwdriver.ogg', 100, 1) + var/turf/T = get_turf(user) + user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You installed the airlock electronics!" + src.state = 2 + switch(src.doortype) + if(0) src.icon_state = "door_as2" + if(1) src.icon_state = "door_as2_com" + if(2) src.icon_state = "door_as2_sec" + if(3) src.icon_state = "door_as2_eng" + if(4) src.icon_state = "door_as2_med" + if(5) src.icon_state = "door_as2_mai" + if(6) src.icon_state = "door_as2_ext" + if(7) src.icon_state = "door_as2_g" + src.name = "Near finished Airlock Assembly" + del(W) + else if(istype(W, /obj/item/weapon/crowbar) && state == 2 ) + playsound(src.loc, 'Crowbar.ogg', 100, 1) + var/turf/T = get_turf(user) + user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to install electronics into the airlock assembly.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You removed the airlock electronics!" + src.state = 1 + switch(src.doortype) + if(0) src.icon_state = "door_as1" + if(1) src.icon_state = "door_as1_com" + if(2) src.icon_state = "door_as1_sec" + if(3) src.icon_state = "door_as1_eng" + if(4) src.icon_state = "door_as1_med" + if(5) src.icon_state = "door_as1_mai" + if(6) src.icon_state = "door_as1_ext" + if(7) src.icon_state = "door_as1_g" + src.name = "Wired Airlock Assembly" + new/obj/item/device/multitool( src.loc ) + else if(istype(W, /obj/item/weapon/sheet/rglass) && glass == 0) + playsound(src.loc, 'Crowbar.ogg', 100, 1) + var/turf/T = get_turf(user) + user.visible_message("[user] adds reinforced glass windows to the airlock assembly.", "You start to install reinforced glass windows into the airlock assembly.") + sleep(40) + if(get_turf(user) == T) + user << "\blue You installed glass windows the airlock assembly!" + src.glass = 1 + src.doortype = 7 + src.name = "Near finished Window Airlock Assembly" + switch(src.state) + if(0) src.icon_state = "door_as0_g" + if(1) src.icon_state = "door_as1_g" + if(2) src.icon_state = "door_as2_g" + if(3) src.icon_state = "door_as3_g" + else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 ) + playsound(src.loc, 'Screwdriver.ogg', 100, 1) + var/turf/T = get_turf(user) + user << "\blue Now finishing the airlock." + sleep(40) + if(get_turf(user) == T) + user << "\blue You finish the airlock!" + if (!src.glass) + switch(src.doortype) + if(0) new/obj/machinery/door/airlock( src.loc ) + if(1) new/obj/machinery/door/airlock/command( src.loc ) + if(2) new/obj/machinery/door/airlock/security( src.loc ) + if(3) new/obj/machinery/door/airlock/engineering( src.loc ) + if(4) new/obj/machinery/door/airlock/medical( src.loc ) + if(5) new/obj/machinery/door/airlock/maintenance( src.loc ) + if(6) new/obj/machinery/door/airlock/external( src.loc ) + else + new/obj/machinery/door/airlock/glass( src.loc ) + del(src) + else + ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/metals_rods.dm b/code/game/objects/items/weapons/metals_rods.dm index f416bc6b10..c1776cd779 100644 --- a/code/game/objects/items/weapons/metals_rods.dm +++ b/code/game/objects/items/weapons/metals_rods.dm @@ -161,6 +161,7 @@ LATTICE L["reinforced"] = "reinforced sheet (2 metal)
" L["computer"] = "computer frame (5 metal)
" L["construct"] = "construct wall girders (2 metal)" + L["airlock"] = "construct airlock assembly (4 metal)" for(var/t in L) counter++ @@ -312,6 +313,18 @@ LATTICE src.amount -= 2 new /obj/structure/girder(location) + if("airlock") + if (src.amount < 4) + usr << text("\red You haven't got enough metal to construct the airlock assembly!") + return + usr << "\blue Building airlock assembly ..." + var/turf/location = usr.loc + sleep(50) + if ((usr.loc == location)) + if (!istype(location, /turf/simulated/floor)) + return + src.amount -= 4 + new /obj/door_assembly(location) if (src.amount <= 0) usr << browse(null, "window=met_sheet") diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi new file mode 100644 index 0000000000..c04b909b37 Binary files /dev/null and b/icons/obj/doors/door_assembly.dmi differ