From cb3886d1563d90d10b19e9401a6b9416f0ba651e Mon Sep 17 00:00:00 2001 From: "musketstgstation@gmail.com" Date: Thu, 16 Sep 2010 14:57:40 +0000 Subject: [PATCH] Added Veryinky's construct/deconstruct doors code. Construction is 4 metal, wrench, wire, multitool, screwdriver. Deconstruction is weld, screwdriver, crowbar, wirecutter, wrench, welder. Add reinforced glass at any construction stage to make it a glass airlock door. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@102 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/machinery/doors/airlock.dm | 29 ++- code/game/objects/door_assembly.dm | 232 ++++++++++++++++++ .../game/objects/items/weapons/metals_rods.dm | 13 + icons/obj/doors/door_assembly.dmi | Bin 0 -> 11513 bytes 4 files changed, 272 insertions(+), 2 deletions(-) create mode 100644 code/game/objects/door_assembly.dm create mode 100644 icons/obj/doors/door_assembly.dmi 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 0000000000000000000000000000000000000000..c04b909b37b011cab4e9eef454e2e61db9a8b008 GIT binary patch literal 11513 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 literal 0 HcmV?d00001