Files

622 lines
24 KiB
Plaintext

/datum/chemical_reaction/fermi
mix_sound = 'sound/effects/bubbles.ogg'
//Called for every reaction step
/datum/chemical_reaction/proc/FermiCreate(datum/reagents/holder, added_volume, added_purity)
return
//Called when reaction STOP_PROCESSING
/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder, var/atom/my_atom, reactVol)
if(clear_conversion == REACTION_CLEAR_IMPURE | REACTION_CLEAR_INVERSE)
for(var/id in results)
var/datum/reagent/R = my_atom.reagents.has_reagent(id)
if(!R || R.purity == 1)
continue
var/cached_volume = R.volume
if(clear_conversion == REACTION_CLEAR_INVERSE && R.inverse_chem)
if(R.inverse_chem_val > R.purity)
my_atom.reagents.remove_reagent(R.type, cached_volume, FALSE)
my_atom.reagents.add_reagent(R.inverse_chem, cached_volume, FALSE, other_purity = 1)
else if (clear_conversion == REACTION_CLEAR_IMPURE && R.impure_chem)
var/impureVol = cached_volume * (1 - R.purity)
my_atom.reagents.remove_reagent(R.type, (impureVol), FALSE)
my_atom.reagents.add_reagent(R.impure_chem, impureVol, FALSE, other_purity = 1)
R.cached_purity = R.purity
R.purity = 1
//Called when temperature is above a certain threshold, or if purity is too low.
/datum/chemical_reaction/proc/FermiExplode(datum/reagents/R0, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
set waitfor = FALSE
if (Exploding == TRUE)
return
if(!pH)//Dunno how things got here without a pH, but just in case
pH = 7
var/ImpureTot = 0
var/turf/T = get_turf(my_atom)
if(temp>500)//if hot, start a fire
switch(temp)
if (500 to 750)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
volume*=1.1
if (751 to 1100)
for(var/turf/turf in range(2,T))
new /obj/effect/hotspot(turf)
volume*=1.2
if (1101 to 1500) //If you're crafty
for(var/turf/turf in range(3,T))
new /obj/effect/hotspot(turf)
volume*=1.3
if (1501 to 2500) //requested
for(var/turf/turf in range(4,T))
new /obj/effect/hotspot(turf)
volume*=1.4
if (2501 to 5000)
for(var/turf/turf in range(5,T))
new /obj/effect/hotspot(turf)
volume*=1.5
if (5001 to INFINITY)
for(var/turf/turf in range(6,T))
new /obj/effect/hotspot(turf)
volume*=1.6
message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
log_game("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
var/datum/reagents/R = new/datum/reagents(3000)//Hey, just in case.
var/datum/effect_system/smoke_spread/chem/s = new()
R.my_atom = my_atom //Give the gas a fingerprint
for (var/A in R0.reagent_list) //make gas for reagents, has to be done this way, otherwise it never stops Exploding
var/datum/reagent/R2 = A
R.add_reagent(R2.type, R2.volume/3) //Seems fine? I think I fixed the infinite explosion bug.
if (R2.purity < 0.6)
ImpureTot = (ImpureTot + (1-R2.purity)) / 2
if(pH < 4) //if acidic, make acid spray
R.add_reagent(/datum/reagent/impure/fermiTox, (volume/3))
if(R.reagent_list)
s.set_up(R, (volume/5), my_atom)
s.start()
if (pH > 10) //if alkaline, small explosion.
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round((volume/28)*(pH-9)), T, 0, 0)
e.start()
if(ImpureTot) //If impure, v.small emp (0.6 or less)
empulse(T, ImpureTot, 1)
my_atom.reagents.clear_reagents() //just in case
return
/datum/chemical_reaction/fermi/eigenstate
name = "Eigenstasium"
id = /datum/reagent/fermi/eigenstate
results = list(/datum/reagent/fermi/eigenstate = 1)
required_reagents = list(/datum/reagent/bluespace = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/consumable/caramel = 1)
mix_message = "the reaction zaps suddenly!"
//FermiChem vars:
OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions
OptimalTempMax = 600 // Upper end for above
ExplodeTemp = 650 //Temperature at which reaction explodes
OptimalpHMin = 7 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
OptimalpHMax = 9 // Higest value for above
ReactpHLim = 5 // How far out pH wil react, giving impurity place (Exponential phase)
CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
CurveSharpT = 1.5 // How sharp the temperature exponential curve is (to the power of value)
CurveSharppH = 3 // How sharp the pH exponential curve is (to the power of value)
ThermicConstant = 10 //Temperature change per 1u produced
HIonRelease = -0.02 //pH change per 1u reaction
RateUpLim = 3 //Optimal/max rate possible if all conditions are perfect
FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
FermiExplode = FALSE //If the chemical explodes in a special way
PurityMin = 0.4 //The minimum purity something has to be above, otherwise it explodes.
/datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list
if(!E)
return
var/turf/open/location = get_turf(my_atom)
if(location)
E.location_created = location
E.data["location_created"] = location
//serum
/datum/chemical_reaction/fermi/SDGF
name = "Synthetic-derived growth factor"
id = /datum/reagent/fermi/SDGF
results = list(/datum/reagent/fermi/SDGF = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1.5, /datum/reagent/medicine/clonexadone = 1.5, /datum/reagent/uranium = 1.5, /datum/reagent/medicine/synthflesh = 1.5)
mix_message = "the reaction gives off a blorble!"
required_temp = 1
//FermiChem vars:
OptimalTempMin = 600 // Lower area of bell curve for determining heat based rate reactions
OptimalTempMax = 630 // Upper end for above
ExplodeTemp = 635 // Temperature at which reaction explodes
OptimalpHMin = 3 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
OptimalpHMax = 3.5 // Higest value for above
ReactpHLim = 2 // How far out pH wil react, giving impurity place (Exponential phase)
CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value)
CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value)
ThermicConstant = -10 // Temperature change per 1u produced
HIonRelease = 0.02 // pH change per 1u reaction (inverse for some reason)
RateUpLim = 1 // Optimal/max rate possible if all conditions are perfect
FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics
FermiExplode = TRUE // If the chemical explodes in a special way
PurityMin = 0.2
/datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!
var/turf/T = get_turf(my_atom)
var/amount_to_spawn = round((volume/100), 1)
if(amount_to_spawn <= 0)
amount_to_spawn = 1
for(var/i in 1 to amount_to_spawn)
var/mob/living/simple_animal/slime/S = new(T,"pyrite")
S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
S.name = "Living teratoma"
S.real_name = "Living teratoma"
S.rabid = 1//Make them an angery boi
S.color = "#810010"
my_atom.reagents.clear_reagents()
my_atom.visible_message("<span class='warning'>An horrifying tumoural mass forms in [my_atom]!</span>")
/datum/chemical_reaction/fermi/breast_enlarger
name = "Sucubus milk"
id = /datum/reagent/fermi/breast_enlarger
results = list(/datum/reagent/fermi/breast_enlarger = 8)
required_reagents = list(/datum/reagent/medicine/salglu_solution = 1, /datum/reagent/consumable/milk = 1, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/silicon = 3, /datum/reagent/drug/aphrodisiac = 3)
mix_message = "the reaction gives off a mist of milk."
//FermiChem vars:
OptimalTempMin = 200
OptimalTempMax = 800
ExplodeTemp = 900
OptimalpHMin = 6
OptimalpHMax = 10
ReactpHLim = 3
CatalystFact = 0
CurveSharpT = 2
CurveSharppH = 1
ThermicConstant = 1
HIonRelease = -0.1
RateUpLim = 5
FermiChem = TRUE
FermiExplode = TRUE
PurityMin = 0.1
/datum/chemical_reaction/fermi/breast_enlarger/FermiFinish(datum/reagents/holder, atom/my_atom)
var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list
if(!BE)
return
var/cached_volume = BE.volume
if(BE.purity < 0.35)
holder.remove_reagent(type, cached_volume)
holder.add_reagent(/datum/reagent/fermi/BEsmaller, cached_volume)
/datum/chemical_reaction/fermi/breast_enlarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(get_turf(my_atom))
my_atom.visible_message("<span class='warning'>The reaction suddenly condenses, creating a pair of breasts!</b></span>")
var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list
B.size = ((BE.volume * BE.purity) / 10) //half as effective.
my_atom.reagents.clear_reagents()
/datum/chemical_reaction/fermi/penis_enlarger
name = "Incubus draft"
id = /datum/reagent/fermi/penis_enlarger
results = list(/datum/reagent/fermi/penis_enlarger = 8)
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/carbon = 2, /datum/reagent/drug/aphrodisiac = 2, /datum/reagent/medicine/salglu_solution = 1)
mix_message = "the reaction gives off a spicy mist."
//FermiChem vars:
OptimalTempMin = 200
OptimalTempMax = 800
ExplodeTemp = 900
OptimalpHMin = 2
OptimalpHMax = 6
ReactpHLim = 3
CatalystFact = 0
CurveSharpT = 2
CurveSharppH = 1
ThermicConstant = 1
HIonRelease = 0.1
RateUpLim = 5
FermiChem = TRUE
FermiExplode = TRUE
PurityMin = 0.1
/datum/chemical_reaction/fermi/penis_enlarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(get_turf(my_atom))
my_atom.visible_message("<span class='warning'>The reaction suddenly condenses, creating a penis!</b></span>")
var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list
P.length = ((PE.volume * PE.purity) / 10)//half as effective.
my_atom.reagents.clear_reagents()
/datum/chemical_reaction/fermi/penis_enlarger/FermiFinish(datum/reagents/holder, atom/my_atom)
var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list
if(!PE)
return
var/cached_volume = PE.volume
if(PE.purity < 0.35)
holder.remove_reagent(type, cached_volume)
holder.add_reagent(/datum/reagent/fermi/PEsmaller, cached_volume)
/*
/datum/chemical_reaction/fermi/astral
name = "Astrogen"
id = /datum/reagent/fermi/astral
results = list(/datum/reagent/fermi/astral = 5)
required_reagents = list(/datum/reagent/fermi/eigenstate = 1, /datum/reagent/toxin/plasma = 3, /datum/reagent/medicine/synaptizine = 1, /datum/reagent/aluminium = 5)
//FermiChem vars:
OptimalTempMin = 700
OptimalTempMax = 800
ExplodeTemp = 1150
OptimalpHMin = 10
OptimalpHMax = 13
ReactpHLim = 2
CatalystFact = 0
CurveSharpT = 1
CurveSharppH = 1
ThermicConstant = 25
HIonRelease = 0.02
RateUpLim = 15
FermiChem = TRUE
FermiExplode = TRUE
PurityMin = 0.25
*/
/datum/chemical_reaction/fermi/enthrall //check this
name = "MKUltra"
id = /datum/reagent/fermi/enthrall
results = list(/datum/reagent/fermi/enthrall = 5)
required_reagents = list(/datum/reagent/consumable/coco = 1, /datum/reagent/bluespace = 1, /datum/reagent/toxin/mindbreaker = 1, /datum/reagent/medicine/psicodine = 1, /datum/reagent/drug/happiness = 1)
required_catalysts = list(/datum/reagent/blood = 1)
mix_message = "the reaction gives off a burgundy plume of smoke!"
//FermiChem vars:
OptimalTempMin = 780
OptimalTempMax = 820
ExplodeTemp = 840
OptimalpHMin = 12
OptimalpHMax = 13
ReactpHLim = 2
//CatalystFact = 0
CurveSharpT = 0.5
CurveSharppH = 4
ThermicConstant = 15
HIonRelease = 0.1
RateUpLim = 1
FermiChem = TRUE
FermiExplode = TRUE
PurityMin = 0.2
/datum/chemical_reaction/fermi/enthrall/FermiFinish(datum/reagents/holder, var/atom/my_atom)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in my_atom.reagents.reagent_list
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list
if(!B || !E)
return
if(!B.data)
my_atom.visible_message("<span class='warning'>The reaction splutters and fails to react properly.</span>") //Just in case
E.purity = 0
if (B.data["gender"] == "female")
E.data["creatorGender"] = "Mistress"
E.creatorGender = "Mistress"
else
E.data["creatorGender"] = "Master"
E.creatorGender = "Master"
E.data["creatorName"] = B.data["real_name"]
E.creatorName = B.data["real_name"]
E.data["creatorID"] = B.data["ckey"]
E.creatorID = B.data["ckey"]
//So slimes can play too.
/datum/chemical_reaction/fermi/enthrall/slime
id = "enthrall2"
required_catalysts = list(/datum/reagent/blood/jellyblood = 1)
/datum/chemical_reaction/fermi/enthrall/slime/FermiFinish(datum/reagents/holder, var/atom/my_atom)
var/datum/reagent/blood/jellyblood/B = locate(/datum/reagent/blood/jellyblood) in my_atom.reagents.reagent_list//The one line change.
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list
if(!B || !E)
return
if(!B.data)
my_atom.visible_message("<span class='warning'>The reaction splutters and fails to react properly.</span>") //Just in case
E.purity = 0
if (B.data["gender"] == "female")
E.data["creatorGender"] = "Mistress"
E.creatorGender = "Mistress"
else
E.data["creatorGender"] = "Master"
E.creatorGender = "Master"
E.data["creatorName"] = B.data["real_name"]
E.creatorName = B.data["real_name"]
E.data["creatorID"] = B.data["ckey"]
E.creatorID = B.data["ckey"]
/datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents/R0, var/atom/my_atom, volume, temp, pH)
var/turf/T = get_turf(my_atom)
var/datum/reagents/R = new/datum/reagents(1000)
var/datum/effect_system/smoke_spread/chem/s = new()
R.add_reagent(/datum/reagent/fermi/enthrallExplo, volume)
s.set_up(R, volume/2, T)
s.start()
R0.clear_reagents()
/datum/chemical_reaction/fermi/hatmium // done
name = "Hat growth serum"
id = /datum/reagent/fermi/hatmium
results = list(/datum/reagent/fermi/hatmium = 5)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/cooking_oil = 2, /datum/reagent/iron = 1, /datum/reagent/gold = 3)
//mix_message = ""
//FermiChem vars:
OptimalTempMin = 500
OptimalTempMax = 700
ExplodeTemp = 750
OptimalpHMin = 2
OptimalpHMax = 5
ReactpHLim = 3
//CatalystFact = 0 //To do 1
CurveSharpT = 8
CurveSharppH = 0.5
ThermicConstant = -2
HIonRelease = -0.1
RateUpLim = 2
FermiChem = TRUE
FermiExplode = TRUE
PurityMin = 0.5
/datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH)
var/amount_to_spawn = round((volume/100), 1)
if(amount_to_spawn <= 0)
amount_to_spawn = 1
for(var/i in 1 to amount_to_spawn)
var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
hat.animate_atom_living()
my_atom.visible_message("<span class='warning'>The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it!</b></span>")
my_atom.reagents.clear_reagents()
/datum/chemical_reaction/fermi/furranium
name = "Furranium"
id = /datum/reagent/fermi/furranium
results = list(/datum/reagent/fermi/furranium = 5)
required_reagents = list(/datum/reagent/drug/aphrodisiac = 1, /datum/reagent/moonsugar = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 1)
mix_message = "You think you can hear a howl come from the beaker."
//FermiChem vars:
OptimalTempMin = 350
OptimalTempMax = 600
ExplodeTemp = 700
OptimalpHMin = 8
OptimalpHMax = 10
ReactpHLim = 2
//CatalystFact = 0 //To do 1
CurveSharpT = 2
CurveSharppH = 0.5
ThermicConstant = -10
HIonRelease = -0.1
RateUpLim = 2
FermiChem = TRUE
PurityMin = 0.3
//FOR INSTANT REACTIONS - DO NOT MULTIPLY LIMIT BY 10.
//There's a weird rounding error or something ugh.
/datum/chemical_reaction/fermi/furranium/organic
id = "furranium_organic"
required_reagents = list(/datum/reagent/drug/aphrodisiac = 1, /datum/reagent/pax/catnip = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 1)
//Nano-b-gone
/datum/chemical_reaction/fermi/nanite_b_gone//done test
name = "Naninte bain"
id = /datum/reagent/fermi/nanite_b_gone
results = list(/datum/reagent/fermi/nanite_b_gone = 4)
required_reagents = list(/datum/reagent/medicine/synthflesh = 1, /datum/reagent/uranium = 1, /datum/reagent/iron = 1, /datum/reagent/medicine/salglu_solution = 1)
mix_message = "the reaction gurgles, encapsulating the reagents in flesh before the emp can be set off."
required_temp = 450//To force fermireactions before EMP.
//FermiChem vars:
OptimalTempMin = 500
OptimalTempMax = 600
ExplodeTemp = 700
OptimalpHMin = 6
OptimalpHMax = 6.25
ReactpHLim = 3
//CatalystFact = 0 //To do 1
CurveSharpT = 0
CurveSharppH = 1
ThermicConstant = 5
HIonRelease = 0.01
RateUpLim = 1
FermiChem = TRUE
/datum/chemical_reaction/fermi/acidic_buffer//done test
name = "Acetic acid buffer"
id = /datum/reagent/fermi/acidic_buffer
results = list(/datum/reagent/fermi/acidic_buffer = 10) //acetic acid
required_reagents = list(/datum/reagent/medicine/salglu_solution = 1, /datum/reagent/consumable/ethanol = 3, /datum/reagent/oxygen = 3, /datum/reagent/water = 3)
//FermiChem vars:
OptimalTempMin = 250
OptimalTempMax = 500
ExplodeTemp = 9999 //check to see overflow doesn't happen!
OptimalpHMin = 0
OptimalpHMax = 14
ReactpHLim = 0
//CatalystFact = 0 //To do 1
CurveSharpT = 4
CurveSharppH = 0
ThermicConstant = 0
HIonRelease = -0.01
RateUpLim = 20
FermiChem = TRUE
/datum/chemical_reaction/fermi/acidic_buffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this
var/datum/reagent/fermi/acidic_buffer/Fa = locate(/datum/reagent/fermi/acidic_buffer) in my_atom.reagents.reagent_list
if(!Fa)
return
Fa.data = 0.1//setting it to 0 means byond thinks it's not there.
/datum/chemical_reaction/fermi/basic_buffer//done test
name = "Ethyl Ethanoate buffer"
id = /datum/reagent/fermi/basic_buffer
results = list(/datum/reagent/fermi/basic_buffer = 5)
required_reagents = list(/datum/reagent/lye = 1, /datum/reagent/consumable/ethanol = 2, /datum/reagent/water = 2)
required_catalysts = list(/datum/reagent/toxin/acid = 1) //vagely acetic
//FermiChem vars:
OptimalTempMin = 250
OptimalTempMax = 500
ExplodeTemp = 9999 //check to see overflow doesn't happen!
OptimalpHMin = 0
OptimalpHMax = 14
ReactpHLim = 0
//CatalystFact = 0 //To do 1
CurveSharpT = 4
CurveSharppH = 0
ThermicConstant = 0
HIonRelease = 0.01
RateUpLim = 15
FermiChem = TRUE
/datum/chemical_reaction/fermi/plushmium // done
name = "Plushification serum"
id = /datum/reagent/fermi/plushmium
results = list(/datum/reagent/fermi/plushmium = 5)
required_reagents = list(/datum/reagent/medicine/strange_reagent = 5, /datum/reagent/drug/happiness = 3, /datum/reagent/blood = 10, /datum/reagent/consumable/laughter = 5, /datum/reagent/toxin/bad_food = 6)
//mix_message = ""
//FermiChem vars:
OptimalTempMin = 400
OptimalTempMax = 666
ExplodeTemp = 800
OptimalpHMin = 2
OptimalpHMax = 5
ReactpHLim = 6
//CatalystFact = 0 //To do 1
CurveSharpT = 8
CurveSharppH = 0.5
ThermicConstant = -2
HIonRelease = -0.1
RateUpLim = 2
FermiChem = TRUE
FermiExplode = TRUE
PurityMin = 0.6
/datum/chemical_reaction/fermi/plushmium/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
if(volume < 20) //It creates a normal plush at low volume.. at higher amounts, things get slightly more interesting.
new /obj/item/toy/plush/random(get_turf(my_atom))
else
new /obj/item/toy/plush/plushling(get_turf(my_atom))
my_atom.visible_message("<span class='warning'>The reaction suddenly zaps, creating a plushie!</b></span>")
my_atom.reagents.clear_reagents()
/datum/chemical_reaction/fermi/basic_buffer/FermiFinish(datum/reagents/holder, atom/my_atom) //might need this
var/datum/reagent/fermi/basic_buffer/Fb = locate(/datum/reagent/fermi/basic_buffer) in my_atom.reagents.reagent_list
if(!Fb)
return
Fb.data = 14
//secretcatchemcode, shh!! Of couse I hide it amongst cats. Though, I moved it with your requests.
//I'm not trying to be sneaky, I'm trying to keep it a secret!
//I don't know how to do hidden chems like Aurora
//ChemReactionVars:
/datum/chemical_reaction/fermi/secretcatchem //DONE
name = "secretcatchem"
id = /datum/reagent/fermi/secretcatchem
results = list(/datum/reagent/fermi/secretcatchem = 5)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/consumable/caramel = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/medicine/clonexadone = 1)//Yes this will make a kitty if you don't lucky guess. It'll eat all your reagents too.
required_catalysts = list(/datum/reagent/fermi/SDGF = 1)
required_temp = 500
mix_message = "the reaction gives off a meow!"
mix_sound = "modular_citadel/sound/voice/merowr.ogg"
//FermiChem vars:
OptimalTempMin = 650
OptimalpHMin = 0
ReactpHLim = 2
CurveSharpT = 0
CurveSharppH = 0
ThermicConstant = 0
HIonRelease = 0
RateUpLim = 0.1
FermiChem = TRUE
FermiExplode = FALSE
PurityMin = 0.2
is_secret = TRUE
/datum/chemical_reaction/fermi/secretcatchem/New()
//rand doesn't seem to work with n^-e
OptimalTempMin += rand(-100, 100)
OptimalTempMax = (OptimalTempMin+rand(20, 200))
ExplodeTemp = (OptimalTempMax+rand(20, 200))
OptimalpHMin += rand(1, 10)
OptimalpHMax = (OptimalpHMin + rand(1, 5))
ReactpHLim += rand(-1.5, 2.5)
CurveSharpT += (rand(1, 500)/100)
CurveSharppH += (rand(1, 500)/100)
ThermicConstant += rand(-20, 20)
HIonRelease += (rand(-25, 25)/100)
RateUpLim += (rand(1, 1000)/100)
PurityMin += (rand(-1, 1)/10)
var/picked = pick(/datum/reagent/aluminium, /datum/reagent/silver, /datum/reagent/gold, /datum/reagent/toxin/plasma, /datum/reagent/silicon, /datum/reagent/uranium, /datum/reagent/consumable/milk)
required_reagents[picked] = rand(1, 5)//weird
/datum/chemical_reaction/fermi/secretcatchem/FermiFinish(datum/reagents/holder, var/atom/my_atom)
SSblackbox.record_feedback("tally", "catgirlium")//log
/datum/chemical_reaction/fermi/secretcatchem/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
var/mob/living/simple_animal/pet/cat/custom_cat/catto = new(get_turf(my_atom))
my_atom.visible_message("<span class='warning'>The reaction suddenly gives out a meow, condensing into a chemcat!</b></span>")//meow!
playsound(get_turf(my_atom), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
catto.name = "Chemcat"
catto.desc = "A cute chem cat, created by a lot of compicated and confusing chemistry!"
catto.color = "#770000"
my_atom.reagents.remove_all(5)
/datum/chemical_reaction/fermi/yamerol//done test
name = "Yamerol"
id = /datum/reagent/fermi/yamerol
results = list(/datum/reagent/fermi/yamerol = 3)
required_reagents = list(/datum/reagent/medicine/perfluorodecalin = 1, /datum/reagent/medicine/salbutamol = 1, /datum/reagent/water = 1)
//FermiChem vars:
OptimalTempMin = 300
OptimalTempMax = 500
ExplodeTemp = 800 //check to see overflow doesn't happen!
OptimalpHMin = 6.8
OptimalpHMax = 7.2
ReactpHLim = 4
//CatalystFact = 0 //To do 1
CurveSharpT = 5
CurveSharppH = 0.5
ThermicConstant = -15
HIonRelease = 0.1
RateUpLim = 2
FermiChem = TRUE
/datum/chemical_reaction/fermi/zeolites
name = "Zeolites"
id = /datum/reagent/fermi/zeolites
results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot! - But it's now somewhat dangerous, and needs a bit of gold to catalyze the reaction
required_reagents = list(/datum/reagent/medicine/potass_iodide = 1, /datum/reagent/aluminium = 1, /datum/reagent/silicon = 1, /datum/reagent/oxygen = 1)
//FermiChem vars:
OptimalTempMin = 500
OptimalTempMax = 750
ExplodeTemp = 850
OptimalpHMin = 4.8
OptimalpHMax = 7
ReactpHLim = 5
//CatalystFact = 0
CurveSharpT = 1.5
CurveSharppH = 3
ThermicConstant = 1
HIonRelease = -0.15
RateUpLim = 4
PurityMin = 0.5 //Good luck!
FermiChem = TRUE