diff --git a/code/game/dna.dm b/code/game/dna.dm index 2e980b50ad0..ada6aab647f 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -339,16 +339,15 @@ /obj/machinery/dna_scannernew/New() ..() - component_parts = newlist( - /obj/item/weapon/circuitboard/clonescanner, - /obj/item/weapon/stock_parts/scanning_module, - /obj/item/weapon/stock_parts/manipulator, - /obj/item/weapon/stock_parts/micro_laser, - /obj/item/weapon/stock_parts/console_screen, - /obj/item/weapon/cable_coil, - /obj/item/weapon/cable_coil - ) - RefreshParts() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/clonescanner(null) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/cable_coil(null, 1) + component_parts += new /obj/item/weapon/cable_coil(null, 1) + /obj/machinery/dna_scannernew/proc/toggle_open() if(open) return close() @@ -378,6 +377,9 @@ /obj/machinery/dna_scannernew/proc/close() if(open) + if(panel_open) + usr << "Close the maintenance panel first." + return 0 open = 0 density = 1 for(var/mob/living/carbon/C in loc) @@ -409,6 +411,9 @@ /obj/machinery/dna_scannernew/proc/open() if(!open) + if(panel_open) + usr << "Close the maintenance panel first." + return if(locked) usr << "The bolts are locked down, securing the door shut." return @@ -432,6 +437,31 @@ return /obj/machinery/dna_scannernew/attackby(obj/item/weapon/grab/G, mob/user) + + if(istype(G, /obj/item/weapon/screwdriver)) + if(occupant) + user << "The maintenance panel is locked." + return + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open + if(panel_open) + icon_state = "[icon_state]_maintenance" + user << "You open the maintenance panel of [src]." + else + if(open) + icon_state = "[initial(icon_state)]_open" + else + icon_state = "[initial(icon_state)]" + user << "You close the maintenance panel of [src]." + return + + if(istype(G, /obj/item/weapon/crowbar)) + if(panel_open) + for(var/obj/I in contents) // in case there is something in the scanner + I.loc = src.loc + default_deconstruction_crowbar() + return + if(!istype(G, /obj/item/weapon/grab) || !ismob(G.affecting)) return if(!open) @@ -482,6 +512,7 @@ del(src) +//DNA COMPUTER /obj/machinery/computer/scan_consolenew name = "\improper DNA scanner access console" desc = "Scan DNA." diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 16cd92e782f..6a31eb60051 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -176,21 +176,13 @@ var/global/list/autolathe_recipes_hidden = list( \ return 1 if (opened) if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc if(m_amount >= 3750) var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) G.amount = round(m_amount / 3750) if(g_amount >= 3750) var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) G.amount = round(g_amount / 3750) - del(src) + default_deconstruction_crowbar() return 1 else user.set_machine(src) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 6f6db8ad4ec..7577a2ddbe7 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -14,7 +14,6 @@ var/c_tag_order = 999 var/status = 1.0 anchored = 1.0 - var/panel_open = 0 // 0 = Closed / 1 = Open var/invuln = null var/obj/item/device/camera_bug/bug = null var/obj/item/weapon/camera_assembly/assembly = null diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 958bd693066..3e6de01e367 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -19,6 +19,19 @@ var/attempting = 0 //One clone attempt at a time thanks var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk +/obj/machinery/clonepod/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/clonepod(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + + //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. /obj/item/weapon/disk/data @@ -98,6 +111,8 @@ //Start growing a human clone in the pod! /obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/mrace) + if(panel_open) + return 0 if(mess || attempting) return 0 var/datum/mind/clonemind = locate(mindref) @@ -217,7 +232,7 @@ src.occupant = null if (src.locked) src.locked = 0 - if (!src.mess) + if (!src.mess && !panel_open) icon_state = "pod_0" use_power(200) return @@ -226,6 +241,19 @@ //Let's unlock this early I guess. Might be too early, needs tweaking. /obj/machinery/clonepod/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/screwdriver)) + if(occupant || mess || locked) + user << "The maintenance panel is locked." + return + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]") + return + + if(istype(W, /obj/item/weapon/crowbar)) + if(panel_open) + default_deconstruction_crowbar() + return + if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (!src.check_access(W)) user << "\red Access Denied." diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index a41d002efe0..029063c0d51 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -125,9 +125,9 @@ del(O) new_machine.component_parts = list() for(var/obj/O in src) - O.loc = new_machine + O.loc = null new_machine.component_parts += O - circuit.loc = new_machine + circuit.loc = null new_machine.RefreshParts() del(src) @@ -137,8 +137,10 @@ if(istype(P, /obj/item/weapon/cable_coil)) var/obj/item/weapon/cable_coil/CP = P if(CP.amount > 1) - var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src) - CC.amount = 1 + var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src, 1) + CP.amount-- + if(!CP.amount) del(CP) + else CP.update_icon() components += CC req_components[I]-- update_req_desc() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2ea74cf174e..fd3c869d85b 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -108,6 +108,7 @@ Class Procs: var/uid var/manual = 0 var/global/gl_uid = 1 + var/panel_open = 0 /obj/machinery/New() ..() @@ -238,3 +239,23 @@ Class Procs: uid = gl_uid gl_uid++ +/obj/machinery/proc/default_deconstruction_crowbar() + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + M.state = 2 + M.icon_state = "box_1" + for(var/obj/I in component_parts) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = src.loc + del(src) + +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/icon_state_open, var/icon_state_closed) + if (!panel_open) + panel_open = 1 + icon_state = icon_state_open + user << "You open the maintenance hatch of [src]." + else + panel_open = 0 + icon_state = icon_state_closed + user << "You close the maintenance hatch of [src]." diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index a3c1ee3f340..a22750aa3dd 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -68,9 +68,12 @@ user << "You finish prying out the components." // Drop all the component stuff - if(contents.len > 0) - for(var/obj/x in src) - x.loc = user.loc + if(component_parts) + for(var/obj/I in component_parts) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = src.loc + else // If the machine wasn't made during runtime, probably doesn't have components: @@ -81,13 +84,14 @@ for(var/i = 1, i <= C.req_components[I], i++) newpath = text2path(I) var/obj/item/s = new newpath - s.loc = user.loc - if(istype(P, /obj/item/weapon/cable_coil)) - var/obj/item/weapon/cable_coil/A = P + s.loc = src.loc + if(istype(s, /obj/item/weapon/cable_coil)) + var/obj/item/weapon/cable_coil/A = s A.amount = 1 + A.update_icon() // Drop a circuit board too - C.loc = user.loc + C.loc = src.loc // Create a machine frame and delete the current machine var/obj/machinery/constructable_frame/machine_frame/F = new diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 661c885b4d7..d7b3aa81b6a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -40,7 +40,6 @@ var/shoot_inventory = 0 //Fire items at customers! We're broken! var/shut_up = 0 //Stop spouting those godawful pitches! var/extended_inventory = 0 //can we access the hidden inventory? - var/panel_open = 0 //Hacking that vending machine. Gonna get a free candy bar. var/scan_id = 1 var/obj/item/weapon/coin/coin var/datum/wires/vending/wires = null diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 9bf3da5d6ff..864ff0f51d2 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -34,7 +34,6 @@ var/list/queue = list() var/processing_queue = 0 var/screen = "main" - var/opened = 0 var/temp var/list/part_sets = list( //set names must be unique "Cyborg"=list( @@ -701,25 +700,11 @@ /obj/machinery/mecha_part_fabricator/attackby(obj/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - icon_state = "fab-o" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "fab-idle" - user << "You close the maintenance hatch of [src]." + default_deconstruction_screwdriver(user, "fab-o", "fab-idle") + return - if (opened) + if (panel_open) if(istype(W, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc if(src.resources["metal"] >= 3750) var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) G.amount = round(src.resources["metal"] / G.perunit) @@ -744,7 +729,7 @@ if(src.resources["bananium"] >= 2000) var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc) G.amount = round(src.resources["bananium"] / G.perunit) - del(src) + default_deconstruction_crowbar() return 1 else user << "\red You can't load the [src.name] while it's opened." diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 628956fa68a..0568744f67f 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -53,7 +53,6 @@ display round(lastgen) and plasmatank amount var/active = 0 var/power_gen = 5000 - var/open = 0 var/recent_fault = 0 var/power_output = 1 @@ -115,8 +114,8 @@ display round(lastgen) and plasmatank amount component_parts = list() component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/cable_coil(src) - component_parts += new /obj/item/weapon/cable_coil(src) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + component_parts += new /obj/item/weapon/cable_coil(src, 1) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new board_path(src) var/obj/sheet = new sheet_path(null) @@ -231,21 +230,14 @@ display round(lastgen) and plasmatank amount playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) else if(istype(O, /obj/item/weapon/screwdriver)) - open = !open + panel_open = !panel_open playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(open) + if(panel_open) user << "\blue You open the access panel." else user << "\blue You close the access panel." - else if(istype(O, /obj/item/weapon/crowbar) && !open) - var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc) - for(var/obj/item/I in component_parts) - if(I.reliability < 100) - I.crit_fail = 1 - I.loc = src.loc - new_frame.state = 2 - new_frame.icon_state = "box_1" - del(src) + else if(istype(O, /obj/item/weapon/crowbar) && !panel_open) + default_deconstruction_crowbar() /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) ..() diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 5da8dbf3688..5ac1762d266 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -52,19 +52,12 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if (shocked) shock(user,50) if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_imprinter = null - linked_console = null - icon_state = "circuit_imprinter_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "circuit_imprinter" - user << "You close the maintenance hatch of [src]." + if(linked_console) + linked_console.linked_imprinter = null + linked_console = null + default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index a6501553fad..bee0c198916 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -44,27 +44,14 @@ Note: Must be placed within 3 tiles of the R&D Console if (shocked) shock(user,50) if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_destroy = null - linked_console = null - icon_state = "d_analyzer_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "d_analyzer" - user << "You close the maintenance hatch of [src]." + if(linked_console) + linked_console.linked_destroy = null + linked_console = null + default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - I.loc = src.loc - del(src) + default_deconstruction_crowbar() return 1 else user << "\red You can't load the [src.name] while it's opened." diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index de1a92ec018..ec908f22d73 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -57,30 +57,13 @@ Note: Must be placed west/left of and R&D console to function. if (O.is_open_container()) return 1 if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_lathe = null - linked_console = null - icon_state = "protolathe_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "protolathe" - user << "You close the maintenance hatch of [src]." + if(linked_console) + linked_console.linked_lathe = null + linked_console = null + default_deconstruction_screwdriver(user, "protolathe_t", "protolathe") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) - reagents.trans_to(I, reagents.total_volume) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc if(m_amount >= 3750) var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) G.amount = round(m_amount / G.perunit) @@ -108,7 +91,7 @@ Note: Must be placed west/left of and R&D console to function. if(adamantine_amount >= 2000) var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine(src.loc) G.amount = round(adamantine_amount / G.perunit) - del(src) + default_deconstruction_crowbar() return 1 else user << "\red You can't load the [src.name] while it's opened." diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index cb1bd68ca44..b77802f59b8 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -99,7 +99,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). for(var/obj/machinery/r_n_d/D in oview(3,src)) - if(D.linked_console != null || D.disabled || D.opened) + if(D.linked_console != null || D.disabled || D.panel_open) continue if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) if(linked_destroy == null) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 68def8bd39c..ee922a055a6 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -17,7 +17,6 @@ var/hack_wire var/disable_wire var/shock_wire - var/opened = 0 var/obj/machinery/computer/rdconsole/linked_console /obj/machinery/r_n_d/New() @@ -53,7 +52,7 @@ /obj/machinery/r_n_d/attack_hand(mob/user as mob) if (shocked) shock(user,50) - if(opened) + if(panel_open) var/dat as text dat += "[src.name] Wires:
" for(var/wire in src.wires) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 06aa463f2b0..b90917b53e1 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -19,8 +19,8 @@ component_parts = list() component_parts += new /obj/item/weapon/circuitboard/rdserver(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/cable_coil(src) - component_parts += new /obj/item/weapon/cable_coil(src) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + component_parts += new /obj/item/weapon/cable_coil(src, 1) RefreshParts() src.initialize(); //Agouri @@ -131,27 +131,12 @@ if (shocked) shock(user,50) if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - icon_state = "server_o" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "server" - user << "You close the maintenance hatch of [src]." + default_deconstruction_screwdriver(user, "server_o", "server") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) griefProtection() - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc - del(src) + default_deconstruction_crowbar() return 1 /obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves. diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi index 7314ac709af..91e301beded 100644 Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ diff --git a/icons/obj/cloning.dmi b/icons/obj/cloning.dmi index af0bb42e602..ada68297367 100644 Binary files a/icons/obj/cloning.dmi and b/icons/obj/cloning.dmi differ