diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 47de0e605f..d8d72146b5 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -313,118 +313,3 @@
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" = 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" = 1)
- required_temp = 600
- 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
-
-/datum/chemical_reaction/fermi/secretcatchem/New()
- //rand doesn't seem to work with n^-e
- OptimalTempMin += rand(-100, 100)
- OptimalTempMax = (OptimalTempMin+rand(0, 200))
- ExplodeTemp = (OptimalTempMax+rand(0, 200))
- OptimalpHMin += rand(1, 10)
- OptimalpHMax = (OptimalpHMin + rand(1, 5))
- ReactpHLim += rand(-2, 2)
- CurveSharpT += (rand(1, 500)/100)
- CurveSharppH += (rand(1, 500)/100)
- ThermicConstant += rand(-50, 50)
- HIonRelease += (rand(-25, 25)/100)
- RateUpLim += (rand(1, 1000)/100)
- PurityMin += (rand(-1, 1)/10)
- var/additions = list("aluminium", "silver", "gold", "plasma", "silicon", "bluespace", "uranium", "milk")
- required_reagents[pick(additions)] = rand(1, 5)//weird
-
-/datum/chemical_reaction/fermi/secretcatchem/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
- SSblackbox.record_feedback("catgirlium", "catgirlium made!")//log
-
-//ReagentVars
-//Turns you into a cute catto while it's in your system.
-//If you manage to gamble perfectly, makes you a catgirl after you transform back. But really, you shouldn't end up with that with how random it is.
-/datum/reagent/fermi/secretcatchem //Should I hide this from code divers? A secret cit chem?
- name = "secretcatchem" //an attempt at hiding it
- id = "secretcatchem"
- description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed."
- taste_description = "hairballs and cream"
- color = "#ffc224"
- var/catshift = FALSE
- 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")]"
-
-/datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H)
- . = ..()
- var/current_species = H.dna.species.type
- var/datum/species/mutation = /datum/species/human/felinid
- 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. It already requires felind too, so no new functionality there.
- H.set_species(mutation)
- H.gender = FEMALE
- //exception(al) handler:
- 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)
- catto.name = H.name
- catto.desc = "A cute catto! They remind you of [H] somehow."
- catto.color = "#[H.dna.features["mcolor"]]"
- H.moveToNullspace()
-
-/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.say("lets out a meowrowr!*")
- ..()
-
-/datum/reagent/fermi/secretcatchem/on_mob_delete(mob/living/carbon/H)
- var/words = "Your body shifts back to normal."
- H.forceMove(catto.loc)
- catto.mind.transfer_to(H)
- if(catshift == TRUE)
- 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_any(10)
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index e4c8e1b3b2..06ca536eee 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -214,7 +214,7 @@
enthrallGender = E.creatorGender
master = get_mob_by_key(enthrallID)
if(M.ckey == enthrallID)
- owner.remove_status_effect(src)//This shouldn't happen, but just in case
+ owner.remove_status_effect(src)//This shouldn't happen, but just in case, also it's not worth the overhead of giving someone themselves; they can't proc themselves as velvet removes them from the list.
redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed#
RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear)
var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN) //It's their brain!
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 352f7f25ea..f748dd6a33 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -1381,8 +1381,10 @@ Creating a chem with a low purity will make you permanently fall in love with so
/datum/reagent/fermi/fermiAcid/reaction_obj(obj/O, reac_volume)
if(ismob(O.loc)) //handled in human acid_act()
return
+ if((holder.pH > 5) || (volume < 0.1)) //Shouldn't happen, but just in case
+ return
reac_volume = round(volume,0.1)
- var/acidstr = (5-holder.pH)
+ var/acidstr = (5-holder.pH)*2 //(max is 10)
O.acid_act(acidstr, volume)
..()
@@ -1483,3 +1485,61 @@ Creating a chem with a low purity will make you permanently fall in love with so
playsound(get_turf(holder.my_atom), 'sound/FermiChem/bufferadd.ogg', 50, 1)
holder.remove_reagent(src.id, src.volume)
..()
+
+//ReagentVars
+//Turns you into a cute catto while it's in your system.
+//If you manage to gamble perfectly, makes you a catgirl after you transform back. But really, you shouldn't end up with that with how random it is.
+/datum/reagent/fermi/secretcatchem //Should I hide this from code divers? A secret cit chem?
+ name = "secretcatchem" //an attempt at hiding it
+ id = "secretcatchem"
+ description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed."
+ taste_description = "hairballs and cream"
+ color = "#ffc224"
+ var/catshift = FALSE
+ var/mob/living/simple_animal/pet/cat/custom_cat/catto = null
+
+/datum/reagent/fermi/secretcatchem/New()
+ name = "Catbalti[pick("a","u","e","y")]m [pick("apex", "prime", "meow")]"
+
+/datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H)
+ . = ..()
+ var/current_species = H.dna.species.type
+ var/datum/species/mutation = /datum/species/human/felinid
+ if((mutation != current_species) && (purity >= 0.8))//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. It already requires felind too, so no new functionality there.
+ H.set_species(mutation)
+ H.gender = FEMALE
+ //exception(al) handler:
+ 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)
+ catto.name = H.name
+ catto.desc = "A cute catto! They remind you of [H] somehow."
+ catto.color = "#[H.dna.features["mcolor"]]"
+ H.moveToNullspace()
+
+/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.say("lets out a meowrowr!*")
+ ..()
+
+/datum/reagent/fermi/secretcatchem/on_mob_delete(mob/living/carbon/H)
+ var/words = "Your body shifts back to normal."
+ H.forceMove(catto.loc)
+ catto.mind.transfer_to(H)
+ if(catshift == TRUE)
+ words += " ...But wait, are those ears and a tail?"
+ H.say("*wag")//force update sprites.
+ to_chat(H, "[words]")
+ qdel(catto)
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index b3662e5703..b9383ea430 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -39,18 +39,19 @@
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()
+ R.my_atom = my_atom //Give the gas a fingerprint
- for (var/datum/reagent/reagent in my_atom.reagents.reagent_list) //make gas for reagents
+ for (var/datum/reagent/reagent in my_atom.reagents.reagent_list) //make gas for reagents, has to be done this way, otherwise it never stops Exploding
R.add_reagent(reagent.id, reagent.volume/3) //Seems fine? I think I fixed the infinite explosion bug.
if (reagent.purity < 0.6)
ImpureTot = (ImpureTot + (1-reagent.purity)) / 2
if(pH < 4) //if acidic, make acid spray
- R.add_reagent("fermiAcid", ((volume/3)/pH))
+ R.add_reagent("fermiAcid", (volume/3))
if(R.reagent_list)
message_admins("gas")
- s.set_up(R, (volume/10), T)
+ s.set_up(R, (volume/10), my_atom)
s.start()
if (pH > 10) //if alkaline, small explosion.
@@ -403,3 +404,60 @@
/datum/chemical_reaction/fermi/fermiBBuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this
var/datum/reagent/fermi/fermiBBuffer/Fb = locate(/datum/reagent/fermi/fermiBBuffer) in my_atom.reagents.reagent_list
Fb.data = 11
+
+//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" = 0.5)
+ required_reagents = list("stable_plasma" = 0.1, "sugar" = 0.1, "cream" = 0.1, "blood" = 0.1, "slimejelly" = 0.1)//Yes this will make a plushie if you don't lucky guess. It'll eat all your reagents too.
+ required_catalysts = list("felinidmutationtoxin" = 1)
+ required_temp = 600
+ 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
+
+/datum/chemical_reaction/fermi/secretcatchem/New()
+ //rand doesn't seem to work with n^-e
+ OptimalTempMin += rand(-100, 100)
+ OptimalTempMax = (OptimalTempMin+rand(0, 200))
+ ExplodeTemp = (OptimalTempMax+rand(0, 200))
+ OptimalpHMin += rand(1, 10)
+ OptimalpHMax = (OptimalpHMin + rand(1, 5))
+ ReactpHLim += rand(-2, 2)
+ CurveSharpT += (rand(1, 500)/100)
+ CurveSharppH += (rand(1, 500)/100)
+ ThermicConstant += rand(-50, 50)
+ HIonRelease += (rand(-25, 25)/100)
+ RateUpLim += (rand(1, 1000)/100)
+ PurityMin += (rand(-1, 1)/10)
+ var/additions = list("aluminium", "silver", "gold", "plasma", "silicon", "bluespace", "uranium", "milk")
+ required_reagents[pick(additions)] = rand(1, 5)//weird
+
+/datum/chemical_reaction/fermi/secretcatchem/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
+ 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))
+ 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_any(10)