From 845c0a0b17c7a613babd949c7df62220751bdad7 Mon Sep 17 00:00:00 2001 From: Atlantiscze Date: Sat, 30 Aug 2014 15:55:38 +0200 Subject: [PATCH] SMES (de)construction - Adds Superconducting Magnetic Coils - SMES specific construction item. - Each SMES can have up to 5 additional coils added , similar to PSUs with cells. - It is possible to create multi coil SMESs by changing "cur_coils" variable while mapping them in. - SMES can be deconstructed, salvaging their board and coil(s) - It is currently not possible to obtain these by any other way than deconstructing existing SMESs. This will be added in another commit. --- code/modules/power/batteryrack.dm | 25 +++++++- code/modules/power/smes.dm | 92 ++++++++++++++++++++++++++---- icons/obj/stock_parts.dmi | Bin 9924 -> 10523 bytes 3 files changed, 106 insertions(+), 11 deletions(-) diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index e7a46b60fdc..393e924a899 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -32,6 +32,29 @@ var/cells_amount = 0 var/capacitors_amount = 0 + // Smaller capacity, but higher I/O + // Starts fully charged, as it's used in substations. This replaces Engineering SMESs round start charge. +/obj/machinery/power/smes/batteryrack/substation + name = "Substation PSU" + desc = "A rack of power cells working as a PSU. This one seems to be equipped for higher power loads." + output = 150000 + chargelevel = 150000 + chargemode = 1 + online = 1 + + // One high capacity cell, two regular cells. Lots of room for engineer upgrades + // Also five basic capacitors. Again, upgradeable. +/obj/machinery/power/smes/batteryrack/substation/add_parts() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/batteryrack + component_parts += new /obj/item/weapon/cell/high + component_parts += new /obj/item/weapon/cell + component_parts += new /obj/item/weapon/cell + component_parts += new /obj/item/weapon/stock_parts/capacitor + component_parts += new /obj/item/weapon/stock_parts/capacitor + component_parts += new /obj/item/weapon/stock_parts/capacitor + component_parts += new /obj/item/weapon/stock_parts/capacitor + component_parts += new /obj/item/weapon/stock_parts/capacitor /obj/machinery/power/smes/batteryrack/New() ..() @@ -224,7 +247,7 @@ var/load = min((capacity * 1.5 - charge)/SMESRATE, chargelevel) // charge at set rate, limited to spare capacity load = add_load(load) // add the load to the terminal side network charge += load * SMESRATE // increase the charge - + else // if not enough capacity charging = 0 // stop charging diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index c7b0e096a56..3446a1e98f4 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -1,8 +1,23 @@ // the SMES // stores power -#define SMESMAXCHARGELEVEL 200000 -#define SMESMAXOUTPUT 200000 +//Board +/obj/item/weapon/circuitboard/smes + name = "Circuit board (SMES Cell)" + build_path = "/obj/machinery/power/smes" + board_type = "machine" + origin_tech = "powerstorage=6;engineering=4" // Board itself is high tech. Coils have to be ordered from cargo or salvaged from existing SMESs. + frame_desc = "Requires 1 superconducting magnetic coil and 30 wires." + req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30) + +//Construction Item +/obj/item/weapon/smes_coil + name = "Superconducting Magnetic Coil" + desc = "Heavy duty superconducting magnetic coil, mainly used in construction of SMES units." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "smes_coil" // Just few icons patched together. If someone wants to make better icon, feel free to do so! + w_class = 4.0 // It's LARGE (backpack size) + /obj/machinery/power/smes name = "power storage unit" @@ -11,15 +26,15 @@ density = 1 anchored = 1 use_power = 0 - var/output = 50000 //Amount of power it tries to output + var/output = 0 //Amount of power it tries to output var/lastout = 0 //Amount of power it actually outputs to the powernet var/loaddemand = 0 //For use in restore() var/capacity = 5e6 //Maximum amount of power it can hold - var/charge = 1e6 //Current amount of power it holds + var/charge = 0 //Current amount of power it holds var/charging = 0 //1 if it's actually charging, 0 if not var/chargemode = 0 //1 if it's trying to charge, 0 if not. //var/chargecount = 0 - var/chargelevel = 50000 //Amount of power it tries to charge from powernet + var/chargelevel = 0 //Amount of power it tries to charge from powernet var/online = 1 //1 if it's outputting power, 0 if not. var/name_tag = null var/obj/machinery/power/terminal/terminal = null @@ -29,15 +44,29 @@ var/last_online = 0 var/open_hatch = 0 var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! - var/input_level_max = SMESMAXCHARGELEVEL - var/output_level_max = SMESMAXOUTPUT + var/input_level_max = 250000 // It is now coil amount based, so no need for DEFINE + var/output_level_max = 250000 + + var/storage_per_coil = 5000000 + var/IO_per_coil = 250000 + var/max_coils = 6 //30M capacity, 1.5MW input/output when fully upgraded + var/cur_coils = 1 // Current amount of installed coils /obj/machinery/power/smes/New() + component_parts = list() + component_parts += new /obj/item/stack/cable_coil(src,30) + component_parts += new /obj/item/weapon/circuitboard/smes(src) + + // Allows for mapped-in SMESs with larger capacity/IO + for(var/i = 1, i <= cur_coils, i++) + component_parts += new /obj/item/weapon/smes_coil(src) + ..() + recalc_coils() spawn(5) if(!powernet) connect_to_network() - + dir_loop: for(var/d in cardinal) var/turf/T = get_step(src, d) @@ -54,6 +83,15 @@ updateicon() return +/obj/machinery/power/smes/proc/recalc_coils() + if ((cur_coils <= max_coils) && (cur_coils >= 1)) + capacity = cur_coils * storage_per_coil + charge = between(0, charge, capacity) + output_level_max = cur_coils * IO_per_coil + output = between(0, output, output_level_max) + input_level_max = cur_coils * IO_per_coil + chargelevel = between(0, chargelevel, input_level_max) + /obj/machinery/power/smes/proc/updateicon() overlays.Cut() @@ -255,6 +293,40 @@ del(terminal) building_terminal = 0 + // PSUs have their own code in batteryrack.dm + else if(istype(W, /obj/item/weapon/crowbar) && !(istype(src, /obj/machinery/power/smes/batteryrack))) + if (charge < (capacity / 100)) + if (!online && !chargemode) + if (!terminal) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + usr << "\red You begin to disassemble the SMES cell!" + if (do_after(usr, 100 * cur_coils)) // More coils = takes longer to disassemble. It's complex so largest one with 5 coils will take 50s + usr << "\red You have disassembled the SMES cell!" + 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) + return 1 + else + user << "You have to disassemble the terminal first!" + else + user << "Turn off the [src] before dismantling it." + else + user << "Better let [src] discharge before dismantling it." + else if(istype(W, /obj/item/weapon/smes_coil)) + if (cur_coils < 5) + usr << "You install the coil into the SMES unit!" + user.drop_item() + cur_coils ++ + component_parts += W + W.loc = src + recalc_coils() + else + usr << "\red You can't insert more coils to this SMES unit!" /obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) @@ -388,10 +460,10 @@ name = "magical power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Magically produces power." capacity = 9000000 - output = SMESMAXOUTPUT + output = 250000 /obj/machinery/power/smes/magical/process() - charge = 9000000 + charge = 5000000 ..() /proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 77a6f9cfe2a6e8adb665fae3efad8d2d2a21c8d6..fec89e31a1723993c602b0aa04002829770085f2 100644 GIT binary patch literal 10523 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