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..5c39cd9db2 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -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)