diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_supercharge.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_supercharge.dm
index 0b73c109ec7..b15366fe82c 100644
--- a/code/game/objects/items/weapons/bio_chips/bio_chip_supercharge.dm
+++ b/code/game/objects/items/weapons/bio_chips/bio_chip_supercharge.dm
@@ -18,9 +18,9 @@
imp_in.stand_up(TRUE)
SEND_SIGNAL(imp_in, COMSIG_LIVING_CLEAR_STUNS)
+ imp_in.reagents.add_reagent("recal", 10)
imp_in.reagents.add_reagent("surge_plus", 10)
- imp_in.reagents.add_reagent("liquid_solder", 10)
- imp_in.reagents.add_reagent("combatlube", 10)
+ imp_in.reagents.add_reagent("synthetic_omnizine_no_addiction", 10)
if(!uses)
qdel(src)
diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm
index 1afeb17cf6a..21ac9b85aaa 100644
--- a/code/modules/reagents/chemistry/reagents/drugs.dm
+++ b/code/modules/reagents/chemistry/reagents/drugs.dm
@@ -1254,103 +1254,6 @@
update_flags |= M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return list(0, update_flags)
-
-//surge+, used in supercharge implants
-/datum/reagent/surge_plus
- name = "Surge Plus"
- id = "surge_plus"
- description = "A superconducting gel that overloads processors, causing an effect reportedly similar to benzodiazepines in synthetic units."
- reagent_state = LIQUID
- color = "#28b581"
-
- process_flags = SYNTHETIC
- overdose_threshold = 30
- addiction_chance = 1
- addiction_chance_additional = 20
- addiction_threshold = 5
- addiction_decay_rate = 0.2
- taste_description = "silicon"
-
-/datum/reagent/surge_plus/on_mob_life(mob/living/M)
- var/update_flags = STATUS_UPDATE_NONE
- M.AdjustParalysis(-8 SECONDS)
- M.AdjustStunned(-8 SECONDS)
- M.AdjustWeakened(-8 SECONDS)
- M.AdjustKnockDown(-8 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]")
-
- return ..() | update_flags
-
-/datum/reagent/surge_plus/overdose_process(mob/living/M, severity)
- var/update_flags = STATUS_UPDATE_NONE
- var/recent_consumption = holder.addiction_threshold_accumulated[type]
- M.Jitter(40 SECONDS)
- M.Stuttering(10 SECONDS)
- if(prob(5 * DRAWBACK_CHANCE_MODIFIER(recent_consumption)))
- to_chat(M, "Your circuits overheat!") // synth fever
- M.bodytemperature += 30 * DRAWBACK_CHANCE_MODIFIER(recent_consumption * 2)
- M.Confused(1 SECONDS * DRAWBACK_CHANCE_MODIFIER(recent_consumption * 2))
- if(prob(10))
- to_chat(M, "You experience a violent electrical discharge!")
- playsound(get_turf(M), 'sound/effects/eleczap.ogg', 75, TRUE)
- var/icon/I = new('icons/obj/zap.dmi', "lightningend")
- I.Turn(-135)
- var/obj/effect/overlay/beam/B = new(get_turf(M))
- B.pixel_x = rand(-20, 0)
- B.pixel_y = rand(-20, 0)
- B.icon = I
- 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)
-
-//Servo Lube, supercharge
-/datum/reagent/lube/combat
- name = "Combat-Lube"
- id = "combatlube"
- description = "Combat-Lube is a refined and enhanced lubricant which induces effect stronger than Methamphetamine in synthetic users by drastically reducing internal friction and increasing cooling capabilities."
- process_flags = SYNTHETIC
- overdose_threshold = 30
- addiction_chance = 1
- addiction_chance_additional = 20
-
-/datum/reagent/lube/combat/on_mob_add(mob/living/L)
- ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
-
-/datum/reagent/lube/combat/on_mob_life(mob/living/M)
- M.SetSleeping(0)
- M.SetDrowsy(0)
-
- 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(10))
- high_message = "0100011101001111010101000101010001000001010001110100111101000110010000010101001101010100!"
- if(prob(5))
- to_chat(M, "[high_message]")
- return ..()
-
-/datum/reagent/lube/combat/on_mob_delete(mob/living/M)
- REMOVE_TRAIT(M, TRAIT_GOTTAGOFAST, id)
- ..()
-
-/datum/reagent/lube/combat/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]
- if(prob(20))
- M.emote("ping")
- 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()
- update_flags |= M.adjustFireLoss(5, FALSE)
- update_flags |= M.adjustBrainLoss(3, FALSE)
- return list(effect, update_flags)
-
#undef DRAWBACK_CHANCE_MODIFIER
#undef CONSTANT_DOSE_SAFE_LIMIT
#undef CONSTANT_DOSE_DEATH_LIMIT
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index 98b0089694e..6aa41157755 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -73,26 +73,63 @@
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
+ var/is_robot = (process_flags & SYNTHETIC) > 0
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)
- update_flags |= M.adjustToxLoss(1, FALSE)
- 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, [M.p_their()] eyes bloodshot!")
- M.Dizzy(16 SECONDS)
- M.Weaken(8 SECONDS)
- if(effect <= 15)
- update_flags |= M.adjustToxLoss(1, FALSE)
+ if(!is_robot)
+ if(effect <= 1)
+ M.visible_message("[M] suddenly and violently vomits!")
+ M.fakevomit(no_text = TRUE)
+ else if(effect <= 3)
+ M.emote(pick("groan", "moan"))
+ if(effect <= 8)
+ update_flags |= M.adjustToxLoss(1, FALSE)
+ else
+ if(effect <= 1)
+ M.visible_message("[M] suddenly jitters for a moment.")
+ M.AdjustJitter(2 SECONDS)
+ else if(effect <= 3)
+ M.emote("shudder")
+ if(effect <= 8)
+ update_flags |= M.adjustFireLoss(1, FALSE)
+ to_chat(M, "Your internals start to overheat!")
+ return list(effect, update_flags)
+
+ if(severity == 2)
+ if(!is_robot)
+ if(effect <= 2)
+ M.visible_message("[M] suddenly and violently vomits!")
+ M.fakevomit(no_text = TRUE)
+ else if(effect <= 5)
+ M.visible_message("[M] staggers and drools, [M.p_their()] eyes bloodshot!")
+ M.Dizzy(16 SECONDS)
+ M.Weaken(8 SECONDS)
+ if(effect <= 15)
+ update_flags |= M.adjustToxLoss(1, FALSE)
+ else
+ if(effect <= 2)
+ M.visible_message("[M] suddenly jitters for a moment.")
+ M.AdjustJitter(2 SECONDS)
+ else if(effect <= 5)
+ M.visible_message("[M] staggers and seizes up!")
+ M.Dizzy(16 SECONDS)
+ M.Weaken(8 SECONDS)
+ if(effect <= 15)
+ update_flags |= M.adjustFireLoss(1, FALSE)
+ to_chat(M, "Your internals start to overheat!")
return list(effect, update_flags)
+/datum/reagent/medicine/synaptizine/recal
+ name = "Recal"
+ id = "recal"
+ description = "An oily insulating liquid that passively regulates electrical activity on sensitive electronic components, allowing them to recover from decalibrating events faster. \
+ Overdosing will cause under-voltage errors and hamper component heat dissipation, potentially causing heat damage."
+ reagent_state = LIQUID
+ color = "#85845d"
+ overdose_threshold = 40
+ harmless = FALSE
+ taste_description = "mineral oil and toothpaste"
+ process_flags = SYNTHETIC
+
/datum/reagent/medicine/mitocholide
name = "Mitocholide"
id = "mitocholide"
@@ -426,14 +463,15 @@
harmless = FALSE
taste_description = "health"
-/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M)
+/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/human/H)
var/update_flags = STATUS_UPDATE_NONE
- update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
- update_flags |= M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
+ var/is_robot = ((process_flags & SYNTHETIC) > 0)
+ update_flags |= H.adjustToxLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
+ update_flags |= H.adjustOxyLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
+ update_flags |= H.adjustBruteLoss(-2 * REAGENTS_EFFECT_MULTIPLIER, FALSE, robotic = is_robot)
+ update_flags |= H.adjustFireLoss(-2 * REAGENTS_EFFECT_MULTIPLIER, FALSE, robotic = is_robot)
if(prob(50))
- M.AdjustLoseBreath(-2 SECONDS)
+ H.AdjustLoseBreath(-2 SECONDS)
return ..() | update_flags
/datum/reagent/medicine/omnizine/overdose_process(mob/living/M, severity)
@@ -481,6 +519,13 @@
addiction_chance_additional = 100
addiction_threshold = 0
+// Used in the IPC supercharge implant - because IPCs deserve the little bit of healing too.
+/datum/reagent/medicine/omnizine/no_addict/synthetic
+ name = "Smart Metal"
+ id = "synthetic_omnizine_no_addiction"
+ description = "An exotic liquid metal alloy that flows into cracks, fractures, and other surface imperfections before solidifying to patch up damaged components."
+ process_flags = SYNTHETIC
+
/datum/reagent/medicine/calomel
name = "Calomel"
id = "calomel"
@@ -1185,6 +1230,36 @@
/datum/reagent/medicine/stimulative_agent/changeling/on_mob_delete(mob/living/L)
return
+// IPC Stimulative Agent, for the Supercharge Biochip.
+/datum/reagent/medicine/stimulative_agent/surge_plus
+ name = "Surge Plus"
+ id = "surge_plus"
+ description = "A high quality, low-viscocity gel that both supercharges processors and massively increases the efficincy of synthetic locomotive systems, allowing the user to run faster whilst also clearing stuns. \
+ If overdosed, it will cause short-circuits that will inflict damage and reduce locomotive efficiancy gains."
+ reagent_state = LIQUID
+ color = "#28b581"
+ process_flags = SYNTHETIC
+ taste_description = "silicon"
+
+/datum/reagent/medicine/stimulative_agent/surge_plus/on_mob_life(mob/living/M)
+ var/update_flags = STATUS_UPDATE_NONE
+ update_flags |= ..()
+ if(prob(5))
+ var/high_message = pick("You feel calm.", "You feel collected.", "You feel like the world is moving in slow motion.")
+ if(prob(10))
+ high_message = "0100011101001111010101000101010001000001010001110100111101000110010000010101001101010100!" // "GOTTAGOFAST" in binary.
+ to_chat(M, "[high_message]")
+ return ..() | update_flags
+
+/datum/reagent/medicine/stimulative_agent/surge_plus/overdose_process(mob/living/M, severity)
+ var/update_flags = STATUS_UPDATE_NONE
+ if(prob(33))
+ M.Stuttering(5 SECONDS)
+ to_chat(M, pick("Your circuits overheat!", "Electrical arcs discharge inside you!"))
+ update_flags |= M.adjustStaminaLoss(2.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
+ update_flags |= M.adjustFireLoss(5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) // 5 to compensate for no breathloss. Not like anyone will ever OD on this anyway.
+ return list(0, update_flags)
+
/datum/reagent/medicine/insulin
name = "Insulin"
id = "insulin"