MC 4/6th done
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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, "<span class='warning'>The snapping of your Master's fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>")
|
||||
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)))
|
||||
|
||||
@@ -7,22 +7,22 @@
|
||||
description = "<span class='warning'>I am a good pet for Master.</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallpraise
|
||||
mood_change = 10
|
||||
description = "<span class='warning'>Master praised me!!</span>\n"
|
||||
mood_change = 12
|
||||
description = "<span class='warning'>I feel so happy! I'm a good pet who Master loves!</span>\n"
|
||||
timeout = 400
|
||||
|
||||
/datum/mood_event/enthrallscold
|
||||
mood_change = -10
|
||||
description = "<span class='warning'>I have let Master down.</span>\n"//aaa I'm not kinky enough for this
|
||||
timeout = 400
|
||||
mood_change = -12
|
||||
description = "<span class='warning'>I've failed my Master... I feel like crying.</span>\n"//aaa I'm not kinky enough for this
|
||||
timeout = 600
|
||||
|
||||
/datum/mood_event/enthrallmissing1
|
||||
mood_change = -5
|
||||
description = "<span class='warning'>I miss Master's presence.</span>\n"
|
||||
mood_change = -10
|
||||
description = "<span class='warning'>I feel empty when Master's not around..</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallmissing2
|
||||
mood_change = -10
|
||||
description = "<span class='warning'>I really miss Masters presence.</span>\n"
|
||||
mood_change = -15
|
||||
description = "<span class='warning'>I feel so lost in this complicated world without Master, where are they?!</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallmissing3
|
||||
mood_change = -25
|
||||
|
||||
@@ -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, "<span class='notice'><i>You feel your lucidity returning as the mindshield attempts to return your brain to normal function.</i></span>")
|
||||
|
||||
//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, "<span class='notice'><i>[pick("It feels so good to listen to [enthrallID.name]", "[enthrallID.name]", "")].</i></span>")
|
||||
|
||||
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
|
||||
|
||||
@@ -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!")]")
|
||||
..()
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user