mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-19 20:06:28 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,\
|
||||
|
||||
Reference in New Issue
Block a user