diff --git a/auxmos.dll b/auxmos.dll
index bd4e502f46..9d552554f1 100644
Binary files a/auxmos.dll and b/auxmos.dll differ
diff --git a/auxmos.pdb b/auxmos.pdb
index 778914dcf0..d05689aeb1 100644
Binary files a/auxmos.pdb and b/auxmos.pdb differ
diff --git a/code/__HELPERS/_extools_api.dm b/code/__HELPERS/_extools_api.dm
index 96c4621306..8605c6a975 100644
--- a/code/__HELPERS/_extools_api.dm
+++ b/code/__HELPERS/_extools_api.dm
@@ -10,10 +10,17 @@
GLOBAL_LIST_EMPTY(auxtools_initialized)
#define AUXTOOLS_CHECK(LIB)\
- if (!GLOB.auxtools_initialized[LIB] && fexists(LIB) && findtext(call(LIB,"auxtools_init")(),"SUCCESS"))\
- GLOB.auxtools_initialized[LIB] = TRUE;\
+ if (!GLOB.auxtools_initialized[LIB] && fexists(LIB)) {\
+ var/string = call(LIB,"auxtools_init")();\
+ if(findtext(string, "SUCCESS")) {\
+ GLOB.auxtools_initialized[LIB] = TRUE;\
+ } else {\
+ CRASH(string);\
+ }\
+ }\
#define AUXTOOLS_SHUTDOWN(LIB)\
- if (GLOB.auxtools_initialized[LIB] && fexists(LIB))\
+ if (GLOB.auxtools_initialized[LIB] && fexists(LIB)){\
call(LIB,"auxtools_shutdown")();\
GLOB.auxtools_initialized[LIB] = FALSE;\
+ }\
diff --git a/code/modules/atmospherics/auxgm/breathing_classes.dm b/code/modules/atmospherics/auxgm/breathing_classes.dm
index 7aeb5d82e7..f04f89a419 100644
--- a/code/modules/atmospherics/auxgm/breathing_classes.dm
+++ b/code/modules/atmospherics/auxgm/breathing_classes.dm
@@ -16,12 +16,12 @@
/datum/breathing_class/oxygen
gases = list(
- GAS_O2 = 1
+ GAS_O2 = 1,
GAS_PLUOXIUM = 8,
GAS_CO2 = -0.7, // CO2 isn't actually toxic, just an asphyxiant
)
products = list(
- GAS_CO2 = 1
+ GAS_CO2 = 1,
)
/datum/breathing_class/plasma
diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm
index 7ff7b674e8..113415dd08 100644
--- a/code/modules/atmospherics/auxgm/gas_types.dm
+++ b/code/modules/atmospherics/auxgm/gas_types.dm
@@ -11,7 +11,7 @@
not_enough_alert = list(
alert_category = "not_enough_nitro",
alert_type = /obj/screen/alert/not_enough_nitro
- )
+ ),
too_much_alert = list(
alert_category = "too_much_nitro",
alert_type = /obj/screen/alert/too_much_nitro
@@ -28,13 +28,12 @@
not_enough_alert = list(
alert_category = "not_enough_co2",
alert_type = /obj/screen/alert/not_enough_co2
- )
+ ),
too_much_alert = list(
alert_category = "too_much_co2",
alert_type = /obj/screen/alert/too_much_co2
)
)
- breath_reagent_dangerous = /datum/reagent/co2_toxic
fusion_power = 3
/datum/gas/plasma
@@ -134,13 +133,13 @@
specific_heat = 30
name = "Methane"
breath_results = GAS_METHYL_BROMIDE
- fire_provides = list(GAS_CO2 = 1, GAS_H2O = 2)
+ fire_products = list(GAS_CO2 = 1, GAS_H2O = 2)
fire_burn_rate = 0.5
breath_alert_info = list(
not_enough_alert = list(
alert_category = "not_enough_ch4",
alert_type = /obj/screen/alert/not_enough_ch4
- )
+ ),
too_much_alert = list(
alert_category = "too_much_ch4",
alert_type = /obj/screen/alert/too_much_ch4
@@ -158,13 +157,13 @@
not_enough_alert = list(
alert_category = "not_enough_ch3br",
alert_type = /obj/screen/alert/not_enough_ch3br
- )
+ ),
too_much_alert = list(
alert_category = "too_much_ch3br",
alert_type = /obj/screen/alert/too_much_ch3br
)
)
- fire_provides = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BZ = 0.5)
+ fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BZ = 0.5)
fire_energy_released = FIRE_CARBON_ENERGY_RELEASED
fire_burn_rate = 0.5
fire_temperature = 808 // its autoignition, it apparently doesn't spark readily, so i don't put it lower
diff --git a/code/modules/atmospherics/gasmixtures/auxgm.dm b/code/modules/atmospherics/gasmixtures/auxgm.dm
index 9f489c7384..6c7bc0cc49 100644
--- a/code/modules/atmospherics/gasmixtures/auxgm.dm
+++ b/code/modules/atmospherics/gasmixtures/auxgm.dm
@@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
// greatly prefer just adding a reagent. This is mostly around for legacy reasons.
return null
-/datum/auxgm/add_gas(datum/gas/gas)
+/datum/auxgm/proc/add_gas(datum/gas/gas)
var/g = gas.id
if(g)
datums[g] = gas
@@ -77,7 +77,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
overlays[g] = 0
flags[g] = gas.flags
ids[g] = g
- typepaths[g] = gas_path
+ typepaths[g] = gas.type
fusion_powers[g] = gas.fusion_power
if(gas.breath_alert_info)
@@ -103,10 +103,17 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
_auxtools_register_gas(gas)
+/proc/finalize_gas_refs()
+
/datum/auxgm/New()
for(var/gas_path in subtypesof(/datum/gas))
var/datum/gas/gas = new gas_path
add_gas(gas)
+ for(var/breathing_class_path in subtypesof(/datum/breathing_class))
+ var/datum/breathing_class/class = new breathing_class_path
+ breathing_classes[breathing_class_path] = class
+ finalize_gas_refs()
+
GLOBAL_DATUM_INIT(gas_data, /datum/auxgm, new)
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index 7a6c545a94..b44b645251 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -246,19 +246,34 @@
name = "Combustion"
id = "genericfire"
+/datum/gas_reaction/genericfire/init_reqs()
+ var/lowest_fire_temp = INFINITY
+ var/list/fire_temperatures = GLOB.gas_data.fire_temperatures
+ for(var/gas in fire_temperatures)
+ lowest_fire_temp = min(lowest_fire_temp, fire_temperatures[gas])
+ var/lowest_oxi_temp = INFINITY
+ var/list/oxidation_temperatures = GLOB.gas_data.oxidation_temperatures
+ for(var/gas in oxidation_temperatures)
+ lowest_oxi_temp = min(lowest_oxi_temp, oxidation_temperatures[gas])
+ min_requirements = list(
+ "TEMP" = max(lowest_oxi_temp, lowest_fire_temp),
+ "FIRE_REAGENTS" = MINIMUM_MOLE_COUNT
+ )
+
// no requirements, always runs
// bad idea? maybe
// this is overridden by auxmos but, hey, good idea to have it readable
/datum/gas_reaction/genericfire/react(datum/gas_mixture/air, datum/holder)
var/temperature = air.return_temperature()
- var/list/oxidation_temps = GLOB.gas_data.oxidation_temps
+ var/list/oxidation_temps = GLOB.gas_data.oxidation_temperatures
var/list/oxidation_rates = GLOB.gas_data.oxidation_rates
var/oxidation_power = 0
var/list/burn_results = list()
var/list/fuels = list()
var/list/oxidizers = list()
- var/list/fuel_rates = GLOB.gas_data.fuel_rates
+ var/list/fuel_rates = GLOB.gas_data.fire_burn_rates
+ var/list/fuel_temps = GLOB.gas_data.fire_temperatures
var/total_fuel = 0
var/energy_released = 0
for(var/G in air.get_gases())
@@ -280,7 +295,7 @@
if(oxidation_ratio > 1)
for(var/oxidizer in oxidizers)
oxidizers[oxidizer] /= oxidation_ratio
- else if oxidation_ratio < 1
+ else if(oxidation_ratio < 1)
for(var/fuel in fuels)
fuels[fuel] *= oxidation_ratio
fuels += oxidizers
@@ -295,7 +310,7 @@
for(var/product in fire_products[fuel])
if(!burn_results[product])
burn_results[product] = 0
- burn_results[o] += amt
+ burn_results[product] += amt
var/final_energy = air.thermal_energy() + energy_released
for(var/result in burn_results)
air.adjust_moles(result, burn_results[result])
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 73111fb431..806126e684 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -94,7 +94,7 @@
var/list/TLV = list( // Breathable air.
"pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.8, ONE_ATMOSPHERE* 0.9, ONE_ATMOSPHERE * 1.1, ONE_ATMOSPHERE * 1.2), // kPa
"temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66),
- GAS_O2 = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
+ GAS_O2 = new/datum/tlv(16, 19, 40, 50), // Partial pressure, kpa
GAS_N2 = new/datum/tlv(-1, -1, 1000, 1000),
GAS_CO2 = new/datum/tlv(-1, -1, 5, 10),
GAS_MIASMA = new/datum/tlv(-1, -1, 2, 5),
@@ -106,7 +106,7 @@
GAS_TRITIUM = new/datum/tlv/dangerous,
GAS_STIMULUM = new/datum/tlv(-1, -1, 1000, 1000), // Stimulum has only positive effects
GAS_NITRYL = new/datum/tlv/dangerous,
- GAS_PLUOXIUM = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
+ GAS_PLUOXIUM = new/datum/tlv(-1, -1, 5, 6), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
GAS_METHANE = new/datum/tlv(-1, -1, 3, 6),
GAS_METHYL_BROMIDE = new/datum/tlv/dangerous
)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index aee341f62b..ce0220e08b 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -125,6 +125,7 @@
var/obj/loc_as_obj = loc
loc_as_obj.handle_internal_lifeform(src,0)
+ breath.set_volume(BREATH_VOLUME)
check_breath(breath)
if(breath)
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index b13c2df770..b68a289e85 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -254,8 +254,7 @@
to_chat(H, "You feel resistant to airborne toxins.")
if(locate(/obj/item/organ/lungs) in H.internal_organs)
var/obj/item/organ/lungs/L = H.internal_organs_slot[ORGAN_SLOT_LUNGS]
- L.tox_breath_dam_min = 0
- L.tox_breath_dam_max = 0
+ L.gas_max -= GAS_PLASMA
ADD_TRAIT(H, TRAIT_VIRUSIMMUNE, "dna_vault")
if(VAULT_NOBREATH)
to_chat(H, "Your lungs feel great.")
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 51bf87f717..d75ba6bde7 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -35,7 +35,7 @@
var/safe_damage_type = OXY
var/list/gas_min = list()
var/list/gas_max = list(
- GAS_CO2 = 10, // Yes it's an arbitrary value who cares?
+ GAS_CO2 = 30, // Yes it's an arbitrary value who cares?
GAS_METHYL_BROMIDE = 1,
GAS_PLASMA = MOLES_GAS_VISIBLE
)
@@ -44,7 +44,7 @@
min = MIN_TOXIC_GAS_DAMAGE,
max = MAX_TOXIC_GAS_DAMAGE,
damage_type = OXY
- )
+ ),
GAS_PLASMA = list(
min = MIN_TOXIC_GAS_DAMAGE,
max = MAX_TOXIC_GAS_DAMAGE,
@@ -52,26 +52,11 @@
)
)
- var/light_effect_resistance = 1 // PP at which light snowflake effects happen
- var/heavy_effect_resistance = 5 // PP at which heavy snowflake effects happen
+ var/SA_para_min = 1 //nitrous values
+ var/SA_sleep_min = 5
+ var/BZ_trip_balls_min = 1 //BZ gas
var/gas_stimulation_min = 0.002 //Nitryl and Stimulum
- var/oxy_breath_dam_min = MIN_TOXIC_GAS_DAMAGE
- var/oxy_breath_dam_max = MAX_TOXIC_GAS_DAMAGE
- var/oxy_damage_type = OXY
- var/nitro_breath_dam_min = MIN_TOXIC_GAS_DAMAGE
- var/nitro_breath_dam_max = MAX_TOXIC_GAS_DAMAGE
- var/nitro_damage_type = OXY
- var/co2_breath_dam_min = MIN_TOXIC_GAS_DAMAGE
- var/co2_breath_dam_max = MAX_TOXIC_GAS_DAMAGE
- var/co2_damage_type = OXY
- var/tox_breath_dam_min = MIN_TOXIC_GAS_DAMAGE
- var/tox_breath_dam_max = MAX_TOXIC_GAS_DAMAGE
- var/tox_damage_type = TOX
- var/methane_breath_dam_min = MIN_TOXIC_GAS_DAMAGE
- var/methane_breath_dam_max = MAX_TOXIC_GAS_DAMAGE
- var/methane_damage_type = OXY
-
var/cold_message = "your face freezing and an icicle forming"
var/cold_level_1_threshold = 260
var/cold_level_2_threshold = 200
@@ -93,6 +78,10 @@
var/crit_stabilizing_reagent = /datum/reagent/medicine/epinephrine
/obj/item/organ/lungs/New()
+ . = ..()
+ populate_gas_info()
+
+/obj/item/organ/lungs/proc/populate_gas_info()
gas_min[breathing_class] = safe_breath_min
gas_max[breathing_class] = safe_breath_max
gas_damage[breathing_class] = list(
@@ -146,11 +135,23 @@
H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
H.failed_last_breath = TRUE
- var/list/alert = GLOB.gas_data.breath_alert_info[breathing_class]["not_enough_alert"]
- H.throw_alert(alert["alert_category"], alert["alert_type"])
+ var/alert_category
+ var/alert_type
+ if(ispath(breathing_class))
+ var/datum/breathing_class/class = GLOB.gas_data.breathing_classes[breathing_class]
+ alert_category = class.low_alert_category
+ alert_type = class.low_alert_datum
+ else
+ var/list/breath_alert_info = GLOB.gas_data.breath_alert_info
+ if(breathing_class in breath_alert_info)
+ var/list/alert = breath_alert_info[breathing_class]["not_enough_alert"]
+ alert_category = alert["alert_category"]
+ alert_type = alert["alert_type"]
+ if(alert_category)
+ H.throw_alert(alert_category, alert_type)
return FALSE
- #define PP_MOLES(X) ((X / total_moles) * pressure))
+ #define PP_MOLES(X) ((X / total_moles) * pressure)
#define PP(air, gas) PP_MOLES(air.get_moles(gas))
@@ -160,19 +161,20 @@
var/total_moles = breath.total_moles()
var/list/breath_alert_info = GLOB.gas_data.breath_alert_info
var/list/breath_results = GLOB.gas_data.breath_results
+ var/list/breathing_classes = GLOB.gas_data.breathing_classes
var/list/mole_adjustments = list()
for(var/entry in gas_min)
var/required_pp = 0
var/required_moles = 0
var/safe_min = gas_min[entry]
- var/datum/breathing_class/breathing_class = entry
- var/alert_category = ""
+ var/alert_category = null
var/alert_type = null
- if(istype(breathing_class)) // breathing classes are numbers while gases are strings so internally this is how we do it
- var/list/gases = initial(breathing_class.gases)
- var/list/products = initial(breathing_class.products)
- alert_category = initial(breathing_class.low_alert_category)
- alert_type = initial(breathing_class.low_alert_type)
+ if(ispath(entry))
+ var/datum/breathing_class/class = breathing_classes[entry]
+ var/list/gases = class.gases
+ var/list/products = class.products
+ alert_category = class.low_alert_category
+ alert_type = class.low_alert_datum
for(var/gas in gases)
var/moles = breath.get_moles(gas)
var/multiplier = gases[gas]
@@ -185,65 +187,71 @@
else
required_moles = breath.get_moles(entry)
required_pp = PP_MOLES(required_moles)
- var/list/alert = breath_alert_info[entry]["not_enough_alert"]
- alert_category = alert["alert_category"]
- alert_type = alert["alert_type"]
+ if(entry in breath_alert_info)
+ var/list/alert = breath_alert_info[entry]["not_enough_alert"]
+ alert_category = alert["alert_category"]
+ alert_type = alert["alert_type"]
mole_adjustments[entry] = -required_moles
mole_adjustments[breath_results[entry]] = required_moles
if(required_pp < safe_min)
var/multiplier = handle_too_little_breath(H, required_pp, safe_min, required_moles) / required_moles
- for(var/entry in mole_adjustments)
- mole_adjustments[entry] *= multiplier
- H.throw_alert(alert_category, alert_type)
+ for(var/adjustment in mole_adjustments)
+ mole_adjustments[adjustment] *= multiplier
+ if(alert_category)
+ H.throw_alert(alert_category, alert_type)
else
H.failed_last_breath = FALSE
if(H.health >= H.crit_threshold)
H.adjustOxyLoss(-breathModifier)
- H.clear_alert(alert_category)
+ if(alert_category)
+ H.clear_alert(alert_category)
var/list/danger_reagents = GLOB.gas_data.breath_reagents_dangerous
for(var/entry in gas_max)
var/found_pp = 0
var/datum/breathing_class/breathing_class = entry
var/datum/reagent/danger_reagent = null
- var/alert_category = ""
+ var/alert_category = null
var/alert_type = null
- if(istype(breathing_class))
- var/list/gases = initial(breathing_class.gases)
- alert_category = initial(breathing_class.high_alert_category)
- alert_type = initial(breathing_class.high_alert_type)
- danger_reagent = initial(breathing_class.danger_reagent)
+ if(ispath(breathing_class))
+ breathing_class = breathing_classes[breathing_class]
+ var/list/gases = breathing_class.gases
+ alert_category = breathing_class.high_alert_category
+ alert_type = breathing_class.high_alert_datum
+ danger_reagent = breathing_class.danger_reagent
for(var/gas in gases)
- found_pp +== PP(breath, breathing_class)
+ found_pp += PP(breath, gas)
else
danger_reagent = danger_reagents[entry]
- var/list/alert = breath_alert_info[entry]["too_much_alert"]
- alert_category = alert["alert_category"]
- alert_type = alert["alert_type"]
+ if(entry in breath_alert_info)
+ var/list/alert = breath_alert_info[entry]["too_much_alert"]
+ alert_category = alert["alert_category"]
+ alert_type = alert["alert_type"]
found_pp = PP(breath, entry)
if(found_pp > gas_max[entry])
if(istype(danger_reagent))
H.reagents.add_reagent(danger_reagent,1)
- if(gas_flags[gas] & GAS_FLAG_BREATH_PROC)
- gas_datums[gas].breath(PP_MOLES(moles), light_effect_resistance, heavy_effect_resistance, moles, H, src)
var/list/damage_info = gas_damage[entry]
var/dam = found_pp / gas_max[entry] * 10
- H.apply_damage_type(clamp(ratio, damage_info["min"], damage_info["max"]), damage_info["damage_type"])
+ H.apply_damage_type(clamp(dam, damage_info["min"], damage_info["max"]), damage_info["damage_type"])
+ if(alert_category && alert_type)
+ H.throw_alert(alert_category, alert_type)
+ else if(alert_category)
+ H.clear_alert(alert_category)
var/list/breath_reagents = GLOB.gas_data.breath_reagents
- var/list/gas_flags = GLOB.gas_data.flags
- var/list/gas_datums = GLOB.gas_data.datums
for(var/gas in breath.get_gases())
if(gas in breath_reagents)
var/datum/reagent/R = breath_reagents[gas]
H.reagents.add_reagent(R, PP(breath,gas))
mole_adjustments[gas] = (gas in mole_adjustments) ? mole_adjustments[gas] - breath.get_moles(gas) : -breath.get_moles(gas)
- breath.adjust_from_list(mole_adjustments)
+ for(var/gas in mole_adjustments)
+ breath.adjust_moles(gas, mole_adjustments[gas])
if(breath) // If there's some other shit in the air lets deal with it here.
// N2O
- var/SA_pp = breath.get_breath_partial_pressure(breath.get_moles(GAS_NITROUS))
+ var/SA_pp = PP(breath, GAS_NITROUS)
if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
H.Unconscious(60) // 60 gives them one second to wake up and run away a bit!
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
@@ -257,7 +265,7 @@
// BZ
- var/bz_pp = breath.get_breath_partial_pressure(breath.get_moles(GAS_BZ))
+ var/bz_pp = PP(breath, GAS_BZ)
if(bz_pp > BZ_trip_balls_min)
H.hallucination += 10
H.reagents.add_reagent(/datum/reagent/bz_metabolites,5)
@@ -269,7 +277,7 @@
H.reagents.add_reagent(/datum/reagent/bz_metabolites,1)
// Nitryl
- var/nitryl_pp = breath.get_breath_partial_pressure(breath.get_moles(GAS_NITRYL))
+ var/nitryl_pp = PP(breath,GAS_NITRYL)
if (prob(nitryl_pp))
to_chat(H, "Your mouth feels like it's burning!")
if (nitryl_pp >40)
@@ -287,7 +295,7 @@
breath.adjust_moles(GAS_NITRYL, -gas_breathed)
// Stimulum
- gas_breathed = breath.get_moles(GAS_STIMULUM)
+ gas_breathed = PP(breath,GAS_STIMULUM)
if (gas_breathed > gas_stimulation_min)
var/existing = H.reagents.get_reagent_amount(/datum/reagent/stimulum)
H.reagents.add_reagent(/datum/reagent/stimulum, max(0, 5 - existing))
@@ -295,7 +303,7 @@
// Miasma
if (breath.get_moles(GAS_MIASMA))
- var/miasma_pp = breath.get_breath_partial_pressure(breath.get_moles(GAS_MIASMA))
+ var/miasma_pp = PP(breath,GAS_MIASMA)
if(miasma_pp > MINIMUM_MOLES_DELTA_TO_MOVE)
//Miasma sickness
@@ -426,13 +434,13 @@
name = "plasma filter"
desc = "A spongy rib-shaped mass for filtering plasma from the air."
icon_state = "lungs-plasma"
-
- safe_oxygen_min = 0 //We don't breath this
- safe_oxygen_max = 0 // Like, at all.
- safe_toxins_min = 16 //We breath THIS!
- safe_toxins_max = 0
+ breathing_class = BREATH_PLASMA
maxHealth = INFINITY//I don't understand how plamamen work, so I'm not going to try t give them special lungs atm
+/obj/item/organ/lungs/plasmaman/populate_gas_info()
+ ..()
+ gas_max -= GAS_PLASMA
+
/obj/item/organ/lungs/cybernetic
name = "basic cybernetic lungs"
desc = "A basic cybernetic version of the lungs found in traditional humanoid entities."
@@ -447,8 +455,8 @@
desc = "A cybernetic version of the lungs found in traditional humanoid entities. Allows for greater intakes of oxygen than organic lungs, requiring slightly less pressure."
icon_state = "lungs-c-u"
maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- safe_oxygen_min = 13
- safe_oxygen_max = 100
+ safe_breath_min = 13
+ safe_breath_max = 100
emp_vulnerability = 2
/obj/item/organ/lungs/cybernetic/tier3
@@ -456,10 +464,13 @@
desc = "A more advanced version of the stock cybernetic lungs. Features the ability to filter out various airbourne toxins and carbon dioxide even at heavy levels."
icon_state = "lungs-c-u2"
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
- safe_oxygen_min = 4 //You could literally be breathing the thinnest amount of oxygen and be fine
- safe_oxygen_max = 250 //Or be in an enriched oxygen room for that matter
- safe_toxins_max = 30
- safe_co2_max = 30
+ safe_breath_min = 4 //You could literally be breathing the thinnest amount of oxygen and be fine
+ safe_breath_max = 250 //Or be in an enriched oxygen room for that matter
+ gas_max = list(
+ GAS_PLASMA = 30,
+ GAS_CO2 = 30,
+ GAS_METHYL_BROMIDE = 10
+ )
SA_para_min = 30
SA_sleep_min = 50
BZ_trip_balls_min = 30
@@ -484,9 +495,8 @@
name = "ash lungs"
desc = "blackened lungs identical from specimens recovered from lavaland, unsuited to higher air pressures."
icon_state = "lungs-ll"
- safe_oxygen_min = 3 //able to handle much thinner oxygen, something something ash storm adaptation
- safe_oxygen_max = 18 // Air standard is 22kpA of O2, LL is 14kpA
- safe_nitro_max = 28 // Air standard is 82kpA of N2, LL is 23kpA
+ safe_breath_min = 3 //able to handle much thinner oxygen, something something ash storm adaptation
+ safe_breath_max = 18 // Air standards is 22kPa of O2, LL is 14kPa
cold_level_1_threshold = 280 // Ash Lizards can't take the cold very well, station air is only just warm enough
cold_level_2_threshold = 240
@@ -495,23 +505,31 @@
heat_level_1_threshold = 400 // better adapted for heat, obv. Lavaland standard is 300
heat_level_2_threshold = 600 // up 200 from level 1, 1000 is silly but w/e for level 3
+/obj/item/organ/lungs/ashwalker/populate_gas_info()
+ ..()
+ gas_max[GAS_N2] = 28
+
/obj/item/organ/lungs/slime
name = "vacuole"
icon_state = "lungs-s"
desc = "A large organelle designed to store oxygen and other important gasses."
- safe_toxins_max = 0 //We breathe this to gain POWER.
-
cold_level_1_threshold = 285 // Remember when slimes used to be succeptable to cold? Well....
cold_level_2_threshold = 260
cold_level_3_threshold = 230
maxHealth = 250
+/obj/item/organ/lungs/ashwalker/populate_gas_info()
+ ..()
+ gas_max -= GAS_PLASMA
+
/obj/item/organ/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
. = ..()
if (breath)
- var/plasma_pp = breath.get_breath_partial_pressure(breath.get_moles(GAS_PLASMA))
+ var/total_moles = breath.total_moles()
+ var/pressure = breath.return_pressure()
+ var/plasma_pp = PP(breath, GAS_PLASMA)
owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
/obj/item/organ/lungs/yamerol
@@ -524,3 +542,6 @@
. = ..()
if(.)
applyOrganDamage(2) //Yamerol lungs are temporary
+
+#undef PP
+#undef PP_MOLES