diff --git a/baystation12.dme b/baystation12.dme index 97d8a7c200..7d61c875d2 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -365,7 +365,6 @@ #include "code\game\machinery\computer\message.dm" #include "code\game\machinery\computer\Operating.dm" #include "code\game\machinery\computer\pod.dm" -#include "code\game\machinery\computer\power.dm" #include "code\game\machinery\computer\prisoner.dm" #include "code\game\machinery\computer\prisonshuttle.dm" #include "code\game\machinery\computer\robot.dm" @@ -1132,6 +1131,7 @@ #include "code\modules\power\lighting.dm" #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" +#include "code\modules\power\power_monitor.dm" #include "code\modules\power\profiling.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index a1ca9bc429..b5d5af6183 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -85,6 +85,7 @@ obj/machinery/computer/general_air_control var/list/sensor_information = list() var/datum/radio_frequency/radio_connection + circuit = /obj/item/weapon/circuitboard/air_management attack_hand(mob/user) if(..(user)) @@ -97,39 +98,6 @@ obj/machinery/computer/general_air_control ..() src.updateUsrDialog() - attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/air_management/M = new /obj/item/weapon/circuitboard/air_management( A ) - for (var/obj/C in src) - C.loc = src.loc - M.frequency = src.frequency - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/air_management/M = new /obj/item/weapon/circuitboard/air_management( A ) - for (var/obj/C in src) - C.loc = src.loc - M.frequency = src.frequency - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - else - src.attack_hand(user) - return - receive_signal(datum/signal/signal) if(!signal || signal.encryption) return @@ -196,6 +164,7 @@ obj/machinery/computer/general_air_control var/list/output_info var/pressure_setting = ONE_ATMOSPHERE * 45 + circuit = /obj/item/weapon/circuitboard/air_management/tank_control return_text() @@ -295,39 +264,7 @@ Max Output Pressure: [output_pressure] kPa
"} var/cutoff_temperature = 2000 var/on_temperature = 1200 - - attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/injector_control/M = new /obj/item/weapon/circuitboard/injector_control( A ) - for (var/obj/C in src) - C.loc = src.loc - M.frequency = src.frequency - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/injector_control/M = new /obj/item/weapon/circuitboard/injector_control( A ) - for (var/obj/C in src) - C.loc = src.loc - M.frequency = src.frequency - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - else - src.attack_hand(user) - return + circuit = /obj/item/weapon/circuitboard/air_management/injector_control process() if(automation) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 03ae77614f..3689ad9f2e 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,30 +19,62 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" - var/id = null - var/frequency = null var/build_path = null var/board_type = "computer" var/list/req_components = null - var/powernet = null - var/list/records = null var/frame_desc = null var/contain_parts = 1 +//Called when the circuitboard is used to contruct a new computer. +/obj/item/weapon/circuitboard/proc/construct_computer(var/obj/machinery/computer/C) + if (istype(C, build_path)) + return 1 + return 0 + +//Called when a computer is deconstructed to produce a circuitboard +/obj/item/weapon/circuitboard/proc/deconstruct_computer(var/obj/machinery/computer/C) + if (istype(C, build_path)) + return 1 + return 0 + +/* + Circuit Board Definitions +*/ /obj/item/weapon/circuitboard/message_monitor name = "Circuit board (Message Monitor)" build_path = "/obj/machinery/computer/message_monitor" origin_tech = "programming=3" + +//TODO: Move these into computer/camera.dm /obj/item/weapon/circuitboard/security - name = "Circuit board (Security)" + name = "Circuit board (Security Camera Monitor)" build_path = "/obj/machinery/computer/security" var/network = list("SS13") req_access = list(access_security) var/locked = 1 var/emagged = 0 + +/obj/item/weapon/circuitboard/security/construct_computer(var/obj/machinery/computer/security/C) + if (..(C)) + C.network = network + +/obj/item/weapon/circuitboard/security/deconstruct_computer(var/obj/machinery/computer/security/C) + if (..(C)) + network = C.network + +/obj/item/weapon/circuitboard/security/engineering + name = "Circuit board (Engineering Camera Monitor)" + build_path = "/obj/machinery/computer/security/engineering" + network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") + req_access = list() +/obj/item/weapon/circuitboard/security/mining + name = "Circuit board (Mining Camera Monitor)" + build_path = "/obj/machinery/computer/security/mining" + network = list("MINE") + req_access = list() /obj/item/weapon/circuitboard/aicore - name = "Circuit board (AI core)" + name = "Circuit board (AI Core)" origin_tech = "programming=4;biotech=2" board_type = "other" /obj/item/weapon/circuitboard/aiupload @@ -91,14 +123,27 @@ name = "Circuit board (Station Alerts)" build_path = "/obj/machinery/computer/station_alert" /obj/item/weapon/circuitboard/atmospheresiphonswitch - name = "Circuit board (Atmosphere siphon control)" + name = "Circuit board (Atmosphere Siphon Control)" build_path = "/obj/machinery/computer/atmosphere/siphonswitch" /obj/item/weapon/circuitboard/air_management - name = "Circuit board (Atmospheric monitor)" + name = "Circuit board (Atmospheric Monitor)" build_path = "/obj/machinery/computer/general_air_control" -/obj/item/weapon/circuitboard/injector_control - name = "Circuit board (Injector control)" + var/frequency = 1439 +/obj/item/weapon/circuitboard/air_management/tank_control + name = "Circuit board (Tank Control)" + build_path = "/obj/machinery/computer/general_air_control/large_tank_control" +/obj/item/weapon/circuitboard/air_management/injector_control + name = "Circuit board (Injector Control)" build_path = "/obj/machinery/computer/general_air_control/fuel_injection" + +/obj/item/weapon/circuitboard/air_management/construct_computer(var/obj/machinery/computer/general_air_control/C) + if (..(C)) + C.frequency = frequency + +/obj/item/weapon/circuitboard/air_management/deconstruct_computer(var/obj/machinery/computer/general_air_control/C) + if (..(C)) + frequency = C.frequency + /obj/item/weapon/circuitboard/atmos_alert name = "Circuit board (Atmospheric Alert)" build_path = "/obj/machinery/computer/atmos_alert" @@ -125,11 +170,11 @@ name = "Circuit board (Turbine control)" build_path = "/obj/machinery/computer/turbine_computer" /obj/item/weapon/circuitboard/solar_control - name = "Circuit board (Solar Control)" //name fixed 250810 + name = "Circuit board (Solar Control)" build_path = "/obj/machinery/power/solar_control" origin_tech = "programming=2;powerstorage=2" /obj/item/weapon/circuitboard/powermonitor - name = "Circuit board (Power Monitor)" //name fixed 250810 + name = "Circuit board (Power Monitor)" build_path = "/obj/machinery/power/monitor" /obj/item/weapon/circuitboard/olddoor name = "Circuit board (DoorMex)" @@ -164,12 +209,21 @@ name = "Circuit board (Supply ordering console)" build_path = "/obj/machinery/computer/ordercomp" origin_tech = "programming=2" + /obj/item/weapon/circuitboard/supplycomp name = "Circuit board (Supply shuttle console)" build_path = "/obj/machinery/computer/supplycomp" origin_tech = "programming=3" var/contraband_enabled = 0 +/obj/item/weapon/circuitboard/supplycomp/construct_computer(var/obj/machinery/computer/supplycomp/SC) + if (..(SC)) + SC.can_order_contraband = contraband_enabled + +/obj/item/weapon/circuitboard/supplycomp/deconstruct_computer(var/obj/machinery/computer/supplycomp/SC) + if (..(SC)) + contraband_enabled = SC.can_order_contraband + /obj/item/weapon/circuitboard/operating name = "Circuit board (Operating Computer)" build_path = "/obj/machinery/computer/operating" @@ -387,16 +441,5 @@ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "\blue You connect the monitor." var/B = new src.circuit.build_path ( src.loc ) - if(circuit.powernet) B:powernet = circuit.powernet - if(circuit.id) B:id = circuit.id - if(circuit.records) B:records = circuit.records - if(circuit.frequency) B:frequency = circuit.frequency - if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp)) - var/obj/machinery/computer/supplycomp/SC = B - var/obj/item/weapon/circuitboard/supplycomp/C = circuit - SC.can_order_contraband = C.contraband_enabled - if(istype(circuit,/obj/item/weapon/circuitboard/security)) - var/obj/machinery/computer/security/C = B - var/obj/item/weapon/circuitboard/security/CB = circuit - C.network = CB.network + src.circuit.construct_computer(B) del(src) \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index d2bf8a1661..13dd68d584 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -9,6 +9,7 @@ var/last_pic = 1.0 var/list/network = list("SS13") var/mapping = 0//For the overview file, interesting bit of code. + circuit = /obj/item/weapon/circuitboard/security attack_ai(var/mob/user as mob) @@ -85,39 +86,6 @@ use_power(50) return 1 - attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/CF = new /obj/structure/computerframe(loc) - new /obj/item/weapon/shard(loc) - var/obj/item/weapon/circuitboard/security/CB = new /obj/item/weapon/circuitboard/security(CF) - CB.network = network - for (var/obj/C in src) - C.loc = loc - CF.circuit = CB - CF.state = 3 - CF.icon_state = "3" - CF.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/CF = new /obj/structure/computerframe( loc ) - var/obj/item/weapon/circuitboard/security/CB = new /obj/item/weapon/circuitboard/security(CF) - CB.network = network - for (var/obj/C in src) - C.loc = loc - CF.circuit = CB - CF.state = 4 - CF.icon_state = "4" - CF.anchored = 1 - del(src) - else - attack_hand(user) - return - //Camera control: moving. proc/jump_on_click(var/mob/user,var/A) if(user.machine != src) @@ -171,6 +139,7 @@ icon_state = "telescreen" network = list("thunder") density = 0 + circuit = null /obj/machinery/computer/security/telescreen/update_icon() icon_state = initial(icon_state) @@ -183,11 +152,13 @@ desc = "Damn, why do they never have anything interesting on these things?" icon = 'icons/obj/status_display.dmi' icon_state = "entertainment" + circuit = null /obj/machinery/computer/security/wooden_tv name = "Security Cameras" desc = "An old TV hooked into the stations camera network." icon_state = "security_det" + circuit = null /obj/machinery/computer/security/mining @@ -195,15 +166,18 @@ desc = "Used to access the various cameras on the outpost." icon_state = "miningcameras" network = list("MINE") + circuit = /obj/item/weapon/circuitboard/security/mining /obj/machinery/computer/security/engineering name = "Engineering Cameras" desc = "Used to monitor fires and breaches." icon_state = "engineeringcameras" network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") + circuit = /obj/item/weapon/circuitboard/security/engineering /obj/machinery/computer/security/nuclear name = "Mission Monitor" desc = "Used to access the built-in cameras in helmets." icon_state = "syndicam" network = list("NUKE") + circuit = null diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index b289bcaa20..23e764efe4 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -6,7 +6,7 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 - var/obj/item/weapon/circuitboard/circuit = null //if circuit==null, computer can't disassembly + var/circuit = null //The path to the circuit board type. If circuit==null, the computer can't be disassembled. var/processing = 0 /obj/machinery/computer/New() @@ -120,6 +120,7 @@ user << "\blue You disconnect the monitor." A.state = 4 A.icon_state = "4" + M.deconstruct_computer(src) del(src) else src.attack_hand(user) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 0b1388e452..7e7fcc5a59 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -114,9 +114,7 @@ if(component_check) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) - for(var/obj/O in new_machine.component_parts) - del(O) - new_machine.component_parts = list() + new_machine.component_parts.Cut() for(var/obj/O in src) if(circuit.contain_parts) // things like disposal don't want their parts in them O.loc = new_machine diff --git a/code/game/machinery/computer/power.dm b/code/modules/power/power_monitor.dm similarity index 75% rename from code/game/machinery/computer/power.dm rename to code/modules/power/power_monitor.dm index 40b3783b60..bb6968a96f 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/modules/power/power_monitor.dm @@ -1,140 +1,134 @@ -// the power monitoring computer -// for the moment, just report the status of all APCs in the same powernet -/obj/machinery/power/monitor - name = "power monitoring computer" - desc = "It monitors power levels across the station." - icon = 'icons/obj/computer.dmi' - icon_state = "power" - density = 1 - anchored = 1 - use_power = 2 - idle_power_usage = 20 - active_power_usage = 80 - -//fix for issue 521, by QualityVan. -//someone should really look into why circuits have a powernet var, it's several kinds of retarded. -/obj/machinery/power/monitor/New() - ..() - var/obj/structure/cable/attached = null - var/turf/T = loc - if(isturf(T)) - attached = locate() in T - if(attached) - powernet = attached.get_powernet() - - -/obj/machinery/power/monitor/attack_ai(mob/user) - add_fingerprint(user) - - if(stat & (BROKEN|NOPOWER)) - return - interact(user) - -/obj/machinery/power/monitor/attack_hand(mob/user) - add_fingerprint(user) - - if(stat & (BROKEN|NOPOWER)) - return - interact(user) - -/obj/machinery/power/monitor/attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - else - src.attack_hand(user) - return - -/obj/machinery/power/monitor/interact(mob/user) - - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.unset_machine() - user << browse(null, "window=powcomp") - return - - - user.set_machine(src) - var/t = "Power Monitoring
" - - t += "

