Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync

This commit is contained in:
xPokee
2025-09-10 14:12:16 -04:00
277 changed files with 8854 additions and 7401 deletions
@@ -137,6 +137,7 @@
name = "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."
color = "#78C8FA" //best case scenario is the "default", gets muddled depending on purity
taste_description = "harsh, burning chemicals"
overdose_threshold = 20
metabolization_rate = 0.75 * REAGENTS_METABOLISM
ph = 5
@@ -169,7 +170,7 @@
/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.", "You understand now.")
if(SPT_PROB(2.5, seconds_per_tick))
to_chat(affected_mob, span_notice("[high_message]"))
affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium)
@@ -718,6 +718,7 @@
name = "Morphine"
description = "A painkiller that allows the patient to move at full speed even when injured. Causes drowsiness and eventually unconsciousness in high doses. Overdose will cause a variety of effects, ranging from minor to lethal."
color = "#A9FBFB"
taste_description = "a perfumy, bitter vanilla"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 30
ph = 8.96
@@ -259,26 +259,39 @@
ph = 13
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob)
/datum/reagent/toxin/zombiepowder/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection)
. = ..()
if(!isliving(exposed_mob) || !(methods & (INGEST|INHALE)))
return
LAZYINITLIST(data)
data["method"] |= methods
//the stomach handles INGEST via on_mob_metabolize() we only deal with INHALE
//also means vapour works much faster which is realistic
if(methods & INHALE)
zombify(exposed_mob)
/**
* Does the fake death & oxy loss on the mob
*
* Arguments
* * mob/living/holder_mob - the mob we are zombifying
*/
/datum/reagent/toxin/zombiepowder/proc/zombify(mob/living/holder_mob)
PRIVATE_PROC(TRUE)
holder_mob.adjustOxyLoss(0.5*REM, FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
if((data?["method"] & (INGEST|INHALE)) && holder_mob.stat != DEAD)
holder_mob.fakedeath(type)
/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob)
. = ..()
zombify(holder_mob)
/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/affected_mob)
. = ..()
affected_mob.cure_fakedeath(type)
/datum/reagent/toxin/zombiepowder/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection)
. = ..()
if(!(methods & (INGEST|INHALE)))
return
var/datum/reagent/zombiepowder = exposed_mob.reagents.has_reagent(/datum/reagent/toxin/zombiepowder)
if(zombiepowder)
LAZYINITLIST(zombiepowder.data)
zombiepowder.data["method"] |= (INGEST|INHALE)
/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/affected_mob, seconds_per_tick, times_fired)
. = ..()
if(HAS_TRAIT(affected_mob, TRAIT_FAKEDEATH) && HAS_TRAIT(affected_mob, TRAIT_DEATHCOMA))
@@ -77,6 +77,46 @@
e.start(holder.my_atom)
holder.clear_reagents()
/datum/chemical_reaction/meth_crystal //Since the meth is a cooled pharmaceutical solvent, this precipitates it into a solid.
required_reagents = list(/datum/reagent/drug/methamphetamine = 10, /datum/reagent/toxin/acid = 2)
mob_react = FALSE
reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING
/datum/chemical_reaction/meth_crystal/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom)
// Calculate purity ignoring sulfuric acid
var/total_nonacid = 0
var/meth_amt_in_mix = 0
for(var/datum/reagent/R in holder.reagent_list)
if(istype(R, /datum/reagent/toxin/acid))
continue // acid doesn't count against purity
total_nonacid += R.volume
if(istype(R, /datum/reagent/drug/methamphetamine))
meth_amt_in_mix += R.volume
var/purity = (total_nonacid > 0) ? (meth_amt_in_mix / total_nonacid) : 0.5 //All this tints the crystal above blue purity.
for(var/i in 1 to round(created_volume, CHEMICAL_VOLUME_ROUNDING))
var/obj/item/food/drug/meth_crystal/new_crystal = new(location)
new_crystal.pixel_x = rand(-6, 6)
new_crystal.pixel_y = rand(-6, 6)
var/effective_purity = 0
if(purity > 0.9)
effective_purity = (purity - 0.9) / 0.1
new_crystal.color = BlendRGB("#FAFAFA", "#78C8FA", effective_purity)
if(new_crystal.reagents)
new_crystal.reagents.clear_reagents()
var/meth_amt = 10
new_crystal.reagents.add_reagent(/datum/reagent/drug/methamphetamine, meth_amt)
var/imp_amt = round(meth_amt * (1 - purity) * 0.25, 0.1)
if(imp_amt > 0)
new_crystal.reagents.add_reagent(/datum/reagent/consumable/failed_reaction, imp_amt)
/datum/chemical_reaction/bath_salts
results = list(/datum/reagent/drug/bath_salts = 7)
required_reagents = list(/datum/reagent/toxin/bad_food = 1, /datum/reagent/saltpetre = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/consumable/enzyme = 1, /datum/reagent/consumable/tea = 1, /datum/reagent/mercury = 1)
@@ -186,6 +186,11 @@
list_reagents = list(/datum/reagent/medicine/c2/aiuri = 2, /datum/reagent/medicine/granibitaluri = 8)
icon_state = "bandaid_burn"
/obj/item/reagent_containers/applicator/patch/fent
name = "unmarked patch"
desc = "An unmarked, unlabeled transdermal patch for you to wear!"
list_reagents = list(/datum/reagent/toxin/fentanyl = 2)
/obj/item/reagent_containers/applicator/patch/synthflesh
name = "synthflesh patch"
desc = "Helps with brute and burn injuries. Slightly toxic. Three patches applied can restore a corpse husked by burns."