Update of master required.
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
/obj/item/reagent_containers/attack(mob/M, mob/user, def_zone)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
return ..()
|
||||
|
||||
/*Checking to see if I can delete this
|
||||
/obj/item/reagent_containers/attack(obj/item/W, mob/user, params)
|
||||
..()
|
||||
if(!istype(W, /obj/item/pHpaper))
|
||||
@@ -85,7 +85,7 @@
|
||||
if(-INFINITY to 1)
|
||||
P.color = "#ef1d26"
|
||||
P.used = TRUE
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/reagent_containers/proc/canconsume(mob/eater, mob/user)
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
|
||||
/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
|
||||
//TODO: add lung damage = less oxygen gains
|
||||
var/breathModifier = (5-(5*(damage/maxHealth)/2)) //range 2.5 - 5
|
||||
if((H.status_flags & GODMODE))
|
||||
return
|
||||
if(H.has_trait(TRAIT_NOBREATH))
|
||||
@@ -158,7 +159,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5) //More damaged lungs = slower oxy rate up to a factor of half
|
||||
H.adjustOxyLoss(breathModifier) //More damaged lungs = slower oxy rate up to a factor of half
|
||||
gas_breathed = breath_gases[/datum/gas/oxygen][MOLES]
|
||||
H.clear_alert("not_enough_oxy")
|
||||
|
||||
@@ -187,7 +188,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5)
|
||||
H.adjustOxyLoss(breathModifier)
|
||||
gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES]
|
||||
H.clear_alert("nitro")
|
||||
|
||||
@@ -224,7 +225,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5)
|
||||
H.adjustOxyLoss(breathModifier)
|
||||
gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES]
|
||||
H.clear_alert("not_enough_co2")
|
||||
|
||||
@@ -254,7 +255,7 @@
|
||||
else
|
||||
H.failed_last_breath = FALSE
|
||||
if(H.health >= H.crit_threshold)
|
||||
H.adjustOxyLoss(-5)
|
||||
H.adjustOxyLoss(breathModifier)
|
||||
gas_breathed = breath_gases[/datum/gas/plasma][MOLES]
|
||||
H.clear_alert("not_enough_tox")
|
||||
|
||||
|
||||
@@ -671,8 +671,7 @@
|
||||
//////////////////////////////////////
|
||||
//Removed span_list from input arguments. //mob/living/user
|
||||
/proc/velvetspeech(message, mob/living/user, base_multiplier = 1, include_speaker = FALSE, message_admins = TRUE, debug = FALSE)
|
||||
message_admins("Velvet speech proc'd on [user]")
|
||||
var/cooldown = 0
|
||||
//message_admins("Velvet speech proc'd on [user]")
|
||||
|
||||
if(!user || !user.can_speak() || user.stat)
|
||||
return 0 //no cooldown
|
||||
@@ -708,8 +707,7 @@
|
||||
listeners += L
|
||||
|
||||
if(!listeners.len)
|
||||
cooldown = 0
|
||||
return cooldown
|
||||
return 0
|
||||
|
||||
//POWER CALCULATIONS
|
||||
|
||||
@@ -768,7 +766,7 @@
|
||||
if(specific_listeners.len)
|
||||
listeners = specific_listeners
|
||||
//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)
|
||||
message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1)//I have no idea what this does
|
||||
|
||||
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.
|
||||
@@ -841,7 +839,8 @@
|
||||
else
|
||||
E.enthrallTally += power_multiplier*1.25
|
||||
if(L.canbearoused)
|
||||
addtimer(CALLBACK(L, .proc.to_chat, "<span class='nicegreen'>[E.master] is so nice to listen to.</b></span>"), 5)
|
||||
if(L.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'>[E.master] is so nice to listen to.</b></span>"), 5)
|
||||
E.cooldown += 1
|
||||
|
||||
//REWARD mixable works
|
||||
@@ -851,14 +850,16 @@
|
||||
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)
|
||||
//E.resistanceTally -= 1
|
||||
L.adjustArousalLoss(1*power_multiplier)
|
||||
addtimer(CALLBACK(L, L.to_chat, "<span class='nicegreen'>[E.enthrallGender] has praised me!!</b></span>"), 5)
|
||||
if (L.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'>[E.enthrallGender] has praised me!!</b></span>"), 5)
|
||||
if(L.has_trait(TRAIT_NYMPHO))
|
||||
L.adjustArousalLoss(2*power_multiplier)
|
||||
else
|
||||
E.resistanceTally /= 2*power_multiplier
|
||||
addtimer(CALLBACK(L, L.to_chat, "<span class='nicegreen'>I've been praised for doing a good job!</b></span>"), 5)
|
||||
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallpraise", /datum/mood_event/enthrallpraise)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'>I've been praised for doing a good job!</b></span>"), 5)
|
||||
E.resistanceTally -= power_multiplier
|
||||
E.enthrallTally += 1
|
||||
var/descmessage = "[(L.lewd?"I feel so happy! I'm a good pet who [E.enthrallGender] loves!":"I did a good job!")]"
|
||||
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallpraise", /datum/mood_event/enthrallpraise, descmessage)
|
||||
E.cooldown += 1
|
||||
|
||||
//PUNISH mixable works
|
||||
@@ -868,14 +869,16 @@
|
||||
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)
|
||||
if (L.lewd)
|
||||
E.resistanceTally /= 1*power_multiplier
|
||||
L.adjustArousalLoss(-2*power_multiplier)
|
||||
addtimer(CALLBACK(L, L.to_chat, "<span class='warning'>I've let [E.enthrallGender] down...</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='warning'>I've let [E.enthrallGender] down...</b></span>"), 5)
|
||||
else
|
||||
E.resistanceTally /= 3*power_multiplier //asexuals are masochists apparently (not seriously)
|
||||
addtimer(CALLBACK(L, L.to_chat, "<span class='warning'>I've failed [E.master]...</b></span>"), 5)
|
||||
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallscold", /datum/mood_event/enthrallscold)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='warning'>I've failed [E.master]...</b></span>"), 5)
|
||||
|
||||
var/descmessage = "[(L.lewd?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]"
|
||||
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallscold", /datum/mood_event/enthrallscold, descmessage)
|
||||
E.resistanceTally += 1
|
||||
E.enthrallTally += power_multiplier
|
||||
E.cooldown += 1
|
||||
|
||||
//teir 0
|
||||
@@ -885,10 +888,11 @@
|
||||
var/mob/living/carbon/C = V
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
C.remove_trait(TRAIT_MUTE, "enthrall")
|
||||
if(C.canbearoused)
|
||||
if(C.lewd)
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.enthrallGender]"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "My director."), 5)
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.master]"), 5)//The least lewdest I could think of
|
||||
|
||||
//WAKE UP
|
||||
else if((findtext(message, wakeup_words)))
|
||||
for(var/V in listeners)
|
||||
@@ -899,10 +903,11 @@
|
||||
if(0)
|
||||
E.phase = 3
|
||||
E.status = null
|
||||
if(L.canbearoused)
|
||||
addtimer(CALLBACK(L, L.to_chat, "<span class='big warning'>The snapping of your [E.enthrallGender]'s fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>"), 5)
|
||||
user.emote("snap")
|
||||
if(L.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='big warning'>The snapping of your [E.enthrallGender]'s fingers brings you back to your enthralled state, obedient and ready to serve.</b></span>"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(L, L.to_chat, "<span class='big warning'>The snapping of [E.master]'s fingers brings you back to being under their command.</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='big warning'>The snapping of [E.master]'s fingers brings you back to being under their command.</b></span>"), 5)
|
||||
//to_chat(L, )
|
||||
|
||||
|
||||
@@ -922,9 +927,10 @@
|
||||
else if((findtext(message, silence_words)))
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
C.remove_trait(TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
C.remove_trait(TRAIT_MUTE, "enthrall")
|
||||
E.cooldown += 3
|
||||
|
||||
|
||||
//Antiresist
|
||||
else if((findtext(message, antiresist_words)))
|
||||
for(var/V in listeners)
|
||||
@@ -940,25 +946,27 @@
|
||||
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.owner_resist()
|
||||
E.cooldown += 2
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='notice'>You are spurred into resisting from [user]'s words!'</b></span>"), 5)
|
||||
|
||||
//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/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
to_chat(C, "<span class='warning'>You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!</b></span>")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='warning'>You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!</b></span>"), 5)
|
||||
C.Sleeping(50)
|
||||
switch(E.phase)
|
||||
if(1 to 2)
|
||||
E.phase = -1
|
||||
to_chat(C, "<span class='big warning'>You have no recollection of being enthralled by [E.master]</b></span>")
|
||||
to_chat(C, "<span class='big warning'>You have no recollection of being enthralled by [E.master]!</b></span>")
|
||||
if(3)
|
||||
E.phase = 0
|
||||
E.cooldown = 0
|
||||
if(C.canbearoused)
|
||||
addtimer(CALLBACK(C, C.to_chat, "<span class='big warning'>You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened.</b></span>"), 5)
|
||||
if(C.lewd)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened.</b></span>"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(C, C.to_chat, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master].</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master].</b></span>"), 5)
|
||||
|
||||
//ATTRACT
|
||||
else if((findtext(message, attract_words)))
|
||||
@@ -967,6 +975,7 @@
|
||||
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
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You are drawn towards [user]!</b></span>"), 5)
|
||||
|
||||
|
||||
//teir 2
|
||||
@@ -978,16 +987,12 @@
|
||||
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 > 1)
|
||||
if(H.canbearoused) // probably a redundant check but for good measure
|
||||
if(H.has_trait(TRAIT_NYMPHO) && H.canbearoused) // probably a redundant check but for good measure
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.setArousalLoss(H.min_arousal)
|
||||
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
|
||||
E.enthrallTally += power_multiplier
|
||||
else
|
||||
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, "<span class='warning'>Your Masters command whites out your mind in bliss!</b></span>")
|
||||
E.cooldown += 6
|
||||
E.cooldown += 6
|
||||
|
||||
|
||||
//awoo
|
||||
@@ -1007,9 +1012,8 @@
|
||||
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/nya.ogg'), 50, 1, -1)
|
||||
M.emote(M, 1, "lets out a nya!")
|
||||
playsound(get_turf(H), pick('sound/effects/meow1.ogg', 'modular_citadel/sound/voice/nya.ogg'), 50, 1, -1)
|
||||
H.emote("me", 1, "lets out a nya!")
|
||||
E.cooldown += 1
|
||||
|
||||
//SLEEP
|
||||
@@ -1018,7 +1022,7 @@
|
||||
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)
|
||||
C.Sleeping(30 * power_multiplier)
|
||||
E.cooldown += 10
|
||||
|
||||
//STRIP
|
||||
@@ -1030,9 +1034,10 @@
|
||||
if(2 to INFINITY)//Tier 2 only
|
||||
E.phase = 1
|
||||
var/items = H.get_contents()
|
||||
for(var/I in items)
|
||||
H.dropItemToGround(I, TRUE)
|
||||
to_chat(H, "<span class='warning'>Before you can even think about it, you quickly remove your clothes in response to your Master's command.</b></span>")
|
||||
for(var/obj/item/W in items)
|
||||
if(W == H.w_uniform || W == H.wear_suit)
|
||||
H.dropItemToGround(W, TRUE)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='warning'>Before you can even think about it, you quickly remove your clothes in response to [(H.lewd?"your [E.enthrallGender]'s command'":"[E.master]'s directive'")].</b></span>"), 5)
|
||||
E.cooldown += 10
|
||||
|
||||
//WALK doesn't work?
|
||||
@@ -1066,6 +1071,7 @@
|
||||
if(3 to INFINITY)//Tier 2 only
|
||||
L.Knockdown(30 * power_multiplier * E.phase)
|
||||
E.cooldown += 8
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You suddenly drop to the ground!'</b></span>"), 5)
|
||||
|
||||
//tier3
|
||||
|
||||
@@ -1074,13 +1080,13 @@
|
||||
for(var/V in listeners)
|
||||
var/speaktrigger = ""
|
||||
var/mob/living/carbon/C = V
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)//i.e. if it's not empty
|
||||
for (var/trigger in E.customTriggers)
|
||||
speaktrigger += "[trigger], "
|
||||
if(!speaktrigger == "")
|
||||
C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself!
|
||||
addtimer(CALLBACK(C, /atom/movable/proc/say, "[speaktrigger]"), 5)
|
||||
C.remove_trait(TRAIT_DEAF, "Triggers")
|
||||
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if (E.phase > 3)
|
||||
for (var/trigger in E.customTriggers)
|
||||
speaktrigger += "[trigger], "
|
||||
C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself!
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, /atom/movable/proc/say, "[speaktrigger]"), 5)
|
||||
C.remove_trait(TRAIT_DEAF, "Triggers")
|
||||
|
||||
|
||||
//CUSTOM TRIGGERS
|
||||
@@ -1097,6 +1103,7 @@
|
||||
if (E.mental_capacity >= 10)
|
||||
var/trigger = stripped_input(user, "Enter the trigger phrase", MAX_MESSAGE_LEN)
|
||||
var/trigger2 = stripped_input(user, "Enter the effect.", MAX_MESSAGE_LEN)
|
||||
trigger2 = lowertext(trigger2)
|
||||
if ((findtext(trigger2, custom_words_words)))
|
||||
if (trigger2 == "speak" || trigger2 == "echo")
|
||||
var/trigger3 = stripped_input(user, "Enter the phrase spoken.", MAX_MESSAGE_LEN)
|
||||
@@ -1104,6 +1111,7 @@
|
||||
else
|
||||
E.customTriggers[trigger] = trigger2
|
||||
E.mental_capacity -= 10
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.lewd?"your [E.enthrallGender]":"[E.master]")] whispers you a new trigger.</span>"), 5)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Your pet looks at you confused, it seems they don't understand that effect!</b></span>")
|
||||
else
|
||||
@@ -1120,7 +1128,7 @@
|
||||
return
|
||||
else
|
||||
user.emote(user, 1, "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")
|
||||
if (E.mental_capacity >= 250 || message == "objective")
|
||||
var/datum/objective/brainwashing/objective = stripped_input(user, "Add an objective to give your pet.", MAX_MESSAGE_LEN)
|
||||
if(!LAZYLEN(objective))
|
||||
return
|
||||
@@ -1130,9 +1138,9 @@
|
||||
objective = replacetext(lowertext(objective), "harm", "snuggle")
|
||||
objective = replacetext(lowertext(objective), "decapitate", "headpat")
|
||||
objective = replacetext(lowertext(objective), "strangle", "meow at")
|
||||
to_chat(H, "<span class='warning'>Your master whispers you a new objective.</span>")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.lewd?"your [E.enthrallGender]":"[E.master]")] whispers you a new objective.</span>"), 5)
|
||||
brainwash(H, objective)
|
||||
E.mental_capacity -= 150
|
||||
E.mental_capacity -= 250
|
||||
//else if (E.mental_capacity >= 150)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them</b></span>")
|
||||
@@ -1146,7 +1154,7 @@
|
||||
if(E.phase > 1)
|
||||
if(user.ckey == E.enthrallID && user.real_name == E.master.real_name)
|
||||
E.master = user
|
||||
addtimer(CALLBACK(C, C.to_chat, "<span class='nicegreen'>You hear the words of your [E.enthrallGender] again!! They're back!!</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='nicegreen'>[(H.lewd?"You hear the words of your [E.enthrallGender] again!! They're back!!":"You recognise the voice of [E.master].")]</b></span>"), 5)
|
||||
|
||||
//I dunno how to do state objectives without them revealing they're an antag
|
||||
|
||||
@@ -1160,6 +1168,8 @@
|
||||
E.status = "heal"
|
||||
E.statusStrength = (5 * power_multiplier)
|
||||
E.cooldown += 5
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You begin to lick your wounds.</b></span>"), 5)
|
||||
L.Stun(40)
|
||||
|
||||
//STUN
|
||||
else if(findtext(message, stun_words))
|
||||
@@ -1168,8 +1178,9 @@
|
||||
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)
|
||||
L.Stun(40 * power_multiplier)
|
||||
E.cooldown += 8
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You freeze up!</b></span>"), 5)
|
||||
|
||||
//HALLUCINATE
|
||||
else if(findtext(message, hallucinate_words))
|
||||
@@ -1188,7 +1199,7 @@
|
||||
switch(E.phase)
|
||||
if(3 to INFINITY)//Tier 3 only
|
||||
L.adjust_bodytemperature(10 * power_multiplier)//This seems nuts, reduced it
|
||||
to_chat(L, "<span class='warning'>You feel your metabolism speed up!</b></span>")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You feel your metabolism speed up!</b></span>"), 5)
|
||||
|
||||
//COLD
|
||||
else if(findtext(message, cold_words))
|
||||
@@ -1198,7 +1209,7 @@
|
||||
switch(E.phase)
|
||||
if(3 to INFINITY)//Tier 3 only
|
||||
L.adjust_bodytemperature(-10 * power_multiplier)//This
|
||||
to_chat(L, "<span class='warning'>You feel your metabolism slow down!</b></span>")
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You feel your metabolism slow down!</b></span>"), 5)
|
||||
|
||||
|
||||
//GET UP
|
||||
@@ -1214,6 +1225,7 @@
|
||||
L.SetKnockdown(0)
|
||||
L.SetUnconscious(0) //i said get up i don't care if you're being tased
|
||||
E.cooldown += 10 //This could be really strong
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You jump to your feel from sheer willpower!</b></span>"), 5)
|
||||
|
||||
//PACIFY
|
||||
else if(findtext(message, pacify_words))
|
||||
@@ -1331,7 +1343,7 @@
|
||||
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)
|
||||
//SSblackbox.record_feedback("tally", "Velvet_voice", 1, log_message) If this is on, it fills the thing up and OOFs the server
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -1,41 +1,55 @@
|
||||
/datum/mood_event/eigenstate
|
||||
mood_change = -1
|
||||
mood_change = -3
|
||||
description = "<span class='warning'>Where the hell am I? Is this an alternative dimension ?</span>\n"
|
||||
|
||||
/datum/mood_event/enthrall
|
||||
mood_change = 5
|
||||
description = "<span class='nicegreen'>I am a good pet for Master.</span>\n"
|
||||
mood_change = 5
|
||||
|
||||
/datum/mood_event/enthrall/add_effects(message)
|
||||
description = "<span class='nicegreen'>[message]</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallpraise
|
||||
mood_change = 12
|
||||
description = "<span class='nicegreen'>I feel so happy! I'm a good pet who Master loves!</span>\n"
|
||||
timeout = 600
|
||||
mood_change = 10
|
||||
timeout = 600
|
||||
|
||||
/datum/mood_event/enthrallpraise/add_effects(message)
|
||||
description = "<span class='nicegreen'>[message]</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallscold
|
||||
mood_change = -12
|
||||
description = "<span class='warning'>I've failed Master... What a bad, bad pet!</span>\n"//aaa I'm not kinky enough for this
|
||||
timeout = 600
|
||||
mood_change = -10
|
||||
timeout = 600
|
||||
|
||||
/datum/mood_event/enthrallscold/add_effects(message)
|
||||
description = "<span class='warning'>[message]</span>\n"//aaa I'm not kinky enough for this
|
||||
|
||||
/datum/mood_event/enthrallmissing1
|
||||
mood_change = -5
|
||||
description = "<span class='warning'>I feel empty when Master's not around..</span>\n"
|
||||
mood_change = -5
|
||||
|
||||
/datum/mood_event/enthrallmissing1/add_effects(message)
|
||||
description = "<span class='warning'>[message]</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallmissing2
|
||||
mood_change = -10
|
||||
description = "<span class='warning'>I feel so lost in this complicated world without Master, where are they?!</span>\n"
|
||||
mood_change = -10
|
||||
|
||||
/datum/mood_event/enthrallmissing2/add_effects(message)
|
||||
description = "<span class='warning'>[message]</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallmissing3
|
||||
mood_change = -15
|
||||
description = "<span class='warning'>Where are you Master??!</span>\n"
|
||||
mood_change = -15
|
||||
|
||||
/datum/mood_event/enthrallmissing3/add_effects(message)
|
||||
description = "<span class='warning'>[message]</span>\n"
|
||||
|
||||
/datum/mood_event/enthrallmissing4
|
||||
mood_change = -25
|
||||
description = "<span class='warning'>I'm all alone, It's so hard to continute without Master...</span>\n"
|
||||
mood_change = -25
|
||||
|
||||
/datum/mood_event/enthrallmissing4/add_effects(message)
|
||||
description = "<span class='warning'>[message]</span>\n"
|
||||
|
||||
/datum/mood_event/InLove
|
||||
mood_change = 10
|
||||
description = "<span class='nicegreen'>I'm in love!!</span>\n"
|
||||
mood_change = 10
|
||||
description = "<span class='nicegreen'>I'm in love!!</span>\n"
|
||||
|
||||
/datum/mood_event/MissingLove
|
||||
mood_change = -20
|
||||
description = "<span class='warning'>I can't keep my crush off my mind, I need to see them again!</span>\n"
|
||||
mood_change = -20
|
||||
description = "<span class='warning'>I can't keep my crush off my mind, I need to see them again!</span>\n"
|
||||
|
||||
@@ -159,10 +159,10 @@
|
||||
*/
|
||||
|
||||
//Preamble
|
||||
/datum/mob/living/carbon/
|
||||
/mob/living
|
||||
var/lewd = TRUE //Maybe false?
|
||||
|
||||
/mob/living/carbon/verb/toggle_lewd()
|
||||
/mob/living/verb/toggle_lewd()
|
||||
set category = "IC"
|
||||
set name = "toggle lewdchem"
|
||||
set desc = "Allows you to toggle if you'd like lewd flavour messages."
|
||||
@@ -197,6 +197,7 @@
|
||||
var/list/customTriggers = list() //the list of custom triggers (maybe have to split into two)
|
||||
var/cooldown = 0
|
||||
var/cooldownMsg = TRUE
|
||||
var/cTriggered = FALSE
|
||||
|
||||
/datum/status_effect/chem/enthrall/on_apply()
|
||||
var/mob/living/carbon/M = owner
|
||||
@@ -215,12 +216,14 @@
|
||||
redirect_component = 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
|
||||
//redirect_component3 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_HEAR = CALLBACK(src, .proc/owner_hear)))) //Do resistance calc if resist is pressed
|
||||
RegisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL, .proc/owner_say)
|
||||
//RegisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL, .proc/owner_say)
|
||||
RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear)
|
||||
//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)
|
||||
var/message = "[(owner.lewd?"I am a good pet for [enthrallGender].":"I find enjoyment in fulfilling the requests of [master] and I am appreciative of being in this position currently with no desire for this to change.")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "enthrall", /datum/mood_event/enthrall, message)
|
||||
to_chat(owner, "<span class='big warning'><i>You feel inexplicably drawn towards [master], their words having a demonstrable effect on you. It seems the closer you are to them, the stronger the effect is. However you aren't fully swayed yet and can still repeatedly resist their effects! (Mash resist to fight back!!)</i></span>")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/chem/enthrall/tick()
|
||||
@@ -263,7 +266,10 @@
|
||||
mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
|
||||
resistanceTally /= 2
|
||||
enthrallTally = 0
|
||||
to_chat(owner, "<span class='hypnophrase'><i>Your conciousness slips, as you sink deeper into trance and servitude.</i></span>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='hypnophrase'><i>Your conciousness slips, as you sink deeper into trance and servitude.</i></span>")
|
||||
else
|
||||
|
||||
else if (resistanceTally > 100)
|
||||
enthrallTally *= 0.5
|
||||
phase = -1
|
||||
@@ -280,13 +286,17 @@
|
||||
mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
|
||||
enthrallTally = 0
|
||||
resistanceTally /= 2
|
||||
to_chat(owner, "<span class='notice'><i>Your mind gives, eagerly obeying and serving [master].</i></span>")
|
||||
to_chat(owner, "<span class='big nicegreen'><i>You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are much less likely to resort to violence, unless it is to defend your [enthrallGender]. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. </i></span>")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='notice'><i>Your mind gives, eagerly obeying and serving [master].</i></span>")
|
||||
to_chat(owner, "<span class='big nicegreen'><i>You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. </i></span>")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
|
||||
else
|
||||
to_chat(owner, "<span class='big nicegreen'><i>You are unable to put up a resistance any longer, and now are under the control of [master]. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [master] in death. </i></span>")
|
||||
owner.add_trait(TRAIT_PACIFISM, "MKUltra")
|
||||
else if (resistanceTally > 150)
|
||||
enthrallTally *= 0.5
|
||||
phase -= 1
|
||||
resistanceTally = 0
|
||||
to_chat(owner, "<span class='notice'><i>You manage to shake some of the entrancement from your addled mind, however you can still feel yourself drawn towards [master].</i></span>")
|
||||
to_chat(owner, "<span class='notice'><i>You manage to shake some of the effects from your addled mind, however you can still feel yourself drawn towards [master].</i></span>")
|
||||
//owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. Not at the moment,
|
||||
if(prob(10))
|
||||
if(owner.lewd)
|
||||
@@ -296,12 +306,13 @@
|
||||
enthrallTally = 0
|
||||
phase -= 1
|
||||
resistanceTally = 0
|
||||
to_chat(owner, "<span class='notice'><i>The separation from you [enthrallGender] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.</i></span>")
|
||||
to_chat(owner, "<span class='notice'><i>The separation from [(owner.lewd?"your [enthrallGender]":"[master]")] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.</i></span>")
|
||||
owner.remove_trait(TRAIT_PACIFISM, "MKUltra")
|
||||
if(prob(2))
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='notice'><i>[pick("I belong to [enthrallGender].", "[enthrallGender] knows whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
if (4) //mindbroken
|
||||
if (mental_capacity >= 499 || owner.getBrainLoss() >=20 || !owner.reagents.has_reagent("MKUltra"))
|
||||
if (mental_capacity >= 499 && (owner.getBrainLoss() >=20 || M.has_trait(TRAIT_MINDSHIELD)) && !owner.reagents.has_reagent("MKUltra"))
|
||||
phase = 2
|
||||
mental_capacity = 500
|
||||
customTriggers = list()
|
||||
@@ -333,36 +344,48 @@
|
||||
//Withdrawal subproc:
|
||||
if (withdrawal == TRUE)//Your minions are really REALLY needy.
|
||||
switch(withdrawalTick)//denial
|
||||
if(5)//To reduce spam
|
||||
to_chat(owner, "<span class='big warning'><i>You are unable to complete your [master]'s orders without their presence, and any commands given to you prior are not in effect until you are back with them.</i></span>")
|
||||
if(10 to 35)//Gives wiggle room, so you're not SUPER needy
|
||||
if(prob(5))
|
||||
to_chat(owner, "<span class='notice'><i>You're starting to miss your [enthrallGender].</i></span>")
|
||||
to_chat(owner, "<span class='notice'><i>You're starting to miss [(owner.lewd?"your [enthrallGender]":"[master]")].</i></span>")
|
||||
if(prob(5))
|
||||
owner.adjustBrainLoss(0.5)
|
||||
to_chat(owner, "<i>Master will surely be back soon</i>") //denial
|
||||
to_chat(owner, "<i>[(owner.lewd?"[enthrallGender]":"[master]")] will surely be back soon</i>") //denial
|
||||
if(36)
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1)
|
||||
var/message = "[(owner.lewd?"I feel empty when [enthrallGender]'s not around..":"I miss [master]'s presence")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1, message)
|
||||
if(37 to 65)//barganing
|
||||
if(prob(10))
|
||||
to_chat(owner, "<i>They are coming back, right...?</i>")
|
||||
owner.adjustBrainLoss(1)
|
||||
if(prob(10))
|
||||
to_chat(owner, "<i>I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.</i>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<i>I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.</i>")
|
||||
owner.adjustBrainLoss(-1)
|
||||
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)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1")
|
||||
var/message = "[(owner.lewd?"I feel so lost in this complicated world without [enthrallGender]..":"I have to return to [master]!")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing2", /datum/mood_event/enthrallmissing2, message)
|
||||
owner.stuttering += 200
|
||||
owner.jitteriness += 200
|
||||
if(67 to 90) //anger
|
||||
if(prob(10))
|
||||
addtimer(CALLBACK(M, /mob/verb/a_intent_change, INTENT_HARM), 2)
|
||||
addtimer(CALLBACK(M, /mob/proc/click_random_mob), 2)
|
||||
to_chat(owner, "<span class='warning'>You are overwhelmed with anger at the lack of [enthrallGender]'s presence and suddenly lash out!</span>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='warning'>You are overwhelmed with anger at the lack of [enthrallGender]'s presence and suddenly lash out!</span>")
|
||||
else
|
||||
to_chat(owner, "<span class='warning'>You are overwhelmed with anger and suddenly lash out!</span>")
|
||||
owner.adjustBrainLoss(1)
|
||||
if(90)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") //Why does this not work?
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing3", /datum/mood_event/enthrallmissing3)
|
||||
to_chat(owner, "<span class='warning'><i>You need to find your [enthrallGender] at all costs, you can't hold yourself back anymore.</i></span>")
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2")
|
||||
var/message = "[(owner.lewd?"Where are you [enthrallGender]??!":"I need to find [master]!")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing3", /datum/mood_event/enthrallmissing3, message)
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='warning'><i>You need to find your [enthrallGender] at all costs, you can't hold yourself back anymore!</i></span>")
|
||||
else
|
||||
to_chat(owner, "<span class='warning'><i>You need to find [master] at all costs, you can't hold yourself back anymore!</i></span>")
|
||||
if(91 to 120)//depression
|
||||
if(prob(20))
|
||||
owner.adjustBrainLoss(2.5)
|
||||
@@ -372,13 +395,17 @@
|
||||
M.hallucination += 20
|
||||
if(121)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3")
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing4", /datum/mood_event/enthrallmissing4)
|
||||
var/message = "[(owner.lewd?"I'm all alone, It's so hard to continute without [enthrallGender]...":"I really need to find [master]!!!")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing4", /datum/mood_event/enthrallmissing4, message)
|
||||
to_chat(owner, "<span class='warning'><i>You can hardly find the strength to continue without your [enthrallGender].</i></span>")
|
||||
if(120 to 140) //depression
|
||||
if(prob(15))
|
||||
owner.Stun(50)
|
||||
owner.emote("cry")//does this exist?
|
||||
to_chat(owner, "You're unable to hold back your tears, suddenly sobbing as the desire to see your [enthrallGender] oncemore overwhelms you.")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='warning'><i>You're unable to hold back your tears, suddenly sobbing as the desire to see your [enthrallGender] oncemore overwhelms you.</i></span>")
|
||||
else
|
||||
to_chat(owner, "<span class='warning'><i>You are overwheled with withdrawl from [master].</i></span>")
|
||||
owner.adjustBrainLoss(5)
|
||||
owner.stuttering += 20
|
||||
owner.jitteriness += 20
|
||||
@@ -388,7 +415,10 @@
|
||||
if(prob(15))
|
||||
deltaResist += 5
|
||||
if(prob(20))
|
||||
to_chat(owner, "<i><span class='small green'>Maybe you'll be okay without your [enthrallGender].</i></span>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<i><span class='small green'>Maybe you'll be okay without your [enthrallGender].</i></span>")
|
||||
else
|
||||
to_chat(owner, "<i><span class='small green'>You feel your mental functions slowly begin to return.</i></span>")
|
||||
if(prob(10))
|
||||
owner.adjustBrainLoss(2)
|
||||
M.hallucination += 50
|
||||
@@ -402,7 +432,7 @@
|
||||
if(status == "Antiresist")
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
to_chat(owner, "You feel able to resist oncemore.")
|
||||
to_chat(owner, "Your mind feels able to resist oncemore.")
|
||||
else
|
||||
statusStrength -= 1
|
||||
|
||||
@@ -418,20 +448,23 @@
|
||||
else if(status == "charge")
|
||||
owner.add_trait(TRAIT_GOTTAGOFAST, "MKUltra")
|
||||
status = "charged"
|
||||
to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!")
|
||||
if(master.lewd)
|
||||
to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!")
|
||||
else
|
||||
to_chat(owner, "[master]'s command fills you with a burst of speed!")
|
||||
|
||||
else if (status == "charged")
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
owner.remove_trait(TRAIT_GOTTAGOFAST, "MKUltra")
|
||||
owner.Knockdown(30)
|
||||
owner.Knockdown(50)
|
||||
to_chat(owner, "Your body gives out as the adrenaline in your system runs out.")
|
||||
else
|
||||
statusStrength -= 1
|
||||
cooldown += 1 //Cooldown doesn't process till status is done
|
||||
|
||||
else if (status == "pacify")
|
||||
owner.add_trait(TRAIT_PACIFISM, "MKUltra")
|
||||
owner.add_trait(TRAIT_PACIFISM, "MKUltraStatus")
|
||||
status = null
|
||||
|
||||
//Truth serum?
|
||||
@@ -443,14 +476,18 @@
|
||||
resistanceTally += deltaResist
|
||||
deltaResist = 0
|
||||
if (cooldown > 0)
|
||||
cooldown -= (1 + (mental_capacity/1000 ))
|
||||
cooldown -= (1 + (mental_capacity/1000))
|
||||
cooldownMsg = FALSE
|
||||
else if (cooldownMsg == FALSE)
|
||||
to_chat(master, "<span class='notice'><i>Your pet [owner] appears to have finished internalising your last command.</i></span>")
|
||||
if(master.lewd)
|
||||
to_chat(master, "<span class='notice'><i>Your pet [owner] appears to have finished internalising your last command.</i></span>")
|
||||
else
|
||||
to_chat(master, "<span class='notice'><i>Your thrall [owner] appears to have finished internalising your last command.</i></span>")
|
||||
cooldownMsg = TRUE
|
||||
cooldown = 0
|
||||
//..()
|
||||
|
||||
//Remove all stuff
|
||||
/datum/status_effect/chem/enthrall/on_remove()
|
||||
var/mob/living/carbon/M = owner
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall")
|
||||
@@ -462,12 +499,9 @@
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing4")
|
||||
qdel(redirect_component.resolve())
|
||||
redirect_component = null
|
||||
//qdel(redirect_component2.resolve())
|
||||
//redirect_component2 = null
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
|
||||
UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL)
|
||||
//qdel(redirect_component3.resolve())
|
||||
//redirect_component3 = null
|
||||
owner.remove_trait(TRAIT_PACIFISM, "MKUltra")
|
||||
//UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL)
|
||||
|
||||
/*
|
||||
/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)
|
||||
@@ -479,7 +513,8 @@
|
||||
//WORKS!! AAAAA
|
||||
|
||||
/datum/status_effect/chem/enthrall/proc/owner_hear(var/hearer, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
//message_admins("post: hear:[hearer], msg:[message], spk:[speaker], lng:[message_language], raw:[raw_message], freq:[radio_freq], spen:[spans], mod:[message_mode]")
|
||||
if (cTriggered == TRUE)
|
||||
return
|
||||
var/mob/living/carbon/C = owner
|
||||
//message_admins("[C] heard something!")
|
||||
raw_message = lowertext(raw_message)
|
||||
@@ -488,10 +523,14 @@
|
||||
//message_admins("[C] heard something: [message] vs [trigger] vs [raw_message]")
|
||||
if (findtext(raw_message, cached_trigger))//if trigger1 is the message
|
||||
message_admins("[C] has been triggered with [trigger]!")
|
||||
cTriggered = TRUE
|
||||
|
||||
//Speak (Forces player to talk) works
|
||||
if (lowertext(customTriggers[trigger][1]) == "speak")//trigger2
|
||||
to_chat(C, "<span class='notice'><i>Your body moves on it's own before you can even catch it. You find yourself fully believing in the validity of what you just said and don't think to question it.</i></span>")
|
||||
var/saytext = "Your mouth moves on it's own before you can even catch it."
|
||||
if(M.has_trait(TRAIT_NYMPHO))
|
||||
saytext += " You find yourself fully believing in the validity of what you just said and don't think to question it."
|
||||
to_chat(C, "<span class='notice'><i>[saytext]</i></span>")
|
||||
(C.say(customTriggers[trigger][2]))//trigger3
|
||||
|
||||
|
||||
@@ -510,7 +549,7 @@
|
||||
|
||||
//wah intensifies wah-rks
|
||||
else if (lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
if (C.canbearoused)
|
||||
if (M.has_trait(TRAIT_NYMPHO))
|
||||
if (C.getArousalLoss() > 80)
|
||||
C.mob_climax(forced_climax=TRUE)
|
||||
else
|
||||
@@ -520,11 +559,12 @@
|
||||
|
||||
//kneel (knockdown)
|
||||
else if (lowertext(customTriggers[trigger]) == "kneel")//as close to kneeling as you can get, I suppose.
|
||||
to_chat(owner, "<span class='notice'><i>You drop to the ground unsurreptitiously.</i></span>")
|
||||
C.resting = 1
|
||||
C.lying = 1
|
||||
|
||||
//strip (some) clothes
|
||||
else if (lowertext(customTriggers[trigger]) == "strip")//This wasn't meant to just be a lewd thing oops
|
||||
else if (lowertext(customTriggers[trigger]) == "strip")//This wasn't meant to just be a lewd thing oops, is this pref breaking?
|
||||
var/mob/living/carbon/human/o = owner
|
||||
var/items = o.get_contents()
|
||||
for(var/obj/item/W in items)
|
||||
@@ -533,13 +573,13 @@
|
||||
to_chat(owner,"<span class='notice'><i>You feel compelled to strip your clothes.</i></span>")
|
||||
|
||||
//trance
|
||||
else if (lowertext(customTriggers[trigger]) == "trance")
|
||||
else if (lowertext(customTriggers[trigger]) == "trance")//Maaaybe too strong.
|
||||
var/mob/living/carbon/human/o = owner
|
||||
o.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
|
||||
|
||||
//add more fun stuff!
|
||||
|
||||
|
||||
cTriggered = FALSE
|
||||
return
|
||||
/*
|
||||
/datum/status_effect/chem/enthrall/proc/owner_withdrawal(mob/living/carbon/M)
|
||||
@@ -547,19 +587,29 @@
|
||||
*/
|
||||
/datum/status_effect/chem/enthrall/proc/owner_resist()
|
||||
var/mob/living/carbon/M = owner
|
||||
to_chat(owner, "<span class='notice'><i>You attempt to fight against against [(owner.lewd?"[enthrallGender]":"[master]")]'s influence!'</i></span>")
|
||||
message_admins("Enthrall processing for [M]: enthrallTally: [enthrallTally], resistanceTally: [resistanceTally]")
|
||||
message_admins("[M] is trying to resist!")
|
||||
//message_admins("[M] is trying to resist!")
|
||||
if (status == "Sleeper" || phase == 0)
|
||||
return
|
||||
else if (phase == 4)
|
||||
to_chat(owner, "<span class='hypnophrase'><i>Your mind is too far gone to even entertain the thought of resisting.</i></span>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='warning'><i>Your mind is too far gone to even entertain the thought of resisting. Unless you can fix the brain damage, you won't be able to break free of your [enthrallGender]'s control.</i></span>")
|
||||
else
|
||||
to_chat(owner, "<span class='warning'><i>Your brain is too overwhelmed with from the high volume of chemicals in your system, rendering you unable to resist, unless you can fix the brain damage.</i></span>")
|
||||
return
|
||||
else if (phase == 3 && withdrawal == FALSE)
|
||||
to_chat(owner, "<span class='hypnophrase'><i>The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance.</i></span>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='hypnophrase'><i>The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance. Try getting away from them.</i></span>")
|
||||
else
|
||||
to_chat(owner, "<span class='hypnophrase'><i>You are unable to resist [master] in your current state. Try getting away from them.</i></span>")
|
||||
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)
|
||||
to_chat(owner, "<span class='warning'><i>The order from your [enthrallGender] to give in is conflicting with your attempt to resist, drawing you deeper into trance.</i></span>")
|
||||
if(owner.lewd)
|
||||
to_chat(owner, "<span class='warning'><i>The order from your [enthrallGender] to give in is conflicting with your attempt to resist, drawing you deeper into trance! You'll have to wait a bit before attemping again, lest your attempts become frustrated again.</i></span>")
|
||||
else
|
||||
to_chat(owner, "<span class='warning'><i>The order from your [master] to give in is conflicting with your attempt to resist. You'll have to wait a bit before attemping again, lest your attempts become frustrated again.</i></span>")
|
||||
statusStrength += 1
|
||||
enthrallTally += 1
|
||||
return
|
||||
@@ -576,10 +626,10 @@
|
||||
deltaResist *= 1.5
|
||||
to_chat(owner, "You attempt to shake the mental cobwebs from your mind!")
|
||||
//base resistance
|
||||
if (M.canbearoused)
|
||||
if (M.canbearoused && M.has_trait(TRAIT_NYMPHO))//I'm okay with this being removed.
|
||||
deltaResist*= ((100 - M.arousalloss/100)/100)//more aroused you are, the weaker resistance you can give
|
||||
else
|
||||
deltaResist *= 0.5
|
||||
//else
|
||||
// deltaResist *= 0.5
|
||||
//chemical resistance, brain and annaphros are the key to undoing, but the subject has to to be willing to resist.
|
||||
if (owner.reagents.has_reagent("mannitol"))
|
||||
deltaResist *= 1.25
|
||||
@@ -598,12 +648,12 @@
|
||||
//Antag resistance
|
||||
//cultists are already brainwashed by their god
|
||||
if(iscultist(owner))
|
||||
deltaResist *= 2
|
||||
deltaResist *= 1.5
|
||||
else if (is_servant_of_ratvar(owner))
|
||||
deltaResist *= 2
|
||||
deltaResist *= 1.5
|
||||
//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)
|
||||
deltaResist *= 1.8
|
||||
deltaResist *= 1.4
|
||||
|
||||
//role resistance
|
||||
//Chaplains are already brainwashed by their god
|
||||
@@ -623,23 +673,23 @@
|
||||
deltaResist += (250-owner.nutrition)/100
|
||||
if(owner.health < 100)//Harming your thrall will make them rebel harder.
|
||||
deltaResist *= ((120-owner.health)/100)+1
|
||||
//if()
|
||||
//Add cold/hot, oxygen, sanity, happiness? (happiness might be moot, since the mood effects are so strong)
|
||||
//Mental health could play a role too in the other direction
|
||||
|
||||
//If master gives you a collar, you get a sense of pride
|
||||
//If you've a collar, you get a sense of pride
|
||||
if(istype(M.wear_neck, /obj/item/clothing/neck/petcollar))
|
||||
deltaResist *= 0.5
|
||||
if(M.has_trait(TRAIT_MINDSHIELD))
|
||||
deltaResist += 1
|
||||
|
||||
if(owner.has_trait(TRAIT_CROCRIN_IMMUNE) || !owner.canbearoused)
|
||||
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.
|
||||
deltaResist += 5//even faster!
|
||||
|
||||
if (deltaResist>0)//just in case
|
||||
deltaResist /= phase//later phases require more resistance
|
||||
message_admins("[M] is trying to resist with a delta of [deltaResist]!")
|
||||
return
|
||||
|
||||
//I think this can be left out, but I'll leave the code incase anyone wants to add to it.
|
||||
/*
|
||||
/datum/status_effect/chem/enthrall/proc/owner_say(mob/speaker, message) //I can only hope this works
|
||||
|
||||
//var/datum/status_effect/chem/enthrall/E = owner.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
@@ -649,35 +699,4 @@
|
||||
if(findtext(message, owner_words))
|
||||
message = replacetext(lowertext(message), lowertext(master), "[enthrallGender]")
|
||||
return message
|
||||
|
||||
/*
|
||||
/datum/status_effect/chem/OwO
|
||||
id = "OwO"
|
||||
|
||||
/datum/status_effect/chem/PElarger/tick(message)
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
message = replacetext(message, "ne", "nye")
|
||||
message = replacetext(message, "nu", "nyu")
|
||||
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")
|
||||
message = replacetext(message, "l", "w")
|
||||
message = replacetext(message, "r", "w")
|
||||
if(prob(20))
|
||||
message = replacetext(message, ".", "OwO.")
|
||||
else if(prob(30))
|
||||
message = replacetext(message, ".", "uwu.")
|
||||
message = lowertext(message)
|
||||
*/
|
||||
/*Doesn't work
|
||||
/datum/status_effect/chem/SDGF/candidates
|
||||
id = "SGDFCandi"
|
||||
var/mob/living/fermi_Clone
|
||||
var/list/candies = list()
|
||||
|
||||
/datum/status_effect/chem/SDGF/candidates/on_apply()
|
||||
candies = pollGhostCandidates("Do you want to play as a clone and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you. ", "FermiClone", null, ROLE_SENTIENCE, 300) // see poll_ignore.dm, should allow admins to ban greifers or bullies
|
||||
return ..()
|
||||
*/
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
reagents.add_reagent(fluid_id, fluid_max_volume)
|
||||
prev_size = size
|
||||
cached_size = breast_values[size]
|
||||
if (cached_size == "c")//fix for a weird bug that has something to do with how they're set up on the character create screen.
|
||||
cached_size = 3
|
||||
|
||||
/obj/item/organ/genital/breasts/on_life()
|
||||
if(QDELETED(src))
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/datum/reagent/fermi
|
||||
name = "Fermi" //Why did I putthis here?
|
||||
id = "fermi" //It's meeee
|
||||
taste_description = "If affection had a taste, this would be it."
|
||||
taste_description = "affection and love!"
|
||||
var/ImpureChem = "toxin" // What chemical is metabolised with an inpure reaction
|
||||
var/InverseChemVal = 0.25 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising
|
||||
var/InverseChem = "toxin" // What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it.
|
||||
@@ -24,10 +24,7 @@
|
||||
//return ..()
|
||||
|
||||
//Called when reaction stops. #STOP_PROCESSING
|
||||
/*
|
||||
/datum/reagent/fermi/proc/FermiFinish(datum/reagents/holder, multipler) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
return
|
||||
*/
|
||||
|
||||
//Called when added to a beaker without any of the reagent present. #add_reagent
|
||||
/datum/reagent/fermi/proc/FermiNew(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW???
|
||||
return
|
||||
@@ -60,7 +57,7 @@
|
||||
/datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging
|
||||
. = ..()
|
||||
message_admins("purity of chem is [purity]")
|
||||
if(!istype(M, datum/mob/living/carbon/M))
|
||||
if(M.istype(/mob/living/carbon/M))
|
||||
return
|
||||
message_admins("purity of chem is [purity]")
|
||||
if (purity < 0)
|
||||
@@ -253,7 +250,7 @@
|
||||
if(prob(20))
|
||||
do_sparks(5,FALSE,M)
|
||||
src.addictCyc4++
|
||||
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[src.id]_overdose")//holdover until above fix works
|
||||
..()
|
||||
//. = 1
|
||||
|
||||
@@ -1160,12 +1157,11 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y
|
||||
return
|
||||
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)//If purity is over 5, works as intended
|
||||
if(!E)
|
||||
E = null
|
||||
M.reagents.remove_reagent(src.id, 10)
|
||||
M.apply_status_effect(/datum/status_effect/chem/enthrall)
|
||||
message_admins("No enthrall status found in [M]!")
|
||||
var/datum/status_effect/chem/enthrall/E = M.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
E.enthrallTally += 1
|
||||
else
|
||||
E.enthrallTally += 1
|
||||
if(prob(50))
|
||||
M.adjustBrainLoss(0.1)//Honestly this could be removed, in testing it made everyone brain damaged, but on the other hand, we were chugging tons of it.
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user