diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 12f3b28b97..c9f7c54609 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -610,4 +610,342 @@
return
if(scanner)
- return scanner.tgui_interact(user)
\ No newline at end of file
+<<<<<<< HEAD
+ return scanner.tgui_interact(user)
+=======
+ return ui_interact(user)
+
+/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ var/data[0]
+
+ data["connected"] = scanner ? 1 : 0
+
+ if(scanner)
+ data["occupied"] = scanner.occupant ? 1 : 0
+
+ var/occupantData[0]
+ if(scanner.occupant && ishuman(scanner.occupant))
+ var/mob/living/carbon/human/H = scanner.occupant
+ occupantData["name"] = H.name
+ occupantData["stat"] = H.stat
+ occupantData["health"] = H.health
+ occupantData["maxHealth"] = H.getMaxHealth()
+
+ occupantData["hasVirus"] = H.virus2.len
+
+ occupantData["bruteLoss"] = H.getBruteLoss()
+ occupantData["oxyLoss"] = H.getOxyLoss()
+ occupantData["toxLoss"] = H.getToxLoss()
+ occupantData["fireLoss"] = H.getFireLoss()
+
+ occupantData["radLoss"] = H.radiation
+ occupantData["cloneLoss"] = H.getCloneLoss()
+ occupantData["brainLoss"] = H.getBrainLoss()
+ occupantData["paralysis"] = H.paralysis
+ occupantData["paralysisSeconds"] = round(H.paralysis / 4)
+ occupantData["bodyTempC"] = H.bodytemperature-T0C
+ occupantData["bodyTempF"] = (((H.bodytemperature-T0C) * 1.8) + 32)
+
+ occupantData["hasBorer"] = H.has_brain_worms()
+
+ var/bloodData[0]
+ if(H.vessel)
+ var/blood_volume = round(H.vessel.get_reagent_amount("blood"))
+ var/blood_max = H.species.blood_volume
+ bloodData["volume"] = blood_volume
+ bloodData["percent"] = round(((blood_volume / blood_max)*100))
+
+ occupantData["blood"] = bloodData
+
+ var/reagentData[0]
+ if(H.reagents.reagent_list.len >= 1)
+ for(var/datum/reagent/R in H.reagents.reagent_list)
+ reagentData[++reagentData.len] = list("name" = R.name, "amount" = R.volume, "overdose" = ((R.overdose && R.volume > R.overdose) ? "Overdose" : ""))
+ else
+ reagentData = null
+
+ occupantData["reagents"] = reagentData
+
+ var/ingestedData[0]
+ if(H.ingested.reagent_list.len >= 1)
+ for(var/datum/reagent/R in H.ingested.reagent_list)
+ ingestedData[++ingestedData.len] = list("name" = R.name, "amount" = R.volume, "overdose" = ((R.overdose && R.volume > R.overdose) ? "Overdose" : ""))
+ else
+ ingestedData = null
+
+ occupantData["ingested"] = ingestedData
+
+ var/extOrganData[0]
+ for(var/obj/item/organ/external/E in H.organs)
+ var/organData[0]
+ organData["name"] = E.name
+ organData["open"] = E.open
+ organData["germ_level"] = E.germ_level
+ organData["bruteLoss"] = E.brute_dam
+ organData["fireLoss"] = E.burn_dam
+
+ var/implantData[0]
+ for(var/obj/I in E.implants)
+ var/implantSubData[0]
+ implantSubData["name"] = I.name
+ if(is_type_in_list(I, known_implants))
+ implantSubData["known"] = 1
+
+ implantData.Add(list(implantSubData))
+
+ organData["implants"] = implantData
+ organData["implants_len"] = implantData.len
+
+ var/organStatus[0]
+ if(E.status & ORGAN_DESTROYED)
+ organStatus["destroyed"] = 1
+ if(E.status & ORGAN_BROKEN)
+ organStatus["broken"] = E.broken_description
+ if(E.robotic >= ORGAN_ROBOT)
+ organStatus["robotic"] = 1
+ if(E.splinted)
+ organStatus["splinted"] = 1
+ if(E.status & ORGAN_BLEEDING)
+ organStatus["bleeding"] = 1
+ if(E.status & ORGAN_DEAD)
+ organStatus["dead"] = 1
+ for(var/datum/wound/W in E.wounds)
+ if(W.internal)
+ organStatus["internalBleeding"] = 1
+ break
+
+ organData["status"] = organStatus
+
+ if(istype(E, /obj/item/organ/external/chest) && H.is_lung_ruptured())
+ organData["lungRuptured"] = 1
+
+ extOrganData.Add(list(organData))
+
+ occupantData["extOrgan"] = extOrganData
+
+ var/intOrganData[0]
+ for(var/obj/item/organ/I in H.internal_organs)
+ var/organData[0]
+ organData["name"] = I.name
+ if(I.status & ORGAN_ASSISTED)
+ organData["desc"] = "Assisted"
+ else if(I.robotic >= ORGAN_ROBOT)
+ organData["desc"] = "Mechanical"
+ else
+ organData["desc"] = null
+ organData["germ_level"] = I.germ_level
+ organData["damage"] = I.damage
+
+ intOrganData.Add(list(organData))
+
+ occupantData["intOrgan"] = intOrganData
+
+ occupantData["blind"] = (H.sdisabilities & BLIND)
+ occupantData["nearsighted"] = (H.disabilities & NEARSIGHTED)
+
+ data["occupant"] = occupantData
+
+ ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "adv_med.tmpl", "Body Scanner", 690, 800)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+
+/obj/machinery/body_scanconsole/Topic(href, href_list)
+ if(..())
+ return 1
+
+ if (href_list["print_p"])
+ generate_printing_text()
+
+ if (!(printing) && printing_text)
+ printing = 1
+ visible_message("\The [src] rattles and prints out a sheet of paper.")
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
+ P.info = "
Body Scan - [href_list["name"]]
"
+ P.info += "Time of scan: [worldtime2stationtime(world.time)]
"
+ P.info += "[printing_text]"
+ P.info += "
Notes:
"
+ P.name = "Body Scan - [href_list["name"]] ([worldtime2stationtime(world.time)])"
+ printing = null
+ printing_text = null
+
+/obj/machinery/body_scanconsole/proc/generate_printing_text()
+ var/dat = ""
+
+ if(scanner)
+ var/mob/living/carbon/human/occupant = scanner.occupant
+ dat = "Occupant Statistics:
" //Blah obvious
+ if(istype(occupant)) //is there REALLY someone in there?
+ var/t1
+ switch(occupant.stat) // obvious, see what their status is
+ if(0)
+ t1 = "Conscious"
+ if(1)
+ t1 = "Unconscious"
+ else
+ t1 = "*dead*"
+ dat += " (occupant.getMaxHealth() / 2) ? "blue" : "red"]>\tHealth %: [(occupant.health / occupant.getMaxHealth())*100], ([t1])
"
+
+ if(occupant.virus2.len)
+ dat += "Viral pathogen detected in blood stream.
"
+
+ var/extra_font = null
+ extra_font = ""
+ dat += "[extra_font]\t-Brute Damage %: [occupant.getBruteLoss()]
"
+
+ extra_font = ""
+ dat += "[extra_font]\t-Respiratory Damage %: [occupant.getOxyLoss()]
"
+
+ extra_font = ""
+ dat += "[extra_font]\t-Toxin Content %: [occupant.getToxLoss()]
"
+
+ extra_font = ""
+ dat += "[extra_font]\t-Burn Severity %: [occupant.getFireLoss()]
"
+
+ extra_font = ""
+ dat += "[extra_font]\tRadiation Level %: [occupant.radiation]
"
+
+ extra_font = ""
+ dat += "[extra_font]\tGenetic Tissue Damage %: [occupant.getCloneLoss()]
"
+
+ extra_font = ""
+ dat += "[extra_font]\tApprox. Brain Damage %: [occupant.getBrainLoss()]
"
+
+ dat += "Paralysis Summary %: [occupant.paralysis] ([round(occupant.paralysis / 4)] seconds left!)
"
+ dat += "Body Temperature: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)
"
+
+ dat += "
"
+
+ if(occupant.has_brain_worms())
+ dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
"
+
+ if(occupant.vessel)
+ var/blood_volume = round(occupant.vessel.get_reagent_amount("blood"))
+ var/blood_max = occupant.species.blood_volume
+ var/blood_percent = blood_volume / blood_max
+ blood_percent *= 100
+
+ extra_font = " 448 ? "blue" : "red"]>"
+ dat += "[extra_font]\tBlood Level %: [blood_percent] ([blood_volume] units)
"
+
+ if(occupant.reagents)
+ for(var/datum/reagent/R in occupant.reagents.reagent_list)
+ dat += "Reagent: [R.name], Amount: [R.volume]
"
+
+ if(occupant.ingested)
+ for(var/datum/reagent/R in occupant.ingested.reagent_list)
+ dat += "Stomach: [R.name], Amount: [R.volume]
"
+
+ dat += "
"
+ dat += ""
+ dat += "| Organ | "
+ dat += "Burn Damage | "
+ dat += "Brute Damage | "
+ dat += "Other Wounds | "
+ dat += "
"
+
+ for(var/obj/item/organ/external/e in occupant.organs)
+ dat += ""
+ var/AN = ""
+ var/open = ""
+ var/infected = ""
+ var/robot = ""
+ var/imp = ""
+ var/bled = ""
+ var/splint = ""
+ var/internal_bleeding = ""
+ var/lung_ruptured = ""
+ var/o_dead = ""
+ for(var/datum/wound/W in e.wounds) if(W.internal)
+ internal_bleeding = "
Internal bleeding"
+ break
+ if(istype(e, /obj/item/organ/external/chest) && occupant.is_lung_ruptured())
+ lung_ruptured = "Lung ruptured:"
+ if(e.splinted)
+ splint = "Splinted:"
+ if(e.status & ORGAN_BLEEDING)
+ bled = "Bleeding:"
+ if(e.status & ORGAN_BROKEN)
+ AN = "[e.broken_description]:"
+ if(e.robotic >= ORGAN_ROBOT)
+ robot = "Prosthetic:"
+ if(e.status & ORGAN_DEAD)
+ o_dead = "Necrotic:"
+ if(e.open)
+ open = "Open:"
+ switch (e.germ_level)
+ if (INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200)
+ infected = "Mild Infection:"
+ if (INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
+ infected = "Mild Infection+:"
+ if (INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
+ infected = "Mild Infection++:"
+ if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
+ infected = "Acute Infection:"
+ if (INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
+ infected = "Acute Infection+:"
+ if (INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_THREE - 50)
+ infected = "Acute Infection++:"
+ if (INFECTION_LEVEL_THREE -49 to INFINITY)
+ infected = "Gangrene Detected:"
+
+ var/unknown_body = 0
+ for(var/I in e.implants)
+ if(is_type_in_list(I,known_implants))
+ imp += "[I] implanted:"
+ else
+ unknown_body++
+
+ if(unknown_body)
+ imp += "Unknown body present:"
+ if(!AN && !open && !infected & !imp)
+ AN = "None:"
+ if(!(e.status & ORGAN_DESTROYED))
+ dat += "[e.name] | [e.burn_dam] | [e.brute_dam] | [robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured][o_dead] | "
+ else
+ dat += "[e.name] | - | - | Not Found | "
+ dat += "
"
+ for(var/obj/item/organ/i in occupant.internal_organs)
+ var/mech = ""
+ var/i_dead = ""
+ if(i.status & ORGAN_ASSISTED)
+ mech = "Assisted:"
+ if(i.robotic >= ORGAN_ROBOT)
+ mech = "Mechanical:"
+ if(i.status & ORGAN_DEAD)
+ i_dead = "Necrotic:"
+ var/infection = "None"
+ switch (i.germ_level)
+ if (INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200)
+ infection = "Mild Infection:"
+ if (INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
+ infection = "Mild Infection+:"
+ if (INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
+ infection = "Mild Infection++:"
+ if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
+ infection = "Acute Infection:"
+ if (INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
+ infection = "Acute Infection+:"
+ if (INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_THREE - 50)
+ infection = "Acute Infection++:"
+ if (INFECTION_LEVEL_THREE -49 to INFINITY)
+ infection = "Necrosis Detected:"
+
+ dat += ""
+ dat += "| [i.name] | N/A | [i.damage] | [infection]:[mech][i_dead] | | "
+ dat += "
"
+ dat += "
"
+ if(occupant.sdisabilities & BLIND)
+ dat += "Cataracts detected.
"
+ if(occupant.disabilities & NEARSIGHTED)
+ dat += "Retinal misalignment detected.
"
+ else
+ dat += "\The [src] is empty."
+ else
+ dat = " Error: No Body Scanner connected."
+
+ printing_text = dat
+>>>>>>> c820021... Merge pull request #7361 from ExabyteDiscord/Upstream-Dog-ChemistryThing
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5ff1f46cde..c949884c6f 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -136,10 +136,10 @@ HALOGEN COUNTER - Radcount on mobs
for(var/A in C.reagents.reagent_list)
var/datum/reagent/R = A
if(R.scannable)
- reagentdata["[R.id]"] = "\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]
"
+ reagentdata["[R.id]"] = "\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - Overdose" : ""]
"
else
unknown++
- unknownreagents["[R.id]"] = "\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]
"
+ unknownreagents["[R.id]"] = "\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - Overdose" : ""]
"
if(reagentdata.len)
dat += "Beneficial reagents detected in subject's blood:
"
for(var/d in reagentdata)
@@ -156,14 +156,14 @@ HALOGEN COUNTER - Radcount on mobs
var/stomachreagentdata[0]
var/stomachunknownreagents[0]
for(var/B in C.ingested.reagent_list)
- var/datum/reagent/T = B
- if(T.scannable)
- stomachreagentdata["[T.id]"] = "\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]
"
+ var/datum/reagent/R = B
+ if(R.scannable)
+ stomachreagentdata["[R.id]"] = "\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - Overdose" : ""]
"
if (advscan == 0 || showadvscan == 0)
- dat += "[T.name] found in subject's stomach.
"
+ dat += "[R.name] found in subject's stomach.
"
else
++unknown
- stomachunknownreagents["[T.id]"] = "\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]
"
+ stomachunknownreagents["[R.id]"] = "\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - Overdose" : ""]
"
if(advscan >= 1 && showadvscan == 1)
dat += "Beneficial reagents detected in subject's stomach:
"
for(var/d in stomachreagentdata)
@@ -180,14 +180,14 @@ HALOGEN COUNTER - Radcount on mobs
var/touchreagentdata[0]
var/touchunknownreagents[0]
for(var/B in C.touching.reagent_list)
- var/datum/reagent/T = B
- if(T.scannable)
- touchreagentdata["[T.id]"] = "\t[round(C.touching.get_reagent_amount(T.id), 1)]u [T.name]
"
+ var/datum/reagent/R = B
+ if(R.scannable)
+ touchreagentdata["[R.id]"] = "\t[round(C.touching.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - Overdose" : ""]
"
if (advscan == 0 || showadvscan == 0)
- dat += "[T.name] found in subject's dermis.
"
+ dat += "[R.name] found in subject's dermis.
"
else
++unknown
- touchunknownreagents["[T.id]"] = "\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]
"
+ touchunknownreagents["[R.id]"] = "\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - Overdose" : ""]
"
if(advscan >= 1 && showadvscan == 1)
dat += "Beneficial reagents detected in subject's dermis:
"
for(var/d in touchreagentdata)
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index d3283bc394..a7239281c2 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -19,7 +19,7 @@
var/dose = 0
var/max_dose = 0
var/overdose = 0 //Amount at which overdose starts
- var/overdose_mod = 2 //Modifier to overdose damage
+ var/overdose_mod = 1 //Modifier to overdose damage
var/can_overdose_touch = FALSE // Can the chemical OD when processing on touch?
var/scannable = 0 // Shows up on health analyzers.
var/affects_dead = 0
@@ -146,7 +146,10 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
overdose_mod *= H.species.chemOD_mod
- M.adjustToxLoss(removed * overdose_mod)
+ // 6 damage per unit at minimum, scales with excessive reagents. Rounding should help keep damage consistent between ingest / inject, but isn't perfect.
+ // Hardcapped at 3.6 damage per tick, or 18 damage per unit at 0.2 metabolic rate so that you can't instakill people with overdoses by feeding them infinite periadaxon.
+ // Overall, max damage is slightly less effective than hydrophoron, and 1/5 as effective as cyanide.
+ M.adjustToxLoss(min(removed * overdose_mod * round(3 + 3 * volume / overdose), 3.6))
/datum/reagent/proc/initialize_data(var/newdata) // Called when the reagent is created.
if(!isnull(newdata))
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 54e1e1bbdd..1582a8dc7f 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -180,7 +180,21 @@
L.ExtinguishMob()
L.water_act(amount / 25) // Div by 25, as water_act multiplies it by 5 in order to calculate firestack modification.
remove_self(needed)
+<<<<<<< HEAD
/* //VOREStation Edit Start. Stops slimes from dying from water. Fixes fuel affect_ingest, too.
+=======
+
+ // Put out cigarettes if splashed.
+ if(istype(L, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = L
+ if(H.wear_mask)
+ if(istype(H.wear_mask, /obj/item/clothing/mask/smokable))
+ var/obj/item/clothing/mask/smokable/S = H.wear_mask
+ if(S.lit)
+ S.quench()
+ H.visible_message("[H]\'s [S.name] is put out.")
+
+>>>>>>> c820021... Merge pull request #7361 from ExabyteDiscord/Upstream-Dog-ChemistryThing
/datum/reagent/water/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_SLIME)
M.adjustToxLoss(6 * removed)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index e35455ab3f..7743e184d5 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -260,7 +260,7 @@
step(M, pick(cardinal))
if(prob(5))
M.emote(pick("twitch", "drool", "moan"))
- M.adjustBrainLoss(0.1)
+ M.adjustBrainLoss(0.5 * removed)
/datum/reagent/nitrogen
name = "Nitrogen"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 75beeac701..353df9095c 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -48,6 +48,7 @@
reagent_state = LIQUID
color = "#BF0000"
overdose = REAGENTS_OVERDOSE
+ overdose_mod = 0.25
scannable = 1
/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -214,6 +215,8 @@
reagent_state = LIQUID
color = "#225722"
scannable = 1
+ overdose = REAGENTS_OVERDOSE * 0.5
+ overdose_mod = 0 // Not used, but it shouldn't deal toxin damage anyways. Carth heals toxins!
/datum/reagent/carthatoline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -234,6 +237,11 @@
if(alien == IS_SLIME)
H.druggy = max(M.druggy, 5)
+/datum/reagent/carthatoline/overdose(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustHalLoss(2)
+ var/mob/living/carbon/human/H = M
+ H.internal_organs_by_name[O_STOMACH].take_damage(removed * 2) // Causes stomach contractions, makes sense for an overdose to make it much worse.
+
/datum/reagent/dexalin
name = "Dexalin"
id = "dexalin"
@@ -267,6 +275,7 @@
reagent_state = LIQUID
color = "#0040FF"
overdose = REAGENTS_OVERDOSE * 0.5
+ overdose_mod = 1.25
scannable = 1
/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -434,7 +443,8 @@
taste_description = "bitterness"
reagent_state = LIQUID
color = "#C8A5DC"
- overdose = 60
+ overdose = REAGENTS_OVERDOSE * 2
+ overdose_mod = 0.75
scannable = 1
metabolism = 0.02
mrate_static = TRUE
@@ -458,7 +468,8 @@
taste_description = "sourness"
reagent_state = LIQUID
color = "#CB68FC"
- overdose = 30
+ overdose = REAGENTS_OVERDOSE
+ overdose_mod = 0.75
scannable = 1
metabolism = 0.02
mrate_static = TRUE
@@ -482,6 +493,7 @@
reagent_state = LIQUID
color = "#800080"
overdose = 20
+ overdose_mod = 0.75
scannable = 1
metabolism = 0.02
mrate_static = TRUE
@@ -529,7 +541,7 @@
M.AdjustWeakened(-1)
holder.remove_reagent("mindbreaker", 5)
M.hallucination = max(0, M.hallucination - 10)
- M.adjustToxLoss(5 * removed * chem_effective) // It used to be incredibly deadly due to an oversight. Not anymore!
+ M.adjustToxLoss(10 * removed * chem_effective) // It used to be incredibly deadly due to an oversight. Not anymore!
M.add_chemical_effect(CE_PAINKILLER, 20 * chem_effective * M.species.chem_strength_pain)
/datum/reagent/hyperzine
@@ -540,6 +552,7 @@
reagent_state = LIQUID
color = "#FF3300"
overdose = REAGENTS_OVERDOSE * 0.5
+ overdose_mod = 0.25
/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_TAJARA)
@@ -553,6 +566,13 @@
M.emote(pick("twitch", "blink_r", "shiver"))
M.add_chemical_effect(CE_SPEEDBOOST, 1)
+/datum/reagent/hyperzine/overdose(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(prob(5)) // 1 in 20
+ var/mob/living/carbon/human/H = M
+ H.internal_organs_by_name[O_HEART].take_damage(1)
+ to_chat(M, "Huh... Is this what a heart attack feels like?")
+
/datum/reagent/alkysine
name = "Alkysine"
id = "alkysine"
@@ -609,6 +629,7 @@
reagent_state = LIQUID
color = "#561EC3"
overdose = 10
+ overdose_mod = 1.5
scannable = 1
/datum/reagent/peridaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -628,6 +649,11 @@
if(prob(33))
H.Confuse(10)
+/datum/reagent/peridaxon/overdose(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.adjustHalLoss(5)
+ M.hallucination = max(M.hallucination, 10)
+
/datum/reagent/osteodaxon
name = "Osteodaxon"
id = "osteodaxon"
@@ -636,6 +662,7 @@
color = "#C9BCE3"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE * 0.5
+ overdose_mod = 1.5
scannable = 1
/datum/reagent/osteodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -658,6 +685,7 @@
color = "#4246C7"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE * 0.5
+ overdose_mod = 1.5
scannable = 1
var/repair_strength = 3
@@ -679,6 +707,23 @@
if(W.damage <= 0)
O.wounds -= W
+/datum/reagent/myelamine/overdose(var/mob/living/carbon/M, var/alien, var/removed)
+ // Copypaste of affect_blood with slight adjustment. Heals slightly faster at the cost of high toxins
+ ..()
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/wound_heal = removed * repair_strength / 2
+ for(var/obj/item/organ/external/O in H.bad_external_organs)
+ for(var/datum/wound/W in O.wounds)
+ if(W.bleeding())
+ W.damage = max(W.damage - wound_heal, 0)
+ if(W.damage <= 0)
+ O.wounds -= W
+ if(W.internal)
+ W.damage = max(W.damage - wound_heal, 0)
+ if(W.damage <= 0)
+ O.wounds -= W
+
/datum/reagent/respirodaxon
name = "Respirodaxon"
id = "respirodaxon"
@@ -688,6 +733,7 @@
color = "#4444FF"
metabolism = REM * 1.5
overdose = 10
+ overdose_mod = 1.75
scannable = 1
/datum/reagent/respirodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -719,6 +765,7 @@
color = "#8B4513"
metabolism = REM * 1.5
overdose = 10
+ overdose_mod = 1.75
scannable = 1
/datum/reagent/gastirodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -750,6 +797,7 @@
color = "#D2691E"
metabolism = REM * 1.5
overdose = 10
+ overdose_mod = 1.75
scannable = 1
/datum/reagent/hepanephrodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -783,6 +831,7 @@
color = "#FF4444"
metabolism = REM * 1.5
overdose = 10
+ overdose_mod = 1.75
scannable = 1
/datum/reagent/cordradaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -810,6 +859,7 @@
reagent_state = SOLID
color = "#7B4D4F"
overdose = 20
+ overdose_mod = 1.5
scannable = 1
/datum/reagent/immunosuprizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -867,6 +917,7 @@
color = "#84B2B0"
metabolism = REM * 0.75
overdose = 20
+ overdose_mod = 1.5
scannable = 1
/datum/reagent/skrellimmuno/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -1008,6 +1059,7 @@
color = "#008000"
metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
+ overdose_mod = 1.25
scannable = 1
/datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -1056,6 +1108,7 @@
color = "#FFB0B0"
mrate_static = TRUE
overdose = 10
+ overdose_mod = 1.5
scannable = 1
data = 0
@@ -1237,6 +1290,7 @@
reagent_state = SOLID
color = "#669900"
overdose = REAGENTS_OVERDOSE
+ overdose_mod = 2
scannable = 1
/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index 7e34762448..ba7dc93d63 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -423,6 +423,16 @@
if(prob(5))
M.vomit()
+/datum/reagent/space_cleaner/touch_mob(var/mob/living/L, var/amount)
+ if(istype(L, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = L
+ if(H.wear_mask)
+ if(istype(H.wear_mask, /obj/item/clothing/mask/smokable))
+ var/obj/item/clothing/mask/smokable/S = H.wear_mask
+ if(S.lit)
+ S.quench() // No smoking in my medbay!
+ H.visible_message("[H]\'s [S.name] is put out.")
+
/datum/reagent/lube // TODO: spraying on borgs speeds them up
name = "Space Lube"
id = "lube"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index b541d66b44..e18c2e56d9 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -46,6 +46,11 @@
color = "#792300"
strength = 10
+/datum/reagent/toxin/amatoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ // Trojan horse. Waits until most of the toxin has gone through the body before dealing the bulk of it in one big strike.
+ if(volume < max_dose * 0.2)
+ M.adjustToxLoss(max_dose * strength * removed / (max_dose * 0.2))
+
/datum/reagent/toxin/carpotoxin
name = "Carpotoxin"
id = "carpotoxin"
@@ -55,6 +60,10 @@
color = "#003333"
strength = 10
+/datum/reagent/toxin/carpotoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.adjustBrainLoss(strength / 4 * removed)
+
/datum/reagent/toxin/neurotoxic_protein
name = "toxic protein"
id = "neurotoxic_protein"
@@ -212,6 +221,7 @@
color = "#d0583a"
metabolism = REM * 3
overdose = 10
+ overdose_mod = 0.5
strength = 3
/datum/reagent/toxin/stimm/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -225,6 +235,13 @@
M.take_organ_damage(6 * removed, 0)
M.add_chemical_effect(CE_SPEEDBOOST, 1)
+/datum/reagent/toxin/stimm/overdose(var/mob/living/carbon/M, var/alient, var/removed)
+ ..()
+ if(prob(10)) // 1 in 10. This thing's made with welder fuel and fertilizer, what do you expect?
+ var/mob/living/carbon/human/H = M
+ H.internal_organs_by_name[O_HEART].take_damage(1)
+ to_chat(M, "Huh... Is this what a heart attack feels like?")
+
/datum/reagent/toxin/potassium_chloride
name = "Potassium Chloride"
id = "potassium_chloride"
@@ -658,7 +675,7 @@
metabolism = REM * 0.5
ingest_met = REM * 1.5
overdose = REAGENTS_OVERDOSE * 0.5
- overdose_mod = 5 //For that good, lethal feeling
+ overdose_mod = 2 //For that good, lethal feeling // Reduced with overdose changes. Slightly stronger than before
/datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
diff --git a/nano/templates/adv_med.tmpl b/nano/templates/adv_med.tmpl
new file mode 100644
index 0000000000..6309f73285
--- /dev/null
+++ b/nano/templates/adv_med.tmpl
@@ -0,0 +1,267 @@
+
+{{if !data.occupied}}
+ No occupant detected.
+{{else}}
+ Occupant Data:
+
+
+ Name:
+
+
+ {{:data.occupant.name}}
+
+
+
+
+ Health:
+
+ {{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, (data.occupant.health >= 50) ? 'good' : (data.occupant.health >= 25) ? 'average' : 'bad')}}
+
+ {{:helper.round(data.occupant.health / data.occupant.maxHealth)*100}}%
+
+
+
+ Status:
+
+
+ {{if data.occupant.stat==0}}
+ Stable
+ {{else data.occupant.stat==1}}
+ Non-Responsive
+ {{else}}
+ Dead
+ {{/if}}
+
+
+ {{:helper.link('Print', 'document', {'print_p' : 1, 'name' : data.occupant.name})}}
+
Damage:
+
+
+ | Brute: |
+ {{:data.occupant.bruteLoss}} |
+ Brain: |
+ {{:data.occupant.brainLoss}} |
+
+
+ | Burn: |
+ {{:data.occupant.fireLoss}} |
+ Radiation: |
+ {{:data.occupant.radLoss}} |
+
+
+ | Oxygen: |
+ {{:data.occupant.oxyLoss}} |
+ Genetic: |
+ {{:data.occupant.cloneLoss}} |
+
+
+ | Toxins: |
+ {{:data.occupant.toxLoss}} |
+ Paralysis: |
+ {{:data.occupant.paralysis}}% ({{:data.occupant.paralysisSeconds}} seconds left!) |
+
+
+ | Body Temperature: |
+ {{:helper.round(data.occupant.bodyTempC*10)/10}}°C, {{:helper.round(data.occupant.bodyTempF*10)/10}}°F |
+
+
+
+ {{if data.occupant.hasVirus}}
+
+ Viral pathogen detected in blood stream.
+
+ {{/if}}
+ {{if data.occupant.hasBorer}}
+
+ Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
+
+ {{/if}}
+ {{if data.occupant.blind}}
+ Pupils unresponsive.
+ {{/if}}
+ {{if data.occupant.nearsighted}}
+ Retinal Misalignment Detected
+ {{/if}}
+ Blood
+
+
+ | Volume: |
+ {{:data.occupant.blood.volume}} |
+ Percent: |
+ {{:data.occupant.blood.percent}}% |
+
+
+ Blood Reagents
+ {{if data.occupant.reagents}}
+
+ {{for data.occupant.reagents}}
+
+ | {{:value.name}}: |
+ {{:value.amount}} |
+ {{:value.overdose}} |
+
+ {{/for}}
+
+ {{else}}
+ No blood reagents detected.
+ {{/if}}
+ Stomach Reagents
+ {{if data.occupant.ingested}}
+
+ {{for data.occupant.ingested}}
+
+ | {{:value.name}}: |
+ {{:value.amount}} |
+ {{:value.overdose}} |
+
+ {{/for}}
+
+ {{else}}
+ No stomach reagents detected.
+ {{/if}}
+ External Organs
+
+ {{for data.occupant.extOrgan}}
+
+ {{if value.status.destroyed}}
+
+ {{:value.name}} - DESTROYED
+
+ {{else}}
+
+
+ {{if value.status.broken}}
+ {{:value.status.broken}}
+ {{else value.status.splinted}}
+ Splinted
+ {{else value.status.robotic}}
+ Robotic
+ {{/if}}
+
+
+ Brute/Burn
+
+
+ {{:value.bruteLoss}}/{{:value.fireLoss}}
+
+
+ Injuries
+
+
+ {{if !value.status.bleeding}}
+ {{if !value.status.internalBleeding}}
+ No Injuries Detected
+ {{else}}
+
Internal Bleeding Detected
+ {{/if}}
+ {{else}}
+ {{if value.status.internalBleeding}}
+
Internal Bleeding Detected. External Bleeding Detected.
+ {{else}}
+
External Bleeding Detected
+ {{/if}}
+ {{/if}}
+
+ {{if value.germ_level > 100}}
+
+ Infection
+
+
+ {{if value.germ_level < 300}}
+ Mild Infection
+ {{else value.germ_level < 400}}
+ Mild Infection+
+ {{else value.germ_level < 500}}
+ Mild Infection++
+ {{else value.germ_level < 700}}
+ Acute Infection
+ {{else value.germ_level < 800}}
+ Acute Infection+
+ {{else value.germ_level < 950}}
+ Acute Infection++
+ {{else value.germ_level >= 950}}
+ Gangrene Detected
+ {{/if}}
+
+ {{/if}}
+ {{if value.status.dead}}
+
+ Necrosis
+
+
+ Necrotic Tissue Present
+
+ {{/if}}
+ {{if value.open}}
+
+ Operation Status
+
+
+ Open Incision
+
+ {{/if}}
+ {{if value.implants_len}}
+
+ Implants
+
+ {{for value.implants :impValue:impindex}}
+
+ {{:impValue.known ? impValue.name : "Unknown"}}
+
+ {{/for}}
+ {{/if}}
+ {{/if}}
+
+ {{/for}}
+
+ Internal Organs
+
+ {{for data.occupant.intOrgan}}
+
+
+ {{:value.name}}
+
+
+ {{:value.desc != null ? value.desc : ""}}
+
+
+
+ {{if value.germ_level > 100}}
+
+ Infection
+
+
+ {{if value.germ_level < 300}}
+ Mild Infection
+ {{else value.germ_level < 400}}
+ Mild Infection+
+ {{else value.germ_level < 500}}
+ Mild Infection++
+ {{else value.germ_level < 700}}
+ Acute Infection
+ {{else value.germ_level < 800}}
+ Acute Infection+
+ {{else value.germ_level < 950}}
+ Acute Infection++
+ {{else value.germ_level >= 950}}
+ Necrosis Detected
+ {{/if}}
+
+ {{/if}}
+
+ Damage
+
+
+ {{:value.damage}}
+
+
+ {{/for}}
+
+{{/if}}
\ No newline at end of file