Refresh" - t += "

Close" - - if(!powernet) - t += "\red No connection" - else - - var/list/L = list() - for(var/obj/machinery/power/terminal/term in powernet.nodes) - if(istype(term.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = term.master - L += A - - t += "
Total power: [powernet.avail] W
Total load: [num2text(powernet.viewload,10)] W
" - - t += "" - - if(L.len > 0) - - t += "Area Eqp./Lgt./Env. Load Cell
" - - var/list/S = list(" Off","AOff"," On", " AOn") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - - t += copytext(add_tspace("\The [A.area]", 30), 1, 30) - t += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" - - t += "
" - - user << browse(t, "window=powcomp;size=420x900") - onclose(user, "powcomp") - - -/obj/machinery/power/monitor/Topic(href, href_list) - ..() - if( href_list["close"] ) - usr << browse(null, "window=powcomp") - usr.unset_machine() - return - if( href_list["update"] ) - src.updateDialog() - return - - -/obj/machinery/power/monitor/power_change() - ..() - if(stat & BROKEN) - icon_state = "broken" - else - if (stat & NOPOWER) - spawn(rand(0, 15)) - src.icon_state = "c_unpowered" - else - icon_state = initial(icon_state) - - +// the power monitoring computer +// for the moment, just report the status of all APCs in the same powernet +/obj/machinery/power/monitor + name = "power monitoring computer" + desc = "It monitors power levels across the station." + icon = 'icons/obj/computer.dmi' + icon_state = "power" + + //computer stuff + density = 1 + anchored = 1.0 + var/circuit = /obj/item/weapon/circuitboard/powermonitor + use_power = 1 + idle_power_usage = 300 + active_power_usage = 300 + +/obj/machinery/power/monitor/New() + ..() + var/obj/structure/cable/attached = null + var/turf/T = loc + if(isturf(T)) + attached = locate() in T + if(attached) + powernet = attached.get_powernet() + +/obj/machinery/power/monitor/attack_ai(mob/user) + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + interact(user) + +/obj/machinery/power/monitor/attack_hand(mob/user) + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + interact(user) + +/obj/machinery/power/monitor/interact(mob/user) + + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + if (!istype(user, /mob/living/silicon)) + user.unset_machine() + user << browse(null, "window=powcomp") + return + + + user.set_machine(src) + var/t = "Power Monitoring
" + + t += "

