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 07:39:56 -07:00
committed by Erki
parent e388235cef
commit aad698be53
55 changed files with 1277 additions and 473 deletions
+34 -3
View File
@@ -158,6 +158,7 @@ var/list/global/random_stock_uncommon = list(
"circuitboards" = 3,
"jetpack" = 3,
"xenocostume" = 1,
"inhaler" = 1,
"advwelder" = 2,
"sord" = 1,
"policebaton" = 1.5,
@@ -705,6 +706,7 @@ var/list/global/random_stock_large = list(
//A random scanning device, most are useless
var/list/possible = list(
/obj/item/device/healthanalyzer = 5,
/obj/item/device/breath_analyzer = 1,
/obj/item/device/analyzer = 0.5,
/obj/item/device/mass_spectrometer = 0.5,
/obj/item/device/mass_spectrometer/adv = 0.5,
@@ -973,11 +975,11 @@ var/list/global/random_stock_large = list(
new type(L)
if ("cleanernades")
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
if (prob(50))
if(prob(90))
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
else
new /obj/item/weapon/grenade/chem_grenade/large/phoroncleaner(L)
if ("mining")
if (prob(50))
@@ -1524,6 +1526,35 @@ var/list/global/random_stock_large = list(
if ("contraband")
new /obj/random/contraband(L)
if ("inhaler")
if(prob(33))
if(prob(10))
new/obj/item/weapon/storage/box/inhalers_large(src)
else
new /obj/item/weapon/storage/box/inhalers(src)
else
var/number = rand(2,3)
var/list/inhalers = list(
/obj/item/weapon/reagent_containers/inhaler/dexalin = 8,
/obj/item/weapon/reagent_containers/inhaler/hyperzine = 2,
/obj/item/weapon/reagent_containers/inhaler/phoron = 2,
/obj/item/weapon/reagent_containers/inhaler/soporific = 1,
/obj/item/weapon/reagent_containers/inhaler/space_drugs = 3
)
while(number > 0)
var/type = pickweight(inhalers)
var/obj/item/weapon/reagent_containers/inhaler/spawned = new type(L)
if(prob(10) || istype(spawned,/obj/item/weapon/reagent_containers/inhaler/space_drugs))
spawned.name = "unlabeled inhaler"
spawned.desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one is unlabeled."
number -= 1
if(prob(33))
new /obj/item/device/breath_analyzer(L)
//Large items go below here
//=============================================================
//=============================================================
@@ -170,7 +170,7 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils, /obj/item/device/breath_analyzer)
req_access = list()
req_one_access = list()
@@ -197,7 +197,7 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller )
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller, /obj/item/device/breath_analyzer )
req_access = list()
req_one_access = list()
@@ -68,7 +68,7 @@
slot_l_hand_str = "medical_hardsuit",
slot_r_hand_str = "medical_hardsuit"
)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical, /obj/item/device/breath_analyzer )
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50)
//Security
+2 -2
View File
@@ -25,7 +25,7 @@
icon_state = "surgeon"
item_state = "surgeon"
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen, /obj/item/device/breath_analyzer)
//Captain
/obj/item/clothing/suit/captunic
@@ -247,7 +247,7 @@
icon_closed = "fr_jacket"
blood_overlay_type = "armor"
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen, /obj/item/device/breath_analyzer)
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/toggle/fr_jacket/ems
+1 -1
View File
@@ -7,7 +7,7 @@
icon_closed = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = UPPER_TORSO|ARMS
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper, /obj/item/device/breath_analyzer)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
/obj/item/clothing/suit/storage/toggle/labcoat/red
+18 -1
View File
@@ -513,7 +513,7 @@
name = "amanita"
seed_name = "fly amanita"
display_name = "fly amanita mushrooms"
mutants = list("destroyingangel","plastic")
mutants = list("destroyingangel","plastic","panocelium")
chems = list("nutriment" = list(1), "amatoxin" = list(3,3), "psilocybin" = list(1,25))
/datum/seed/mushroom/poison/setup_traits()
@@ -543,7 +543,24 @@
set_trait(TRAIT_PRODUCT_COLOUR,"#EDE8EA")
set_trait(TRAIT_PLANT_COLOUR,"#E6D8DD")
set_trait(TRAIT_PLANT_ICON,"mushroom5")
/datum/seed/mushroom/poison/panocelium
name = "panocelium"
seed_name = "panocelium"
display_name = "panocelium mushrooms"
mutants = null
chems = list("nutriment" = list(1,50), "panotoxin" = list(10,3), "psilocybin" = list(1,25))
/datum/seed/mushroom/poison/panocelium/setup_traits()
..()
set_trait(TRAIT_MATURATION,12)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_PRODUCT_ICON,"mushroom6")
set_trait(TRAIT_PRODUCT_COLOUR,"#88FFFF")
set_trait(TRAIT_PLANT_COLOUR,"#88FFFF")
set_trait(TRAIT_PLANT_ICON,"mushroom6")
/datum/seed/mushroom/towercap
name = "towercap"
seed_name = "tower cap"
+3
View File
@@ -165,6 +165,9 @@ var/global/list/plant_seed_sprites = list()
/obj/item/seeds/amanitamycelium
seed_type = "amanita"
/obj/item/seeds/panocelium
seed_type = "panocelium"
/obj/item/seeds/angelmycelium
seed_type = "destroyingangel"
-6
View File
@@ -597,12 +597,6 @@
/datum/reagent/mental/truthserum
value = 8
/datum/reagent/mental/hextrasenil
value = 12
/datum/reagent/mental/trisyndicotin
value = 16
/datum/reagent/mental/nicotine
value = 2
@@ -27,7 +27,7 @@
//the second is the message in question.
var/last_taste_time = 0
var/last_taste_text = ""
var/last_smell_time = 0
var/last_smell_text = ""
@@ -649,7 +649,7 @@
message = "buzzes."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 1
if("vomit")
if (!check_has_mouth(src))
src << "<span class='warning'>You are unable to vomit.</span>"
@@ -29,7 +29,7 @@
log_debug("Organ [DEBUG_REF(src)] was not properly removed from its parent!")
internal_organs -= I
continue
I.process()
handle_stance()
@@ -173,3 +173,7 @@
var/list/all_bits = internal_organs|organs
for(var/obj/item/organ/O in all_bits)
O.set_dna(dna)
/mob/living/carbon/human/proc/get_blood_alcohol()
return round(intoxication/max(vessel.get_reagent_amount("blood"),1),0.01)
@@ -1,25 +1,9 @@
#define AE_DIZZY 5
#define AE_BUZZED_MIN 6
#define AE_SLURRING 15
#define AE_CONFUSION 18
#define AE_CLUMSY 22
#define AE_BUZZED_MAX 24
#define AE_BLURRING 25
#define AE_VOMIT 40
#define AE_DROWSY 55
#define AE_OVERDOSE 70
#define AE_BLACKOUT 80
#define BASE_DIZZY 100
#define ALCOHOL_FILTRATION_RATE 0.015//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
#define BASE_VOMIT_CHANCE 2
#define VOMIT_CHANCE_SCALE 0.2//An extra 1% for every 5 units over the vomiting threshold
var/mob/living/carbon/human/alcohol_clumsy = 0
//This proc handles the effects of being intoxicated. Removal of intoxication is done elswhere: By the liver, in organ_internal.dm
/mob/living/carbon/human/proc/handle_intoxication()
var/SR = species.ethanol_resistance
if (SR == -1)
//This species can't get drunk, how did we even get here?
@@ -37,58 +21,72 @@ var/mob/living/carbon/human/alcohol_clumsy = 0
sleeping = 0
//Many of these parameters normally tick down in life code, but some parts of that code don't run in godmode, so this prevents a BST being stuck with blurred vision
if(intoxication > AE_DIZZY*SR) // Early warning
var/bac = get_blood_alcohol()
if(bac > INTOX_BUZZED*SR && bac < INTOX_MUSCLEIMP*SR && !(locate(/datum/modifier/buzzed) in modifiers))
to_chat(src,"<span class='notice'>You feel buzzed.</span>")
add_modifier(/datum/modifier/buzzed, MODIFIER_CUSTOM)
if(bac > INTOX_JUDGEIMP*SR)
if (dizziness == 0)
src << "<span class='notice'>The room starts spinning!</span>"
var/target_dizziness = min(1000,(BASE_DIZZY + ((intoxication - AE_DIZZY*SR)*10)/SR))
make_dizzy(target_dizziness - dizziness) // We will repeatedly set our target dizziness to a desired value based on intoxication level
to_chat(src,"<span class='notice'>You feel a little tipsy.</span>")
var/target_dizziness = BASE_DIZZY + ((bac - INTOX_JUDGEIMP*SR)*DIZZY_ADD_SCALE*100)
make_dizzy(target_dizziness - dizziness)
if(intoxication > AE_SLURRING*SR) // Slurring
slurring = max(slurring, 30)
if(bac > INTOX_MUSCLEIMP*SR)
slurring = max(slurring, 25)
if (!(locate(/datum/modifier/drunk) in modifiers))
to_chat(src,"<span class='notice'>You feel drunk!</span>")
add_modifier(/datum/modifier/drunk, MODIFIER_CUSTOM)
if(intoxication > AE_CONFUSION*SR) // Confusion - walking in random directions
if(bac > INTOX_REACTION*SR)
if (confused == 0)
src << "<span class='notice'>You feel unsteady on your feet!</span>"
confused = max(confused, 20)
//Make the drinker temporarily clumsy if intoxication is high enough
//We use a var to track if alcohol caused it, we won't add nor remove it if the drinker was already clumsy from some other source
if(intoxication > AE_CLUMSY*SR)
to_chat(src,"<span class='warning'>You feel uncoordinated and unsteady on your feet!</span>")
confused = max(confused, 10)
slurring = max(slurring, 50)
if (!alcohol_clumsy && !(CLUMSY in mutations))
src << "<span class='notice'>You feel a bit clumsy and uncoordinated.</span>"
mutations.Add(CLUMSY)
alcohol_clumsy = 1
else //Remove it if intoxication drops too low. We'll also have another check to remove it in life.dm
if (alcohol_clumsy)
src << "<span class='notice'>You feel more sober and steady</span>"
mutations.Remove(CLUMSY)
alcohol_clumsy = 0
else if (alcohol_clumsy)
to_chat(src,"<span class='notice'>You feel more sober and steady.</span>")
mutations.Remove(CLUMSY)
alcohol_clumsy = 0
if(intoxication > AE_BLURRING*SR) // Blurry vision
if (prob(10))//blurry vision effect is annoying, so nerfing it
eye_blurry = max(eye_blurry, 2)
adjustBrainLoss(1, 15)
if(intoxication > AE_DROWSY*SR) // Drowsyness - periodically falling asleep
drowsyness = max(drowsyness, 20)
if(intoxication > AE_VOMIT*SR)//Vomiting, the body's natural defense mechanism against poisoning.
if (life_tick % 4 == 1)//Only process vomit chance periodically
var/chance = BASE_VOMIT_CHANCE + ((intoxication - AE_VOMIT)*VOMIT_CHANCE_SCALE)
if(bac > INTOX_VOMIT*SR)
slurring = max(slurring, 75)
if (life_tick % 4 == 1)
var/chance = BASE_VOMIT_CHANCE + ((bac - INTOX_VOMIT*SR)*VOMIT_CHANCE_SCALE*100)
if (prob(chance))
delayed_vomit()
add_chemical_effect(CE_ALCOHOL_TOXIC, 1)
if(intoxication > AE_OVERDOSE*SR) // Toxic dose
add_chemical_effect(CE_ALCOHOL_TOXIC, 1)
adjustBrainLoss(0.4, 55)
if(bac > INTOX_BALANCE*SR)
slurring = max(slurring, 100)
if (life_tick % 4 == 1 && !lying && !buckled && prob(10))
src.visible_message("<span class='warning'>[src] loses balance and falls to the ground!</span>","<span class='warning'>You lose balance and fall to the ground!</span>")
Paralyse(3 SECONDS)
if(bac > INTOX_CONSCIOUS*SR)
slurring = max(slurring, 90)
src.visible_message("<span class='danger'>[src] loses consciousness!</span>","<span class='danger'>You lose consciousness!</span>")
paralysis = max(paralysis, 60 SECONDS)
sleeping = max(sleeping, 60 SECONDS)
adjustBrainLoss(5,30)
else if(bac > INTOX_BLACKOUT*SR)
slurring = max(slurring, 80)
src.visible_message("<span class='danger'>[src] blackouts!</span>","<span class='danger'>You blackout!</span>")
paralysis = max(paralysis, 20 SECONDS)
sleeping = max(sleeping, 20 SECONDS)
adjustBrainLoss(3,10)
else if(prob(10))
slurring = max(slurring, 70)
to_chat(src,"<span class='warning'>You decide that you like the ground and spend a few seconds to rest.</span>")
sleeping = max(sleeping, 6 SECONDS)
adjustBrainLoss(1,5)
if(intoxication > AE_BLACKOUT*SR) // Pass out
paralysis = max(paralysis, 20)
sleeping = max(sleeping, 30)
adjustBrainLoss(0.4, 55)
if( intoxication >= AE_BUZZED_MIN && intoxication <= AE_BUZZED_MAX && !(locate(/datum/modifier/buzzed) in modifiers))
add_modifier(/datum/modifier/buzzed, MODIFIER_CUSTOM)
if (bac > INTOX_DEATH*SR && !src.reagents.has_reagent("ethylredoxrazine")) //Death usually occurs here
add_chemical_effect(CE_ALCOHOL_TOXIC, 10)
adjustOxyLoss(3,100)
adjustBrainLoss(1,50)
//Pleasant feeling from being slightly drunk
@@ -98,36 +96,50 @@ var/mob/living/carbon/human/alcohol_clumsy = 0
/datum/modifier/buzzed/activate()
..()
if (ishuman(target))
var/mob/living/carbon/human/H = target
var/mob/living/carbon/human/H = target
if(istype(H))
H.move_delay_mod += -0.75
H.sprint_cost_factor += -0.1
/datum/modifier/buzzed/deactivate()
..()
if (ishuman(target))
var/mob/living/carbon/human/H = target
var/mob/living/carbon/human/H = target
if(istype(H))
H.move_delay_mod -= -0.75
H.sprint_cost_factor -= -0.1
/datum/modifier/buzzed/custom_validity()
if (ishuman(target))
var/mob/living/carbon/human/H = target
if (H.intoxication >= AE_BUZZED_MIN && H.intoxication <= AE_BUZZED_MAX)
var/mob/living/carbon/human/H = target
if(!istype(H))
return 0
var/bac = H.get_blood_alcohol()
if(bac >= INTOX_BUZZED*H.species.ethanol_resistance && bac <= INTOX_MUSCLEIMP*H.species.ethanol_resistance)
return 1
return 0
/datum/modifier/drunk
/datum/modifier/drunk/activate()
..()
var/mob/living/carbon/human/H = target
if(istype(H))
H.move_delay_mod += 2
H.sprint_cost_factor += 0.2
/datum/modifier/drunk/deactivate()
..()
var/mob/living/carbon/human/H = target
if(istype(H))
H.move_delay_mod -= 2
H.sprint_cost_factor -= -0.2
/datum/modifier/drunk/custom_validity()
var/mob/living/carbon/human/H = target
if(istype(H))
return 0
if(H.get_blood_alcohol() >= INTOX_MUSCLEIMP*H.species.ethanol_resistance)
return 1
return 1
return 0
#undef AE_DIZZY
#undef AE_BUZZED_MIN
#undef AE_SLURRING
#undef AE_CONFUSION
#undef AE_CLUMSY
#undef AE_BUZZED_MAX
#undef AE_BLURRING
#undef AE_VOMIT
#undef AE_DROWSY
#undef AE_OVERDOSE
#undef AE_BLACKOUT
+3 -3
View File
@@ -97,7 +97,7 @@ proc/get_radio_key_from_channel(var/channel)
verb = pick("yells","roars","hollers")
speech_problem_flag = 1
if(slurring)
message = slur(message)
message = slur(message,slurring)
verb = pick("slobbers","slurs")
speech_problem_flag = 1
if(stuttering)
@@ -105,11 +105,11 @@ proc/get_radio_key_from_channel(var/channel)
verb = pick("stammers","stutters")
speech_problem_flag = 1
if(tarded)
message = slur(message)
message = slur(message,100)
verb = pick("gibbers","gabbers")
speech_problem_flag = 1
if(brokejaw)
message = slur(message)
message = slur(message,100)
verb = pick("slobbers","slurs")
speech_problem_flag = 1
if(prob(50))
+12 -14
View File
@@ -288,7 +288,7 @@ var/list/global/organ_rel_size = list(
p++
return t
proc/slur(phrase)
proc/slur(phrase, strength = 100)
phrase = html_decode(phrase)
var/leng=lentext(phrase)
var/counter=lentext(phrase)
@@ -296,18 +296,16 @@ proc/slur(phrase)
var/newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
if(rand(1,3)==3)
if(lowertext(newletter)=="o") newletter="u"
if(lowertext(newletter)=="s") newletter="ch"
if(lowertext(newletter)=="a") newletter="ah"
if(lowertext(newletter)=="c") newletter="k"
switch(rand(1,15))
if(1,3,5,8) newletter="[lowertext(newletter)]"
if(2,4,6,15) newletter="[uppertext(newletter)]"
if(7) newletter+="'"
//if(9,10) newletter="<b>[newletter]</b>"
//if(11,12) newletter="<big>[newletter]</big>"
//if(13) newletter="<small>[newletter]</small>"
if(prob(strength))
if(rand(1,3)==3)
if(lowertext(newletter)=="o") newletter="u"
if(lowertext(newletter)=="s") newletter="ch"
if(lowertext(newletter)=="a") newletter="ah"
if(lowertext(newletter)=="c") newletter="k"
switch(rand(1,15))
if(1,3,5,8) newletter="[lowertext(newletter)]"
if(2,4,6,15) newletter="[uppertext(newletter)]"
if(7) newletter+="'"
newphrase+="[newletter]";counter-=1
return newphrase
@@ -710,7 +708,7 @@ proc/is_blind(A)
nutrition -= 60
if (intoxication)//The pain and system shock of vomiting, sobers you up a little
intoxication *= 0.8
intoxication *= 0.9
if (istype(src, /mob/living/carbon/human))
ingested.trans_to_turf(location,30)//Vomiting empties the stomach, transferring 30u reagents to the floor where you vomited
+7 -12
View File
@@ -28,7 +28,7 @@
if (germ_level > INFECTION_LEVEL_ONE)
if(prob(5))
owner.emote("cough") //respitory tract infection
owner.emote("cough") //Respiratory tract infection
if(is_bruised())
if(prob(2))
@@ -135,27 +135,22 @@
if(src.damage < 0)
src.damage = 0
// Get the effectiveness of the liver.
var/filter_effect = 3
var/filter_strength = INTOX_FILTER_HEALTHY
if(is_bruised())
filter_effect -= 1
filter_strength = INTOX_FILTER_BRUISED
if(is_broken())
filter_effect -= 2
filter_strength = INTOX_FILTER_DAMAGED
if (owner.intoxication > 0)
//ALCOHOL_FILTRATION_RATE is defined in intoxication.dm
owner.intoxication -= ALCOHOL_FILTRATION_RATE*filter_effect*PROCESS_ACCURACY//A weakened liver filters out alcohol more slowly
owner.intoxication -= filter_strength*PROCESS_ACCURACY
owner.intoxication = max(owner.intoxication, 0)
if (!owner.intoxication)
//If intoxication has just been reduced to zero, this will handle removing any effects
owner.handle_intoxication()
// Do some reagent processing.
if(owner.chem_effects[CE_ALCOHOL_TOXIC])
if(filter_effect < 3)
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1))
if(is_damaged())
owner.adjustToxLoss(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY)
else
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
/obj/item/organ/appendix
name = "appendix"
+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()
. = ..()
@@ -108,4 +108,49 @@
req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 7, TECH_MAGNET = 5, TECH_DATA = 4)
materials = list (DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 1500, "gold" = 1500, "diamond" = 750)
build_path = /obj/item/weapon/scalpel/manager
sort_string = "MBBAD"
sort_string = "MBBAD"
/datum/design/item/medical/inhaler
name = "Inhaler"
desc = "A very basic personal inhaler that directly injects chemicals into the lungs using a basic cartridge aerosol method."
id = "inhaler"
req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2)
materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000)
build_path = /obj/item/weapon/personal_inhaler
sort_string = "MBCAA"
/datum/design/item/medical/inhaler_combat
name = "Combat Inhaler"
desc = "An improved inhaler design that injects the entirety of the chemicals in the loaded cartridge in a single button press."
id = "inhaler_combat"
req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 4, TECH_ENGINEERING = 4 )
materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 3000, "silver" = 1500)
build_path = /obj/item/weapon/personal_inhaler/combat
sort_string = "MBCAB"
/datum/design/item/medical/inhaler_cartridge_small
name = "Small Inhaler Cartridge"
desc = "A small aerosol cartridge that can hold a small amount of chemicals. For use in an inhaler."
id = "inhaler_cartridge_small"
req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2)
materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500)
build_path = /obj/item/weapon/reagent_containers/personal_inhaler_cartridge
sort_string = "MBCAC"
/datum/design/item/medical/inhaler_cartridge_large
name = "Large Inhaler Cartridge"
desc = "A large aerosol cartridge that can hold a decent amount of chemicals. For use in an inhaler."
id = "inhaler_cartridge_large"
req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 4)
materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "silver" = 500)
build_path = /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large
sort_string = "MBCAD"
/datum/design/item/medical/inhaler_cartridge_bluespace
name = "Bluespace Inhaler Cartridge"
desc = "A bluespace aerosol cartridge that can hold a robust amount of chemicals. For use in an inhaler."
id = "inhaler_cartridge_bluespace"
req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6, TECH_BIO = 6)
materials = list(DEFAULT_WALL_MATERIAL = 3000, "phoron" = 3000, "diamond" = 500)
build_path = /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/bluespace
sort_string = "MBCAE"
@@ -35,6 +35,7 @@
/obj/item/device/flash,\
/obj/item/device/flashlight,\
/obj/item/device/healthanalyzer,\
/obj/item/device/breath_analyzer,\
/obj/item/device/multitool,\
/obj/item/device/paicard,\
/obj/item/device/radio,\