Fixed a few things, 1/2 way through MC chem.

This commit is contained in:
Fermi
2019-05-05 20:32:07 +01:00
parent b71bc7d9dc
commit f31a46e029
8 changed files with 219 additions and 122 deletions
+4
View File
@@ -137,6 +137,9 @@
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
#define COMSIG_LIVING_SAY "say" //mob/living/say() - return COMSIG_I_FORGET_WHAT_TO_CALL_IT to interrupt before message sent.
#define COMPONENT_NO_SAY 1 // Here I am pretending to know what I'm doing.
// /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
@@ -145,6 +148,7 @@
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
// /obj/item signals
#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob)
+1 -3
View File
@@ -216,8 +216,6 @@
message = replacetext(message, "l", "w")
message = replacetext(message, "r", "w")
if(prob(20))
message += " OwO"
else if(prob(30))
message += " uwu"
message += pick(" OwO", " uwu")
message = lowertext(message)
return message
+69 -89
View File
@@ -613,7 +613,7 @@
return cooldown
//////////////////////////////////////
///////ENTHRAL SILVER TONGUE//////////
///////ENTHRAL VELVET CHORDS//////////
//////////////////////////////////////
//Heavily modified voice of god code
@@ -674,8 +674,8 @@
*/
/obj/item/organ/vocal_cords/velvet/handle_speech(message)
var/cooldown = velvetspeec(hmessage, owner, spans, base_multiplier)
return //voice of god speaks for us
var/cooldown = velvetspeech(message, owner, spans, base_multiplier)
return //velvetspeech should handle speech
@@ -718,7 +718,7 @@
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.
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)
@@ -739,7 +739,7 @@
if(user.mind.assigned_role == "Mime")
power_multiplier *= 0.5
//Cultists are closer to their gods and are more better at indoctrinating
//Cultists are closer to their gods and are better at indoctrinating
if(iscultist(user))
power_multiplier *= 2
else if (is_servant_of_ratvar(user))
@@ -778,7 +778,7 @@
if(specific_listeners.len)
listeners = specific_listeners
//power_multiplier *= (1 + (1/specific_listeners.len)) //Put this is if it becomes OP
//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)
//phase 1
@@ -789,8 +789,11 @@
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")
//phase 2
var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE
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")
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown")
var/static/regex/sleep_words = regex("sleep|slumber|rest")
@@ -808,7 +811,7 @@
var/static/regex/whoareyou_words = regex("who are you|say your name|state your name|identify")
var/static/regex/saymyname_words = regex("say my name|who am i|whoami")
var/static/regex/knockknock_words = regex("knock knock")
var/static/regex/statelaws_words = regex("state laws|state your laws")
//var/static/regex/statelaws_words = regex("state laws|state your laws")
var/static/regex/move_words = regex("move|walk")
var/static/regex/left_words = regex("left|west|port")
var/static/regex/right_words = regex("right|east|starboard")
@@ -831,23 +834,19 @@
var/static/regex/salute_words = regex("salute")
var/static/regex/deathgasp_words = regex("play dead")
var/static/regex/clap_words = regex("clap|applaud")
var/static/regex/honk_words = regex("ho+nk") //hooooooonk
var/static/regex/multispin_words = regex("like a record baby|right round")
var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE
var/static/regex/dab_words = regex("dab|mood") //CITADEL CHANGE
var/static/regex/snap_words = regex("snap") //CITADEL CHANGE
//var/static/regex/honk_words = regex("ho+nk") //hooooooonk
//var/static/regex/multispin_words = regex("like a record baby|right round")
//var/static/regex/dab_words = regex("dab|mood") //CITADEL CHANGE
//var/static/regex/snap_words = regex("snap") //CITADEL CHANGE
//var/static/regex/bwoink_words = regex("what the fuck are you doing|bwoink|hey you got a moment?") //CITADEL CHANGE
var/distancelist = list(1.5,1.5,1.3,1.2,1.1,1,0.8,0.6,0.5,0.25)
var/static/regex/reward_words = regex("good boy|good girl|good pet")
var/static/regex/silence_words = regex("silence|be silent|ssh|quiet|hush")
var/static/regex/attract_words = regex("come here|come to me|get over here|attract")
var/static/regex/punish_words = regex("bad boy|bad girl|bad pet")
var/static/regex/resist_words = regex("resist|snap out of it|come to your senses")//useful if two enthrallers are fighting
var/static/regex/forget_words = regex("forget|muddled|")
//enthral_words, reward_words, silence_words attract_words punish_words desire_words resist_words forget_words
//Tier 1
//ENTHRAL
if(findtext(message, enthral_words))
for(var/V in listeners)
@@ -859,7 +858,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 = COOLDOWN_VTHRAL
cooldown = 100
//REWARD
if(findtext(message, reward_words))
@@ -893,26 +892,70 @@
else if((findtext(message, silence_words)))
cooldown = COOLDOWN_VSTUN
for(var/mob/living/carbon/C in listeners)
var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
var/datum/status_effect/chem/enthral/C = C.has_status_effect(/datum/status_effect/chem/enthral)
power_multiplier *= distancelist[get_dist(user, V)+1]
if L.phase == 3 //If target is fully enthralled,
C.add_trait(TRAIT_MUTE, TRAUMA_TRAIT)
else
C.silent += ((10 * power_multiplier) * E.phase
C.silent += ((10 * power_multiplier) * E.phase)
//RESIST
else if((findtext(message, silence_words)))
cooldown = COOLDOWN_VSTUN
for(var/mob/living/carbon/C in listeners)
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)
//FORGET
//FORGET (A way to cancel the process)
else if((findtext(message, silence_words)))
cooldown = COOLDOWN_VSTUN
for(var/mob/living/carbon/C in listeners)
var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
E.deltaResist += (power_multiplier)
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
//ATTRACT
else if((findtext(message, attract_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
L.throw_at(get_step_towards(user,L), 3 * power_multiplier, 1 * power_multiplier)
//teir 2
//ORGASM
else if((findtext(message, orgasm_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/carbon/human/H = V
var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral)
if(H.canbearoused && H.has_dna()) // probably a redundant check but for good measure
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).
//awoo
else if((findtext(message, awoo_words)))
cooldown = 0
for(var/V in listeners)
var/mob/living/M = V
M.say("*awoo")
//Nya
else if((findtext(message, nya_words)))
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)
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)
var/i = 0
//STUN
@@ -930,11 +973,7 @@
var/mob/living/L = V
L.Knockdown(60 * power_multiplier)
//SLEEP
else if((findtext(message, sleep_words)))
cooldown = COOLDOWN_STUN
for(var/mob/living/carbon/C in listeners)
C.Sleeping(40 * power_multiplier)
//VOMIT
else if((findtext(message, vomit_words)))
@@ -1006,12 +1045,7 @@
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)
//ATTRACT
else if((findtext(message, attract_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
L.throw_at(get_step_towards(user,L), 3 * power_multiplier, 1 * power_multiplier)
//WHO ARE YOU?
else if((findtext(message, whoareyou_words)))
@@ -1171,24 +1205,6 @@
addtimer(CALLBACK(L, /mob/living/.proc/emote, "dance"), 5 * i)
i++
//JUMP
else if((findtext(message, jump_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/L = V
if(prob(25))
addtimer(CALLBACK(L, /atom/movable/proc/say, "HOW HIGH?!!"), 5 * i)
addtimer(CALLBACK(L, /mob/living/.proc/emote, "jump"), 5 * i)
i++
//SALUTE
else if((findtext(message, salute_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/L = V
addtimer(CALLBACK(L, /mob/living/.proc/emote, "salute"), 5 * i)
i++
//PLAY DEAD
else if((findtext(message, deathgasp_words)))
cooldown = COOLDOWN_MEME
@@ -1197,14 +1213,6 @@
addtimer(CALLBACK(L, /mob/living/.proc/emote, "deathgasp"), 5 * i)
i++
//PLEASE CLAP
else if((findtext(message, clap_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/L = V
addtimer(CALLBACK(L, /mob/living/.proc/emote, "clap"), 5 * i)
i++
//HONK
else if((findtext(message, honk_words)))
cooldown = COOLDOWN_MEME
@@ -1221,34 +1229,6 @@
var/mob/living/L = V
L.SpinAnimation(speed = 10, loops = 5)
//CITADEL CHANGES
//ORGASM
else if((findtext(message, orgasm_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/carbon/human/H = V
if(H.canbearoused && H.has_dna()) // probably a redundant check but for good measure
H.mob_climax(forced_climax=TRUE)
//DAB
else if((findtext(message, dab_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/M = V
M.say("*dab")
//SNAP
else if((findtext(message, snap_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/M = V
M.say("*snap")
//BWOINK
else if((findtext(message, bwoink_words)))
cooldown = COOLDOWN_MEME
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, get_turf(user), 'sound/effects/adminhelp.ogg', 300, 1), 25)
//END CITADEL CHANGES
else
cooldown = COOLDOWN_NONE
@@ -3,19 +3,27 @@
description = "<span class='warning'>Where the hell am I? Is this an alternative dimension ?</span>\n"
/datum/mood_event/enthrall
mood_change = 2
description = "<span class='warning'>I am a good pet for master.</span>\n"
mood_change = 5
description = "<span class='warning'>I am a good pet for Master.</span>\n"
/datum/mood_event/enthrallpraise
mood_change = 5
mood_change = 10
description = "<span class='warning'>Master praised me!!</span>\n"
timeout = 1200
timeout = 400
/datum/mood_event/enthrallscold
mood_change = -5
description = "<span class='warning'>I have let master down.</span>\n"//aaa I'm not kinky enough for this
timeout = 1200
mood_change = -10
description = "<span class='warning'>I have let Master down.</span>\n"//aaa I'm not kinky enough for this
timeout = 400
/datum/mood_event/enthrallmissing1
mood_change = -5
description = "<span class='warning'></span>\n"
description = "<span class='warning'>I miss Master's presence.</span>\n"
/datum/mood_event/enthrallmissing2
mood_change = -10
description = "<span class='warning'>I really miss Masters presence.</span>\n"
/datum/mood_event/enthrallmissing3
mood_change = -25
description = "<span class='warning'>Where are you Master??!</span>\n"
@@ -1,7 +1,14 @@
/datum/status_effect/chem/SGDF
id = "SGDF"
var/mob/living/fermi_Clone
alert_type = null
/*
/obj/screen/alert/status_effect/SDGF
name = "SDGF"
desc = "You've cloned yourself! How cute."
icon_state = "SDGF"
*/
/datum/status_effect/chem/SGDF/on_apply()
message_admins("SGDF status appied")
@@ -36,6 +43,7 @@
/datum/status_effect/chem/BElarger
id = "BElarger"
alert_type = null
//var/list/items = list()
//var/items = o.get_contents()
@@ -100,6 +108,7 @@
/datum/status_effect/chem/PElarger
id = "PElarger"
alert_type = null
/datum/status_effect/chem/PElarger/on_apply(mob/living/carbon/human/H)//Removes clothes, they're too small to contain you. You belong to space now.
message_admins("PElarge started!")
@@ -152,37 +161,134 @@
/datum/status_effect/chem/enthrall
id = "enthrall"
alert_type = null
var/mob/living/E //E for enchanter
//var/mob/living/V = list() //V for victims
var/enthrallTally = 10
var/resistanceTally = 0
var/deltaResist
var/deltaEnthrall
var/phase = 1 //1: initial, 2: 2nd stage - more commands, 3rd: fully enthralled
var/command
var/enthralID
var/phase = 1 //-1: resisted state, due to be removed.0: sleeper agent, no effects unless triggered 1: initial, 2: 2nd stage - more commands, 3rd: fully enthralled, 4th Mindbroken
var/status = null
var/statusStrength = 0
var/enthrallID
var/mindbroken = FALSE
var/datum/weakref/redirect_component1
var/datum/weakref/redirect_component2
/datum/status_effect/chem/enthrall/on_apply(mob/living/carbon/M)
if(M.ID == )
if(M.ID == enthralID)
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
/datum/status_effect/chem/enthrall/tick(mob/living/carbon/M)
redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed
if(M.has_trait(TRAIT_MINDSHIELD))
resistanceTally += 5
if(prob(20))
to_chat(owner, "You feel your lucidity returning as the mindshield fights")
switch(phase)
if(0)
if(-1)//fully removed
owner.remove_status_effect(src)
if(0)// sleeper agent
return
if(1)
if(1)//Initial enthrallment
if (enthrallTally > 100)
phase += 1
return
if (resistanceTally > 100)
if resist
/datum/status_effect/chem/enthrall/on_remove(mob/living/carbon/M)
qdel(redirect_component1.resolve())
redirect_component1 = null
qdel(redirect_component2.resolve())
redirect_component2 = null
/*
/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)
return
else
. = ..()
*/
/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(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!")
//base resistance
if (M.canbearoused)
resistance *= ((100 - M.arousalloss/100)/100)
deltaResist*= ((100 - M.arousalloss/100)/100)//more aroused you are, the weaker resistance you can give
else
resistance *= 0.2
deltaResist *= 0.2
//chemical resistance, brain and annaphros are the key to undoing, but the subject has to to be willing to resist.
if (user.has_reagent("mannitol"))
deltaResist *= 1.25
if (user.has_reagent("neurine"))
deltaResist *= 1.5
if (!H.has_trait(TRAIT_CROCRIN_IMMUNE) && M.canbearoused)
if (user.has_reagent("anaphro"))
deltaResist *= 1.5
if (user.has_reagent("anaphro+"))
deltaResist *= 2
if (user.has_reagent("aphro"))
deltaResist *= 0.75
if (user.has_reagent("aphro+"))
deltaResist *= 0.5
//Antag resistance
//cultists are already brainwashed by their god
if(iscultist(owner))
deltaResist *= 2
else if (is_servant_of_ratvar(user))
deltaResist *= 2
//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
//role resistance
//Chaplains are already brainwashed by their god
if(owner.mind.assigned_role == "Chaplain")
deltaResist *= 1.5
//Command staff has authority,
if(owner.mind.assigned_role in GLOB.command_positions)
deltaResist *= 1.4
//if(owner.first_name == "skylar"); power_multiplier *= 0.8 //for skylar //I'm kidding
//Chemists should be familiar with drug effects
if(owner.mind.assigned_role == "Chemist")
deltaResist *= 1.3
//Happiness resistance
//Your Thralls are like pets, you need to keep them happy.
if(owner.nutrition < 250)
deltaResist += (250-owner.nutrition)/100
if(owner.health < 120)//Harming your thrall will make them rebel harder.
deltaResist *= ((120-owner.health)/100)+1
//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(istype(owner.neck, /obj/item/clothing/neck/petcollar))
deltaResist *= 0.8
/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()]")
if(findtext(message, enthral_words))
if(enthralID.gender == FEMALE)
message = replacetext(message, enthralID.real_name, "Mistress")
message = replacetext(message, enthralID.first_name(, "Mistress")
else
message = replacetext(message, enthralID.real_name, "Master")
message = replacetext(message, enthralID.first_name(, "Master")
return message
/*
/datum/status_effect/chem/OwO
id = "OwO"
@@ -1,8 +1,8 @@
//Fermiclothes!
//Clothes made from FermiChem
/obj/item/clothing/head/hattip //Actually the M1 Helmet
name = "flak helmet"
/obj/item/clothing/head/hattip //I wonder if anyone else has played cryptworlds
name = "Sythetic hat"
con = 'icons/obj/clothing/hats.dmi'
icon_state = "top_hat"
desc = "A sythesized hat, you can't seem to take it off. And tips their hat."
@@ -724,27 +724,27 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
qdel(M) //Approx 60minutes till death from initial addiction
..()
/datum/reagent/fermi/enthral
name = "Need a name"
/datum/reagent/fermi/enthrall
name = "MKUltra"
id = "enthral"
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
addiction_threshold = 30
addiction_stage1_end = 9999//Should never end.
//overdose_threshold = 20
//addiction_threshold = 30
//addiction_stage1_end = 9999//Should never end.
var/creatorID //add here
/datum/reagent/fermi/enthral/on_mob_life(mob/living/carbon/M)
/datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M)
if(!creatorID)
CRASH("Something went wrong in enthral creation")
else if(M.ID == creatorID)
var/obj/item/organ/tongue/T = M.getorganslot(ORGAN_SLOT_TONGUE)
var/obj/item/organ/tongue/nT = new /obj/item/organ/tongue/silver
T.Remove(M)
nT.Insert(M)
qdel(T)
var/obj/item/organ/vocal_cords/Vc = M.getorganslot(ORGAN_SLOT_VOICE)
var/obj/item/organ/vocal_cords/nVc = new /obj/item/organ/vocal_cords/velvet
Vc.Remove(M)
nVc.Insert(M)
qdel(Vc)
else
//Requires player to be within vicinity of creator
@@ -107,6 +107,7 @@
id = "enthral"
results = list("enthral" = 3)
required_reagents = list("plasma" = 1, "stable_plasma" = 1, "sugar" = 1)
required_catalysts = list("blood" = 1)
//required_reagents = list("stable_plasma" = 5, "slimejelly" = 5, "synthflesh" = 10, "blood" = 10)
//FermiChem vars:
OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions