Push for Neko, probably doesn't compile atm.

This commit is contained in:
Fermi
2019-05-17 16:23:34 +01:00
parent 538c6e98ac
commit fa5531285a
8 changed files with 103 additions and 26 deletions
+27 -11
View File
@@ -1,4 +1,4 @@
im
/proc/build_chemical_reagent_list()
//Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
@@ -484,6 +484,7 @@
return 0
else
//reactedVol = FermiReact(selected_reaction, chem_temp, pH, multiplier, reactedVol, targetVol, cached_required_reagents, cached_results)
selected_reaction.on_reaction(src, multiplier)
START_PROCESSING(SSprocessing, src)
message_admins("FermiChem processing started")
fermiIsReacting = TRUE
@@ -558,8 +559,8 @@
targetVol = 0
handle_reactions()
update_total()
C.on_reaction(src, multiplier, special_react_result)
C.fermiFinish(src, multiplier)
//C.on_reaction(src, multiplier, special_react_result)
return
for(var/P in cached_results)
targetVol = cached_results[P]*multiplier
@@ -581,7 +582,8 @@
targetVol = 0
handle_reactions()
update_total()
C.on_reaction(src, multiplier, special_react_result)
C.fermiFinish(src, multiplier)
//C.on_reaction(src, multiplier, special_react_result)
return
else
STOP_PROCESSING(SSprocessing, src)
@@ -591,7 +593,8 @@
targetVol = 0
handle_reactions()
update_total()
C.on_reaction(src, multiplier, special_react_result)
C.fermiFinish(src, multiplier)
//C.on_reaction(src, multiplier, special_react_result)
return
//handle_reactions()
@@ -613,13 +616,16 @@
if (chem_temp > C.ExplodeTemp)
//go to explode proc
message_admins("temperature is over limit: [C.ExplodeTemp] Current temperature: [chem_temp]")
FermiExplode()
C.FermiExplode(src, (reactedVol+targetVol), chem_temp, pH)
if (pH > 14 || pH < 0)
if (pH > 14)
pH = 14
else (pH < 0 || )
pH = 0
//Create chemical sludge eventually(for now just destroy the beaker I guess?)
//TODO Strong acids eat glass, make it so you NEED plastic beakers for superacids(for some reactions)
message_admins("pH is lover limit, cur pH: [pH]")
FermiExplode()
//For now, purity is handled elsewhere
@@ -630,14 +636,14 @@
deltapH = 0
return//If outside pH range, no reaction
else
deltapH = (((pH - (C.OptimalpHMin - C.ReactpHLim))**C.CurveSharppH)/(C.ReactpHLim**C.CurveSharppH))
deltapH = (((pH - (C.OptimalpHMin - C.ReactpHLim))**C.CurveSharppH)/((C.ReactpHLim**C.CurveSharppH))
//Upper range
else if (pH > C.OptimalpHMin)
if (pH > (C.OptimalpHMin + C.ReactpHLim))
deltapH = 0
return //If outside pH range, no reaction
else
deltapH = ((C.ReactpHLim -(pH - (C.OptimalpHMax + C.ReactpHLim))+C.ReactpHLim)/(C.ReactpHLim**C.CurveSharppH))
deltapH = (((pH - (C.OptimalpHMax + C.ReactpHLim))**C.CurveSharppH)/(C.ReactpHLim**C.CurveSharppH))
//Within mid range
else if (pH >= C.OptimalpHMin && pH <= C.OptimalpHMax)
deltapH = 1
@@ -650,7 +656,7 @@
//Calculate DeltaT (Deviation of T from optimal)
if (chem_temp < C.OptimalTempMax && chem_temp >= C.OptimalTempMin)
deltaT = (((C.OptimalTempMin - chem_temp)**C.CurveSharpT)/((C.OptimalTempMax - C.OptimalTempMin)**C.CurveSharpT))
deltaT = (((chem_temp - C.OptimalTempMin)**C.CurveSharpT)/((C.OptimalTempMax - C.OptimalTempMin)**C.CurveSharpT))
else if (chem_temp >= C.OptimalTempMax)
deltaT = 1
else
@@ -692,6 +698,7 @@
SSblackbox.record_feedback("tally", "chemical_reaction", cached_results[P]*stepChemAmmount, P)//log
add_reagent(P, cached_results[P]*stepChemAmmount, null, chem_temp, purity)//add reagent function!! I THINK I can do this:
C.FermiCreate(src)
message_admins("purity: [purity], purity of beaker")
message_admins("Temp before change: [chem_temp], pH after change: [pH]")
//Apply pH changes and thermal output of reaction to beaker
@@ -809,6 +816,14 @@
WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
return FALSE
if (D.id == "water") //Do like an otter, add acid to water.
(if pH <= 2)
var/datum/effect_system/smoke_spread/chem/smoke_machine/s = new
s.set_up(reagents, totalVol, pH*10, src)
s.start()
remove_any(amount/10)
if(!pH)
other_pH = D.pH
@@ -872,6 +887,7 @@
if(istype(D, /datum/reagent/fermi))//Is this a fermichem?
var/datum/reagent/fermi/FermiTime = D //It's Fermi time!
FermiTime.fermiCreate(R.holder) //Seriously what is "data" ????
//This is how I keep myself sane.
+2 -1
View File
@@ -131,7 +131,8 @@
rs += "[R.name], [R.volume]"
return rs.Join(" | ")
/* MOVED TO CHEMICAL REACTION
//Handler for explosion reaction
/datum/reagents/proc/FermiExplode(turf/T, obj/O, mob/living/M, volume)
return
*/
@@ -1108,6 +1108,7 @@
color = "#C8A5DC" // rgb: 200, 165, 220
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "sourness"
pH = 11.9
/datum/reagent/cryptobiolin/on_mob_life(mob/living/carbon/M)
M.Dizzy(1)
@@ -1514,8 +1515,8 @@
description = "An aromatic ring of carbon with a hydroxyl group. A useful precursor to some medicines, but has no healing properties on its own."
reagent_state = LIQUID
color = "#C8A5DC"
taste_description = "acid"
pH = 5
taste_description = "sweet and tarry" //Again, not a strong acid.
pH = 5.5
/datum/reagent/ash
name = "Ash"
@@ -1532,7 +1533,7 @@
description = "A slick, slightly carcinogenic liquid. Has a multitude of mundane uses in everyday life."
reagent_state = LIQUID
color = "#C8A5DC"
taste_description = "acid"
taste_description = "solvent"//It's neutral though..?
/datum/reagent/colorful_reagent
name = "Colorful Reagent"
@@ -1630,7 +1631,8 @@
description = "Also known as sodium hydroxide. As a profession making this is somewhat underwhelming."
reagent_state = LIQUID
color = "#FFFFD6" // very very light yellow
taste_description = "acid"
taste_description = "alkali" //who put ACID for NaOH ????
pH = 13
/datum/reagent/drying_agent
name = "Drying agent"
+43 -4
View File
@@ -54,6 +54,36 @@
var/crit_stabilizing_reagent = "epinephrine"
//health
var/health = 500
var/damage = 0
//TODO: lung health affects lung function
/obj/item/organ/tongue/proc/adjustLungLoss(mob/living/carbon/M, damage_mod)
if (maxHealth == "plasma")
return
if(damage+damage_mod < 0)
damage = 0
return
damage += damage_mod
if ((damage / maxHealth) > 1)
to_chat(M, "<span class='userdanger'>You feel your lungs collapse within your chest as you gasp for air, unable to inflate them anymore!</span>")
M.emote("cough")
qdel(src)
else if ((damage / maxHealth) > 0.75)
to_chat(M, "<span class='warning'>It's getting really hard to breathe!!</span>")
M.emote("gasp")
H.Dizzy(3)
else if ((damage / maxHealth) > 0.5)
H.Dizzy(2)
to_chat(M, "<span class='notice'>Your chest is really starting to hurt.</span>")
M.emote("cough")
H.Dizzy(1)
else if ((damage / maxHealth) > 0.2)
to_chat(M, "<span class='notice'>You feel an ache within your chest.</span>")
M.emote("cough")
/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
if((H.status_flags & GODMODE))
@@ -126,7 +156,7 @@
else
H.failed_last_breath = FALSE
if(H.health >= H.crit_threshold)
H.adjustOxyLoss(-5)
H.adjustOxyLoss(-5*((damage/health)/2)) //More damaged lungs = slower oxy rate up to a factor of half
gas_breathed = breath_gases[/datum/gas/oxygen][MOLES]
H.clear_alert("not_enough_oxy")
@@ -155,7 +185,7 @@
else
H.failed_last_breath = FALSE
if(H.health >= H.crit_threshold)
H.adjustOxyLoss(-5)
H.adjustOxyLoss(-5*((damage/health)/2))
gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES]
H.clear_alert("nitro")
@@ -192,7 +222,7 @@
else
H.failed_last_breath = FALSE
if(H.health >= H.crit_threshold)
H.adjustOxyLoss(-5)
H.adjustOxyLoss(-5*((damage/health)/2))
gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES]
H.clear_alert("not_enough_co2")
@@ -222,7 +252,7 @@
else
H.failed_last_breath = FALSE
if(H.health >= H.crit_threshold)
H.adjustOxyLoss(-5)
H.adjustOxyLoss(-5*((damage/health)/2))
gas_breathed = breath_gases[/datum/gas/plasma][MOLES]
H.clear_alert("not_enough_tox")
@@ -372,9 +402,12 @@
var/cold_modifier = H.dna.species.coldmod
if(breath_temperature < cold_level_3_threshold)
H.apply_damage_type(cold_level_3_damage*cold_modifier, cold_damage_type)
adjustLungLoss(cold_level_3_damage*cold_modifier)
if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold)
H.apply_damage_type(cold_level_2_damage*cold_modifier, cold_damage_type)
adjustLungLoss(cold_level_2_damage*cold_modifier)
if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold)
adjustLungLoss(cold_level_1_damage*cold_modifier)
H.apply_damage_type(cold_level_1_damage*cold_modifier, cold_damage_type)
if(breath_temperature < cold_level_1_threshold)
if(prob(20))
@@ -384,10 +417,13 @@
var/heat_modifier = H.dna.species.heatmod
if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold)
H.apply_damage_type(heat_level_1_damage*heat_modifier, heat_damage_type)
adjustLungLoss(cold_level_1_damage*heat_modifier)
if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold)
H.apply_damage_type(heat_level_2_damage*heat_modifier, heat_damage_type)
adjustLungLoss(cold_level_1_damage*heat_modifier)
if(breath_temperature > heat_level_3_threshold)
H.apply_damage_type(heat_level_3_damage*heat_modifier, heat_damage_type)
adjustLungLoss(cold_level_1_damage*heat_modifier)
if(breath_temperature > heat_level_1_threshold)
if(prob(20))
to_chat(H, "<span class='warning'>You feel [hot_message] in your [name]!</span>")
@@ -406,12 +442,14 @@
safe_oxygen_max = 0 // Like, at all.
safe_toxins_min = 16 //We breath THIS!
safe_toxins_max = 0
health = "plasma"//I don't understand how plamamen work, so I'm not going to try t give them special lungs atm
/obj/item/organ/lungs/cybernetic
name = "cybernetic lungs"
desc = "A cybernetic version of the lungs found in traditional humanoid entities. It functions the same as an organic lung and is merely meant as a replacement."
icon_state = "lungs-c"
synthetic = TRUE
health = 600
/obj/item/organ/lungs/cybernetic/emp_act()
. = ..()
@@ -431,6 +469,7 @@
cold_level_1_threshold = 200
cold_level_2_threshold = 140
cold_level_3_threshold = 100
health = 750
/obj/item/organ/lungs/ashwalker
name = "ash lungs"
+3
View File
@@ -41,6 +41,9 @@
M.apply_damage(damage_mod, BURN, target)
to_chat(M, "<span class='userdanger'>The drink burns your skull! Oof, your bones!</span>")
return
if(damage+damage_mod < 0)
damage = 0
return
damage += damage_mod
if ((damage / maxHealth) > 1)