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 += "" + dat += "" + dat += "" + dat += "" + 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 += "" + else + dat += "" + 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 += "" + dat += "" + dat += "
OrganBurn DamageBrute DamageOther Wounds
[e.name][e.burn_dam][e.brute_dam][robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured][o_dead][e.name]--Not Found
[i.name]N/A[i.damage][infection]:[mech][i_dead]
" + 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}} + + + + + + {{/for}} +
{{:value.name}}:{{:value.amount}}{{:value.overdose}}
+ {{else}} +
No blood reagents detected.
+ {{/if}} +

Stomach Reagents

+ {{if data.occupant.ingested}} + + {{for data.occupant.ingested}} + + + + + + {{/for}} +
{{:value.name}}:{{:value.amount}}{{:value.overdose}}
+ {{else}} +
No stomach reagents detected.
+ {{/if}} +

External Organs

+
+ {{for data.occupant.extOrgan}} +
+ {{if value.status.destroyed}} +
+ {{:value.name}} - DESTROYED +
+ {{else}} +
+
+ {{:value.name}} +
+
+
+ {{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