mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Overdose changes + General chem mods
This commit is contained in:
@@ -610,4 +610,342 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(scanner)
|
if(scanner)
|
||||||
return scanner.tgui_interact(user)
|
<<<<<<< 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("<span class='notice'>\The [src] rattles and prints out a sheet of paper.</span>")
|
||||||
|
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
||||||
|
P.info = "<CENTER><B>Body Scan - [href_list["name"]]</B></CENTER><BR>"
|
||||||
|
P.info += "<b>Time of scan:</b> [worldtime2stationtime(world.time)]<br><br>"
|
||||||
|
P.info += "[printing_text]"
|
||||||
|
P.info += "<br><br><b>Notes:</b><br>"
|
||||||
|
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 = "<font color='blue'><b>Occupant Statistics:</b></font><br>" //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 += "<font color=[occupant.health > (occupant.getMaxHealth() / 2) ? "blue" : "red"]>\tHealth %: [(occupant.health / occupant.getMaxHealth())*100], ([t1])</font><br>"
|
||||||
|
|
||||||
|
if(occupant.virus2.len)
|
||||||
|
dat += "<font color='red'>Viral pathogen detected in blood stream.</font><BR>"
|
||||||
|
|
||||||
|
var/extra_font = null
|
||||||
|
extra_font = "<font color=[occupant.getBruteLoss() < 60 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\t-Brute Damage %: [occupant.getBruteLoss()]</font><br>"
|
||||||
|
|
||||||
|
extra_font = "<font color=[occupant.getOxyLoss() < 60 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\t-Respiratory Damage %: [occupant.getOxyLoss()]</font><br>"
|
||||||
|
|
||||||
|
extra_font = "<font color=[occupant.getToxLoss() < 60 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\t-Toxin Content %: [occupant.getToxLoss()]</font><br>"
|
||||||
|
|
||||||
|
extra_font = "<font color=[occupant.getFireLoss() < 60 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\t-Burn Severity %: [occupant.getFireLoss()]</font><br>"
|
||||||
|
|
||||||
|
extra_font = "<font color=[occupant.radiation < 10 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\tRadiation Level %: [occupant.radiation]</font><br>"
|
||||||
|
|
||||||
|
extra_font = "<font color=[occupant.getCloneLoss() < 1 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\tGenetic Tissue Damage %: [occupant.getCloneLoss()]</font><br>"
|
||||||
|
|
||||||
|
extra_font = "<font color=[occupant.getBrainLoss() < 1 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\tApprox. Brain Damage %: [occupant.getBrainLoss()]</font><br>"
|
||||||
|
|
||||||
|
dat += "Paralysis Summary %: [occupant.paralysis] ([round(occupant.paralysis / 4)] seconds left!)<br>"
|
||||||
|
dat += "Body Temperature: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)<br>"
|
||||||
|
|
||||||
|
dat += "<hr>"
|
||||||
|
|
||||||
|
if(occupant.has_brain_worms())
|
||||||
|
dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.<br>"
|
||||||
|
|
||||||
|
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 = "<font color=[blood_volume > 448 ? "blue" : "red"]>"
|
||||||
|
dat += "[extra_font]\tBlood Level %: [blood_percent] ([blood_volume] units)</font><br>"
|
||||||
|
|
||||||
|
if(occupant.reagents)
|
||||||
|
for(var/datum/reagent/R in occupant.reagents.reagent_list)
|
||||||
|
dat += "Reagent: [R.name], Amount: [R.volume]<br>"
|
||||||
|
|
||||||
|
if(occupant.ingested)
|
||||||
|
for(var/datum/reagent/R in occupant.ingested.reagent_list)
|
||||||
|
dat += "Stomach: [R.name], Amount: [R.volume]<br>"
|
||||||
|
|
||||||
|
dat += "<hr><table border='1'>"
|
||||||
|
dat += "<tr>"
|
||||||
|
dat += "<th>Organ</th>"
|
||||||
|
dat += "<th>Burn Damage</th>"
|
||||||
|
dat += "<th>Brute Damage</th>"
|
||||||
|
dat += "<th>Other Wounds</th>"
|
||||||
|
dat += "</tr>"
|
||||||
|
|
||||||
|
for(var/obj/item/organ/external/e in occupant.organs)
|
||||||
|
dat += "<tr>"
|
||||||
|
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 = "<br>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 += "<td>[e.name]</td><td>[e.burn_dam]</td><td>[e.brute_dam]</td><td>[robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured][o_dead]</td>"
|
||||||
|
else
|
||||||
|
dat += "<td>[e.name]</td><td>-</td><td>-</td><td>Not Found</td>"
|
||||||
|
dat += "</tr>"
|
||||||
|
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 += "<tr>"
|
||||||
|
dat += "<td>[i.name]</td><td>N/A</td><td>[i.damage]</td><td>[infection]:[mech][i_dead]</td><td></td>"
|
||||||
|
dat += "</tr>"
|
||||||
|
dat += "</table>"
|
||||||
|
if(occupant.sdisabilities & BLIND)
|
||||||
|
dat += "<font color='red'>Cataracts detected.</font><BR>"
|
||||||
|
if(occupant.disabilities & NEARSIGHTED)
|
||||||
|
dat += "<font color='red'>Retinal misalignment detected.</font><BR>"
|
||||||
|
else
|
||||||
|
dat += "\The [src] is empty."
|
||||||
|
else
|
||||||
|
dat = "<font color='red'> Error: No Body Scanner connected.</font>"
|
||||||
|
|
||||||
|
printing_text = dat
|
||||||
|
>>>>>>> c820021... Merge pull request #7361 from ExabyteDiscord/Upstream-Dog-ChemistryThing
|
||||||
|
|||||||
@@ -136,10 +136,10 @@ HALOGEN COUNTER - Radcount on mobs
|
|||||||
for(var/A in C.reagents.reagent_list)
|
for(var/A in C.reagents.reagent_list)
|
||||||
var/datum/reagent/R = A
|
var/datum/reagent/R = A
|
||||||
if(R.scannable)
|
if(R.scannable)
|
||||||
reagentdata["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]</span><br>"
|
reagentdata["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||||
else
|
else
|
||||||
unknown++
|
unknown++
|
||||||
unknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]</span><br>"
|
unknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||||
if(reagentdata.len)
|
if(reagentdata.len)
|
||||||
dat += "<span class='notice'>Beneficial reagents detected in subject's blood:</span><br>"
|
dat += "<span class='notice'>Beneficial reagents detected in subject's blood:</span><br>"
|
||||||
for(var/d in reagentdata)
|
for(var/d in reagentdata)
|
||||||
@@ -156,14 +156,14 @@ HALOGEN COUNTER - Radcount on mobs
|
|||||||
var/stomachreagentdata[0]
|
var/stomachreagentdata[0]
|
||||||
var/stomachunknownreagents[0]
|
var/stomachunknownreagents[0]
|
||||||
for(var/B in C.ingested.reagent_list)
|
for(var/B in C.ingested.reagent_list)
|
||||||
var/datum/reagent/T = B
|
var/datum/reagent/R = B
|
||||||
if(T.scannable)
|
if(R.scannable)
|
||||||
stomachreagentdata["[T.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
stomachreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||||
if (advscan == 0 || showadvscan == 0)
|
if (advscan == 0 || showadvscan == 0)
|
||||||
dat += "<span class='notice'>[T.name] found in subject's stomach.</span><br>"
|
dat += "<span class='notice'>[R.name] found in subject's stomach.</span><br>"
|
||||||
else
|
else
|
||||||
++unknown
|
++unknown
|
||||||
stomachunknownreagents["[T.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
stomachunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||||
if(advscan >= 1 && showadvscan == 1)
|
if(advscan >= 1 && showadvscan == 1)
|
||||||
dat += "<span class='notice'>Beneficial reagents detected in subject's stomach:</span><br>"
|
dat += "<span class='notice'>Beneficial reagents detected in subject's stomach:</span><br>"
|
||||||
for(var/d in stomachreagentdata)
|
for(var/d in stomachreagentdata)
|
||||||
@@ -180,14 +180,14 @@ HALOGEN COUNTER - Radcount on mobs
|
|||||||
var/touchreagentdata[0]
|
var/touchreagentdata[0]
|
||||||
var/touchunknownreagents[0]
|
var/touchunknownreagents[0]
|
||||||
for(var/B in C.touching.reagent_list)
|
for(var/B in C.touching.reagent_list)
|
||||||
var/datum/reagent/T = B
|
var/datum/reagent/R = B
|
||||||
if(T.scannable)
|
if(R.scannable)
|
||||||
touchreagentdata["[T.id]"] = "<span class='notice'>\t[round(C.touching.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
touchreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.touching.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||||
if (advscan == 0 || showadvscan == 0)
|
if (advscan == 0 || showadvscan == 0)
|
||||||
dat += "<span class='notice'>[T.name] found in subject's dermis.</span><br>"
|
dat += "<span class='notice'>[R.name] found in subject's dermis.</span><br>"
|
||||||
else
|
else
|
||||||
++unknown
|
++unknown
|
||||||
touchunknownreagents["[T.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
touchunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||||
if(advscan >= 1 && showadvscan == 1)
|
if(advscan >= 1 && showadvscan == 1)
|
||||||
dat += "<span class='notice'>Beneficial reagents detected in subject's dermis:</span><br>"
|
dat += "<span class='notice'>Beneficial reagents detected in subject's dermis:</span><br>"
|
||||||
for(var/d in touchreagentdata)
|
for(var/d in touchreagentdata)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
var/dose = 0
|
var/dose = 0
|
||||||
var/max_dose = 0
|
var/max_dose = 0
|
||||||
var/overdose = 0 //Amount at which overdose starts
|
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/can_overdose_touch = FALSE // Can the chemical OD when processing on touch?
|
||||||
var/scannable = 0 // Shows up on health analyzers.
|
var/scannable = 0 // Shows up on health analyzers.
|
||||||
var/affects_dead = 0
|
var/affects_dead = 0
|
||||||
@@ -146,7 +146,10 @@
|
|||||||
if(ishuman(M))
|
if(ishuman(M))
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
overdose_mod *= H.species.chemOD_mod
|
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.
|
/datum/reagent/proc/initialize_data(var/newdata) // Called when the reagent is created.
|
||||||
if(!isnull(newdata))
|
if(!isnull(newdata))
|
||||||
|
|||||||
@@ -180,7 +180,21 @@
|
|||||||
L.ExtinguishMob()
|
L.ExtinguishMob()
|
||||||
L.water_act(amount / 25) // Div by 25, as water_act multiplies it by 5 in order to calculate firestack modification.
|
L.water_act(amount / 25) // Div by 25, as water_act multiplies it by 5 in order to calculate firestack modification.
|
||||||
remove_self(needed)
|
remove_self(needed)
|
||||||
|
<<<<<<< HEAD
|
||||||
/* //VOREStation Edit Start. Stops slimes from dying from water. Fixes fuel affect_ingest, too.
|
/* //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("<span class='notice'>[H]\'s [S.name] is put out.</span>")
|
||||||
|
|
||||||
|
>>>>>>> c820021... Merge pull request #7361 from ExabyteDiscord/Upstream-Dog-ChemistryThing
|
||||||
/datum/reagent/water/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/water/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
if(alien == IS_SLIME)
|
if(alien == IS_SLIME)
|
||||||
M.adjustToxLoss(6 * removed)
|
M.adjustToxLoss(6 * removed)
|
||||||
|
|||||||
@@ -260,7 +260,7 @@
|
|||||||
step(M, pick(cardinal))
|
step(M, pick(cardinal))
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
M.emote(pick("twitch", "drool", "moan"))
|
M.emote(pick("twitch", "drool", "moan"))
|
||||||
M.adjustBrainLoss(0.1)
|
M.adjustBrainLoss(0.5 * removed)
|
||||||
|
|
||||||
/datum/reagent/nitrogen
|
/datum/reagent/nitrogen
|
||||||
name = "Nitrogen"
|
name = "Nitrogen"
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#BF0000"
|
color = "#BF0000"
|
||||||
overdose = REAGENTS_OVERDOSE
|
overdose = REAGENTS_OVERDOSE
|
||||||
|
overdose_mod = 0.25
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -214,6 +215,8 @@
|
|||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#225722"
|
color = "#225722"
|
||||||
scannable = 1
|
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)
|
/datum/reagent/carthatoline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
if(alien == IS_DIONA)
|
if(alien == IS_DIONA)
|
||||||
@@ -234,6 +237,11 @@
|
|||||||
if(alien == IS_SLIME)
|
if(alien == IS_SLIME)
|
||||||
H.druggy = max(M.druggy, 5)
|
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
|
/datum/reagent/dexalin
|
||||||
name = "Dexalin"
|
name = "Dexalin"
|
||||||
id = "dexalin"
|
id = "dexalin"
|
||||||
@@ -267,6 +275,7 @@
|
|||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#0040FF"
|
color = "#0040FF"
|
||||||
overdose = REAGENTS_OVERDOSE * 0.5
|
overdose = REAGENTS_OVERDOSE * 0.5
|
||||||
|
overdose_mod = 1.25
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -434,7 +443,8 @@
|
|||||||
taste_description = "bitterness"
|
taste_description = "bitterness"
|
||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#C8A5DC"
|
color = "#C8A5DC"
|
||||||
overdose = 60
|
overdose = REAGENTS_OVERDOSE * 2
|
||||||
|
overdose_mod = 0.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
metabolism = 0.02
|
metabolism = 0.02
|
||||||
mrate_static = TRUE
|
mrate_static = TRUE
|
||||||
@@ -458,7 +468,8 @@
|
|||||||
taste_description = "sourness"
|
taste_description = "sourness"
|
||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#CB68FC"
|
color = "#CB68FC"
|
||||||
overdose = 30
|
overdose = REAGENTS_OVERDOSE
|
||||||
|
overdose_mod = 0.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
metabolism = 0.02
|
metabolism = 0.02
|
||||||
mrate_static = TRUE
|
mrate_static = TRUE
|
||||||
@@ -482,6 +493,7 @@
|
|||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#800080"
|
color = "#800080"
|
||||||
overdose = 20
|
overdose = 20
|
||||||
|
overdose_mod = 0.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
metabolism = 0.02
|
metabolism = 0.02
|
||||||
mrate_static = TRUE
|
mrate_static = TRUE
|
||||||
@@ -529,7 +541,7 @@
|
|||||||
M.AdjustWeakened(-1)
|
M.AdjustWeakened(-1)
|
||||||
holder.remove_reagent("mindbreaker", 5)
|
holder.remove_reagent("mindbreaker", 5)
|
||||||
M.hallucination = max(0, M.hallucination - 10)
|
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)
|
M.add_chemical_effect(CE_PAINKILLER, 20 * chem_effective * M.species.chem_strength_pain)
|
||||||
|
|
||||||
/datum/reagent/hyperzine
|
/datum/reagent/hyperzine
|
||||||
@@ -540,6 +552,7 @@
|
|||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#FF3300"
|
color = "#FF3300"
|
||||||
overdose = REAGENTS_OVERDOSE * 0.5
|
overdose = REAGENTS_OVERDOSE * 0.5
|
||||||
|
overdose_mod = 0.25
|
||||||
|
|
||||||
/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
if(alien == IS_TAJARA)
|
if(alien == IS_TAJARA)
|
||||||
@@ -553,6 +566,13 @@
|
|||||||
M.emote(pick("twitch", "blink_r", "shiver"))
|
M.emote(pick("twitch", "blink_r", "shiver"))
|
||||||
M.add_chemical_effect(CE_SPEEDBOOST, 1)
|
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, "<span class='warning'>Huh... Is this what a heart attack feels like?</span>")
|
||||||
|
|
||||||
/datum/reagent/alkysine
|
/datum/reagent/alkysine
|
||||||
name = "Alkysine"
|
name = "Alkysine"
|
||||||
id = "alkysine"
|
id = "alkysine"
|
||||||
@@ -609,6 +629,7 @@
|
|||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
color = "#561EC3"
|
color = "#561EC3"
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 1.5
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/peridaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/peridaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -628,6 +649,11 @@
|
|||||||
if(prob(33))
|
if(prob(33))
|
||||||
H.Confuse(10)
|
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
|
/datum/reagent/osteodaxon
|
||||||
name = "Osteodaxon"
|
name = "Osteodaxon"
|
||||||
id = "osteodaxon"
|
id = "osteodaxon"
|
||||||
@@ -636,6 +662,7 @@
|
|||||||
color = "#C9BCE3"
|
color = "#C9BCE3"
|
||||||
metabolism = REM * 0.5
|
metabolism = REM * 0.5
|
||||||
overdose = REAGENTS_OVERDOSE * 0.5
|
overdose = REAGENTS_OVERDOSE * 0.5
|
||||||
|
overdose_mod = 1.5
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/osteodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/osteodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -658,6 +685,7 @@
|
|||||||
color = "#4246C7"
|
color = "#4246C7"
|
||||||
metabolism = REM * 0.5
|
metabolism = REM * 0.5
|
||||||
overdose = REAGENTS_OVERDOSE * 0.5
|
overdose = REAGENTS_OVERDOSE * 0.5
|
||||||
|
overdose_mod = 1.5
|
||||||
scannable = 1
|
scannable = 1
|
||||||
var/repair_strength = 3
|
var/repair_strength = 3
|
||||||
|
|
||||||
@@ -679,6 +707,23 @@
|
|||||||
if(W.damage <= 0)
|
if(W.damage <= 0)
|
||||||
O.wounds -= W
|
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
|
/datum/reagent/respirodaxon
|
||||||
name = "Respirodaxon"
|
name = "Respirodaxon"
|
||||||
id = "respirodaxon"
|
id = "respirodaxon"
|
||||||
@@ -688,6 +733,7 @@
|
|||||||
color = "#4444FF"
|
color = "#4444FF"
|
||||||
metabolism = REM * 1.5
|
metabolism = REM * 1.5
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 1.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/respirodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/respirodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -719,6 +765,7 @@
|
|||||||
color = "#8B4513"
|
color = "#8B4513"
|
||||||
metabolism = REM * 1.5
|
metabolism = REM * 1.5
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 1.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/gastirodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/gastirodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -750,6 +797,7 @@
|
|||||||
color = "#D2691E"
|
color = "#D2691E"
|
||||||
metabolism = REM * 1.5
|
metabolism = REM * 1.5
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 1.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/hepanephrodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/hepanephrodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -783,6 +831,7 @@
|
|||||||
color = "#FF4444"
|
color = "#FF4444"
|
||||||
metabolism = REM * 1.5
|
metabolism = REM * 1.5
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 1.75
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/cordradaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/cordradaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -810,6 +859,7 @@
|
|||||||
reagent_state = SOLID
|
reagent_state = SOLID
|
||||||
color = "#7B4D4F"
|
color = "#7B4D4F"
|
||||||
overdose = 20
|
overdose = 20
|
||||||
|
overdose_mod = 1.5
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/immunosuprizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/immunosuprizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -867,6 +917,7 @@
|
|||||||
color = "#84B2B0"
|
color = "#84B2B0"
|
||||||
metabolism = REM * 0.75
|
metabolism = REM * 0.75
|
||||||
overdose = 20
|
overdose = 20
|
||||||
|
overdose_mod = 1.5
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/skrellimmuno/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/skrellimmuno/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -1008,6 +1059,7 @@
|
|||||||
color = "#008000"
|
color = "#008000"
|
||||||
metabolism = REM * 0.25
|
metabolism = REM * 0.25
|
||||||
overdose = REAGENTS_OVERDOSE
|
overdose = REAGENTS_OVERDOSE
|
||||||
|
overdose_mod = 1.25
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
@@ -1056,6 +1108,7 @@
|
|||||||
color = "#FFB0B0"
|
color = "#FFB0B0"
|
||||||
mrate_static = TRUE
|
mrate_static = TRUE
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 1.5
|
||||||
scannable = 1
|
scannable = 1
|
||||||
data = 0
|
data = 0
|
||||||
|
|
||||||
@@ -1237,6 +1290,7 @@
|
|||||||
reagent_state = SOLID
|
reagent_state = SOLID
|
||||||
color = "#669900"
|
color = "#669900"
|
||||||
overdose = REAGENTS_OVERDOSE
|
overdose = REAGENTS_OVERDOSE
|
||||||
|
overdose_mod = 2
|
||||||
scannable = 1
|
scannable = 1
|
||||||
|
|
||||||
/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
|
|||||||
@@ -423,6 +423,16 @@
|
|||||||
if(prob(5))
|
if(prob(5))
|
||||||
M.vomit()
|
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("<span class='notice'>[H]\'s [S.name] is put out.</span>")
|
||||||
|
|
||||||
/datum/reagent/lube // TODO: spraying on borgs speeds them up
|
/datum/reagent/lube // TODO: spraying on borgs speeds them up
|
||||||
name = "Space Lube"
|
name = "Space Lube"
|
||||||
id = "lube"
|
id = "lube"
|
||||||
|
|||||||
@@ -46,6 +46,11 @@
|
|||||||
color = "#792300"
|
color = "#792300"
|
||||||
strength = 10
|
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
|
/datum/reagent/toxin/carpotoxin
|
||||||
name = "Carpotoxin"
|
name = "Carpotoxin"
|
||||||
id = "carpotoxin"
|
id = "carpotoxin"
|
||||||
@@ -55,6 +60,10 @@
|
|||||||
color = "#003333"
|
color = "#003333"
|
||||||
strength = 10
|
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
|
/datum/reagent/toxin/neurotoxic_protein
|
||||||
name = "toxic protein"
|
name = "toxic protein"
|
||||||
id = "neurotoxic_protein"
|
id = "neurotoxic_protein"
|
||||||
@@ -212,6 +221,7 @@
|
|||||||
color = "#d0583a"
|
color = "#d0583a"
|
||||||
metabolism = REM * 3
|
metabolism = REM * 3
|
||||||
overdose = 10
|
overdose = 10
|
||||||
|
overdose_mod = 0.5
|
||||||
strength = 3
|
strength = 3
|
||||||
|
|
||||||
/datum/reagent/toxin/stimm/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
/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.take_organ_damage(6 * removed, 0)
|
||||||
M.add_chemical_effect(CE_SPEEDBOOST, 1)
|
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, "<span class='warning'>Huh... Is this what a heart attack feels like?</span>")
|
||||||
|
|
||||||
/datum/reagent/toxin/potassium_chloride
|
/datum/reagent/toxin/potassium_chloride
|
||||||
name = "Potassium Chloride"
|
name = "Potassium Chloride"
|
||||||
id = "potassium_chloride"
|
id = "potassium_chloride"
|
||||||
@@ -658,7 +675,7 @@
|
|||||||
metabolism = REM * 0.5
|
metabolism = REM * 0.5
|
||||||
ingest_met = REM * 1.5
|
ingest_met = REM * 1.5
|
||||||
overdose = REAGENTS_OVERDOSE * 0.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)
|
/datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
if(alien == IS_DIONA)
|
if(alien == IS_DIONA)
|
||||||
|
|||||||
267
nano/templates/adv_med.tmpl
Normal file
267
nano/templates/adv_med.tmpl
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
<!--
|
||||||
|
Title: Body Scanner UI
|
||||||
|
Used In File(s): \code\game\machinery\adv_med.dm
|
||||||
|
-->
|
||||||
|
{{if !data.occupied}}
|
||||||
|
<h3>No occupant detected.</h3>
|
||||||
|
{{else}}
|
||||||
|
<h4><b>Occupant Data:</b></h4>
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabelNarrow">
|
||||||
|
Name:
|
||||||
|
</div>
|
||||||
|
<div class="itemContent">
|
||||||
|
{{:data.occupant.name}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabelNarrow">
|
||||||
|
Health:
|
||||||
|
</div>
|
||||||
|
{{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, (data.occupant.health >= 50) ? 'good' : (data.occupant.health >= 25) ? 'average' : 'bad')}}
|
||||||
|
<div class="itemContent" style="width: 60px">
|
||||||
|
{{:helper.round(data.occupant.health / data.occupant.maxHealth)*100}}%
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabelNarrow">
|
||||||
|
Status:
|
||||||
|
</div>
|
||||||
|
<div class="itemContent">
|
||||||
|
{{if data.occupant.stat==0}}
|
||||||
|
Stable
|
||||||
|
{{else data.occupant.stat==1}}
|
||||||
|
Non-Responsive
|
||||||
|
{{else}}
|
||||||
|
Dead
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{:helper.link('Print', 'document', {'print_p' : 1, 'name' : data.occupant.name})}}
|
||||||
|
<h4><b>Damage:</b></h4>
|
||||||
|
<table class='item'>
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 10%;'>Brute:</td>
|
||||||
|
<td class='itemContent brute' style='width: 10%;'>{{:data.occupant.bruteLoss}}</td>
|
||||||
|
<td class='itemLabel' style='width: 15%;'>Brain:</td>
|
||||||
|
<td class='itemContent' style='width: 15%;'>{{:data.occupant.brainLoss}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 10%;'>Burn:</td>
|
||||||
|
<td class='itemContent burn' style='width: 10%;'>{{:data.occupant.fireLoss}}</td>
|
||||||
|
<td class='itemLabel' style='width: 15%;'>Radiation:</td>
|
||||||
|
<td class='itemContent' style='width: 15%;'>{{:data.occupant.radLoss}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 10%;'>Oxygen:</td>
|
||||||
|
<td class='itemContent oxyloss' style='width: 10%;'>{{:data.occupant.oxyLoss}}</td>
|
||||||
|
<td class='itemLabel' style='width: 15%;'>Genetic:</td>
|
||||||
|
<td class='itemContent' style='width: 15%;'>{{:data.occupant.cloneLoss}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 10%;'>Toxins:</td>
|
||||||
|
<td class='itemContent toxin' style='width: 10%;'>{{:data.occupant.toxLoss}}</td>
|
||||||
|
<td class='itemLabel' style='width: 15%;'>Paralysis:</td>
|
||||||
|
<td class='itemContent' style='width: 20%;'>{{:data.occupant.paralysis}}% ({{:data.occupant.paralysisSeconds}} seconds left!)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabelNarrow'>Body Temperature:</td>
|
||||||
|
<td class="itemContentMedium">{{:helper.round(data.occupant.bodyTempC*10)/10}}°C, {{:helper.round(data.occupant.bodyTempF*10)/10}}°F</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{{if data.occupant.hasVirus}}
|
||||||
|
<div class="notice">
|
||||||
|
Viral pathogen detected in blood stream.
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{if data.occupant.hasBorer}}
|
||||||
|
<div class="notice">
|
||||||
|
Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{if data.occupant.blind}}
|
||||||
|
<div class="item bad">Pupils unresponsive.</div>
|
||||||
|
{{/if}}
|
||||||
|
{{if data.occupant.nearsighted}}
|
||||||
|
<div class="item bad">Retinal Misalignment Detected</div>
|
||||||
|
{{/if}}
|
||||||
|
<h4><b>Blood</b></h4>
|
||||||
|
<table class="item">
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 10%;'>Volume:</td>
|
||||||
|
<td class='itemContent' style='width: 10%;'>{{:data.occupant.blood.volume}}</td>
|
||||||
|
<td class='itemLabel' style='width: 10%;'>Percent:</td>
|
||||||
|
<td class='itemContent' style='width: 10%;'>{{:data.occupant.blood.percent}}%</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h4>Blood Reagents</h4>
|
||||||
|
{{if data.occupant.reagents}}
|
||||||
|
<table class='item'>
|
||||||
|
{{for data.occupant.reagents}}
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 20%;'>{{:value.name}}:</td>
|
||||||
|
<td class='itemContent' style='width: 10%;'>{{:value.amount}}</td>
|
||||||
|
<td class='itemContent brute' style='width: 10%;'>{{:value.overdose}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/for}}
|
||||||
|
</table>
|
||||||
|
{{else}}
|
||||||
|
<div class='item'>No blood reagents detected.</div>
|
||||||
|
{{/if}}
|
||||||
|
<h4>Stomach Reagents</h4>
|
||||||
|
{{if data.occupant.ingested}}
|
||||||
|
<table class='item'>
|
||||||
|
{{for data.occupant.ingested}}
|
||||||
|
<tr>
|
||||||
|
<td class='itemLabel' style='width: 20%;'>{{:value.name}}:</td>
|
||||||
|
<td class='itemContent' style='width: 10%;'>{{:value.amount}}</td>
|
||||||
|
<td class='itemContent brute' style='width: 10%;'>{{:value.overdose}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/for}}
|
||||||
|
</table>
|
||||||
|
{{else}}
|
||||||
|
<div class='item'>No stomach reagents detected.</div>
|
||||||
|
{{/if}}
|
||||||
|
<h4><b>External Organs</b></h4>
|
||||||
|
<div class="itemGroup">
|
||||||
|
{{for data.occupant.extOrgan}}
|
||||||
|
<div class="item">
|
||||||
|
{{if value.status.destroyed}}
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
<b>{{:value.name}}</b><span class="bad"> - DESTROYED</span>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabel">
|
||||||
|
<b>{{:value.name}}</b>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{if value.status.broken}}
|
||||||
|
{{:value.status.broken}}
|
||||||
|
{{else value.status.splinted}}
|
||||||
|
Splinted
|
||||||
|
{{else value.status.robotic}}
|
||||||
|
Robotic
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
Brute/Burn
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{:value.bruteLoss}}/{{:value.fireLoss}}
|
||||||
|
</div>
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
Injuries
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{if !value.status.bleeding}}
|
||||||
|
{{if !value.status.internalBleeding}}
|
||||||
|
No Injuries Detected
|
||||||
|
{{else}}
|
||||||
|
<span class="bad">Internal Bleeding Detected</span>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
{{if value.status.internalBleeding}}
|
||||||
|
<div class='notice'>Internal Bleeding Detected. External Bleeding Detected.</div>
|
||||||
|
{{else}}
|
||||||
|
<span class="average">External Bleeding Detected</span>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
{{if value.germ_level > 100}}
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
Infection
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{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}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{if value.status.dead}}
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
Necrosis
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
Necrotic Tissue Present
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{if value.open}}
|
||||||
|
<div class="itemLabelWider">
|
||||||
|
Operation Status
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
Open Incision
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{if value.implants_len}}
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
Implants
|
||||||
|
</div>
|
||||||
|
{{for value.implants :impValue:impindex}}
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{:impValue.known ? impValue.name : "Unknown"}}
|
||||||
|
</div>
|
||||||
|
{{/for}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
{{/for}}
|
||||||
|
</div>
|
||||||
|
<h4><b>Internal Organs</b></h4>
|
||||||
|
<div class="itemGroup">
|
||||||
|
{{for data.occupant.intOrgan}}
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
<b>{{:value.name}}</b>
|
||||||
|
</div>
|
||||||
|
<div class='itemContentNarrow'>
|
||||||
|
{{:value.desc != null ? value.desc : ""}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
{{if value.germ_level > 100}}
|
||||||
|
<div class="itemLabel">
|
||||||
|
Infection
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{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}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
<div class="itemLabelWide">
|
||||||
|
Damage
|
||||||
|
</div>
|
||||||
|
<div class="itemContentNarrow">
|
||||||
|
{{:value.damage}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/for}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
Reference in New Issue
Block a user