From b71bc7d9dc08bdff185d80ef6056cd90314681cf Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 4 May 2019 17:50:43 +0100 Subject: [PATCH] Added happiness, psicodine, neurine and 2/6th of MC chem --- code/datums/mood_events/drug_events.dm | 16 ++++ .../chemistry/reagents/drug_reagents.dm | 78 ++++++++++++++++- .../chemistry/reagents/medicine_reagents.dm | 36 +++++++- .../reagents/chemistry/recipes/drugs.dm | 7 ++ .../reagents/chemistry/recipes/medicine.dm | 12 +++ code/modules/surgery/organs/vocal_cords.dm | 84 ++++++++++++++++--- .../code/datums/status_effects/chems.dm | 19 +++-- .../chemistry/reagents/fermi_reagents.dm | 12 +-- 8 files changed, 235 insertions(+), 29 deletions(-) diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm index 40c239180e..6ed33b0f00 100644 --- a/code/datums/mood_events/drug_events.dm +++ b/code/datums/mood_events/drug_events.dm @@ -37,3 +37,19 @@ /datum/mood_event/withdrawal_critical/add_effects(drug_name) description = "[drug_name]! [drug_name]! [drug_name]!\n" + +/datum/mood_event/happiness_drug + description = "I can't feel anything and I never want this to end.\n" + mood_change = 50 + +/datum/mood_event/happiness_drug_good_od + description = "YES! YES!! YES!!!\n" + mood_change = 100 + timeout = 300 + special_screen_obj = "mood_happiness_good" + +/datum/mood_event/happiness_drug_bad_od + description = "NO! NO!! NO!!!\n" + mood_change = -100 + timeout = 300 + special_screen_obj = "mood_happiness_bad" diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index d77756a649..cd439b1899 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -359,6 +359,83 @@ ..() . = 1 +/datum/reagent/drug/happiness + name = "Happiness" + id = "happiness" + description = "Fills you with ecstasic numbness and causes minor brain damage. Highly addictive. If overdosed causes sudden mood swings." + reagent_state = LIQUID + color = "#FFF378" + addiction_threshold = 10 + overdose_threshold = 20 + +/datum/reagent/drug/happiness/on_mob_add(mob/living/L) + ..() + L.add_trait(TRAIT_FEARLESS, id) + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "happiness_drug", /datum/mood_event/happiness_drug) + +/datum/reagent/drug/happiness/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_FEARLESS, id) + SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "happiness_drug") + ..() + +/datum/reagent/drug/happiness/on_mob_life(mob/living/carbon/M) + M.jitteriness = 0 + M.confused = 0 + M.disgust = 0 + M.adjustBrainLoss(0.2) + ..() + . = 1 + +/datum/reagent/drug/happiness/overdose_process(mob/living/M) + if(prob(30)) + var/reaction = rand(1,3) + switch(reaction) + if(1) + M.emote("laugh") + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "happiness_drug", /datum/mood_event/happiness_drug_good_od) + if(2) + M.emote("sway") + M.Dizzy(25) + if(3) + M.emote("frown") + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "happiness_drug", /datum/mood_event/happiness_drug_bad_od) + M.adjustBrainLoss(0.5) + ..() + . = 1 + +/datum/reagent/drug/happiness/addiction_act_stage1(mob/living/M)// all work and no play makes jack a dull boy + GET_COMPONENT_FROM(mood, /datum/component/mood, M) + mood.setSanity(min(mood.sanity, SANITY_DISTURBED)) + M.Jitter(5) + if(prob(20)) + M.emote(pick("twitch","laugh","frown")) + ..() + +/datum/reagent/drug/happiness/addiction_act_stage2(mob/living/M) + GET_COMPONENT_FROM(mood, /datum/component/mood, M) + mood.setSanity(min(mood.sanity, SANITY_UNSTABLE)) + M.Jitter(10) + if(prob(30)) + M.emote(pick("twitch","laugh","frown")) + ..() + +/datum/reagent/drug/happiness/addiction_act_stage3(mob/living/M) + GET_COMPONENT_FROM(mood, /datum/component/mood, M) + mood.setSanity(min(mood.sanity, SANITY_CRAZY)) + M.Jitter(15) + if(prob(40)) + M.emote(pick("twitch","laugh","frown")) + ..() + +/datum/reagent/drug/happiness/addiction_act_stage4(mob/living/carbon/human/M) + GET_COMPONENT_FROM(mood, /datum/component/mood, M) + mood.setSanity(SANITY_INSANE) + M.Jitter(20) + if(prob(50)) + M.emote(pick("twitch","laugh","frown")) + ..() + . = 1 + /datum/reagent/drug/skooma name = "Skooma" id = "skooma" @@ -429,4 +506,3 @@ if(prob(40)) M.emote(pick("twitch","drool","moan")) ..() - diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 58926d0c69..34643085e7 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -62,7 +62,7 @@ M.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC) if(M.blood_volume < BLOOD_VOLUME_NORMAL) M.blood_volume = BLOOD_VOLUME_NORMAL - + for(var/thing in M.diseases) var/datum/disease/D = thing if(D.severity == DISEASE_SEVERITY_POSITIVE) @@ -1286,3 +1286,37 @@ M.adjustStaminaLoss(1.5*REM, 0) ..() return TRUE + +/datum/reagent/medicine/psicodine + name = "Psicodine" + id = "psicodine" + description = "Suppresses anxiety and other various forms of mental distress. Overdose causes hallucinations and minor toxin damage." + reagent_state = LIQUID + color = "#07E79E" + metabolization_rate = 0.25 * REAGENTS_METABOLISM + overdose_threshold = 30 + +/datum/reagent/medicine/psicodine/on_mob_add(mob/living/L) + ..() + L.add_trait(TRAIT_FEARLESS, id) + +/datum/reagent/medicine/psicodine/on_mob_delete(mob/living/L) + L.remove_trait(TRAIT_FEARLESS, id) + ..() + +/datum/reagent/medicine/psicodine/on_mob_life(mob/living/carbon/M) + M.jitteriness = max(0, M.jitteriness-6) + M.dizziness = max(0, M.dizziness-6) + M.confused = max(0, M.confused-6) + M.disgust = max(0, M.disgust-6) + GET_COMPONENT_FROM(mood, /datum/component/mood, M) + if(mood.sanity <= SANITY_NEUTRAL) // only take effect if in negative sanity and then... + mood.setSanity(min(mood.sanity+5, SANITY_NEUTRAL)) // set minimum to prevent unwanted spiking over neutral + ..() + . = 1 + +/datum/reagent/medicine/psicodine/overdose_process(mob/living/M) + M.hallucination = min(max(0, M.hallucination + 5), 60) + M.adjustToxLoss(1, 0) + ..() + . = 1 diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index d91e2af7e9..27b1fe12ee 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -41,6 +41,13 @@ results = list("aranesp" = 3) required_reagents = list("epinephrine" = 1, "atropine" = 1, "morphine" = 1) +/datum/chemical_reaction/happiness + name = "Happiness" + id = "happiness" + results = list("happiness" = 4) + required_reagents = list("nitrous_oxide" = 2, "epinephrine" = 1, "ethanol" = 1) + required_catalysts = list("plasma" = 5) + /datum/chemical_reaction/skooma name = "skooma" id = "skooma" diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index dc7c32d925..4cecf4216c 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -172,6 +172,12 @@ results = list("mutadone" = 3) required_reagents = list("mutagen" = 1, "acetone" = 1, "bromine" = 1) +/datum/chemical_reaction/neurine + name = "Neurine" + id = "neurine" + results = list("neurine" = 3) + required_reagents = list("mannitol" = 1, "acetone" = 1, "oxygen" = 1) + /datum/chemical_reaction/antihol name = "antihol" id = "antihol" @@ -252,3 +258,9 @@ results = list("modafinil" = 5) required_reagents = list("diethylamine" = 1, "ammonia" = 1, "phenol" = 1, "acetone" = 1, "sacid" = 1) required_catalysts = list("bromine" = 1) // as close to the real world synthesis as possible + +/datum/chemical_reaction/psicodine + name = "Psicodine" + id = "psicodine" + results = list("psicodine" = 5) + required_reagents = list( "mannitol" = 2, "water" = 2, "impedrezene" = 1) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index c6c40de31a..60734aafc6 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -762,19 +762,19 @@ specific_listeners += L //focus on those with the specified name //Cut out the name so it doesn't trigger commands found_string = L.real_name - power_multiplier *= 2 + power_multiplier += 0.5 else if(dd_hasprefix(message, L.first_name())) specific_listeners += L //focus on those with the specified name //Cut out the name so it doesn't trigger commands found_string = L.first_name() - power_multiplier *= 2 + power_multiplier += 0.5 else if(L.mind && L.mind.assigned_role && dd_hasprefix(message, L.mind.assigned_role)) specific_listeners += L //focus on those with the specified job //Cut out the job so it doesn't trigger commands found_string = L.mind.assigned_role - power_multiplier *= 2 + power_multiplier += 0.25 if(specific_listeners.len) listeners = specific_listeners @@ -782,7 +782,7 @@ message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1) //phase 1 - var/static/regex/enthral_words = regex("relax|obey|give in|love|serve|docile") + var/static/regex/enthral_words = regex("relax|obey|give in|love|serve|docile|so easy") var/static/regex/reward_words = regex("good boy|good girl|good pet") var/static/regex/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush") var/static/regex/attract_words = regex("come here|come to me|get over here|attract") @@ -838,16 +838,81 @@ 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 //ENTHRAL if(findtext(message, enthral_words)) - cooldown = COOLDOWN_VTHRAL 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.enthralTally += power_multiplier + 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(message.len > 50) + 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 + + //REWARD + if(findtext(message, reward_words)) + for(var/V in listeners) + var/mob/living/L = V + var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral) + 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) + else + E.resistanceTally /= 2*power_multiplier + cooldown = COOLDOWN_VTHRAL + + //PUNISH + if(findtext(message, punish_words)) + for(var/V in listeners) + var/mob/living/L = V + var/datum/status_effect/chem/enthral/E = L.has_status_effect(/datum/status_effect/chem/enthral) + 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*power_multiplier + L.adjustArousalLoss(-2*power_multiplier) + else + E.resistanceTally /= 3*power_multiplier //asexuals are masochists apparently (not seriously) + cooldown = COOLDOWN_VTHRAL + + //SILENCE + 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) + if L.phase == 3 //If target is fully enthralled, + C.add_trait(TRAIT_MUTE, TRAUMA_TRAIT) + else + 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) + E.deltaResist += (power_multiplier) + + //FORGET + 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) + var/i = 0 //STUN @@ -877,13 +942,6 @@ for(var/mob/living/carbon/C in listeners) C.vomit(10 * power_multiplier, distance = power_multiplier) - //SILENCE - else if((findtext(message, silence_words))) - cooldown = COOLDOWN_STUN - for(var/mob/living/carbon/C in listeners) - if(user.mind && (user.mind.assigned_role == "Curator" || user.mind.assigned_role == "Mime")) - power_multiplier *= 3 - C.silent += (10 * power_multiplier) //HALLUCINATE else if((findtext(message, hallucinate_words))) diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 801938d721..724ab291f2 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -150,21 +150,24 @@ /////////////////////////////////////////// */ -/datum/status_effect/chem/enthral - id = "enthral" +/datum/status_effect/chem/enthrall + id = "enthrall" var/mob/living/E //E for enchanter //var/mob/living/V = list() //V for victims - var/enthralTally = 10 + var/enthrallTally = 10 var/resistanceTally = 0 - var/phase = 0 + var/deltaResist + var/deltaEnthrall + var/phase = 1 //1: initial, 2: 2nd stage - more commands, 3rd: fully enthralled + var/command var/enthralID -/datum/status_effect/chem/enthra/on_apply(mob/living/carbon/M) +/datum/status_effect/chem/enthrall/on_apply(mob/living/carbon/M) if(M.ID == ) -/datum/status_effect/chem/enthral/tick(mob/living/carbon/M) - redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) +/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 switch(phase) if(0) return @@ -173,7 +176,7 @@ -/datum/status_effect/chem/enthral/proc/owner_resist(mob/living/carbon/M) +/datum/status_effect/chem/enthrall/proc/owner_resist(mob/living/carbon/M) to_chat(owner, "You attempt to shake the mental cobwebs from your mind!") if (M.canbearoused) resistance *= ((100 - M.arousalloss/100)/100) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 5855574d76..c89a88af0b 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -39,10 +39,10 @@ addiction_stage4_end = 43 //Incase it's too long var/location_created var/turf/open/location_return = null - var/addictCyc1 = 1 - var/addictCyc2 = 1 - var/addictCyc3 = 1 - var/addictCyc4 = 1 + var/addictCyc1 = 0 + var/addictCyc2 = 0 + var/addictCyc3 = 0 + var/addictCyc4 = 0 var/mob/living/fermi_Tclone = null var/teleBool = FALSE mob/living/carbon/purgeBody @@ -152,7 +152,7 @@ /datum/reagent/fermi/eigenstate/addiction_act_stage4(mob/living/M) //Thanks for riding Fermis' wild ride. Mild jitter and player buggery. switch(src.addictCyc4) - if(1) + if(0) do_sparks(5,FALSE,M) do_teleport(M, get_turf(M), 2, no_effects=TRUE) //teleports clone so it's hard to find the real one! do_sparks(5,FALSE,M) @@ -172,7 +172,7 @@ src.addictCyc4++ ..() - //. = 1 + . = 1 ///datum/reagent/fermi/eigenstate/overheat_explode(mob/living/M) // return