MC chem 5.5/6

This commit is contained in:
Fermi
2019-05-10 02:00:17 +01:00
parent 854c0097d4
commit 7d567fee63
3 changed files with 133 additions and 128 deletions
+78 -125
View File
@@ -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?