diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 3f993bdd73..b94147c277 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -255,7 +255,7 @@ if(the_event.timeout) addtimer(CALLBACK(src, .proc/clear_event, null, category), the_event.timeout, TIMER_UNIQUE|TIMER_OVERRIDE) return 0 //Don't have to update the event. - the_event = new type(src, param)//This causes a runtime for some reason, was this me? + the_event = new type(src, param)//This causes a runtime for some reason, was this me? No - there's an event floating around missing a definition. mood_events[category] = the_event update_mood() diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index f6e43f487f..b966535a8f 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -2,6 +2,12 @@ for(var/datum/brain_trauma/trauma in get_traumas()) message = trauma.on_say(message) message = ..(message) + + var/obj/item/organ/vocal_cords/Vc = getorganslot(ORGAN_SLOT_VOICE) + if(Vc) + if(Vc.name == "velvet chords" ) + velvetspeech(message, src) + var/obj/item/organ/tongue/T = getorganslot(ORGAN_SLOT_TONGUE) if(!T) //hoooooouaah! var/regex/tongueless_lower = new("\[gdntke]+", "g") @@ -45,4 +51,4 @@ return for(var/T in get_traumas()) var/datum/brain_trauma/trauma = T - message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) \ No newline at end of file + message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 409d584502..521c27a838 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -494,6 +494,10 @@ im //else // fermiIsReacting = FALSE // STOP_PROCESSING(SSfastprocess, src) + else if (chem_temp > C.ExplodeTemp) + var/datum/chemical_reaction/fermi/Ferm = selected_reaction + Ferm.FermiExplode(src, my_atom, total_volume, chem_temp, pH) + return 0 else return 0 @@ -543,7 +547,7 @@ im return 0//end! /datum/reagents/process() - var/datum/chemical_reaction/C = fermiReactID + var/datum/chemical_reaction/fermi/C = fermiReactID var/list/cached_required_reagents = C.required_reagents//update reagents list var/list/cached_results = C.results//resultant chemical list @@ -561,8 +565,8 @@ im targetVol = 0 handle_reactions() update_total() - var/datum/reagent/fermi/Ferm = GLOB.chemical_reagents_list[C.id] - Ferm.FermiFinish(src, multiplier) + //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) return for(var/P in cached_results) @@ -586,8 +590,8 @@ im targetVol = 0 handle_reactions() update_total() - var/datum/reagent/fermi/Ferm = GLOB.chemical_reagents_list[C.id] - Ferm.FermiFinish(src, multiplier) + //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) return else @@ -598,8 +602,8 @@ im targetVol = 0 handle_reactions() update_total() - var/datum/reagent/fermi/Ferm = GLOB.chemical_reagents_list[C.id] - Ferm.FermiFinish(src, multiplier) + //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) return diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index a88eb82aa4..037df6ee33 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -616,35 +616,26 @@ /obj/item/organ/vocal_cords/velvet name = "velvet chords" desc = "The voice spoken from these just make you want to drift off, sleep and obey." - icon_state = "voice_of_god" - actions_types = list(/datum/action/item_action/organ_action/colossus) + icon_state = "in_love" + //actions_types = list(/datum/action/item_action/organ_action/velvet) var/next_command = 0 var/cooldown_mod = 1 var/base_multiplier = 1 spans = list("say","yell") /* -/datum/action/item_action/organ_action/colossus - name = "Voice of God" - var/obj/item/organ/vocal_cords/colossus/cords = null +/datum/action/item_action/organ_action/velvet + name = "Velvet voice" + var/obj/item/organ/vocal_cords/velvet/cords = null -/datum/action/item_action/organ_action/colossus/New() +/datum/action/item_action/organ_action/velvet/New() ..() cords = target -/datum/action/item_action/organ_action/colossus/IsAvailable() - if(world.time < cords.next_command) - return FALSE - if(!owner) - return FALSE - if(!owner.can_speak()) - return FALSE - if(check_flags & AB_CHECK_CONSCIOUS) - if(owner.stat) - return FALSE +/datum/action/item_action/organ_action/velvet/IsAvailable() return TRUE -/datum/action/item_action/organ_action/colossus/Trigger() +/datum/action/item_action/organ_action/velvet/Trigger() . = ..() if(!IsAvailable()) if(world.time < cords.next_command) @@ -658,16 +649,12 @@ owner.say(".x[command]") /obj/item/organ/vocal_cords/colossus/can_speak_with() - if(world.time < next_command) - to_chat(owner, "You must wait [DisplayTimeText(next_command - world.time)] before Speaking again.") - return FALSE if(!owner) return FALSE if(!owner.can_speak()) to_chat(owner, "You are unable to speak!") return FALSE return TRUE -*/ /obj/item/organ/vocal_cords/velvet/handle_speech(message) velvetspeech(message, owner, spans, base_multiplier) @@ -678,18 +665,20 @@ /obj/item/organ/vocal_cords/velvet/speak_with(message) velvetspeech(message, owner, spans, base_multiplier) //next_command = world.time + (cooldown * cooldown_mod) - +*/ ////////////////////////////////////// ///////////FermiChem////////////////// ////////////////////////////////////// - -/proc/velvetspeech(message, mob/living/user, list/span_list, base_multiplier = 1, include_speaker = FALSE, message_admins = TRUE) +//Removed span_list from input arguments. //mob/living/user +/proc/velvetspeech(message, mob/living/user, base_multiplier = 1, include_speaker = FALSE, message_admins = TRUE, debug = TRUE) + message_admins("Velvet speech proc'd on [user]") var/cooldown = 0 if(!user || !user.can_speak() || user.stat) return 0 //no cooldown var/log_message = message + /* if(!span_list || !span_list.len) //Not too sure what this does, I think it changes your output message depending if you're a cultist or not? I.e. font if(iscultist(user)) span_list = list("narsiesmall") @@ -697,8 +686,8 @@ span_list = list("ratvar") else span_list = list() - - user.say(message, sanitize = TRUE)//Removed spans = span_list, It should just augment normal speech + */ + //user.say(message, sanitize = TRUE)//Removed spans = span_list, It should just augment normal speech//DO NOT ENABLE, RECURSION HELL //FIND THRALLS @@ -714,12 +703,15 @@ if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) continue var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)//Check to see if pet is on cooldown from last command - if (E.cooldown != 0)//If they're on cooldown you can't give them more commands. + if (E.cooldown >= 0)//If they're on cooldown you can't give them more commands. continue listeners += L + if(debug == TRUE) + for(var/L in listeners) + to_chat(world, "[user] choses, and [L] obeys.") if(!listeners.len) - cooldown = COOLDOWN_NONE + cooldown = 0 return cooldown //POWER CALCULATIONS @@ -785,6 +777,9 @@ if (T.name == "fluffy tongue") //If you sound hillarious, it's hard to take you seriously. This is a way for other players to combat/reduce their effectiveness. power_multiplier *= 0.75 + if(debug == TRUE) + to_chat(world, "[user]'s power is [power_multiplier].") + /* CHECK THIS STUFF IN THE CHEM STATUS INSTEAD. if(istype(H.neck, /obj/item/clothing/neck/petcollar)) power_multiplier *= 1.5 //Collaring players makes them more docile and accepting of their place as a pet @@ -793,14 +788,14 @@ */ //Mixables - var/static/regex/enthral_words = regex("relax|obey|love|serve|docile|so easy|ara ara") //enthral_words - var/static/regex/reward_words = regex("good boy|good girl|good pet") //reward_words - var/static/regex/punish_words = regex("bad boy|bad girl|bad pet") ////punish_words + var/static/regex/enthral_words = regex("relax|obey|love|serve|docile|so easy|ara ara") //enthral_words works + var/static/regex/reward_words = regex("good boy|good girl|good pet") //reward_words works + var/static/regex/punish_words = regex("bad boy|bad girl|bad pet") ////punish_words works //phase 0 - var/static/regex/saymyname_words = regex("say my name|who am i|whoami") - var/static/regex/wakeup_words = regex("revert|awaken|snap") + var/static/regex/saymyname_words = regex("say my name|who am i|whoami") //works I think + var/static/regex/wakeup_words = regex("revert|awaken|snap") //works //phase1 - var/static/regex/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush") + var/static/regex/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush") //works var/static/regex/antiresist_words = regex("unable to resist|give in")//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") @@ -825,11 +820,10 @@ 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/pacify_words = regex("more and more docile|complaisant|friendly|pacifist") var/static/regex/charge_words = regex("charge|oorah|attack") - var/distancelist = list(1.5,1.5,1.3,1.2,1.1,1,0.8,0.6,0.5,0.25) - + var/distancelist = list(2,2,1.5,1.3,1.15,1,0.8,0.6,0.5,0.25) //enthral_words, reward_words, silence_words attract_words punish_words desire_words resist_words forget_words @@ -881,20 +875,23 @@ //SAY MY NAME if((findtext(message, saymyname_words))) for(var/V in listeners) - var/mob/living/L = V - addtimer(CALLBACK(L, /atom/movable/proc/say, "Master"), 5)//When I figure out how to do genedered names put them here + var/mob/living/carbon/C = V + C.remove_trait(TRAIT_MUTE, TRAUMA_TRAIT) + addtimer(CALLBACK(C, /atom/movable/proc/say, "Master"), 5)//When I figure out how to do genedered names put them here //WAKE UP else if((findtext(message, wakeup_words))) for(var/V in listeners) var/mob/living/L = V var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall) + L.SetSleeping(0)//Can you hear while asleep? switch(E.phase) if(0) E.phase = 3 E.status = null - to_chat(L, "The snapping of your Master's fingers brings you back to your enthralled state, obedient and ready to serve.") - L.SetSleeping(0)//Can you hear while asleep? + addtimer(CALLBACK(L, /atom/movable/proc/to_chat, "The snapping of your Master's fingers brings you back to your enthralled state, obedient and ready to serve."), 5) + //to_chat(L, ) + //tier 1 //SILENCE @@ -908,6 +905,13 @@ C.silent += ((10 * power_multiplier) * E.phase) E.cooldown += 3 + //SPEAK + else if((findtext(message, silence_words))) + for(var/mob/living/carbon/C in listeners) + var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall) + C.remove_trait(TRAIT_MUTE, TRAUMA_TRAIT) + E.cooldown += 3 + //Antiresist else if((findtext(message, antiresist_words))) for(var/V in listeners) @@ -929,7 +933,7 @@ else if((findtext(message, forget_words))) for(var/mob/living/carbon/C in listeners) var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall) - C.Sleeping(40) + C.Sleeping(50) to_chat(C, "You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!") switch(E.phase) if(1 to 2) @@ -965,6 +969,7 @@ //teir 2 + //ORGASM else if((findtext(message, orgasm_words))) for(var/V in listeners) @@ -1001,8 +1006,8 @@ switch(E.phase) if(2 to INFINITY) var/mob/living/M = V - playsound(get_turf(M), pick('sound/effects/meow1.ogg', 'modular_citadel/sound/voice/merowr.ogg', 'modular_citadel/sound/voice/nya.ogg'), 50, 1, -1) - H.emote("me","lets out a nya!") + playsound(get_turf(M), pick('sound/effects/meow1.ogg', 'modular_citadel/sound/voice/nya.ogg'), 50, 1, -1) + H.emote(H,"lets out a nya!") E.cooldown += 1 //SLEEP @@ -1028,7 +1033,7 @@ to_chat(H, "Before you can even think about it, you quickly remove your clothes in response to your Master's command.") E.cooldown += 10 - //WALK + //WALK doesn't work? else if((findtext(message, walk_words))) for(var/V in listeners) var/mob/living/L = V @@ -1039,7 +1044,7 @@ L.toggle_move_intent() E.cooldown += 1 - //RUN + //RUN doesn't work? else if((findtext(message, run_words))) for(var/V in listeners) var/mob/living/L = V @@ -1057,7 +1062,7 @@ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall) switch(E.phase) if(3 to INFINITY)//Tier 2 only - L.Knockdown(20 * power_multiplier * E.phase) + L.Knockdown(30 * power_multiplier * E.phase) E.cooldown += 8 //tier3 @@ -1086,7 +1091,7 @@ if (E.mental_capacity >= 10) var/trigger = stripped_input(user, "Enter the trigger phrase", MAX_MESSAGE_LEN) var/trigger2 = stripped_input(user, "Enter the effect.", MAX_MESSAGE_LEN) - if ((findtext(trigger, custom_words_words))) + if ((findtext(trigger2, custom_words_words))) if (trigger2 == "speak" || trigger2 == "echo") var/trigger3 = stripped_input(user, "Enter the phrase spoken.", MAX_MESSAGE_LEN) E.customTriggers[trigger] = list(trigger2, trigger3) @@ -1108,7 +1113,7 @@ to_chat(H, "You need to be next to your pet to give them a new objective!") return else - user.emote("me", "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.'") + user.emote(user, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.'") if (E.mental_capacity >= 150 || message == "objective") var/datum/objective/brainwashing/objective = stripped_input(user, "Add an objective to give your pet.", MAX_MESSAGE_LEN) if(!LAZYLEN(objective)) diff --git a/modular_citadel/code/datums/mood_events/chem_events.dm b/modular_citadel/code/datums/mood_events/chem_events.dm index 933128f031..c194605e9f 100644 --- a/modular_citadel/code/datums/mood_events/chem_events.dm +++ b/modular_citadel/code/datums/mood_events/chem_events.dm @@ -37,5 +37,5 @@ description = "I'm in love!!\n" /datum/mood_event/MissingLove - mood_change = -10 + mood_change = -20 description = "I can't keep my crush off my mind, I need to see them again!\n" diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 95dee449bd..01f09dda15 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -171,42 +171,46 @@ var/mental_capacity //Higher it is, lower the cooldown on commands, capacity reduces with resistance. //var/mental_cost //Current cost of custom triggers //var/mindbroken = FALSE //Not sure I use this, replaced with phase 4 - var/datum/weakref/redirect_component1 //resistance + var/datum/weakref/redirect_component //resistance var/datum/weakref/redirect_component2 //say - var/distancelist = list(4,3,2,1.5,1,0.8,0.6,0.4,0.2) //Distance multipliers + var/distancelist = list(2,1.5,1,0.8,0.6,0.5,0.4,0.3,0.2) //Distance multipliers var/withdrawal = FALSE //withdrawl var/withdrawalTick = 0 //counts how long withdrawl is going on for var/list/customTriggers = list() //the list of custom triggers (maybe have to split into two) var/cooldown = 0 + var/cooldownMsg = TRUE -/datum/status_effect/chem/enthrall/on_apply(mob/living/carbon/M) +/datum/status_effect/chem/enthrall/on_apply() + var/mob/living/carbon/M = owner var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in M.reagents.reagent_list enthrallID = E.creatorID enthrallGender = E.creatorGender - master = E.creator + master = get_mob_by_key(enthrallID) if(!E) message_admins("WARNING: No chem found in thrall!!!!") if(!master) message_admins("WARNING: No master! found in thrall!!!!") - if(M.key == enthrallID) + if(M.ckey == enthrallID) owner.remove_status_effect(src)//This shouldn't happen, but just in case - redirect_component1 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed# + redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed# //redirect_component2 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_SAY = CALLBACK(src, .proc/owner_say)))) //Do resistance calc if resist is pressed //Might need to add redirect component for listening too. var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN) //It's their brain! mental_capacity = 500 - B.get_brain_damage() SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "enthrall", /datum/mood_event/enthrall) + return ..() -/datum/status_effect/chem/enthrall/tick(mob/living/carbon/M) - message_admins("Enthrall processing for [M]: ") +/datum/status_effect/chem/enthrall/tick() + //. = ..() //loop Please + var/mob/living/carbon/M = owner //chem calculations - if (owner.reagents.has_reagent("MKUltra")) + if (owner.reagents.has_reagent("enthrall")) if (phase >= 2) enthrallTally += phase else - if (phase < 3) - deltaResist += 5//If you've no chem, then you break out quickly + if (phase < 3 && phase != 0) + deltaResist += 2//If you've no chem, then you break out quickly if(prob(20)) to_chat(owner, "Your mind starts to restore some of it's clarity as you feel the effects of the drug wain.") if (mental_capacity <= 500 || phase == 4) @@ -216,9 +220,9 @@ mental_capacity += 10 //mindshield check - if(M.has_trait(TRAIT_MINDSHIELD)) - resistanceTally += 5 - if(prob(20)) + if(M.has_trait(TRAIT_MINDSHIELD))//If you manage to enrapture a head, wow, GJ. + resistanceTally += 2 + if(prob(10)) to_chat(owner, "You feel lucidity returning to your mind as the mindshield buzzes, attempting to return your brain to normal function.") //phase specific events @@ -226,42 +230,46 @@ if(-1)//fully removed SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall") owner.remove_status_effect(src) - else if(0)// sleeper agent + if(0)// sleeper agent return - else if(1)//Initial enthrallment + if(1)//Initial enthrallment if (enthrallTally > 100) phase += 1 mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity. enthrallTally = 0 - to_chat(owner, "Your conciousness slips, as you sink deeper into trance.") + to_chat(owner, "Your conciousness slips, as you sink deeper into trance and servitude.") else if (resistanceTally > 100) enthrallTally *= 0.5 phase = -1 resistanceTally = 0 - to_chat(owner, "You break free of the influence in your mind, your thoughts suddenly turning lucid!") + to_chat(owner, "You break free of the influence in your mind, your thoughts suddenly turning lucid!") owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. if(prob(10)) - 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 sexy and dominant, it feels right to obey them.")].") - else if (2) //partially enthralled + 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 > 150) phase += 1 mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity. enthrallTally = 0 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 much less likely to resort to violence, unless it is to defend your [enthrallGender]. Equally you are unable to commit suicide, even if ordered to, as you cannot server 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 much less likely to resort to violence, unless it is to defend your [enthrallGender]. 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 if (resistanceTally > 150) enthrallTally *= 0.5 phase -= 1 resistanceTally = 0 to_chat(owner, "You manage to shake some of the entrancement from your addled mind, however you can still feel yourself drawn towards [master].") //owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. Not at the moment, - else if (3)//fully entranced + if(prob(10)) + to_chat(owner, "[pick("It feels so good to listen to [enthrallGender].", "You can't keep your eyes off [enthrallGender].", "[enthrallGender]'s voice is making you feel so sleepy.", "You feel so comfortable with [enthrallGender]", "[enthrallGender] is so dominant, it feels right to obey them.")].") + if (3)//fully entranced if (resistanceTally >= 250 && withdrawalTick >= 150) enthrallTally = 0 phase -= 1 resistanceTally = 0 to_chat(owner, "The separation from you [enthrallGender] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.") - else if (4) //mindbroken + if(prob(2)) + to_chat(owner, "[pick("I belong to [enthrallGender].", "[enthrallGender] known's whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].") + if (4) //mindbroken if (mental_capacity >= 499 || owner.getBrainLoss() >=20 || !owner.reagents.has_reagent("MKUltra")) phase = 2 mental_capacity = 500 @@ -283,6 +291,10 @@ M.hallucination = max(0, M.hallucination - 2) M.stuttering = max(0, M.stuttering - 2) M.jitteriness = max(0, M.jitteriness - 2) + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3") if(9 to INFINITY)//If withdrawal = TRUE @@ -290,37 +302,38 @@ if (withdrawal == TRUE)//Your minions are really REALLY needy. switch(withdrawalTick)//denial if(20 to 40)//Gives wiggle room, so you're not SUPER needy - if(prob(10)) + if(prob(5)) to_chat(owner, "You're starting to miss your [enthrallGender].") - if(prob(10)) + if(prob(5)) owner.adjustBrainLoss(0.5) - to_chat(owner, "They'll surely be back soon") //denial + to_chat(owner, "Master will surely be back soon") //denial if(41) SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1) if(42 to 65)//barganing - if(prob(10)) + if(prob(5)) to_chat(owner, "They are coming back, right...?") owner.adjustBrainLoss(1) - if(prob(20)) + if(prob(5)) to_chat(owner, "I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.") - owner.adjustBrainLoss(-2) + owner.adjustBrainLoss(-1) if(66) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1") //Why does this not work? SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing2", /datum/mood_event/enthrallmissing2) owner.stuttering += 20 owner.jitteriness += 20 if(67 to 90) //anger - if(prob(30)) + if(prob(10)) addtimer(CALLBACK(M, /mob/verb/a_intent_change, INTENT_HARM), 2) addtimer(CALLBACK(M, /mob/proc/click_random_mob), 2) to_chat(owner, "You suddenly lash out at the station in anger for it keeping you away from your [enthrallGender].") + owner.adjustBrainLoss(1) if(90) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") //Why does this not work? SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing3", /datum/mood_event/enthrallmissing3) to_chat(owner, "You need to find your [enthrallGender] at all costs, you can't hold yourself back anymore.") if(91 to 120)//depression if(prob(20)) - owner.adjustBrainLoss(1) + owner.adjustBrainLoss(2.5) owner.stuttering += 2 owner.jitteriness += 2 if(prob(25)) @@ -330,65 +343,64 @@ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing4", /datum/mood_event/enthrallmissing4) to_chat(owner, "You can hardly find the strength to continue without your [enthrallGender].") if(120 to 140) //depression - if(prob(25)) - owner.SetStun(20, 0) + if(prob(15)) + owner.Stun(50) owner.emote("cry")//does this exist? to_chat(owner, "You're unable to hold back your tears, suddenly sobbing as the desire to see your [enthrallGender] oncemore overwhelms you.") - owner.adjustBrainLoss(2) + owner.adjustBrainLoss(5) owner.stuttering += 2 owner.jitteriness += 2 - if(prob(10)) + if(prob(5)) deltaResist += 5 if(140 to INFINITY) //acceptance - if(prob(20)) + if(prob(15)) deltaResist += 5 if(prob(20)) to_chat(owner, "Maybe you'll be okay without your [enthrallGender].") if(prob(10)) - owner.adjustBrainLoss(1) + owner.adjustBrainLoss(2) M.hallucination += 5 - withdrawalTick++ + withdrawalTick += 0.5 //Status subproc - statuses given to you from your Master //currently 3 statuses; antiresist -if you press resist, increases your enthrallment instead, HEAL - which slowly heals the pet, CHARGE - which breifly increases speed, PACIFY - makes pet a pacifist. if (!status == null) - switch(status) - if("Antiresist") - if (statusStrength == 0) - status = null - to_chat(owner, "You feel able to resist oncemore.") - else - statusStrength -= 1 - - else if("heal") - if (statusStrength == 0) - status = null - to_chat(owner, "You finish licking your wounds.") - else - statusStrength -= 1 - owner.heal_overall_damage(1, 1, 0, FALSE, FALSE) - cooldown += 1 //Cooldown doesn't process till status is done - - else if("charge") - owner.add_trait(TRAIT_GOTTAGOFAST, "MKUltra") - status = "charged" - to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!") - - else if ("charged") - if (statusStrength == 0) - status = null - owner.remove_trait(TRAIT_GOTTAGOFAST, "MKUltra") - owner.Knockdown(30) - 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 - - else if ("pacify") - owner.add_trait(TRAIT_PACIFISM, "MKUltra") + if(status = "Antiresist") + if (statusStrength == 0) status = null + to_chat(owner, "You feel able to resist oncemore.") + else + statusStrength -= 1 + + else if(status = "heal") + if (statusStrength == 0) + status = null + to_chat(owner, "You finish licking your wounds.") + else + statusStrength -= 1 + owner.heal_overall_damage(1, 1, 0, FALSE, FALSE) + cooldown += 1 //Cooldown doesn't process till status is done + + else if(status = "charge") + owner.add_trait(TRAIT_GOTTAGOFAST, "MKUltra") + status = "charged" + to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!") + + else if (status = "charged") + if (statusStrength == 0) + status = null + owner.remove_trait(TRAIT_GOTTAGOFAST, "MKUltra") + owner.Knockdown(30) + 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 + + else if (status = "pacify") + owner.add_trait(TRAIT_PACIFISM, "MKUltra") + status = null //Truth serum? //adrenals? @@ -400,17 +412,24 @@ deltaResist = 0 if (cooldown > 0) cooldown -= (1 + (mental_capacity/1000 )) - else - to_chat(master, "Your pet [owner.name] appears to have finished internalising your last command.") - ..() + cooldownMsg = FALSE + else if (cooldownMsg == FALSE) + to_chat(master, "Your pet [owner] appears to have finished internalising your last command.") + cooldownMsg = TRUE + cooldown = 0 + //..() -//Check for proximity of master DONE -//Place triggerreacts here - create a dictionary of triggerword and effect. -//message enthrallID "name appears to have mentally processed their last command." - -/datum/status_effect/chem/enthrall/on_remove(mob/living/carbon/M) - qdel(redirect_component1.resolve()) - redirect_component1 = null +/datum/status_effect/chem/enthrall/on_remove() + var/mob/living/carbon/M = owner + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrallpraise") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrallscold") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3") + qdel(redirect_component.resolve()) + redirect_component = null //qdel(redirect_component2.resolve()) //redirect_component2 = null @@ -421,15 +440,17 @@ else . = ..() */ - +//Doesn't work /datum/status_effect/chem/enthrall/proc/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) var/mob/living/carbon/C = owner + message_admins("[C] heard something!") for (var/trigger in customTriggers) if (trigger == message)//if trigger1 is the message + message_admins("[C] has been triggered with [trigger]!") //Speak (Forces player to talk) if (customTriggers[trigger][1] == "speak")//trigger2 - C.visible_message("Your mouth moves on it's own, before you can even catch it. Though you find yourself fully believing in the validity of what you just said and don't think to question it.") + C.visible_message("Your mouth moves on it's own, before you can even catch it. You find yourself fully believing in the validity of what you just said and don't think to question it.") (C.say(customTriggers[trigger][2]))//trigger3 @@ -477,13 +498,16 @@ /datum/status_effect/chem/enthrall/proc/owner_withdrawal(mob/living/carbon/M) //3 stages, each getting worse */ -/datum/status_effect/chem/enthrall/proc/owner_resist(mob/living/carbon/M) +/datum/status_effect/chem/enthrall/proc/owner_resist() + var/mob/living/carbon/M = owner + message_admins("Enthrall processing for [M]: enthrallTally: [enthrallTally], resistanceTally: [resistanceTally]") + message_admins("[M] is trying to resist!") if (status == "Sleeper" || phase == 0) return else if (phase == 4) to_chat(owner, "Your mind is too far gone to even entertain the thought of resisting.") return - else if (phase == 3 || withdrawal == FALSE) + else if (phase == 3 && withdrawal == FALSE) to_chat(owner, "The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance.") return else if (status == "Antiresist")//If ordered to not resist; resisting while ordered to not makes it last longer, and increases the rate in which you are enthralled. @@ -497,15 +521,18 @@ if (deltaResist != 0)//So you can't spam it, you get one deltaResistance per tick. deltaResist += 0.1 //Though I commend your spamming efforts. return + else + deltaResist = 1 - if(prob(10)) + if(prob(5)) M.emote("me",1,"squints, shaking their head for a moment.")//shows that you're trying to resist sometimes + deltaResist *= 1.5 to_chat(owner, "You attempt to shake the mental cobwebs from your mind!") //base resistance if (M.canbearoused) deltaResist*= ((100 - M.arousalloss/100)/100)//more aroused you are, the weaker resistance you can give else - deltaResist *= 0.2 + deltaResist *= 0.5 //chemical resistance, brain and annaphros are the key to undoing, but the subject has to to be willing to resist. if (owner.reagents.has_reagent("mannitol")) deltaResist *= 1.25 @@ -555,16 +582,21 @@ //If master gives you a collar, you get a sense of pride if(istype(M.wear_neck, /obj/item/clothing/neck/petcollar)) deltaResist *= 0.5 + if(M.has_trait(TRAIT_MINDSHIELD)) + deltaResist += 1 if(owner.has_trait(TRAIT_CROCRIN_IMMUNE) || !owner.canbearoused) deltaResist *= 0.75//Immune/asexual players are immune to the arousal based multiplier, this is to offset that so they can still be affected. Their unfamiliarty with desire makes it more on them. if (deltaResist>0)//just in case deltaResist /= phase//later phases require more resistance + message_admins("[M] is trying to resist with a delta of [deltaResist]!") + return /datum/status_effect/chem/enthrall/proc/owner_say(message) //I can only hope this works //var/datum/status_effect/chem/enthrall/E = owner.has_status_effect(/datum/status_effect/chem/enthrall) //var/mob/living/master = E.master + message_admins("[owner] said something") var/static/regex/owner_words = regex("[master]") if(findtext(message, owner_words)) message = replacetext(lowertext(message), lowertext(master), "[enthrallGender]") 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 050d1edeaf..ccb55e7f2f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -24,9 +24,10 @@ //return ..() //Called when reaction stops. #STOP_PROCESSING +/* /datum/reagent/fermi/proc/FermiFinish(datum/reagents/holder, multipler) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? return - +*/ //Called when added to a beaker without any of the reagent present. #add_reagent /datum/reagent/fermi/proc/FermiNew(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? return @@ -34,8 +35,9 @@ //This should process fermichems to find out how pure they are and what effect to do. //TODO: add this to the main on_mob_add proc, and check if Fermichem = TRUE /datum/reagent/fermi/on_mob_add(mob/living/carbon/M) + . = ..() if(!M) - return ..() + return message_admins("purity of chem is [purity]") if(src.purity < 0) CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!") @@ -49,14 +51,16 @@ else //var/pureVol = volume * purity var/impureVol = volume * (1 - (volume * purity)) + message_admins("splitting [src] [volume] into [src.ImpureChem] [impureVol]") M.reagents.remove_reagent(src, (volume*impureVol), FALSE) M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1) return - ..() /datum/reagent/fermi/on_merge(mob/living/carbon/M, amount, other_purity) + . = ..() if(!M) - return ..() + return + message_admins("purity of chem is [purity]") if(other_purity < 0) CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!") if (other_purity == 1 || src.DoNotSplit == TRUE) @@ -69,10 +73,10 @@ else //var/pureVol = var/impureVol = amount * (1 - (amount * other_purity)) + message_admins("splitting [src] [volume] into [src.ImpureChem] [impureVol]") M.reagents.remove_reagent(src, impureVol, FALSE) M.reagents.add_reagent(src.ImpureChem, impureVol, FALSE, other_purity = 1) return - ..() @@ -1053,18 +1057,37 @@ 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 - data// = list("creatorID" = null, "creatorGender" = null, "creatorName" = null) + data = list("creatorID" = null, "creatorGender" = null, "creatorName" = null) var/creatorID //ckey var/creatorGender var/creatorName var/mob/living/creator +/datum/reagent/fermi/enthrall/test + name = "MKUltraTest" + id = "enthrallTest" + description = "A forbidden deep red mixture that overwhelms a foreign body with waves of pleasure, intoxicating them into servitude. When taken by the creator, it will enhance the draw of their voice to those affected by it." + color = "#2C051A" // rgb: , 0, 255 + //ImpureChem = "PEsmaller" //If you make an inpure chem, it stalls growth + //InverseChemVal = 0.25 + //InverseChem = "enthrall" //At really impure vols, it just becomes 100% inverse + data = list("creatorID" = "honkatonkbramblesnatch", "creatorGender" = "Mistress", "creatorName" = "Isabelle Foster") + creatorID = "honkatonkbramblesnatch"//ckey + creatorGender = "Mistress" + creatorName = "Isabelle Foster" + purity = 1 + +/datum/reagent/fermi/enthrall/test/on_new() + id = "enthrall" + ..() + 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 @@ -1077,33 +1100,21 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y creatorID = B.data.["ckey"] */ -/datum/reagent/fermi/enthrall/FermiFinish(datum/reagents/holder) - message_admins("On finish for enthral proc'd") - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in holder.reagent_list - if (B.data.["gender"] == "female") - E.data.["creatorGender"] = "Mistress" - else - E.data.["creatorGender"] = "Master" - E.data["creatorName"] = B.data.["real_name"] - E.data.["creatorID"] = B.data.["ckey"] - message_admins("name: [E.creatorName], ID: [E.creatorID], gender: [E.creatorGender]") - /datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M) . = ..() if(!creatorID) CRASH("Something went wrong in enthral creation") - message_admins("key: [M.key] vs [creatorID], ") + message_admins("key: [M.ckey] vs [creatorID], ") if(purity < 0.5)//Impure chems don't function as you expect return - else if(M.key == creatorID && creatorName == M.real_name) //same name AND same player - same instance of the player. (should work for clones?) + if((M.ckey == creatorID) && (creatorName == M.real_name)) //same name AND same player - same instance of the player. (should work for clones?) var/obj/item/organ/vocal_cords/Vc = M.getorganslot(ORGAN_SLOT_VOICE) var/obj/item/organ/vocal_cords/nVc = new /obj/item/organ/vocal_cords/velvet - Vc.Remove(M) + if(Vc) + 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.") - creator = M 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) @@ -1116,8 +1127,10 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y /datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M) + if (M.ckey == creatorID && creatorName == M.real_name) + return if(purity < 0.5)//Placeholder for now. I'd like to get this done. - if (M.key == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them. + if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them. if(M.has_status_effect(STATUS_EFFECT_INLOVE)) return var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers @@ -1139,6 +1152,8 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y return var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall) if(!E) + M.reagents.remove_reagent(src.id, 10) + M.apply_status_effect(/datum/status_effect/chem/enthrall) CRASH("No enthrall status found in [M]!") E.enthrallTally += 1 M.adjustBrainLoss(0.1) @@ -1147,12 +1162,15 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y /datum/reagent/fermi/enthrall/overdose_start(mob/living/carbon/M)//I have no idea what happens if you OD yourself honestly. . = ..() M.add_trait(TRAIT_PACIFISM, "MKUltra") - var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall) + var/datum/status_effect/chem/enthrall/E if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) + E = M.has_status_effect(/datum/status_effect/chem/enthrall) M.apply_status_effect(/datum/status_effect/chem/enthrall) E.enthrallID = creatorID E.enthrallGender = creatorGender E.master = creator + else + E = M.has_status_effect(/datum/status_effect/chem/enthrall) to_chat(M, "Your mind shatters under the volume of the mild altering chem inside of you, breaking all will and thought completely. Instead the only force driving you now is the instinctual desire to obey and follow [creatorName].") M.slurring = 100 M.confused = 100 @@ -1392,14 +1410,14 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y /datum/reagent/fermi/fermiAcid/on_mob_life(mob/living/carbon/C, method) var/target = C.get_bodypart(BODY_ZONE_CHEST) - C.adjustFireLoss(1, 0) + var/acidstr = (5-C.reagents.pH) + C.adjustFireLoss(acidstr, 0) if(method==VAPOR) if(prob(20)) to_chat(C, "You can feel your lungs burning!") var/obj/item/organ/lungs/L = C.getorganslot(ORGAN_SLOT_LUNGS) - L.adjustLungLoss(2) - C.apply_damage(1, BURN, target) - var/acidstr = (5-C.reagents.pH) + L.adjustLungLoss(acidstr) + C.apply_damage(acidstr/2, BURN, target) C.acid_act(acidstr, volume) ..() @@ -1418,3 +1436,32 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y var/acidstr = (5-holder.pH) T.acid_act(acidstr, volume) ..() + +/datum/reagent/fermi/fermiTest + name = "Fermis Test Reagent" + id = "fermiTest" + description = "You should be really careful with this...! Also, how did you get this?" + data = "Big bang" + +/datum/reagent/fermi/fermiTest/on_new() + 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 95229f9745..7015087fc6 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -4,12 +4,18 @@ /datum/chemical_reaction/fermi/proc/FermiCreate(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? return +//Called when reaction STOP_PROCESSING +/datum/chemical_reaction/fermi/proc/FermiFinish(datum/reagents/holder, multipler) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? + return + //Called when temperature is above a certain threshold //....Is this too much? /datum/chemical_reaction/fermi/proc/FermiExplode(src, var/atom/my_atom, datum/reagents/holder, volume, temp, pH, Reaction, Exploding = FALSE) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? //var/Svol = volume if (Exploding == TRUE) return + if(!pH)//Dunno how things got here without a pH. + pH = 7 var/ImpureTot = 0 var/pHmod = 1 var/turf/T = get_turf(my_atom) @@ -119,6 +125,7 @@ S.real_name = "Living teratoma"//horrifying!! S.rabid = 1//Make them an angery boi, grr grr to_chat("The cells clump up into a horrifying tumour!") + holder.clear_reagents() /datum/chemical_reaction/fermi/BElarger name = "Sucubus milk" @@ -148,6 +155,7 @@ var/list/seen = viewers(5, get_turf(holder)) for(var/mob/M in seen) to_chat(M, "The reaction suddenly condenses, creating a pair of breasts!")//OwO + holder.clear_reagents() ..() /datum/chemical_reaction/fermi/PElarger //Vars needed @@ -179,6 +187,7 @@ var/list/seen = viewers(5, get_turf(holder)) for(var/mob/M in seen) to_chat(M, "The reaction suddenly condenses, creating a penis!")//OwO + holder.clear_reagents() ..() /datum/chemical_reaction/fermi/astral //Vars needed @@ -230,6 +239,24 @@ FermiExplode = TRUE PurityMin = 0.15 + + +/datum/chemical_reaction/fermi/enthrall/FermiFinish(datum/reagents/holder, var/atom/my_atom) + message_admins("On finish for enthral proc'd") + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in my_atom.reagents.reagent_list + var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list + if (B.data.["gender"] == "female") + E.data.["creatorGender"] = "Mistress" + E.creatorGender = "Mistress" + else + E.data.["creatorGender"] = "Master" + E.creatorGender = "Master" + E.data["creatorName"] = B.data.["real_name"] + E.creatorName = B.data.["real_name"] + E.data.["creatorID"] = B.data.["ckey"] + E.creatorID = B.data.["ckey"] + message_admins("name: [E.creatorName], ID: [E.creatorID], gender: [E.creatorGender]") + //Apprently works..?Negative /* /datum/chemical_reaction/fermi/enthrall/on_reaction(datum/reagents/holder) @@ -248,14 +275,14 @@ //var/enthrallID = B.get_blood_data() */ -/datum/chemical_reaction/fermi/enthrall/FermiExplode(src, var/atom/my_atom, volume, temp, pH, Reaction) - var/turf/T = get_turf(my_atom) - var/datum/reagents/R = new/datum/reagents(350) +/datum/chemical_reaction/fermi/enthrall/FermiExplode(src, datum/reagents/holder, volume, temp, pH, Reaction) + var/turf/T = get_turf(holder) + var/datum/reagents/R = new/datum/reagents(1000) var/datum/effect_system/smoke_spread/chem/s = new() R.add_reagent("enthrallExplo", volume) s.set_up(R, volume, T) s.start() - my_atom.reagents.clear_reagents() + holder.clear_reagents() //..() //Please don't kill everyone too. /datum/chemical_reaction/fermi/hatmium @@ -287,6 +314,7 @@ var/list/seen = viewers(5, get_turf(holder.my_atom)) for(var/mob/M in seen) to_chat(M, "The makes an off sounding pop, as a hat suddenly climbs out of the beaker!") + holder.clear_reagents() ..() /datum/chemical_reaction/fermi/furranium //low temp and medium pH