From 2c585fbcc44c24201fdd60b940fea5f9fbe100b7 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Fri, 22 Feb 2013 23:06:14 +1000 Subject: [PATCH] moved shield files to folder, made circuitry for shielding gens/caps researchable, various tweaks and balances to the research requirements, made shield gens/capacitors orderable via cargo Signed-off-by: Cael_Aislinn --- baystation12.dme | 10 +- .../Cael_Aislinn/Rust/circuits_and_design.dm | 42 +-- .../ShieldGen/circuits_and_designs.dm | 52 +++ .../{ => ShieldGen}/energy_field.dm | 104 +++--- .../{ => ShieldGen}/external_shield_gen.dm | 72 ++-- .../{ => ShieldGen}/shield_capacitor.dm | 317 +++++++++--------- .../{ => ShieldGen}/shield_gen.dm | 0 .../{ => ShieldGen}/shielding.dmi | Bin code/datums/supplypacks.dm | 43 ++- 9 files changed, 362 insertions(+), 278 deletions(-) create mode 100644 code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm rename code/WorkInProgress/Cael_Aislinn/{ => ShieldGen}/energy_field.dm (96%) rename code/WorkInProgress/Cael_Aislinn/{ => ShieldGen}/external_shield_gen.dm (96%) rename code/WorkInProgress/Cael_Aislinn/{ => ShieldGen}/shield_capacitor.dm (97%) rename code/WorkInProgress/Cael_Aislinn/{ => ShieldGen}/shield_gen.dm (100%) rename code/WorkInProgress/Cael_Aislinn/{ => ShieldGen}/shielding.dmi (100%) diff --git a/baystation12.dme b/baystation12.dme index b01f9d9427a..c6bbb28d78d 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -11,6 +11,7 @@ #define FILE_DIR "code/WorkInProgress/Cael_Aislinn" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jungle" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/ShieldGen" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" #define FILE_DIR "code/WorkInProgress/Susan" #define FILE_DIR "html" @@ -1180,12 +1181,8 @@ #include "code\WorkInProgress\autopsy.dm" #include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\explosion_particles.dm" -#include "code\WorkInProgress\Cael_Aislinn\energy_field.dm" -#include "code\WorkInProgress\Cael_Aislinn\external_shield_gen.dm" #include "code\WorkInProgress\Cael_Aislinn\meteor_battery.dm" #include "code\WorkInProgress\Cael_Aislinn\sculpture.dm" -#include "code\WorkInProgress\Cael_Aislinn\shield_capacitor.dm" -#include "code\WorkInProgress\Cael_Aislinn\shield_gen.dm" #include "code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm" #include "code\WorkInProgress\Cael_Aislinn\Economy\Economy.dm" #include "code\WorkInProgress\Cael_Aislinn\Economy\Economy_Events.dm" @@ -1215,6 +1212,11 @@ #include "code\WorkInProgress\Cael_Aislinn\Rust\gyrotron_controller.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\radiation.dm" #include "code\WorkInProgress\Cael_Aislinn\Rust\virtual_particle_catcher.dm" +#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\circuits_and_designs.dm" +#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\energy_field.dm" +#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\external_shield_gen.dm" +#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_capacitor.dm" +#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_gen.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\LaserComputer.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\SuperMatter.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/circuits_and_design.dm b/code/WorkInProgress/Cael_Aislinn/Rust/circuits_and_design.dm index f1d874a68fd..06738785d63 100644 --- a/code/WorkInProgress/Cael_Aislinn/Rust/circuits_and_design.dm +++ b/code/WorkInProgress/Cael_Aislinn/Rust/circuits_and_design.dm @@ -5,15 +5,15 @@ /obj/item/weapon/circuitboard/rust_core_control name = "Circuit board (RUST core controller)" build_path = "/obj/machinery/computer/rust_core_control" - origin_tech = "programming=4;engineering=5;power=6" + origin_tech = "programming=3;engineering=4" datum/design/rust_core_control name = "Circuit Design (RUST core controller)" desc = "Allows for the construction of circuit boards used to build a core control console for the RUST fusion engine." id = "rust_core_control" - req_tech = list("programming" = 4, "engineering" = 5, "power" = 6) + req_tech = list("programming" = 3, "engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 2000) + materials = list("$glass" = 2000, "sacid" = 20) build_path = "/obj/item/weapon/circuitboard/rust_core_control" ////////////////////////////////////// @@ -22,30 +22,30 @@ datum/design/rust_core_control /obj/item/weapon/circuitboard/rust_fuel_control name = "Circuit board (RUST fuel controller)" build_path = "/obj/machinery/computer/rust_fuel_control" - origin_tech = "programming=4;engineering=5;power=6" + origin_tech = "programming=3;engineering=4" datum/design/rust_fuel_control name = "Circuit Design (RUST fuel controller)" desc = "Allows for the construction of circuit boards used to build a fuel injector control console for the RUST fusion engine." id = "rust_fuel_control" - req_tech = list("programming" = 4, "engineering" = 5, "power" = 6) + req_tech = list("programming" = 3, "engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$silver" = 2000) + materials = list("$glass" = 2000, "sacid" = 20) build_path = "/obj/item/weapon/circuitboard/rust_fuel_control" ////////////////////////////////////// // RUST Fuel Port board /obj/item/weapon/module/rust_fuel_port - name = "Circuit board (RUST fuel port)" + name = "Internal circuitry (RUST fuel port)" icon_state = "card_mod" - origin_tech = "engineering=3;power=4" + origin_tech = "engineering=4;materials=5" datum/design/rust_fuel_port - name = "Circuit Design (RUST fuel port)" + name = "Internal circuitry (RUST fuel port)" desc = "Allows for the construction of circuit boards used to build a fuel injection port for the RUST fusion engine." id = "rust_fuel_port" - req_tech = list("programming" = 4, "engineering" = 5, "magnets" = 6) + req_tech = list("engineering" = 4, "materials" = 5) build_type = IMPRINTER materials = list("$glass" = 2000, "sacid" = 20, "$uranium" = 3000) build_path = "/obj/item/weapon/module/rust_fuel_port" @@ -54,15 +54,15 @@ datum/design/rust_fuel_port // RUST Fuel Compressor board /obj/item/weapon/module/rust_fuel_compressor - name = "Circuit board (RUST fuel compressor)" + name = "Internal circuitry (RUST fuel compressor)" icon_state = "card_mod" - origin_tech = "power=4;engineering=5;plasmatech=6" + origin_tech = "materials=7;plasmatech=4" datum/design/rust_fuel_compressor name = "Circuit Design (RUST fuel compressor)" desc = "Allows for the construction of circuit boards used to build a fuel compressor of the RUST fusion engine." id = "rust_fuel_compressor" - req_tech = list("power" = 4, "engineering" = 5, "plasmatech" = 6) + req_tech = list("materials" = 7, "plasmatech" = 4) build_type = IMPRINTER materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 3000, "$diamond" = 1000) build_path = "/obj/item/weapon/module/rust_fuel_compressor" @@ -71,10 +71,10 @@ datum/design/rust_fuel_compressor // RUST Tokamak Core board /obj/item/weapon/circuitboard/rust_core - name = "Circuit Design (RUST tokamak core)" + name = "Internal circuitry (RUST tokamak core)" build_path = "/obj/machinery/power/rust_core" board_type = "machine" - origin_tech = "bluespace=3;engineering=4;plasmatech=5;magnets=6;power=7" + origin_tech = "bluespace=3;plasmatech=4;magnets=5;materials=6;powerstorage=6" frame_desc = "Requires 2 Pico Manipulators, 1 Ultra Micro-Laser, 5 Pieces of Cable, 1 Subspace Crystal and 1 Console Screen." req_components = list( "/obj/item/weapon/stock_parts/manipulator/pico" = 2, @@ -84,10 +84,10 @@ datum/design/rust_fuel_compressor "/obj/item/weapon/cable_coil" = 5) datum/design/rust_core - name = "Circuit board (RUST tokamak core)" + name = "Internal circuitry (RUST tokamak core)" desc = "The circuit board that for a RUST-pattern tokamak fusion core." id = "pacman" - req_tech = list(bluespace = 3, engineering = 4, plasmatech = 5, magnets = 6, power = 7) + req_tech = list(bluespace = 3, plasmatech = 4, magnets = 5, materials = 6, powerstorage = 6) build_type = IMPRINTER reliability_base = 79 materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 3000, "$diamond" = 2000) @@ -97,10 +97,10 @@ datum/design/rust_core // RUST Fuel Injector board /obj/item/weapon/circuitboard/rust_injector - name = "Circuit Design (RUST fuel injector)" + name = "Internal circuitry (RUST fuel injector)" build_path = "/obj/machinery/power/rust_fuel_injector" board_type = "machine" - origin_tech = "power=3;engineering=4;plasmatech=5;magnets=6;materials=7" + origin_tech = "powerstorage=3;engineering=4;plasmatech=4;materials=6" frame_desc = "Requires 2 Pico Manipulators, 1 Phasic Scanning Module, 1 Super Matter Bin, 1 Console Screen and 5 Pieces of Cable." req_components = list( "/obj/item/weapon/stock_parts/manipulator/pico" = 2, @@ -110,10 +110,10 @@ datum/design/rust_core "/obj/item/weapon/cable_coil" = 5) datum/design/rust_injector - name = "Circuit board (RUST tokamak core)" + name = "Internal circuitry (RUST tokamak core)" desc = "The circuit board that for a RUST-pattern particle accelerator." id = "pacman" - req_tech = list(power = 3, engineering = 4, plasmatech = 5, magnets = 6, materials = 7) + req_tech = list(powerstorage = 3, engineering = 4, plasmatech = 4, materials = 6) build_type = IMPRINTER reliability_base = 79 materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 3000, "$uranium" = 2000) diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm new file mode 100644 index 00000000000..39ec7ac2d41 --- /dev/null +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm @@ -0,0 +1,52 @@ + +//////////////////////////////////////// +// Shield Generator + +/obj/item/weapon/circuitboard/shield_gen + name = "Circuit board (Experimental shield generator)" + board_type = "machine" + build_path = "/obj/machinery/shield_gen/external" + origin_tech = "bluespace=4;plasmatech=3" + frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Transmitter, 5 Pieces of cable, 1 Subspace Crystal, 1 Subspace Amplifier and 1 Console Screen." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator/pico" = 2, + "/obj/item/weapon/stock_parts/subspace/transmitter" = 1, + "/obj/item/weapon/stock_parts/subspace/crystal" = 1, + "/obj/item/weapon/stock_parts/subspace/amplifier" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/cable_coil" = 5) + +datum/design/shield_gen + name = "Circuit Design (Experimental hull shield generator)" + desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator." + id = "shield_gen" + req_tech = list("bluespace" = 4, "plasmatech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000) + build_path = "/obj/machinery/shield_gen/external" + +//////////////////////////////////////// +// Shield Capacitor + +/obj/item/weapon/circuitboard/shield_cap + name = "Circuit board (Experimental shield capacitor)" + board_type = "machine" + build_path = "/obj/machinery/shield_capacitor" + origin_tech = "magnets=3;powerstorage=4" + frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Filter, 5 Pieces of cable, 1 Subspace Treatment disk, 1 Subspace Analyzer and 1 Console Screen." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator/pico" = 2, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/subspace/treatment" = 1, + "/obj/item/weapon/stock_parts/subspace/analyzer" = 1, + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/cable_coil" = 5) + +datum/design/shield_cap + name = "Circuit Design (Experimental shield capacitor)" + desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor." + id = "shield_cap" + req_tech = list("magnets" = 3, "powerstorage" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$silver" = 10000) + build_path = "/obj/machinery/shield_gen/external" diff --git a/code/WorkInProgress/Cael_Aislinn/energy_field.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm similarity index 96% rename from code/WorkInProgress/Cael_Aislinn/energy_field.dm rename to code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm index 4488fc3af03..dee4c063fbc 100644 --- a/code/WorkInProgress/Cael_Aislinn/energy_field.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm @@ -1,52 +1,52 @@ - -//---------- actual energy field - -/obj/effect/energy_field - name = "energy field" - desc = "Impenetrable field of energy, capable of blocking anything as long as it's active." - icon = 'shielding.dmi' - icon_state = "shieldsparkles" - anchored = 1 - layer = 2.1 - density = 0 - invisibility = 2 - var/strength = 0 - var/obj/machinery/shield_gen/parent - var/stress = 0 - -/obj/effect/energy_field/ex_act(var/severity) - Stress(0.5 + severity) - -/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj) - Stress(1 + 1 * (Proj.damage / 100)) - - -/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj) - if(M) - walk(M,0) - -/obj/effect/energy_field/proc/Stress(var/severity) - strength -= severity - stress += severity - - //if we take too much damage, drop out - the generator will bring us back up if we have enough power - if(strength < 1) - invisibility = 2 - density = 0 - -/obj/effect/energy_field/proc/Strengthen(var/severity) - strength += severity - - //if we take too much damage, drop out - the generator will bring us back up if we have enough power - if(strength > 1) - invisibility = 0 - density = 1 - -/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - //Purpose: Determines if the object (or airflow) can pass this atom. - //Called by: Movement, airflow. - //Inputs: The moving atom (optional), target turf, "height" and air group - //Outputs: Boolean if can pass. - - //return (!density || !height || air_group) - return density + +//---------- actual energy field + +/obj/effect/energy_field + name = "energy field" + desc = "Impenetrable field of energy, capable of blocking anything as long as it's active." + icon = 'shielding.dmi' + icon_state = "shieldsparkles" + anchored = 1 + layer = 2.1 + density = 0 + invisibility = 2 + var/strength = 0 + var/obj/machinery/shield_gen/parent + var/stress = 0 + +/obj/effect/energy_field/ex_act(var/severity) + Stress(0.5 + severity) + +/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj) + Stress(1 + 1 * (Proj.damage / 100)) + + +/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj) + if(M) + walk(M,0) + +/obj/effect/energy_field/proc/Stress(var/severity) + strength -= severity + stress += severity + + //if we take too much damage, drop out - the generator will bring us back up if we have enough power + if(strength < 1) + invisibility = 2 + density = 0 + +/obj/effect/energy_field/proc/Strengthen(var/severity) + strength += severity + + //if we take too much damage, drop out - the generator will bring us back up if we have enough power + if(strength > 1) + invisibility = 0 + density = 1 + +/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) + //Purpose: Determines if the object (or airflow) can pass this atom. + //Called by: Movement, airflow. + //Inputs: The moving atom (optional), target turf, "height" and air group + //Outputs: Boolean if can pass. + + //return (!density || !height || air_group) + return density diff --git a/code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/external_shield_gen.dm similarity index 96% rename from code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm rename to code/WorkInProgress/Cael_Aislinn/ShieldGen/external_shield_gen.dm index 1b3b7bf8506..08352989eb2 100644 --- a/code/WorkInProgress/Cael_Aislinn/external_shield_gen.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/external_shield_gen.dm @@ -1,36 +1,36 @@ - -//---------- external shield generator -//generates an energy field that loops around any built up area in space (is useless inside) halts movement and airflow, is blocked by walls, windows, airlocks etc - -/obj/machinery/shield_gen/external/New() - ..() - -/obj/machinery/shield_gen/external/get_shielded_turfs() - var - list - open = list(get_turf(src)) - closed = list() - - while(open.len) - for(var/turf/T in open) - for(var/turf/O in orange(1, T)) - if(get_dist(O,src) > field_radius) - continue - var/add_this_turf = 0 - if(istype(O,/turf/space)) - for(var/turf/simulated/G in orange(1, O)) - add_this_turf = 1 - break - for(var/obj/structure/S in orange(1, O)) - add_this_turf = 1 - break - for(var/obj/structure/S in O) - add_this_turf = 0 - break - - if(add_this_turf && !(O in open) && !(O in closed)) - open += O - open -= T - closed += T - - return closed + +//---------- external shield generator +//generates an energy field that loops around any built up area in space (is useless inside) halts movement and airflow, is blocked by walls, windows, airlocks etc + +/obj/machinery/shield_gen/external/New() + ..() + +/obj/machinery/shield_gen/external/get_shielded_turfs() + var + list + open = list(get_turf(src)) + closed = list() + + while(open.len) + for(var/turf/T in open) + for(var/turf/O in orange(1, T)) + if(get_dist(O,src) > field_radius) + continue + var/add_this_turf = 0 + if(istype(O,/turf/space)) + for(var/turf/simulated/G in orange(1, O)) + add_this_turf = 1 + break + for(var/obj/structure/S in orange(1, O)) + add_this_turf = 1 + break + for(var/obj/structure/S in O) + add_this_turf = 0 + break + + if(add_this_turf && !(O in open) && !(O in closed)) + open += O + open -= T + closed += T + + return closed diff --git a/code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm similarity index 97% rename from code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm rename to code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm index bd7ccfd7737..cf78443b410 100644 --- a/code/WorkInProgress/Cael_Aislinn/shield_capacitor.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm @@ -1,158 +1,159 @@ - -//---------- shield capacitor -//pulls energy out of a power net and charges an adjacent generator - -/obj/machinery/shield_capacitor - name = "shield capacitor" - desc = "Machine that charges a shield generator." - icon = 'shielding.dmi' - icon_state = "capacitor" - var/active = 1 - density = 1 - anchored = 1 - var/obj/machinery/shield_gen/target_generator - var/stored_charge = 0 - var/time_since_fail = 100 - var/max_charge = 1000000 - var/max_charge_rate = 100000 - var/min_charge_rate = 0 - var/locked = 0 - // - use_power = 1 //0 use nothing - //1 use idle power - //2 use active power - idle_power_usage = 10 - active_power_usage = 100 - var/charge_rate = 100 - -/obj/machinery/shield_capacitor/New() - spawn(10) - for(var/obj/machinery/shield_gen/possible_gen in range(1, src)) - if(get_dir(src, possible_gen) == src.dir) - target_generator = possible_gen - possible_gen.owned_capacitor = src - break - ..() - -/obj/machinery/shield_capacitor/verb/rotate() - set name = "Rotate Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - usr << "It is fastened to the floor!" - return 0 - src.dir = turn(src.dir, 270) - target_generator = locate() in get_step(src,dir) - if(target_generator && !target_generator.owned_capacitor) - target_generator.owned_capacitor = src - return 1 - -/obj/machinery/shield_capacitor/power_change() - if(stat & BROKEN) - icon_state = "broke" - else - if( powered() ) - if (src.active) - icon_state = "capacitor" - else - icon_state = "capacitor" - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - src.icon_state = "capacitor" - stat |= NOPOWER - -/obj/machinery/shield_capacitor/process() - // - if(active) - use_power = 2 - if(stored_charge + charge_rate > max_charge) - active_power_usage = max_charge - stored_charge - else - active_power_usage = charge_rate - stored_charge += active_power_usage - else - use_power = 1 - - time_since_fail++ - if(stored_charge < active_power_usage * 1.5) - time_since_fail = 0 - // - updateDialog() - -/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user) - /*if(istype(W, /obj/item/weapon/wrench)) - if(active) - user << "Turn off the field generator first." - return - - else if(state == 0) - state = 1 - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "You secure the external reinforcing bolts to the floor." - src.anchored = 1 - return - - else if(state == 1) - state = 0 - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "You undo the external reinforcing bolts." - src.anchored = 0 - return*/ - - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) - src.locked = !src.locked - user << "Controls are now [src.locked ? "locked." : "unlocked."]" - else - user << "\red Access denied." - - else if(istype(W, /obj/item/weapon/wrench)) - src.anchored = !src.anchored - src.visible_message("\blue \icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") - - else - src.add_fingerprint(user) - user << "\red You hit the [src.name] with your [W.name]!" - for(var/mob/M in viewers(src)) - if(M == user) continue - M.show_message("\red The [src.name] has been hit with the [W.name] by [user.name]!") - -/obj/machinery/shield_capacitor/Topic(href, href_list[]) - ..() - if( href_list["close"] ) - usr << browse(null, "window=shield_capacitor") - usr.machine = null - return - if( href_list["toggle"] ) - active = !active - if(active) - use_power = 2 - else - use_power = 1 - if( href_list["charge_rate"] ) - charge_rate += text2num(href_list["charge_rate"]) - if(charge_rate > max_charge_rate) - charge_rate = max_charge_rate - else if(charge_rate < min_charge_rate) - charge_rate = min_charge_rate - // - updateDialog() - -/obj/machinery/shield_capacitor/interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.machine = null - user << browse(null, "window=shield_capacitor") - return - var/t = "Shield Capacitor Control Console
" - t += "[target_generator ? "Shield generator connected." : "Unable to locate shield generator!"]
" - t += "This capacitor is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" - t += "[time_since_fail > 2 ? "Charging stable." : "Warning, low charge!"]
" - t += "Capacitor charge: [stored_charge] Watts ([100 * stored_charge/max_charge]%)
" - t += "Capacitor charge rate (approx): \[min\] \[--\] \[-\][charge_rate] Watts/sec \[+\] \[++\] \[max\]
" - t += "
" - t += "Close
" - user << browse(t, "window=shield_capacitor;size=500x800") - user.machine = src + +//---------- shield capacitor +//pulls energy out of a power net and charges an adjacent generator + +/obj/machinery/shield_capacitor + name = "shield capacitor" + desc = "Machine that charges a shield generator." + icon = 'shielding.dmi' + icon_state = "capacitor" + var/active = 1 + density = 1 + anchored = 1 + var/obj/machinery/shield_gen/target_generator + var/stored_charge = 0 + var/time_since_fail = 100 + var/max_charge = 1000000 + var/max_charge_rate = 100000 + var/min_charge_rate = 0 + var/locked = 0 + // + use_power = 1 //0 use nothing + //1 use idle power + //2 use active power + idle_power_usage = 10 + active_power_usage = 100 + var/charge_rate = 100 + +/obj/machinery/shield_capacitor/New() + spawn(10) + for(var/obj/machinery/shield_gen/possible_gen in range(1, src)) + if(get_dir(src, possible_gen) == src.dir) + target_generator = possible_gen + possible_gen.owned_capacitor = src + break + ..() + +/obj/machinery/shield_capacitor/verb/rotate() + set name = "Rotate Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + usr << "It is fastened to the floor!" + return 0 + src.dir = turn(src.dir, 270) + target_generator = locate() in get_step(src,dir) + if(target_generator && !target_generator.owned_capacitor) + target_generator.owned_capacitor = src + return 1 + +/obj/machinery/shield_capacitor/power_change() + if(stat & BROKEN) + icon_state = "broke" + else + if( powered() ) + if (src.active) + icon_state = "capacitor" + else + icon_state = "capacitor" + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "capacitor" + stat |= NOPOWER + +/obj/machinery/shield_capacitor/process() + // + if(active) + use_power = 2 + if(stored_charge + charge_rate > max_charge) + active_power_usage = max_charge - stored_charge + else + active_power_usage = charge_rate + stored_charge += active_power_usage + else + use_power = 1 + + time_since_fail++ + if(stored_charge < active_power_usage * 1.5) + time_since_fail = 0 + // + updateDialog() + +/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user) + /*if(istype(W, /obj/item/weapon/wrench)) + if(active) + user << "Turn off the field generator first." + return + + else if(state == 0) + state = 1 + playsound(src.loc, 'Ratchet.ogg', 75, 1) + user << "You secure the external reinforcing bolts to the floor." + src.anchored = 1 + return + + else if(state == 1) + state = 0 + playsound(src.loc, 'Ratchet.ogg', 75, 1) + user << "You undo the external reinforcing bolts." + src.anchored = 0 + return*/ + + if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if (src.allowed(user)) + src.locked = !src.locked + user << "Controls are now [src.locked ? "locked." : "unlocked."]" + else + user << "\red Access denied." + + else if(istype(W, /obj/item/weapon/wrench)) + src.anchored = !src.anchored + src.visible_message("\blue \icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") + + else + src.add_fingerprint(user) + user << "\red You hit the [src.name] with your [W.name]!" + for(var/mob/M in viewers(src)) + if(M == user) continue + M.show_message("\red The [src.name] has been hit with the [W.name] by [user.name]!") + +/obj/machinery/shield_capacitor/Topic(href, href_list[]) + ..() + if( href_list["close"] ) + usr << browse(null, "window=shield_capacitor") + usr.machine = null + return + if( href_list["toggle"] ) + active = !active + if(active) + use_power = 2 + else + use_power = 1 + if( href_list["charge_rate"] ) + charge_rate += text2num(href_list["charge_rate"]) + if(charge_rate > max_charge_rate) + charge_rate = max_charge_rate + else if(charge_rate < min_charge_rate) + charge_rate = min_charge_rate + // + updateDialog() + +/obj/machinery/shield_capacitor/interact(mob/user) + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + if (!istype(user, /mob/living/silicon)) + user.machine = null + user << browse(null, "window=shield_capacitor") + return + var/t = "Shield Capacitor Control Console
" + t += "[target_generator ? "Shield generator connected." : "Unable to locate shield generator!"]
" + t += "This capacitor is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" + t += "[time_since_fail > 2 ? "Charging stable." : "Warning, low charge!"]
" + t += "Capacitor charge: [stored_charge] Watts ([100 * stored_charge/max_charge]%)
" + t += "Capacitor charge rate (approx): \[min\] \[--\] \[-\][charge_rate] Watts/sec \[+\] \[++\] \[max\]
" + t += "
" + t += "Close
" + + user << browse(t, "window=shield_capacitor;size=500x800") + user.machine = src diff --git a/code/WorkInProgress/Cael_Aislinn/shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm similarity index 100% rename from code/WorkInProgress/Cael_Aislinn/shield_gen.dm rename to code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm diff --git a/code/WorkInProgress/Cael_Aislinn/shielding.dmi b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shielding.dmi similarity index 100% rename from code/WorkInProgress/Cael_Aislinn/shielding.dmi rename to code/WorkInProgress/Cael_Aislinn/ShieldGen/shielding.dmi diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 045ab1d689a..904866d07c6 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -850,18 +850,47 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Formalwear for the best occasions." group = "Operations" +/datum/supply_packs/rust_injector + contains = list(/obj/machinery/power/rust_fuel_injector) + name = "RUST fuel injector" + cost = 50 + containertype = /obj/structure/largecrate + containername = "RUST injector crate" + group = "Engineering" + access = access_engine + +/datum/supply_packs/rust_compressor + contains = list(/obj/item/weapon/module/rust_fuel_compressor) + name = "RUST fuel compressor circuitry" + cost = 60 + containertype = /obj/structure/closet/crate/secure + containername = "RUST fuel compressor circuitry" + group = "Engineering" + access = access_engine + /datum/supply_packs/rust_core contains = list(/obj/machinery/power/rust_core) name = "RUST Tokamak Core" cost = 75 containertype = /obj/structure/largecrate - containername = "RUST tokamak crate." + containername = "RUST tokamak crate" group = "Engineering" + access = access_engine -/datum/supply_packs/rust_injector - contains = list(/obj/machinery/power/rust_fuel_injector) - name = "RUST fuel injector" - cost = 40 - containertype = /obj/structure/largecrate - containername = "RUST injector crate." +/datum/supply_packs/shield_gen + contains = list(/obj/item/weapon/circuitboard/shield_gen) + name = "Experimental shield generator circuitry" + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Experimental shield generator" group = "Engineering" + access = access_ce + +/datum/supply_packs/shield_cap + contains = list(/obj/item/weapon/circuitboard/shield_cap) + name = "Experimental shield capacitor circuitry" + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Experimental shield capacitor" + group = "Engineering" + access = access_ce