Mental Medication Additions (#4648)

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

Syringe (drugs) now contains truth serum.

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

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

The vault now contains some misc emergency gear that a head of staff can access in case of a dire situation. Current gear are loyalty implants, expensive cardox grenades, and Hextrasenil pills.
This commit is contained in:
BurgerLUA
2018-05-13 07:39:56 -07:00
committed by Erki
parent e388235cef
commit aad698be53
55 changed files with 1277 additions and 473 deletions
+92 -12
View File
@@ -4,6 +4,7 @@ HEALTH ANALYZER
GAS ANALYZER
MASS SPECTROMETER
REAGENT SCANNER
BREATH ANALYZER
*/
/obj/item/device/healthanalyzer
@@ -19,8 +20,7 @@ REAGENT SCANNER
throw_range = 10
matter = list(DEFAULT_WALL_MATERIAL = 200)
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
var/mode = 1;
var/mode = 1
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(50))
@@ -112,15 +112,6 @@ REAGENT SCANNER
++unknown
if(unknown)
user << "<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach.</span>"
if(C.breathing && C.breathing.total_volume)
var/unknown = 0
for(var/datum/reagent/R in C.breathing.reagent_list)
if(R.scannable)
user << "<span class='notice'>[R.name] found in subject's respitory system.</span>"
else
++unknown
if(unknown)
user << "<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's respitory system.</span>"
if(C.virus2.len)
for (var/ID in C.virus2)
if (ID in virusDB)
@@ -402,4 +393,93 @@ REAGENT SCANNER
var/value = get_value(target)
user.visible_message("\The [user] scans \the [target] with \the [src]")
user.show_message("Price estimation of \the [target]: [value ? value : "N/A"] Credits")
user.show_message("Price estimation of \the [target]: [value ? value : "N/A"] Credits")
/obj/item/device/breath_analyzer
name = "breath analyzer"
desc = "A hand-held breath analyzer that provides a robust amount of information about the subject's repository system."
icon_state = "breath_analyzer"
item_state = "analyzer"
w_class = 2.0
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
throw_range = 20
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
/obj/item/device/breath_analyzer/attack(mob/living/carbon/human/H as mob, mob/living/user as mob)
if (!istype(H))
to_chat(user,"<span class='warning'>You can't find a way to use the [src] on [H]!</span>")
return
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(20))
to_chat(user,"<span class='danger'>Your hand slips from clumsiness!</span>")
eyestab(H,user)
to_chat(user,"<span class='danger'>Alert: No breathing detected.</span>")
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(H)
user.visible_message("<span class='notice'>[user] is trying to take a breath sample from [H].</span>","<span class='notice'>You gently insert the [src] into [H]'s mouth.</span>")
if (!LAZYLEN(src.other_DNA))
LAZYADD(src.other_DNA, H.dna.unique_enzymes)
src.other_DNA_type = "saliva"
if (!do_after(user, 2 SECONDS, act_target = H))
to_chat(user,"<span class='notice'>You and the target need to be standing still in order to take a breath sample.</span>")
return
user.visible_message("<span class='notice'>[user] takes a breath sample from [H].</span>","<span class='notice'>The [src] clicks as it finishes reading [H]'s breath sample.</span>")
to_chat(user,"<b>Breath Sample Results:</b>")
if(H.stat == DEAD || H.losebreath || !H.breathing)
to_chat(user,"<span class='danger'>Alert: No breathing detected.</span>")
return
to_chat(user,H.getOxyLoss() > 50 ? "<font color='blue'><b>Severe oxygen deprivation detected.</b></font>" : "Subject oxygen levels normal.")
var/obj/item/organ/L = H.internal_organs_by_name["lungs"]
if(istype(L))
to_chat(user,L.is_bruised() ? "<font color='red'><b>Ruptured lung detected.</b></font>" : "Subject lung health normal.")
else
to_chat(user,"<span class='warning'>Subject lung health unknown.</span>")
var/additional_string = "<font color='green'>\[NORMAL\]</font>"
var/bac = H.get_blood_alcohol()
switch(bac)
if(INTOX_JUDGEIMP to INTOX_MUSCLEIMP)
additional_string = "\[LIGHTLY INTOXICATED\]"
if(INTOX_MUSCLEIMP to INTOX_VOMIT)
additional_string = "\[MODERATELY INTOXICATED\]"
if(INTOX_VOMIT to INTOX_BALANCE)
additional_string = "<font color='red'>\[HEAVILY INTOXICATED\]</font>"
if(INTOX_BALANCE to INTOX_DEATH)
additional_string = "<font color='red'>\[ALCOHOL POISONING LIKELY\]</font>"
if(INTOX_DEATH to INFINITY)
additional_string = "<font color='red'>\[DEATH IMMINENT\]</font>"
to_chat(user,"<span class='normal'>Blood Alcohol Content: [round(bac,0.01)] <b>[additional_string]</b></span>")
if(H.breathing && H.breathing.total_volume)
var/unknown = 0
for(var/datum/reagent/R in H.breathing.reagent_list)
if(R.scannable)
to_chat(user,"<span class='notice'>[R.name] found in subject's respitory system.</span>")
else
++unknown
if(unknown)
to_chat(user,"<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's respitory system.</span>")
@@ -184,7 +184,7 @@
invisibility = INVISIBILITY_MAXIMUM //Why am i doing this?
//To make sure all reagents can work
//correctly before deleting the grenade.
QDEL_IN(src, 50)
QDEL_IN(src, 50)
/obj/item/weapon/grenade/chem_grenade/large
name = "large chem grenade"
@@ -283,6 +283,7 @@
beakers += B1
beakers += B2
icon_state = initial(icon_state) +"_locked"
/obj/item/weapon/grenade/chem_grenade/cleaner
name = "cleaner grenade"
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
@@ -304,6 +305,28 @@
beakers += B2
icon_state = initial(icon_state) +"_locked"
/obj/item/weapon/grenade/chem_grenade/large/phoroncleaner
name = "large cardox grenade"
desc = "A large smoke grenade containing a heavy amount of cardox. Use in case of phoron leaks. Warning: Harmful to Vaurca health."
stage = 2
path = 1
Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("water", 60)
B1.reagents.add_reagent("cardox", 60)
B2.reagents.add_reagent("surfactant", 60)
B2.reagents.add_reagent("cardox", 60)
detonator = new/obj/item/device/assembly_holder/timer_igniter(src)
beakers += B1
beakers += B2
icon_state = initial(icon_state) +"_locked"
/obj/item/weapon/grenade/chem_grenade/teargas
name = "tear gas grenade"
desc = "Concentrated Capsaicin. Contents under pressure. Use with caution."
@@ -1368,3 +1368,34 @@
</body>
</html>
"}
/obj/item/weapon/book/manual/brainwashing
name = "Disloyal to Loyal: The Legality of Brainwashing"
icon_state ="rulebook"
author = "Dr. Fredrick Richards"
title = "Disloyal to Loyal: The Legality of Brainwashing"
dat = {"<html>
<head>
<style>
h1 {font-size: 21px; margin: 15px 0px 5px;}
h2 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
body {font-size: 13px; font-family: Verdana;}
</style>
</head>
<body>
<h1>Disloyal to Loyal: The Legality of Brainwashing</h1>
<h2>by Doctor Fredrick Richards with help from the NanoTrasen Legal Department</h2>
While it may be tempting as a Captain, Head of Security, or sometimes an officer to go around distributing anti-psychotics to maintain the peace, there are a few Corporate regulations and rules that must be kept in mind before even considering obtaining the medication.<BR><BR>
<h2>Pre-injection</h2>
Generally, anti-psychotic medications should only be given out to criminals who have been charged with crimes that typically have Hold until Transfer, Cyborgification, and Loyalty Implant sentences, however some exceptions may apply. It is important to note that when using medicine to rehabilitate a criminal, the criminal in question is now legally considered a medical patient. In Tau Ceti space, it is illegal to prescribe, consume, or force a patient to consume anti-psychotic medication as a non-medical professional. As such, a non-medical personnel who injects or feeds prisoners with anti-psychotics may be charged with Suspicious Conduct, Excessive Use of Force In Detainment, Mistreatment of Prisoners, Neglect of Duty, Assault, Exceeding Official Powers, Mistreatment of Prisoners, and/or Gross Negligence. A trained and licensed medical professional are legally required to perform an evaluation first, and must be the one to perform the injection.<BR><BR>
<h2>Post-injection</h2>
It is your duty as a member of the security department to oversee the health and well-being of prisoners and parolees. Those who have been giving anti-psychotic medication must be carefully monitored for their behaviour. Prisoners who skip doses, or overdose, are a threat to themselves and the people near them. If in the case of an overdose occurs, or a dose is missed, medical personnel should be contacted immediately and the situation dealt with appropriately. Failure to do so may result in Gross Negligence charges and potential demotion.
</body>
</html>
"}
@@ -83,6 +83,7 @@
icon_state = "medicalbelt"
item_state = "medical"
can_hold = list(
/obj/item/device/breath_analyzer,
/obj/item/device/healthanalyzer,
/obj/item/weapon/dnainjector,
/obj/item/weapon/reagent_containers/dropper,
@@ -982,3 +982,27 @@
/obj/item/weapon/storage/box/stims/fill()
for(var/i in 1 to 4)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src)
/obj/item/weapon/storage/box/inhalers
name = "inhaler kit"
desc = "A box filled with several inhalers and empty inhaler cartridges."
icon_state = "box_inhalers"
/obj/item/weapon/storage/box/inhalers/fill()
for(var/i in 1 to 2)
new /obj/item/weapon/personal_inhaler(src)
for(var/i in 1 to 6)
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge(src)
/obj/item/weapon/storage/box/inhalers_large
name = "combat inhaler kit"
desc = "A box filled with a combat inhaler and several large empty inhaler cartridges."
icon_state = "box_inhalers"
/obj/item/weapon/storage/box/inhalers_large/fill()
new /obj/item/weapon/personal_inhaler/combat(src)
for(var/i in 1 to 6)
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large(src)
@@ -25,16 +25,14 @@
fill()
..()
if (empty) return
icon_state = pick("ointment","firefirstaid")
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/stack/medical/ointment( src )
new /obj/item/stack/medical/ointment( src )
new /obj/item/device/healthanalyzer( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/stack/medical/ointment( src )
new /obj/item/stack/medical/ointment( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src ) //Replaced ointment with these since they actually work --Errorage
return
@@ -55,16 +53,14 @@
/obj/item/weapon/storage/firstaid/toxin
name = "toxin first aid"
desc = "Used to treat when you have a high amoutn of toxins in your body."
desc = "Used to treat when you have a high amount of toxins in your body."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
fill()
..()
if (empty) return
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
@@ -75,21 +71,21 @@
return
/obj/item/weapon/storage/firstaid/o2
name = "oxygen deprivation first aid"
desc = "A box full of oxygen goodies."
name = "oxygen deprivation kit"
desc = "A box full of oxygen related goodies."
icon_state = "o2"
item_state = "firstaid-o2"
fill()
..()
if (empty) return
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/weapon/reagent_containers/syringe/inaprovaline( src )
new /obj/item/device/healthanalyzer( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/device/breath_analyzer( src )
return
/obj/item/weapon/storage/firstaid/adv
@@ -124,7 +120,7 @@
new /obj/item/weapon/storage/pill_bottle/dexalin_plus(src)
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
new /obj/item/weapon/reagent_containers/inhaler/hyperzine(src)
new /obj/item/stack/medical/splint(src)
return
@@ -148,7 +144,8 @@
new /obj/item/weapon/bonegel(src)
new /obj/item/weapon/FixOVein(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/weapon/reagent_containers/inhaler/soporific(src)
new /obj/item/weapon/reagent_containers/inhaler/soporific(src)
make_exact_fit()
/obj/item/weapon/storage/firstaid/brute
@@ -322,31 +319,3 @@
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
/obj/item/weapon/storage/pill_bottle/trisyndicotin
name = "bottle of Trisyndicotin pills"
desc = "Used to free one's mind from the oppression of NanoTrasen."
fill()
..()
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
/obj/item/weapon/storage/pill_bottle/hextrasenil
name = "bottle of Hextrasenil pills"
desc = "Pacification through medication."
fill()
..()
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
@@ -81,7 +81,6 @@
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implanter/loyalty(src)
/obj/item/weapon/storage/lockbox/clusterbang
name = "lockbox of clusterbangs"
desc = "You have a bad feeling about opening this."
@@ -258,3 +258,14 @@
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
/obj/item/weapon/storage/box/syndie_kit/stimulants
name = "box of stimulants"
desc = "Comes with a combat inhaler, a large cartridge of hyperzine, a large cartridge of inaprovaline, and a large empty cartridge."
/obj/item/weapon/storage/box/syndie_kit/stimulants/fill()
..()
new /obj/item/weapon/personal_inhaler/combat( src )
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large/hyperzine( src )
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large/inaprovaline( src )
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large( src )
+3 -1
View File
@@ -196,7 +196,8 @@
/obj/item/seeds/ambrosiavulgarisseed = 2,
/obj/item/seeds/ambrosiadeusseed = 1,
/obj/item/clothing/mask/gas/voice = 1,
/obj/item/clothing/gloves/brassknuckles = 2
/obj/item/clothing/gloves/brassknuckles = 2,
/obj/item/weapon/reagent_containers/inhaler/space_drugs = 2
)
/obj/random/energy
@@ -816,6 +817,7 @@
/obj/item/weapon/spacecash/ewallet/lotto = 0.3,
/obj/random/spacecash = 0.3,
/obj/item/device/firing_pin = 0.3,
/obj/item/weapon/reagent_containers/inhaler/hyperzine = 0.1,
/obj/item/weapon/storage/box/pineapple = 0.1
)
@@ -111,6 +111,7 @@
new /obj/item/weapon/reagent_containers/hypospray(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
new /obj/item/weapon/storage/box/inhalers(src)
/obj/structure/closet/secure_closet/CMO2
name = "chief medical officer's attire"
@@ -168,7 +169,8 @@
new /obj/item/weapon/storage/box/pillbottles(src)
new /obj/item/weapon/storage/box/spraybottles(src)
new /obj/item/weapon/storage/box/spraybottles(src)
new /obj/item/weapon/storage/box/inhalers(src)
new /obj/item/weapon/storage/box/inhalers(src)
/obj/structure/closet/secure_closet/medical_wall
name = "first aid closet"
@@ -148,10 +148,13 @@
new /obj/item/taperoll/police(src)
new /obj/item/device/flash(src)
new /obj/item/device/holowarrant(src)
new /obj/item/device/breath_analyzer(src)
//Belts
new /obj/item/clothing/accessory/holster/waist(src)
new /obj/item/weapon/storage/belt/security(src)
/obj/structure/closet/secure_closet/hos2
name = "head of security's attire"
req_access = list(access_hos)
@@ -178,6 +181,8 @@
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/clothing/accessory/holster/waist(src)
new /obj/item/device/breath_analyzer(src)
/obj/structure/closet/secure_closet/warden
name = "warden's locker"
req_access = list(access_armory)