diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 513115b194..8e666cfeeb 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -157,7 +157,7 @@
gain_text = "You feel HONGRY."
lose_text = "You no longer feel HONGRY."
-/datum/quirk/trandening
+/datum/quirk/trandening //What does trandening mean?
name = "High Luminosity Eyes"
desc = "When the next big fancy implant came out you had to buy one on impluse!"
value = 1
@@ -169,3 +169,16 @@
var/obj/item/autosurgeon/gloweyes/gloweyes = new(get_turf(H))
H.equip_to_slot(gloweyes, SLOT_IN_BACKPACK)
H.regenerate_icons()
+
+/datum/quirk/BloodPressure
+ name = "Synthetic blood"
+ desc = "You've got a new form of synthetic blood that increases the total blood volume inside of you as well as the rate of replenishment!"
+ value = 1 //I honeslty dunno if this is a good trait? I just means you use more of medbays blood and make janitors madder, but you also regen blood a lil faster.
+ mob_trait = TRAIT_HIGH_BLOOD
+ gain_text = "You feel full of blood!"
+ lose_text = "You feel like your blood pressure went down."
+
+/datum/quirk/BloodPressure/add()
+ var/mob/living/M = quirk_holder
+ M.blood_ratio = 1.2
+ M.blood_volume += 150
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 79afe0049c..4851be05b9 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -324,3 +324,29 @@
gain_text = "There's a lot on your mind right now."
lose_text = "Your mind finally feels calm."
medical_record_text = "Patient's mind is in a vulnerable state, and cannot recover from traumatic events."
+
+//For reviewers: If you think it's a bad idea, feel free to remove it. I won't be upset :blobcat:
+/datum/quirk/Hypno
+ name = "Hypnotherapy user"
+ desc = "You had hypnotherapy right before your shift, you're not sure it had any effects, though."
+ mob_trait = "hypnotherapy"
+ value = -1 //I mean, it can be a really bad trait to have, but on the other hand, some people want it?
+ gain_text = "You really think the hypnotherapy helped you out."
+ //lose_text = "You forget about the hypnotherapy you had, or did you even have it?"
+
+/datum/quirk/Hypno/add()
+ //You caught me, it's not actually based off a trigger, stop spoiling the effect! Code diving ruins the magic!
+ addtimer(CALLBACK(src, /datum/quirk/Hypno.proc/triggered, quirk_holder), rand(12000, 36000))//increase by 100, it's lower so I can test it.
+
+//DOES NOT give any indication when someone is triggered - this is intentional so people don't abuse it, you're supposed to get a random thing said to you as a mini objective.
+/datum/quirk/Hypno/proc/triggered(quirk_holder)//I figured I might as well make a trait of code I added.
+ var/mob/living/carbon/human/H = quirk_holder
+ var/list/seen = viewers(8, get_turf(H))
+ seen -= quirk_holder
+ if(LAZYLEN(seen) == 0)
+ to_chat(H, "That object accidentally sets off your implanted trigger, sending you into a hypnotic daze!")
+ else
+ to_chat(H, "[pick(seen)] accidentally sets off your implanted trigger, sending you into a hypnotic daze!")
+ H.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
+ message_admins("Trance applied")
+ qdel(src)
diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm
index f53d61ab6d..21e54374a4 100644
--- a/code/modules/antagonists/valentines/valentine.dm
+++ b/code/modules/antagonists/valentines/valentine.dm
@@ -49,11 +49,6 @@
/datum/antagonist/valentine/chem/greet()
to_chat(owner, "You're in love with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.")
-/datum/antagonist/valentine/chem/check_completion()
- if(date.M.stat != DEAD)
- return TRUE
- return FALSE
-
/datum/antagonist/valentine/chem/roundend_report()
var/objectives_complete = TRUE
if(owner.objectives.len)
@@ -63,6 +58,6 @@
break
if(objectives_complete)
- return "[owner.name] protected [owner.p_their()] love: [date.name]! What a cutie!"
+ return "[owner.name] protected [owner.p_their()] love: [date.name]! What a cutie!"
else
return "[owner.name] date failed!"
diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm
index 368e30e7eb..8f77af58eb 100644
--- a/code/modules/events/holiday/vday.dm
+++ b/code/modules/events/holiday/vday.dm
@@ -45,10 +45,12 @@
lover.mind.special_role = "valentine"
if (chemLove == TRUE)
var/datum/antagonist/valentine/chem/V = new //Changes text and EOG check basically.
+ V.date = date.mind
+ lover.mind.add_antag_datum(V)
else
var/datum/antagonist/valentine/V = new
- V.date = date.mind
- lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now
+ V.date = date.mind
+ lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now
/datum/round_event/valentines/announce(fake)
priority_announce("It's Valentine's Day! Give a valentine to that special someone!")
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 97f1b2dd36..70fc16d0bc 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -308,53 +308,63 @@
gold_core_spawnable = NO_SPAWN
health = 50 //So people can't instakill it
maxHealth = 50
+ speak = list("Meowrowr!", "Mew!", "Miauen!")
+ speak_emote = list("wigglepurrs", "mewls")
+ emote_hear = list("meows.", "mews.")
+ emote_see = list("looks at you eagerly for pets!", "wiggles enthusiastically.")
+ gold_core_spawnable = NO_SPAWN
//secretcatchemcode, shh!! Of couse I hide it amongst cats. Also, yes, I expect you, Mr.Maintaner to read and review this, dispite it being hidden and not mentioned in the changelogs.
+//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 = "secretcatchem"
- results = list("secretcatchem" = 2)
- required_reagents = list("stable_plasma" = 0.5, "sugar" = 0.5, "cream" = 0.5, "blood" = 0.5)
+ results = list("secretcatchem" = 0.5)
+ required_reagents = list("stable_plasma" = 0.1, "sugar" = 0.1, "cream" = 0.1, "blood" = 0.1, "slimejelly" = 0.1)
required_catalysts = list("felinidmutationtoxin" = 5)
+ required_temp = 600
mix_message = "the reaction gives off a meow!"
+ mix_sound = "modular_citadel/sound/voice/merowr.ogg"
//FermiChem vars:
- OptimalTempMin = 700 // Lower area of bell curve for determining heat based rate reactions
- OptimalTempMax = 800 // Upper end for above
- ExplodeTemp = 900 // Temperature at which reaction explodes
- OptimalpHMin = 6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
- OptimalpHMax = 8 // 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 = 0 // How sharp the temperature exponential curve is (to the power of value)
- CurveSharppH = 0 // How sharp the pH exponential curve is (to the power of value)
- ThermicConstant = 0 // Temperature change per 1u produced
- HIonRelease = 0 // pH change per 1u reaction (inverse for some reason)
- RateUpLim = 0.1 // 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
+ OptimalTempMin = 650
+ //OptimalTempMax = 800
+ //ExplodeTemp = 900
+ OptimalpHMin = 0
+ //OptimalpHMax = 8
+ ReactpHLim = 2
+ //CatalystFact = 0
+ CurveSharpT = 0
+ CurveSharppH = 0
+ ThermicConstant = 0
+ HIonRelease = 0
+ RateUpLim = 0.1
+ FermiChem = TRUE
+ FermiExplode = FALSE
PurityMin = 0.2
-/datum/chemical_reaction/fermi/secretcatchem/Initialize()
- message_admins("randomizing reaction")
+/datum/chemical_reaction/fermi/secretcatchem/New()
+ //rand doesn't seem to work with n^-e
+ //message_admins("randomizing reaction")
OptimalTempMin += rand(-100, 100)
- OptimalTempMax += rand(-100, 100)
- ExplodeTemp += rand(-100, 100)
- OptimalpHMin += rand(-1, 1)
- OptimalpHMax += rand(-1, 1)
+ OptimalTempMax += (OptimalpHMin+rand(0, 200))
+ ExplodeTemp += (OptimalpHMax+rand(0, 200))
+ OptimalpHMin += rand(1, 10)
+ OptimalpHMax += (OptimalpHMin + rand(0, 5))
ReactpHLim += rand(-2, 2)
- CurveSharpT += rand(0.01, 5)
- CurveSharppH += rand(0.01, 5)
+ CurveSharpT += (rand(1, 500)/100)
+ CurveSharppH += (rand(1, 500)/100)
ThermicConstant += rand(-50, 50)
- HIonRelease += rand(-0.25, 0.25)
- RateUpLim += rand(0, 100)
- PurityMin += rand(-0.1, 0.1)
+ HIonRelease += (rand(-25, 25)/100)
+ RateUpLim += (rand(1, 1000)/10)
+ PurityMin += (rand(-1, 1)/10)
var/additions = list("aluminum", "silver", "gold", "plasma", "silicon", "bluespace")
- var/chosenA = pick(additions)
- required_reagents[chosenA] = rand(0.1, 1)
+ //var/chosenA = pick(additions)
+ required_reagents += list("[pick(additions)]", rand(0.1, 1))
/datum/chemical_reaction/fermi/secretcatchem/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
- message_admins("Someone found the hidden reaction. Amazing!! Please tell Fermi!!")
+ message_admins("Someone found the hidden reaction. Amazing!! Please tell Fermis!!")
//ReagentVars
//Turns you into a cute catto while it's in your system.
@@ -366,8 +376,7 @@
taste_description = "hairballs and cream"
color = "#ffc224"
var/catshift = FALSE
- var/mob/living/simple_animal/pet/cat/custom_cat/catto
- //var/mob/living/carbon/human/origin maybe unneeded
+ var/mob/living/simple_animal/pet/cat/custom_cat/catto = null
/datum/reagent/fermi/secretcatchem/New()
name = "Catgirli[pick("a","u","e","y")]m [pick("apex", "prime", "meow")]"
@@ -377,28 +386,53 @@
//origin = H
var/current_species = H.dna.species.type
var/datum/species/mutation = /datum/species/human/felinid
- if((mutation && mutation != current_species) && (purity > 0.9))//ONLY if purity is 1, and given the stuff is random. It's basically impossible to get this to 1.
+ if((mutation != current_species) && (purity >= 0.8))//ONLY if purity is high, and given the stuff is random. It's basically impossible to get this to 1.
H.set_species(mutation)
H.gender = FEMALE
+ //exception(al) handler, I said cat tail damnit!
+ H.dna.features["mam_tail"] = "Cat"
+ H.dna.features["tail_human"] = "Cat"
+ H.dna.features["ears"] = "Cat"
+ H.dna.features["mam_ears"] = "Cat"
+ H.dna.features["tail_lizard"] = "Cat"
+ H.dna.features["mam_tail"] = "Cat"
+ H.dna.features["mam_tail_animated"] = "Cat"
+ H.facial_hair_style = "Shaved"
+ H.verb_say = "mewls"
catshift = TRUE
+ playsound(get_turf(H), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
+ to_chat(H, "You suddenly turn into a cat!")
catto = new(get_turf(H.loc))
H.mind.transfer_to(catto)
- H.moveToNullspace()
- catto.name = M.name
- catto.desc = "A cute catto! They remind you of [M] somehow."
- catto.color = "#[dna.features["mcolor"]]"
+ catto.name = H.name
+ catto.desc = "A cute catto! They remind you of [H] somehow."
+ catto.color = "#[H.dna.features["mcolor"]]"
+ //H.moveToNullspace() classic breaking Japes
+ H.forceMove(locate(10,6,1))//To the zelda room.
-/datum/reagent/fermi/secretcatchem/on_mob_life(mob/living/carbon/human/H)
+/datum/reagent/fermi/secretcatchem/on_mob_life(mob/living/carbon/H)
if(prob(5))
playsound(get_turf(catto), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
- catto.emote("me","lets out a meowrowr!")
+ catto.say("lets out a meowrowr!*")
..()
-/datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H)
- var/words = "Your body shifts back to normal."
+/datum/reagent/fermi/secretcatchem/on_mob_delete(mob/living/carbon/H)
+ var/words = "Your body shifts back to normal."
+ do_teleport(H, catto.loc)
+ catto.mind.transfer_to(H)
if(catshift == TRUE)
- words += " ...But wait, are those ears and a tail?")
- to_chat(H, "[words]")
- H.doMove(catto)
- catto.mind.transfer_to(M)
+ words += " ...But wait, are those ears and a tail?"
+ H.say("*wag")//force update sprites.
+ to_chat(H, "[words]")
qdel(catto)
+
+/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))
+ var/list/seen = viewers(8, get_turf(my_atom))
+ for(var/mob/M in seen)
+ to_chat(M, "The reaction suddenly gives out a meow, condensing into a chemcat!")//meow!
+ playsound(get_turf(my_atom), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
+ catto.name = "FermiCat"
+ catto.desc = "A cute Fermichem cat, created by a lot of compicated and confusing chemistry!"
+ catto.color = "#770000"
+ my_atom.reagents.remove_reagent("secretcatchem", 10)
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index b7e4f6aa96..61b7ab2c1a 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -345,7 +345,7 @@ im
//beaker check proc,
/datum/reagents/proc/beaker_check(atom/A)
- if(istype(A, /obj/item/reagent_containers/glass/beaker/meta))
+ if(istype(A, /obj/item/reagent_containers/glass/beaker/meta) || istype(A, /obj/item/reagent_containers/glass/bottle)) //prevent bottles from being dispenced and melting.
return
if(istype(A, /obj/item/reagent_containers/glass/beaker/plastic))//reaclly weird how this runtimes but the previous doesn't
if(chem_temp > 444)//assuming polypropylene
@@ -361,7 +361,6 @@ im
var/list/seen = viewers(5, get_turf(A))
var/iconhtml = icon2html(A, seen)
for(var/mob/M in seen)
- message_admins("pH at melting: [pH]")
to_chat(M, "[iconhtml] \The [my_atom]'s melts from the extreme pH!")
playsound(get_turf(A), 'sound/FermiChem/acidmelt.ogg', 80, 1)
qdel(A)
@@ -442,15 +441,6 @@ im
if(!C.required_other)
matching_other = 1
- //FermiChem
- /*
- if (chem_temp > C.ExplodeTemp)//Check to see if reaction is too hot!
- if (C.FermiExplode == TRUE)
- //To be added!
-
- TODO: make plastic beakers melt at 447 kalvin, all others at ~850 and meta-material never break.
- */
-
if(required_temp == 0 || (is_cold_recipe && chem_temp <= required_temp) || (!is_cold_recipe && chem_temp >= required_temp))//Temperature check!!
meets_temp_requirement = 1//binary pass
@@ -484,30 +474,25 @@ im
var/datum/chemical_reaction/C = selected_reaction
if (C.FermiChem == TRUE && !continue_reacting)
- message_admins("FermiChem Proc'd")
for(var/B in cached_required_reagents)
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.01))
for(var/P in selected_reaction.results)
targetVol = cached_results[P]*multiplier
- //message_admins("FermiChem target volume: [targetVol]")
-
if( (chem_temp <= C.ExplodeTemp) && (chem_temp >= C.OptimalTempMin))
if( (pH >= (C.OptimalpHMin - C.ReactpHLim)) && (pH <= (C.OptimalpHMax + C.ReactpHLim)) )//To prevent pointless reactions
//if (reactedVol < targetVol)
if (fermiIsReacting == TRUE)
return 0
else
- //reactedVol = FermiReact(selected_reaction, chem_temp, pH, multiplier, reactedVol, targetVol, cached_required_reagents, cached_results)
- //selected_reaction.on_reaction(src, my_atom, multiplier)
START_PROCESSING(SSprocessing, src)
- //message_admins("FermiChem processing started")
selected_reaction.on_reaction(src, my_atom, multiplier)
fermiIsReacting = TRUE
fermiReactID = selected_reaction
reaction_occurred = 1
if (chem_temp > C.ExplodeTemp)
var/datum/chemical_reaction/fermi/Ferm = selected_reaction
+ fermiIsReacting = FALSE
Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH)
return 0
else
@@ -564,24 +549,17 @@ im
var/list/cached_required_reagents = C.required_reagents//update reagents list
var/list/cached_results = C.results//resultant chemical list
var/multiplier = INFINITY
- //var/special_react_result = C.check_special_react(src) Only add if I add in the fermi-izer chem
- //message_admins("updating targetVol from [targetVol]")
for(var/B in cached_required_reagents) //
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.01))
- message_admins("Multi:[multiplier],( reag ammount:[get_reagent_amount(B)] / req reag:[cached_required_reagents[B]]")
- //multiplier*=10
if (multiplier == 0)
STOP_PROCESSING(SSprocessing, src)
fermiIsReacting = FALSE
- //message_admins("FermiChem STOPPED due to reactant removal! Reacted vol: [reactedVol] of [targetVol]")
reactedVol = 0
targetVol = 0
+ C.FermiFinish(src, my_atom, multiplier)
handle_reactions()
update_total()
- //var/datum/reagent/fermi/Ferm = GLOB.chemical_reagents_list[C.id]
- C.FermiFinish(src, my_atom, multiplier)
- //C.on_reaction(src, multiplier, special_react_result)
//Reaction sounds and words
playsound(get_turf(my_atom), C.mix_sound, 80, 1)
var/list/seen = viewers(5, get_turf(my_atom))//Sound and sight checkers
@@ -592,27 +570,21 @@ im
for(var/P in cached_results)
targetVol = cached_results[P]*multiplier
- //message_admins("to [targetVol]")
-
if (fermiIsReacting == FALSE)
- //message_admins("THIS SHOULD NEVER APPEAR!")
+
CRASH("Fermi has refused to stop reacting even though we asked her nicely.")
if (chem_temp > C.OptimalTempMin && fermiIsReacting == TRUE)//To prevent pointless reactions
if (reactedVol < targetVol)
reactedVol = FermiReact(fermiReactID, chem_temp, pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
- //message_admins("FermiChem tick activated started, Reacted vol: [reactedVol] of [targetVol]")
else
STOP_PROCESSING(SSprocessing, src)
fermiIsReacting = FALSE
- //message_admins("FermiChem STOPPED due to volume reached! Reacted vol: [reactedVol] of [targetVol]")
reactedVol = 0
targetVol = 0
+ C.FermiFinish(src, my_atom, multiplier)
handle_reactions()
update_total()
- //var/datum/reagent/fermi/Ferm = GLOB.chemical_reagents_list[C.id]
- C.FermiFinish(src, my_atom, multiplier)
- //C.on_reaction(src, multiplier, special_react_result)
//Reaction sounds and words
playsound(get_turf(my_atom), C.mix_sound, 80, 1)
var/list/seen = viewers(5, get_turf(my_atom))//Sound and sight checkers
@@ -622,15 +594,12 @@ im
return
else
STOP_PROCESSING(SSprocessing, src)
- //message_admins("FermiChem STOPPED due to temperature! Reacted vol: [reactedVol] of [targetVol]")
fermiIsReacting = FALSE
reactedVol = 0
targetVol = 0
+ C.FermiFinish(src, my_atom, multiplier)
handle_reactions()
update_total()
- //var/datum/reagent/fermi/Ferm = GLOB.chemical_reagents_list[C.id]
- C.FermiFinish(src, my_atom, multiplier)
- //C.on_reaction(src, multiplier, special_react_result)
//Reaction sounds and words
playsound(get_turf(my_atom), C.mix_sound, 80, 1)
var/list/seen = viewers(5, get_turf(my_atom))//Sound and sight checkers
@@ -646,36 +615,29 @@ im
var/deltaT = 0
var/deltapH = 0
var/stepChemAmmount = 0
- //var/ammoReacted = 0
+
//get purity from combined beaker reactant purities HERE.
var/purity = 1
- //var/tempVol = totalVol
- message_admins("multiplier [multiplier], target vol:[targetVol], rate lim: [C.RateUpLim], reactedVol: [reactedVol]")
//Begin Parse
- //WARNING("Purity precalc: [overallPurity]")
- //update_holder_purity(C)//updates holder's purity
- //WARNING("Purity postcalc: [overallPurity]")
-
//Check extremes first
if (cached_temp > C.ExplodeTemp)
//go to explode proc
- //message_admins("temperature is over limit: [C.ExplodeTemp] Current temperature: [cached_temp]")
+ fermiIsReacting = FALSE
C.FermiExplode(src, my_atom, (reactedVol+targetVol), cached_temp, pH)
+ STOP_PROCESSING(SSprocessing, src)
return
+ //Make sure things are limited.
if (pH > 14)
pH = 14
- //message_admins("pH is lover limit, cur pH: [pH]")
else if (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]")
+
//For now, purity is handled elsewhere
-
//Calculate DeltapH (Deviation of pH from optimal)
//Lower range
if (pH < C.OptimalpHMin)
@@ -692,14 +654,12 @@ im
else
deltapH = (((- pH + (C.OptimalpHMax + C.ReactpHLim))**C.CurveSharppH)/(C.ReactpHLim**C.CurveSharppH))//Reverse - to + to prevent math operation failures.
//Within mid range
- if (pH >= C.OptimalpHMin && pH <= C.OptimalpHMax)
+ else if (pH >= C.OptimalpHMin && pH <= C.OptimalpHMax)
deltapH = 1
//This should never proc:
else
- message_admins("Fermichem's pH broke!! Please let Fermis know!!")
WARNING("[my_atom] attempted to determine FermiChem pH for '[C.id]' which broke for some reason! ([usr])")
- //TODO Add CatalystFact
- //message_admins("calculating pH factor(purity), pH: [pH], min: [C.OptimalpHMin]-[C.ReactpHLim], max: [C.OptimalpHMax]+[C.ReactpHLim], deltapH: [deltapH]")
+ //TODO Add CatalystFact - though, might be pointless.
//Calculate DeltaT (Deviation of T from optimal)
if (cached_temp < C.OptimalTempMax && cached_temp >= C.OptimalTempMin)
@@ -708,54 +668,51 @@ im
deltaT = 1
else
deltaT = 0
- //message_admins("calculating temperature factor, min: [C.OptimalTempMin], max: [C.OptimalTempMax], Exponential: [C.CurveSharpT], deltaT: [deltaT]")
-
- stepChemAmmount = CLAMP((deltaT * C.RateUpLim), 0, (targetVol - reactedVol)) //used to have multipler, now it doesn't
- if (stepChemAmmount > C.RateUpLim)
+ /*
+ stepChemAmmount = CLAMP(((deltaT * cached_results[P]) * multipler), 0, (targetVol - reactedVol)) //used to have multipler, now it does
+ if (stepChemAmmount * cached_results[P] > C.RateUpLim)
stepChemAmmount = C.RateUpLim
else if (stepChemAmmount <= 0.01)
- //message_admins("stepChem underflow [stepChemAmmount]")
stepChemAmmount = 0.01
+ */
if ((reactedVol + stepChemAmmount) > targetVol)
stepChemAmmount = targetVol - reactedVol
- //message_admins("target volume reached. Reaction should stop after this loop. stepChemAmmount: [stepChemAmmount] + reactedVol: [reactedVol] = targetVol [targetVol]")
- //if (reactedVol > 0)
- // purity = ((purity * reactedVol) + (deltapH * stepChemAmmount)) /((reactedVol+ stepChemAmmount)) //This should add the purity to the product
- //else
purity = (deltapH)//set purity equal to pH offset
- //TODO: Check overall beaker purity with proc
- //Then adjust purity of result AND yeild ammount with said purity.
+ //Then adjust purity of result with reagent purity.
purity *= reactant_purity(C)
- // End.
- /*
- */
- //message_admins("cached_results: [cached_results], reactedVol: [reactedVol], stepChemAmmount [stepChemAmmount]")
-
for(var/B in cached_required_reagents)
- //message_admins("cached_required_reagents(B): [cached_required_reagents[B]], reactedVol: [reactedVol], base stepChemAmmount [stepChemAmmount]")
remove_reagent(B, (stepChemAmmount * cached_required_reagents[B]), safety = 1)//safety? removes reagents from beaker using remove function.
+ var/TotalStep = 0
for(var/P in cached_results)//Not sure how this works, what is selected_reaction.results?
- //reactedVol = max(reactedVol, 1) //this shouldnt happen ...
+ stepChemAmmount = CLAMP(((deltaT * cached_results[P]) * multiplier), 0, (targetVol - reactedVol)) //used to have multipler, now it does
+ if (stepChemAmmount * cached_results[P] > C.RateUpLim)
+ stepChemAmmount = C.RateUpLim
+ else if (stepChemAmmount <= 0.01)
+ stepChemAmmount = 0.01
+
SSblackbox.record_feedback("tally", "chemical_reaction", cached_results[P]*stepChemAmmount, P)//log
- add_reagent(P, cached_results[P]*(stepChemAmmount), null, cached_temp, purity)//add reagent function!! I THINK I can do this:
+ add_reagent(P, (stepChemAmmount), null, cached_temp, purity)//add reagent function!! I THINK I can do this:
+ TotalStep += stepChemAmmount//for multiple products
//Above should reduce yeild based on holder purity.
//Purity Check
+ //NOT MULTIPROD SAFE. TODO: Add multiproduct support
for(var/datum/reagent/R in my_atom.reagents.reagent_list)
if(P == R.id)
if (R.purity < C.PurityMin)//If purity is below the min, blow it up.
+ fermiIsReacting = FALSE
C.FermiExplode(src, my_atom, (reactedVol+targetVol), cached_temp, pH)
- return
+ return 0
C.FermiCreate(src)//proc that calls when step is done
//Apply pH changes and thermal output of reaction to beaker
- chem_temp = round(cached_temp + (C.ThermicConstant * stepChemAmmount)) //Why won't you update!!!
- pH += (C.HIonRelease * stepChemAmmount)
+ chem_temp = round(cached_temp + (C.ThermicConstant * stepChemAmmount)) //Why won't you update!!! Because I'm silly.
+ pH += (C.HIonRelease * stepChemAmmount)//honestly pH shifting is so confusing
//keep track of the current reacted amount
reactedVol = reactedVol + stepChemAmmount
//return said amount to compare for next step.
@@ -814,6 +771,7 @@ im
for(var/reagent in cached_reagents)
var/datum/reagent/R = reagent
del_reagent(R.id)
+ pH = REAGENT_NORMAL_PH
return 0
/datum/reagents/proc/reaction(atom/A, method = TOUCH, volume_modifier = 1, show_message = 1)
diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm
index e3b3ac6416..e16a6eff84 100644
--- a/code/modules/spells/spell_types/shapeshift.dm
+++ b/code/modules/spells/spell_types/shapeshift.dm
@@ -15,10 +15,10 @@
var/die_with_shapeshifted_form = TRUE
var/convert_damage = FALSE //If you want to convert the caster's health to the shift, and vice versa.
var/convert_damage_type = BRUTE //Since simplemobs don't have advanced damagetypes, what to convert damage back into.
-
+ //TODO: Remember to remove this before making final commit and make a new request for this. But until then, I'm gonna be a catto wizard!
var/shapeshift_type //Incase I ever get lucky enough to be a wizard. Also why can you be a dog but not a cat!! I know this isn't fermichem related, but this is really important!!!
var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\
- /mob/living/simple_animal/pet/cat,\ //TODO: Remember to remove this before making final commit and make a new request for this. But until then, I'm gonna be a catto wizard!
+ /mob/living/simple_animal/pet/cat,\
/mob/living/simple_animal/pet/dog/corgi,\
/mob/living/simple_animal/hostile/carp/ranged/chaos,\
/mob/living/simple_animal/bot/ed209,\
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 389dc2a335..a10990ce84 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -809,7 +809,7 @@
var/static/regex/statecustom_words = regex("state triggers|state your triggers")
var/static/regex/custom_words = regex("new trigger|listen to me")
var/static/regex/custom_words_words = regex("speak|echo|shock|cum|kneel|strip|trance")//What a descriptive name!
- var/static/regex/recognise_words = regex("recognise me|i'm back|did you miss me?")
+ var/static/regex/recognise_words = regex("recognise me|did you miss me?")
var/static/regex/objective_words = regex("new objective|obey this command|unable to resist|compulsed")
var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die")
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
@@ -951,6 +951,8 @@
var/mob/living/L = V
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
E.status = "Antiresist"
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've let [E.enthrallGender] down..."), 5)
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "Your mind clouds over, as you find yourself unable to resist!"), 5)
E.statusStrength = (1 * power_multiplier * E.phase)
E.cooldown += 15//Too short? yes, made 15
@@ -1105,6 +1107,7 @@
//tier3
//STATE TRIGGERS
+ //Doesn't work, Maintaners, help.
else if((findtext(message, statecustom_words)))//doesn't work
for(var/V in listeners)
var/speaktrigger = ""
@@ -1113,9 +1116,9 @@
if (E.phase > 2)
for (var/trigger in E.customTriggers)
speaktrigger += "[trigger], "
- C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself!
- addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, /atom/movable/proc/say, "[speaktrigger]"), 5)
- C.remove_trait(TRAIT_DEAF, "Triggers")
+ C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself!
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, /atom/movable/proc/say, "[speaktrigger]"), 5)
+ C.remove_trait(TRAIT_DEAF, "Triggers")
//CUSTOM TRIGGERS
diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi
index e1ebe86922..773258d3ee 100644
Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 6944fc49dd..ad631ea551 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -160,12 +160,12 @@
if(21)
to_chat(o, "Your rascally willy has become a more managable size, liberating your movements.")
o.remove_movespeed_modifier("hugedick")
- o.AdjustBloodVol(bloodCalc/2)
+ o.AdjustBloodVol(bloodCalc)
if(22 to INFINITY)
if(prob(2))
to_chat(o, "Your indulgent johnson is so substantial, it's taking all your blood and affecting your movements!")
o.add_movespeed_modifier("hugedick", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc)
- o.AdjustBloodVol(bloodCalc/2)
+ o.AdjustBloodVol(bloodCalc)
..()
/datum/status_effect/chem/PElarger/on_remove(mob/living/carbon/human/o)
@@ -286,7 +286,7 @@
cooldown -= 1
return
if(1)//Initial enthrallment
- if (enthrallTally > 150)
+ if (enthrallTally > 125)
phase += 1
mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
resistanceTally /= 2
@@ -301,7 +301,7 @@
owner.remove_status_effect(src) //If resisted in phase 1, effect is removed.
if(prob(10))
if(owner.lewd)
- to_chat(owner, "[pick("It feels so good to listen to [master].", "You can't keep your eyes off [master].", "[master]'s voice is making you feel so sleepy.", "You feel so comfortable with [master]", "[master] is so dominant, it feels right to obey them.")].")
+ to_chat(owner, "[pick("It feels so good to listen to [master].", "You can't keep your eyes off [master].", "[master]'s voice is making you feel so sleepy.", "You feel so comfortable with [master]", "[master] is so dominant, it feels right to obey them.")].")
if (2) //partially enthralled
if (enthrallTally > 250)
phase += 1
@@ -310,11 +310,11 @@
resistanceTally /= 2
if(owner.lewd)
to_chat(owner, "Your mind gives, eagerly obeying and serving [master].")
- to_chat(owner, "You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. ")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
+ to_chat(owner, "You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. ")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
else
to_chat(owner, "You are unable to put up a resistance any longer, and now are under the control of [master]. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [master] in death. ")
owner.add_trait(TRAIT_PACIFISM, "MKUltra") //IMPORTANT
- else if (resistanceTally > 250)
+ else if (resistanceTally > 200)
enthrallTally *= 0.5
phase -= 1
resistanceTally = 0
@@ -458,14 +458,14 @@
if(status == "Antiresist")
if (statusStrength < 0)
status = null
- to_chat(owner, "Your mind feels able to resist oncemore.")
+ to_chat(owner, "Your mind feels able to resist oncemore.")
else
statusStrength -= 1
else if(status == "heal")
if (statusStrength < 0)
status = null
- to_chat(owner, "You finish licking your wounds.")
+ to_chat(owner, "You finish licking your wounds.")
else
statusStrength -= 1
owner.heal_overall_damage(1, 1, 0, FALSE, FALSE)
@@ -475,16 +475,16 @@
owner.add_trait(TRAIT_GOTTAGOFAST, "MKUltra")
status = "charged"
if(master.lewd)
- to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!")
+ to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!")
else
- to_chat(owner, "[master]'s command fills you with a burst of speed!")
+ to_chat(owner, "[master]'s command fills you with a burst of speed!")
else if (status == "charged")
if (statusStrength < 0)
status = null
owner.remove_trait(TRAIT_GOTTAGOFAST, "MKUltra")
owner.Knockdown(50)
- to_chat(owner, "Your body gives out as the adrenaline in your system runs out.")
+ to_chat(owner, "Your body gives out as the adrenaline in your system runs out.")
else
statusStrength -= 1
cooldown += 1 //Cooldown doesn't process till status is done
@@ -504,7 +504,7 @@
cooldownMsg = FALSE
else if (cooldownMsg == FALSE)
if(master.lewd)
- to_chat(master, "Your pet [owner] appears to have finished internalising your last command.")
+ to_chat(master, "Your pet [owner] appears to have finished internalising your last command.")
else
to_chat(master, "Your thrall [owner] appears to have finished internalising your last command.")
cooldownMsg = TRUE
@@ -653,7 +653,7 @@
deltaResist += 0.1 //Though I commend your spamming efforts.
return
else
- deltaResist = 2 + resistGrowth
+ deltaResist = 1.75 + resistGrowth
resistGrowth += 0.05
//distance modifer
diff --git a/modular_citadel/code/datums/traits/negative.dm b/modular_citadel/code/datums/traits/negative.dm
index 9ecdc59a81..c0cbe57b5a 100644
--- a/modular_citadel/code/datums/traits/negative.dm
+++ b/modular_citadel/code/datums/traits/negative.dm
@@ -1,27 +1 @@
// Citadel-specific Negative Traits
-
-//For reviewers: If you think it's a bad idea, feel free to remove it. I won't be upset :blobcat:
-/datum/quirk/Hypno
- name = "Hypnotherapy user"
- desc = "You had hypnotherapy right before your shift, you're not sure it had any effects, though."
- mob_trait = "hypnotherapy"
- value = -1 //I mean, it can be a really bad trait to have, but on the other hand, some people want it?
- gain_text = "You really think the hypnotherapy helped you out."
- //lose_text = "You forget about the hypnotherapy you had, or did you even have it?"
-
-/datum/quirk/Hypno/add()
- //You caught me, it's not actually based off a trigger, stop spoiling the effect! Code diving ruins the magic!
- addtimer(CALLBACK(src, /datum/quirk/Hypno.proc/triggered, quirk_holder), rand(12000, 36000))//increase by 100, it's lower so I can test it.
-
-//DOES NOT give any indication when someone is triggered - this is intentional so people don't abuse it, you're supposed to get a random thing said to you as a mini objective.
-/datum/quirk/Hypno/proc/triggered(quirk_holder)//I figured I might as well make a trait of code I added.
- var/mob/living/carbon/human/H = quirk_holder
- var/list/seen = viewers(8, get_turf(H))
- seen -= quirk_holder
- if(LAZYLEN(seen) == 0)
- to_chat(H, "That object accidentally sets off your implanted trigger, sending you into a hypnotic daze!")
- else
- to_chat(H, "[pick(seen)] accidentally sets off your implanted trigger, sending you into a hypnotic daze!")
- H.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
- message_admins("Trance applied")
- qdel(src)
diff --git a/modular_citadel/code/datums/traits/positive.dm b/modular_citadel/code/datums/traits/positive.dm
deleted file mode 100644
index 34d4d95600..0000000000
--- a/modular_citadel/code/datums/traits/positive.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-// Citadel-specific Positive Traits
-
-/datum/quirk/BloodPressure
- name = "Synthetic blood"
- desc = "You've got a new form of synthetic blood that increases the total blood volume inside of you as well as the rate of replenishment!"
- value = 1 //I honeslty dunno if this is a good trait? I just means you use more of medbays blood and make janitors madder, but you also regen blood a lil faster.
- mob_trait = TRAIT_HIGH_BLOOD
- gain_text = "You feel full of blood!"
- lose_text = "You feel like your blood pressure went down."
-
-/datum/quirk/BloodPressure/add()
- var/mob/living/M = quirk_holder
- M.blood_ratio = 1.2
- M.blood_volume += 150
diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm
index f10f9916a9..4d1793fb25 100644
--- a/modular_citadel/code/modules/arousal/organs/breasts.dm
+++ b/modular_citadel/code/modules/arousal/organs/breasts.dm
@@ -53,8 +53,8 @@
desc = "You see a pair of breasts."
else
desc = "You see some breasts, they seem to be quite exotic."
- if(isnum(size))
- desc = "You see [pick("some serious honkers", "a real set of badonkers", "some dobonhonkeros", "massive dohoonkabhankoloos", "two big old tonhongerekoogers", "a couple of giant bonkhonagahoogs", "a pair of humongous hungolomghnonoloughongous")]. Their volume is way beyond cupsize now, measuring in about [round(size)]cm in diameter."
+ if(cached_size > 16)
+ desc = "You see [pick("some serious honkers", "a real set of badonkers", "some dobonhonkeros", "massive dohoonkabhankoloos", "two big old tonhongerekoogers", "a couple of giant bonkhonagahoogs", "a pair of humongous hungolomghnonoloughongous")]. Their volume is way beyond cupsize now, measuring in about [round(cached_size)]cm in diameter."
else if (!isnum(size))
if (size == "flat")
desc += " They're very small and flatchested, however."
@@ -121,20 +121,14 @@
size = "flat"
if(isnum(prev_size))
prev_size = breast_sizes[prev_size]
- //message_admins("2. [breast_values[size]] vs [breast_values[prev_size]] || [size] vs [prev_size]")
if (breast_values[size] > breast_values[prev_size])
to_chat(owner, "Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [uppertext(size)]-cup.")
var/mob/living/carbon/human/H = owner
- message_admins("Cached: [cached_size], prev: [prev_size], size: [size]")
H.Force_update_genitals()
else if (breast_values[size] < breast_values[prev_size])
to_chat(owner, "Your breasts [pick("shrink down to", "decrease into", "diminish into", "deflate into", "shrivel regretfully into", "contracts into")] a [uppertext(size)]-cup.")
var/mob/living/carbon/human/H = owner
H.Force_update_genitals()
prev_size = size
- /* for future use, DO NOT DELETE:
else if (cached_size >= 16)
- if(size != "huge")
- to_chat(owner, "Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a hefty [uppertext(size)]cm diameter bosom.")// taking both of your hands to hold!.")
size = "huge"
- */
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index c5e2778091..049252e5b7 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -288,7 +288,7 @@
if(istype(O, /obj/item/organ/genital))
organCheck = TRUE
if (organCheck == FALSE)
- if(ishuman(src))
+ if(ishuman(src) && dna.species.id == "human")
dna.features["genitals_use_skintone"] = TRUE
dna.species.use_skintones = TRUE
return
@@ -297,8 +297,7 @@
dna.features["breasts_color"] = "#[dna.features["mcolor"]]"
return
-/datum/species/proc/handle_genitals(mob/living/carbon/human/H)
- //message_admins("attempting to update sprite")
+/datum/species/proc/handle_genitals(mob/living/carbon/human/H)//more like handle sadness
if(!H)//no args
CRASH("H = null")
if(!LAZYLEN(H.internal_organs))//if they have no organs, we're done
@@ -316,7 +315,6 @@
for(var/L in relevant_layers) //Less hardcode
H.remove_overlay(L)
//start scanning for genitals
- //var/list/worn_stuff = H.get_equipped_items()//cache this list so it's not built again
for(var/obj/item/organ/O in H.internal_organs)
if(isgenital(O))
var/obj/item/organ/genital/G = O
@@ -362,23 +360,7 @@
genital_overlay.color = "#[H.dna.features["breasts_color"]]"
if("vag_color")
genital_overlay.color = "#[H.dna.features["vag_color"]]"
- /* This was removed for some reason?
- if(MUTCOLORS)
- if(fixed_mut_color)
- genital_overlay.color = "#[fixed_mut_color]"
- else
- genital_overlay.color = "#[H.dna.features["mcolor"]]"
- if(MUTCOLORS2)
- if(fixed_mut_color2)
- genital_overlay.color = "#[fixed_mut_color2]"
- else
- genital_overlay.color = "#[H.dna.features["mcolor2"]]"
- if(MUTCOLORS3)
- if(fixed_mut_color3)
- genital_overlay.color = "#[fixed_mut_color3]"
- else
- genital_overlay.color = "#[H.dna.features["mcolor3"]]"
- */
+
standing += genital_overlay
if(LAZYLEN(standing))
H.overlays_standing[layer] = standing.Copy()
@@ -387,7 +369,7 @@
for(var/L in relevant_layers)
H.apply_overlay(L)
-/* Behold the maddness I went through.
+/* Behold the maddness I went through. This is here until the genetial problem is confirmed fixed.
/datum/species/proc/handle_breasts(mob/living/carbon/human/H)
//check for breasts first!
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
index 3ede358c88..1481ee85a6 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -37,30 +37,26 @@
. = ..()
if(!M)
return
- message_admins("adding to human [purity]")
if(src.purity < 0)
CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!")
if (src.purity == 1 || src.DoNotSplit == TRUE)
return
- else if (src.InverseChemVal > src.purity)
+ else if (src.InverseChemVal > src.purity)//Turns all of a added reagent into the inverse chem
M.reagents.remove_reagent(src.id, amount, FALSE)
M.reagents.add_reagent(src.InverseChem, amount, FALSE, other_purity = 1)
- message_admins("all convered to [src.InverseChem]")
return
else
//var/pureVol = amount * puritys
- var/impureVol = amount * (1 - purity)
- message_admins("splitting [src.id] [amount] into [src.ImpureChem] [impureVol]")
+ var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
M.reagents.remove_reagent(src.id, (impureVol), FALSE)
M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1)
return
-//When merging two fermichems
+//When merging two fermichems, see above
/datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging
. = ..()
if(!ishuman(M))
return
- message_admins("merging to human [purity]")
if (purity < 0)
CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!")
if (purity == 1 || src.DoNotSplit == TRUE)
@@ -71,12 +67,9 @@
for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
if(R.name == "")
R.name = src.name//Negative effects are hidden
- message_admins("all convered to [src.InverseChem]")
return
else
- //var/pureVol =
var/impureVol = amount * (1 - purity)
- message_admins("splitting [src] [amount] into [src.ImpureChem] [impureVol]")
M.reagents.remove_reagent(src.id, impureVol, FALSE)
M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1)
for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
@@ -85,12 +78,6 @@
return
-
-///datum/reagent/fermi/overdose_start(mob/living/carbon/M)
- //current_cycle++
-
-
-
////////////////////////////////////////////////////////////////////////////////////////////////////
// EIGENSTASIUM
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -152,7 +139,6 @@
do_sparks(5,FALSE,M)
if(prob(20))
do_sparks(5,FALSE,M)
- //message_admins("eigenstate state: [current_cycle]")
..()
/datum/reagent/fermi/eigenstate/on_mob_delete(mob/living/M) //returns back to original location
@@ -217,24 +203,20 @@
fermi_Tclone.appearance = M.appearance
C.real_name = M.real_name
M.visible_message("[M] collapses in from an alternative reality!")
- message_admins("Fermi T Clone: [fermi_Tclone]")
do_teleport(C, get_turf(C), 2, no_effects=TRUE) //teleports clone so it's hard to find the real one!
do_sparks(5,FALSE,C)
C.emote("spin")
M.emote("spin")
M.emote("me",1,"flashes into reality suddenly, gasping as they gaze around in a bewildered and highly confused fashion!",TRUE)
C.emote("me",1,"[pick("says", "cries", "mewls", "giggles", "shouts", "screams", "gasps", "moans", "whispers", "announces")], \"[pick("Bugger me, whats all this then?", "Hot damn, where is this?", "sacre bleu! O� suis-je?!", "Yee haw!", "WHAT IS HAPPENING?!", "Picnic!", "Das ist nicht deutschland. Das ist nicht akzeptabel!!!", "Ciekawe co na obiad?", "You fool! You took too much eigenstasium! You've doomed us all!", "What...what's with these teleports? It's like one of my Japanese animes...!", "Ik stond op het punt om mehki op tafel te zetten, en nu, waar ben ik?", "This must be the will of Stein's gate.", "Fermichem was a mistake", "This is one hell of a strong beepsky smash.", "Now neither of us will be virgins!")]\"")
- message_admins("Fermi T Clone: [fermi_Tclone] teleport attempt")
if(2)
var/mob/living/carbon/C = fermi_Tclone
do_sparks(5,FALSE,C)
qdel(C) //Deletes CLONE, or at least I hope it is.
- message_admins("Fermi T Clone: [fermi_Tclone] deletion attempt")
M.visible_message("[M] is snapped across to a different alternative reality!")
src.addictCyc3 = 0 //counter
fermi_Tclone = null
src.addictCyc3++
- message_admins("[src.addictCyc3]")
do_teleport(M, get_turf(M), 2, no_effects=TRUE) //Teleports player randomly
do_sparks(5,FALSE,M)
..() //loop function
@@ -344,9 +326,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
pollStarted = TRUE
candies = pollGhostCandidates("Do you want to play as a clone and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you.")
if(20 to INFINITY)
- //message_admins("Number of candidates [LAZYLEN(candies)]")
if(LAZYLEN(candies) && src.playerClone == FALSE) //If there's candidates, clone the person and put them in there!
- message_admins("Candidate found! [candies] is becomeing a clone of [M]! Hee~!! Exciting!!")
+ message_admins("Ghost candidate found! [candies] is becoming a clone of [M]! Hee~!! Exciting!!")
to_chat(M, "The cells reach a critical micelle concentration, nucleating rapidly within your body!")
//var/typepath = owner.type
//clone = new typepath(owner.loc)
@@ -405,12 +386,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
return
//BALANCE: should I make them a pacifist, or give them some cellular damage or weaknesses?
-
//after_success(user, SM)
//qdel(src)
else if(src.playerClone == FALSE) //No candidates leads to two outcomes; if there's already a braincless clone, it heals the user, as well as being a rare souce of clone healing (thematic!).
- //message_admins("Failed to find clone Candidate")
src.unitCheck = TRUE
if(M.has_status_effect(/datum/status_effect/chem/SGDF)) // Heal the user if they went to all this trouble to make it and can't get a clone, the poor fellow.
switch(current_cycle)
@@ -450,8 +429,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
M.apply_status_effect(/datum/status_effect/chem/SGDF)
if(87 to INFINITY)
M.reagents.remove_reagent(src.id, 1000)//removes SGDF on completion. Has to do it this way because of how i've coded it. If some madlab gets over 1k of SDGF, they can have the clone healing.
- message_admins("Purging SGDF [volume]")
- //message_admins("Growth nucleation occuring (SDGF), step [current_cycle] of 77")
..()
@@ -528,7 +505,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/startHunger
/datum/reagent/fermi/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
- //message_admins("SGZF ingested")
switch(current_cycle)//Pretends to be normal
if(20)
to_chat(M, "You feel the synethic cells rest uncomfortably within your body as they start to pulse and grow rapidly.")
@@ -552,7 +528,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
M.adjustToxLoss(1, 0)// the warning!
if(86)
if (!M.reagents.has_reagent("pen_acid"))//Counterplay is pent.)
- message_admins("Zombie spawned at [M.loc]")
+ message_admins("(non-infectious) Zombie spawned at [M.loc], produced by impure chem, wah!")
M.nutrition = startHunger - 500//YOU BEST BE RUNNING AWAY AFTER THIS YOU BADDIE
M.next_move_modifier = 1
to_chat(M, "Your body splits away from the cell clone of yourself, your attempted clone birthing itself violently from you as it begins to shamble around, a terrifying abomination of science.")
@@ -579,7 +555,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
to_chat(M, "A large glob of the tumour suddenly splits itself from your body. You feel grossed out and slimey...")
if(87 to INFINITY)//purges chemical fast, producing a "slime" for each one. Said slime is weak to fire. TODO: turn tumour slime into real variant.
M.adjustToxLoss(1, 0)
- //message_admins("Growth nucleation occuring (SDGF), step [current_cycle] of 20")
..()
////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -630,8 +605,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
to_chat(S, "A pair of breasts suddenly fly out of the [M]!")
//var/turf/T2 = pick(turf in view(5, M))
var/T2 = get_random_station_turf()
- M.adjustBruteLoss(5)
+ M.adjustBruteLoss(25)
M.Knockdown(50)
+ M.Stun(50)
B.throw_at(T2, 8, 1)
M.reagents.remove_reagent(src.id, 1000)
return
@@ -640,7 +616,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/obj/item/organ/genital/breasts/B = H.getorganslot("breasts")
if(!B)
H.emergent_genital_call()
- //message_admins("No breasts found on init!")
return
var/sizeConv = list("a" = 1, "b" = 2, "c" = 3, "d" = 4, "e" = 5)
B.prev_size = B.size
@@ -653,7 +628,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/mob/living/carbon/human/H = M
var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts")
if(!B) //If they don't have breasts, give them breasts.
- //message_admins("No breasts found!")
var/obj/item/organ/genital/breasts/nB = new
nB.Insert(M)
if(nB)
@@ -670,7 +644,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
M.reagents.remove_reagent(src.id, 5)
B = nB
//If they have them, increase size. If size is comically big, limit movement and rip clothes.
- //message_admins("Breast size: [B.size], [B.cached_size], [holder]")
B.cached_size = B.cached_size + 0.1
if (B.cached_size >= 8.5 && B.cached_size < 9)
if(H.w_uniform || H.wear_suit)
@@ -694,7 +667,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
if(P)
P.cached_length = P.cached_length - 0.1
- //message_admins("lewdsnek size: [P.size], [P.cached_length], [holder]")
P.update()
if(T)
T.Remove(M)
@@ -756,8 +728,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
for(var/mob/S in seen)
to_chat(S, "A penis suddenly flies out of the [M]!")
var/T2 = get_random_station_turf()
- M.adjustBruteLoss(5)
+ M.adjustBruteLoss(25)
M.Knockdown(50)
+ M.Stun(50)
P.throw_at(T2, 8, 1)
M.reagents.remove_reagent(src.id, 1000)
return
@@ -765,20 +738,17 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
H.genital_override = TRUE
var/obj/item/organ/genital/penis/P = M.getorganslot("penis")
if(!P)
- message_admins("No penis found on init!")
H.emergent_genital_call()
return
P.prev_size = P.length
P.cached_length = P.length
- message_admins("init P len chem: [P.length], prev: [P.prev_size], cache = [P.cached_length]")
/datum/reagent/fermi/PElarger/on_mob_life(mob/living/carbon/M) //Increases penis size, 5u = +1 inch.
if(!ishuman(M))
return
var/mob/living/carbon/human/H = M
var/obj/item/organ/genital/penis/P = M.getorganslot("penis")
- if(!P)
- message_admins("No penis found!")//They do have a preponderance for escapism, or so I've heard.
+ if(!P)//They do have a preponderance for escapism, or so I've heard.
var/obj/item/organ/genital/penis/nP = new
nP.Insert(M)
if(nP)
@@ -811,7 +781,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
if(B)
B.cached_size = B.cached_size - 0.1
- //message_admins("Breast size: [B.size], [B.cached_size], [holder]")
B.update()
if(V)
V.Remove(M)
@@ -1078,15 +1047,10 @@ Feel free to add more.
triggers work when said by ANYONE, not just the enchanter.
This is only state 3 pets, state 4 pets cannot get custom triggers, you broke them you bully.
-6. One other thing that I can't get to work - replacing the mention of your enthraller with Master/Mistress. Maybe it's too much trouble.
-
7. If you're an antage you get a bonus to resistance AND to enthralling. Thus it can be worth using this on both sides. It shouldn't be hard to resist as an antag. There are futher bonuses to command, Chaplains and chemist.
If you give your pet a collar then their resistance reduced too.
(I think thats everything?)
-How buggy is it?
-Probably very, it's hard to test this by myself.
-
BALANCE ISSUES:
There are none, but I'm glad you asked.
@@ -1108,6 +1072,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses"
overdose_threshold = 100 //If this is too easy to get 100u of this, then double it please.
DoNotSplit = TRUE
+ metabolization_rate = 0.1//It has to be slow, so there's time for the effect.
data = list("creatorID" = null, "creatorGender" = null, "creatorName" = null)
var/creatorID //ckey
var/creatorGender
@@ -1137,34 +1102,22 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
creator = get_mob_by_key(creatorID)
/datum/reagent/fermi/enthrall/on_new(list/data)
- message_admins("FermiNew for enthral proc'd")
creatorID = data.["creatorID"]
creatorGender = data.["creatorGender"]
creatorName = data.["creatorName"]
creator = get_mob_by_key(creatorID)
- message_admins("name: [creatorName], ID: [creatorID], gender: [creatorGender]")
- /*
- 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 holder.reagent_list
- if (B.data.["gender"] == "female")
- creatorGender = "Mistress"
- else
- creatorGender = "Master"
- creatorName = B.data.["real_name"]
- creatorID = B.data.["ckey"]
- */
+
//FERMICHEM2 split into different chems
/datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M)
. = ..()
if(!creatorID)
- message_admins("Something went wrong in enthral creation THIS SHOULD NOT APPEAR")
+ CRASH("Something went wrong in enthral creation THIS SHOULD NOT APPEAR")
return
if(!ishuman(M))//Just to make sure screwy stuff doesn't happen.
return
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall) //Somehow a beaker got here? (what)
if(E)
return
- message_admins("key: [M.ckey] vs [creatorID], ")
if(purity < 0.5)//Impure chems don't function as you expect
return
if((M.ckey == creatorID) && (creatorName == M.real_name)) //same name AND same player - same instance of the player. (should work for clones?)
@@ -1179,14 +1132,6 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
to_chat(M, "You feel your vocal chords tingle as your voice comes out in a more sultry tone.")
else
M.apply_status_effect(/datum/status_effect/chem/enthrall)
- //var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
- /*
- if(creator)
- E.enthrallID = creatorID
- E.enthrallGender = creatorGender
- E.master = creator
- */
-
/datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M)
. = ..()
@@ -1222,9 +1167,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
metabolization_rate = 0.5
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)//If purity is over 5, works as intended
if(!E)
- M.reagents.remove_reagent(src.id, 1)
- //M.apply_status_effect(/datum/status_effect/chem/enthrall)
- message_admins("No enthrall status found in [M]!")
+ return
else
E.enthrallTally += 1
if(prob(25))
@@ -1446,7 +1389,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
nT = M.getorganslot(ORGAN_SLOT_TONGUE)
nT.Remove(M)
T.Insert(M)
- to_chat(M, "You feel your tongue.... unfluffify...?"
+ to_chat(M, "You feel your tongue.... unfluffify...?")
M.say("Pleh!")
///////////////////////////////////////////////////////////////////////////////////////////////
@@ -1519,7 +1462,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
id = "fermiAcid"
description = "Someone didn't do like an otter, and add acid to water."
taste_description = "acid burns, ow"
- color = "#000000"
+ color = "#FFFFFF"
pH = 0
/datum/reagent/fermi/fermiAcid/on_mob_life(mob/living/carbon/C, method)
@@ -1592,7 +1535,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
id = "fermiTox"
description = "You should be really careful with this...! Also, how did you get this?"
data = "merge"
- color = "#000000"
+ color = "FFFFFF"
/datum/reagent/fermi/fermiTox/on_mob_life(mob/living/carbon/C, method)
if(C.dna && istype(C.dna.species, /datum/species/jelly))
@@ -1610,11 +1553,17 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
addProc = FALSE
pH = 6
-/datum/reagent/fermi/fermiABuffer/on_new(oldpH)
- if(LAZYLEN(holder.reagent_list) == 1)
+/datum/reagent/fermi/fermiABuffer/on_new()
+ message_admins("Adding acid")
+ if(LAZYLEN(holder.reagent_list) == 1)
return
- pH = ((holder.pH * holder.total_volume)+(pH * src.volume))/(holder.total_volume + src.volume)
+ src.pH = data
+ if (pH <= 3)
+ pH = 3
+ else if (pH >= 7)
+ pH = 7
+ holder.pH = ((holder.pH * holder.total_volume)+(pH * src.volume))/(holder.total_volume + src.volume) //Shouldn't be required
holder.remove_reagent(src.id, 1000)
..()
@@ -1628,35 +1577,14 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
pH = 8
/datum/reagent/fermi/fermiBBuffer/on_new()
+ message_admins("Adding base")
if(LAZYLEN(holder.reagent_list) == 1)
return
- pH = ((holder.pH * holder.total_volume)+(pH * src.volume))/(holder.total_volume + src.volume)
+ src.pH = data
+ if (pH >= 11)
+ pH = 11
+ else if (pH <= 7)
+ pH = 7
+ holder.pH = ((holder.pH * holder.total_volume)+(pH * src.volume))/(holder.total_volume + src.volume) //Shouldn't be required Might be..?
holder.remove_reagent(src.id, 1000)
..()
-
-/*
-/datum/reagent/fermi/fermiTest/on_merge()
- ..()
- message_admins("FermiTest addition!")
- var/location = get_turf(holder.my_atom)
- if(purity < 0.34 || purity == 1)
- var/datum/effect_system/foam_spread/s = new()
- s.set_up(volume*2, location, holder)
- s.start()
- if((purity < 0.67 && purity >= 0.34)|| purity == 1)
- var/datum/effect_system/smoke_spread/chem/s = new()
- s.set_up(holder, volume*2, location)
- s.start()
- if(purity >= 0.67)
- for (var/datum/reagent/reagent in holder.reagent_list)
- if (istype(reagent, /datum/reagent/fermi))
- var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id]
- Ferm.FermiExplode(src, holder.my_atom, holder, holder.total_volume, holder.chem_temp, holder.pH)
- else
- var/datum/chemical_reaction/Ferm = GLOB.chemical_reagents_list[reagent.id]
- Ferm.on_reaction(holder, reagent.volume)
- for(var/mob/M in viewers(8, location))
- to_chat(M, "The solution reacts dramatically, with a meow!")
- playsound(get_turf(M), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
- holder.clear_reagents()
- */
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index 400df70760..96d8d4c601 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -16,30 +16,12 @@
/datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
if (Exploding == TRUE)
return
+
if(!pH)//Dunno how things got here without a pH.
pH = 7
var/ImpureTot = 0
- var/pHmod = 1
+ //var/pHmod = 1
var/turf/T = get_turf(my_atom)
- message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot], containing [my_atom.reagents.reagent_list]")
- var/datum/reagents/R = new/datum/reagents(3000)//Hey, just in case.
- var/datum/effect_system/smoke_spread/chem/s = new()
- if(pH < 4) //if acidic, make acid spray
- //s.set_up(/datum/reagent/fermi/fermiAcid, (volume/3), pH*10, T)
- my_atom.reagents.add_reagent("fermiAcid", ((volume/3)/pH))
- //pHmod = 2
-
- for (var/datum/reagent/reagent in my_atom.reagents.reagent_list) //make gas for reagents
- /*if (istype(reagent, /datum/reagent/fermi))
- continue //Don't allow fermichems into the mix (fermi explosions are handled elsewhere and it's a huge pain)
- */
- //R.add_reagent(reagent, reagent.volume)
- if (reagent.purity < 0.6)
- ImpureTot = (ImpureTot + (1-reagent.purity)) / 2
- if(R.reagent_list)
- s.set_up(my_atom.reagents, (volume/10), 10, T)
- s.start()
-
if(temp>500)//if hot, start a fire
switch(temp)
if (500 to 750)
@@ -55,6 +37,26 @@
new /obj/effect/hotspot(turf)
//volume /= 5
+ message_admins("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()
+ /*Endless loop hell
+ for (var/datum/reagent/reagent in my_atom.reagents.reagent_list) //make gas for reagents
+ if (istype(reagent, /datum/reagent/fermi))
+ my_atom.reagents.remove_reagent(reagent.id, 1000)//Prevent endless loops
+ continue //Don't allow fermichems into the mix (fermi explosions are handled elsewhere and it's a huge pain)
+ //R.add_reagent(reagent, reagent.volume)
+ if (reagent.purity < 0.6)
+ ImpureTot = (ImpureTot + (1-reagent.purity)) / 2
+ */
+ if(pH < 4) //if acidic, make acid spray
+ //s.set_up(/datum/reagent/fermi/fermiAcid, (volume/3), pH*10, T)
+ R.add_reagent("fermiAcid", ((volume/3)/pH))
+ //pHmod = 2
+ if(R.reagent_list)
+ s.set_up(R, (volume/10), 10, T)
+ s.start()
+
if (pH > 10) //if alkaline, small explosion.
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round((volume/30)*(pH-9)), T, 0, 0)
@@ -86,7 +88,7 @@
CurveSharppH = 2 // How sharp the pH exponential curve is (to the power of value)
ThermicConstant = 5 //Temperature change per 1u produced
HIonRelease = -0.1 //pH change per 1u reaction
- RateUpLim = 55 //Optimal/max rate possible if all conditions are perfect (NEEDS TO BE A MULTIPLE OF 10 IF RESULTS IS DOWN BY A FACTOR OF 10)
+ RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect (NEEDS TO BE A MULTIPLE OF 10 IF RESULTS IS DOWN BY A FACTOR OF 10)
FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
FermiExplode = FALSE //If the chemical explodes in a special way
@@ -225,10 +227,10 @@
/datum/chemical_reaction/fermi/enthrall//done
name = "MKUltra"
id = "enthrall"
- results = list("enthrall" = 0.3)
- required_reagents = list("iron" = 1, "iodine" = 1)
- //required_reagents = list("cocoa" = 0.1, "astral" = 0.1, "mindbreaker" = 0.1, "psicodine" = 0.1, "happiness" = 0.1)
- required_catalysts = list("blood" = 0.1)
+ results = list("enthrall" = 0.5)
+ //required_reagents = list("iron" = 1, "iodine" = 1) Test vars
+ required_reagents = list("cocoa" = 0.1, "astral" = 0.1, "mindbreaker" = 0.1, "psicodine" = 0.1, "happiness" = 0.1)
+ required_catalysts = list("blood" = 1)
mix_message = "the reaction gives off a burgundy plume of smoke!"
//FermiChem vars:
OptimalTempMin = 780
@@ -340,7 +342,7 @@
/datum/chemical_reaction/fermi/naninte_b_gone//done test
name = "Naninte bain"
id = "naninte_b_gone"
- results = list("naninte_b_gone" = 20)
+ results = list("naninte_b_gone" = 2)
required_reagents = list("synthflesh" = 5, "uranium" = 5, "iron" = 5, "salglu_solution" = 5)
mix_message = "the reaction gurgles, encapsulating the reagents in flesh before the emp can be set off."
required_temp = 499//To force fermireactions before EMP.
@@ -356,7 +358,7 @@
CurveSharppH = 1
ThermicConstant = 5
HIonRelease = 0.01
- RateUpLim = 20
+ RateUpLim = 2
FermiChem = TRUE
PurityMin = 0.15
@@ -387,6 +389,10 @@
Fa.pH = 3
Fa.data = 3
return
+ else if (Fa.pH >= 7)
+ Fa.pH = 7
+ Fa.data = 7
+ return
Fa.pH = my_atom.reagents.pH
Fa.data = Fa.pH
@@ -395,7 +401,7 @@
id = "fermiBBuffer"
results = list("fermiBBuffer" = 15)
required_reagents = list("fermiABuffer" = 5, "ethanol" = 5, "salglu_solution" = 1, "water" = 5)
- required_catalysts = list("sacid" = 5) //vagely acetic
+ required_catalysts = list("sacid" = 1) //vagely acetic
//FermiChem vars:
OptimalTempMin = 250
OptimalTempMax = 500
@@ -418,5 +424,8 @@
Fb.pH = 11
Fb.data = 11
return
+ else if (Fb.pH <= 7)
+ Fb.pH = 7
+ Fb.data = 7
Fb.pH = my_atom.reagents.pH
Fb.data = Fb.pH
diff --git a/tgstation.dme b/tgstation.dme
index 1eb169aa9e..d03359e2fa 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2820,7 +2820,6 @@
#include "modular_citadel\code\datums\status_effects\debuffs.dm"
#include "modular_citadel\code\datums\traits\negative.dm"
#include "modular_citadel\code\datums\traits\neutral.dm"
-#include "modular_citadel\code\datums\traits\positive.dm"
#include "modular_citadel\code\datums\wires\airlock.dm"
#include "modular_citadel\code\datums\wires\autoylathe.dm"
#include "modular_citadel\code\game\area\cit_areas.dm"