From ba8dbfb5914f6f643a27bc4052524b2dab65cf10 Mon Sep 17 00:00:00 2001 From: Ghilker <42839747+Ghilker@users.noreply.github.com> Date: Wed, 17 Nov 2021 10:56:19 +0100 Subject: [PATCH] nitryl and stimulum merge in nitrium (#62061) This PR is the first of a few were i'll be merging similar working gases into one. This time is Nitryl and Stimulum. They'll be merged into Nitrium , a brown gas with both features of the two gases The main scope is to add dept to atmos by removing bloated content and/or repeated content that has never seen the lights of the day (how many times have you seen both gases made and used at the same time?) The PR so far: -removed nitryl -removed stimulum -merged them into Nitrium (Nitrium is now made with trit, nitrogen and bz from a minimum temperature of 1500 K) -made Nitrium have both gases features such as fast movements and sleep and stun immunity but increased damage taken -Nitrium can make crystals that spread the chemicals with a cloud (is still far more efficient to just breathe the gas) Less rare gases, going towards a better atmos gameplay loop --- .../atmospherics/atmos_mapping_helpers.dm | 13 +-- code/__DEFINES/reactions.dm | 10 +- code/game/machinery/computer/atmos_control.dm | 31 ++---- .../circuitboards/computer_circuitboards.dm | 10 +- code/game/objects/items/nitrium_crystals.dm | 18 ++++ code/game/turfs/open/floor/reinf_floor.dm | 11 +- .../atmospherics/gasmixtures/gas_types.dm | 25 ++--- .../atmospherics/gasmixtures/reactions.dm | 97 ++++++------------ .../atmospherics/machinery/airalarm.dm | 12 +-- .../components/fusion/hfr_fuel_datums.dm | 2 +- .../components/fusion/hfr_main_processes.dm | 24 ++--- .../atmos_machines_recipes.dm | 12 ++- .../atmospherics/machinery/components/tank.dm | 7 +- .../components/trinary_devices/filter.dm | 14 +-- .../unary_devices/outlet_injector.dm | 9 +- .../components/unary_devices/vent_pump.dm | 9 +- .../atmospherics/machinery/other/miner.dm | 11 +- .../machinery/portable/canister.dm | 18 +--- .../machinery/portable/scrubber.dm | 2 +- code/modules/cargo/bounties/engineering.dm | 8 +- code/modules/cargo/exports/large_objects.dm | 2 +- code/modules/clothing/masks/gas_filter.dm | 3 +- code/modules/mob/living/carbon/life.dm | 11 +- code/modules/movespeed/modifiers/reagent.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 42 ++++---- code/modules/surgery/organs/lungs.dm | 33 +++--- icons/effects/atmospherics.dmi | Bin 25569 -> 25569 bytes icons/obj/atmos.dmi | Bin 16432 -> 16736 bytes tgstation.dme | 1 + tgui/packages/tgui/constants.js | 10 +- 30 files changed, 182 insertions(+), 265 deletions(-) create mode 100644 code/game/objects/items/nitrium_crystals.dm diff --git a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm index 5f3c14e9220..75ad188d8de 100644 --- a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm +++ b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm @@ -26,10 +26,9 @@ #define ATMOS_TANK_H2 "hydrogen=100000;TEMP=293.15" #define ATMOS_TANK_HYPERNOBLIUM "nob=100000;TEMP=293.15" #define ATMOS_TANK_MIASMA "miasma=100000;TEMP=293.15" -#define ATMOS_TANK_NO2 "no2=100000;TEMP=293.15" +#define ATMOS_TANK_NITRIUM "nitrium=100000;TEMP=293.15" #define ATMOS_TANK_PLUOXIUM "pluox=100000;TEMP=293.15" #define ATMOS_TANK_PROTO_NITRATE "proto_nitrate=100000;TEMP=293.15" -#define ATMOS_TANK_STIMULUM "stim=100000;TEMP=293.15" #define ATMOS_TANK_TRITIUM "tritium=100000;TEMP=293.15" #define ATMOS_TANK_H2O "water_vapor=100000;TEMP=293.15" #define ATMOS_TANK_ZAUKER "zauker=100000;TEMP=293.15" @@ -102,9 +101,9 @@ #define ATMOS_GAS_MONITOR_OUTPUT_MIASMA "miasma_out" #define ATMOS_GAS_MONITOR_SENSOR_MIASMA "miasma_sensor" -#define ATMOS_GAS_MONITOR_INPUT_NO2 "no2_in" -#define ATMOS_GAS_MONITOR_OUTPUT_NO2 "no2_out" -#define ATMOS_GAS_MONITOR_SENSOR_NO2 "no2_sensor" +#define ATMOS_GAS_MONITOR_INPUT_NITRIUM "nitrium_in" +#define ATMOS_GAS_MONITOR_OUTPUT_NITRIUM "nitrium_out" +#define ATMOS_GAS_MONITOR_SENSOR_NITRIUM "nitrium_sensor" #define ATMOS_GAS_MONITOR_INPUT_PLUOXIUM "pluoxium_in" #define ATMOS_GAS_MONITOR_OUTPUT_PLUOXIUM "pluoxium_out" @@ -114,10 +113,6 @@ #define ATMOS_GAS_MONITOR_OUTPUT_PROTO_NITRATE "proto-nitrate_out" #define ATMOS_GAS_MONITOR_SENSOR_PROTO_NITRATE "proto-nitrate_sensor" -#define ATMOS_GAS_MONITOR_INPUT_STIMULUM "stimulum_in" -#define ATMOS_GAS_MONITOR_OUTPUT_STIMULUM "stimulum_out" -#define ATMOS_GAS_MONITOR_SENSOR_STIMULUM "stimulum_sensor" - #define ATMOS_GAS_MONITOR_INPUT_TRITIUM "tritium_in" #define ATMOS_GAS_MONITOR_OUTPUT_TRITIUM "tritium_out" #define ATMOS_GAS_MONITOR_SENSOR_TRITIUM "tritium_sensor" diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm index b1bb4ef5f86..5f067667c80 100644 --- a/code/__DEFINES/reactions.dm +++ b/code/__DEFINES/reactions.dm @@ -19,8 +19,8 @@ #define N2O_DECOMPOSITION_MIN_ENERGY 1400 #define N2O_DECOMPOSITION_ENERGY_RELEASED 200000 -#define NITRYL_DECOMPOSITION_ENERGY 30000 -#define NITRYL_FORMATION_ENERGY 100000 +#define NITRIUM_DECOMPOSITION_ENERGY 30000 +#define NITRIUM_FORMATION_ENERGY 100000 #define NITROUS_FORMATION_ENERGY 10000 //tritium reaction #define TRITIUM_BURN_OXY_FACTOR 100 @@ -39,11 +39,6 @@ #define METAL_HYDROGEN_MINIMUM_PRESSURE 1e7 #define METAL_HYDROGEN_FORMATION_ENERGY 20000000 #define SUPER_SATURATION_THRESHOLD 96 -#define STIMULUM_HEAT_SCALE 100000 -#define STIMULUM_FIRST_RISE 0.65 -#define STIMULUM_FIRST_DROP 0.065 -#define STIMULUM_SECOND_RISE 0.0009 -#define STIMULUM_ABSOLUTE_DROP 0.00000335 #define REACTION_OPPRESSION_THRESHOLD 5 #define NOBLIUM_FORMATION_ENERGY 2e7 #define STIM_BALL_GAS_AMOUNT 5 @@ -52,7 +47,6 @@ #define BZ_RESEARCH_SCALE 4 #define BZ_RESEARCH_MAX_AMOUNT 400 #define METAL_HYDROGEN_RESEARCH_MAX_AMOUNT 3000 -#define STIMULUM_RESEARCH_AMOUNT 50 #define PLUOXIUM_TEMP_CAP 200 diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index b8628194002..7ab28b03a50 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -58,18 +58,15 @@ /obj/machinery/air_sensor/atmos/miasma_tank name = "miasma tank gas sensor" id_tag = ATMOS_GAS_MONITOR_SENSOR_MIASMA -/obj/machinery/air_sensor/atmos/nitryl_tank - name = "nitryl tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_NO2 +/obj/machinery/air_sensor/atmos/nitrium_tank + name = "nitrium tank gas sensor" + id_tag = ATMOS_GAS_MONITOR_SENSOR_NITRIUM /obj/machinery/air_sensor/atmos/pluoxium_tank name = "pluoxium tank gas sensor" id_tag = ATMOS_GAS_MONITOR_SENSOR_PLUOXIUM /obj/machinery/air_sensor/atmos/proto_nitrate_tank name = "proto-nitrate tank gas sensor" id_tag = ATMOS_GAS_MONITOR_SENSOR_PROTO_NITRATE -/obj/machinery/air_sensor/atmos/stimulum_tank - name = "stimulum tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_STIMULUM /obj/machinery/air_sensor/atmos/tritium_tank name = "tritium tank gas sensor" id_tag = ATMOS_GAS_MONITOR_SENSOR_TRITIUM @@ -158,10 +155,9 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) ATMOS_GAS_MONITOR_SENSOR_H2 = "Hydrogen Tank", ATMOS_GAS_MONITOR_SENSOR_HYPERNOBLIUM = "Hypernoblium Tank", ATMOS_GAS_MONITOR_SENSOR_MIASMA = "Miasma Tank", - ATMOS_GAS_MONITOR_SENSOR_NO2 = "Nitryl Tank", + ATMOS_GAS_MONITOR_SENSOR_NITRIUM = "Nitrium Tank", ATMOS_GAS_MONITOR_SENSOR_PLUOXIUM = "Pluoxium Tank", ATMOS_GAS_MONITOR_SENSOR_PROTO_NITRATE = "Proto-Nitrate Tank", - ATMOS_GAS_MONITOR_SENSOR_STIMULUM = "Stimulum Tank", ATMOS_GAS_MONITOR_SENSOR_TRITIUM = "Tritium Tank", ATMOS_GAS_MONITOR_SENSOR_H2O = "Water Vapor Tank", ATMOS_GAS_MONITOR_SENSOR_ZAUKER = "Zauker Tank", @@ -345,12 +341,12 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) sensors = list(ATMOS_GAS_MONITOR_SENSOR_MIASMA = "Miasma Tank") circuit = /obj/item/circuitboard/computer/atmos_control/tank/miasma_tank -/obj/machinery/computer/atmos_control/tank/nitryl_tank - name = "Nitryl Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_NO2 - output_tag = ATMOS_GAS_MONITOR_OUTPUT_NO2 - sensors = list(ATMOS_GAS_MONITOR_SENSOR_NO2 = "Nitryl Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/nitryl_tank +/obj/machinery/computer/atmos_control/tank/nitrium_tank + name = "Nitrium Supply Control" + input_tag = ATMOS_GAS_MONITOR_INPUT_NITRIUM + output_tag = ATMOS_GAS_MONITOR_OUTPUT_NITRIUM + sensors = list(ATMOS_GAS_MONITOR_SENSOR_NITRIUM = "Nitrium Tank") + circuit = /obj/item/circuitboard/computer/atmos_control/tank/nitrium_tank /obj/machinery/computer/atmos_control/tank/pluoxium_tank name = "Pluoxium Supply Control" @@ -366,13 +362,6 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) sensors = list(ATMOS_GAS_MONITOR_SENSOR_PROTO_NITRATE = "Proto-Nitrate Tank") circuit = /obj/item/circuitboard/computer/atmos_control/tank/proto_nitrate_tank -/obj/machinery/computer/atmos_control/tank/stimulum_tank - name = "Stimulum Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_STIMULUM - output_tag = ATMOS_GAS_MONITOR_OUTPUT_STIMULUM - sensors = list(ATMOS_GAS_MONITOR_SENSOR_STIMULUM = "Stimulum Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/stimulum_tank - /obj/machinery/computer/atmos_control/tank/tritium_tank name = "Tritium Supply Control" input_tag = ATMOS_GAS_MONITOR_INPUT_TRITIUM diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index f7fe1424ca5..87131360df6 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -104,9 +104,9 @@ name = "Miasma Supply Control (Computer Board)" build_path = /obj/machinery/computer/atmos_control/tank/miasma_tank -/obj/item/circuitboard/computer/atmos_control/tank/nitryl_tank - name = "Nitryl Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/nitryl_tank +/obj/item/circuitboard/computer/atmos_control/tank/nitrium_tank + name = "Nitrium Supply Control (Computer Board)" + build_path = /obj/machinery/computer/atmos_control/tank/nitrium_tank /obj/item/circuitboard/computer/atmos_control/tank/pluoxium_tank name = "Pluoxium Supply Control (Computer Board)" @@ -116,10 +116,6 @@ name = "Proto-Nitrate Supply Control (Computer Board)" build_path = /obj/machinery/computer/atmos_control/tank/proto_nitrate_tank -/obj/item/circuitboard/computer/atmos_control/tank/stimulum_tank - name = "Stimulum Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/stimulum_tank - /obj/item/circuitboard/computer/atmos_control/tank/tritium_tank name = "Tritium Supply Control (Computer Board)" build_path = /obj/machinery/computer/atmos_control/tank/tritium_tank diff --git a/code/game/objects/items/nitrium_crystals.dm b/code/game/objects/items/nitrium_crystals.dm new file mode 100644 index 00000000000..b81a96bca18 --- /dev/null +++ b/code/game/objects/items/nitrium_crystals.dm @@ -0,0 +1,18 @@ +/obj/item/nitrium_crystal + desc = "A weird brown crystal, it smokes when broken" + name = "nitrium crystal" + icon = 'icons/obj/atmos.dmi' + icon_state = "nitrium_crystal" + var/cloud_size = 1 + +/obj/item/nitrium_crystal/attack_self(mob/user) + . = ..() + var/datum/effect_system/smoke_spread/chem/smoke = new + var/turf/location = get_turf(src) + create_reagents(5) + reagents.add_reagent(/datum/reagent/nitrium_low_metabolization, 3) + reagents.add_reagent(/datum/reagent/nitrium_high_metabolization, 2) + smoke.attach(location) + smoke.set_up(reagents, cloud_size, location, silent = TRUE) + smoke.start() + qdel(src) diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm index 6c3670e42ee..3b201bf6d65 100644 --- a/code/game/turfs/open/floor/reinf_floor.dm +++ b/code/game/turfs/open/floor/reinf_floor.dm @@ -149,10 +149,9 @@ name = "\improper Miasma floor" initial_gas_mix = ATMOS_TANK_MIASMA -/turf/open/floor/engine/no2 - article = "an" - name = "\improper NO2 floor" - initial_gas_mix = ATMOS_TANK_NO2 +/turf/open/floor/engine/nitrium + name = "\improper nitrium floor" + initial_gas_mix = ATMOS_TANK_NITRIUM /turf/open/floor/engine/pluoxium name = "\improper Pluoxium floor" @@ -162,10 +161,6 @@ name = "\improper Proto-Nitrate floor" initial_gas_mix = ATMOS_TANK_PROTO_NITRATE -/turf/open/floor/engine/stimulum - name = "\improper Stimulum floor" - initial_gas_mix = ATMOS_TANK_STIMULUM - /turf/open/floor/engine/tritium name = "\improper Tritium floor" initial_gas_mix = ATMOS_TANK_TRITIUM diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 875fe2caef6..de2c8482f1a 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -1,6 +1,6 @@ GLOBAL_LIST_INIT(hardcoded_gases, list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/plasma)) //the main four gases, which were at one time hardcoded //Now this is what I call history -GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/pluoxium, /datum/gas/stimulum, /datum/gas/nitryl))) //unable to react amongst themselves +GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/pluoxium))) //unable to react amongst themselves /proc/meta_gas_list() . = subtypesof(/datum/gas) @@ -121,15 +121,16 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g purchaseable = TRUE base_value = 3 -/datum/gas/nitryl - id = "no2" - specific_heat = 20 - name = "Nitryl" - gas_overlay = "nitryl" +/datum/gas/nitrium + id = "nitrium" + specific_heat = 10 + name = "Nitrium" + fusion_power = 7 + gas_overlay = "nitrium" moles_visible = MOLES_GAS_VISIBLE dangerous = TRUE - rarity = 100 - base_value = 5 + rarity = 1 + base_value = 100 /datum/gas/tritium id = "tritium" @@ -152,14 +153,6 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g purchaseable = TRUE base_value = 2 -/datum/gas/stimulum - id = "stim" - specific_heat = 5 - name = "Stimulum" - fusion_power = 7 - rarity = 1 - base_value = 100 - /datum/gas/pluoxium id = "pluox" specific_heat = 80 diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index b3f10328785..e63315fa5cd 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -401,32 +401,33 @@ air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity), TCMB) //the air heats up when reacting return REACTING -/datum/gas_reaction/nitryl_decomposition //The decomposition of nitryl. Exothermic. Requires oxygen as catalyst. +/datum/gas_reaction/nitrium_decomposition //The decomposition of nitrium. Exothermic. Requires oxygen as catalyst. priority_group = PRIORITY_PRE_FORMATION - name = "Nitryl Decomposition" - id = "nitryl_decomp" + name = "Nitrium Decomposition" + id = "nitrium_decomp" -/datum/gas_reaction/nitryl_decomposition/init_reqs() +/datum/gas_reaction/nitrium_decomposition/init_reqs() requirements = list( /datum/gas/oxygen = MINIMUM_MOLE_COUNT, - /datum/gas/nitryl = MINIMUM_MOLE_COUNT, + /datum/gas/nitrium = MINIMUM_MOLE_COUNT, "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 ) -/datum/gas_reaction/nitryl_decomposition/react(datum/gas_mixture/air) +/datum/gas_reaction/nitrium_decomposition/react(datum/gas_mixture/air) var/list/cached_gases = air.gases var/temperature = air.temperature var/old_heat_capacity = air.heat_capacity() - //This reaction is agressively slow. like, a tenth of a mole per fire slow. Keep that in mind - var/heat_efficency = min(temperature / (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8), cached_gases[/datum/gas/nitryl][MOLES]) - var/energy_produced = heat_efficency * NITRYL_DECOMPOSITION_ENERGY - if ((cached_gases[/datum/gas/nitryl][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + //This reaction is agressively slow. like, a tenth of a mole per fire slow. Keep that in mind + var/heat_efficency = min(temperature / (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8), cached_gases[/datum/gas/nitrium][MOLES]) + var/energy_produced = heat_efficency * NITRIUM_DECOMPOSITION_ENERGY + + if ((cached_gases[/datum/gas/nitrium][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. return NO_REACTION - ASSERT_GAS(/datum/gas/nitrogen, air) - cached_gases[/datum/gas/nitryl][MOLES] -= heat_efficency - cached_gases[/datum/gas/oxygen][MOLES] += heat_efficency + air.assert_gases(/datum/gas/nitrogen, /datum/gas/hydrogen) + cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficency + cached_gases[/datum/gas/hydrogen][MOLES] += heat_efficency cached_gases[/datum/gas/nitrogen][MOLES] += heat_efficency if(energy_produced> 0) @@ -435,36 +436,34 @@ air.temperature = max(((temperature * old_heat_capacity + energy_produced) / new_heat_capacity), TCMB) //the air heats up when reacting return REACTING -/datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires bz. +/datum/gas_reaction/nitrium_formation //The formation of nitrium. Endothermic. Requires bz. priority_group = PRIORITY_FORMATION - name = "Nitryl formation" - id = "nitrylformation" + name = "Nitrium formation" + id = "nitrium_formation" -/datum/gas_reaction/nitrylformation/init_reqs() +/datum/gas_reaction/nitrium_formation/init_reqs() requirements = list( - /datum/gas/oxygen = 10, + /datum/gas/tritium = 20, /datum/gas/nitrogen = 10, /datum/gas/bz = 5, - "MIN_TEMP" = 1500, - "MAX_TEMP" = 10000 + "MIN_TEMP" = 1500 ) -/datum/gas_reaction/nitrylformation/react(datum/gas_mixture/air) +/datum/gas_reaction/nitrium_formation/react(datum/gas_mixture/air) var/list/cached_gases = air.gases var/temperature = air.temperature var/old_heat_capacity = air.heat_capacity() - var/heat_efficency = min(temperature / (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8), cached_gases[/datum/gas/oxygen][MOLES], cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.05)) - var/energy_used = heat_efficency * NITRYL_FORMATION_ENERGY - ASSERT_GAS(/datum/gas/nitryl, air) - if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.05 < 0)) //Shouldn't produce gas from nothing. + var/heat_efficency = min(temperature / (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8), cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.05)) + var/energy_used = heat_efficency * NITRIUM_FORMATION_ENERGY + ASSERT_GAS(/datum/gas/nitrium, air) + if ((cached_gases[/datum/gas/tritium][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.05 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION - ASSERT_GAS(/datum/gas/nitryl, air) - cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency + cached_gases[/datum/gas/tritium][MOLES] -= heat_efficency cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency - cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.05 //bz gets consumed to balance the nitryl production and not make it too common and/or easy - cached_gases[/datum/gas/nitryl][MOLES] += heat_efficency + cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.05 //bz gets consumed to balance the nitrium production and not make it too common and/or easy + cached_gases[/datum/gas/nitrium][MOLES] += heat_efficency if(energy_used > 0) var/new_heat_capacity = air.heat_capacity() @@ -542,38 +541,6 @@ air.temperature = max(((temperature * old_heat_capacity - energy_used)/new_heat_capacity), TCMB) return REACTING -/datum/gas_reaction/stimformation //Stimulum formation follows a strange pattern of how effective it will be at a given temperature, having some multiple peaks and some large dropoffs. Exo and endo thermic. - priority_group = PRIORITY_FORMATION - name = "Stimulum formation" - id = "stimformation" - -/datum/gas_reaction/stimformation/init_reqs() - requirements = list( - /datum/gas/tritium = 30, - /datum/gas/bz = 20, - /datum/gas/nitryl = 30, - /datum/gas/plasma = MINIMUM_MOLE_COUNT, - "MIN_TEMP" = 1500) - -/datum/gas_reaction/stimformation/react(datum/gas_mixture/air) - var/list/cached_gases = air.gases - - var/old_heat_capacity = air.heat_capacity() - var/heat_scale = min(air.temperature/STIMULUM_HEAT_SCALE, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/nitryl][MOLES]) - var/stim_energy_change = heat_scale + STIMULUM_FIRST_RISE * (heat_scale ** 2) - STIMULUM_FIRST_DROP * (heat_scale ** 3) + STIMULUM_SECOND_RISE * (heat_scale ** 4) - STIMULUM_ABSOLUTE_DROP * (heat_scale ** 5) - ASSERT_GAS(/datum/gas/stimulum, air) - if ((cached_gases[/datum/gas/tritium][MOLES] - heat_scale < 0 ) || (cached_gases[/datum/gas/nitryl][MOLES] - heat_scale < 0)) //Shouldn't produce gas from nothing. - return NO_REACTION - cached_gases[/datum/gas/tritium][MOLES] -= heat_scale - cached_gases[/datum/gas/nitryl][MOLES] -= heat_scale - cached_gases[/datum/gas/stimulum][MOLES] += heat_scale * 0.75 - - if(stim_energy_change) - var/new_heat_capacity = air.heat_capacity() - if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - air.temperature = max(((air.temperature * old_heat_capacity + stim_energy_change) / new_heat_capacity), TCMB) - return REACTING - /datum/gas_reaction/nobliumformation //Hyper-Noblium formation is extrememly endothermic, but requires high temperatures to start. Due to its high mass, hyper-nobelium uses large amounts of nitrogen and tritium. BZ can be used as a catalyst to make it less endothermic. priority_group = PRIORITY_FORMATION name = "Hyper-Noblium condensation" @@ -739,7 +706,7 @@ /datum/gas_reaction/zauker_formation/init_reqs() requirements = list( /datum/gas/hypernoblium = MINIMUM_MOLE_COUNT, - /datum/gas/stimulum = MINIMUM_MOLE_COUNT, + /datum/gas/nitrium = MINIMUM_MOLE_COUNT, "MIN_TEMP" = 50000, "MAX_TEMP" = 75000 ) @@ -748,13 +715,13 @@ var/list/cached_gases = air.gases var/temperature = air.temperature var/old_heat_capacity = air.heat_capacity() - var/heat_efficency = min(temperature * 0.000005, cached_gases[/datum/gas/hypernoblium][MOLES] * INVERSE(0.01), cached_gases[/datum/gas/stimulum][MOLES] * INVERSE(0.5)) + var/heat_efficency = min(temperature * 0.000005, cached_gases[/datum/gas/hypernoblium][MOLES] * INVERSE(0.01), cached_gases[/datum/gas/nitrium][MOLES] * INVERSE(0.5)) var/energy_used = heat_efficency * 5000 ASSERT_GAS(/datum/gas/zauker, air) - if ((cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficency * 0.01 < 0 ) || (cached_gases[/datum/gas/stimulum][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficency * 0.01 < 0 ) || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION cached_gases[/datum/gas/hypernoblium][MOLES] -= heat_efficency * 0.01 - cached_gases[/datum/gas/stimulum][MOLES] -= heat_efficency * 0.5 + cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficency * 0.5 cached_gases[/datum/gas/zauker][MOLES] += heat_efficency * 0.5 if(energy_used) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 2931d0a9593..971995b352c 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -107,8 +107,7 @@ /datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic /datum/gas/water_vapor = new/datum/tlv/dangerous, /datum/gas/tritium = new/datum/tlv/dangerous, - /datum/gas/stimulum = new/datum/tlv/dangerous, - /datum/gas/nitryl = new/datum/tlv/dangerous, + /datum/gas/nitrium = new/datum/tlv/dangerous, /datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires /datum/gas/freon = new/datum/tlv/dangerous, /datum/gas/hydrogen = new/datum/tlv/dangerous, @@ -454,10 +453,9 @@ /datum/gas/water_vapor, /datum/gas/hypernoblium, /datum/gas/nitrous_oxide, - /datum/gas/nitryl, + /datum/gas/nitrium, /datum/gas/tritium, /datum/gas/bz, - /datum/gas/stimulum, /datum/gas/pluoxium, /datum/gas/freon, /datum/gas/hydrogen, @@ -817,8 +815,7 @@ /datum/gas/hypernoblium = new/datum/tlv/no_checks, /datum/gas/water_vapor = new/datum/tlv/no_checks, /datum/gas/tritium = new/datum/tlv/no_checks, - /datum/gas/stimulum = new/datum/tlv/no_checks, - /datum/gas/nitryl = new/datum/tlv/no_checks, + /datum/gas/nitrium = new/datum/tlv/no_checks, /datum/gas/pluoxium = new/datum/tlv/no_checks, /datum/gas/freon = new/datum/tlv/no_checks, /datum/gas/hydrogen = new/datum/tlv/no_checks, @@ -844,8 +841,7 @@ /datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic /datum/gas/water_vapor = new/datum/tlv/dangerous, /datum/gas/tritium = new/datum/tlv/dangerous, - /datum/gas/stimulum = new/datum/tlv/dangerous, - /datum/gas/nitryl = new/datum/tlv/dangerous, + /datum/gas/nitrium = new/datum/tlv/dangerous, /datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires /datum/gas/freon = new/datum/tlv/dangerous, /datum/gas/hydrogen = new/datum/tlv/dangerous, diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm index 33eb2ab5838..c7a9545a7d2 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm @@ -136,5 +136,5 @@ GLOBAL_LIST_INIT(hfr_fuels_list, hfr_fuels_create_list()) temperature_change_multiplier = 1 requirements = list(/datum/gas/hypernoblium, /datum/gas/antinoblium) primary_products = list(/datum/gas/helium) - secondary_products = list(/datum/gas/plasma, /datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/proto_nitrate, /datum/gas/stimulum, /datum/gas/miasma) + secondary_products = list(/datum/gas/plasma, /datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/proto_nitrate, /datum/gas/nitrium, /datum/gas/miasma) meltdown_flags = HYPERTORUS_FLAG_DEVASTATING_EXPLOSION | HYPERTORUS_FLAG_RADIATION_PULSE | HYPERTORUS_FLAG_EMP | HYPERTORUS_FLAG_MASSIVE_SPREAD | HYPERTORUS_FLAG_CRITICAL_MELTDOWN diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm index 04de52b589e..6c7551e0c35 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm @@ -129,13 +129,13 @@ // Gases that decrease the amount of energy energy_modifiers -= scaled_moderator_list[/datum/gas/hypernoblium] * 10 + \ scaled_moderator_list[/datum/gas/water_vapor] * 0.75 + \ - scaled_moderator_list[/datum/gas/nitryl] * 0.15 + \ + scaled_moderator_list[/datum/gas/nitrium] * 0.15 + \ scaled_moderator_list[/datum/gas/healium] * 0.45 + \ scaled_moderator_list[/datum/gas/freon] * 1.15 ///Between 0.25 and 100, this value is used to modify the behaviour of the internal energy and the core temperature based on the gases present in the mix var/power_modifier = scaled_moderator_list[/datum/gas/oxygen] * 0.55 + \ scaled_moderator_list[/datum/gas/carbon_dioxide] * 0.95 + \ - scaled_moderator_list[/datum/gas/nitryl] * 1.45 + \ + scaled_moderator_list[/datum/gas/nitrium] * 1.45 + \ scaled_moderator_list[/datum/gas/zauker] * 5.55 + \ scaled_moderator_list[/datum/gas/plasma] * 0.05 - \ scaled_moderator_list[/datum/gas/nitrous_oxide] * 0.05 - \ @@ -301,21 +301,21 @@ if(moderator_list[/datum/gas/proto_nitrate] > 20) radiation *= 1.55 heat_output *= 1.025 - internal_output.assert_gases(/datum/gas/stimulum) - internal_output.gases[/datum/gas/stimulum][MOLES] += scaled_production * 1.05 + internal_output.assert_gases(/datum/gas/nitrium) + internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.05 moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35) if(3, 4) if(moderator_list[/datum/gas/plasma] > 10) - internal_output.assert_gases(/datum/gas/freon, /datum/gas/stimulum) + internal_output.assert_gases(/datum/gas/freon, /datum/gas/nitrium) internal_output.gases[/datum/gas/freon][MOLES] += scaled_production * 0.15 - internal_output.gases[/datum/gas/stimulum][MOLES] += scaled_production * 1.05 + internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.05 moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.45) if(moderator_list[/datum/gas/freon] > 50) heat_output *= 0.9 radiation *= 0.8 if(moderator_list[/datum/gas/proto_nitrate]> 15) - internal_output.assert_gases(/datum/gas/stimulum, /datum/gas/halon) - internal_output.gases[/datum/gas/stimulum][MOLES] += scaled_production * 1.25 + internal_output.assert_gases(/datum/gas/nitrium, /datum/gas/halon) + internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.25 internal_output.gases[/datum/gas/halon][MOLES] += scaled_production * 1.15 moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.55) radiation *= 1.95 @@ -334,8 +334,8 @@ heat_output *= 0.5 radiation *= 0.2 if(moderator_list[/datum/gas/proto_nitrate] > 50) - internal_output.assert_gases(/datum/gas/stimulum, /datum/gas/pluoxium) - internal_output.gases[/datum/gas/stimulum][MOLES] += scaled_production * 1.95 + internal_output.assert_gases(/datum/gas/nitrium, /datum/gas/pluoxium) + internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.95 internal_output.gases[/datum/gas/pluoxium][MOLES] += scaled_production moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35) radiation *= 1.95 @@ -357,9 +357,9 @@ moderator_internal.gases[/datum/gas/bz][MOLES] += scaled_production * 1.15 moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45) if(moderator_list[/datum/gas/proto_nitrate]) - internal_output.assert_gases(/datum/gas/zauker, /datum/gas/stimulum) + internal_output.assert_gases(/datum/gas/zauker, /datum/gas/nitrium) internal_output.gases[/datum/gas/zauker][MOLES] += scaled_production * 5.35 - internal_output.gases[/datum/gas/stimulum][MOLES] += scaled_production * 2.15 + internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 2.15 moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 3.35) radiation *= 2 heat_output *= 2.25 diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm index 1397b71c554..ac187433fed 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm @@ -180,7 +180,7 @@ GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list()) name = "exotic fuel pellet" reaction_type = ENDOTHERMIC_REACTION energy_release = 6000000 - requirements = list(/datum/gas/hypernoblium = 100, /datum/gas/stimulum = 100) + requirements = list(/datum/gas/hypernoblium = 100, /datum/gas/nitrium = 100) products = list(/obj/item/fuel_pellet/exotic = 1) /datum/gas_recipe/crystallizer/crystal_foam @@ -190,3 +190,13 @@ GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list()) energy_release = 140000 requirements = list(/datum/gas/carbon_dioxide = 150, /datum/gas/nitrous_oxide = 100, /datum/gas/water_vapor = 25) products = list(/obj/item/grenade/gas_crystal/crystal_foam = 1) + +/datum/gas_recipe/crystallizer/crystallized_nitrium + id = "crystallized_nitrium" + name = "Nitrium crystal" + min_temp = 10 + max_temp = 25 + reaction_type = ENDOTHERMIC_REACTION + energy_release = 45000 + requirements = list(/datum/gas/nitrium = 150, /datum/gas/oxygen = 70, /datum/gas/bz = 50) + products = list(/obj/item/nitrium_crystal = 1) diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 91a824ddadb..0f99a977625 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -404,8 +404,8 @@ /obj/machinery/atmospherics/components/tank/miasma gas_type = /datum/gas/miasma -/obj/machinery/atmospherics/components/tank/nitryl - gas_type = /datum/gas/nitryl +/obj/machinery/atmospherics/components/tank/nitrium + gas_type = /datum/gas/nitrium /obj/machinery/atmospherics/components/tank/pluoxium gas_type = /datum/gas/pluoxium @@ -413,9 +413,6 @@ /obj/machinery/atmospherics/components/tank/proto_nitrate gas_type = /datum/gas/proto_nitrate -/obj/machinery/atmospherics/components/tank/stimulum - gas_type = /datum/gas/stimulum - /obj/machinery/atmospherics/components/tank/tritium gas_type = /datum/gas/tritium diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index edf452bd651..6f7af747d85 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -267,17 +267,14 @@ name = "miasma filter" filter_type = list(/datum/gas/miasma) /obj/machinery/atmospherics/components/trinary/filter/atmos/no2 - name = "nitryl filter" - filter_type = list(/datum/gas/nitryl) + name = "nitrium filter" + filter_type = list(/datum/gas/nitrium) /obj/machinery/atmospherics/components/trinary/filter/atmos/pluoxium name = "pluoxium filter" filter_type = list(/datum/gas/pluoxium) /obj/machinery/atmospherics/components/trinary/filter/atmos/proto_nitrate name = "proto-nitrate filter" filter_type = list(/datum/gas/proto_nitrate) -/obj/machinery/atmospherics/components/trinary/filter/atmos/stimulum - name = "stimulum filter" - filter_type = list(/datum/gas/stimulum) /obj/machinery/atmospherics/components/trinary/filter/atmos/tritium name = "tritium filter" filter_type = list(/datum/gas/tritium) @@ -336,17 +333,14 @@ name = "miasma filter" filter_type = list(/datum/gas/miasma) /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/no2 - name = "nitryl filter" - filter_type = list(/datum/gas/nitryl) + name = "nitrium filter" + filter_type = list(/datum/gas/nitrium) /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/pluoxium name = "pluoxium filter" filter_type = list(/datum/gas/pluoxium) /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/proto_nitrate name = "proto-nitrate filter" filter_type = list(/datum/gas/proto_nitrate) -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/stimulum - name = "stimulum filter" - filter_type = list(/datum/gas/stimulum) /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/tritium name = "tritium filter" filter_type = list(/datum/gas/tritium) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index bb33d8ade6a..068de9ac27d 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -263,18 +263,15 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/miasma_input name = "miasma tank input injector" id = ATMOS_GAS_MONITOR_INPUT_MIASMA -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitryl_input - name = "nitryl tank input injector" - id = ATMOS_GAS_MONITOR_INPUT_NO2 +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrium_input + name = "nitrium tank input injector" + id = ATMOS_GAS_MONITOR_INPUT_NITRIUM /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/pluoxium_input name = "pluoxium tank input injector" id = ATMOS_GAS_MONITOR_INPUT_PLUOXIUM /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/proto_nitrate_input name = "proto-nitrate tank input injector" id = ATMOS_GAS_MONITOR_INPUT_PROTO_NITRATE -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/stimulum_input - name = "stimulum tank input injector" - id = ATMOS_GAS_MONITOR_INPUT_STIMULUM /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/tritium_input name = "tritium tank input injector" id = ATMOS_GAS_MONITOR_INPUT_TRITIUM diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 05b7511f94d..9dc856a3ff2 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -411,18 +411,15 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/miasma_output name = "miasma tank output inlet" id_tag = ATMOS_GAS_MONITOR_OUTPUT_MIASMA -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitryl_output - name = "nitryl tank output inlet" - id_tag = ATMOS_GAS_MONITOR_OUTPUT_NO2 +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrium_output + name = "nitrium tank output inlet" + id_tag = ATMOS_GAS_MONITOR_OUTPUT_NITRIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/pluoxium_output name = "pluoxium tank output inlet" id_tag = ATMOS_GAS_MONITOR_OUTPUT_PLUOXIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/proto_nitrate_output name = "proto-nitrate tank output inlet" id_tag = ATMOS_GAS_MONITOR_OUTPUT_PROTO_NITRATE -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/stimulum_output - name = "stimulum tank output inlet" - id_tag = ATMOS_GAS_MONITOR_OUTPUT_STIMULUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/tritium_output name = "tritium tank output inlet" id_tag = ATMOS_GAS_MONITOR_OUTPUT_TRITIUM diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm index 74c72c16c17..457352b6ab8 100644 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -209,10 +209,10 @@ overlay_color = "#395806" spawn_id = /datum/gas/miasma -/obj/machinery/atmospherics/miner/nitryl - name = "\improper Nitryl Gas Miner" +/obj/machinery/atmospherics/miner/nitrium + name = "\improper Nitrium Gas Miner" overlay_color = "#752b00" - spawn_id = /datum/gas/nitryl + spawn_id = /datum/gas/nitrium /obj/machinery/atmospherics/miner/pluoxium name = "\improper Pluoxium Gas Miner" @@ -224,11 +224,6 @@ overlay_color = "#00571d" spawn_id = /datum/gas/proto_nitrate -/obj/machinery/atmospherics/miner/stimulum - name = "\improper Stimulum Gas Miner" - overlay_color = "#d577dd" - spawn_id = /datum/gas/stimulum - /obj/machinery/atmospherics/miner/tritium name = "\improper Tritium Gas Miner" overlay_color = "#15ff00" diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 450b2983e7c..08ce9444607 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -15,13 +15,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) "co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide, "plasma" = /obj/machinery/portable_atmospherics/canister/plasma, "n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide, - "no2" = /obj/machinery/portable_atmospherics/canister/nitryl, + "nitrium" = /obj/machinery/portable_atmospherics/canister/nitrium, "bz" = /obj/machinery/portable_atmospherics/canister/bz, "air" = /obj/machinery/portable_atmospherics/canister/air, "water_vapor" = /obj/machinery/portable_atmospherics/canister/water_vapor, "tritium" = /obj/machinery/portable_atmospherics/canister/tritium, "hyper-noblium" = /obj/machinery/portable_atmospherics/canister/nob, - "stimulum" = /obj/machinery/portable_atmospherics/canister/stimulum, "pluoxium" = /obj/machinery/portable_atmospherics/canister/pluoxium, "caution" = /obj/machinery/portable_atmospherics/canister, "miasma" = /obj/machinery/portable_atmospherics/canister/miasma, @@ -216,10 +215,10 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#c63e3b#f7d5d3" -/obj/machinery/portable_atmospherics/canister/nitryl - name = "Nitryl canister" - desc = "Nitryl gas. Feels great 'til the acid eats your lungs." - gas_type = /datum/gas/nitryl +/obj/machinery/portable_atmospherics/canister/nitrium + name = "Nitrium canister" + desc = "Nitrium gas. Feels great 'til the acid eats your lungs." + gas_type = /datum/gas/nitrium greyscale_config = /datum/greyscale_config/canister greyscale_colors = "#7b4732" @@ -252,13 +251,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister()) greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#008200#33cc33" -/obj/machinery/portable_atmospherics/canister/stimulum - name = "Stimulum canister" - desc = "Stimulum. High energy gas, high energy people." - gas_type = /datum/gas/stimulum - greyscale_config = /datum/greyscale_config/canister - greyscale_colors = "#9b5d7f" - /obj/machinery/portable_atmospherics/canister/plasma name = "Plasma canister" desc = "Plasma gas. The reason YOU are here. Highly toxic." diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 41282bb26ed..629a8e20290 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -23,7 +23,7 @@ /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, - /datum/gas/nitryl, + /datum/gas/nitrium, /datum/gas/tritium, /datum/gas/hypernoblium, /datum/gas/water_vapor, diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm index da3c8650618..748b63163cb 100644 --- a/code/modules/cargo/bounties/engineering.dm +++ b/code/modules/cargo/bounties/engineering.dm @@ -15,10 +15,10 @@ return FALSE return our_mix.gases[gas_type][MOLES] >= moles_required -/datum/bounty/item/engineering/gas/nitryl_tank - name = "Full Tank of Nitryl" - description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitryl so they can get started. (20 Moles)" - gas_type = /datum/gas/nitryl +/datum/bounty/item/engineering/gas/nitrium_tank + name = "Full Tank of Nitrium" + description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitrium so they can get started. (20 Moles)" + gas_type = /datum/gas/nitrium /datum/bounty/item/engineering/gas/freon_tank name = "Full Tank of Freon" diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index f70e18d6f4d..422082a060f 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -109,7 +109,7 @@ var/canister_gas = canister_mix.gases var/list/gases_to_check = list( /datum/gas/bz, - /datum/gas/stimulum, + /datum/gas/nitrium, /datum/gas/hypernoblium, /datum/gas/miasma, /datum/gas/tritium, diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm index 70232b61914..09dafd7e415 100644 --- a/code/modules/clothing/masks/gas_filter.dm +++ b/code/modules/clothing/masks/gas_filter.dm @@ -35,8 +35,7 @@ ) ///List of gases with medium filter priority var/list/mid_filtering_gases = list( - /datum/gas/nitryl, - /datum/gas/stimulum, + /datum/gas/nitrium, /datum/gas/freon, /datum/gas/hypernoblium, /datum/gas/bz diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index d1ec5282f7b..f5adc77221f 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -246,10 +246,13 @@ else if(bz_partialpressure > 0.01) hallucination += 5 - //NITRYL - if(breath_gases[/datum/gas/nitryl]) - var/nitryl_partialpressure = (breath_gases[/datum/gas/nitryl][MOLES]/breath.total_moles())*breath_pressure - adjustFireLoss(nitryl_partialpressure/4) + //NITRIUM + if(breath_gases[/datum/gas/nitrium]) + var/nitrium_partialpressure = (breath_gases[/datum/gas/nitrium][MOLES]/breath.total_moles())*breath_pressure + if(nitrium_partialpressure > 0.5) + adjustFireLoss(nitrium_partialpressure * 0.15) + if(nitrium_partialpressure > 5) + adjustToxLoss(nitrium_partialpressure * 0.05) //FREON if(breath_gases[/datum/gas/freon]) diff --git a/code/modules/movespeed/modifiers/reagent.dm b/code/modules/movespeed/modifiers/reagent.dm index ac2f3cdd4c9..1d4898e662b 100644 --- a/code/modules/movespeed/modifiers/reagent.dm +++ b/code/modules/movespeed/modifiers/reagent.dm @@ -19,7 +19,7 @@ /datum/movespeed_modifier/reagent/methamphetamine multiplicative_slowdown = -0.65 -/datum/movespeed_modifier/reagent/nitryl +/datum/movespeed_modifier/reagent/nitrium multiplicative_slowdown = -0.65 /datum/movespeed_modifier/reagent/cannabis diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5f4149113d2..3d6d9b1a086 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1388,55 +1388,55 @@ M.set_confusion(min(M.get_confusion() + 2, 5)) ..() -/datum/reagent/stimulum - name = "Stimulum" - description = "An unstable experimental gas that greatly increases the energy of those that inhale it, while dealing increasing toxin damage over time." +/datum/reagent/nitrium_high_metabolization + name = "Nitrosyl plasmide" + description = "A highly reactive byproduct that stops you from sleeping, while dealing increasing toxin damage over time." reagent_state = GAS - metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because stimulum/nitryl/freon/hypernoblium are handled through gas breathing, metabolism must be lower for breathcode to keep up + metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because nitrium/freon/hypernoblium are handled through gas breathing, metabolism must be lower for breathcode to keep up color = "E1A116" taste_description = "sourness" ph = 1.8 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE addiction_types = list(/datum/addiction/stimulants = 14) -/datum/reagent/stimulum/on_mob_metabolize(mob/living/L) - ..() +/datum/reagent/nitrium_high_metabolization/on_mob_metabolize(mob/living/L) + . = ..() ADD_TRAIT(L, TRAIT_STUNIMMUNE, type) ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, type) -/datum/reagent/stimulum/on_mob_end_metabolize(mob/living/L) +/datum/reagent/nitrium_high_metabolization/on_mob_end_metabolize(mob/living/L) REMOVE_TRAIT(L, TRAIT_STUNIMMUNE, type) REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, type) - ..() + return ..() -/datum/reagent/stimulum/on_mob_life(mob/living/carbon/M, delta_time, times_fired) +/datum/reagent/nitrium_high_metabolization/on_mob_life(mob/living/carbon/M, delta_time, times_fired) M.adjustStaminaLoss(-2 * REM * delta_time, 0) M.adjustToxLoss(0.1 * current_cycle * REM * delta_time, 0) // 1 toxin damage per cycle at cycle 10 - ..() + return ..() -/datum/reagent/nitryl - name = "Nitryl" +/datum/reagent/nitrium_low_metabolization + name = "Nitrium" description = "A highly reactive gas that makes you feel faster." reagent_state = GAS - metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because stimulum/nitryl/freon/hypernoblium are handled through gas breathing, metabolism must be lower for breathcode to keep up + metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because nitrium/freon/hypernoblium are handled through gas breathing, metabolism must be lower for breathcode to keep up color = "90560B" taste_description = "burning" ph = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE -/datum/reagent/nitryl/on_mob_metabolize(mob/living/L) - ..() - L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl) +/datum/reagent/nitrium_low_metabolization/on_mob_metabolize(mob/living/L) + . = ..() + L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nitrium) -/datum/reagent/nitryl/on_mob_end_metabolize(mob/living/L) - L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl) - ..() +/datum/reagent/nitrium_low_metabolization/on_mob_end_metabolize(mob/living/L) + L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nitrium) + return ..() /datum/reagent/freon name = "Freon" description = "A powerful heat absorbent." reagent_state = GAS - metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because stimulum/nitryl/freon/hypernoblium are handled through gas breathing, metabolism must be lower for breathcode to keep up + metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because nitrium/freon/hypernoblium are handled through gas breathing, metabolism must be lower for breathcode to keep up color = "90560B" taste_description = "burning" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE @@ -1453,7 +1453,7 @@ name = "Hyper-Noblium" description = "A suppressive gas that stops gas reactions on those who inhale it." reagent_state = GAS - metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because stimulum/nitryl/freon/hyper-nob are handled through gas breathing, metabolism must be lower for breathcode to keep up + metabolization_rate = REAGENTS_METABOLISM * 0.5 // Because nitrium/freon/hyper-nob are handled through gas breathing, metabolism must be lower for breathcode to keep up color = "90560B" taste_description = "searingly cold" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 4533b4b4ce1..049bd168ea5 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -36,7 +36,7 @@ var/SA_sleep_min = 5 //Sleeping agent var/BZ_trip_balls_min = 1 //BZ gas var/BZ_brain_damage_min = 10 //Give people some room to play around without killing the station - var/gas_stimulation_min = 0.002 //Nitryl, Stimulum and Freon + var/gas_stimulation_min = 0.002 //nitrium and Freon ///Minimum amount of healium to make you unconscious for 4 seconds var/healium_para_min = 3 ///Minimum amount of healium to knock you down for good @@ -303,18 +303,20 @@ breath_gases[/datum/gas/tritium][MOLES] -= gas_breathed - // Nitryl - var/nitryl_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitryl][MOLES]) - if (prob(nitryl_pp)) - breather.emote("burp") - if (prob(nitryl_pp) && nitryl_pp>10) - breather.adjustOrganLoss(ORGAN_SLOT_LUNGS, nitryl_pp/2) - to_chat(breather, span_notice("You feel a burning sensation in your chest")) - gas_breathed = breath_gases[/datum/gas/nitryl][MOLES] - if (gas_breathed > gas_stimulation_min) - breather.reagents.add_reagent(/datum/reagent/nitryl,1) + // Nitrium + var/nitrium_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrium][MOLES]) + if (prob(nitrium_pp) && nitrium_pp > 15) + breather.adjustOrganLoss(ORGAN_SLOT_LUNGS, nitrium_pp * 0.1) + to_chat(breather, "You feel a burning sensation in your chest") + gas_breathed = breath_gases[/datum/gas/nitrium][MOLES] + if (nitrium_pp > 5) + var/existing = breather.reagents.get_reagent_amount(/datum/reagent/nitrium_low_metabolization) + breather.reagents.add_reagent(/datum/reagent/nitrium_low_metabolization, max(0, 2 - existing)) + if (nitrium_pp > 10) + var/existing = breather.reagents.get_reagent_amount(/datum/reagent/nitrium_high_metabolization) + breather.reagents.add_reagent(/datum/reagent/nitrium_high_metabolization, max(0, 1 - existing)) - breath_gases[/datum/gas/nitryl][MOLES]-=gas_breathed + breath_gases[/datum/gas/nitrium][MOLES] -= gas_breathed // Freon var/freon_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/freon][MOLES]) @@ -373,13 +375,6 @@ gas_breathed = breath_gases[/datum/gas/halon][MOLES] breath_gases[/datum/gas/halon][MOLES]-=gas_breathed - // Stimulum - gas_breathed = breath_gases[/datum/gas/stimulum][MOLES] - if (gas_breathed > gas_stimulation_min) - var/existing = breather.reagents.get_reagent_amount(/datum/reagent/stimulum) - breather.reagents.add_reagent(/datum/reagent/stimulum,max(0, 1 - existing)) - breath_gases[/datum/gas/stimulum][MOLES]-=gas_breathed - // Hyper-Nob gas_breathed = breath_gases[/datum/gas/hypernoblium][MOLES] if (gas_breathed > gas_stimulation_min) diff --git a/icons/effects/atmospherics.dmi b/icons/effects/atmospherics.dmi index e2f451ca068785f851ea3f2daaeb1989f2a0d389..838fe5e3f6da91f5bbd63e7beecff97c492f3927 100644 GIT binary patch delta 332 zcmV-S0ki($#{uET0gyU>J#T|B5Qb;`D^AI3Ma8657nX{sVo3f1x)u{o1smB%()8DN z$Ur`@LZS#UFg%ZZ@4a{qAFI!N1KBzkJMBDK11T&QFCyAg$u*>qC=u0~wlyC=JR@sJ zVb(S1TbzlgBR(nVx5mBidJU|MujAcAfhS=HO7xtHbN<9w8>Vm$024Cg0 zHRGQ5L8GLSN+vRqN-B9W#2#6@Vuzh|k4viFlQqQ_{kY?8be{7}sBfQ;20P-Q>2*Xj zpe=>hIVFT+9SYl&H!E>Lo>k%zLFKeHVenS`Cmon1IYw}ChVNRp#TNbJ$1ue1(1iKr z6@Rt&Fg#`V(}rI@By!{(T(!pLIc4sgWm_0xhy0AI;t%^D9r(@f64ls*?wq?kXqb%s e3da?w%p6vm46=1D{sEL&h;oN~0XMUD0c&DgIh^AF delta 332 zcmV-S0ki($#{uET0gyU>v2KGf6h&wJ6;H`(Ma8657nX{sVn}`gy%qyj!A7=8ntpu; z1`@CpKoMeKI7fc>UA%>l!)JPekIJXhb8*D5Ez+T+nizov~GVy`<=jP%zs)%r^livgoj+{Eh`ejW8bP7Cl78?}`ZpDrCFvs=o#DIUO;(~=e~i8aettjU zCwuq9b9O&(_+3Ok9q-_(IM&_@E-G`Yl~tJ(R-=8!P4S1_5BL1#i$oRHzAI;u2c;EK eefi_^RAvi@Qv%5`CI5WOhzw;Vu^h8@0c&E{CYhrE diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index ec462c4172984abb3f6cbc6c81a0161aeef1fa95..8859441898c4a785d2cbe54c370d6f9c99291003 100644 GIT binary patch literal 16736 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 literal 16432 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%0DFQ7qshF`$buY|HvVr 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 R_&)&vnrgcDD^;w5{|}-GV}bwx diff --git a/tgstation.dme b/tgstation.dme index b151de9ea9a..62f80c0b60a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1303,6 +1303,7 @@ #include "code\game\objects\items\maintenance_loot.dm" #include "code\game\objects\items\manuals.dm" #include "code\game\objects\items\mop.dm" +#include "code\game\objects\items\nitrium_crystals.dm" #include "code\game\objects\items\paint.dm" #include "code\game\objects\items\paiwire.dm" #include "code\game\objects\items\pet_carrier.dm" diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js index a295d539374..495c04d8a0e 100644 --- a/tgui/packages/tgui/constants.js +++ b/tgui/packages/tgui/constants.js @@ -183,8 +183,8 @@ const GASES = [ }, { 'id': 'no2', - 'name': 'Nitryl', - 'label': 'NO₂', + 'name': 'Nitrium', + 'label': 'Nitrium', 'color': 'brown', }, { @@ -199,12 +199,6 @@ const GASES = [ 'label': 'BZ', 'color': 'mediumpurple', }, - { - 'id': 'stim', - 'name': 'Stimulum', - 'label': 'Stimulum', - 'color': 'darkviolet', - }, { 'id': 'pluox', 'name': 'Pluoxium',