mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Merge pull request #6050 from mwerezak/breathing
Simplifies handling of inhale_pp
This commit is contained in:
@@ -437,7 +437,7 @@
|
|||||||
|
|
||||||
var/safe_pressure_min = 16 // Minimum safe partial pressure of breathable gas in kPa
|
var/safe_pressure_min = 16 // Minimum safe partial pressure of breathable gas in kPa
|
||||||
//var/safe_pressure_max = 140 // Maximum safe partial pressure of breathable gas in kPa (Not used for now)
|
//var/safe_pressure_max = 140 // Maximum safe partial pressure of breathable gas in kPa (Not used for now)
|
||||||
var/safe_exhaled_max = 10 // Yes it's an arbitrary value who cares?
|
var/safe_exhaled_max = 10
|
||||||
var/safe_toxins_max = 0.005
|
var/safe_toxins_max = 0.005
|
||||||
var/SA_para_min = 1
|
var/SA_para_min = 1
|
||||||
var/SA_sleep_min = 5
|
var/SA_sleep_min = 5
|
||||||
@@ -448,7 +448,6 @@
|
|||||||
var/inhaling
|
var/inhaling
|
||||||
var/poison
|
var/poison
|
||||||
var/exhaling
|
var/exhaling
|
||||||
var/no_exhale
|
|
||||||
|
|
||||||
var/breath_type
|
var/breath_type
|
||||||
var/poison_type
|
var/poison_type
|
||||||
@@ -459,21 +458,21 @@
|
|||||||
|
|
||||||
if(species.breath_type)
|
if(species.breath_type)
|
||||||
breath_type = species.breath_type
|
breath_type = species.breath_type
|
||||||
inhaling = breath.gas[breath_type]
|
|
||||||
else
|
else
|
||||||
inhaling = "oxygen"
|
breath_type = "oxygen"
|
||||||
|
inhaling = breath.gas[breath_type]
|
||||||
|
|
||||||
if(species.poison_type)
|
if(species.poison_type)
|
||||||
poison_type = species.poison_type
|
poison_type = species.poison_type
|
||||||
poison = breath.gas[poison_type]
|
|
||||||
else
|
else
|
||||||
poison = "phoron"
|
poison_type = "phoron"
|
||||||
|
poison = breath.gas[poison_type]
|
||||||
|
|
||||||
if(species.exhale_type)
|
if(species.exhale_type)
|
||||||
exhale_type = species.exhale_type
|
exhale_type = species.exhale_type
|
||||||
exhaling = breath.gas[exhale_type]
|
exhaling = breath.gas[exhale_type]
|
||||||
else
|
else
|
||||||
no_exhale = 1
|
exhaling = 0
|
||||||
|
|
||||||
var/inhale_pp = (inhaling/breath.total_moles)*breath_pressure
|
var/inhale_pp = (inhaling/breath.total_moles)*breath_pressure
|
||||||
var/toxins_pp = (poison/breath.total_moles)*breath_pressure
|
var/toxins_pp = (poison/breath.total_moles)*breath_pressure
|
||||||
@@ -483,31 +482,23 @@
|
|||||||
if(inhale_pp < safe_pressure_min)
|
if(inhale_pp < safe_pressure_min)
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
spawn(0) emote("gasp")
|
spawn(0) emote("gasp")
|
||||||
if(inhale_pp > 0)
|
|
||||||
var/ratio = inhale_pp/safe_pressure_min
|
var/ratio = inhale_pp/safe_pressure_min
|
||||||
|
|
||||||
// Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!)
|
// Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!)
|
||||||
// The hell? By definition ratio > 1, and HUMAN_MAX_OXYLOSS = 1... why do we even have this?
|
adjustOxyLoss(max(HUMAN_MAX_OXYLOSS*(1-ratio), 0))
|
||||||
adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS))
|
|
||||||
failed_inhale = 1
|
|
||||||
inhaled_gas_used = inhaling*ratio/6
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
|
||||||
failed_inhale = 1
|
failed_inhale = 1
|
||||||
|
|
||||||
oxygen_alert = max(oxygen_alert, 1)
|
oxygen_alert = max(oxygen_alert, 1)
|
||||||
|
|
||||||
else
|
else
|
||||||
// We're in safe limits
|
// We're in safe limits
|
||||||
inhaled_gas_used = inhaling/6
|
|
||||||
oxygen_alert = 0
|
oxygen_alert = 0
|
||||||
|
|
||||||
breath.adjust_gas(breath_type, -inhaled_gas_used)
|
inhaled_gas_used = inhaling/6
|
||||||
|
|
||||||
if(!no_exhale)
|
breath.adjust_gas(breath_type, -inhaled_gas_used, update = 0) //update afterwards
|
||||||
breath.adjust_gas(exhale_type, inhaled_gas_used)
|
|
||||||
|
if(exhale_type)
|
||||||
|
breath.adjust_gas_temp(exhale_type, inhaled_gas_used, bodytemperature, update = 0) //update afterwards
|
||||||
|
|
||||||
// Too much exhaled gas in the air
|
// Too much exhaled gas in the air
|
||||||
if(exhaled_pp > safe_exhaled_max)
|
if(exhaled_pp > safe_exhaled_max)
|
||||||
@@ -546,12 +537,11 @@
|
|||||||
var/ratio = (poison/safe_toxins_max) * 10
|
var/ratio = (poison/safe_toxins_max) * 10
|
||||||
if(reagents)
|
if(reagents)
|
||||||
reagents.add_reagent("toxin", Clamp(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
|
reagents.add_reagent("toxin", Clamp(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
|
||||||
|
breath.adjust_gas(poison_type, -poison/6, update = 0) //update after
|
||||||
phoron_alert = max(phoron_alert, 1)
|
phoron_alert = max(phoron_alert, 1)
|
||||||
else
|
else
|
||||||
phoron_alert = 0
|
phoron_alert = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// If there's some other shit in the air lets deal with it here.
|
// If there's some other shit in the air lets deal with it here.
|
||||||
if(breath.gas["sleeping_agent"])
|
if(breath.gas["sleeping_agent"])
|
||||||
var/SA_pp = (breath.gas["sleeping_agent"] / breath.total_moles) * breath_pressure
|
var/SA_pp = (breath.gas["sleeping_agent"] / breath.total_moles) * breath_pressure
|
||||||
@@ -570,7 +560,7 @@
|
|||||||
else if(SA_pp > 0.15)
|
else if(SA_pp > 0.15)
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
spawn(0) emote(pick("giggle", "laugh"))
|
spawn(0) emote(pick("giggle", "laugh"))
|
||||||
breath.adjust_gas("sleeping_agent", -breath.gas["sleeping_agent"])
|
breath.adjust_gas("sleeping_agent", -breath.gas["sleeping_agent"]/6, update = 0) //update after
|
||||||
|
|
||||||
// Were we able to breathe?
|
// Were we able to breathe?
|
||||||
if (failed_inhale || failed_exhale)
|
if (failed_inhale || failed_exhale)
|
||||||
@@ -582,9 +572,6 @@
|
|||||||
// Hot air hurts :(
|
// Hot air hurts :(
|
||||||
if( (breath.temperature < species.cold_level_1 || breath.temperature > species.heat_level_1) && !(COLD_RESISTANCE in mutations))
|
if( (breath.temperature < species.cold_level_1 || breath.temperature > species.heat_level_1) && !(COLD_RESISTANCE in mutations))
|
||||||
|
|
||||||
if(status_flags & GODMODE)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
if(breath.temperature < species.cold_level_1)
|
if(breath.temperature < species.cold_level_1)
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
src << "<span class='danger'>You feel your face freezing and icicles forming in your lungs!</span>"
|
src << "<span class='danger'>You feel your face freezing and icicles forming in your lungs!</span>"
|
||||||
@@ -626,6 +613,9 @@
|
|||||||
if (temp_adj < BODYTEMP_COOLING_MAX) temp_adj = BODYTEMP_COOLING_MAX
|
if (temp_adj < BODYTEMP_COOLING_MAX) temp_adj = BODYTEMP_COOLING_MAX
|
||||||
//world << "Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]"
|
//world << "Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]"
|
||||||
bodytemperature += temp_adj
|
bodytemperature += temp_adj
|
||||||
|
|
||||||
|
|
||||||
|
breath.update_values()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
proc/handle_environment(datum/gas_mixture/environment)
|
proc/handle_environment(datum/gas_mixture/environment)
|
||||||
|
|||||||
Reference in New Issue
Block a user