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