Refresh" + t += "

Close" + + if(!powernet) + t += "\red No connection" + else + + var/list/L = list() + for(var/obj/machinery/power/terminal/term in powernet.nodes) + if(istype(term.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = term.master + L += A + + t += "
Total power: [powernet.avail] W
Total load: [num2text(powernet.viewload,10)] W
" + + t += "" + + if(L.len > 0) + + t += "Area Eqp./Lgt./Env. Load Cell
" + + var/list/S = list(" Off","AOff"," On", " AOn") + var/list/chg = list("N","C","F") + + for(var/obj/machinery/power/apc/A in L) + + t += copytext(add_tspace("\The [A.area]", 30), 1, 30) + t += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" + + t += "
" + + user << browse(t, "window=powcomp;size=420x900") + onclose(user, "powcomp") + + +/obj/machinery/power/monitor/Topic(href, href_list) + ..() + if( href_list["close"] ) + usr << browse(null, "window=powcomp") + usr.unset_machine() + return + if( href_list["update"] ) + src.updateDialog() + return + + +/obj/machinery/power/monitor/power_change() + ..() + if(stat & BROKEN) + icon_state = "broken" + else + if (stat & NOPOWER) + spawn(rand(0, 15)) + src.icon_state = "c_unpowered" + else + icon_state = initial(icon_state) + + +//copied from computer.dm +/obj/machinery/power/monitor/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.loc = src.loc + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + new /obj/item/weapon/shard( src.loc ) + A.state = 3 + A.icon_state = "3" + else + user << "\blue You disconnect the monitor." + A.state = 4 + A.icon_state = "4" + M.deconstruct_computer(src) + del(src) + else + src.attack_hand(user) + return \ No newline at end of file diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 6b782ca33b..cccf903872 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -385,12 +385,12 @@ /obj/machinery/power/smes/magical name = "magical power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Magically produces power." - process() - capacity = INFINITY - charge = INFINITY - ..() - + output = SMESMAXOUTPUT +/obj/machinery/power/smes/magical/process() + capacity = INFINITY + charge = INFINITY + ..() /proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) var/href = "