From 6466ef562c36b3ed5a19d13c36749a944b978c1f Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 11 May 2019 02:05:25 +0100 Subject: [PATCH] 100 down, 66 to go. --- code/datums/components/mood.dm | 2 +- code/modules/surgery/organs/vocal_cords.dm | 157 +++++++++--------- .../code/datums/status_effects/chems.dm | 53 +++--- .../chemistry/reagents/fermi_reagents.dm | 29 ++-- .../reagents/chemistry/recipes/fermi.dm | 8 +- 5 files changed, 128 insertions(+), 121 deletions(-) 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