diff --git a/code/datums/diseases/berserker.dm b/code/datums/diseases/berserker.dm new file mode 100644 index 00000000000..248503ba672 --- /dev/null +++ b/code/datums/diseases/berserker.dm @@ -0,0 +1,55 @@ +/datum/disease/berserker + name = "Berserker" + max_stages = 2 + stage_prob = 5 + spread_text = "Non-Contagious" + spread_flags = SPECIAL + cure_text = "Anti-Psychotics" + cures = list("haloperidol") + agent = "Jagged Crystals" + cure_chance = 10 + viable_mobtypes = list(/mob/living/carbon/human) + desc = "Swearing, shouting, attacking nearby crew members uncontrollably." + severity = DANGEROUS + disease_flags = CURABLE + spread_flags = NON_CONTAGIOUS + +/datum/disease/berserker/stage_act() + ..() + if(affected_mob.reagents.has_reagent("thc")) + to_chat(affected_mob, "You mellow out.") + cure() + return + switch(stage) + if(1) + if(prob(5)) + affected_mob.emote(pick("twitch_s", "grumble")) + if(prob(5)) + var/speak = pick("Grr...", "Fuck...", "Fucking...", "Fuck this fucking.. fuck..") + affected_mob.say(speak) + if(2) + if(prob(5)) + affected_mob.emote(pick("twitch_s", "scream")) + if (prob(5)) + var/speak = pick("AAARRGGHHH!!!!", "GRR!!!", "FUCK!! FUUUUUUCK!!!", "FUCKING SHITCOCK!!", "WROOAAAGHHH!!") + affected_mob.say(speak) + if (prob(15)) + affected_mob.visible_message("[affected_mob] twitches violently!") + affected_mob.drop_l_hand() + affected_mob.drop_r_hand() + if (prob(33)) + if(affected_mob.incapacitated()) + affected_mob.visible_message("[affected_mob] spasms and twitches!") + return + affected_mob.visible_message("[affected_mob] thrashes around violently!") + for(var/mob/living/carbon/M in range(1, affected_mob)) + if(M == affected_mob) + continue + var/damage = rand(1, 5) + if (prob(80)) + playsound(affected_mob.loc, "punch", 25, 1, -1) + affected_mob.visible_message("[affected_mob] hits [M] with their thrashing!") + M.adjustBruteLoss(damage) + else + playsound(affected_mob.loc, "sound/weapons/punchmiss.ogg", 25, 1, -1) + affected_mob.visible_message("[affected_mob] fails to hit [M] with their thrashing!") \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 658959001a1..e5661f10ea5 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1349,16 +1349,18 @@ mob/proc/yank_out_object() ghost.notify_cloning(message, sound, source) return ghost -/mob/proc/fakevomit(green=0) //for aesthetic vomits that need to be instant and do not stun. -Fox +/mob/proc/fakevomit(green = 0, no_text = 0) //for aesthetic vomits that need to be instant and do not stun. -Fox if(stat==DEAD) return var/turf/location = loc if (istype(location, /turf/simulated)) if(green) - src.visible_message("[src] vomits up some green goo!","You vomit up some green goo!") + if(!no_text) + visible_message("[src] vomits up some green goo!","You vomit up some green goo!") new /obj/effect/decal/cleanable/vomit/green(location) else - src.visible_message("[src] pukes all over \himself!","You puke all over yourself!") + if(!no_text) + visible_message("[src] pukes all over \himself!","You puke all over yourself!") location.add_vomit_floor(src, 1) playsound(location, 'sound/effects/splat.ogg', 50, 1) diff --git a/code/modules/reagents/newchem/disease.dm b/code/modules/reagents/newchem/disease.dm index 9c18efe308d..9e2c4d89554 100644 --- a/code/modules/reagents/newchem/disease.dm +++ b/code/modules/reagents/newchem/disease.dm @@ -50,6 +50,19 @@ M.ForceContractDisease(new /datum/disease/tuberculosis(0)) ..() +/datum/reagent/jagged_crystals + name = "Jagged Crystals" + id = "jagged_crystals" + description = "Rapid chemical decomposition has warped these crystals into twisted spikes." + reagent_state = SOLID + color = "#FA0000" // rgb: 250, 0, 0 + +/datum/reagent/jagged_crystals/on_mob_life(var/mob/living/carbon/M as mob) + if(!M) M = holder.my_atom + M.ForceContractDisease(new /datum/disease/berserker(0)) + ..() + + /datum/reagent/spore name = "Blob Spores" id = "spore" diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/newchem/drugs.dm index 6d8a7d4117f..5ca177cb48e 100644 --- a/code/modules/reagents/newchem/drugs.dm +++ b/code/modules/reagents/newchem/drugs.dm @@ -26,11 +26,45 @@ ..() return -/datum/reagent/nicotine/overdose_process(var/mob/living/M as mob) - M.adjustToxLoss(1*REM) - M.adjustOxyLoss(1*REM) - ..() - return +/datum/reagent/nicotine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 2) + M.visible_message("[M] looks nervous!") + M.confused += 15 + M.adjustToxLoss(2) + M.Jitter(10) + M.emote("twitch_s") + else if(effect <= 4) + M.visible_message("[M] is all sweaty!") + M.bodytemperature += rand(15,30) + M.adjustToxLoss(3) + else if(effect <= 7) + M.adjustToxLoss(4) + M.emote("twitch") + M.Jitter(10) + else if(severity == 2) + if(effect <= 2) + M.emote("gasp") + to_chat(M, "You can't breathe!") + M.adjustOxyLoss(15) + M.adjustToxLoss(3) + M.Stun(1) + else if(effect <= 4) + to_chat(M, "You feel terrible!") + M.emote("drool") + M.Jitter(10) + M.adjustToxLoss(5) + M.Weaken(1) + M.confused += 33 + else if(effect <= 7) + M.emote("collapse") + to_chat(M, "Your heart is pounding!") + M << sound('sound/goonstation/effects/heartbeat.ogg') + M.Paralyse(5) + M.Jitter(30) + M.adjustToxLoss(6) + M.adjustOxyLoss(20) /datum/reagent/crank name = "Crank" @@ -62,12 +96,45 @@ M.emote(pick("groan", "moan")) ..() return -/datum/reagent/crank/overdose_process(var/mob/living/M as mob) - M.adjustBrainLoss(rand(1,10)*REM) - M.adjustToxLoss(rand(1,10)*REM) - M.adjustBruteLoss(rand(1,10)*REM) - ..() - return + +/datum/reagent/crank/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 2) + M.visible_message("[M] looks confused!") + M.confused += 20 + M.Jitter(20) + M.emote("scream") + else if(effect <= 4) + M.visible_message("[M] is all sweaty!") + M.bodytemperature += rand(5,30) + M.adjustBrainLoss(1) + M.adjustToxLoss(1) + M.Stun(2) + else if(effect <= 7) + M.Jitter(30) + M.emote("grumble") + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] is sweating like a pig!") + M.bodytemperature += rand(20,100) + M.adjustToxLoss(5) + M.Stun(3) + else if(effect <= 4) + M.visible_message("[M] starts tweaking the hell out!") + M.Jitter(100) + M.adjustToxLoss(2) + M.adjustBrainLoss(8) + M.Weaken(3) + M.confused += 25 + M.emote("scream") + M.reagents.add_reagent("jagged_crystals", 5) + else if(effect <= 7) + M.emote("scream") + M.visible_message("[M] nervously scratches at their skin!") + M.Jitter(10) + M.adjustBruteLoss(5) + M.emote("twitch_s") /datum/chemical_reaction/crank name = "Crank" @@ -120,12 +187,40 @@ ..() return -/datum/reagent/krokodil/overdose_process(var/mob/living/M as mob) - if(prob(10)) - M.adjustBrainLoss(rand(1,5)*REM) - M.adjustToxLoss(rand(1,5)*REM) - ..() - return +/datum/reagent/krokodil/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 2) + M.visible_message("[M] looks dazed!") + M.Stun(3) + M.emote("drool") + else if(effect <= 4) + M.emote("shiver") + M.bodytemperature -= 40 + else if(effect <= 7) + to_chat(M, "Your skin is cracking and bleeding!") + M.adjustBruteLoss(5) + M.adjustToxLoss(2) + M.adjustBrainLoss(1) + M.emote("cry") + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] sways and falls over!") + M.adjustToxLoss(3) + M.adjustBrainLoss(3) + M.Weaken(8) + M.emote("faint") + else if(effect <= 4) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.visible_message("[M]'s skin is rotting away!") + H.adjustBruteLoss(25) + H.emote("scream") + H.ChangeToHusk() + H.emote("faint") + else if(effect <= 7) + M.emote("shiver") + M.bodytemperature -= 70 /datum/chemical_reaction/krokodil name = "Krokodil" @@ -169,19 +264,30 @@ ..() return -/datum/reagent/methamphetamine/overdose_process(var/mob/living/M as mob) - if(prob(20)) - M.emote("laugh") - if(prob(33)) - M.visible_message("[M]'s hands flip out and flail everywhere!") - var/obj/item/I = M.get_active_hand() - if(I) - M.drop_item() - ..() - if(prob(50)) - M.adjustToxLoss(10) - M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1)) - return +/datum/reagent/methamphetamine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 2) + M.visible_message("[M] can't seem to control their legs!") + M.confused += 20 + M.Weaken(4) + else if(effect <= 4) + M.visible_message("[M]'s hands flip out and flail everywhere!") + M.drop_l_hand() + M.drop_r_hand() + else if(effect <= 7) + M.emote("laugh") + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M]'s hands flip out and flail everywhere!") + M.drop_l_hand() + M.drop_r_hand() + else if(effect <= 4) + M.visible_message("[M] falls to the floor and flails uncontrollably!") + M.Jitter(10) + M.Weaken(10) + else if(effect <= 7) + M.emote("laugh") /datum/chemical_reaction/methamphetamine name = "methamphetamine" @@ -255,7 +361,7 @@ mix_message = "Tiny cubic crystals precipitate out of the mixture. Huh." mix_sound = 'sound/goonstation/misc/fuse.ogg' -/datum/reagent/bath_salts/overdose_process(var/mob/living/M as mob) +/datum/reagent/bath_salts/overdose_process(var/mob/living/M as mob, severity) M.hallucination += 10 if(M.canmove && !istype(M.loc, /turf/space)) for(var/i = 0, i < 8, i++) @@ -266,7 +372,6 @@ var/obj/item/I = M.get_active_hand() if(I) M.drop_item() - ..() return /datum/chemical_reaction/aranesp @@ -381,24 +486,30 @@ /datum/reagent/fliptonium/reagent_deleted(var/mob/living/M as mob) M.SpinAnimation(speed = 12, loops = -1) -/datum/reagent/fliptonium/overdose_process(var/mob/living/M as mob) - if(volume > 15) - if(prob(5)) - switch(pick(1, 2, 3)) - if(1) - M.emote("laugh") - M.adjustToxLoss(1) - if(2) - to_chat(M, "[M] can't seem to control their legs!") - M.Weaken(8) - M.adjustToxLoss(1) - if(3) - to_chat(M, "[M]'s hands flip out and flail everywhere!") - M.drop_l_hand() - M.drop_r_hand() - M.adjustToxLoss(1) - ..() - return +/datum/reagent/fliptonium/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 2) + M.visible_message("[M] can't seem to control their legs!") + M.confused += 33 + M.Weaken(2) + else if(effect <= 4) + M.visible_message("[M]'s hands flip out and flail everywhere!") + M.drop_l_hand() + M.drop_r_hand() + else if(effect <= 7) + M.emote("laugh") + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M]'s hands flip out and flail everywhere!") + M.drop_l_hand() + M.drop_r_hand() + else if (effect <= 4) + M.visible_message("[M] falls to the floor and flails uncontrollably!") + M.Jitter(5) + M.Weaken(5) + else if(effect <= 7) + M.emote("laugh") ////////////////////////////// // Synth-Drugs // @@ -445,7 +556,7 @@ ..() return -/datum/reagent/lube/ultra/overdose_process(var/mob/living/M as mob) +/datum/reagent/lube/ultra/overdose_process(var/mob/living/M as mob, severity) if(prob(20)) M.emote("ping") if(prob(33)) @@ -457,7 +568,6 @@ if(prob(50)) M.adjustFireLoss(10) M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1)) - return //Surge: Krokodil /datum/reagent/surge @@ -484,7 +594,7 @@ ..() return -/datum/reagent/surge/overdose_process(var/mob/living/M as mob) +/datum/reagent/surge/overdose_process(var/mob/living/M as mob, severity) //Hit them with the same effects as an electrode! M.Stun(5) M.Weaken(5) @@ -502,8 +612,6 @@ B.icon = I M.adjustFireLoss(rand(1,5)*REM) M.adjustBruteLoss(rand(1,5)*REM) - ..() - return /datum/chemical_reaction/surge name = "Surge" diff --git a/code/modules/reagents/newchem/food.dm b/code/modules/reagents/newchem/food.dm index 6dd18d307f7..a2f259242e8 100644 --- a/code/modules/reagents/newchem/food.dm +++ b/code/modules/reagents/newchem/food.dm @@ -175,15 +175,12 @@ datum/reagent/mugwort/on_mob_life(var/mob/living/M as mob) metabolization_rate = 0.2 overdose_threshold = 133 -datum/reagent/porktonium/overdose_process(var/mob/living/M as mob) - if(volume > 133) - if(prob(15)) - M.reagents.add_reagent("cholesterol", rand(1,3)) - if(prob(8)) - M.reagents.add_reagent("radium", 15) - M.reagents.add_reagent("cyanide", 10) - ..() - return +/datum/reagent/porktonium/overdose_process(var/mob/living/M as mob, severity) + if(prob(15)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + if(prob(8)) + M.reagents.add_reagent("radium", 15) + M.reagents.add_reagent("cyanide", 10) /datum/reagent/fungus name = "Space fungus" @@ -283,11 +280,10 @@ datum/reagent/cheese/reaction_turf(var/turf/T, var/volume) color = "#B2B139" overdose_threshold = 50 -/datum/reagent/fake_cheese/overdose_process(var/mob/living/M as mob) +/datum/reagent/fake_cheese/overdose_process(var/mob/living/M as mob, severity) if(prob(8)) to_chat(M, "You feel something squirming in your stomach. Your thoughts turn to cheese and you begin to sweat.") M.adjustToxLoss(rand(1,2)) - ..() /datum/reagent/weird_cheese name = "Weird cheese" @@ -442,7 +438,7 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume) ..() return -/datum/reagent/hydrogenated_soybeanoil/overdose_process(var/mob/living/M as mob) +/datum/reagent/hydrogenated_soybeanoil/overdose_process(var/mob/living/M as mob, severity) if(prob(33)) to_chat(M, "You feel horribly weak.") if(prob(10)) @@ -453,7 +449,6 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume) M.adjustOxyLoss(25) M.Stun(5) M.Paralyse(10) - ..() /datum/chemical_reaction/hydrogenated_soybeanoil name = "Partially hydrogenated space-soybean oil" diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index 90980c3a421..bc319a9b6bd 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -65,6 +65,7 @@ datum/reagent/salglu_solution description = "This saline and glucose solution can help stabilize critically injured patients and cleanse wounds." reagent_state = LIQUID color = "#C8A5DC" + penetrates_skin = 1 metabolization_rate = 0.15 datum/reagent/salglu_solution/on_mob_life(var/mob/living/M as mob) @@ -170,7 +171,7 @@ datum/reagent/omnizine overdose_threshold = 30 addiction_chance = 5 -datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob) +/datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss(-1*REM) M.adjustOxyLoss(-1*REM) @@ -181,13 +182,39 @@ datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/omnizine/overdose_process(var/mob/living/M as mob) - M.adjustToxLoss(3*REM) - M.adjustOxyLoss(3*REM) - M.adjustBruteLoss(3*REM) - M.adjustFireLoss(3*REM) - ..() - return +/datum/reagent/omnizine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) //lesser + M.stuttering += 1 + if(effect <= 1) + M.visible_message("[M] suddenly cluches their gut!") + M.emote("scream") + M.Stun(4) + M.Weaken(4) + else if(effect <= 3) + M.visible_message("[M] completely spaces out for a moment.") + M.confused += 15 + else if(effect <= 5) + M.visible_message("[M] stumbles and staggers.") + M.Dizzy(5) + M.Weaken(3) + else if(effect <= 7) + M.visible_message("[M] shakes uncontrollably.") + M.Jitter(30) + else if(severity == 2) // greater + if(effect <= 2) + M.visible_message("[M] suddenly cluches their gut!") + M.emote("scream") + M.Stun(7) + M.Weaken(7) + else if(effect <= 5) + M.visible_message("[M] jerks bolt upright, then collapses!") + M.Paralyse(5) + M.Weaken(4) + else if(effect <= 8) + M.visible_message("[M] stumbles and staggers.") + M.Dizzy(5) + M.Weaken(3) datum/reagent/calomel name = "Calomel" @@ -290,13 +317,6 @@ datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/sal_acid/overdose_process(var/mob/living/M as mob) - if(volume > 25) - if(prob(8)) - M.adjustToxLoss(rand(1,2)) - ..() - return - /datum/chemical_reaction/sal_acid name = "Salicyclic Acid" id = "sal_acid" @@ -361,17 +381,17 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob) mix_message = "The mixture rapidly turns into a dense pink liquid." mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' -datum/reagent/ephedrine +/datum/reagent/ephedrine name = "Ephedrine" id = "ephedrine" description = "Ephedrine is a plant-derived stimulant." reagent_state = LIQUID color = "#C8A5DC" metabolization_rate = 0.3 - overdose_threshold = 45 + overdose_threshold = 35 addiction_chance = 25 -datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) +/datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.drowsyness = max(0, M.drowsyness-5) M.AdjustParalysis(-1) @@ -389,12 +409,26 @@ datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/ephedrine/overdose_process(var/mob/living/M as mob) - if(prob(33)) - M.adjustToxLoss(1*REM) - M.losebreath++ - ..() - return +/datum/reagent/ephedrine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 1) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 3) + M.emote(pick("groan","moan")) + if(effect <= 8) + M.emote("collapse") + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 5) + M.visible_message("[M.name] staggers and drools, their eyes bloodshot!") + M.Dizzy(2) + M.Weaken(3) + if(effect <= 15) + M.emote("collapse") /datum/chemical_reaction/ephedrine name = "Ephedrine" @@ -441,7 +475,7 @@ datum/reagent/morphine description = "A strong but highly addictive opiate painkiller with sedative side effects." reagent_state = LIQUID color = "#C8A5DC" - overdose_threshold = 30 + overdose_threshold = 20 addiction_chance = 50 shock_reduction = 50 @@ -464,16 +498,6 @@ datum/reagent/morphine/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/morphine/overdose_process(var/mob/living/M as mob) - if(prob(33)) - var/obj/item/I = M.get_active_hand() - if(I) - M.drop_item() - M.Dizzy(1) - M.Jitter(1) - ..() - return - datum/reagent/oculine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom if(prob(80)) @@ -519,7 +543,7 @@ datum/reagent/atropine reagent_state = LIQUID color = "#000000" metabolization_rate = 0.2 - overdose_threshold = 35 + overdose_threshold = 25 datum/reagent/atropine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -541,14 +565,6 @@ datum/reagent/atropine/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/atropine/overdose_process(var/mob/living/M as mob) - if(prob(50)) - M.adjustToxLoss(2*REM) - M.Dizzy(1) - M.Jitter(1) - ..() - return - /datum/chemical_reaction/atropine name = "Atropine" id = "atropine" @@ -564,7 +580,7 @@ datum/reagent/epinephrine reagent_state = LIQUID color = "#96B1AE" metabolization_rate = 0.2 - overdose_threshold = 30 + overdose_threshold = 20 datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -591,13 +607,26 @@ datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/epinephrine/overdose_process(var/mob/living/M as mob) - if(prob(33)) - M.adjustStaminaLoss(5*REM) - M.adjustToxLoss(2*REM) - M.losebreath++ - ..() - return +/datum/reagent/epinephrine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if (severity == 1) + if(effect <= 1) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 3) + M.emote(pick("groan","moan")) + if(effect <= 8) + M.emote("collapse") + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 5) + M.visible_message("[M] staggers and drools, their eyes bloodshot!") + M.Dizzy(2) + M.Weaken(3) + if(effect <= 15) + M.emote("collapse") /datum/chemical_reaction/epinephrine name = "Epinephrine" @@ -812,13 +841,11 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob) M.adjustStaminaLoss(-5*REM) ..() -/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M) +/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M, severity) if(prob(33)) M.adjustStaminaLoss(2.5*REM) M.adjustToxLoss(1*REM) M.losebreath++ - ..() - return datum/reagent/insulin name = "Insulin" @@ -855,6 +882,7 @@ datum/reagent/teporone reagent_state = LIQUID color = "#D782E6" addiction_chance = 20 + overdose_threshold = 50 datum/reagent/teporone/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm index 97516f916c9..8f3fa6204d2 100644 --- a/code/modules/reagents/newchem/newchem_procs.dm +++ b/code/modules/reagents/newchem/newchem_procs.dm @@ -51,14 +51,15 @@ continue //If you got this far, that means we can process whatever reagent this iteration is for. Handle things normally from here. if(M && R) + R.on_mob_life(M) if(R.volume >= R.overdose_threshold && !R.overdosed && R.overdose_threshold > 0) R.overdosed = 1 R.overdose_start(M) if(R.volume < R.overdose_threshold && R.overdosed) R.overdosed = 0 if(R.overdosed) - R.overdose_process(M) - R.on_mob_life(M) + R.overdose_process(M, R.volume >= R.overdose_threshold*2 ? 2 : 1) + for(var/A in addiction_list) var/datum/reagent/R = A if(M && R) @@ -117,8 +118,11 @@ return // Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects -/datum/reagent/proc/overdose_process(var/mob/living/M as mob) - return +/datum/reagent/proc/overdose_process(var/mob/living/M as mob, severity) + var/effect = rand(1, 100) - severity + if (effect <= 8) + M.adjustToxLoss(severity) + return effect /datum/reagent/proc/overdose_start(var/mob/living/M as mob) return diff --git a/code/modules/reagents/newchem/toxins.dm b/code/modules/reagents/newchem/toxins.dm index b602e282b1f..e331f4d3565 100644 --- a/code/modules/reagents/newchem/toxins.dm +++ b/code/modules/reagents/newchem/toxins.dm @@ -55,23 +55,45 @@ ..() return -/datum/reagent/histamine/overdose_process(var/mob/living/M as mob) - if(prob(2)) - to_chat(M, "You feel mucus running down the back of your throat.") - M.adjustToxLoss(1) - M.jitteriness += 4 - M.emote("sneeze", "cough") - else if(prob(4)) - M.stuttering += rand(0,5) - if(prob(25)) - M.emote(pick("choke","gasp")) - M.adjustOxyLoss(5) - else if(prob(7)) - to_chat(M, "Your chest hurts!") - M.emote(pick("cough","gasp")) - M.adjustOxyLoss(3) - ..() - return +/datum/reagent/histamine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 2) + to_chat(M, "You feel mucus running down the back of your throat.") + M.adjustToxLoss(1) + M.Jitter(4) + M.emote(pick("sneeze", "cough")) + else if(effect <= 4) + M.stuttering += rand(0,5) + if(prob(25)) + M.emote(pick("choke","gasp")) + M.adjustOxyLoss(5) + else if(effect <= 7) + to_chat(M, "Your chest hurts!") + M.emote(pick("cough","gasp")) + M.adjustOxyLoss(3) + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] breaks out in hives!") + M.adjustBruteLoss(6) + else if(effect <= 4) + M.visible_message("[M] has a horrible coughing fit!") + M.Jitter(10) + M.stuttering += rand(0,5) + M.emote("cough") + if(prob(40)) + M.emote(pick("choke","gasp")) + M.adjustOxyLoss(6) + M.Weaken(8) + else if(effect <= 7) + to_chat(M, "Your heartbeat is pounding inside your head!") + M.playsound_local(M.loc, "sound/goonstation/effects/heartbeat.ogg", 50, 1) + M.emote("collapse") + M.adjustOxyLoss(8) + M.adjustToxLoss(3) + M.Weaken(3) + M.emote(pick("choke", "gasp")) + to_chat(M, "You feel like you're dying!") /datum/reagent/formaldehyde name = "Formaldehyde" @@ -130,8 +152,6 @@ M.jitteriness += 1000 spawn(rand(20, 100)) M.gib() - ..() - return /datum/reagent/neurotoxin2 name = "Neurotoxin" diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 2d85730193f..12e1a554edd 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -151,10 +151,8 @@ ..() return -/datum/reagent/ethanol/absinthe/overdose_process(mob/living/M) +/datum/reagent/ethanol/absinthe/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) - ..() - return /datum/reagent/ethanol/rum name = "Rum" @@ -169,10 +167,8 @@ M.dizziness +=5 return -/datum/reagent/ethanol/rum/overdose_process(mob/living/M) +/datum/reagent/ethanol/rum/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) - ..() - return /datum/reagent/ethanol/mojito name = "Mojito" diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm index 9daf9cb9ec1..45e0e2e8ac2 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm @@ -201,13 +201,10 @@ ..() return -/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob) +/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob, severity) if(volume > 45) M.Jitter(5) - ..() - return - /datum/reagent/drink/coffee/icecoffee name = "Iced Coffee" id = "icecoffee" diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm index 05a3fad7808..4c284d7d7cc 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_food.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm @@ -167,13 +167,11 @@ description = "Sodium chloride, common table salt." reagent_state = SOLID color = "#B1B0B0" + overdose_threshold = 100 -/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob) - if(volume > 100) - if(prob(70)) - M.adjustBrainLoss(1) - if(prob(8)) - M.adjustToxLoss(rand(1,2)) +/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob, severity) + if(prob(70)) + M.adjustBrainLoss(1) ..() return @@ -454,11 +452,9 @@ M.emote("collapse") ..() -/datum/reagent/sugar/overdose_process(var/mob/living/M as mob) - if(volume > 200) - M.Paralyse(3) - M.Weaken(4) - if(prob(8)) - M.adjustToxLoss(1) - ..() - return +/datum/reagent/sugar/overdose_process(var/mob/living/M as mob, severity) + M.Paralyse(3 * severity) + M.Weaken(4 * severity) + if(prob(8)) + M.adjustToxLoss(severity) + diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 64e3b00936d..0a2fa0396bf 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -40,6 +40,7 @@ description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." reagent_state = LIQUID color = "#FA46FA" + overdose_threshold = 40 /datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -53,6 +54,27 @@ ..() return +/datum/reagent/synaptizine/overdose_process(var/mob/living/M as mob, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 1) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 3) + M.emote(pick("groan","moan")) + if(effect <= 8) + M.adjustToxLoss(1) + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 5) + M.visible_message("[M] staggers and drools, their eyes bloodshot!") + M.Dizzy(8) + M.Weaken(4) + if(effect <= 15) + M.adjustToxLoss(1) + /datum/reagent/mitocholide name = "Mitocholide" id = "mitocholide" @@ -114,12 +136,10 @@ ..() return -/datum/reagent/rezadone/overdose_process(mob/living/M) +/datum/reagent/rezadone/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) M.Dizzy(5) M.Jitter(5) - ..() - return /datum/reagent/spaceacillin name = "Spaceacillin" diff --git a/paradise.dme b/paradise.dme index 9077d8b86f4..cab6d3172c7 100644 --- a/paradise.dme +++ b/paradise.dme @@ -213,6 +213,7 @@ #include "code\datums\diseases\anxiety.dm" #include "code\datums\diseases\appendicitis.dm" #include "code\datums\diseases\beesease.dm" +#include "code\datums\diseases\berserker.dm" #include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\cold.dm" #include "code\datums\diseases\cold9.dm" diff --git a/sound/goonstation/effects/heartbeat.ogg b/sound/goonstation/effects/heartbeat.ogg new file mode 100644 index 00000000000..a98aec8037a Binary files /dev/null and b/sound/goonstation/effects/heartbeat.ogg differ