Files
fulpstation/code/__DEFINES/reactions.dm
John Willard 7199947c08 [MDB IGNORE] [IDB IGNORE] WIP TGU (#1427)
Several months worth of updates.

---------

Co-authored-by: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com>
Co-authored-by: Pepsilawn <reisenrui@gmail.com>
Co-authored-by: Ray <64306407+OneAsianTortoise@users.noreply.github.com>
Co-authored-by: Cure221 <106662180+Cure221@users.noreply.github.com>
2025-11-06 08:20:20 -05:00

275 lines
16 KiB
Plaintext

//Defines used in atmos gas reactions. Used to be located in ..\modules\atmospherics\gasmixtures\reactions.dm, but were moved here because fusion added so fucking many.
// Atmos reaction priorities:
/// The prority used to indicate that a reaction should run immediately at the start of a reaction cycle. Currently used by a jumble of decomposition reactions and purgative reactions.
#define PRIORITY_PRE_FORMATION 1
/// The priority used for reactions that produce a useful or more advanced product. Goes after purgative reactions so that the purgers can be slightly more useful.
#define PRIORITY_FORMATION 2
/// The priority used for indicate that a reactions should run immediately before most forms of combustion. Used by two decomposition reactions and steam condensation.
#define PRIORITY_POST_FORMATION 3
/// The priority used to indicate that a reactions should run after all other types of reactions. Exclusively used for combustion reactions that produce fire or are freon.
#define PRIORITY_FIRE 4
/// An exponent used to make large volume gas mixtures significantly less likely to release rads. Used to prevent tritfires in distro from irradiating literally the entire station with no warning.
#define ATMOS_RADIATION_VOLUME_EXP 3
/// Maximum range a radiation pulse is allowed to be from a gas reaction.
#define GAS_REACTION_MAXIMUM_RADIATION_PULSE_RANGE 20
// Water Vapor:
/// The temperature required for water vapor to condense.
#define WATER_VAPOR_CONDENSATION_POINT (T20C + 10)
/// The temperature required for water vapor to condense as ice instead of water.
#define WATER_VAPOR_DEPOSITION_POINT 200
// Miaster:
/// The minimum temperature miasma begins being sterilized at.
#define MIASTER_STERILIZATION_TEMP (FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 70)
/// The maximum ratio of water vapor to other gases miasma can be sterilized at.
#define MIASTER_STERILIZATION_MAX_HUMIDITY 0.1
/// The minimum amount of miasma that will be sterilized in a reaction tick.
#define MIASTER_STERILIZATION_RATE_BASE 20
/// The temperature required to sterilize an additional mole of miasma in a reaction tick.
#define MIASTER_STERILIZATION_RATE_SCALE 20
/// The amount of energy released when a mole of miasma is sterilized.
#define MIASTER_STERILIZATION_ENERGY 2e-3
// Fire:
// - General:
/// Amount of heat released per mole of burnt carbon into the tile
#define FIRE_CARBON_ENERGY_RELEASED 1e5
// - Plasma:
/// Minimum temperature to burn plasma
#define PLASMA_MINIMUM_BURN_TEMPERATURE FIRE_MINIMUM_TEMPERATURE_TO_EXIST
/// Upper temperature ceiling for plasmafire reaction calculations for fuel consumption
#define PLASMA_UPPER_TEMPERATURE (PLASMA_MINIMUM_BURN_TEMPERATURE + 1270)
/// The maximum and default amount of plasma consumed as oxydizer per mole of plasma burnt.
#define OXYGEN_BURN_RATIO_BASE 1.4
/// Multiplier for plasmafire with O2 moles * PLASMA_OXYGEN_FULLBURN for the maximum fuel consumption
#define PLASMA_OXYGEN_FULLBURN 10
/// The minimum ratio of oxygen to plasma necessary to start producing tritium.
#define SUPER_SATURATION_THRESHOLD 96
/// The divisor for the maximum plasma burn rate. (1/9 of the plasma can burn in one reaction tick.)
#define PLASMA_BURN_RATE_DELTA 9
/// Amount of heat released per mole of burnt plasma into the tile
#define FIRE_PLASMA_ENERGY_RELEASED 3e6
// - Hydrogen:
/// The minimum temperature hydrogen combusts at.
#define HYDROGEN_MINIMUM_BURN_TEMPERATURE FIRE_MINIMUM_TEMPERATURE_TO_EXIST
/// The amount of energy released by burning one mole of hydrogen.
#define FIRE_HYDROGEN_ENERGY_RELEASED 2.8e6
/// Multiplier for hydrogen fire with O2 moles * HYDROGEN_OXYGEN_FULLBURN for the maximum fuel consumption
#define HYDROGEN_OXYGEN_FULLBURN 10
/// The divisor for the maximum hydrogen burn rate. (1/2 of the hydrogen can burn in one reaction tick.)
#define FIRE_HYDROGEN_BURN_RATE_DELTA 2
// - Tritium:
/// The minimum temperature tritium combusts at.
#define TRITIUM_MINIMUM_BURN_TEMPERATURE FIRE_MINIMUM_TEMPERATURE_TO_EXIST
/// The amount of energy released by burning one mole of tritium.
#define FIRE_TRITIUM_ENERGY_RELEASED FIRE_HYDROGEN_ENERGY_RELEASED
/// Multiplier for TRITIUM fire with O2 moles * TRITIUM_OXYGEN_FULLBURN for the maximum fuel consumption
#define TRITIUM_OXYGEN_FULLBURN HYDROGEN_OXYGEN_FULLBURN
/// The divisor for the maximum tritium burn rate. (1/2 of the tritium can burn in one reaction tick.)
#define FIRE_TRITIUM_BURN_RATE_DELTA FIRE_HYDROGEN_BURN_RATE_DELTA
/// The minimum number of moles of trit that must be burnt for a tritium fire reaction to produce a radiation pulse. (0.01 moles trit or 10 moles oxygen to start producing rads.)
#define TRITIUM_RADIATION_MINIMUM_MOLES 0.1
/// The minimum released energy necessary for tritium to release radiation during combustion. (at a mix volume of [CELL_VOLUME]).
#define TRITIUM_RADIATION_RELEASE_THRESHOLD (FIRE_TRITIUM_ENERGY_RELEASED)
/// A scaling factor for the range of radiation pulses produced by tritium fires.
#define TRITIUM_RADIATION_RANGE_DIVISOR 0.5
/// The threshold of the tritium combustion's radiation. Lower values means it will be able to penetrate through more structures.
#define TRITIUM_RADIATION_THRESHOLD 0.3
// - Freon:
/// The maximum temperature freon can combust at.
#define FREON_MAXIMUM_BURN_TEMPERATURE 283
///Minimum temperature allowed for the burn to go at max speed, we would have negative pressure otherwise
#define FREON_LOWER_TEMPERATURE 60
///Terminal temperature after which we stop the reaction
#define FREON_TERMINAL_TEMPERATURE 20
/// Multiplier for freonfire with O2 moles * FREON_OXYGEN_FULLBURN for the maximum fuel consumption
#define FREON_OXYGEN_FULLBURN 10
/// The maximum fraction of the freon in a mix that can combust each reaction tick.
#define FREON_BURN_RATE_DELTA 4
/// The amount of heat absorbed per mole of freon burnt.
#define FIRE_FREON_ENERGY_CONSUMED 3e5
/// The maximum temperature at which freon combustion can form hot ice.
#define HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE 160
/// The minimum temperature at which freon combustion can form hot ice.
#define HOT_ICE_FORMATION_MINIMUM_TEMPERATURE 120
/// The chance for hot ice to form when freon reacts on a turf.
#define HOT_ICE_FORMATION_PROB 2
// N2O:
/// The minimum temperature N2O can form from nitrogen and oxygen in the presence of BZ at.
#define N2O_FORMATION_MIN_TEMPERATURE 200
/// The maximum temperature N2O can form from nitrogen and oxygen in the presence of BZ at.
#define N2O_FORMATION_MAX_TEMPERATURE 250
/// The amount of energy released when a mole of N2O forms from nitrogen and oxygen in the presence of BZ.
#define N2O_FORMATION_ENERGY 10000
/// The minimum temperature N2O can decompose at.
#define N2O_DECOMPOSITION_MIN_TEMPERATURE 1400
/// The maximum temperature N2O can decompose at.
#define N2O_DECOMPOSITION_MAX_TEMPERATURE 100000
/// The maximum portion of the N2O that can decompose each reaction tick. (50%)
#define N2O_DECOMPOSITION_RATE_DIVISOR 2
/// One root of the parabola used to scale N2O decomposition rates.
#define N2O_DECOMPOSITION_MIN_SCALE_TEMP 0
/// The other root of the parabola used to scale N2O decomposition rates.
#define N2O_DECOMPOSITION_MAX_SCALE_TEMP 100000
/// The divisor used to normalize the N2O decomp scaling parabola. Basically the value of the apex/nadir of (x - [N2O_DECOMPOSITION_MIN_SCALE_TEMP]) * (x - [N2O_DECOMPOSITION_MAX_SCALE_TEMP]).
#define N2O_DECOMPOSITION_SCALE_DIVISOR ((-1/4) * ((N2O_DECOMPOSITION_MAX_SCALE_TEMP - N2O_DECOMPOSITION_MIN_SCALE_TEMP)**2))
/// The amount of energy released when one mole of N2O decomposes into nitrogen and oxygen.
#define N2O_DECOMPOSITION_ENERGY 200000
// BZ:
/// The maximum temperature BZ can form at. Deliberately set lower than the minimum burn temperature for most combustible gases in an attempt to prevent long fuse singlecaps.
#define BZ_FORMATION_MAX_TEMPERATURE (FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 60) // Yes, someone used this as a bomb timer. I hate players.
/// The amount of energy 1 mole of BZ forming from N2O and plasma releases.
#define BZ_FORMATION_ENERGY 80000
// Pluoxium:
/// The minimum temperature pluoxium can form from carbon dioxide, oxygen, and tritium at.
#define PLUOXIUM_FORMATION_MIN_TEMP 50
/// The maximum temperature pluoxium can form from carbon dioxide, oxygen, and tritium at.
#define PLUOXIUM_FORMATION_MAX_TEMP T0C
/// The maximum amount of pluoxium that can form from carbon dioxide, oxygen, and tritium per reaction tick.
#define PLUOXIUM_FORMATION_MAX_RATE 5
/// The amount of energy one mole of pluoxium forming from carbon dioxide, oxygen, and tritium releases.
#define PLUOXIUM_FORMATION_ENERGY 250
// Nitrium:
/// The minimum temperature necessary for nitrium to form from tritium, nitrogen, and BZ.
#define NITRIUM_FORMATION_MIN_TEMP 1500
/// A scaling divisor for the rate of nitrium formation relative to mix temperature.
#define NITRIUM_FORMATION_TEMP_DIVISOR (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8)
/// The amount of thermal energy consumed when a mole of nitrium is formed from tritium, nitrogen, and BZ.
#define NITRIUM_FORMATION_ENERGY 100000
/// The maximum temperature nitrium can decompose into nitrogen and hydrogen at.
#define NITRIUM_DECOMPOSITION_MAX_TEMP (T0C + 70) //Pretty warm, explicitly not fire temps. Time bombs are cool, but not that cool. If it makes you feel any better it's close.
/// A scaling divisor for the rate of nitrium decomposition relative to mix temperature.
#define NITRIUM_DECOMPOSITION_TEMP_DIVISOR (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8)
/// The amount of energy released when a mole of nitrium decomposes into nitrogen and hydrogen.
#define NITRIUM_DECOMPOSITION_ENERGY 30000
// Freon:
/// The minimum temperature freon can form from plasma, CO2, and BZ at.
#define FREON_FORMATION_MIN_TEMPERATURE (FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100)
/// The amount of energy 2.5 moles of freon forming from plasma, CO2, and BZ consumes.
#define FREON_FORMATION_ENERGY 100
// H-Nob:
/// The maximum temperature hyper-noblium can form from tritium and nitrogen at.
#define NOBLIUM_FORMATION_MIN_TEMP TCMB
/// The maximum temperature hyper-noblium can form from tritium and nitrogen at.
#define NOBLIUM_FORMATION_MAX_TEMP 15
/// The amount of energy a single mole of hyper-noblium forming from tritium and nitrogen releases.
#define NOBLIUM_FORMATION_ENERGY 2e7
/// The number of moles of hyper-noblium required to prevent reactions.
#define REACTION_OPPRESSION_THRESHOLD 5
/// Minimum temperature required for hypernoblium to prevent reactions.
#define REACTION_OPPRESSION_MIN_TEMP 20
// Halon:
/// Energy released per mole of BZ consumed during halon formation.
#define HALON_FORMATION_ENERGY 91232.1
/// How much energy a mole of halon combusting consumes.
#define HALON_COMBUSTION_ENERGY 2500
/// The minimum temperature required for halon to combust.
#define HALON_COMBUSTION_MIN_TEMPERATURE (T0C + 70)
/// The temperature scale for halon combustion reaction rate.
#define HALON_COMBUSTION_TEMPERATURE_SCALE (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 10)
/// Amount of halon required to be consumed in order to release resin. This is always possible as long as there's enough gas.
#define HALON_COMBUSTION_MINIMUM_RESIN_MOLES (0.99 * HALON_COMBUSTION_MIN_TEMPERATURE / HALON_COMBUSTION_TEMPERATURE_SCALE)
/// The volume of the resin foam fluid when halon combusts, in turfs.
#define HALON_COMBUSTION_RESIN_VOLUME 1
// Healium:
/// The minimum temperature healium can form from BZ and freon at.
#define HEALIUM_FORMATION_MIN_TEMP 25
/// The maximum temperature healium can form from BZ and freon at.
#define HEALIUM_FORMATION_MAX_TEMP 300
/// The amount of energy three moles of healium forming from BZ and freon releases.
#define HEALIUM_FORMATION_ENERGY 9000
// Zauker:
/// The minimum temperature zauker can form from hyper-noblium and nitrium at.
#define ZAUKER_FORMATION_MIN_TEMPERATURE 50000
/// The maximum temperature zauker can form from hyper-noblium and nitrium at.
#define ZAUKER_FORMATION_MAX_TEMPERATURE 75000
/// The temperature scaling factor for zauker formation. At most this many moles of zauker can form per reaction tick per kelvin.
#define ZAUKER_FORMATION_TEMPERATURE_SCALE 5e-6
/// The amount of energy half a mole of zauker forming from hypernoblium and nitrium consumes.
#define ZAUKER_FORMATION_ENERGY 5000
/// The maximum number of moles of zauker that can decompose per reaction tick.
#define ZAUKER_DECOMPOSITION_MAX_RATE 20
/// The amount of energy a mole of zauker decomposing in the presence of nitrogen releases.
#define ZAUKER_DECOMPOSITION_ENERGY 460
// Proto-Nitrate:
/// The minimum temperature proto-nitrate can form from pluoxium and hydrogen at.
#define PN_FORMATION_MIN_TEMPERATURE 5000
/// The maximum temperature proto-nitrate can form from pluoxium and hydrogen at.
#define PN_FORMATION_MAX_TEMPERATURE 10000
/// The temperature scaling factor for proto-nitrate formation. At most this many moles of zauker can form per reaction tick per kelvin.
#define PN_FORMATION_TEMPERATURE_SCALE 5e-3
/// The amount of energy 2.2 moles of proto-nitrate forming from pluoxium and hydrogen releases.
#define PN_FORMATION_ENERGY 650
/// The amount of hydrogen necessary for proto-nitrate to start converting it to more proto-nitrate.
#define PN_HYDROGEN_CONVERSION_THRESHOLD 150
/// The maximum number of moles of hydrogen that can be converted into proto-nitrate in a single reaction tick.
#define PN_HYDROGEN_CONVERSION_MAX_RATE 5
/// The amount of energy converting a mole of hydrogen into half a mole of proto-nitrate consumes.
#define PN_HYDROGEN_CONVERSION_ENERGY 2500
/// The minimum temperature proto-nitrate can convert tritium to hydrogen at.
#define PN_TRITIUM_CONVERSION_MIN_TEMP 150
/// The maximum temperature proto-nitrate can convert tritium to hydrogen at.
#define PN_TRITIUM_CONVERSION_MAX_TEMP 340
/// The amount of energy proto-nitrate converting a mole of tritium into hydrogen releases.
#define PN_TRITIUM_CONVERSION_ENERGY 10000
/// The minimum released energy necessary for proto-nitrate to release radiation when converting tritium. (With a reaction vessel volume of [CELL_VOLUME])
#define PN_TRITIUM_CONVERSION_RAD_RELEASE_THRESHOLD 10000
/// A scaling factor for the range of the radiation pulses generated when proto-nitrate converts tritium to hydrogen.
#define PN_TRITIUM_RAD_RANGE_DIVISOR 0.5
/// The threshold of the radiation pulse released when proto-nitrate converts tritium into hydrogen. Lower values means it will be able to penetrate through more structures.
#define PN_TRITIUM_RAD_THRESHOLD 0.3
/// The minimum temperature proto-nitrate can break BZ down at.
#define PN_BZASE_MIN_TEMP 260
/// The maximum temperature proto-nitrate can break BZ down at.
#define PN_BZASE_MAX_TEMP 280
/// The amount of energy proto-nitrate breaking down a mole of BZ releases.
#define PN_BZASE_ENERGY 60000
/// The minimum released energy necessary for proto-nitrate to release rads when breaking down BZ (at a mix volume of [CELL_VOLUME]).
#define PN_BZASE_RAD_RELEASE_THRESHOLD 60000
/// A scaling factor for the range of the radiation pulses generated when proto-nitrate breaks down BZ.
#define PN_BZASE_RAD_RANGE_DIVISOR 1.5
/// The threshold of the radiation pulse released when proto-nitrate breaks down BZ. Lower values means it will be able to penetrate through more structures.
#define PN_BZASE_RAD_THRESHOLD 0.3
/// A scaling factor for the nuclear particle production generated when proto-nitrate breaks down BZ.
#define PN_BZASE_NUCLEAR_PARTICLE_DIVISOR 5
/// The maximum amount of nuclear particles that can be produced from proto-nitrate breaking down BZ.
#define PN_BZASE_NUCLEAR_PARTICLE_MAXIMUM 6
/// How much radiation in consumed amount does a nuclear particle take from radiation when proto-nitrate breaks down BZ.
#define PN_BZASE_NUCLEAR_PARTICLE_RADIATION_ENERGY_CONVERSION 2.5
// Antinoblium:
/// The divisor for the maximum antinoblium conversion rate. (1/90 of the antinoblium converts other gases to antinoblium in one reaction tick.)
#define ANTINOBLIUM_CONVERSION_DIVISOR 90
// Electrolysis:
// Electrolysis arguments:
/// Supermatter power argument.
#define ELECTROLYSIS_ARGUMENT_SUPERMATTER_POWER "electrolyzer_supermatter_power"