Mental Medication Additions (#4648)

The less controversial tweaks
Tweaked the metabolism rate of mental medication to reflect their intended values. Reduced the dosage threshold to suppress traumas to reflect their intended values.

Syringe (drugs) now contains truth serum.

Cardox is now slightly poisonous, and can directly remove phoron from blood when consumed. Cardox can now remove phoron in the air when applied to turfs.

A secure box of loyalty implants, hextrasenil pills, and cardox grenades are now located in the vault.

The vault now contains some misc emergency gear that a head of staff can access in case of a dire situation. Current gear are loyalty implants, expensive cardox grenades, and Hextrasenil pills.
This commit is contained in:
BurgerLUA
2018-05-13 17:39:56 +03:00
committed by Erki
parent e388235cef
commit aad698be53
55 changed files with 1277 additions and 473 deletions
+3 -3
View File
@@ -252,7 +252,7 @@
return amount
/datum/reagents/proc/trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]).
if(!target || !istype(target))
return 0
@@ -276,7 +276,7 @@
handle_reactions()
target.handle_reactions()
return amount
/* Holder-to-atom and similar procs */
@@ -389,7 +389,7 @@
if(!target || !istype(target) || !target.simulated)
return 0
var/mob/living/carbon/C = target
if(istype(C))
if(type == CHEM_BREATHE)
+13 -8
View File
@@ -12,6 +12,9 @@
var/ingest_met = 0
var/touch_met = 0
var/breathe_met = 0
var/ingest_mul = 0.5
var/touch_mul = 0
var/breathe_mul = 0.75
var/dose = 0
var/max_dose = 0
var/overdose = 0
@@ -25,7 +28,7 @@
var/color_weight = 1
var/unaffected_species = IS_DIONA | IS_MACHINE // Species that aren't affected by this reagent. Does not prevent affect_touch.
var/metabolism_min = 0.01 //How much for the medicine to be present in the system to actually have an effect.
var/list/conflicting_reagents //Reagents that conflict with this medicine, and cause adverse effects when in the blood.
var/conflicting_reagent //Reagents that conflict with this medicine, and cause adverse effects when in the blood.
/datum/reagent/proc/remove_self(var/amount) // Shortcut
if (!holder)
@@ -71,10 +74,9 @@
dose = min(dose + removed, max_dose)
for(var/conflicting_reagent in conflicting_reagents)
var/amount_min = conflicting_reagents[conflicting_reagent]
if(M.reagents.has_reagent(conflicting_reagent,amount_min))
affect_conflicting(M,alien,removed,conflicting_reagent)
for(var/datum/reagent/R in M.bloodstr.reagent_list)
if(istype(R, conflicting_reagent))
affect_conflicting(M,alien,removed,R)
if(removed >= metabolism_min)
switch(location)
if(CHEM_BLOOD)
@@ -98,13 +100,16 @@
M.adjustToxLoss(removed)
/datum/reagent/proc/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
affect_blood(M, alien, removed * 0.5)
if(ingest_mul)
affect_blood(M, alien, removed * ingest_mul)
/datum/reagent/proc/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
return
if(touch_mul)
affect_blood(M, alien, removed * touch_mul)
/datum/reagent/proc/affect_breathe(var/mob/living/carbon/M, var/alien, var/removed)
affect_blood(M, alien, removed * 0.75)
if(breathe_mul)
affect_blood(M, alien, removed * breathe_mul)
/datum/reagent/proc/overdose(var/mob/living/carbon/M, var/alien, var/removed = 0, var/scale = 1) // Overdose effect. Doesn't happen instantly.
M.adjustToxLoss(REM)
@@ -39,12 +39,14 @@
/datum/reagent/ammonia
name = "Ammonia"
id = "ammonia"
description = "A caustic substance commonly used in fertilizer or household cleaners."
description = "A caustic substance commonly used in fertilizer or household cleaners. Poisonous to most lifeforms, lingers for a while if inhaled."
reagent_state = LIQUID
color = "#404030"
metabolism = REM * 0.5
taste_description = "mordant"
taste_mult = 2
breathe_mul = 2
breathe_met = REM * 0.25
/datum/reagent/ammonia/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VOX)
@@ -127,7 +129,8 @@
M.adjustToxLoss(removed * 2)
/datum/reagent/alcohol/affect_ingest(mob/living/carbon/M, alien, removed)
M.intoxication += (strength / 100) * removed
M.intoxication += (strength * removed) * 0.075
if (druggy != 0)
M.druggy = max(M.druggy, druggy)
@@ -343,6 +346,13 @@
/datum/reagent/acid/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.take_organ_damage(0, removed * power)
/datum/reagent/acid/affect_breathe(var/mob/living/carbon/human/H, var/alien, var/removed)
. = ..()
if(istype(H))
var/obj/item/organ/L = H.internal_organs_by_name["lungs"]
if(istype(L))
L.take_damage(removed * power * 0.5)
/datum/reagent/acid/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // This is the most interesting
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -424,6 +434,16 @@
meltdose = 8
taste_description = "stomach acid"
/datum/reagent/acid/polyacid //Not in dispensers, but it should be here
name = "Polytrinic acid"
id = "pacid"
description = "Polytrinic acid is a an extremely corrosive chemical substance."
reagent_state = LIQUID
color = "#8E18A9"
power = 6
meltdose = 4
taste_description = "acid"
/datum/reagent/silicon
name = "Silicon"
id = "silicon"
@@ -113,8 +113,7 @@
M.nutrition += nutriment_factor * removed // For hunger and fatness
M.nutrition_attrition_rate = Clamp(M.nutrition_attrition_rate + attrition_factor, 1, 2)
M.add_chemical_effect(CE_BLOODRESTORE, blood_factor * removed)
M.intoxication -= min(M.intoxication,nutriment_factor*removed*0.05) //Nutrients can absorb alcohol.
/*
Coatings are used in cooking. Dipping food items in a reagent container with a coating in it
@@ -507,6 +506,10 @@
overdose = REAGENTS_OVERDOSE
taste_description = "salt"
/datum/reagent/sodiumchloride/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
. = ..()
M.intoxication -= min(M.intoxication,removed*2) //Salt absorbs alcohol
/datum/reagent/blackpepper
name = "Black Pepper"
id = "blackpepper"
@@ -9,6 +9,7 @@
overdose = REAGENTS_OVERDOSE * 2
metabolism = REM * 0.5
metabolism_min = REM * 0.125
breathe_mul = 0.5
scannable = 1
taste_description = "bitterness"
var/datum/modifier/modifier
@@ -26,7 +27,7 @@
/datum/reagent/bicaridine
name = "Bicaridine"
id = "bicaridine"
description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma."
description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma. When inhaled, it treats minor damage to the lungs."
reagent_state = LIQUID
color = "#BF0000"
overdose = REAGENTS_OVERDOSE
@@ -35,9 +36,19 @@
taste_description = "bitterness"
taste_mult = 3
breathe_met = 0.5
breathe_mul = 0.1
/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.heal_organ_damage(5 * removed, 0)
/datum/reagent/bicaridine/affect_breathe(var/mob/living/carbon/human/H, var/alien, var/removed)
. = ..()
if(istype(H))
var/obj/item/organ/L = H.internal_organs_by_name["lungs"]
if(istype(L) && !L.robotic && !L.is_broken())
L.take_damage(-1*removed) //Every 10 units heals 1 lung damage.
/datum/reagent/bicaridine/overdose(var/mob/living/carbon/M, var/alien)
..()//Bicard overdose heals internal wounds
if(ishuman(M))
@@ -97,12 +108,14 @@
/datum/reagent/dexalin
name = "Dexalin"
id = "dexalin"
description = "Dexalin is used in the treatment of oxygen deprivation."
description = "Dexalin is used in the treatment of oxygen deprivation. The medication is twice as powerful and lasts twice as long when inhaled."
reagent_state = LIQUID
color = "#0080FF"
overdose = REAGENTS_OVERDOSE
scannable = 1
taste_description = "bitterness"
breathe_met = 0.5
breathe_mul = 2
/datum/reagent/dexalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VOX)
@@ -115,12 +128,14 @@
/datum/reagent/dexalinp
name = "Dexalin Plus"
id = "dexalinp"
description = "Dexalin Plus is used in the treatment of oxygen deprivation. It is highly effective."
description = "Dexalin Plus is used in the treatment of oxygen deprivation. It is highly effective, and is twice as powerful and lasts twice as long when inhaled."
reagent_state = LIQUID
color = "#0040FF"
overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
taste_description = "bitterness"
breathe_met = 0.5
breathe_mul = 2
/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VOX)
@@ -133,12 +148,12 @@
/datum/reagent/tricordrazine
name = "Tricordrazine"
id = "tricordrazine"
description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries."
description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries, however it does not work when inhaled."
reagent_state = LIQUID
color = "#8040FF"
scannable = 1
taste_description = "bitterness"
breathe_mul = 0
/datum/reagent/tricordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustOxyLoss(-6 * removed)
@@ -184,7 +199,7 @@
/datum/reagent/paracetamol
name = "Paracetamol"
id = "paracetamol"
description = "Most probably know this as Tylenol, but this chemical is a mild, simple painkiller."
description = "Most probably know this as Tylenol, but this chemical is a mild, simple painkiller. Does not work when inhaled."
reagent_state = LIQUID
color = "#C8A5DC"
overdose = 60
@@ -192,6 +207,7 @@
metabolism = 0.02
taste_description = "sickness"
metabolism_min = 0.005
breathe_mul = 0
/datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 50)
@@ -203,7 +219,7 @@
/datum/reagent/tramadol
name = "Tramadol"
id = "tramadol"
description = "A simple, yet effective painkiller."
description = "Tramadol is a very effective painkiller designed for victims of heavy physical trauma. Does not work when inhaled."
reagent_state = LIQUID
color = "#CB68FC"
overdose = 30
@@ -211,6 +227,7 @@
metabolism = 0.02
taste_description = "sourness"
metabolism_min = 0.005
breathe_mul = 0
/datum/reagent/tramadol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 80)
@@ -222,26 +239,28 @@
/datum/reagent/oxycodone
name = "Oxycodone"
id = "oxycodone"
description = "An effective and very addictive painkiller."
description = "Oxycodone is incredibly potent and very addictive painkiller. Do not mix with alcohol. Does not work when inhaled."
reagent_state = LIQUID
color = "#800080"
overdose = 20
metabolism = 0.02
taste_description = "bitterness"
metabolism_min = 0.005
conflicting_reagents = list(/datum/reagent/alcohol/ = 5)
breathe_mul = 0
/datum/reagent/oxycodone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 200)
/datum/reagent/oxycodone/affect_conflicting(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagent/conflicting)
..()
M.hallucination = max(M.hallucination, 60)
M.druggy = max(M.druggy, 10)
var/mob/living/carbon/human/H = M
if(!istype(H))
return
var/bac = H.get_blood_alcohol()
if(bac >= 0.02)
M.hallucination = max(M.hallucination, bac * 300)
M.druggy = max(M.druggy, bac * 100)
/datum/reagent/oxycodone/overdose(var/mob/living/carbon/M, var/alien)
..()
M.druggy = max(M.druggy, 10)
M.druggy = max(M.druggy, 20)
M.hallucination = max(M.hallucination, 60)
/* Other medicine */
@@ -249,7 +268,7 @@
/datum/reagent/synaptizine
name = "Synaptizine"
id = "synaptizine"
description = "Synaptizine is used to treat various diseases."
description = "Synaptizine is used to treat a robust array of conditions, such as drowsyness, paralysis, weakness, LSD overdose, hallucinations, and pain. Moderately poisonous, and should only be used as a last resort."
reagent_state = LIQUID
color = "#99CCFF"
metabolism = REM * 0.05
@@ -275,7 +294,6 @@
QDEL_NULL(modifier)
return ..()
/datum/reagent/alkysine
name = "Alkysine"
id = "alkysine"
@@ -357,7 +375,7 @@
/datum/reagent/hyperzine
name = "Hyperzine"
id = "hyperzine"
description = "Hyperzine is a highly effective, long lasting, muscle stimulant."
description = "Hyperzine is a highly effective, long lasting, muscle stimulant. Lasts twice as long when inhaled."
reagent_state = LIQUID
color = "#FF3300"
metabolism = REM * 0.15
@@ -365,6 +383,7 @@
var/datum/modifier = null
taste_description = "acid"
metabolism_min = REM * 0.025
breathe_met = 0.5
/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(prob(5))
@@ -524,51 +543,61 @@
#define ANTIDEPRESSANT_MESSAGE_DELAY 1800 //3 minutes
/datum/reagent/mental
name = "Experimental Antidepressant"
name = null //Just like alcohol
id = "mental"
description = "Some nameless, experimental antidepressant that you should obviously not have your hands on."
reagent_state = LIQUID
color = "#FFFFFF"
metabolism = 0.001
metabolism = 0.001 * REM
metabolism_min = 0
data = 0
scannable = 1
overdose = REAGENTS_OVERDOSE
taste_description = "bugs"
var/goodmessage = list("Your mind feels healthy.","You feel calm and relaxed.","The world seems like a better place now.") //Messages when all your brain traumas are cured.
var/badmessage = list("Your mind seems lost...","You feel agitated...","It feels like the world is out to get you...") //Messages when you still have at least one brain trauma it's suppose to cure.
var/worstmessage = list("Your mind starts to break down...","Things aren't what they seem...","You hate yourself...") //Messages when the user is at possible risk for more trauma
var/list/suppress_traumas //List of brain traumas that the medication temporarily suppresses, with the key being the brain trauma and the value being the minimum dosage required to cure.
ingest_mul = 1
var/alchohol_affected = 1
var/min_dose = 1
var/messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY
var/list/goodmessage = list() //Messages when all your brain traumas are cured.
var/list/badmessage = list() //Messages when you still have at least one brain trauma it's suppose to cure.
var/list/worstmessage = list() //Messages when the user is at possible risk for more trauma
var/list/suppress_traumas //List of brain traumas that the medication temporarily suppresses, with the key being the brain trauma and the value being the minimum dosage required to cure. Negative values means that the trauma is temporarily gained on the value instead.
var/list/dosage_traumas //List of brain traumas that the medication permanently adds at these dosages, with the key being the brain trauma and the value being base percent chance to add.
var/list/withdrawal_traumas //List of withdrawl effects that the medication permanently adds during withdrawl, with the key being the brain trauma, and the value being the base percent chance to add.
var/messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY
conflicting_reagents = list(/datum/reagent/alcohol/ = 5)
var/suppressing_reagents = list(/datum/reagent/synaptizine = 5) // List of reagents that suppress the withdrawal effects, with the key being the reagent and the vlue being the minimum dosage required to suppress.
var/list/suppressing_reagents = list() // List of reagents that suppress the withdrawal effects, with the key being the reagent and the vlue being the minimum dosage required to suppress.
/datum/reagent/mental/affect_blood(var/mob/living/carbon/human/H, var/alien, var/removed)
if(!istype(H) || world.time < data)
if(!istype(H) || max_dose < min_dose || (world.time < data && volume > removed) || messagedelay == -1)
return
//max_dose < min_dose and volume > removed prevents message startup/startdown spam if you're using something like a cigarette or similiar device that transfers a little bit of reagents at a time.
//If in the case that a cigarette has a lower transfer rate than the metabolism rate, then message spam will occur since it's starting and stopping constantly.
//This also prevents the whole code from working if the dosage is very small.
var/hastrauma = 0 //whether or not the brain has trauma
var/obj/item/organ/brain/B = H.internal_organs_by_name["brain"]
var/bac = H.get_blood_alcohol()
if(alchohol_affected && bac > 0.01)
H.hallucination = max(H.hallucination, bac * 400)
if(B) //You won't feel anything if you don't have a brain.
for(var/datum/brain_trauma/BT in B.traumas)
var/goal_volume = suppress_traumas [BT]
var/goal_volume = suppress_traumas[BT]
if (volume >= goal_volume) // If the dosage is greater than the goal, then suppress the trauma.
if(!BT.suppressed)
BT.on_lose()
if(!BT.suppressed && !BT.permanent)
BT.suppressed = 1
else if(volume < goal_volume-1) // -1 So it doesn't spam back and forth constantly if reagents are being metabolized
BT.on_lose()
else if(volume < goal_volume-1 && goal_volume > 0) // -1 So it doesn't spam back and forth constantly if reagents are being metabolized
if(BT.suppressed)
BT.on_gain()
BT.suppressed = 0
BT.on_gain()
hastrauma = 1
for(var/datum/brain_trauma/BT in dosage_traumas)
var/percentchance = max(0,dosage_traumas[BT] - dose*10) // If you've been taking this medication for a while then side effects are rarer.
if(!H.has_trauma_type(BT) && prob(percentchance))
B.gain_trauma(BT,FALSE)
if(volume < max_dose*0.25) //If you haven't been taking youre regular dose, then cause issues.
if(volume < max_dose*0.25) //If you haven't been taking your regular dose, then cause issues.
var/suppress_withdrawl = FALSE
for(var/k in suppressing_reagents)
var/datum/reagent/v = suppressing_reagents[k]
@@ -576,21 +605,24 @@
suppress_withdrawl = TRUE
break
if(!suppress_withdrawl)
H << "<span class='danger'>[pick(worstmessage)]</span>"
if (H.shock_stage < 20 && worstmessage.len)
to_chat(H,"<span class='danger'>[pick(worstmessage)]</span>")
messagedelay = initial(messagedelay) * 0.25
for(var/k in withdrawal_traumas)
var/datum/brain_trauma/BT = k
var/percentchance = max(withdrawal_traumas[k] * (dose/20)) //The higher the dosage, the more likely it is do get withdrawal traumas.
if(!H.has_trauma_type(BT) && prob(percentchance))
B.gain_trauma(BT,FALSE)
else if(hastrauma || volume < max_dose*0.5) //If your current dose is not high enough, then alert the player.
H << "<span class='warning'>[pick(badmessage)]</span>"
if (H.shock_stage < 10 && badmessage.len)
to_chat(H,"<span class='warning'>[pick(badmessage)]</span>")
messagedelay = initial(messagedelay) * 0.5
else
H << "<span class='good'>[pick(goodmessage)]</span>"
if (H.shock_stage < 5 && goodmessage.len)
to_chat(H,"<span class='good'>[pick(goodmessage)]</span>")
messagedelay = initial(messagedelay)
data = world.time + messagedelay
/datum/reagent/mental/affect_conflicting(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagent/conflicting)
M.hallucination = max(M.hallucination, 10)
data = world.time + (messagedelay SECONDS)
/datum/reagent/mental/nicotine
name = "Nicotine"
@@ -598,7 +630,7 @@
description = "Nicotine is a stimulant and relaxant commonly found in tobacco products. It is very poisonous, unless at very low doses."
reagent_state = LIQUID
color = "#333333"
metabolism = 0.0005
metabolism = 0.0016 * REM
overdose = 3
data = 0
taste_description = "bitterness"
@@ -606,10 +638,11 @@
badmessage = list("You start to crave nicotine...")
worstmessage = list("You need your nicotine fix!")
suppress_traumas = list(
/datum/brain_trauma/mild/phobia = 0.01,
/datum/brain_trauma/mild/muscle_weakness/ = 0.01
/datum/brain_trauma/mild/phobia = 0.1,
/datum/brain_trauma/mild/muscle_weakness/ = 0.05
)
conflicting_reagents = list()
conflicting_reagent = null
min_dose = 0.0064 * REM
var/datum/modifier/modifier
/datum/reagent/mental/nicotine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -626,17 +659,17 @@
id = "methylphenidate"
description = "Methylphenidate is an AHDH treatment drug that treats basic distractions such as phobias and hallucinations at moderate doses. Withdrawl effects are rare. Side effects are rare, and include hallucinations."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.01
color = "#8888AA"
metabolism = 0.01 * REM
data = 0
taste_description = "paper"
goodmessage = list("You feel focused.","You feel like you have no distractions.","You feel willing to work.")
badmessage = list("You feel a little distracted...","You feel slight agitation...","You feel a dislike towards work...")
worstmessage = list("You feel completely distrtacted...","You feel like you don't want to work...","You think you see things...")
suppress_traumas = list(
/datum/brain_trauma/special/imaginary_friend = 40,
/datum/brain_trauma/mild/hallucinations = 20,
/datum/brain_trauma/mild/phobia/ = 20
/datum/brain_trauma/special/imaginary_friend = 20,
/datum/brain_trauma/mild/hallucinations = 10,
/datum/brain_trauma/mild/phobia/ = 10
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 5
@@ -652,17 +685,17 @@
description = "Fluvoxamine is safe and effective at treating basic phobias, as well as schizophrenia and muscle weakness at higher doses. Withdrawl effects are rare. Side effects are rare, and include hallucinations."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.01
metabolism = 0.01 * REM
data = 0
taste_description = "paper"
taste_description = "bitterness"
goodmessage = list("You do not feel the need to worry about simple things.","You feel calm and level-headed.","You feel fine.")
badmessage = list("You feel a little blue.","You feel slight agitation...","You feel a little nervous...")
worstmessage = list("You worry about the littlest thing...","You feel like you are at risk...","You think you see things...")
suppress_traumas = list(
/datum/brain_trauma/mild/phobia/ = 5,
/datum/brain_trauma/severe/split_personality = 20,
/datum/brain_trauma/special/imaginary_friend = 40,
/datum/brain_trauma/mild/muscle_weakness = 20
/datum/brain_trauma/mild/phobia/ = 2,
/datum/brain_trauma/severe/split_personality = 10,
/datum/brain_trauma/special/imaginary_friend = 20,
/datum/brain_trauma/mild/muscle_weakness = 10
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 5
@@ -677,15 +710,15 @@
id = "sertraline"
description = "Sertraline is cheap, safe, and effective at treating basic phobias, however it does not last as long as other drugs of it's class. Withdrawl effects are uncommon. Side effects are rare."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.02
color = "#88AA88"
metabolism = 0.02 * REM
data = 0
taste_description = "paper"
goodmessage = list("You feel fine.","You feel rational.","You feel decent.")
badmessage = list("You feel a little blue.","You feel slight agitation...","You feel a little nervous...")
worstmessage = list("You worry about the littlest thing...","You feel like you are at risk...","You think you see things...")
suppress_traumas = list(
/datum/brain_trauma/mild/phobia/ = 5
/datum/brain_trauma/mild/phobia/ = 2
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 5
@@ -701,16 +734,16 @@
id = "escitalopram"
description = "Escitalopram is expensive, safe and very effective at treating basic phobias as well as advanced phobias like monophobia. A common side effect is drowsiness, and a rare side effect is hallucinations. Withdrawl effects are uncommon."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.01
color = "#FF8888"
metabolism = 0.01 * REM
data = 0
taste_description = "paper"
taste_description = "duct tape"
goodmessage = list("You feel relaxed.","You feel at ease.","You feel care free.")
badmessage = list("You feel worried.","You feel slight agitation.","You feel nervous.")
worstmessage = list("You worry about the littlest thing...","You feel like you are at risk...","You think you see things...")
suppress_traumas = list(
/datum/brain_trauma/mild/phobia/ = 1,
/datum/brain_trauma/severe/monophobia = 10
/datum/brain_trauma/severe/monophobia = 5
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 5
@@ -729,15 +762,16 @@
id = "paroxetine"
description = "Paroxetine is effective at treating basic phobias while also preventing the body from overheating. Side effects are rare, and include hallucinations. Withdrawl effects are frequent and unsafe."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.01
color = "#AA8866"
metabolism = 0.01 * REM
data = 0
taste_description = "paper"
taste_description = "bandaid"
goodmessage = list("You do not feel the need to worry about simple things.","You feel calm and level-headed.","You feel decent.")
badmessage = list("You worry about the littlest thing.","You feel like you are at risk.","You think you see things.")
worstmessage = list("You start to overreact to sounds and movement...","Your hear dangerous thoughts in your head...","You are really starting to see things...")
messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.75
suppress_traumas = list(
/datum/brain_trauma/mild/phobia/ = 10
/datum/brain_trauma/mild/phobia/ = 5
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 5
@@ -762,16 +796,17 @@
id = "duloxetine"
description = "Duloxetine is effective at treating basic phobias and concussions. A rare side effect is hallucinations. Withdrawl effects are common."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.01
color = "#88FFFF"
metabolism = 0.01 * REM
data = 0
taste_description = "paper"
taste_description = "scotch tape"
goodmessage = list("You feel at ease.","Your mind feels healthy..")
badmessage = list("You worry about the littlest thing.","Your head starts to feel weird...","You think you see things.")
worstmessage = list("You start to overreact to sounds and movement...","Your head feels really weird.","You are really starting to see things...")
messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.75
suppress_traumas = list(
/datum/brain_trauma/mild/concussion = 10,
/datum/brain_trauma/mild/phobia/ = 10
/datum/brain_trauma/mild/concussion = 5,
/datum/brain_trauma/mild/phobia/ = 5
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 5
@@ -793,17 +828,18 @@
id = "venlafaxine"
description = "Venlafaxine is effective at treating basic phobias, monophobia, and stuttering. Side effects are uncommon and include hallucinations. Withdrawl effects are common."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.01
color = "#FF88FF"
metabolism = 0.01 * REM
data = 0
taste_description = "paper"
taste_description = "glue"
goodmessage = list("You feel at ease.","Your mind feels healthy..","You feel unafraid to speak...")
badmessage = list("You worry about the littlest thing.","You think you see things.")
worstmessage = list("You start to overreact to sounds and movement...","You are really starting to see things...")
messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.75
suppress_traumas = list(
/datum/brain_trauma/mild/phobia = 10,
/datum/brain_trauma/mild/stuttering = 5,
/datum/brain_trauma/severe/monophobia = 10
/datum/brain_trauma/mild/phobia = 5,
/datum/brain_trauma/mild/stuttering = 2,
/datum/brain_trauma/severe/monophobia = 5
)
dosage_traumas = list(
/datum/brain_trauma/mild/hallucinations = 10
@@ -825,22 +861,23 @@
id = "risperidone"
description = "Risperidone is a potent antipsychotic medication used to treat schizophrenia, stuttering, speech impediment, monophobia, hallucinations, tourettes, and muscle spasms. Side effects are common and include pacifism. Withdrawl symptoms are dangerous and almost always occur."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.02
color = "#FF4444"
metabolism = 0.02 * REM
data = 0
taste_description = "paper"
taste_description = "cardboard"
goodmessage = list("Your mind feels as one.","You feel comfortable speaking.","Your body feels good.","Your thoughts are pure.")
badmessage = list("You start hearing voices...","You think you see things...","You feel really upset...","You want attention...")
worstmessage = list("You think you start seeing things...","You swear someone inside you spoke to you...","You hate feeling alone...","You feel really upset.")
worstmessage = list("You think you start seeing things...","You swear someone inside you spoke to you...","You hate feeling alone...","You feel really upset...")
messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.5
suppress_traumas = list(
/datum/brain_trauma/severe/split_personality = 10,
/datum/brain_trauma/special/imaginary_friend = 20,
/datum/brain_trauma/mild/stuttering = 5,
/datum/brain_trauma/mild/speech_impediment = 10,
/datum/brain_trauma/severe/monophobia = 10,
/datum/brain_trauma/mild/hallucinations = 10,
/datum/brain_trauma/mild/muscle_spasms = 20,
/datum/brain_trauma/mild/tourettes = 20
/datum/brain_trauma/severe/split_personality = 5,
/datum/brain_trauma/special/imaginary_friend = 10,
/datum/brain_trauma/mild/stuttering = 2,
/datum/brain_trauma/mild/speech_impediment = 5,
/datum/brain_trauma/severe/monophobia = 5,
/datum/brain_trauma/mild/hallucinations = 5,
/datum/brain_trauma/mild/muscle_spasms = 10,
/datum/brain_trauma/mild/tourettes = 10
)
dosage_traumas = list(
/datum/brain_trauma/severe/pacifism = 25
@@ -864,21 +901,22 @@
id = "olanzapine"
description = "Olanzapine is a high-strength, expensive antipsychotic medication used to treat schizophrenia, stuttering, speech impediment, monophobia, hallucinations, tourettes, and muscle spasms. Side effects are common and include pacifism. The medication metabolizes quickly, and withdrawl is dangerous."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.02
color = "#FF8844"
metabolism = 0.02 * REM
data = 0
taste_description = "paper"
taste_description = "paint"
goodmessage = list("Your mind feels as one.","You feel comfortable speaking.","Your body feels good.","Your thoughts are pure.","Your body feels responsive.","You can handle being alone.")
badmessage = list("You start hearing voices...","You think you see things...","You want a friend...")
worstmessage = list("You think you start seeing things...","You swear someone inside you spoke to you...")
messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.5
suppress_traumas = list(
/datum/brain_trauma/severe/split_personality = 5,
/datum/brain_trauma/special/imaginary_friend = 10,
/datum/brain_trauma/mild/stuttering = 2,
/datum/brain_trauma/mild/speech_impediment = 5,
/datum/brain_trauma/severe/monophobia = 5,
/datum/brain_trauma/mild/muscle_spasms = 10,
/datum/brain_trauma/mild/tourettes = 20
/datum/brain_trauma/mild/stuttering = 1,
/datum/brain_trauma/mild/speech_impediment = 2,
/datum/brain_trauma/severe/monophobia = 2,
/datum/brain_trauma/mild/muscle_spasms = 5,
/datum/brain_trauma/mild/tourettes = 10
)
dosage_traumas = list(
/datum/brain_trauma/severe/pacifism = 25
@@ -895,52 +933,15 @@
/datum/reagent/mental/escitalopram = 20
)
/datum/reagent/mental/hextrasenil
name = "Hextrasenil"
id = "hextrasenil"
description = "Hextrasenil is a super-strength, fast-metabolizing, expensive antipsychotic medication intended for the use in criminal rehabilitation that treats tourettes, schizophrenia, hallucinations, and loyalty issues. Side effects include undying loyalty to NanoTrasen and respect for authority. Withdrawl effects include undying hatred towards NanoTrasen."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.04 //Not meant to last a long time.
data = 0
taste_description = "paper"
goodmessage = list("You feel loyal to NanoTrasen. Please take your pills.","You feel the need to contribute to cause of NanoTrasen. Please take your pills.","You wouldn't think about hurting NanoTrasen at all. Please take your pills.","You do not feel the need to express emotion. Please take your pills.","You feel that NanoTrasen has your best interests at heart. Please take your pills.","You respect the Chain of Command. Please take your pills.")
badmessage = list("You start to think if you need these pills...","Do I need these pills?","Should I be taking pills anymore?")
worstmessage = list("You start to realise that the system is corrupt...","NanoTrasen is corrupt...")
suppress_traumas = list(
/datum/brain_trauma/severe/split_personality = 5, //Gotta remove those enemies to nanotrasen.
/datum/brain_trauma/special/imaginary_friend = 5,
/datum/brain_trauma/mild/tourettes = 5
)
dosage_traumas = list(
/datum/brain_trauma/severe/pacifism = 25
)
withdrawal_traumas = list()
/datum/reagent/mental/trisyndicotin
name = "Trisyndicotin"
id = "trisyndicotin"
description = "Trisyndicotin is a super-strength, expensive antipsychotic medication intended for the use in interigation. Side effects include undying hatred to NanoTrasen and disrespect for authority."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.03
data = 0
taste_description = "freedom"
goodmessage = list("You distrust Nanotrasen and their people.","You feel woke.","You have urges to speak out against NanoTrasen.","You feel the need to complain about NanoTrasen on the web.","You feel like things should be better.")
badmessage = list() //Actual Freedom.
worstmessage = list() //Actual Freedom.
suppress_traumas = list(
/datum/brain_trauma/severe/pacifism = 10
)
/datum/reagent/mental/truthserum
name = "Truth serum"
id = "truthserum"
description = "This highly illegal, expensive, military strength truth serum is a must have for secret corporate interrogations. One 50u pill is good for almost 10 minutes of interrogation."
description = "This highly illegal, expensive, military strength truth serum is a must have for secret corporate interrogations. Do not ingest."
reagent_state = LIQUID
color = "#888888"
metabolism = 0.1
metabolism = 0.05 * REM
data = 0
scannable = 0
taste_description = "something"
goodmessage = list("You feel like you have nothing to hide.","You feel compelled to spill your secrets.","You feel like you can trust those around you.")
badmessage = list()
@@ -952,6 +953,7 @@
/datum/brain_trauma/severe/pacifism = 25
)
messagedelay = 30
ingest_mul = 0 //Stomach acid will melt the nanobots
//Things that are not cured by medication:
//Dumbness
@@ -964,6 +966,73 @@
//Discoordination
//Aphasia
/datum/reagent/calomel
name = "Calomel"
id = "calomel"
description = "A highly toxic medicine that quickly purges most chemicals from the bloodstream. Overdose causes bloodloss and more toxin buildup, however works twice as fast."
color = "#222244"
metabolism = 0.5 * REM
overdose = 30
scannable = 1
taste_description = "thick salt"
reagent_state = SOLID
/datum/reagent/calomel/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/is_overdosed = overdose && (dose > overdose)
if(is_overdosed)
removed *= 2
var/amount_to_purge = removed*4 //Every unit removes 4 units of other chemicals
var/amount_purged = 0
for(var/datum/reagent/selected in M.reagents.reagent_list)
if(selected == src)
continue
if(selected.id == "blood" && !is_overdosed)
continue
var/local_amount = min(amount_to_purge, selected.volume)
M.reagents.remove_reagent(selected.id, local_amount)
amount_to_purge -= local_amount
amount_purged += local_amount
if(amount_to_purge <= 0)
break
M.adjustToxLoss(removed + amount_purged*0.5) //15u has the potential to do 15 + 30 toxin damage in 30 seconds
. = ..()
/datum/reagent/pulmodeiectionem
name = "Pulmodeiectionem"
id = "pulmodeiectionem"
description = "A powdery chemical that damages the mucus lining in the the main broncus and the trachea, allowing particles to easily escape the lungs. Only works when inhaled. May cause long term damage to the lungs, and oxygen deprevation."
color = "#550055"
metabolism = 2 * REM
overdose = 10
scannable = 1
taste_description = "coarse dust"
reagent_state = SOLID
/datum/reagent/pulmodeiectionem/affect_breathe(var/mob/living/carbon/human/H, var/alien, var/removed)
if(istype(H))
var/obj/item/organ/L = H.internal_organs_by_name["lungs"]
if(istype(L) && !L.robotic && !L.is_broken())
var/amount_to_purge = removed*5 //Every unit removes 5 units of other chemicals.
for(var/datum/reagent/selected in H.breathing.reagent_list)
if(selected == src)
continue
var/local_amount = min(amount_to_purge, selected.volume)
H.breathing.remove_reagent(selected.id, local_amount)
amount_to_purge -= local_amount
if(amount_to_purge <= 0)
break
H.adjustOxyLoss(2*removed) //Every unit deals 2 oxy damage
if(prob(75)) //Cough uncontrolably
H.emote("cough")
L.take_damage(0.2*removed) //Every 5 units deals 1 lung damage, absolute worse case scenario.
. = ..()
/datum/reagent/rezadone
name = "Rezadone"
id = "rezadone"
@@ -368,30 +368,6 @@
if(volume >= 1)
T.wet_floor(2)
/datum/reagent/cardox
name = "Cardox"
id = "cardox"
description = "Cardox is an expensive, NanoTrasen designed cleaner intended to eliminate liquid phoron stains from suits."
reagent_state = LIQUID
color = "#EEEEEE"
taste_description = "cherry"
/datum/reagent/toxin/cardox/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
.. ()
if(alien == IS_VAURCA)
affect_blood(M, alien, removed * 0.25)
/datum/reagent/cardox/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VAURCA)
M.adjustToxLoss(removed * 5)
else
M.adjustToxLoss(removed * 2)
/datum/reagent/cardox/touch_turf(var/turf/T)
if(volume >= 1)
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(10, 20))
/datum/reagent/silicate
name = "Silicate"
id = "silicate"
@@ -47,20 +47,33 @@
return
..()
/datum/reagent/toxin/panotoxin
name = "Panotoxin"
id = "panotoxin"
description = "A strange poison from the strange panocelium mushroom that causes intense pain when injected."
reagent_state = LIQUID
color = "#008844"
strength = 0
taste_description = "stinging needles"
/datum/reagent/toxin/panotoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustHalLoss(removed*15)
/datum/reagent/toxin/phoron
name = "Phoron"
id = "phoron"
description = "Phoron in its liquid form."
description = "Phoron in its liquid form. Twice as potent when breathed in."
reagent_state = LIQUID
color = "#9D14DB"
strength = 30
touch_met = 5
taste_mult = 1.5
breathe_mul = 2
/datum/reagent/toxin/phoron/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.species.has_organ["filtration bit"] && alien == IS_VAURCA)
if(alien == IS_VAURCA && H.species.has_organ["filtration bit"])
metabolism = REM * 20 //vaurcae metabolise phoron faster than other species - good for them if their filter isn't broken.
var/obj/item/organ/vaurca/filtrationbit/F = H.internal_organs_by_name["filtration bit"]
if(isnull(F))
@@ -80,6 +93,9 @@
else
..()
/datum/reagent/toxin/phoron/touch_mob(var/mob/living/L, var/amount)
if(istype(L))
L.adjust_fire_stacks(amount / 5)
@@ -97,6 +113,40 @@
T.assume_gas("phoron", volume, T20C)
remove_self(volume)
/datum/reagent/toxin/cardox
name = "Cardox"
id = "cardox"
description = "Cardox is an mildly toxic, expensive, NanoTrasen designed cleaner intended to eliminate liquid phoron stains from suits."
reagent_state = LIQUID
color = "#EEEEEE"
taste_description = "cherry"
conflicting_reagent = /datum/reagent/toxin/phoron
strength = 1
/datum/reagent/toxin/cardox/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
.. ()
if(alien == IS_VAURCA)
affect_blood(M, alien, removed * 0.25)
/datum/reagent/toxin/cardox/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VAURCA)
M.adjustToxLoss(removed * strength*2)
else
M.adjustToxLoss(removed * strength)
/datum/reagent/toxin/cardox/affect_conflicting(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagent/conflicting)
var/amount = min(removed, conflicting.volume)
holder.remove_reagent(conflicting.id, amount)
/datum/reagent/toxin/cardox/touch_turf(var/turf/T, var/amount)
if(amount >= 1)
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(amount*10)
var/datum/gas_mixture/environment = T.return_air()
environment.adjust_gas("phoron",-amount*10)
/datum/reagent/toxin/cyanide //Fast and Lethal
name = "Cyanide"
id = "cyanide"
@@ -251,16 +301,6 @@
removed *= M.reagent_permeability()
affect_blood(M, alien, removed*0.5)
/datum/reagent/acid/polyacid
name = "Polytrinic acid"
id = "pacid"
description = "Polytrinic acid is a an extremely corrosive chemical substance."
reagent_state = LIQUID
color = "#8E18A9"
power = 6
meltdose = 4
taste_description = "acid"
/datum/reagent/lexorin
name = "Lexorin"
id = "lexorin"
@@ -333,12 +373,14 @@
/datum/reagent/soporific
name = "Soporific"
id = "stoxin"
description = "An effective hypnotic used to treat insomnia."
description = "An effective hypnotic used to treat insomnia, can act as a sedative. Lasts three times longer when inhaled."
reagent_state = LIQUID
color = "#009CA8"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE
taste_description = "bitterness"
breathe_met = 0.33
var/total_strength = 0
/datum/reagent/soporific/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/mob/living/carbon/human/H = M
@@ -360,12 +402,13 @@
/datum/reagent/chloralhydrate
name = "Chloral Hydrate"
id = "chloralhydrate"
description = "A powerful sedative."
description = "A powerful sedative. Lasts three times longer when inhaled."
reagent_state = SOLID
color = "#000067"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE * 0.5
taste_description = "bitterness"
breathe_met = 0.33
/datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/mob/living/carbon/human/H = M
@@ -401,13 +444,15 @@
/datum/reagent/space_drugs
name = "Space drugs"
id = "space_drugs"
description = "An illegal chemical compound used as drug."
description = "An illegal chemical compound used as drug. Lasts twice as long when inhaled."
reagent_state = LIQUID
color = "#60A584"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE
taste_description = "bitterness"
taste_mult = 0.4
breathe_mul = 2
breathe_met = REM * 0.25
/datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/mob/living/carbon/human/H = M
+41 -40
View File
@@ -516,6 +516,42 @@
required_reagents = list("phoron" = 1, "hydrazine" = 1, "ammonia" = 1)
result_amount = 3
/datum/chemical_reaction/calomel
name = "Calomel"
id = "calomel"
result = "calomel"
required_reagents = list("mercury" = 1, "sodiumchloride" = 1, "ammonia" = 1)
result_amount = 3
/datum/chemical_reaction/cardox
name = "Cardox"
id = "cardox"
result = "cardox"
required_reagents = list("platinum" = 1, "carbon" = 1, "sterilizine" = 1)
result_amount = 3
/datum/chemical_reaction/cardox_removal
name = "Cardox Removal"
id = "cardox_removal"
result = "carbon"
required_reagents = list("cardox" = 0.1, "phoron" = 1)
result_amount = 0
/datum/chemical_reaction/koispasteclean
name = "Filtered K'ois"
id = "koispasteclean"
result = "koispasteclean"
required_reagents = list("koispaste" = 2,"cardox" = 0.1)
catalysts = list("cardox" = 5)
result_amount = 1
/datum/chemical_reaction/pulmodeiectionem
name = "Pulmodeiectionem"
id = "pulmodeiectionem"
result = "pulmodeiectionem"
required_reagents = list("calomel" = 1, "lexorin" = 1)
result_amount = 2
//Mental Medication
/datum/chemical_reaction/methylphenidate
@@ -588,20 +624,6 @@
required_reagents = list("mindbreaker" = 1, "space_drugs" = 1, "silicon" = 1)
result_amount = 3
/datum/chemical_reaction/hextrasenil
name = "Hextrasenil"
id = "hextrasenil"
result = "hextrasenil"
required_reagents = list("truthserum" = 1, "risperidone" = 1, "mindbreaker" = 1)
result_amount = 3
/datum/chemical_reaction/trisyndicotin
name = "Trisyndicotin"
id = "trisyndicotin"
result = "trisyndicotin"
required_reagents = list("truthserum" = 1, "risperidone" = 1, "space_drugs" = 1)
result_amount = 3
/datum/chemical_reaction/truthserum
name = "Truthserum"
id = "truthserum"
@@ -609,26 +631,11 @@
required_reagents = list("mindbreaker" = 1, "synaptizine" = 1, "phoron" = 0.1)
result_amount = 2
/datum/chemical_reaction/cardox
name = "Cardox"
id = "cardox"
result = "cardox"
required_reagents = list("platinum" = 1, "carbon" = 1, "sterilizine" = 1)
result_amount = 3
/datum/chemical_reaction/cardox_removal
name = "Cardox Removal"
id = "cardox_removal"
result = "carbon"
required_reagents = list("cardox" = 0.1, "phoron" = 1)
result_amount = 0
/datum/chemical_reaction/koispasteclean
name = "Filtered K'ois"
id = "koispasteclean"
result = "koispasteclean"
required_reagents = list("koispaste" = 2,"cardox" = 0.1)
catalysts = list("cardox" = 5)
/datum/chemical_reaction/feartoxin
name = "Feartoxin"
id = "feartoxin"
result = "feartoxin"
required_reagents = list("mindbreaker" = 1, "synaptizine" = 1, "space_drugs" = 1)
result_amount = 1
/* Solidification */
@@ -1446,12 +1453,6 @@
Z.loc = get_turf(holder.my_atom)
Z.announce_to_ghosts()
/*
====================
Food
@@ -0,0 +1,189 @@
//Inhalers
//Just like hypopsray code
/obj/item/weapon/reagent_containers/inhaler
name = "autoinhaler"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel."
icon = 'icons/obj/syringe.dmi'
item_state = "autoinjector"
icon_state = "inhaler"
unacidable = 1
amount_per_transfer_from_this = 5
volume = 5
w_class = 2
possible_transfer_amounts = null
flags = OPENCONTAINER
slot_flags = SLOT_BELT
/obj/item/weapon/reagent_containers/inhaler/attack(mob/living/M as mob, mob/user as mob)
if(!reagents.total_volume)
to_chat(user,"<span class='warning'>\The [src] is empty.</span>")
return
var/mob/living/carbon/human/H = M
if (!istype(H))
return
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(10))
to_chat(user,"<span class='danger'>Your hand slips from clumsiness!</span>")
eyestab(M,user)
if(M.reagents)
var/contained = reagentlist()
var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_TOUCH)
admin_inject_log(user, M, src, contained, trans)
playsound(src.loc, 'sound/items/stimpack.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] accidentally sticks the [src] in [M]'s eyes!</span>","<span class='notice'>You accidentally stick the [src] in [M]'s eyes!</span>")
to_chat(user,"<span class='notice'>[trans] units injected. [reagents.total_volume] units remaining in \the [src].</span>")
return
if (!user.IsAdvancedToolUser())
to_chat(user,"<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(user == M)
if(!M.can_eat(src))
return
else
if(!M.can_force_feed(user, src))
return
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.do_attack_animation(M)
if(user == M)
user.visible_message("<span class='notice'>[user] injects themselves with the [src]</span>","<span class='notice'>You stick the [src] in your mouth and press the injection button</span>")
else
user.visible_message("<span class='warning'>[user] attempts to administer \the [src] to [M]...</span>","<span class='notice'>You attempt to administer \the [src] to [M]...</span>")
if (!do_after(user, 1 SECONDS, act_target = M))
to_chat(user,"<span class='notice'>You and the target need to be standing still in order to inject \the [src].</span>")
return
user.visible_message("<span class='notice'>[user] injects [M] with the [src].</span>","<span class='notice'>You stick the [src] in [M]'s mouth and press the injection button</span>")
if(M.reagents)
var/contained = reagentlist()
var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BREATHE)
admin_inject_log(user, M, src, contained, trans)
playsound(src.loc, 'sound/items/stimpack.ogg', 50, 1)
to_chat(user,"<span class='notice'>[trans] units injected. [reagents.total_volume] units remaining in \the [src].</span>")
return
/obj/item/weapon/reagent_containers/inhaler/attack(mob/M as mob, mob/user as mob)
..()
if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
flags &= ~OPENCONTAINER
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/update_icon()
if(reagents.total_volume > 0)
icon_state = "[initial(icon_state)]1"
else
icon_state = "[initial(icon_state)]0"
/obj/item/weapon/reagent_containers/inhaler/examine(mob/user)
..(user)
if(reagents && reagents.reagent_list.len)
user << "<span class='notice'>It is currently loaded.</span>"
else
user << "<span class='notice'>It is spent.</span>"
/obj/item/weapon/reagent_containers/inhaler/dexalin
name = "autoinhaler (dexalin)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains dexalin."
Initialize()
. =..()
reagents.add_reagent("dexalin", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/peridaxon
name = "autoinhaler (peridaxon)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains peridaxon."
Initialize()
. =..()
reagents.add_reagent("peridaxon", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/hyperzine
name = "autoinhaler (hyperzine)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains hyperzine."
Initialize()
. =..()
reagents.add_reagent("hyperzine", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/phoron
name = "autoinhaler (phoron)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains phoron."
Initialize()
. =..()
reagents.add_reagent("phoron", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/phoron_special
name = "vaurca autoinhaler (phoron)"
desc = "A strange device that contains some sort of heavy-duty bag and mouthpiece combo."
icon_state = "anthaler"
volume = 10
Initialize()
. =..()
reagents.add_reagent("phoron", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/soporific
name = "autoinhaler (soporific)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains soporific."
icon_state = "so_inhaler"
volume = 10
Initialize()
. =..()
reagents.add_reagent("stoxin", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/space_drugs
name = "autoinhaler (space drugs)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains space drugs."
Initialize()
. =..()
reagents.add_reagent("space_drugs", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/ammonia
name = "autoinhaler (ammonia)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains ammonia."
Initialize()
. =..()
reagents.add_reagent("ammonia", volume)
update_icon()
return
/obj/item/weapon/reagent_containers/inhaler/pulmodeiectionem
name = "autoinhaler (pulmodeiectionem)"
desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one contains pulmodeiectionem."
Initialize()
. =..()
reagents.add_reagent("pulmodeiectionem", volume)
update_icon()
return
@@ -0,0 +1,201 @@
//Advanced Inhalers
//Just like hypopsray code
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge
name = "small inhaler cartridge"
desc = "Fill this when chemicals and attach this to personal inhalers. Contains enough areosol for 15u of reagents. The container must be activated for aerosol reagents to mix for the use in inhalers."
icon = 'icons/obj/syringe.dmi'
item_state = "buildpipe"
icon_state = "pi_cart_small"
volume = 15
w_class = 2
unacidable = 1
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10,15)
flags = OPENCONTAINER
slot_flags = SLOT_BELT
origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2)
matter = list(DEFAULT_WALL_MATERIAL = 250)
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/examine(var/mob/user)
if(!..(user, 2))
return
if(is_open_container())
if(reagents && reagents.reagent_list.len)
to_chat(user,"<span class='notice'>It contains [round(reagents.total_volume, accuracy)] units of non-aerosol mix.</span>")
else
to_chat(user,"<span class='notice'>It is empty.</span>")
else
to_chat(user,"<span class='notice'>The reagents are secured in the aerosol mix.</span>")
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/attack_self(mob/user as mob)
if(is_open_container())
to_chat(user,"<span class='notice'>With a quick twist of the lid, you secure the reagents inside \the [src].</span>")
flags ^= OPENCONTAINER
else
to_chat(user,"<span class='notice'>\The reagents inside [src] are already secured.</span>")
return
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large
name = "large inhaler cartridge"
icon_state = "pi_cart_medium"
volume = 30
w_class = 3
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,30)
origin_tech = list(TECH_BIO = 4, TECH_MATERIAL = 4)
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/bluespace
name = "bluespace inhaler cartridge"
icon_state = "pi_cart_large"
volume = 60
w_class = 3
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,30,60)
origin_tech = list(TECH_BLUESPACE = 2, TECH_BIO = 6, TECH_MATERIAL = 6)
/obj/item/weapon/personal_inhaler
name = "inhaler"
desc = "A safe way to administer small amounts of drugs into the lungs by trained personnel."
icon = 'icons/obj/syringe.dmi'
item_state = "buildpipe"
icon_state = "pi"
w_class = 2
slot_flags = SLOT_BELT
var/obj/item/weapon/reagent_containers/stored_cartridge
var/transfer_amount = 5
origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2)
var/eject_when_empty = FALSE
/obj/item/weapon/personal_inhaler/examine(var/mob/user)
if(!..(user, 2))
return
if(stored_cartridge)
to_chat(user,"<span class='notice'>\The [stored_cartridge] is attached to \the [src].</span>")
/obj/item/weapon/personal_inhaler/update_icon()
cut_overlays()
if(stored_cartridge)
add_overlay(stored_cartridge.icon_state)
/obj/item/weapon/personal_inhaler/attack_self(mob/user as mob)
if(stored_cartridge)
user.put_in_hands(stored_cartridge)
to_chat(user,"<span class='warning'>You remove \the [stored_cartridge] from \the [src].</span>")
stored_cartridge.update_icon()
stored_cartridge = null
update_icon()
/obj/item/weapon/personal_inhaler/attack(mob/living/M as mob, mob/user as mob)
var/mob/living/carbon/human/H = M
if (!istype(H))
return
if(!stored_cartridge)
to_chat(user,"<span class='warning'>\The [src] has no cartridge installed!</span>")
return
if(!stored_cartridge.reagents || !stored_cartridge.reagents.total_volume)
to_chat(user,"<span class='warning'>\The [src]'s cartridge is empty!</span>")
return
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(10))
to_chat(user,"<span class='danger'>Your hand slips from clumsiness!</span>")
eyestab(M,user)
if(M.reagents)
var/contained = stored_cartridge.reagentlist()
var/trans = stored_cartridge.reagents.trans_to_mob(M, transfer_amount, CHEM_TOUCH)
admin_inject_log(user, M, src, contained, trans)
user.visible_message("<span class='notice'>[user] accidentally sticks \the [src] in [M]'s eye and presses the injection button!</span>","<span class='notice'>You accidentally stick the [src] in [M]'s eye and press the injection button!</span>")
to_chat(user,"<span class='notice'>[trans] units injected. [reagents.total_volume] units remaining in \the [src].</span>")
playsound(src.loc, 'sound/items/stimpack.ogg', 50, 1)
if(eject_when_empty)
to_chat(user,"<span class='notice'>\The [stored_cartridge] automatically ejects from \the [src].</span>")
stored_cartridge.forceMove(user.loc)
stored_cartridge.update_icon()
stored_cartridge = null
update_icon()
return
if (!user.IsAdvancedToolUser())
to_chat(user,"<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(user == H && !H.can_eat(src))
return
else if(!H.can_force_feed(user, src))
return
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.do_attack_animation(M)
if(user == M)
user.visible_message("<span class='notice'>[user] sticks \the [src] in their mouth and presses the injection button.</span>","<span class='notice'>You stick \the [src] in your mouth and press the injection button</span>")
else
user.visible_message("<span class='warning'>[user] attempts to administer \the [src] to [M]...</span>","<span class='notice'>You attempt to administer \the [src] to [M]...</span>")
if (!do_after(user, 1 SECONDS, act_target = M))
to_chat(user,"<span class='notice'>You and \the [M] need to be standing still in order to inject \the [src].</span>")
return
user.visible_message("<span class='notice'>[user] sticks \the [src] in [M]'s mouth and presses the injection button.</span>","<span class='notice'>You stick \the [src] in [M]'s mouth and press the injection button</span>")
if(M.reagents)
var/contained = stored_cartridge.reagentlist()
var/trans = stored_cartridge.reagents.trans_to_mob(M, transfer_amount, CHEM_BREATHE)
admin_inject_log(user, M, src, contained, trans)
to_chat(user,"<span class='notice'>[trans] units injected. [reagents.total_volume] units remaining in \the [src].</span>")
playsound(src.loc, 'sound/items/stimpack.ogg', 50, 1)
if(eject_when_empty)
to_chat(user,"<span class='notice'>\The [stored_cartridge] automatically ejects from \the [src].</span>")
stored_cartridge.forceMove(user.loc)
stored_cartridge.update_icon()
stored_cartridge = null
update_icon()
return
/obj/item/weapon/personal_inhaler/attackby(var/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/cartridge as obj, var/mob/user as mob)
if(istype(cartridge))
if(src.stored_cartridge)
to_chat(user,"<span class='notice'>\The [src] already has a cartridge.</span>")
return
if(cartridge.is_open_container())
to_chat(user,"<span class='notice'>\The [cartridge] needs to be secured first.</span>")
return
user.remove_from_mob(cartridge)
src.stored_cartridge = cartridge
cartridge.loc = src
update_icon()
return
. = ..()
/obj/item/weapon/personal_inhaler/combat
name = "combat inhaler"
desc = "A large, bulky inhaler design that injects the entire contents of the loaded cartridge via an aerosol system in a single button press."
icon_state = "pi_combat"
w_class = 3
transfer_amount = 60
origin_tech = list(TECH_BIO = 4, TECH_MATERIAL = 4, TECH_ENGINEERING = 4)
eject_when_empty = TRUE
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large/hyperzine
name = "large inhaler cartridge (hyperzine)"
Initialize()
. =..()
reagents.add_reagent("hyperzine", 30)
flags ^= OPENCONTAINER
update_icon()
return
/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large/inaprovaline
name = "large inhaler cartridge (inaprovaline)"
Initialize()
. =..()
reagents.add_reagent("inaprovaline", 30)
flags ^= OPENCONTAINER
update_icon()
return
@@ -170,22 +170,6 @@
Initialize()
. = ..()
reagents.add_reagent("escitalopram", 15)
/obj/item/weapon/reagent_containers/pill/hextrasenil
name = "Hextrasenil pill"
desc = "Don't forget to take your pills."
icon_state = "pill6"
Initialize()
. = ..()
reagents.add_reagent("hextrasenil", 30)
/obj/item/weapon/reagent_containers/pill/trisyndicotin
name = "Trisyndicotin pill"
desc = "For when you need a little convincing."
icon_state = "pill4"
Initialize()
. = ..()
reagents.add_reagent("trisyndicotin", 30)
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
@@ -339,12 +339,21 @@
desc = "Contains aggressive drugs meant for torture."
Initialize()
. = ..()
reagents.add_reagent("space_drugs", 5)
reagents.add_reagent("mindbreaker", 5)
reagents.add_reagent("cryptobiolin", 5)
reagents.add_reagent("panotoxin", 5)
reagents.add_reagent("mindbreaker", 10)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/calomel
name = "Syringe (calomel)"
desc = "Contains purging medicine."
Initialize()
. = ..()
reagents.add_reagent("calomel", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral
Initialize()
. = ..()