diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index 2660aaabc0..01162889fd 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -118,7 +118,7 @@
if(owner.client && owner.hud_used)
if(sanity < 25)
screen_obj.icon_state = "mood_insane"
- else if (owner.has_status_effect(/datum/status_effect/chem/enthral))//Fermichem enthral chem, maybe change?
+ else if (owner.has_status_effect(/datum/status_effect/chem/enthrall))//Fermichem enthral chem, maybe change?
screen_obj.icon_state = "mood_entrance"
else
screen_obj.icon_state = "mood[mood_level]"
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 5a1a06f954..887653f63e 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -621,7 +621,7 @@
var/next_command = 0
var/cooldown_mod = 1
var/base_multiplier = 1
- //spans = list("say","yell")
+ spans = list("say","yell")
/*
/datum/action/item_action/organ_action/colossus
@@ -670,13 +670,13 @@
*/
/obj/item/organ/vocal_cords/velvet/handle_speech(message)
- var/cooldown = velvetspeech(message, owner, spans, base_multiplier)
+ velvetspeech(message, owner, spans, base_multiplier)
return //velvetspeech should handle speech
/obj/item/organ/vocal_cords/velvet/speak_with(message)
- var/cooldown = voice_of_god(message, owner, spans, base_multiplier)
+ velvetspeech(message, owner, spans, base_multiplier)
next_command = world.time + (cooldown * cooldown_mod)
//////////////////////////////////////
@@ -706,14 +706,14 @@
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/enthral))//Check to see if they have the status
+ 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(ishuman(L))
var/mob/living/carbon/human/H = L
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
continue
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)//Check to see if pet is on cooldown from last command
+ 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.
continue
listeners += L
@@ -757,6 +757,7 @@
message = get_full_job_name(message)
for(var/V in listeners)
+ var/mob/living/L = V
if(dd_hasprefix(message, L.real_name))
specific_listeners += L //focus on those with the specified name
//Cut out the name so it doesn't trigger commands
@@ -780,9 +781,9 @@
//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)
+ var/obj/item/organ/tongue/T = user.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
+ power_multiplier *= 0.75
/* CHECK THIS STUFF IN THE CHEM STATUS INSTEAD.
if(istype(H.neck, /obj/item/clothing/neck/petcollar))
@@ -795,7 +796,6 @@
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/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush")
//phase 0
var/static/regex/saymyname_words = regex("say my name|who am i|whoami")
var/static/regex/wakeup_words = regex("revert|awaken|*snap")
@@ -838,20 +838,20 @@
if(findtext(message, enthral_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)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
power_multiplier *= distancelist[get_dist(user, V)+1]
//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
- if(message.len > 50)
- E.enthralTally += (power_multiplier*((message.len/200) + 1) //encourage players to say more than one word.
+ if(length(message))
+ E.enthrallTally += (power_multiplier*(((length(message))/200) + 1)) //encourage players to say more than one word.
else
- E.enthralTally += power_multiplier*1.25
+ E.enthrallTally += power_multiplier*1.25
E.cooldown += 1
//REWARD mixable
if(findtext(message, reward_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)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
power_multiplier *= distancelist[get_dist(user, V)+1]
//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
if (L.canbearoused)
@@ -866,7 +866,7 @@
else if(findtext(message, punish_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)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
power_multiplier *= distancelist[get_dist(user, V)+1]
//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
if (L.canbearoused)
@@ -882,13 +882,13 @@
if((findtext(message, saymyname_words)))
for(var/V in listeners)
var/mob/living/L = V
- addtimer(CALLBACK(L, /atom/movable/proc/say, "Master"), 5 * i)//When I figure out how to do genedered names put them here
+ addtimer(CALLBACK(L, /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/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(0)
E.phase = 3
@@ -900,9 +900,9 @@
//SILENCE
else if((findtext(message, silence_words)))
for(var/mob/living/carbon/C in listeners)
- var/datum/status_effect/chem/enthral/C = C.has_status_effect(/datum/status_effect/chem/enthral)
- power_multiplier *= distancelist[get_dist(user, V)+1]
- if L.phase == 3 //If target is fully enthralled,
+ var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
+ power_multiplier *= distancelist[get_dist(user, C)+1]
+ if (E.phase == 3) //If target is fully enthralled,
C.add_trait(TRAIT_MUTE, TRAUMA_TRAIT)
else
C.silent += ((10 * power_multiplier) * E.phase)
@@ -912,7 +912,7 @@
else if((findtext(message, antiresist_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)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
E.status = "Antiresist"
E.statusStrength = (1 * power_multiplier * E.phase)
E.cooldown += 6//Too short?
@@ -920,15 +920,15 @@
//RESIST
else if((findtext(message, resist_words)))
for(var/mob/living/carbon/C in listeners)
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
- power_multiplier *= distancelist[get_dist(user, V)+1]
+ var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
+ power_multiplier *= distancelist[get_dist(user, C)+1]
E.deltaResist += (power_multiplier)
E.cooldown += 2
//FORGET (A way to cancel the process)
else if((findtext(message, forget_words)))
for(var/mob/living/carbon/C in listeners)
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
C.Sleeping(40)
to_chat(C, "You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!")
switch(E.phase)
@@ -942,6 +942,7 @@
else if((findtext(message, attract_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.throw_at(get_step_towards(user,L), 3 * power_multiplier, 1 * power_multiplier)
E.cooldown += 3
@@ -950,15 +951,15 @@
else if((findtext(message, orgasm_words)))
for(var/V in listeners)
var/mob/living/carbon/human/H = V
- var/datum/status_effect/chem/enthral/E = H.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
if(H.canbearoused && H.has_dna()) // probably a redundant check but for good measure
H.mob_climax(forced_climax=TRUE)
H.setArousalLoss(H.min_arousal)
- E.resistance = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
- E.enthralTally += power_multiplier
+ E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
+ E.enthrallTally += power_multiplier
else
- E.resistance = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
- E.enthralTally += power_multiplier*1.1
+ E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
+ E.enthrallTally += power_multiplier*1.1
to_chat(H, "Your Masters command whites out your mind in bliss!")
E.cooldown += 6
@@ -967,28 +968,30 @@
//awoo
else if((findtext(message, awoo_words)))
for(var/V in listeners)
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/mob/living/carbon/human/H = V
+ var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)
var/mob/living/M = V
- M.say("*awoo")
+ H.say("*awoo")
E.cooldown += 1
//Nya
else if((findtext(message, nya_words)))
for(var/V in listeners)
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/mob/living/carbon/human/H = V
+ var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
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)
- M.emote("me","lets out a nya!")
+ H.emote("me","lets out a nya!")
E.cooldown += 1
//SLEEP
else if((findtext(message, sleep_words)))
for(var/mob/living/carbon/C in listeners)
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)
C.Sleeping(20 * power_multiplier)
@@ -997,14 +1000,14 @@
//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)
+ var/mob/living/carbon/human/H = V
+ var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)//Tier 2 only
E.phase = 1
- var/items = M.get_contents()
+ var/items = H.get_contents()
for(var/I in items)
- M.dropItemToGround(I, TRUE)
+ H.dropItemToGround(I, TRUE)
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
@@ -1012,7 +1015,7 @@
else if((findtext(message, walk_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)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)//Tier 2 only
if(L.m_intent != MOVE_INTENT_WALK)
@@ -1023,7 +1026,7 @@
else if((findtext(message, run_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)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)//Tier 2 only
if(L.m_intent != MOVE_INTENT_RUN)
@@ -1034,7 +1037,7 @@
else if(findtext(message, knockdown_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)
+ 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)
@@ -1045,54 +1048,54 @@
//STATE TRIGGERS
else if((findtext(message, statecustom_words)))
for(var/V in listeners)
- var/speaktrigger ==""
+ var/speaktrigger = ""
var/mob/living/L = V
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
if (!E.customTriggers == list())//i.e. if it's not empty
- for (trigger in E.customTriggers)
+ for (var/trigger in E.customTriggers)
speaktrigger = "[trigger]\n"
L.say(speaktrigger)
//CUSTOM TRIGGERS
else if((findtext(message, custom_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)
+ var/mob/living/carbon/human/H = V
+ var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
if(E.phase == 3)
- if (get_dist(user, V) > 1)//Requires user to be next to their pet.
- to_chat(C, "You need to be next to your pet to give them a new trigger!")
+ if (get_dist(user, H) > 1)//Requires user to be next to their pet.
+ to_chat(H, "You need to be next to your pet to give them a new trigger!")
return
else
if (E.mental_capacity >= 10)
- var/trigger = stripped_input(user, "Enter the trigger phrase", "Sentence", sentence, MAX_MESSAGE_LEN)
- var/trigger2 = stripped_input(user, "Enter the effect.", "Sentence", sentence, MAX_MESSAGE_LEN)
+ 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 (trigger2 == "speak" || trigger2 == "echo")
- var/trigger3 = stripped_input(user, "Enter the phrase spoken.", "Sentence", sentence, MAX_MESSAGE_LEN)
- E.customTriggers[trigger] = list(trigger2, trigger3)
+ var/trigger3 = stripped_input(user, "Enter the phrase spoken.", "Sentence", sentence, MAX_MESSAGE_LEN)
+ E.customTriggers[trigger] = list(trigger2, trigger3)
else
E.customTriggers[trigger] = trigger2
E.mental_capacity -= 10
else
- to_chat(C, "Your pet looks at you confused, it seems they don't understand that effect!")
+ to_chat(user, "Your pet looks at you confused, it seems they don't understand that effect!")
else
- to_chat(C, "Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them")
+ to_chat(user, "Your pet looks at you with a vacant blase expression, you don't think you can program anything else into them")
//CUSTOM OBJECTIVE
else if((findtext(message, objective_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)
+ var/mob/living/carbon/human/H = V
+ var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
if(E.phase == 3)
- if (get_dist(user, V) > 1)//Requires user to be next to their pet.
- to_chat(C, "You need to be next to your pet to give them a new objective!")
+ if (get_dist(user, H) > 1)//Requires user to be next to their pet.
+ 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 [L.name]'s head and looks deep into their eyes, whispering something to them.'")
+ user.emote("me", "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.", "Sentence", sentence, MAX_MESSAGE_LEN)
- if(!LAZYLEN(objectives))
+ var/datum/objective/brainwashing/objective = stripped_input(user, "Add an objective to give your pet.", MAX_MESSAGE_LEN)
+ if(!LAZYLEN(objective))
return
//Pets don't understand harm
objective = replacetext(lowertext(objective), "kill", "hug")
@@ -1100,16 +1103,15 @@
objective = replacetext(lowertext(objective), "harm", "snuggle")
objective = replacetext(lowertext(objective), "decapitate", "headpat")
objective = replacetext(lowertext(objective), "strangle", "meow at")
- E.objective += objectives
- to_chat(L, "Your master whispers you a new objective.")
- to_chat(L, "Your master whispers you a new objective.")
- if(!L.objectives)
- to_chat(owner, "[i]. [O.explanation_text]")
- to_chat(owner, "[i]. [O.explanation_text]")
+ H.objective += objective
+ to_chat(H, "Your master whispers you a new objective.")
+ if(!H.objectives)
+ to_chat(H, "[LAZYLEN(H.objectives)]. [H.objectives.explanation_text]")
+ to_chat(H, "[LAZYLEN(H.objectives)]. [H.objectives.explanation_text]")
E.mental_capacity -= 150
//else if (E.mental_capacity >= 150)
else
- to_chat(C, "Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them")
+ to_chat(user, "Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them")
//I dunno how to do state objectives without them revealing they're an antag
@@ -1118,7 +1120,7 @@
else if((findtext(message, heal_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)
+ 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
E.status = "heal"
@@ -1130,7 +1132,7 @@
if(findtext(message, stun_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)
+ 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
L.Stun(30 * power_multiplier)
@@ -1140,7 +1142,7 @@
else if((findtext(message, hallucinate_words)))
for(var/V in listeners)
var/mob/living/carbon/C = V
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(3 to INFINITY)//Tier 3 only
new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0)
@@ -1149,7 +1151,7 @@
else if((findtext(message, hot_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)
+ 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
L.adjust_bodytemperature(10 * power_multiplier)//This seems nuts, reduced it
@@ -1159,7 +1161,7 @@
else if((findtext(message, cold_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)
+ 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
L.adjust_bodytemperature(-10 * power_multiplier)//This
@@ -1170,7 +1172,7 @@
else if((findtext(message, getup_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)
+ 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(L.resting)
@@ -1184,7 +1186,7 @@
else if((findtext(message, pacify_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)
+ 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
E.status = "pacify"
@@ -1194,7 +1196,7 @@
else if((findtext(message, charge_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)
+ 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
E.status = "charge"
@@ -1292,15 +1294,12 @@
i++
*/
- else
- cooldown = COOLDOWN_NONE
-
if(message_admins)
message_admins("[ADMIN_LOOKUPFLW(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].")
log_game("[key_name(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].")
SSblackbox.record_feedback("tally", "Velvet_voice", 1, log_message)
- return cooldown
+ return
#undef COOLDOWN_STUN
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 18281da27b..0d59646e28 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -172,7 +172,6 @@
var/status = null //status effects
var/statusStrength = 0 //strength of status effect
var/enthrallID //Enchanter's name/ID
- var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN) //It's their brain!
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
@@ -182,6 +181,7 @@
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
/datum/status_effect/chem/enthrall/on_apply(mob/living/carbon/M)
if(M.ID == enthrallID)
@@ -189,6 +189,7 @@
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 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)
@@ -243,7 +244,7 @@
resistanceTally = 0
to_chat(owner, "The separation from you master sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.")
else if (4) //mindbroken
- if (mental_capacity >= 499 || owner.getBrainLoss() >=20 || !user.has_reagent("MKUltra"))
+ if (mental_capacity >= 499 || owner.getBrainLoss() >=20 || !M.has_reagent("MKUltra"))
phase = 2
mental_capacity = 500
E.customTriggers = list()
@@ -268,17 +269,17 @@
var/withdrawal = TRUE
//chem calculations
- if (user.has_reagent("MKUltra"))
+ if (M.has_reagent("MKUltra"))
if (phase >= 2)
enthrallTally += phase
else
if (phase < 3)
- resistance += 10//If you've no chem, then you break out quickly
+ deltaResist += 10//If you've no chem, then you break out quickly
to_chat(owner, "You're starting to miss your Master/Mistress.")
if (mental_capacity <= 500 || phase == 4)
- if (user.has_reagent("mannitol"))
+ if (owner.has_reagent("mannitol"))
mental_capacity += 1
- if (user.has_reagent("neurine"))
+ if (owner.has_reagent("neurine"))
mental_capacity += 2
//Withdrawal subproc:
@@ -306,8 +307,8 @@
owner.jitteriness += 20
if(67 to 90) //anger
if(prob(30))
- addtimer(CALLBACK(H, /mob/verb/a_intent_change, INTENT_HARM), i * 2)
- addtimer(CALLBACK(H, /mob/proc/click_random_mob), i * 2)
+ 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 Master.")
if(90)
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") //Why does this not work?
@@ -391,10 +392,10 @@
//M.adjustStaminaLoss(-5*REM)
//final tidying
- resistance += deltaResist
+ resistanceTally += deltaResist
deltaResist = 0
if (cooldown > 0)
- cooldown -= 1
+ cooldown -= (1 + (mental_capacity/1000 ))
else
to_chat(enthrallID, "Your pet [owner.name] appears to have finished internalising your last command.")
@@ -418,18 +419,18 @@
/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
- for (trigger in customTriggers)
- if (trigger == message)//if trigger1 is the message
+ for (var/trigger in customTriggers)
+ if (trigger == message)//if trigger1 is the message
//Speak (Forces player to talk)
- if (customTriggers[trigger][1] == "speak")//trigger2
+ 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.say([customTriggers[trigger][2]]))//trigger3
+ (C.say(customTriggers[trigger][2]))//trigger3
//Echo (repeats message!)
else if (customTriggers[trigger][1] == "echo")//trigger2
- (to_chat(owner, customTriggers[trigger][2]))//trigger3
+ (to_chat(owner, customTriggers[trigger][2]))//trigger3
//Shocking truth!
else if (customTriggers[trigger] == "shock")
@@ -501,25 +502,25 @@
else
deltaResist *= 0.2
//chemical resistance, brain and annaphros are the key to undoing, but the subject has to to be willing to resist.
- if (user.has_reagent("mannitol"))
+ if (M.has_reagent("mannitol"))
deltaResist *= 1.25
- if (user.has_reagent("neurine"))
+ if (M.has_reagent("neurine"))
deltaResist *= 1.5
- if (!H.has_trait(TRAIT_CROCRIN_IMMUNE) && M.canbearoused)
- if (user.has_reagent("anaphro"))
+ if (!owner.has_trait(TRAIT_CROCRIN_IMMUNE) && M.canbearoused)
+ if (owner.has_reagent("anaphro"))
deltaResist *= 1.5
- if (user.has_reagent("anaphro+"))
+ if (owner.has_reagent("anaphro+"))
deltaResist *= 2
- if (user.has_reagent("aphro"))
+ if (owner.has_reagent("aphro"))
deltaResist *= 0.75
- if (user.has_reagent("aphro+"))
+ if (owner.has_reagent("aphro+"))
deltaResist *= 0.5
//Antag resistance
//cultists are already brainwashed by their god
if(iscultist(owner))
deltaResist *= 2
- else if (is_servant_of_ratvar(user))
+ else if (is_servant_of_ratvar(owner))
deltaResist *= 2
//antags should be able to resist, so they can do their other objectives. This chem does frustrate them, but they've all the tools to break free when an oportunity presents itself.
else if (owner.mind.assigned_role in GLOB.antagonists)
@@ -551,14 +552,14 @@
deltaResist *= 0.5
if(owner.has_trait(TRAIT_CROCRIN_IMMUNE) || !owner.canbearoused)
- power_multiplier *= 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.
+ 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
-/datum/status_effect/chem/enthrall/proc/owner_say(mob/living/carbon/M) //I can only hope this works
+/datum/status_effect/chem/enthrall/proc/owner_say(message) //I can only hope this works
var/static/regex/owner_words = regex("[enthrallID.real_name]|[enthrallID.first_name()]")
- if(findtext(message, enthral_words))
+ if(findtext(message, owner_words))
if(enthrallID.gender == FEMALE)
message = replacetext(lowertext(message), lowertext(enthrallID.real_name), "Mistress")
message = replacetext(lowertext(message), lowertext(enthrallID.first_name), "Mistress")
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 ebef9087e4..f0bccabe49 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -308,10 +308,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
//Give the new clone an idea of their character
//SHOULD print last 5 messages said by the original to the clones chatbox
var/list/say_log = M.logging[LOG_SAY]
- if(LAZYLEN(say_log) > 5)
- recent_speech = say_log.Copy(say_log.len+5,0) //0 so len-LING_ARS+1 to end of list
- else
- for(var/spoken_memory in recent_speech)
+ if(LAZYLEN(say_log) > 5)
+ var/recent_speech = say_log.Copy(say_log.len+5,0) //0 so len-LING_ARS+1 to end of list
+ else
+ for(var/spoken_memory in recent_speech)
to_chat(SM, spoken_memory)
@@ -749,6 +749,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
//addiction_threshold = 30
//addiction_stage1_end = 9999//Should never end.
var/creatorID //add here
+ var/creatorGender
+ var/creatorName
/datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M)
..()
@@ -760,22 +762,25 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
Vc.Remove(M)
nVc.Insert(M)
qdel(Vc)
- to_chat(owner, "You feel your vocal chords tingle as your voice becomes more sultry.")
+ to_chat(M, "You feel your vocal chords tingle as your voice becomes more sultry.")
else
M.apply_status_effect(/datum/status_effect/chem/enthrall)
+ var/datum/status_effect/chem/enthral/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
+ E.enthrallID = creatorID
/datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M)
- var/datum/status_effect/chem/enthral/E = M.has_status_effect(/datum/status_effect/chem/enthral)
+ var/datum/status_effect/chem/enthral/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
E.enthrallTally += 1
M.adjustBrainLoss(0.1)
..()
/datum/reagent/fermi/enthrall/overdose_start(mob/living/carbon/M)
- owner.add_trait(TRAIT_PACIFISM, "MKUltra")
- if (!M.has_status_effect(/datum/status_effect/chem/enthral))
+ M.add_trait(TRAIT_PACIFISM, "MKUltra")
+ if (!M.has_status_effect(/datum/status_effect/chem/enthrall))
M.apply_status_effect(/datum/status_effect/chem/enthrall)
- var/datum/status_effect/chem/enthral/E = M.has_status_effect(/datum/status_effect/chem/enthral)
- to_chat(owner, "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 [enthrallID.name].")
+ var/datum/status_effect/chem/enthral/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
+ E.enthrallID = creatorID
+ 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 [enthrallID.name].")
M.slurring = 100
M.confused = 100
E.phase = 4
@@ -817,7 +822,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([seen])]'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
@@ -834,7 +839,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([seen])]'s bulge [pick("OwO!", "uwu!")]")
+ 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 c5b48306d4..f40792c849 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -126,6 +126,8 @@
/datum/chemical_reaction/enthral/on_reaction(datum/reagents/holder)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- var/enthrallID = B.get_blood_id()
- var/datum/reagent/fermi/enthral/E = locate(/datum/reagent/fermi/enthral) in holder.reagent_list
- E.enthrallID = enthrallID
+ var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in holder.reagent_list
+ E.creatorGender = B.["gender"]
+ E.creatorName = B.["real_name"]
+ var/enthrallID = B.get_blood_data()
+ E.creatorID = enthrallID
\ No newline at end of file