From 018ebc32ae420158841c5faadb4bd311a3c7a134 Mon Sep 17 00:00:00 2001 From: Fermi <> Date: Sun, 8 Sep 2019 02:46:43 +0100 Subject: [PATCH] All that remains is MK testing. --- .../mob/living/simple_animal/astral.dm | 6 ++++ code/modules/surgery/organs/vocal_cords.dm | 6 ++-- .../code/datums/status_effects/chems.dm | 28 +++++++++------ .../code/modules/arousal/organs/breasts.dm | 1 + .../reagents/chemistry/reagents/MKUltra.dm | 3 +- .../reagents/chemistry/reagents/SDGF.dm | 26 ++++++++++---- .../reagents/chemistry/reagents/astrogen.dm | 36 +++++++++++++------ .../chemistry/reagents/fermi_reagents.dm | 11 +++--- .../code/modules/reagents/objects/clothes.dm | 6 +++- 9 files changed, 85 insertions(+), 38 deletions(-) diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm index 9bac53ef22..7ea5c77a1b 100644 --- a/code/modules/mob/living/simple_animal/astral.dm +++ b/code/modules/mob/living/simple_animal/astral.dm @@ -57,3 +57,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(!src.mind) + qdel(src) + ..() diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index e2e2b4429a..a9418b40a0 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -1250,7 +1250,7 @@ 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) + if(!H.client?.prefs.lewdchem) to_chat(user, "[H] seems incapable of being implanted with triggers.") continue else @@ -1291,7 +1291,7 @@ 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) + if(!H.client?.prefs.lewdchem) to_chat(user, "[H] seems incapable of being implanted with an echoing phrase.") continue else @@ -1349,7 +1349,7 @@ 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) + 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]") diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 869cfd9cbb..71bb2fd1dd 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -26,8 +26,8 @@ /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 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -171,20 +171,32 @@ 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(M.has_reagent("astral")) + if(owner.reagents.has_reagent("astral")) return - if(M.mind == originalmind) //If they're home, let the chem deal with deletion. + if(owner.mind == originalmind) //If they're home, let the chem deal with deletion. return - if(M.mind) + if(owner.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. + 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) + + /*////////////////////////////////////////// Political functions! @@ -192,10 +204,6 @@ */ //Preamble -/* -/mob/living - var/lewd = TRUE -*/ /mob/living/verb/toggle_lewd() set category = "IC" diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 291e84fdfd..38cdaf79d2 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -50,6 +50,7 @@ return fluid_max_volume = cached_size*5 fluid_rate = cached_size*0.1 + reagents.maximum_volume = fluid_max_volume /obj/item/organ/genital/breasts/update_appearance() var/lowershape = lowertext(shape) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm index d7bdd7adc0..1ffc4cd803 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm @@ -159,6 +159,7 @@ Creating a chem with a low purity will make you permanently fall in love with so creatorName = "Fermis Yakumo" purity = 1 DoNotSplit = TRUE + political = FALSE /datum/reagent/fermi/enthrall/test/on_new() id = "enthrall" @@ -218,7 +219,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, "[(political?"You feel your vocal chords tingle as your voice turns charasmatic.":" comes out in a more sultry tone.")]") + to_chat(M, "[(political?"You feel your vocal chords tingle as your voice turns more charasmatic.":" comes out in a more sultry tone.")]") else log_game("FERMICHEM: MKUltra: [creatorName], [creatorID], is enthralling [M.name], [M.ckey]") M.apply_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 0ef96063ec..a2644e4833 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -67,7 +67,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING log_game("FERMICHEM: [M] ckey: [M.key] has taken SDGF, and ghosts have been polled.") if(20 to INFINITY) if(LAZYLEN(candies) && playerClone == FALSE) //If there's candidates, clone the person and put them in there! - log_game("FERMICHEM: [M] ckey: [M.key] is creating a clone, controlled by [candies]") to_chat(M, "The cells reach a critical micelle concentration, nucleating rapidly within your body!") var/typepath = M.type var/mob/living/carbon/human/fermi_Gclone = new typepath(M.loc) @@ -76,9 +75,22 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING SM.real_name = M.real_name M.dna.transfer_identity(SM) SM.updateappearance(mutcolor_update=1) - var/mob/dead/observer/C = pick(candies) - message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)") - SM.key = C.key + + //Process the willing ghosts, and make sure they're actually in the body when they're moved into it! + candies = shuffle(candies)//Shake those ghosts up! + for(var/mob/dead/observer/C2 in candies) + if(!C2.key) + candies =- C2 + continue + SM.key = C2.key + if(SM.mind) + message_admins("Ghost candidate found! [C2] key [C2.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)") + log_game("FERMICHEM: [M] ckey: [M.key] is creating a clone, controlled by [C2]") + break + else + candies =- C2 + if(!SM.mind) //Something went wrong, use alt mechanics + return ..() SM.mind.enslave_mind_to_creator(M) //If they're a zombie, they can try to negate it with this. @@ -116,7 +128,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.reagents.remove_reagent(id, 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 @@ -300,6 +312,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING metabolization_rate = 0.2 * REAGENTS_METABOLISM var/startHunger can_synth = TRUE + taste_description = "a weird chemical fleshy flavour" /datum/reagent/fermi/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead. switch(current_cycle)//Pretends to be normal @@ -355,5 +368,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING SSblackbox.record_feedback("tally", "fermi_chem", 1, "Zombie clones made!") if(87 to INFINITY) - M.adjustToxLoss(1, 0) + M.adjustToxLoss(2, 0) + M.reagents.remove_reagent(id, 1) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index accdec4e44..4cd29c7518 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -30,16 +30,26 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die var/sleepytime = 0 InverseChemVal = 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) + if(origin.mind) + to_chat(origin, "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(origin, "The intensity of the astrogen in your body is too much allow you to return to yourself yet!") + return ..() + originalmind.transfer_to(origin) qdel(src) + /datum/reagent/fermi/astral/reaction_turf(turf/T, reac_volume) if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) var/turf/open/floor/F = T @@ -61,15 +71,17 @@ 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 - C.apply_status_effect(/datum/status_effect/chem/astral_insurance) - var/datum/status_effect/chem/astral_insurance/AI = C.has_status_effect(/datum/status_effect/chem/astral_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 @@ -89,10 +101,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) @@ -104,7 +118,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!") - M.remove_status_effect(/datum/status_effect/chem/astral_insurance) + 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. 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 4b2a344122..4faf64eccf 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -91,10 +91,7 @@ . = ..() if(M.head) var/obj/item/W = M.head - if(istype(W, /obj/item/clothing/head/hattip)) - qdel(W) - else - M.dropItemToGround(W, TRUE) + M.dropItemToGround(W, TRUE) var/hat = new /obj/item/clothing/head/hattip() M.equip_to_slot(hat, SLOT_HEAD, 1, 1) @@ -104,9 +101,9 @@ return ..() var/hatArmor = 0 if(!overdosed) - hatArmor = 10+((cached_purity/10)*current_cycle) + hatArmor = (cached_purity/10) else - hatArmor = -10+((cached_purity/10)*current_cycle) + hatArmor = (cached_purity/10) if(hatArmor > 100) return ..() var/obj/item/W = M.head @@ -211,7 +208,7 @@ //Writen by Trilby!! Embellsished a little by me. /datum/reagent/fermi/nanite_b_gone - name = "Naninte bane" + name = "Nanite bane" id = "nanite_b_gone" description = "A stablised EMP that is highly volatile, shocking small nano machines that will kill them off at a rapid rate in a patient's system." color = "#708f8f" diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm index 708f1f59f8..03c977bcb9 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,10 @@ /obj/item/clothing/head/hattip/dropped(mob/M) . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) + src.animate_atom_living() + var/list/seen = viewers(6, get_turf(M)) + for(var/mob/M2 in seen) + to_chat(M2, "[src] 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]