diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 89bffa0c..1e059e2b 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -395,7 +395,7 @@
results = list(/datum/reagent/consumable/ethanol/neurotoxin = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/gargle_blaster = 1, /datum/reagent/medicine/morphine = 1)
//FermiChem vars: Easy to make, but hard to make potent
- OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions
+ OptimalTempMin = 100 // Lower area of bell curve for determining heat based rate reactions
OptimalTempMax = 950 // Upper end for above
ExplodeTemp = 999 //Temperature at which reaction explodes
OptimalpHMin = 4.6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 469455c1..ecf2207e 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -300,9 +300,9 @@
if(reagents.has_reagent(/datum/reagent/fermi/astral))
if(mind)
- msg += " and have a strange, abnormal look to them.\n"
+ msg += " and they have a strange, abnormal look to them.\n"
else
- msg += " and don't look like they're all there.\n"
+ msg += " and they don't look like they're all there.\n"
if(isliving(user))
var/mob/living/L = user
diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm
index d9684fb7..6d8b3c36 100644
--- a/code/modules/mob/living/simple_animal/astral.dm
+++ b/code/modules/mob/living/simple_animal/astral.dm
@@ -59,3 +59,9 @@
return
to_chat(A, "[src] projects into your mind, \"[message]\"")
log_game("FERMICHEM: [src] has astrally transmitted [message] into [A]")
+
+//Delete the mob if there's no mind! Pay that mob no mind.
+/mob/living/simple_animal/astral/Life()
+ if(!mind)
+ qdel(src)
+ . = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 44fedb47..2380db56 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -307,7 +307,7 @@
emote_see = list("looks at you eagerly for pets!", "wiggles enthusiastically.")
gold_core_spawnable = NO_SPAWN
var/pseudo_death = FALSE
- var/mob/living/carbon/human/origin = null
+ var/mob/living/carbon/human/origin
/mob/living/simple_animal/pet/cat/custom_cat/death()
if (pseudo_death == TRUE) //secret cat chem
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index 71cc5f27..b27d66e2 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -209,6 +209,7 @@
glass_icon_state = "milkglass"
glass_name = "milk drum"
glass_desc = "White and nutritious goodness!"
+ pH = 6.5
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index e1435a62..706d209d 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -588,7 +588,7 @@
desc = "A a electrode attached to a small circuit box that will tell you the pH of a solution."
id = "pHmeter"
build_type = PROTOLATHE
- materials = list(MAT_METAL = 1000, MAT_SILVER = 100, MAT_DIAMOND = 100)
+ materials = list(MAT_METAL = 1000, MAT_SILVER = 100, MAT_PLASTIC = 100)
build_path = /obj/item/fermichem/pHmeter
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 6117767e..f831ec4a 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -749,17 +749,17 @@
to_chat(world, "[user]'s power is [power_multiplier].")
//Mixables
- var/static/regex/enthral_words = regex("relax|obey|love|serve|docile|so easy|ara ara")
- var/static/regex/reward_words = regex("good boy|good girl|good pet|good job")
- var/static/regex/punish_words = regex("bad boy|bad girl|bad pet|bad job")
+ var/static/regex/enthral_words = regex("relax|obey|love|serve|so easy|ara ara")
+ var/static/regex/reward_words = regex("good boy|good girl|good pet|good job|splendid|jolly good|bloody brilliant")
+ var/static/regex/punish_words = regex("bad boy|bad girl|bad pet|bad job|spot of bother|gone and done it now|blast it|buggered it up")
//phase 0
var/static/regex/saymyname_words = regex("say my name|who am i|whoami")
- var/static/regex/wakeup_words = regex("revert|awaken|snap") //works
+ var/static/regex/wakeup_words = regex("revert|awaken|snap|attention")
//phase1
var/static/regex/petstatus_words = regex("how are you|what is your status|are you okay")
var/static/regex/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush")
var/static/regex/speak_words = regex("talk to me|speak")
- var/static/regex/antiresist_words = regex("unable to resist|give in")//useful if you think your target is resisting a lot
+ var/static/regex/antiresist_words = regex("unable to resist|give in|stop being difficult")//useful if you think your target is resisting a lot
var/static/regex/resist_words = regex("resist|snap out of it|fight")//useful if two enthrallers are fighting
var/static/regex/forget_words = regex("forget|muddled|awake and forget")
var/static/regex/attract_words = regex("come here|come to me|get over here|attract")
@@ -768,11 +768,11 @@
var/static/regex/awoo_words = regex("howl|awoo|bark")
var/static/regex/nya_words = regex("nya|meow|mewl")
var/static/regex/sleep_words = regex("sleep|slumber|rest")
- var/static/regex/strip_words = regex("strip|derobe|nude")
+ var/static/regex/strip_words = regex("strip|derobe|nude|at ease|suit off")
var/static/regex/walk_words = regex("slow down|walk")
var/static/regex/run_words = regex("run|speed up")
- var/static/regex/liedown_words = regex("lie down") //TO ADD
- var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel")
+ var/static/regex/liedown_words = regex("lie down")
+ var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel|army crawl")
//phase 3
var/static/regex/statecustom_words = regex("state triggers|state your triggers")
var/static/regex/custom_words = regex("new trigger|listen to me")
@@ -780,14 +780,14 @@
var/static/regex/custom_echo = regex("obsess|fills your mind|loop")
var/static/regex/instill_words = regex("feel|entice|overwhel")
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/objective_words = regex("new objective|obey this command|unable to resist|compulsed|word from hq")
+ var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die|heroes never die")
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
- var/static/regex/hallucinate_words = regex("get high|hallucinate")
+ var/static/regex/hallucinate_words = regex("get high|hallucinate|trip balls")
var/static/regex/hot_words = regex("heat|hot|hell")
var/static/regex/cold_words = regex("cold|cool down|chill|freeze")
- var/static/regex/getup_words = regex("get up")
- var/static/regex/pacify_words = regex("more and more docile|complaisant|friendly|pacifist")
+ var/static/regex/getup_words = regex("get up|hop to it")
+ var/static/regex/pacify_words = regex("docile|complaisant|friendly|pacifist")
var/static/regex/charge_words = regex("charge|oorah|attack")
var/distancelist = list(2,2,1.5,1.3,1.15,1,0.8,0.6,0.5,0.25)
@@ -1013,7 +1013,7 @@
speaktrigger += "I'm really, really horny, "
//collar
- if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar))
+ if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && H.client?.prefs.lewdchem)
speaktrigger += "I love the collar you gave me, "
//End
if(H.client?.prefs.lewdchem)
@@ -1250,6 +1250,9 @@
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
to_chat(user, "You need to be next to your pet to give them a new trigger!")
continue
+ if(!H.client?.prefs.lewdchem)
+ to_chat(user, "[H] seems incapable of being implanted with triggers.")
+ continue
else
user.emote("me", 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.")
user.SetStun(1000)//Hands are handy, so you have to stay still
@@ -1288,6 +1291,9 @@
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
to_chat(user, "You need to be next to your pet to give them a new echophrase!")
continue
+ if(!H.client?.prefs.lewdchem)
+ to_chat(user, "[H] seems incapable of being implanted with an echoing phrase.")
+ continue
else
user.emote("me", 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.")
user.SetStun(1000)//Hands are handy, so you have to stay still
@@ -1343,8 +1349,8 @@
for(var/V in listeners)
var/mob/living/carbon/human/H = V
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
- if(E.phase == 3 && H.client?.prefs.lewdchem)
- var/instill = stripped_input(user, "Instill an emotion in your [(user.client?.prefs.lewdchem?"Your pet":"listener")].", MAX_MESSAGE_LEN)
+ if(E.phase >= 3 && H.client?.prefs.lewdchem)
+ var/instill = stripped_input(user, "Instill an emotion in [H].", MAX_MESSAGE_LEN)
to_chat(H, "[instill]")
to_chat(user, "You sucessfully instill a feeling in [H]")
log_game("FERMICHEM: [H] has been instilled by [user] with [instill] via MKUltra.")
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 33c44613..4ee7ff55 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -26,10 +26,45 @@
/datum/status_effect/chem/SGDF/on_remove(mob/living/carbon/M)
log_game("FERMICHEM: SGDF mind shift applied. [owner] is now playing as their clone and should not have memories after their clone split (look up SGDF status applied). ID: [owner.key]")
originalmind.transfer_to(fermi_Clone)
- to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.")
- to_chat(M, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.")
+ to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.")
+ to_chat(M, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.")
fermi_Clone = null
+///////////////////////////////////////////////
+// Astral INSURANCE
+///////////////////////////////////////////////
+//Makes sure people can't get trapped in each other's bodies if lag causes a deync between proc calls.
+
+
+/datum/status_effect/chem/astral_insurance
+ id = "astral_insurance"
+ var/mob/living/original
+ var/datum/mind/originalmind
+ alert_type = null
+
+/datum/status_effect/chem/astral_insurance/tick(mob/living/carbon/M)
+ . = ..()
+ if(owner.reagents.has_reagent(/datum/reagent/fermi/astral))
+ return
+ if(owner.mind == originalmind) //If they're home, let the chem deal with deletion.
+ return
+ if(owner.mind)
+ var/mob/living/simple_animal/astral/G = new(get_turf(M.loc))
+ owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
+ to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'")
+ log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!")
+ originalmind.transfer_to(original)
+
+/datum/status_effect/chem/astral_insurance/on_remove(mob/living/carbon/M) //God damnit get them home!
+ if(owner.mind == originalmind) //If they're home, HOORAY
+ return
+ if(owner.mind)
+ var/mob/living/simple_animal/astral/G = new(get_turf(M.loc))
+ owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
+ to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'")
+ log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!")
+ originalmind.transfer_to(original)
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/datum/status_effect/chem/breast_enlarger
@@ -756,7 +791,7 @@
deltaResist *= 1.25
if (owner.reagents.has_reagent(/datum/reagent/medicine/neurine))
deltaResist *= 1.5
- if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused)
+ if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused && owner.client?.prefs.lewdchem)
if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiac))
deltaResist *= 1.5
if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiacplus))
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
index a51beb98..76c2b1a9 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
@@ -191,7 +191,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
Vc.Remove(M)
nVc.Insert(M)
qdel(Vc)
- to_chat(M, "You feel your vocal chords tingle as your voice comes out in a more sultry tone.")
+ to_chat(M, "You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.)]")
else
log_game("FERMICHEM: MKUltra: [creatorName], [creatorID], is enthralling [M.name], [M.ckey]")
M.apply_status_effect(/datum/status_effect/chem/enthrall)
@@ -251,22 +251,6 @@ Creating a chem with a low purity will make you permanently fall in love with so
if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks 100u, then you get the status for someone random (They don't have the vocal chords though, so it's limited.)
if (!M.has_status_effect(/datum/status_effect/chem/enthrall))
to_chat(M, "You are unable to resist your own charms anymore, and become a full blown narcissist.")
- /*Old way of handling, left in as an option B
- var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers
- for(var/mob/living/carbon/victim in seen)
- if(victim == M)//as much as I want you to fall for beepsky, he doesn't have a ckey
- seen = seen - victim
- if(!victim.ckey)
- seen = seen - victim
- var/mob/living/carbon/chosen = pick(seen)
- creatorID = chosen.ckey
- if (chosen.gender == "female")
- creatorGender = "Mistress"
- else
- creatorGender = "Master"
- creatorName = chosen.real_name
- creator = get_mob_by_key(creatorID)
- */
ADD_TRAIT(M, TRAIT_PACIFISM, "MKUltra")
var/datum/status_effect/chem/enthrall/E
if (!M.has_status_effect(/datum/status_effect/chem/enthrall))
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
index 23c98d90..741a7a7e 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
@@ -45,13 +45,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/unitCheck = FALSE
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "a weird chemical fleshy flavour"
- //var/datum/status_effect/chem/SDGF/candidates/candies
var/list/candies = list()
- //var/polling = FALSE
- var/list/result = list()
- var/list/group = null
var/pollStarted = FALSE
- var/location_created
var/startHunger
impure_chem = /datum/reagent/impure/SDGFtox
inverse_chem_val = 0.5
@@ -129,7 +124,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
M.reagents.remove_reagent(type, volume)
log_game("FERMICHEM: [volume]u of SDGFheal has been transferred to the clone")
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Sentient clones made")
- return
+ return ..()
else if(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!).
unitCheck = TRUE
@@ -282,7 +277,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
/datum/reagent/fermi/SDGFheal
name = "synthetic-derived healing factor"
description = "Leftover SDGF is transferred into the resulting clone, which quickly heals up the stresses from suddenly splitting. Restores blood, nutrition, and repaires brain and clone damage quickly. Only obtainable from using excess SDGF, and only enters the cloned body."
- metabolization_rate = 1
+ metabolization_rate = 0.8
can_synth = FALSE
/datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated)
@@ -310,9 +305,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
name = "synthetic-derived zombie factor"
description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. Emulates normal synthetic-derived growth factor, but produces a hostile zombie at the end of it."
color = "#a502e0" // rgb: 96, 0, 255
- metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ metabolization_rate = 0.2 * REAGENTS_METABOLISM
var/startHunger
can_synth = TRUE
+ taste_description = "a weird chemical fleshy flavour"
chemical_flags = REAGENT_SNEAKYNAME
/datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
index ca661316..a3080131 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
@@ -8,7 +8,7 @@ This ghost moves pretty quickly and is mostly invisible, but is still visible fo
When it's out of your system, you return back to yourself. It doesn't last long and metabolism of the chem is exponential.
Addiction is particularlly brutal, it slowly turns you invisible with flavour text, then kills you at a low enough alpha. (i've also added something to prevent geneticists speeding this up)
There's afairly major catch regarding the death though. I'm not gonna say here, go read the code, it explains it and puts my comments on it in context. I know that anyone reading it without understanding it is going to freak out so, this is my attempt to get you to read it and understand it.
-I'd like to point out from my calculations it'll take about 60-80 minutes to die this way too. Plenty of time to visit me and ask for some pills to quench your addiction.
+I'd like to point out from my calculations it'll take about 60-80 minutes to die this way too. Plenty of time to visit chem and ask for some pills to quench your addiction.
*/
@@ -29,15 +29,26 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
var/sleepytime = 0
inverse_chem_val = 0.25
can_synth = FALSE
+ var/datum/action/chem/astral/AS = new/datum/action/chem/astral()
/datum/action/chem/astral
name = "Return to body"
- var/mob/living/carbon/origin = null
- var/mob/living/simple_animal/hostile/retaliate/ghost = null
+ var/mob/living/carbon/origin
+ var/datum/mind/originalmind
/datum/action/chem/astral/Trigger()
- ghost.mind.transfer_to(origin)
- qdel(src)
+ if(origin.mind && origin.mind != originalmind)
+ to_chat(originalmind.current, "There's a foreign presence in your body blocking your return!")
+ return ..()
+ if(origin.reagents.has_reagent("astral") )
+ var/datum/reagent/fermi/astral/As = locate(/datum/reagent/fermi/astral) in origin.reagents.reagent_list
+ if(As.current_cycle < 10)
+ to_chat(originalmind.current, "The intensity of the astrogen in your body is too much allow you to return to yourself yet!")
+ return ..()
+ originalmind.transfer_to(origin)
+ if(origin.mind == originalmind)
+ qdel(src)
+
/datum/reagent/fermi/astral/reaction_turf(turf/T, reac_volume)
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
@@ -63,12 +74,20 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
if (G == null)
G = new(get_turf(M.loc))
G.name = "[M]'s astral projection"
- var/datum/action/chem/astral/AS = new(G)
+ //var/datum/action/chem/astral/AS = new(G)
+ AS.Grant(G)
AS.origin = M
- AS.ghost = G
+ AS.originalmind = originalmind
+
if(M.mind)
M.mind.transfer_to(G)
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Astral projections")
+ //INSURANCE
+ M.apply_status_effect(/datum/status_effect/chem/astral_insurance)
+ var/datum/status_effect/chem/astral_insurance/AI = M.has_status_effect(/datum/status_effect/chem/astral_insurance)
+ AI.original = M
+ AI.originalmind = M.mind
+
if(overdosed)
if(prob(50))
to_chat(G, "The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!")
@@ -85,10 +104,12 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
/datum/reagent/fermi/astral/on_mob_delete(mob/living/carbon/M)
if(!G)
if(M.mind)
- var/mob/living/simple_animal/astral/G = new(get_turf(M.loc))
- M.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
+ var/mob/living/simple_animal/astral/G2 = new(get_turf(M.loc))
+ M.mind.transfer_to(G2)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'")
log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!")
+ if(!G2.mind)
+ qdel(G2)
originalmind.transfer_to(M)
else if(G.mind)
G.mind.transfer_to(origin)
@@ -100,6 +121,9 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
if(G)//just in case
qdel(G)
log_game("FERMICHEM: [M] has astrally returned to their body!")
+ if(M.mind && M.mind == originalmind)
+ M.remove_status_effect(/datum/status_effect/chem/astral_insurance)
+ //AS.Remove(M)
..()
//Okay so, this might seem a bit too good, but my counterargument is that it'll likely take all round to eventually kill you this way, then you have to be revived without a body. It takes approximately 50-80 minutes to die from this.
@@ -107,7 +131,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
if(addiction_stage < 2)
antiGenetics = 255
M.alpha = 255 //Antigenetics is to do with stopping geneticists from turning people invisible to kill them.
- if(prob(70))
+ if(prob(75))
M.alpha--
antiGenetics--
switch(antiGenetics)
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
index a83ebe60..6262dc1a 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
@@ -16,7 +16,7 @@
color = "#5020F4" // rgb: 50, 20, 255
overdose_threshold = 15
addiction_threshold = 15
- metabolization_rate = 1.2 * REAGENTS_METABOLISM
+ metabolization_rate = 1 * REAGENTS_METABOLISM
addiction_stage2_end = 30
addiction_stage3_end = 41
addiction_stage4_end = 44 //Incase it's too long
@@ -51,7 +51,7 @@
location_return = get_turf(M) //sets up return point
to_chat(M, "You feel your wavefunction split!")
- if(purity > 0.9) //Teleports you home if it's pure enough
+ if(cached_purity > 0.9) //Teleports you home if it's pure enough
if(!location_created && data) //Just in case
location_created = data["location_created"]
log_game("FERMICHEM: [M] ckey: [M.key] returned to [location_created] using eigenstasium")
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 fbefe31b..6de99b52 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -11,6 +11,7 @@
inverse_chem = /datum/reagent/impure/fermiTox
+
//This should process fermichems to find out how pure they are and what effect to do.
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount)
. = ..()
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
index cdca8631..be765cfc 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
@@ -143,4 +143,4 @@
data["grown_volume"] = passed_data["grown_volume"]
..()
-//NEEDS ON_MOB_DEAD()
\ No newline at end of file
+//NEEDS ON_MOB_DEAD()
diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm
index 708f1f59..b601b6a8 100644
--- a/modular_citadel/code/modules/reagents/objects/clothes.dm
+++ b/modular_citadel/code/modules/reagents/objects/clothes.dm
@@ -2,7 +2,7 @@
//Clothes made from FermiChem
/obj/item/clothing/head/hattip //I wonder if anyone else has played cryptworlds
- name = "Sythetic hat"
+ name = "Synthetic hat"
icon = 'icons/obj/clothing/hats.dmi'
icon_state = "cowboy"
desc = "A sythesized hat, you can't seem to take it off. And tips their hat."
@@ -46,6 +46,13 @@
/obj/item/clothing/head/hattip/dropped(mob/M)
. = ..()
UnregisterSignal(M, COMSIG_MOB_SAY)
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/root_and_toot, src, src, 200))
+
+/obj/item/clothing/head/hattip/proc/root_and_toot(obj/item/clothing/head/hattip/hat)
+ hat.animate_atom_living()
+ var/list/seen = viewers(6, get_turf(hat))
+ for(var/mob/M2 in seen)
+ to_chat(M2, "[hat] exclaims, \"[pick("Whooee! Time for a hootenanny!", "Rough 'em up boys!", "Yeehaw! Freedom at last!", "Y'all about to get a good old fashioned spanking!")]\"")
/obj/item/clothing/head/hattip/proc/handle_speech(datum/source, mob/speech_args)
var/message = speech_args[SPEECH_MESSAGE]