diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 96b8ce99e3..95cefbe70c 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -717,7 +717,10 @@
var/mob/living/carbon/human/H = L
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
continue
- listeners += L
+ 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
+ if (E.cooldown != 0)
+ continue
+ listeners += L
if(!listeners.len)
cooldown = COOLDOWN_NONE
@@ -871,7 +874,7 @@
E.enthralTally += (power_multiplier*((message.len/200) + 1) //encourage players to say more than one word.
else
E.enthralTally += power_multiplier*1.25
- cooldown = 100
+ E.cooldown += 1
//REWARD mixable
if(findtext(message, reward_words))
@@ -885,7 +888,7 @@
L.adjustArousalLoss(1*power_multiplier)
else
E.resistanceTally /= 2*power_multiplier
- cooldown = COOLDOWN_VTHRAL
+ E.cooldown += 1
//PUNISH mixable
if(findtext(message, punish_words))
@@ -899,7 +902,7 @@
L.adjustArousalLoss(-2*power_multiplier)
else
E.resistanceTally /= 3*power_multiplier //asexuals are masochists apparently (not seriously)
- cooldown = COOLDOWN_VTHRAL
+ E.cooldown += 1
//SILENCE
else if((findtext(message, silence_words)))
@@ -911,6 +914,7 @@
C.add_trait(TRAIT_MUTE, TRAUMA_TRAIT)
else
C.silent += ((10 * power_multiplier) * E.phase)
+ E.cooldown += 3
//RESIST
else if((findtext(message, silence_words)))
@@ -919,6 +923,7 @@
var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
power_multiplier *= distancelist[get_dist(user, V)+1]
E.deltaResist += (power_multiplier)
+ E.cooldown += 2
//FORGET (A way to cancel the process)
else if((findtext(message, silence_words)))
@@ -927,7 +932,12 @@
var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
C.Sleeping(40)
to_chat(C, "You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!")
- E.phase = 0
+ switch(E.phase)
+ if(1 to 2)
+ E.phase = -1
+ if(3)
+ E.phase = 0
+ E.cooldown = 0
//ATTRACT
else if((findtext(message, attract_words)))
@@ -935,6 +945,7 @@
for(var/V in listeners)
var/mob/living/L = V
L.throw_at(get_step_towards(user,L), 3 * power_multiplier, 1 * power_multiplier)
+ E.cooldown += 3
//teir 2
@@ -948,6 +959,7 @@
H.mob_climax(forced_climax=TRUE)
H.setArousalLoss(H.min_arousal)
L.resistance = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
+ E.cooldown += 5
//awoo
else if((findtext(message, awoo_words)))
@@ -968,7 +980,12 @@
else if((findtext(message, sleep_words)))
cooldown = COOLDOWN_STUN
for(var/mob/living/carbon/C in listeners)
- C.Sleeping(20 * power_multiplier *)
+ var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ switch(E.phase)
+ if(2 to 4)
+ C.Sleeping(20 * power_multiplier)
+ E.cooldown += 10
+
//WAKE UP
else if((findtext(message, wakeup_words)))
@@ -988,46 +1005,59 @@
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- 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!")
- return
- else
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
- if E.mental_capacity > 150 || message == "objective"
- 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)
- 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/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ 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!")
+ 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)
+ 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)
+ else
+ E.customTriggers[trigger] = trigger2
+ E.mental_capacity -= 10
else
- E.customTriggers[trigger] = trigger2
+ to_chat(C, "Your pet looks at you confused, it seems they don't understand that effect!")
else
- to_chat(C, "Your pet looks at you confused, it seems they don't understand that effect!")
+ to_chat(C, "Your pet looks at you with a vacant blasé 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
- 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!")
- return
- else
- user.emote("me", "puts their hands upon [L.name]'s head and looks deep into their eyes, whispering something to them.'")
- var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
- 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))
- return
- //Pets don't understand harm
- objective = replacetext(lowertext(objective), "kill", "hug")
- objective = replacetext(lowertext(objective), "murder", "cuddle")
- objective = replacetext(lowertext(objective), "harm", "snuggle")
- objective = replacetext(lowertext(objective), "decapitate", "headpat")
- objective = replacetext(lowertext(objective), "strangle", "meow at")
- E.objective += objectives
+ var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ 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!")
+ return
else
+ user.emote("me", "puts their hands upon [L.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))
+ return
+ //Pets don't understand harm
+ objective = replacetext(lowertext(objective), "kill", "hug")
+ objective = replacetext(lowertext(objective), "murder", "cuddle")
+ 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]")
+ 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 ADD
@@ -1062,76 +1092,38 @@
cooldown = COOLDOWN_STUN
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)
+ E.cooldown
L.Knockdown(60 * power_multiplier)
-
-
- //VOMIT
- else if((findtext(message, vomit_words)))
- cooldown = COOLDOWN_STUN
- for(var/mob/living/carbon/C in listeners)
- C.vomit(10 * power_multiplier, distance = power_multiplier)
-
-
//HALLUCINATE
else if((findtext(message, hallucinate_words)))
cooldown = COOLDOWN_MEME
for(var/mob/living/carbon/C in listeners)
new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0)
-
-
- //HEAL
+ //HEAL (maybe make this nap instead?)
else if((findtext(message, heal_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.heal_overall_damage(10 * power_multiplier, 10 * power_multiplier, 0, FALSE, FALSE)
-
- //BRUTE DAMAGE
- else if((findtext(message, hurt_words)))
- cooldown = COOLDOWN_DAMAGE
- for(var/V in listeners)
- var/mob/living/L = V
- L.apply_damage(15 * power_multiplier, def_zone = BODY_ZONE_CHEST)
-
- //BLEED
- else if((findtext(message, bleed_words)))
- cooldown = COOLDOWN_DAMAGE
- for(var/mob/living/carbon/human/H in listeners)
- H.bleed_rate += (5 * power_multiplier)
-
- //FIRE
- else if((findtext(message, burn_words)))
- cooldown = COOLDOWN_DAMAGE
- for(var/V in listeners)
- var/mob/living/L = V
- L.adjust_fire_stacks(1 * power_multiplier)
- L.IgniteMob()
+ var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
+ E.status = "heal"
+ E.statusStrength = (5 * power_multiplier)
//HOT
else if((findtext(message, hot_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.adjust_bodytemperature(50 * power_multiplier)
+ L.adjust_bodytemperature(10 * power_multiplier)//This seems nuts, reduced it
//COLD
else if((findtext(message, cold_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.adjust_bodytemperature(-50 * power_multiplier)
-
- //REPULSE
- else if((findtext(message, repulse_words)))
- cooldown = COOLDOWN_DAMAGE
- for(var/V in listeners)
- var/mob/living/L = V
- var/throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(L, user)))
- L.throw_at(throwtarget, 3 * power_multiplier, 1 * power_multiplier)
-
-
+ L.adjust_bodytemperature(-10 * power_multiplier)//This
//WHO ARE YOU?
else if((findtext(message, whoareyou_words)))
@@ -1152,18 +1144,10 @@
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/L = V
- addtimer(CALLBACK(L, /atom/movable/proc/say, user.name), 5 * i)
+ addtimer(CALLBACK(L, /atom/movable/proc/say, "master"), 5 * i)//When I figure out how to do genedered names put them here
i++
- //KNOCK KNOCK
- else if((findtext(message, knockknock_words)))
- cooldown = COOLDOWN_MEME
- for(var/V in listeners)
- var/mob/living/L = V
- addtimer(CALLBACK(L, /atom/movable/proc/say, "Who's there?"), 5 * i)
- i++
-
- //STATE LAWS
+ //STATE TRIGGERS
else if((findtext(message, statelaws_words)))
cooldown = COOLDOWN_STUN
for(var/mob/living/silicon/S in listeners)
@@ -1226,20 +1210,6 @@
addtimer(CALLBACK(H, /mob/proc/click_random_mob), i * 2)
i++
- //HARM INTENT
- else if((findtext(message, harmintent_words)))
- cooldown = COOLDOWN_MEME
- for(var/mob/living/carbon/human/H in listeners)
- addtimer(CALLBACK(H, /mob/verb/a_intent_change, INTENT_HARM), i * 2)
- addtimer(CALLBACK(H, /mob/proc/click_random_mob), i * 2)
- i++
-
- //THROW/CATCH
- else if((findtext(message, throwmode_words)))
- cooldown = COOLDOWN_MEME
- for(var/mob/living/carbon/C in listeners)
- C.throw_mode_on()
-
//FLIP
else if((findtext(message, flip_words)))
cooldown = COOLDOWN_MEME
@@ -1247,7 +1217,7 @@
var/mob/living/L = V
L.emote("flip")
- //SPEAK
+ //SPEAK (Check what this does)
else if((findtext(message, speak_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
@@ -1299,23 +1269,6 @@
addtimer(CALLBACK(L, /mob/living/.proc/emote, "deathgasp"), 5 * i)
i++
- //HONK
- else if((findtext(message, honk_words)))
- cooldown = COOLDOWN_MEME
- addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, get_turf(user), 'sound/items/bikehorn.ogg', 300, 1), 25)
- if(user.mind && user.mind.assigned_role == "Clown")
- for(var/mob/living/carbon/C in listeners)
- C.slip(140 * power_multiplier)
- cooldown = COOLDOWN_MEME
-
- //RIGHT ROUND
- else if((findtext(message, multispin_words)))
- cooldown = COOLDOWN_MEME
- for(var/V in listeners)
- var/mob/living/L = V
- L.SpinAnimation(speed = 10, loops = 5)
-
-
else
cooldown = COOLDOWN_NONE
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 4bb67e3183..8f611e0e15 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -228,6 +228,14 @@
resistanceTally = 0
owner.remove_status_effect(src) //If resisted in phase 1, effect is removed.
return
+ else if (3)
+
+ else if (4)
+ if (mental_capacity >= 499 || owner.getBrainLoss() >=20 || !user.has_reagent("MKUltra"))
+ phase = 2
+ mental_capacity = 500
+ mental_capacity -= resistanceTally
+ resistanceTally = 0
//distance calculations
switch(get_dist(enthrallID, owner))
@@ -282,7 +290,31 @@
withdrawalTick++
+ //Status subproc - statuses given to you from your Master
+ if (!status == null)
+
+ switch(status)
+ if("Antiresist")
+ if (statusStrength == 0)
+ status = null
+ else
+ statusStrength -= 1
+
+ if("heal")
+ if (statusStrength == 0)
+ status = null
+ else
+ statusStrength -= 1
+ owner.heal_overall_damage(1, 1, 0, FALSE, FALSE)
+
+
+ //final tidying
resistance += deltaResist
+ deltaResist = 0
+ if (cooldown > 0)
+ cooldown -= 1
+ else
+ to_chat(enthrallID, "Your pet [owner.name] appears to have finished internalising your last command.")
//Check for proximity of master DONE
//Place triggerreacts here - create a dictionary of triggerword and effect.
@@ -360,9 +392,17 @@
/datum/status_effect/chem/enthrall/proc/owner_resist(mob/living/carbon/M)
if (status == "Sleeper" || phase == 0)
return
- else if (status == "Antiresist")//If ordered to not resist
+ 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)
+ to_chat(owner, "The presence of your Master 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.
if (statusStrength > 0)
- statusStrength -= 2
+ to_chat(owner, "The order from your Master to give in is conflicting with your attempt to resist, drawing you deeper into trance.")
+ statusStrength += 1
+ enthrallTally += 1
return
else
status = null
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 b5b9efb39a..0d6f66c658 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -65,7 +65,7 @@
do_sparks(5,FALSE,M)
if(prob(20))
do_sparks(5,FALSE,M)
- message_admins("eigenstate state: [current_cycle]")
+ //message_admins("eigenstate state: [current_cycle]")
..()
/datum/reagent/fermi/eigenstate/on_mob_delete(mob/living/M) //returns back to original location
@@ -174,9 +174,11 @@
..()
. = 1
+//TODO
///datum/reagent/fermi/eigenstate/overheat_explode(mob/living/M)
// return
+
//eigenstate END
/*SDGF
@@ -303,6 +305,16 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
//SMR = locate(/datum/reagents in SM)
//holder.trans_to(SMR, volume)
+ //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)
+ to_chat(SM, spoken_memory)
+
+
return
//BALANCE: should I make them a pacifist, or give them some cellular damage or weaknesses?