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
This commit is contained in:
Ghilker
2021-11-17 10:56:19 +01:00
committed by GitHub
parent 016bc1b72f
commit ba8dbfb591
30 changed files with 182 additions and 265 deletions
@@ -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
@@ -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)
@@ -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,
@@ -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
@@ -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
@@ -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)
@@ -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
@@ -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)
@@ -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
@@ -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
@@ -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"
@@ -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."
@@ -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,
+4 -4
View File
@@ -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"
+1 -1
View File
@@ -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,
+1 -2
View File
@@ -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
+7 -4
View File
@@ -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])
+1 -1
View File
@@ -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
@@ -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
+14 -19
View File
@@ -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, "<span class='notice'>You feel a burning sensation in your chest</span>")
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)