diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 90bc111ecc9..e4e12b62061 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -1,7 +1,6 @@ /obj/item/weapon/stock_parts/cell name = "power cell" desc = "A rechargable electrochemical power cell." - var/ratingdesc icon = 'icons/obj/power.dmi' icon_state = "cell" item_state = "cell" @@ -17,13 +16,14 @@ var/rigged = 0 // true if rigged to explode var/chargerate = 100 //how much power is given every tick in a recharger var/self_recharge = 0 //does it self recharge, over time, or not? + var/ratingdesc = TRUE /obj/item/weapon/stock_parts/cell/New() ..() START_PROCESSING(SSobj, src) charge = maxcharge - ratingdesc = " This one has a power rating of [maxcharge], and you should not swallow it." - desc = desc + ratingdesc + if(ratingdesc) + desc += " This one has a power rating of [maxcharge], and you should not swallow it." updateicon() /obj/item/weapon/stock_parts/cell/Destroy() @@ -264,6 +264,20 @@ /obj/item/weapon/stock_parts/cell/infinite/use() return 1 +/obj/item/weapon/stock_parts/cell/infinite/abductor + name = "void core" + desc = "An alien power cell that produces energy seemingly out of nowhere." + icon = 'icons/obj/abductor.dmi' + icon_state = "cell" + origin_tech = "abductor=5;powerstorage=8;engineering=6" + maxcharge = 50000 + rating = 12 + ratingdesc = FALSE + +/obj/item/weapon/stock_parts/cell/infinite/abductor/update_icon() + return + + /obj/item/weapon/stock_parts/cell/potato name = "potato battery" desc = "A rechargable starch based power cell." diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm new file mode 100644 index 00000000000..862228ffb6e --- /dev/null +++ b/code/modules/power/rtg.dm @@ -0,0 +1,150 @@ +// Radioisotope Thermoelectric Generator (RTG) +// Simple power generator that would replace "magic SMES" on various derelicts. + +/obj/machinery/power/rtg + name = "radioisotope thermoelectric generator" + desc = "A simple nuclear power generator, used in small outposts to reliably provide power for decades." + icon = 'icons/obj/power.dmi' + icon_state = "rtg" + density = 1 + anchored = 1 + use_power = 0 + + // You can buckle someone to RTG, then open its panel. Fun stuff. + can_buckle = TRUE + buckle_lying = FALSE + buckle_requires_restraints = TRUE + + var/power_gen = 1000 // Enough to power a single APC. 4000 output with T4 capacitor. + var/board_path = /obj/item/weapon/circuitboard/machine/rtg + var/irradiate = TRUE // RTGs irradiate surroundings, but only when panel is open. + +/obj/machinery/power/rtg/New() + ..() + var/obj/item/weapon/circuitboard/machine/B = new board_path(null) + B.apply_default_parts(src) + connect_to_network() + +/obj/item/weapon/circuitboard/machine/rtg + name = "circuit board (RTG)" + build_path = /obj/machinery/power/rtg + origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it. + +/obj/machinery/power/rtg/initialize() + ..() + connect_to_network() + +/obj/machinery/power/rtg/process() + ..() + add_avail(power_gen) + if(panel_open && irradiate) + radiation_pulse(get_turf(src), 2, 3, 6) // Weak but noticeable. + +/obj/machinery/power/rtg/RefreshParts() + var/part_level = 0 + for(var/obj/item/weapon/stock_parts/SP in component_parts) + part_level += SP.rating + + power_gen = initial(power_gen) * part_level + +/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params) + if(exchange_parts(user, I)) + return + else if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I)) + return + else if(default_deconstruction_crowbar(I)) + return + return ..() + +/obj/machinery/power/rtg/attack_hand(mob/user) + if(can_buckle && isliving(user.pulling) && user.a_intent == "grab" && !has_buckled_mobs()) + var/mob/living/L = user.pulling + if(L.buckled) + return + L.loc = src.loc + user_buckle_mob(L, user) + else + ..() + + +/obj/machinery/power/rtg/advanced + desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further." + power_gen = 1250 // 2500 on T1, 10000 on T4. + board_path = /obj/item/weapon/circuitboard/machine/rtg/advanced + +/obj/item/weapon/circuitboard/machine/rtg/advanced + name = "circuit board (Advanced RTG)" + build_path = /obj/machinery/power/rtg/advanced + origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/stack/sheet/mineral/uranium = 10, + /obj/item/stack/sheet/mineral/plasma = 5) + + + +// Void Core, power source for Abductor ships and bases. +// Provides a lot of power, but tends to explode when mistreated. + +/obj/machinery/power/rtg/abductor + name = "Void Core" + icon = 'icons/obj/abductor.dmi' + icon_state = "core" + desc = "An alien power source that produces energy seemingly out of nowhere." + board_path = /obj/item/weapon/circuitboard/machine/abductor/core + power_gen = 20000 // 280 000 at T1, 400 000 at T4. Starts at T4. + irradiate = FALSE // Green energy! + can_buckle = FALSE + pixel_y = 7 + var/going_kaboom = FALSE // Is it about to explode? + +/obj/item/weapon/circuitboard/machine/abductor/core + name = "alien board (Void Core)" + build_path = /obj/machinery/power/rtg/abductor + origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/cell/infinite/abductor = 1) + def_components = list( + /obj/item/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic, + /obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra) + +/obj/machinery/power/rtg/abductor/proc/overload() + if(going_kaboom) + return + going_kaboom = TRUE + visible_message("\The [src] lets out an shower of sparks as it starts to lose stability!",\ + "You hear a loud electrical crack!") + playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_gen * 0.05) + addtimer(GLOBAL_PROC, "explosion", 100, FALSE, get_turf(src), 2, 3, 4, 8) // Not a normal explosion. + +/obj/machinery/power/rtg/abductor/bullet_act(obj/item/projectile/Proj) + ..() + if(!going_kaboom && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) + message_admins("[key_name_admin(Proj.firer)] triggered an Abductor Core explosion via projectile.") + log_game("[key_name(Proj.firer)] triggered an Abductor Core explosion via projectile.") + overload() + +/obj/machinery/power/rtg/abductor/blob_act(obj/effect/blob/B) + overload() + +/obj/machinery/power/rtg/abductor/ex_act() + if(going_kaboom) + qdel(src) + else + overload() + +/obj/machinery/power/rtg/abductor/fire_act() + overload() + +/obj/machinery/power/rtg/abductor/tesla_act() + ..() //extend the zap + overload() diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index fe295b4be50..13dac82bed7 100644 Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index 0b7a19a758c..7078a54a1b3 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 74a3db9c8d3..bf85a2f6775 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1556,6 +1556,7 @@ #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" #include "code\modules\power\powernet.dm" +#include "code\modules\power\rtg.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" #include "code\modules\power\switch.dm"