From 11ce777d9ca574d5732c9acbf14f118307de3cc3 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 18 Aug 2014 21:26:46 +0200 Subject: [PATCH 1/5] Fixes #6027 Creates two proper monitor circuits for Engineering/Mining. Adds air alarms in the Research access foyer. Relocates camera in Misc. research to a more central location. Ensures there are enough Telecommunication Satellite SMES units to meet power demand. --- .../game/machinery/computer/buildandrepair.dm | 18 +++++-- code/modules/power/smes.dm | 10 ++-- maps/tgstation2.dmm | 48 +++++++++---------- 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 03ae77614f..74e15cce65 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -41,8 +41,18 @@ req_access = list(access_security) var/locked = 1 var/emagged = 0 +/obj/item/weapon/circuitboard/security/engineering + name = "Circuit board (Engineering)" + 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)" + 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,13 +101,13 @@ 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)" + name = "Circuit board (Injector Control)" build_path = "/obj/machinery/computer/general_air_control/fuel_injection" /obj/item/weapon/circuitboard/atmos_alert name = "Circuit board (Atmospheric Alert)" 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 = "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/computer/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/computer/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/maps/tgstation2.dmm b/maps/tgstation2.dmm index 5030aaa580..5eca8a70d3 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -5373,11 +5373,11 @@ "bZq" = (/obj/machinery/light,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/drone_fabrication) "bZr" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "mining_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13;48"},/turf/space,/area/space) "bZs" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Supermatter")},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) -"bZt" = (/obj/machinery/computer/power_monitor{name = "Engine Power Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) +"bZt" = (/obj/machinery/power/monitor{name = "Engine Power Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) "bZu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/rnd/research) "bZv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/rnd/research) "bZw" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) -"bZx" = (/obj/machinery/computer/power_monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) +"bZx" = (/obj/machinery/power/monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring) "bZy" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engine_airlock) "bZz" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor,/area/medical/reception) "bZA" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_al_c_snsr"; pixel_x = -25; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_airlock) @@ -5836,7 +5836,7 @@ "cil" = (/obj/machinery/disease2/incubator,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cim" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/obj/machinery/meter{frequency = 1443; id = "engine_waste_pre_filter"; name = "Engine Waste - Pre-Filter"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) "cin" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; icon_state = "map"; name = "Gas filter (Toxins tank)"; on = 1},/turf/simulated/floor,/area/atmos) -"cio" = (/obj/machinery/computer/power_monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/engine/engineering_monitoring) +"cio" = (/obj/machinery/power/monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/engine/engineering_monitoring) "cip" = (/obj/machinery/atmospherics/tvalve/mirrored/digital{dir = 8},/turf/simulated/floor,/area/atmos) "ciq" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers,/turf/simulated/floor,/area/atmos) "cir" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "CO2 to Pure"},/turf/simulated/floor,/area/atmos) @@ -9118,7 +9118,7 @@ "dtr" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) "dts" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/tcommsat/entrance) "dtt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcommsat/entrance) -"dtu" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/computer/power_monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) +"dtu" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "dtv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) "dtw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor,/area/turret_protected/tcomfoyer) "dtx" = (/obj/machinery/light/small{dir = 8},/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)