From 9f7098231b5b95f640a9c48ac55ad3ebd8230d00 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 19 Nov 2018 06:48:11 -0500 Subject: [PATCH 1/2] y'all n'wahs don't even smoke weed - adds skooma (and adds the ability for reagents to define custom addiction stages) --- code/modules/reagents/chemistry/holder.dm | 25 ++++--- .../chemistry/machinery/reagentgrinder.dm | 8 ++- code/modules/reagents/chemistry/reagents.dm | 4 ++ .../chemistry/reagents/drug_reagents.dm | 72 +++++++++++++++++++ .../chemistry/reagents/other_reagents.dm | 7 ++ .../reagents/chemistry/recipes/drugs.dm | 15 ++++ 6 files changed, 117 insertions(+), 14 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 8d3d704f79..9674485c45 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -292,19 +292,18 @@ var/datum/reagent/R = addiction if(C && R) R.addiction_stage++ - switch(R.addiction_stage) - if(1 to 10) - need_mob_update += R.addiction_act_stage1(C) - if(10 to 20) - need_mob_update += R.addiction_act_stage2(C) - if(20 to 30) - need_mob_update += R.addiction_act_stage3(C) - if(30 to 40) - need_mob_update += R.addiction_act_stage4(C) - if(40 to INFINITY) - to_chat(C, "You feel like you've gotten over your need for [R.name].") - SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction") - cached_addictions.Remove(R) + if(1 <= R.addiction_stage && R.addiction_stage <= R.addiction_stage1_end) + need_mob_update += R.addiction_act_stage1(C) + else if(R.addiction_stage1_end <= R.addiction_stage && R.addiction_stage <= R.addiction_stage2_end) + need_mob_update += R.addiction_act_stage2(C) + else if(R.addiction_stage2_end <= R.addiction_stage && R.addiction_stage <= R.addiction_stage3_end) + need_mob_update += R.addiction_act_stage3(C) + else if(R.addiction_stage3_end <= R.addiction_stage && R.addiction_stage <= R.addiction_stage4_end) + need_mob_update += R.addiction_act_stage4(C) + else if(R.addiction_stage4_end <= R.addiction_stage) + to_chat(C, "You feel like you've gotten over your need for [R.name].") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction") + cached_addictions.Remove(R) addiction_tick++ if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. C.updatehealth() diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 3ee971bc9f..0be1cfc382 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -301,7 +301,7 @@ operate_for(50, juicing = TRUE) addtimer(CALLBACK(src, /obj/machinery/reagentgrinder/proc/mix_complete), 50) -/obj/machinery/reagentgrinder/proc/mix_complete() +/obj/machinery/reagentgrinder/proc/mix_complete() //what the fuck. why the fuck are mixed recipes hardcoded. seriously what in the actual shit. i mean its out of scope for my pr but hot damn if(beaker && beaker.reagents.total_volume) //Recipe to make Butter var/butter_amt = FLOOR(beaker.reagents.get_reagent_amount("milk") / MILK_TO_BUTTER_COEFF, 1) @@ -313,3 +313,9 @@ var/amount = beaker.reagents.get_reagent_amount("eggyolk") beaker.reagents.remove_reagent("eggyolk", amount) beaker.reagents.add_reagent("mayonnaise", amount) + //Moonsugar for skooma + if(beaker.reagents.has_reagent("sugar") && beaker.reagents.has_reagent("moonshine")) + var/amount = min(beaker.reagents.get_reagent_amount("sugar"), beaker.reagents.get_reagent_amount("moonshine")) + beaker.reagents.remove_reagent("sugar", amount) + beaker.reagents.remove_reagent("moonshine", amount) + beaker.reagents.add_reagent("moonsugar", amount*2) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 04f2a00302..a52bb1ecfe 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -27,6 +27,10 @@ var/overdose_threshold = 0 var/addiction_threshold = 0 var/addiction_stage = 0 + var/addiction_stage1_end = 10 + var/addiction_stage2_end = 20 + var/addiction_stage3_end = 30 + var/addiction_stage4_end = 40 var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick. var/self_consuming = FALSE diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 989c5a9b82..eb3daef393 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -355,3 +355,75 @@ M.adjustOxyLoss(1, 0) ..() . = 1 + +/datum/reagent/drug/skooma + name = "Skooma" + id = "skooma" + description = "An ancient, highly-addictive drug of long-forgotten times. It greatly improves the user's speed and strength, but heavily impedes their intelligence and agility." + reagent_state = LIQUID + color = "#F3E0F9" + taste_description = "ancient, unfulfilled prophecies" + addiction_threshold = 1 + addiction_stage3_end = 40 + addiction_stage4_end = 240 + +/datum/reagent/drug/skooma/on_mob_add(mob/living/L) + . = ..() + L.add_trait(TRAIT_GOTTAGOFAST, id) + L.next_move_modifier *= 2 + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.physiology) + H.physiology.stamina_mod *= 0.5 + if(H.dna && H.dna.species) + H.dna.species.punchdamagehigh *= 5 + +/datum/reagent/drug/skooma/on_mob_delete(mob/living/L) + . = ..() + L.remove_trait(TRAIT_GOTTAGOFAST, id) + L.next_move_modifier *= 0.5 + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.physiology) + H.physiology.stamina_mod *= 2 + if(H.dna && H.dna.species) + H.dna.species.punchdamagehigh *= 0.2 + +/datum/reagent/drug/skooma/on_mob_life(mob/living/carbon/M) + M.adjustBrainLoss(1*REM) + M.adjustToxLoss(1*REM) + if(prob(10)) + M.adjust_blurriness(2) + ..() + . = 1 + +/datum/reagent/drug/skooma/addiction_act_stage1(mob/living/M) + M.Jitter(10) + if(prob(50)) + M.adjust_blurriness(2) + ..() + +/datum/reagent/drug/skooma/addiction_act_stage2(mob/living/M) + M.Jitter(20) + M.Dizzy(10) + M.adjust_blurriness(2) + ..() + +/datum/reagent/drug/skooma/addiction_act_stage3(mob/living/M) + M.Jitter(50) + M.Dizzy(20) + M.adjust_blurriness(4) + if(prob(20)) + M.emote(pick("twitch","drool","moan")) + ..() + +/datum/reagent/drug/skooma/addiction_act_stage4(mob/living/M) + M.Jitter(50) + M.Dizzy(50) + M.adjust_blurriness(10) + if(prob(50)) //This proc will be called about 200 times and the adjustbrainloss() below only has to be called 40 times to kill. This will make surviving skooma addiction pretty rare without mannitol usage. + M.adjustBrainLoss(5) + if(prob(40)) + M.emote(pick("twitch","drool","moan")) + ..() + diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index d45c1f65f0..53bc7e2c17 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1847,3 +1847,10 @@ /datum/reagent/tranquility/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) L.ForceContractDisease(new /datum/disease/transformation/gondola(), FALSE, TRUE) + +/datum/reagent/moonsugar + name = "Moonsugar" + id = "moonsugar" + description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results." + color = "#FAEAFF" + taste_description = "synthetic catnip" diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index e3fa5603c7..d91e2af7e9 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -40,3 +40,18 @@ id = "aranesp" results = list("aranesp" = 3) required_reagents = list("epinephrine" = 1, "atropine" = 1, "morphine" = 1) + +/datum/chemical_reaction/skooma + name = "skooma" + id = "skooma" + results = list("skooma" = 2, "moonshine" = 4, "sugar" = 4) + required_temp = 280 + is_cold_recipe = TRUE + required_reagents = list("moonsugar" = 10, "morphine" = 5) + +/datum/chemical_reaction/skoomarevert + name = "skoomarevert" + id = "skoomarevert" + results = list("moonsugar" = 1, "morphine" = 2.5) + required_temp = 315 //a little above normal body temperature + required_reagents = list("skooma" = 1) From 313ec9cb6fd9f87931d376153a088d81bdacff3b Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 19 Nov 2018 10:13:09 -0500 Subject: [PATCH 2/2] removes rant comment to appease the hungersune --- code/modules/reagents/chemistry/machinery/reagentgrinder.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 0be1cfc382..5c39cd9db2 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -301,7 +301,7 @@ operate_for(50, juicing = TRUE) addtimer(CALLBACK(src, /obj/machinery/reagentgrinder/proc/mix_complete), 50) -/obj/machinery/reagentgrinder/proc/mix_complete() //what the fuck. why the fuck are mixed recipes hardcoded. seriously what in the actual shit. i mean its out of scope for my pr but hot damn +/obj/machinery/reagentgrinder/proc/mix_complete() if(beaker && beaker.reagents.total_volume) //Recipe to make Butter var/butter_amt = FLOOR(beaker.reagents.get_reagent_amount("milk") / MILK_TO_BUTTER_COEFF, 1)