Files
nevimer baf3837ae8 Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
2025-11-29 22:49:21 -05:00

243 lines
11 KiB
Plaintext

/datum/chemical_reaction/coca_paste
results = list(/datum/reagent/drug/coca_paste = 5)
required_reagents = list(/datum/reagent/drug/coca_powder = 10, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/water = 9)
required_temp = 300
purity_min = 0
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DRUG
/datum/chemical_reaction/cocaine
results = list(/datum/reagent/drug/cocaine = 10)
required_reagents = list(/datum/reagent/drug/coca_paste = 8, /datum/reagent/acetone = 2, /datum/reagent/toxin/acid = 2,)
required_temp = 480 // cook it
purity_min = 0
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DRUG
mix_message = "The solution thickens into a paste!"
/datum/chemical_reaction/powder_cocaine
is_cold_recipe = TRUE
required_reagents = list(/datum/reagent/drug/cocaine = 5)
required_temp = 250 //freeze it
reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DRUG
mix_message = "The solution freezes into a powder!"
/datum/chemical_reaction/powder_cocaine/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume)
new /obj/item/reagent_containers/cocaine(location)
/datum/chemical_reaction/crack_cooking
required_reagents = list(/datum/reagent/drug/cocaine = 8, /datum/reagent/water = 12, /datum/reagent/ash = 4) // i wanted it to be ammonia but the space cleaner reaction...
required_temp = 480 //cook it
purity_min = 0
reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DRUG
mix_message = "The solution solidifies into chunks!"
/datum/chemical_reaction/crack_cooking/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume)
new /obj/item/reagent_containers/crack(location)
/datum/movespeed_modifier/reagent/cocaine
multiplicative_slowdown = -0.30
/datum/reagent/drug/cocaine
name = "Cocaine"
description = "A powerful stimulant extracted from coca leaves. Causes drowsiness and severe brain damage if overdosed."
color = "#ffffff"
overdose_threshold = 20
ph = 9
taste_description = "bitterness" //supposedly does taste bitter in real life
addiction_types = list(/datum/addiction/stimulants = 17)
metabolized_traits = list(TRAIT_ANALGESIA, TRAIT_BATON_RESISTANCE)
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/drug/cocaine/on_mob_metabolize(mob/living/metabolizer)
..()
metabolizer.add_movespeed_modifier(/datum/movespeed_modifier/reagent/cocaine)
/datum/reagent/drug/cocaine/on_mob_end_metabolize(mob/living/metabolizer)
metabolizer.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/cocaine)
..()
/datum/reagent/drug/cocaine/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired)
if(SPT_PROB(2.5, seconds_per_tick))
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
to_chat(M, span_notice("[high_message]"))
M.add_mood_event("zoinked", /datum/mood_event/stimulant_heavy, name)
M.AdjustStun(-15 * REM * seconds_per_tick)
M.AdjustKnockdown(-15 * REM * seconds_per_tick)
M.AdjustUnconscious(-15 * REM * seconds_per_tick)
M.AdjustImmobilized(-15 * REM * seconds_per_tick)
M.AdjustParalyzed(-15 * REM * seconds_per_tick)
M.adjust_stamina_loss(-2 * REM * seconds_per_tick, 0)
if(SPT_PROB(2.5, seconds_per_tick))
M.emote("shiver")
..()
. = TRUE
/datum/reagent/drug/cocaine/overdose_start(mob/living/M)
to_chat(M, span_userdanger("Your heart beats is beating so fast, it hurts..."))
/datum/reagent/drug/cocaine/overdose_process(mob/living/M, seconds_per_tick, times_fired)
M.adjust_tox_loss(5 * REM * seconds_per_tick, 0)
M.adjust_organ_loss(ORGAN_SLOT_HEART, (rand(10, 20) / 10) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
M.set_jitter_if_lower(5 SECONDS)
if(SPT_PROB(2.5, seconds_per_tick))
M.emote(pick("twitch","drool"))
if(!HAS_TRAIT(M, TRAIT_FLOORED))
if(SPT_PROB(1.5, seconds_per_tick))
M.visible_message(span_danger("[M] collapses onto the floor!"))
M.Paralyze(135,TRUE)
M.drop_all_held_items()
..()
. = TRUE
/datum/reagent/drug/coca_powder
name = "Coca Powder"
description = "Ground-up and filtered coca leaves, mildly stimulating."
color = "#20862f"
taste_description = "bitterness"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/drug/coca_powder/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired)
M.AdjustStun(-2 * REM * seconds_per_tick)
M.AdjustKnockdown(-2 * REM * seconds_per_tick)
M.AdjustUnconscious(-2 * REM * seconds_per_tick)
M.AdjustImmobilized(-2 * REM * seconds_per_tick)
M.AdjustParalyzed(-2 * REM * seconds_per_tick)
..()
. = TRUE
/datum/reagent/drug/coca_paste
name = "Coca Paste"
description = "An acidc paste containing high amount of cocaine and toxic chemicals used to process it - consumption is ill-advised."
color = "#4e6444"
ph = 5
taste_description = "acidic sludge"
addiction_types = list(/datum/addiction/stimulants = 17)
metabolized_traits = list(TRAIT_ANALGESIA, TRAIT_BATON_RESISTANCE)
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/drug/coca_paste/on_mob_metabolize(mob/living/metabolizer)
..()
metabolizer.add_movespeed_modifier(/datum/movespeed_modifier/reagent/cocaine)
/datum/reagent/drug/coca_paste/on_mob_end_metabolize(mob/living/metabolizer)
metabolizer.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/cocaine)
..()
/datum/reagent/drug/coca_paste/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired)
M.adjust_fire_loss((volume/50) * REM * normalise_creation_purity() * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype)
M.adjust_tox_loss(3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)
if(SPT_PROB(2.5, seconds_per_tick))
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
to_chat(M, span_notice("[high_message]"))
M.add_mood_event("zoinked", /datum/mood_event/stimulant_heavy, name)
M.AdjustStun(-12 * REM * seconds_per_tick)
M.AdjustKnockdown(-12 * REM * seconds_per_tick)
M.AdjustUnconscious(-12 * REM * seconds_per_tick)
M.AdjustImmobilized(-12 * REM * seconds_per_tick)
M.AdjustParalyzed(-12 * REM * seconds_per_tick)
M.adjust_stamina_loss(-2 * REM * seconds_per_tick, 0)
if(SPT_PROB(20, seconds_per_tick))
M.emote(pick("scream","twitch","shiver"))
..()
. = TRUE
return UPDATE_MOB_HEALTH
/datum/reagent/drug/coca_paste/overdose_start(mob/living/M)
to_chat(M, span_userdanger("Your heart beats is beating so fast, it hurts..."))
/datum/reagent/drug/coca_paste/overdose_process(mob/living/M, seconds_per_tick, times_fired)
M.adjust_tox_loss(5 * REM * seconds_per_tick, 0)
M.adjust_organ_loss(ORGAN_SLOT_HEART, (rand(10, 20) / 10) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
M.set_jitter_if_lower(5 SECONDS)
if(SPT_PROB(2.5, seconds_per_tick))
M.emote(pick("twitch","drool"))
if(!HAS_TRAIT(M, TRAIT_FLOORED))
if(SPT_PROB(1.5, seconds_per_tick))
M.visible_message(span_danger("[M] collapses onto the floor!"))
M.Paralyze(135,TRUE)
M.drop_all_held_items()
..()
. = TRUE
/datum/movespeed_modifier/reagent/crack
multiplicative_slowdown = -0.40
/datum/reagent/drug/freebase_cocaine
name = "Freebase Cocaine"
description = "A smokable form of cocaine, Its higher bioavaliability results in a more intense high."
color = "#f0e6bb"
overdose_threshold = 15
ph = 9 // it probably shouldnt be? but im too lazy to check it, and it was 9 because it was inhereiting
taste_description = "crunchy bitterness"
addiction_types = list(/datum/addiction/stimulants = 24) // even more addictive
metabolized_traits = list(TRAIT_ANALGESIA, TRAIT_BATON_RESISTANCE)
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/drug/freebase_cocaine/on_mob_metabolize(mob/living/metabolizer)
..()
metabolizer.add_movespeed_modifier(/datum/movespeed_modifier/reagent/crack)
/datum/reagent/drug/freebase_cocaine/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired)
if(SPT_PROB(2.5, seconds_per_tick))
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
to_chat(M, span_notice("[high_message]"))
M.add_mood_event("zoinked", /datum/mood_event/stimulant_heavy, name)
M.AdjustStun(-18 * REM * seconds_per_tick)
M.AdjustKnockdown(-18 * REM * seconds_per_tick)
M.AdjustUnconscious(-18 * REM * seconds_per_tick)
M.AdjustImmobilized(-18 * REM * seconds_per_tick)
M.AdjustParalyzed(-18 * REM * seconds_per_tick)
M.adjust_stamina_loss(-2.5 * REM * seconds_per_tick, 0)
if(SPT_PROB(2.5, seconds_per_tick))
M.emote("shiver")
..()
. = TRUE
/datum/reagent/drug/freebase_cocaine/on_mob_end_metabolize(mob/living/metabolizer)
metabolizer.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/crack)
metabolizer.adjust_drowsiness(5 SECONDS)
..()
/datum/reagent/drug/freebase_cocaine/overdose_start(mob/living/M)
to_chat(M, span_userdanger("Your heart beats is beating so fast, it hurts..."))
/datum/reagent/drug/freebase_cocaine/overdose_process(mob/living/M, seconds_per_tick, times_fired)
M.adjust_tox_loss(5 * REM * seconds_per_tick, 0)
M.adjust_organ_loss(ORGAN_SLOT_HEART, (rand(10, 20) / 10) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
M.set_jitter_if_lower(5 SECONDS)
if(SPT_PROB(2.5, seconds_per_tick))
M.emote(pick("twitch","drool"))
if(!HAS_TRAIT(M, TRAIT_FLOORED))
if(SPT_PROB(1.5, seconds_per_tick))
M.visible_message(span_danger("[M] collapses onto the floor!"))
M.Paralyze(135,TRUE)
M.drop_all_held_items()
..()
. = TRUE
// no you can't multi-coke
/datum/chemical_reaction/cocaine_sanity // cracks your cocaine
required_container = /mob/living
required_container_accepts_subtypes = TRUE
results = list(/datum/reagent/drug/freebase_cocaine = 2)
required_reagents = list(/datum/reagent/drug/cocaine = 1, /datum/reagent/drug/freebase_cocaine = 1,)
reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/cocaine_sanity_paste // unpastes your paste
required_container = /mob/living
required_container_accepts_subtypes = TRUE
results = list(/datum/reagent/drug/cocaine = 0.6, /datum/reagent/toxin/acid/nitracid = 0.2, /datum/reagent/toxin = 0.2,)
required_reagents = list(/datum/reagent/drug/coca_paste = 1)
required_catalysts = list(/datum/reagent/drug/cocaine = 1)
reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/cocaine_sanity_paste/crack
required_catalysts = list(/datum/reagent/drug/freebase_cocaine = 1)
// not doing this for coca powder because honestly it doesn't matter