diff --git a/code/datums/diseases/critical.dm b/code/datums/diseases/critical.dm
index a899b92b44a..a67b5e5d0d6 100644
--- a/code/datums/diseases/critical.dm
+++ b/code/datums/diseases/critical.dm
@@ -25,7 +25,7 @@
max_stages = 3
spread_flags = SPECIAL
cure_text = "Saline-Glucose Solution"
- cures = list("salglu_solution", "syndicate_nanites")
+ cures = list("salglu_solution", "syndicate_nanites", "stimulative_agent")
cure_chance = 10
viable_mobtypes = list(/mob/living/carbon/human)
stage_prob = 6
@@ -86,7 +86,7 @@
max_stages = 3
spread_flags = SPECIAL
cure_text = "Atropine, Epinephrine, or Heparin"
- cures = list("atropine", "epinephrine", "heparin", "syndicate_nanites")
+ cures = list("atropine", "epinephrine", "heparin", "syndicate_nanites", "stimulative_agent")
cure_chance = 10
needs_all_cures = FALSE
viable_mobtypes = list(/mob/living/carbon/human)
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index ba53a952fde..961bd8e4cb6 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -227,6 +227,12 @@
. = ..()
STOP_PROCESSING(SSfastprocess, src)
START_PROCESSING(SSprocessing, src) //this lasts 20 minutes, so SSfastprocess isn't needed.
+ if(!ishuman(new_owner))
+ return .
+ var/mob/living/carbon/human/H = new_owner
+ if(H.physiology.melee_bonus < 0)
+ H.physiology.melee_bonus = min(H.physiology.melee_bonus + 1, 0)
+ to_chat(H, "You feel stronger!")
/datum/status_effect/exercised/Destroy()
. = ..()
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index d01ef1837ac..f56a7e8d3b2 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -243,12 +243,12 @@
temperature_reagents(M.bodytemperature - 30)
M.absorb_blood()
- for(var/thing in addiction_threshold_accumulated)
- if(has_reagent(thing))
+ for(var/datum/reagent/R as anything in addiction_threshold_accumulated)
+ if(has_reagent(initial(R.id)))
continue // if we have the reagent in our system, then don't deplete the addiction threshold
- addiction_threshold_accumulated[thing] -= 0.01 // Otherwise very slowly deplete the buildup
- if(addiction_threshold_accumulated[thing] <= 0)
- addiction_threshold_accumulated -= thing
+ addiction_threshold_accumulated[R] -= initial(R.addiction_decay_rate) // Otherwise very slowly deplete the buildup (defaults to 0.01)
+ if(addiction_threshold_accumulated[R] <= 0)
+ addiction_threshold_accumulated -= R
// a bitfield filled in by each reagent's `on_mob_life` to find out which states to update
var/update_flags = STATUS_UPDATE_NONE
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index ba8d4637091..ac4d217328a 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -32,6 +32,8 @@
var/drink_desc = "You can't really tell what this is."
var/taste_mult = 1 //how easy it is to taste - the more the easier
var/taste_description = "metaphorical salt"
+ /// how quickly the addiction threshold var decays
+ var/addiction_decay_rate = 0.01
/datum/reagent/Destroy()
. = ..()
@@ -89,8 +91,8 @@
/datum/reagent/proc/handle_addiction(mob/living/M, consumption_rate)
if(addiction_chance && !is_type_in_list(src, M.reagents.addiction_list))
- M.reagents.addiction_threshold_accumulated[id] += consumption_rate
- var/current_threshold_accumulated = M.reagents.addiction_threshold_accumulated[id]
+ M.reagents.addiction_threshold_accumulated[type] += consumption_rate
+ var/current_threshold_accumulated = M.reagents.addiction_threshold_accumulated[type]
if(addiction_threshold < current_threshold_accumulated && prob(addiction_chance) && prob(addiction_chance_additional))
to_chat(M, "You suddenly feel invigorated and guilty...")
diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm
index 3ec65865b19..3531541c8e4 100644
--- a/code/modules/reagents/chemistry/reagents/drinks.dm
+++ b/code/modules/reagents/chemistry/reagents/drinks.dm
@@ -298,11 +298,6 @@
var/update_flags = STATUS_UPDATE_NONE
if(holder.has_reagent("frostoil"))
holder.remove_reagent("frostoil", 5)
- if(prob(50))
- M.AdjustParalysis(-2 SECONDS)
- M.AdjustStunned(-2 SECONDS)
- M.AdjustWeakened(-2 SECONDS)
- M.AdjustKnockDown(-2 SECONDS)
return ..() | update_flags
/datum/reagent/consumable/drink/coffee/overdose_process(mob/living/M, severity)
diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm
index 2ac4685113d..a84a448a829 100644
--- a/code/modules/reagents/chemistry/reagents/drugs.dm
+++ b/code/modules/reagents/chemistry/reagents/drugs.dm
@@ -1,3 +1,10 @@
+/*
+* increases the probability of bad effects from stimulantive chems based on the duration of exposure (in volume)
+* at 10 volume the mod is 1
+* at 20 volume the mod is 2, and so on
+*/
+#define DRAWBACK_CHANCE_MODIFIER(duration) 0.1 * duration
+
/datum/reagent/lithium
name = "Lithium"
id = "lithium"
@@ -85,7 +92,7 @@
/datum/reagent/nicotine
name = "Nicotine"
id = "nicotine"
- description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage."
+ description = "If overdosed it will deal toxin and oxygen damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 35
@@ -100,12 +107,6 @@
var/smoke_message = pick("You feel relaxed.", "You feel calmed.", "You feel less stressed.", "You feel more placid.", "You feel more undivided.")
if(prob(5))
to_chat(M, "[smoke_message]")
- if(prob(50))
- M.AdjustParalysis(-2 SECONDS)
- M.AdjustStunned(-2 SECONDS)
- M.AdjustWeakened(-2 SECONDS)
- M.AdjustKnockDown(-2 SECONDS)
- update_flags |= M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/nicotine/overdose_process(mob/living/M, severity)
@@ -151,37 +152,41 @@
update_flags |= M.adjustOxyLoss(20, FALSE)
return list(effect, update_flags)
+// basic antistun chem, removes stuns and stamina, mild downsides
/datum/reagent/crank
name = "Crank"
id = "crank"
- description = "Reduces stun times by about 200%. If overdosed or addicted it will deal significant Toxin, Brute and Brain damage."
+ description = "Reduces stun times and improves stamina regeneration. If overdosed or addicted it will deal significant Toxin, Brute and Brain damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
+ heart_rate_increase = TRUE
overdose_threshold = 20
addiction_chance = 10
addiction_threshold = 5
+ addiction_decay_rate = 0.2 // half the metabolism rate
taste_description = "bitterness"
/datum/reagent/crank/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
+ var/recent_consumption = holder.addiction_threshold_accumulated[type]
M.AdjustParalysis(-4 SECONDS)
M.AdjustStunned(-4 SECONDS)
M.AdjustWeakened(-4 SECONDS)
M.AdjustKnockDown(-4 SECONDS)
+ update_flags |= M.adjustStaminaLoss(-25, FALSE)
if(prob(15))
M.emote(pick("twitch", "twitch_s", "grumble", "laugh"))
if(prob(8))
- to_chat(M, "You feel great!")
- M.reagents.add_reagent("methamphetamine", rand(1,2))
M.emote(pick("laugh", "giggle"))
- if(prob(6))
- to_chat(M, "You feel warm.")
- M.bodytemperature += rand(1,10)
+ if(prob(5 * DRAWBACK_CHANCE_MODIFIER(recent_consumption)))
+ to_chat(M, "You feel warm.") // fever, gets worse with volume
+ M.bodytemperature += 30 * recent_consumption
+ M.Confused(2 SECONDS * recent_consumption)
+
if(prob(4))
to_chat(M, "You feel kinda awful!")
- update_flags |= M.adjustToxLoss(1, FALSE)
+ M.LoseBreath(5 SECONDS)
M.AdjustJitter(60 SECONDS)
- M.emote(pick("groan", "moan"))
return ..() | update_flags
/datum/reagent/crank/overdose_process(mob/living/M, severity)
@@ -196,24 +201,24 @@
M.emote("scream")
else if(effect <= 4)
M.visible_message("[M] is all sweaty!")
- M.bodytemperature += rand(5,30)
- update_flags |= M.adjustBrainLoss(1, FALSE)
- update_flags |= M.adjustToxLoss(1, FALSE)
- M.Stun(4 SECONDS, FALSE)
+ M.bodytemperature += 150
+ update_flags |= M.adjustBrainLoss(5, FALSE)
+ update_flags |= M.adjustToxLoss(5, FALSE)
+ M.Stun(1 SECONDS)
else if(effect <= 7)
M.Jitter(60 SECONDS)
M.emote("grumble")
else if(severity == 2)
if(effect <= 2)
M.visible_message("[M] is sweating like a pig!")
- M.bodytemperature += rand(20,100)
- update_flags |= M.adjustToxLoss(5, FALSE)
- M.Stun(6 SECONDS, FALSE)
+ M.bodytemperature += 200
+ update_flags |= M.adjustToxLoss(20, FALSE)
+ M.Stun(2 SECONDS)
else if(effect <= 4)
- M.visible_message("[M] starts tweaking the hell out!")
+ M.visible_message("[M] starts twitching the hell out!")
M.Jitter(200 SECONDS)
update_flags |= M.adjustToxLoss(2, FALSE)
- update_flags |= M.adjustBrainLoss(8, FALSE)
+ update_flags |= M.adjustBrainLoss(20, FALSE)
M.Weaken(6 SECONDS)
M.AdjustConfused(50 SECONDS)
M.emote("scream")
@@ -226,6 +231,48 @@
M.emote("twitch_s")
return list(effect, update_flags)
+// a makeshift stimulant, very fast metabolism rate, not very good
+/datum/reagent/pump_up
+ name = "Pump Up"
+ id = "pump_up"
+ description = "An awful smelling mixture which acts as a makeshift stimulant"
+ reagent_state = SOLID
+ color = COLOR_HALF_TRANSPARENT_BLACK
+ taste_description = "poorly mixed coffee"
+ metabolization_rate = 1
+ overdose_threshold = 20
+ addiction_chance = 10
+ addiction_threshold = 5
+
+/datum/reagent/pump_up/on_mob_life(mob/living/M)
+ var/update_flags = STATUS_UPDATE_NONE
+ update_flags |= M.adjustStaminaLoss(-15) // two cycles to get out of stam crit ~4 seconds
+ M.AdjustParalysis(-2 SECONDS)
+ M.AdjustStunned(-2 SECONDS)
+ M.AdjustWeakened(-2 SECONDS)
+ M.AdjustKnockDown(-2 SECONDS)
+ return ..() | update_flags
+
+/datum/reagent/pump_up/overdose_process(mob/living/M, severity)
+ var/list/overdose_info = ..()
+ var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
+ var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
+ switch(severity)
+ if(1)
+ if(prob(20))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.vomit(lost_nutrition = 0, blood = TRUE, stun = FALSE)
+ M.Weaken(1 SECONDS) // change to knockdown after crawling
+ else
+ update_flags |= M.adjustStaminaLoss(10, FALSE)
+ if(2)
+ M.Drowsy(10 SECONDS)
+ M.drop_r_hand()
+ M.drop_l_hand()
+ to_chat(M, "You can barely keep your eyes open!")
+ return list(effect, update_flags)
+
/datum/reagent/krokodil
name = "Krokodil"
id = "krokodil"
@@ -299,39 +346,48 @@
M.bodytemperature -= 70
return list(effect, update_flags)
+// makes you faster, increases the duration of stuns, removes a LOT of stamina, makes you skinny, and does brain damage
/datum/reagent/methamphetamine
name = "Methamphetamine"
id = "methamphetamine"
- description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
+ description = "Increases stun times, speeds the user up, and allows the user to quickly recover stamina while dealing a large amount of brain damage and making the user waste away. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 20
addiction_chance = 10
addiction_threshold = 5
metabolization_rate = 0.6
+ addiction_decay_rate = 0.1 // very low, to prevent people from abusing the massive speed boost for too long. forces them to take long downtimes to not die from brain damage.
heart_rate_increase = 1
taste_description = "speed"
+ /// modifier to the stun time of the mob taking the drug
+ var/tenacity = 1.5
+
+/datum/reagent/methamphetamine/on_mob_add(mob/living/L)
+ ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.physiology.stun_mod *= tenacity // takes 1.5 times longer to get up as they are off their head
/datum/reagent/methamphetamine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
+ var/recent_consumption = holder.addiction_threshold_accumulated[type]
if(prob(5))
M.emote(pick("twitch_s","blink_r","shiver"))
- if(current_cycle >= 25)
- M.AdjustJitter(10 SECONDS)
- M.AdjustDrowsy(-20 SECONDS)
- M.AdjustParalysis(-5 SECONDS)
- M.AdjustStunned(-5 SECONDS)
- M.AdjustWeakened(-5 SECONDS)
- M.AdjustKnockDown(-5 SECONDS)
- update_flags |= M.adjustStaminaLoss(-2, FALSE)
+ M.AdjustJitter(10 SECONDS, bound_upper = 100 SECONDS)
+ update_flags |= M.adjustStaminaLoss(-40, FALSE)
M.SetSleeping(0)
- ADD_TRAIT(M, TRAIT_GOTTAGOFAST, id)
- if(prob(50))
- update_flags |= M.adjustBrainLoss(1, FALSE)
+ M.SetDrowsy(0)
+ if(prob(10 * DRAWBACK_CHANCE_MODIFIER(recent_consumption)))
+ update_flags |= M.adjustBrainLoss(10, FALSE)
+ M.adjust_nutrition(-25)
return ..() | update_flags
/datum/reagent/methamphetamine/on_mob_delete(mob/living/M)
REMOVE_TRAIT(M, TRAIT_GOTTAGOFAST, id)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.physiology.stun_mod /= tenacity
..()
/datum/reagent/methamphetamine/overdose_process(mob/living/M, severity)
@@ -362,6 +418,7 @@
M.emote("laugh")
return list(effect, update_flags)
+// makes you next to immune to stuns and stamina, but will demolish all of your organs, and has a tiny chance of permanently reducing your strength
/datum/reagent/bath_salts
name = "Bath Salts"
id = "bath_salts"
@@ -372,32 +429,38 @@
addiction_chance = 15
addiction_threshold = 5
metabolization_rate = 0.6
+ addiction_decay_rate = 0.2
taste_description = "WAAAAGH"
+ /// timer until we can start rolling for reducing a mobs strength again.
+ var/next_remove_strength
+ var/bonus_damage = 2
+
+/datum/reagent/bath_salts/on_mob_add(mob/living/L)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.physiology.melee_bonus += bonus_damage // rage mode
/datum/reagent/bath_salts/on_mob_life(mob/living/M)
- var/check = rand(0,100)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M))
var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/head/head_organ = H.get_organ("head")
- if(check < 8 && head_organ.h_style != "Very Long Beard")
- head_organ.h_style = "Very Long Hair"
- head_organ.f_style = "Very Long Beard"
- H.update_hair()
- H.update_fhair()
- H.visible_message("[H] has a wild look in [H.p_their()] eyes!")
- if(check < 60)
- M.SetParalysis(0)
- M.SetStunned(0)
- M.SetWeakened(0)
- M.SetKnockDown(0)
+ var/recent_consumption = holder.addiction_threshold_accumulated[type]
+ for(var/obj/item/organ/internal/I in H.internal_organs)
+ I.receive_damage(0.8, TRUE) //double the rate of mitocholide
+ if(world.time > next_remove_strength && recent_consumption > 5 && prob(0.1 * DRAWBACK_CHANCE_MODIFIER(recent_consumption))) // tiny chance to make their muscles waste away, cannot happen instantly. I don't want people to get *that* unlucky
+ H.physiology.melee_bonus--
+ to_chat(H, "You feel your muscles wasting away!")
+ next_remove_strength = world.time + 100 SECONDS
+ M.SetParalysis(0)
+ M.SetStunned(0)
+ M.SetWeakened(0)
+ M.SetKnockDown(0)
+ M.Druggy(30 SECONDS)
+ update_flags |= M.setStaminaLoss(0, FALSE)
+ var/check = rand(0, 100)
if(check < 30)
M.emote(pick("twitch", "twitch_s", "scream", "drool", "grumble", "mumble"))
- M.Druggy(30 SECONDS)
- if(check < 20)
- M.AdjustConfused(20 SECONDS)
if(check < 8)
- M.reagents.add_reagent(pick("methamphetamine", "crank", "neurotoxin"), rand(1,5))
M.visible_message("[M] scratches at something under [M.p_their()] skin!")
update_flags |= M.adjustBruteLoss(5, FALSE)
else if(check < 16)
@@ -408,14 +471,17 @@
to_chat(M, "THEY'RE GONNA GET YOU!")
return ..() | update_flags
+/datum/reagent/bath_salts/on_mob_delete(mob/living/M)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.physiology.melee_bonus -= bonus_damage // ragen't mode
+
/datum/reagent/bath_salts/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
if(method == REAGENT_INGEST)
to_chat(M, "You feel FUCKED UP!!!!!!")
SEND_SOUND(M, sound('sound/effects/singlebeat.ogg'))
- M.emote("faint")
- M.apply_effect(5, IRRADIATE)
+ M.EyeBlind(2 SECONDS)
M.adjustToxLoss(5)
- M.adjustBrainLoss(10)
else
to_chat(M, "You feel a bit more salty than usual.")
@@ -483,6 +549,7 @@
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
+//makes you resistant to stuns and stamina damage, heals a small amount of stamina damage, causes a large amount of toxin damage, on removal forces you to throw up blood.
/datum/reagent/aranesp
name = "Aranesp"
id = "aranesp"
@@ -490,24 +557,43 @@
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
taste_description = "bitterness"
+ addiction_chance = 5
+ addiction_threshold = 5
+ addiction_decay_rate = 0.2
+ /// how much do we edit the stun and stamina mods? lower is more resistance
+ var/tenacity = 0.7
+
+/datum/reagent/aranesp/on_mob_add(mob/living/L)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.physiology.stun_mod *= tenacity
+ H.physiology.stamina_mod *= tenacity
/datum/reagent/aranesp/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- update_flags |= M.adjustStaminaLoss(-40, FALSE)
- if(prob(90))
- update_flags |= M.adjustToxLoss(1, FALSE)
+ var/recent_consumption = holder.addiction_threshold_accumulated[type]
+
+ // small amount of stam regen, meaning that if you can buy time between hits
+ // you can take 6 disabler shots (30 base * 0.7 stam mod = 21 stam damage each, 5 shots to 105 which is stamina crit. but you can heal 6 in 3 cycles) before going down
+ update_flags |= M.adjustStaminaLoss(-2, FALSE)
+ if(prob(10 * DRAWBACK_CHANCE_MODIFIER(recent_consumption)))
+ update_flags |= M.adjustToxLoss(4, FALSE)
if(prob(5))
M.emote(pick("twitch", "shake", "tremble","quiver", "twitch_s"))
- var/high_message = pick("really buff", "on top of the world","like you're made of steel", "energized", "invigorated", "full of energy")
if(prob(8))
- to_chat(M, "[high_message]!")
- if(prob(5))
- to_chat(M, "You cannot breathe!")
- update_flags |= M.adjustOxyLoss(15, FALSE)
- M.Stun(2 SECONDS)
- M.AdjustLoseBreath(2 SECONDS)
+ var/high_message = pick("really buff", "on top of the world","like you're made of steel", "energized", "invigorated", "full of energy")
+ to_chat(M, "You feel [high_message]!")
return ..() | update_flags
+/datum/reagent/aranesp/on_mob_delete(mob/living/M)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.physiology.stun_mod /= tenacity
+ H.physiology.stamina_mod /= tenacity
+ H.vomit(blood = TRUE, stun = FALSE) // just a visual, very gritty. don't do drugs kids
+ H.LoseBreath(10 SECONDS) // procs 5 times, mostly a visual thing. damage could stack to cause a slowdown.
+ H.Confused(10 SECONDS)
+
/datum/reagent/thc
name = "Tetrahydrocannabinol"
id = "thc"
@@ -588,13 +674,6 @@
if(current_cycle == 50)
M.SpinAnimation(speed = 4, loops = -1, parallel = FALSE)
- M.AdjustDrowsy(-12 SECONDS)
- M.AdjustParalysis(-3 SECONDS)
- M.AdjustStunned(-3 SECONDS)
- M.AdjustWeakened(-3 SECONDS)
- M.AdjustKnockDown(-3 SECONDS)
- update_flags |= M.adjustStaminaLoss(-1.5, FALSE)
- M.SetSleeping(0)
return ..() | update_flags
/datum/reagent/fliptonium/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
@@ -675,30 +754,41 @@
addiction_chance = 10
addiction_threshold = 5
metabolization_rate = 0.6
+ addiction_decay_rate = 0.1 //very low to force them to take time off of meth
taste_description = "wiper fluid"
+ var/tenacity = 1.5 // higher is worse
+
+/datum/reagent/lube/ultra/on_mob_add(mob/living/L)
+ ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.physiology.stun_mod *= tenacity
/datum/reagent/lube/ultra/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
+ var/recent_consumption = holder.addiction_threshold_accumulated[type]
+ M.AdjustJitter(10 SECONDS)
+ update_flags |= M.adjustStaminaLoss(-40, FALSE)
+ M.SetSleeping(0)
+ M.SetDrowsy(0)
+ if(prob(12 * DRAWBACK_CHANCE_MODIFIER(recent_consumption))) // slightly higher prob than meth due to the no nutrition thing
+ update_flags |= M.adjustBrainLoss(10, FALSE)
+
var/high_message = pick("You feel your servos whir!", "You feel like you need to go faster.", "You feel like you were just overclocked!")
- if(prob(1))
- if(prob(1))
- high_message = "0100011101001111010101000101010001000001010001110100111101000110010000010101001101010100!"
+ if(prob(10))
+ high_message = "0100011101001111010101000101010001000001010001110100111101000110010000010101001101010100!"
if(prob(5))
to_chat(M, "[high_message]")
- M.AdjustParalysis(-4 SECONDS)
- M.AdjustStunned(-4 SECONDS)
- M.AdjustWeakened(-4 SECONDS)
- M.AdjustKnockDown(-4 SECONDS)
- update_flags |= M.adjustStaminaLoss(-2, FALSE)
- ADD_TRAIT(M, TRAIT_GOTTAGOFAST, id)
- M.Jitter(6 SECONDS)
- update_flags |= M.adjustBrainLoss(0.5, FALSE)
if(prob(5))
M.emote(pick("twitch", "shiver"))
return ..() | update_flags
+
/datum/reagent/lube/ultra/on_mob_delete(mob/living/M)
REMOVE_TRAIT(M, TRAIT_GOTTAGOFAST, id)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.physiology.stun_mod /= tenacity
..()
/datum/reagent/lube/ultra/overdose_process(mob/living/M, severity)
@@ -712,12 +802,11 @@
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
- if(prob(50))
- update_flags |= M.adjustFireLoss(10, FALSE)
- update_flags |= M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1), FALSE)
+ update_flags |= M.adjustFireLoss(5, FALSE)
+ update_flags |= M.adjustBrainLoss(3, FALSE)
return list(effect, update_flags)
-//Surge: Krokodil
+//Surge: crank
/datum/reagent/surge
name = "Surge"
id = "surge"
@@ -729,18 +818,29 @@
overdose_threshold = 20
addiction_chance = 10
addiction_threshold = 5
+ addiction_decay_rate = 0.2
taste_description = "silicon"
/datum/reagent/surge/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
+ var/recent_consumption = holder.addiction_threshold_accumulated[type]
M.Druggy(30 SECONDS)
- var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
- if(prob(1))
- if(prob(1))
- high_message = "01010100010100100100000101001110010100110100001101000101010011100100010001000101010011100100001101000101."
+ M.AdjustParalysis(-4 SECONDS)
+ M.AdjustStunned(-4 SECONDS)
+ M.AdjustWeakened(-4 SECONDS)
+ M.AdjustKnockDown(-4 SECONDS)
+ update_flags |= M.adjustStaminaLoss(-25, FALSE)
if(prob(5))
+ var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
+ if(prob(10))
+ high_message = "0100011101001111010101000101010001000001010001110100111101000110010000010101001101010100!"
to_chat(M, "[high_message]")
+ if(prob(5 * DRAWBACK_CHANCE_MODIFIER(recent_consumption)))
+ to_chat(M, "Your circuits overheat!") // synth fever
+ M.bodytemperature += 30 * recent_consumption
+ M.Confused(2 SECONDS * recent_consumption)
+
return ..() | update_flags
/datum/reagent/surge/overdose_process(mob/living/M, severity)
@@ -762,3 +862,5 @@
update_flags |= M.adjustFireLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return list(0, update_flags)
+
+#undef DRAWBACK_CHANCE_MODIFIER
diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm
index f404f33494a..285be0eacc0 100644
--- a/code/modules/reagents/chemistry/reagents/food.dm
+++ b/code/modules/reagents/chemistry/reagents/food.dm
@@ -104,11 +104,6 @@
M.AdjustDrowsy(-10 SECONDS)
if(current_cycle >= 90)
M.AdjustJitter(4 SECONDS)
- if(prob(50))
- M.AdjustParalysis(-2 SECONDS)
- M.AdjustStunned(-2 SECONDS)
- M.AdjustWeakened(-2 SECONDS)
- M.AdjustKnockDown(-2 SECONDS)
if(prob(4))
M.reagents.add_reagent("epinephrine", 1.2)
return ..() | update_flags
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index 9612d6e5c85..27b6806d315 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -45,7 +45,7 @@
/datum/reagent/medicine/synaptizine
name = "Synaptizine"
id = "synaptizine"
- description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis."
+ description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as confusion."
reagent_state = LIQUID
color = "#FA46FA"
overdose_threshold = 40
@@ -55,10 +55,8 @@
/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-10 SECONDS)
- M.AdjustParalysis(-2 SECONDS)
- M.AdjustStunned(-2 SECONDS)
- M.AdjustWeakened(-2 SECONDS)
- M.AdjustKnockDown(-2 SECONDS)
+ M.AdjustConfused(-10 SECONDS)
+ M.AdjustDizzy(-10 SECONDS)
M.SetSleeping(0)
if(prob(50))
update_flags |= M.adjustBrainLoss(-1, FALSE)
@@ -529,6 +527,7 @@
harmless = FALSE
taste_description = "stimulation"
+//super weak antistun chem, barely any downside
/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-10 SECONDS)
@@ -693,13 +692,6 @@
/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-10 SECONDS)
- if(prob(20))
- M.AdjustParalysis(-2 SECONDS)
- if(prob(20))
- M.AdjustStunned(-2 SECONDS)
- if(prob(20))
- M.AdjustWeakened(-2 SECONDS)
- M.AdjustKnockDown(-2 SECONDS)
if(prob(5))
M.SetSleeping(0)
if(prob(5))
@@ -901,6 +893,7 @@
M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE
..()
+//the highest end antistun chem, removes stun and stamina rapidly.
/datum/reagent/medicine/stimulative_agent
name = "Stimulative Agent"
id = "stimulative_agent"
@@ -911,19 +904,16 @@
harmless = FALSE
can_synth = FALSE
+/datum/reagent/medicine/stimulative_agent/on_mob_add(mob/living/L)
+ ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
+
/datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- ADD_TRAIT(M, TRAIT_GOTTAGOFAST, id)
- if(M.health < 50 && M.health > 0)
- update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
M.AdjustParalysis(-6 SECONDS)
M.AdjustStunned(-6 SECONDS)
M.AdjustWeakened(-6 SECONDS)
M.AdjustKnockDown(-6 SECONDS)
- update_flags |= M.adjustStaminaLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
+ update_flags |= M.adjustStaminaLoss(-20*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/stimulative_agent/on_mob_delete(mob/living/M)
@@ -1125,11 +1115,7 @@
/datum/reagent/medicine/degreaser/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
- if(prob(50)) //Same effects as coffee, to help purge ill effects like paralysis
- M.AdjustParalysis(-2 SECONDS)
- M.AdjustStunned(-2 SECONDS)
- M.AdjustWeakened(-2 SECONDS)
- M.AdjustKnockDown(-2 SECONDS)
+ if(prob(50))
M.AdjustConfused(-10 SECONDS)
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
@@ -1223,7 +1209,6 @@
update_flags |= M.adjustOxyLoss(-0.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(-0.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustCloneLoss(-0.1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustStaminaLoss(-0.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBrainLoss(1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
else
update_flags |= M.adjustBruteLoss(-5 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
@@ -1231,7 +1216,6 @@
update_flags |= M.adjustOxyLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustCloneLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustStaminaLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
M.AdjustJitter(6 SECONDS, 0, 60 SECONDS)
update_flags |= M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER, FALSE) //See above
M.AdjustDruggy(10 SECONDS, 0, 15 SECONDS)
diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm
index 827779c4578..fc5cb501adf 100644
--- a/code/modules/reagents/chemistry/recipes/drugs.dm
+++ b/code/modules/reagents/chemistry/recipes/drugs.dm
@@ -50,6 +50,14 @@
C.reagents.add_reagent("toxin", 10)
C.reagents.add_reagent("neurotoxin2", 20)
+/datum/chemical_reaction/pump_up
+ name = "pump up"
+ id = "pump_up"
+ result = "pump_up"
+ required_reagents = list("epinephrine" = 1, "coffee" = 2, "nicotine" = 1)
+ result_amount = 4
+ mix_message = "The mixture congeals into a black paste"
+
/datum/chemical_reaction/bath_salts
name = "bath_salts"
id = "bath_salts"