Files
b3b4f4b9c6 INDRA, general nuclear fusion update (#21285)
Fixes https://github.com/Aurorastation/Aurora.3/issues/18951
Fixes https://github.com/Aurorastation/Aurora.3/issues/19447
Fixes https://github.com/Aurorastation/Aurora.3/issues/20283
Fixes https://github.com/Aurorastation/Aurora.3/issues/21395

Overhauls a wide variety of INDRA behaviors and related gas/material
properties.
changes:
- balance: "Fusion reaction modifications. Higher radiation and
temperature output, comparable power output."
- balance: "Increased rad resistance modifier of Borosilicate Windows
from 1 -> 4 and (closed) Blast Doors from 1 -> 6."
- balance: "INDRA Field Strength minima/maxima changed from 1-100 ->
20-120. Power costs increased significantly."
- balance: "INDRA instability increase per tick now limited, similar to
Supermatter (prevents sudden instability spike from instantly nuking
it)."
  - balance: "APC cell charge rate increased 10x."
  - balance: "Rebalanced contents of INDRA hard storage compartment."
  - balance: "SMES coils capacities halved, throughputs doubled."
  - balance: "SMES unit maximum coil capacity increased from 6 -> 8."
- balance: "TEG maximum power output increased from 500000 -> 2500000."
- balance: "Power wasted from exceeding TEG maximum power output
decreased from 50% to 33%."
- balance: "Portable generators of all types have had their power
generation capacity doubled."
- rscadd: "New 'Fusion Codex' app added for all crew with ACCESS_ENGINE
that details all available nuclear fusion chains."
- rscadd: "Boron added as a singleton/reagent. Poisonous to vaurca,
still usable in nuclear fusion as fuel assembly rods."
- rscadd: "INDRA Field Strength now scales plasma temperature entropy,
power output from temperature multiplier, and instability increase per
tick."
- refactor: "'Boron' gas renamed to 'Helium-3'. Boron is not a gas. Deal
with it."
  - refactor: "'Steam' gas renamed to 'Water Vapor'."
  - code_imp: "Descriptions added to gas singletons for future use."
  - qol: "Minor remap of INDRA control room for usability."
  - qol: "Standardized gas canister naming conventions."
- qol: "INDRA and APC TGUI interfaces now use use kW, MW abbreviations
for high wattages."
- bugfix: "INDRA Kinetic Harvester no longer rapidly deselects materials
for harvest when too many are being generated at once."
- bugfix: "INDRA EM Field effect no longer considers the camera within
its reactor chamber a destabilizing influence."
  - bugfix: "INDRA reactor core now produces radiation as intended."
- bugfix: "Deuterium and Tritium canisters no longer contain 50%
standard hydrogen (inheritance issue)."

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Geeves <22774890+Geevies@users.noreply.github.com>
2025-10-05 20:13:06 +00:00

86 lines
2.4 KiB
Plaintext

/obj/item/fuel_assembly
name = "fuel rod assembly"
icon = 'icons/obj/machinery/fusion.dmi'
icon_state = "fuel_assembly"
var/material_name
var/percent_depleted = 1
var/list/rod_quantities = list()
var/fuel_type
var/fuel_colour
var/radioactivity = 0
var/initial_amount
/obj/item/fuel_assembly/New(newloc, _material, _colour)
if(_material)
fuel_type = _material
if(_colour)
fuel_colour = _colour
..(newloc)
/obj/item/fuel_assembly/Initialize()
. = ..()
if(ispath(fuel_type, /singleton/reagent))
var/singleton/reagent/R = GET_SINGLETON(fuel_type)
fuel_type = lowertext(initial(R.name))
fuel_colour = initial(R.color)
initial_amount = 50000
var/material/material = SSmaterials.get_material_by_name(fuel_type)
if(istype(material))
initial_amount = SHEET_MATERIAL_AMOUNT * 5 // Fuel compressor eats 5 sheets.
name = "[material.use_name] fuel rod assembly"
desc = "A fuel rod for a fusion reactor. This one is made from [material.use_name]."
fuel_colour = material.icon_colour
fuel_type = material.use_name
if(material.radioactivity)
radioactivity = material.radioactivity
desc += " It is warm to the touch."
START_PROCESSING(SSprocessing, src)
if(material.luminescence)
set_light(material.luminescence, material.luminescence, material.icon_colour)
else
name = "[fuel_type] fuel rod assembly"
desc = "A fuel rod for a fusion reactor. This one is made from [fuel_type]."
icon_state = "fuel_assembly"
var/image/I = image(icon, "fuel_assembly")
I.color = fuel_colour
AddOverlays(list(I, image(icon, "fuel_assembly_bracket")))
rod_quantities[fuel_type] = initial_amount
/obj/item/fuel_assembly/process()
. = ..()
if(!radioactivity)
return PROCESS_KILL
if(isturf(loc))
SSradiation.radiate(src, max(1,Ceil(radioactivity/15)))
/obj/item/fuel_assembly/Destroy()
STOP_PROCESSING(SSprocessing, src)
return ..()
// Mapper shorthand.
/obj/item/fuel_assembly/deuterium/New(newloc)
..(newloc, MATERIAL_DEUTERIUM)
/obj/item/fuel_assembly/tritium/New(newloc)
..(newloc, MATERIAL_TRITIUM)
/obj/item/fuel_assembly/phoron/New(newloc)
..(newloc, MATERIAL_PHORON)
/obj/item/fuel_assembly/supermatter/New(newloc)
..(newloc, MATERIAL_SUPERMATTER)
/obj/item/fuel_assembly/hydrogen/New(newloc)
..(newloc, MATERIAL_HYDROGEN_METALLIC)
/obj/item/fuel_assembly/iron/New(newloc)
..(newloc, MATERIAL_IRON)
/obj/item/fuel_assembly/boron/New(newloc)
..(newloc, MATERIAL_BORON)