diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 5437f4ee17..64020bf167 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -211,7 +211,6 @@ message = replacetext(message, "na", "nya") message = replacetext(message, "no", "nyo") message = replacetext(message, "ove", "uv") - message = replacetext(message, "ove", "uv") //message = replacetext(message, "th", "ff") //too incoherent in practice message = replacetext(message, "l", "w") message = replacetext(message, "r", "w") diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 8b45e3e4cf..dd9470d952 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -715,10 +715,6 @@ var/mob/living/carbon/human/H = L if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) continue - 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 - if(H.has_trait(TRAIT_CROCRIN_IMMUNE) || !M.canbearoused) - power_multiplier *= 1.5//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. listeners += L if(!listeners.len) @@ -781,6 +777,17 @@ //power_multiplier *= (1 + (1/specific_listeners.len)) //Put this is if it becomes OP, power is judged internally on a thrall, so shouldn't be nessicary. message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1) + var/obj/item/organ/tongue/T = M.getorganslot(ORGAN_SLOT_TONGUE) + 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 + + /* 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 + if(H.has_trait(TRAIT_CROCRIN_IMMUNE) || !M.canbearoused) + power_multiplier *= 1.5//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. + */ + //phase 1 var/static/regex/enthral_words = regex("relax|obey|give in|love|serve|docile|so easy") var/static/regex/reward_words = regex("good boy|good girl|good pet") @@ -789,9 +796,9 @@ var/static/regex/punish_words = regex("bad boy|bad girl|bad pet") var/static/regex/desire_words = regex("good boy|good girl|good pet") 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") + var/static/regex/forget_words = regex("forget|muddled|awake and forget") //phase 2 - var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE + var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //lewd var/static/regex/awoo_words = regex("howl|awoo|bark") var/static/regex/nya_words = regex("nya|meow|mewl") var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt") @@ -800,7 +807,7 @@ var/static/regex/vomit_words = regex("vomit|throw up|sick") //phase 3 //var/static/regex/hallucinate_words = regex("see the truth|hallucinate") - var/static/regex/wakeup_words = regex("wake up|awaken") + var/static/regex/wakeup_words = regex("revert|awaken|*snap") var/static/regex/heal_words = regex("live|heal|survive|mend|life|heroes never die") var/static/regex/hurt_words = regex("die|suffer|hurt|pain|death") var/static/regex/bleed_words = regex("bleed|there will be blood") @@ -847,7 +854,7 @@ //enthral_words, reward_words, silence_words attract_words punish_words desire_words resist_words forget_words //Tier 1 - //ENTHRAL + //ENTHRAL mixable if(findtext(message, enthral_words)) for(var/V in listeners) var/mob/living/L = V @@ -860,7 +867,7 @@ E.enthralTally += power_multiplier*1.25 cooldown = 100 - //REWARD + //REWARD mixable if(findtext(message, reward_words)) for(var/V in listeners) var/mob/living/L = V @@ -874,7 +881,7 @@ E.resistanceTally /= 2*power_multiplier cooldown = COOLDOWN_VTHRAL - //PUNISH + //PUNISH mixable if(findtext(message, punish_words)) for(var/V in listeners) var/mob/living/L = V @@ -948,14 +955,47 @@ cooldown = 0 for(var/V in listeners) var/mob/living/M = V - playsound(get_turf(H), pick('sound/effects/meow1.ogg', 'modular_citadel/sound/voice/merowr.ogg', 'modular_citadel/sound/voice/nya.ogg'), , 50, 1, -1) + playsound(get_turf(H), pick('sound/effects/meow1.ogg', 'modular_citadel/sound/voice/merowr.ogg', 'modular_citadel/sound/voice/nya.ogg'), 50, 1, -1) M.emote("me","lets out a nya!") //SLEEP else if((findtext(message, sleep_words))) cooldown = COOLDOWN_STUN for(var/mob/living/carbon/C in listeners) - C.Sleeping(40 * power_multiplier) + C.Sleeping(20 * power_multiplier *) + + //WAKE UP + else if((findtext(message, wakeup_words))) + cooldown = COOLDOWN_DAMAGE + for(var/V in listeners) + var/mob/living/L = V + var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral) + switch(E.phase) + if(0) + E.phase = 3 + E.status = null + to_chat(C, "The snapping of your Master's fingers brings you back to your enthralled state, obedient and ready to serve.") + L.SetSleeping(0) + + + //TO ADD + //progam triggers and responses with mental costs + //Antiresist + //Figure out cooldown + + //STRIP + else if((findtext(message, strip_words))) + for(var/V in listeners) + var/mob/living/L = V + var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral) + switch(E.phase) + if(2 to INFINITY)//Tier 2 only + E.phase = 1 + var/items = M.get_contents() + for(var/I in items) + M.dropItemToGround(I, TRUE) + + / var/i = 0 //STUN @@ -964,7 +1004,7 @@ for(var/V in listeners) var/mob/living/L = V var/datum/status_effect/chem/enthral/E = has_status_effect(/datum/status_effect/chem/enthral) - L.Stun(60 * power_multiplier) + L.Stun(30 * power_multiplier) //KNOCKDOWN else if(findtext(message, knockdown_words)) @@ -988,12 +1028,7 @@ for(var/mob/living/carbon/C in listeners) new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0) - //WAKE UP - else if((findtext(message, wakeup_words))) - cooldown = COOLDOWN_DAMAGE - for(var/V in listeners) - var/mob/living/L = V - L.SetSleeping(0) + //HEAL else if((findtext(message, heal_words))) diff --git a/modular_citadel/code/datums/mood_events/chem_events.dm b/modular_citadel/code/datums/mood_events/chem_events.dm index 7f55607832..f14a31a46d 100644 --- a/modular_citadel/code/datums/mood_events/chem_events.dm +++ b/modular_citadel/code/datums/mood_events/chem_events.dm @@ -7,22 +7,22 @@ description = "I am a good pet for Master.\n" /datum/mood_event/enthrallpraise - mood_change = 10 - description = "Master praised me!!\n" + mood_change = 12 + description = "I feel so happy! I'm a good pet who Master loves!\n" timeout = 400 /datum/mood_event/enthrallscold - mood_change = -10 - description = "I have let Master down.\n"//aaa I'm not kinky enough for this - timeout = 400 + mood_change = -12 + description = "I've failed my Master... I feel like crying.\n"//aaa I'm not kinky enough for this + timeout = 600 /datum/mood_event/enthrallmissing1 - mood_change = -5 - description = "I miss Master's presence.\n" + mood_change = -10 + description = "I feel empty when Master's not around..\n" /datum/mood_event/enthrallmissing2 - mood_change = -10 - description = "I really miss Masters presence.\n" + mood_change = -15 + description = "I feel so lost in this complicated world without Master, where are they?!\n" /datum/mood_event/enthrallmissing3 mood_change = -25 diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 9d68233ca5..363cbad2a3 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -172,23 +172,31 @@ var/status = null var/statusStrength = 0 var/enthrallID + var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN) + var/mental_capacity //Higher it is, lower the cooldown on commands, capacity reduces with resistance. var/mindbroken = FALSE var/datum/weakref/redirect_component1 var/datum/weakref/redirect_component2 + var/distancelist = list(4,3,2,1.5,1,0.8,0.6,0.4,0.2) + var/withdrawal = FALSE + var/withdrawalTick = 0 + var/customTriggers /datum/status_effect/chem/enthrall/on_apply(mob/living/carbon/M) - if(M.ID == enthralID) + if(M.ID == enthrallID) owner.remove_status_effect(src)//This should'nt 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_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 recirect component for listening too. + mental_capacity = 500 - B.get_brain_damage() /datum/status_effect/chem/enthrall/tick(mob/living/carbon/M) if(M.has_trait(TRAIT_MINDSHIELD)) resistanceTally += 5 if(prob(20)) - to_chat(owner, "You feel your lucidity returning as the mindshield fights") + to_chat(owner, "You feel your lucidity returning as the mindshield attempts to return your brain to normal function.") + //phase specific events switch(phase) if(-1)//fully removed owner.remove_status_effect(src) @@ -197,11 +205,66 @@ if(1)//Initial enthrallment if (enthrallTally > 100) phase += 1 + mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity. + enthrallTally = 0 return if (resistanceTally > 100) + enthrallTally *= 0.5 + phase -= 1 + resistanceTally = 0 + owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. + return + if(prob(10)) + to_chat(owner, "[pick("It feels so good to listen to [enthrallID.name]", "[enthrallID.name]", "")].") - if resist + //distance calculations + switch(get_dist(enthrallID, owner)) + if(0 to 8)//If the enchanter is within range, increase enthrallTally, remove withdrawal subproc and undo withdrawal effects. + enthrallTally += distancelist[get_dist(enthrallID, owner)+1] + var/withdrawal = FALSE + if(withdrawalTick > 0) + withdrawalTick -= 2 + if(9 to INFINITY)//If + var/withdrawal = TRUE + //chem calculations + if (user.has_reagent("MKUltra")) + enthrallTally += 2 + else + if (phase < 3) + resistance + if (mental_capacity <= 500) + if (user.has_reagent("mannitol")) + mental_capacity += 1 + if (user.has_reagent("neurine")) + mental_capacity += 2 + + //Withdrawal subproc: + if (withdrawal == TRUE)//Your minions are really REALLY needy. + switch(withdrawalTick) + if(20 to 40)//Gives wiggle room, so you're not SUPER needy + prob(10) + to_chat(owner, "You're starting to miss your Master/Mistress.") + prob(5) + M.adjustBrainLoss(1) + if(41) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1) + if(42 to 65) + prob(10) + to_chat(owner, "You're starting to miss your Master/Mistress.") + 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) + if(67 to 90) + M.emote("cry")//does this exist? + + + + withdrawalTick++ + +//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()) @@ -211,16 +274,27 @@ /* /datum/status_effect/chem/enthrall/mob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - if(enthralID.name in message || enthralID.first_name in message) + if(enthrallID.name in message || enthrallID.first_name in message) return else . = ..() */ +/datum/status_effect/chem/enthrall/proc/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + return +/* /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) + if (status == "Sleeper") + return + else if (status == "Antiresist")//If ordered to not resist + if (statusStrength > 0) + statusStrength -= 2 + return + else + status = null if(prob(10)) M.emote("me",1,"squints, shaking their head for a moment.")//shows that you're trying to resist sometimes to_chat(owner, "You attempt to shake the mental cobwebs from your mind!") @@ -279,15 +353,18 @@ if(istype(owner.neck, /obj/item/clothing/neck/petcollar)) deltaResist *= 0.8 + if (deltaResist>0)//just in case + deltaResist /= phase//later phases require more resistance + /datum/status_effect/chem/enthrall/proc/owner_say(mob/living/carbon/M) //I can only hope this works - var/static/regex/owner_words = regex("[enthralID.real_name]|[enthralID.first_name()]") + var/static/regex/owner_words = regex("[enthrallID.real_name]|[enthrallID.first_name()]") if(findtext(message, enthral_words)) - if(enthralID.gender == FEMALE) - message = replacetext(message, enthralID.real_name, "Mistress") - message = replacetext(message, enthralID.first_name(, "Mistress") + if(enthrallID.gender == FEMALE) + message = replacetext(message, enthrallID.real_name, "Mistress") + message = replacetext(message, enthrallID.first_name(, "Mistress") else - message = replacetext(message, enthralID.real_name, "Master") - message = replacetext(message, enthralID.first_name(, "Master") + message = replacetext(message, enthrallID.real_name, "Master") + message = replacetext(message, enthrallID.first_name(, "Master") return message /* /datum/status_effect/chem/OwO 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 ae71736d24..b5b9efb39a 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -730,8 +730,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING description = "Need a description." color = "#A080H4" // rgb: , 0, 255 taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses" - metabolization_rate = 0 - //overdose_threshold = 20 + metabolization_rate = 0.5 + overdose_threshold = 200 //addiction_threshold = 30 //addiction_stage1_end = 9999//Should never end. var/creatorID //add here @@ -778,7 +778,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING if(prob(20)) var/list/seen = viewers(5, get_turf(M))//Sound and sight checkers //for(var/victim in seen) - to_chat(M, "You notice [pick([victim])]'s bulge [pick("OwO!", "uwu!")]") + to_chat(M, "You notice [pick([seen])]'s bulge [pick("OwO!", "uwu!")]") if(21) var/obj/item/organ/tongue/T = M.getorganslot(ORGAN_SLOT_TONGUE) var/obj/item/organ/tongue/nT = new /obj/item/organ/tongue/OwO @@ -794,8 +794,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.emote("awoo") if(prob(20)) var/list/seen = viewers(5, get_turf(M))//Sound and sight checkers - for(var/victim in seen) - to_chat(M, "You notice [pick([victim])]'s bulge [pick("OwO!", "uwu!")]") + //for(var/victim in seen) + to_chat(M, "You notice [pick([seen])]'s bulge [pick("OwO!", "uwu!")]") ..() /* diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index e6b23f6e67..ced69baf42 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -131,6 +131,6 @@ /datum/chemical_reaction/enthral/on_reaction(datum/reagents/holder) var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - var/enthralID = B.get_blood_id() + var/enthrallID = B.get_blood_id() var/datum/reagent/fermi/enthral/E = locate(/datum/reagent/fermi/enthral) in holder.reagent_list - E.enthralID = enthralID + E.enthrallID = enthrallID