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