From 40aa231b6419212c55cb7598000403ad84c898e4 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 1 Jun 2019 04:31:34 +0100 Subject: [PATCH] Made MKUltra's OD on self turn the player into a narcissist. --- code/modules/research/techweb/all_nodes.dm | 2 +- code/modules/surgery/organs/tongue.dm | 4 +-- code/modules/surgery/organs/vocal_cords.dm | 33 +++++-------------- .../code/datums/status_effects/chems.dm | 20 +++++++---- .../chemistry/reagents/fermi_reagents.dm | 11 ++++--- .../reagents/chemistry/recipes/fermi.dm | 2 +- 6 files changed, 33 insertions(+), 39 deletions(-) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index bc310ac699..901bcdd92a 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -481,7 +481,7 @@ display_name = "Cybernetic Organs" description = "We have the technology to rebuild him." prereq_ids = list("adv_biotech") - design_ids = list("cybernetic_heart", "cybernetic_liver", "cybernetic_liver_u", "cybernetic_lungs", "cybernetic_lungs_u, cybernetic_tongue") + design_ids = list("cybernetic_heart", "cybernetic_liver", "cybernetic_liver_u", "cybernetic_lungs", "cybernetic_lungs_u", "cybernetic_tongue") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index e1e616069c..8e366e54dd 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -258,8 +258,8 @@ name = "cybernetic tongue" desc = "A state of the art robotic tongue that can detect the pH of anything drank." icon_state = "tonguecybernetic" - taste_sensitivity = 10 // extra sensitive and inquisitive uwu - maxHealth = 70 //It's robotic! + taste_sensitivity = 10 + maxHealth = 60 //It's robotic! /obj/item/organ/tongue/cybernetic/get_spans() return ..() | SPAN_ROBOT diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 01e03bc8b8..0b00f0b58f 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -677,26 +677,15 @@ 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") - else if (is_servant_of_ratvar(user)) - span_list = list("ratvar") - else - span_list = list() - */ - //user.say(message, sanitize = TRUE)//Removed spans = span_list, It should just augment normal speech//DO NOT ENABLE, RECURSION HELL //FIND THRALLS - message = lowertext(message) var/mob/living/list/listeners = list() for(var/mob/living/L in get_hearers_in_view(8, user)) if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD) if(L.has_status_effect(/datum/status_effect/chem/enthrall))//Check to see if they have the status - if(L == user && !include_speaker) - continue + //if(L == user && !include_speaker) //Remove this if I decide to make OD apply to self. + // continue if(ishuman(L)) var/mob/living/carbon/human/H = L if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) @@ -854,12 +843,10 @@ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[E.enthrallGender] has praised me!!"), 5) if(L.has_trait(TRAIT_NYMPHO)) L.adjustArousalLoss(2*power_multiplier) - /*enable when maso is added if(L.has_trait(TRAIT_MASO)) E.enthrallTally -= power_multiplier E.resistanceTally += power_multiplier E.cooldown += 1 - */ else addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've been praised for doing a good job!"), 5) E.resistanceTally -= power_multiplier @@ -877,16 +864,14 @@ //power_multiplier += (get_dist(V, user)**-2)*2 //2, 2, 0.5, 0.2, 0.125, 0.05, 0.04, 0.03, alternatively make a list and use the return as index values var/descmessage = "[(L.lewd?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]" if (L.lewd) - //TODO: ADD THIS IN WHEN MASO IS MERGED - /* if(L.has_trait(TRAIT_MASO)) L.adjustArousalLoss(3*power_multiplier) descmessage += "And yet, it feels so good..!" //I don't really understand masco, is this the right sort of thing they like? E.enthrallTally += power_multiplier E.resistanceTally -= power_multiplier addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've let [E.enthrallGender] down...!"), 5) - else*/ - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've let [E.enthrallGender] down..."), 5) + else + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've let [E.enthrallGender] down..."), 5) else addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've failed [E.master]..."), 5) E.resistanceTally += power_multiplier @@ -1115,7 +1100,7 @@ if (E.phase > 2) for (var/trigger in E.customTriggers) speaktrigger += "[trigger], " - C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself! + C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself! Actually this will trigger yourself oops. addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, /atom/movable/proc/say, "[speaktrigger]"), 5) C.remove_trait(TRAIT_DEAF, "Triggers") @@ -1207,12 +1192,12 @@ var/mob/living/L = V var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall) switch(E.phase) - if(3 to INFINITY)//Tier 3 only + if(3)//Tier 3 only E.status = "heal" E.statusStrength = (5 * power_multiplier) E.cooldown += 5 addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "You begin to lick your wounds."), 5) - L.Stun(5 * power_multiplier) + L.Stun(15 * power_multiplier) //STUN else if(findtext(message, stun_words)) @@ -1276,7 +1261,7 @@ var/mob/living/L = V var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall) switch(E.phase) - if(3 to INFINITY)//Tier 3 only + if(3)//Tier 3 only E.status = "pacify" E.cooldown += 10 @@ -1286,7 +1271,7 @@ var/mob/living/L = V var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall) switch(E.phase) - if(3 to INFINITY)//Tier 3 only + if(3)//Tier 3 only E.statusStrength = 2* power_multiplier E.status = "charge" E.cooldown += 10 diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 045d6807bd..bdef46d001 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -213,8 +213,8 @@ enthrallID = E.creatorID enthrallGender = E.creatorGender master = get_mob_by_key(enthrallID) - if(M.ckey == enthrallID) - owner.remove_status_effect(src)//This shouldn't happen, but just in case, also it's not worth the overhead of giving someone themselves; they can't proc themselves as velvet removes them from the list. + //if(M.ckey == enthrallID) + // owner.remove_status_effect(src)//This shouldn't happen, but just in case, also it's not worth the overhead of giving someone themselves; they can't proc themselves as velvet removes them from the list. redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed# RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear) var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN) //It's their brain! @@ -321,6 +321,15 @@ M.confused = 0 resistGrowth = 0 else + if (cooldown > 0) + cooldown -= (0.8 + (mental_capacity/500)) + cooldownMsg = FALSE + else if (cooldownMsg == FALSE) + if(DistApart < 10) + if(master.lewd) + to_chat(master, "Your pet [owner] appears to have finished internalising your last command.") + else + to_chat(master, "Your thrall [owner] appears to have finished internalising your last command.") return//If you break the mind of someone, you can't use status effects on them. @@ -515,13 +524,10 @@ if (cTriggered == TRUE) return var/mob/living/carbon/C = owner - //message_admins("[C] heard something!") raw_message = lowertext(raw_message) for (var/trigger in customTriggers) var/cached_trigger = lowertext(trigger) - //message_admins("[C] heard something: [message] vs [trigger] vs [raw_message]") if (findtext(raw_message, cached_trigger))//if trigger1 is the message - message_admins("[C] has been triggered with [trigger]!") cTriggered = TRUE //Speak (Forces player to talk) works @@ -551,7 +557,7 @@ if (C.has_trait(TRAIT_NYMPHO)) if (C.getArousalLoss() > 80) C.mob_climax(forced_climax=TRUE) - C.SetStun(20)//We got your stun effects in somewhere, Kev. + C.SetStun(10)//We got your stun effects in somewhere, Kev. else C.adjustArousalLoss(10) else @@ -637,7 +643,7 @@ to_chat(owner, "You attempt to shake the mental cobwebs from your mind!") //nymphomania if (M.canbearoused && M.has_trait(TRAIT_NYMPHO))//I'm okay with this being removed. - deltaResist*= ((100 - M.arousalloss/100)/100)//more aroused you are, the weaker resistance you can give + deltaResist*= 0.5-(((2/200)*M.arousalloss)/1)//more aroused you are, the weaker resistance you can give, the less you are, the more you gain. (+/- 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")) 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 b99e9c830d..061ecf9972 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -130,7 +130,7 @@ do_teleport(M, get_turf(M), 10, asoundin = 'sound/effects/phasein.ogg') do_sparks(5,FALSE,src) M.reagents.remove_reagent(src.id, 0.5)//So you're not stuck for 10 minutes teleporting - ..() //loop function + ..() //Addiction /datum/reagent/fermi/eigenstate/addiction_act_stage1(mob/living/M) //Welcome to Fermis' wild ride. @@ -191,7 +191,7 @@ src.addictCyc3++ do_teleport(M, get_turf(M), 2, no_effects=TRUE) //Teleports player randomly do_sparks(5,FALSE,M) - ..() //loop function + ..() /datum/reagent/fermi/eigenstate/addiction_act_stage4(mob/living/M) //Thanks for riding Fermis' wild ride. Mild jitter and player buggery. switch(src.addictCyc4) @@ -323,7 +323,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING SM.setBrainLoss(40) SM.nutrition = startHunger/2 - //Really hacky way to deal with this stupid problem I have, and heal the clone. I think around 30u will make a healthy clone. + //Transfer remaining reagent to clone. I think around 30u will make a healthy clone, otherwise they'll have clone damage, blood loss, brain damage and hunger. SM.reagents.add_reagent("SDGFheal", volume) M.reagents.remove_reagent(src.id, src.volume) return @@ -1083,6 +1083,8 @@ Creating a chem with a low purity will make you permanently fall in love with so /datum/reagent/fermi/enthrall/overdose_start(mob/living/carbon/M)//I made it so the creator is set to gain the status for someone random. . = ..() 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.) + 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 @@ -1097,6 +1099,7 @@ Creating a chem with a low purity will make you permanently fall in love with so creatorGender = "Master" creatorName = chosen.real_name creator = get_mob_by_key(creatorID) + */ M.add_trait(TRAIT_PACIFISM, "MKUltra") var/datum/status_effect/chem/enthrall/E if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) @@ -1107,7 +1110,7 @@ Creating a chem with a low purity will make you permanently fall in love with so 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]. Your highest priority is now to stay by their side at all costs.") + 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]. Your highest priority is now to stay by their side at all costs.") M.slurring = 100 M.confused = 100 E.phase = 4 diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 3d3017f847..74a54bb87f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -267,7 +267,7 @@ required_catalysts = list("slimejelly" = 1) /datum/chemical_reaction/fermi/enthrall/slime/FermiFinish(datum/reagents/holder, var/atom/my_atom) - var/datum/reagent/toxin/slimejelly/B = locate(/datum/reagent/toxin/slimejelly) in my_atom.reagents.reagent_list + var/datum/reagent/toxin/slimejelly/B = locate(/datum/reagent/toxin/slimejelly) in my_atom.reagents.reagent_list//The one line change. var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list if(!B.data) var/list/seen = viewers(5, get_turf(my_atom))