MC 4/6th done

This commit is contained in:
Fermi
2019-05-07 23:38:50 +01:00
parent f31a46e029
commit 1385e12fe3
6 changed files with 159 additions and 48 deletions
-1
View File
@@ -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")
+54 -19
View File
@@ -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