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>
This commit is contained in:
Batrachophreno
2025-10-05 20:13:06 +00:00
committed by GitHub
co-authored by Matt Atlas Geeves
parent 93b7dbba83
commit b3b4f4b9c6
66 changed files with 4375 additions and 3042 deletions
@@ -521,23 +521,23 @@
complexity = 9
inputs = list()
outputs = list(
"pressure" = IC_PINTYPE_NUMBER,
"temperature" = IC_PINTYPE_NUMBER,
GAS_OXYGEN = IC_PINTYPE_NUMBER,
GAS_NITROGEN = IC_PINTYPE_NUMBER,
GAS_CO2 = IC_PINTYPE_NUMBER,
GAS_PHORON = IC_PINTYPE_NUMBER,
GAS_N2O = IC_PINTYPE_NUMBER,
GAS_HYDROGEN = IC_PINTYPE_NUMBER,
GAS_DEUTERIUM = IC_PINTYPE_NUMBER,
GAS_TRITIUM = IC_PINTYPE_NUMBER,
GAS_HELIUM = IC_PINTYPE_NUMBER,
GAS_BORON = IC_PINTYPE_NUMBER,
GAS_SULFUR = IC_PINTYPE_NUMBER,
GAS_NO2 = IC_PINTYPE_NUMBER,
GAS_CHLORINE = IC_PINTYPE_NUMBER,
GAS_STEAM = IC_PINTYPE_NUMBER,
"other" = IC_PINTYPE_NUMBER
"pressure" = IC_PINTYPE_NUMBER,
"temperature" = IC_PINTYPE_NUMBER,
GAS_OXYGEN = IC_PINTYPE_NUMBER,
GAS_NITROGEN = IC_PINTYPE_NUMBER,
GAS_CO2 = IC_PINTYPE_NUMBER,
GAS_PHORON = IC_PINTYPE_NUMBER,
GAS_N2O = IC_PINTYPE_NUMBER,
GAS_HYDROGEN = IC_PINTYPE_NUMBER,
GAS_DEUTERIUM = IC_PINTYPE_NUMBER,
GAS_TRITIUM = IC_PINTYPE_NUMBER,
GAS_HELIUM = IC_PINTYPE_NUMBER,
GAS_HELIUMFUE = IC_PINTYPE_NUMBER,
GAS_SULFUR = IC_PINTYPE_NUMBER,
GAS_NO2 = IC_PINTYPE_NUMBER,
GAS_CHLORINE = IC_PINTYPE_NUMBER,
GAS_WATERVAPOR = IC_PINTYPE_NUMBER,
"other" = IC_PINTYPE_NUMBER
)
activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_RESEARCH
@@ -642,11 +642,11 @@
var/deuterium_level = environment.gas[GAS_DEUTERIUM]/total_moles
var/tritium_level = environment.gas[GAS_TRITIUM]/total_moles
var/helium_level = environment.gas[GAS_HELIUM]/total_moles
var/boron_level = environment.gas[GAS_BORON]/total_moles
var/helium3_level = environment.gas[GAS_HELIUMFUEL]/total_moles
var/sulfurdioxide_level = environment.gas[GAS_SULFUR]/total_moles
var/nitrogendioxide_level = environment.gas[GAS_NO2]/total_moles
var/chlorine_level = environment.gas[GAS_CHLORINE]/total_moles
var/steam_level = environment.gas[GAS_STEAM]/total_moles
var/watervapor_level = environment.gas[GAS_WATERVAPOR]/total_moles
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
set_pin_data(IC_OUTPUT, 1, pressure)
set_pin_data(IC_OUTPUT, 2, round(environment.temperature-T0C,0.1))
@@ -659,11 +659,11 @@
set_pin_data(IC_OUTPUT, 8, round(deuterium_level*100,0.01))
set_pin_data(IC_OUTPUT, 9, round(tritium_level*100,0.01))
set_pin_data(IC_OUTPUT, 10, round(helium_level*100,0.01))
set_pin_data(IC_OUTPUT, 11, round(boron_level*100,0.01))
set_pin_data(IC_OUTPUT, 11, round(helium3_level*100,0.01))
set_pin_data(IC_OUTPUT, 12, round(sulfurdioxide_level*100,0.01))
set_pin_data(IC_OUTPUT, 13, round(nitrogendioxide_level*100,0.01))
set_pin_data(IC_OUTPUT, 14, round(chlorine_level*100,0.01))
set_pin_data(IC_OUTPUT, 15, round(steam_level*100,0.01))
set_pin_data(IC_OUTPUT, 15, round(watervapor_level*100,0.01))
set_pin_data(IC_OUTPUT, 16, round(unknown_level, 0.01))
set_pin_data(IC_OUTPUT, 17, round(unknown_level, 0.01))
else
@@ -812,9 +812,9 @@
gas_name = GAS_HELIUM
gas_display_name = GAS_HELIUM
/obj/item/integrated_circuit/input/gas_sensor/boron_level
gas_name = GAS_BORON
gas_display_name = GAS_BORON
/obj/item/integrated_circuit/input/gas_sensor/helium3_level
gas_name = GAS_HELIUMFUEL
gas_display_name = GAS_HELIUMFUEL
/obj/item/integrated_circuit/input/gas_sensor/sulfurdioxide_level
gas_name = GAS_SULFUR
@@ -828,9 +828,9 @@
gas_name = GAS_CHLORINE
gas_display_name = GAS_CHLORINE
/obj/item/integrated_circuit/input/gas_sensor/steam_level
gas_name = GAS_STEAM
gas_display_name = GAS_STEAM
/obj/item/integrated_circuit/input/gas_sensor/watervapor_level
gas_name = GAS_WATERVAPOR
gas_display_name = GAS_WATERVAPOR
/obj/item/integrated_circuit/input/turfpoint
name = "tile pointer"