diff --git a/baystation12.dme b/baystation12.dme
index 21cbe4995c6..0775de87e57 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -165,7 +165,6 @@
#include "code\datums\mind.dm"
#include "code\datums\mixed.dm"
#include "code\datums\modules.dm"
-#include "code\datums\organs.dm"
#include "code\datums\recipe.dm"
#include "code\datums\server_greeting.dm"
#include "code\datums\sun.dm"
diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm
index ae34f0138f9..6b2fb741258 100644
--- a/code/_helpers/text.dm
+++ b/code/_helpers/text.dm
@@ -420,4 +420,5 @@ proc/TextPreview(var/string,var/len=40)
t = replacetext(t, "\[logo\]", "
")
t = replacetext(t, "\[time\]", "[worldtime2text()]")
t = replacetext(t, "\[date\]", "[worlddate2text()]")
+ t = replacetext(t, "\[editorbr\]", "
")
return t
diff --git a/code/datums/organs.dm b/code/datums/organs.dm
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 144b17edf31..86f15dd2314 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -4,7 +4,19 @@
/obj/machinery/bodyscanner
var/mob/living/carbon/occupant
var/locked
+ var/obj/machinery/body_scanconsole/connected
+ var/list/allowed_species = list(
+ "Human",
+ "Skrell",
+ "Unathi",
+ "Tajara",
+ "M'sai Tajara",
+ "Zhan-Khazan Tajara",
+ "Vaurca Worker",
+ "Vaurca Warrior"
+ )
name = "Body Scanner"
+ desc = "A state-of-the-art medical diagnostics machine. Guaranteed detection of all your bodily ailments or your money back!"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "body_scanner_0"
density = 1
@@ -14,6 +26,11 @@
idle_power_usage = 60
active_power_usage = 10000 //10 kW. It's a big all-body scanner.
+/obj/machinery/bodyscanner/Destroy()
+ // So the GC can qdel this.
+ src.connected.connected = null
+ return ..()
+
/obj/machinery/bodyscanner/relaymove(mob/user as mob)
if (user.stat)
return
@@ -183,6 +200,14 @@
return
else
return
+
+/obj/machinery/bodyscanner/proc/check_species()
+ if (!occupant || !ishuman(occupant))
+ return 1
+ var/mob/living/carbon/human/O = occupant
+ if (!O)
+ return 1
+ return !(O.get_species() in allowed_species)
/obj/machinery/body_scanconsole/ex_act(severity)
@@ -199,6 +224,10 @@
else
return
+/obj/machinery/body_scanconsole/Destroy()
+ src.connected.connected = null
+ return ..()
+
/obj/machinery/body_scanconsole/power_change()
..()
if(stat & BROKEN)
@@ -213,95 +242,225 @@
/obj/machinery/body_scanconsole
var/obj/machinery/bodyscanner/connected
var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking)
- var/delete
- var/temphtml
name = "Body Scanner Console"
+ desc = "A control panel for some kind of medical device."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "body_scannerconsole"
density = 0
anchored = 1
-
/obj/machinery/body_scanconsole/New()
..()
- spawn( 5 )
+ spawn(5)
src.connected = locate(/obj/machinery/bodyscanner, get_step(src, WEST))
+ src.connected.connected = src
return
return
-/*
-
-/obj/machinery/body_scanconsole/process() //not really used right now
- if(stat & (NOPOWER|BROKEN))
- return
- //use_power(250) // power stuff
-
-// var/mob/M //occupant
-// if (!( src.status )) //remove this
-// return
-// if ((src.connected && src.connected.occupant)) //connected & occupant ok
-// M = src.connected.occupant
-// else
-// if (istype(M, /mob))
-// //do stuff
-// else
-/// src.temphtml = "Process terminated due to lack of occupant in scanning chamber."
-// src.status = null
-// src.updateDialog()
-// return
-
-*/
-
/obj/machinery/body_scanconsole/attack_ai(user as mob)
return src.attack_hand(user)
/obj/machinery/body_scanconsole/attack_hand(user as mob)
if(..())
return
- if(stat & (NOPOWER|BROKEN))
- return
- if(!connected || (connected.stat & (NOPOWER|BROKEN)))
- user << "This console is not connected to a functioning body scanner."
- return
- if(!ishuman(connected.occupant))
- user << "This device can only scan compatible lifeforms."
- return
-
- var/dat
- if (src.delete && src.temphtml) //Window in buffer but its just simple message, so nothing
- src.delete = src.delete
- else if (!src.delete && src.temphtml) //Window in buffer - its a menu, dont add clear message
- dat = text("[]
Main Menu", src.temphtml, src)
- else
- if (src.connected) //Is something connected?
- dat = format_occupant_data(src.connected.get_occupant_data())
- dat += "
Print
"
- else
- dat = "Error: No Body Scanner connected."
-
- dat += text("
Close", user)
- user << browse(dat, "window=scanconsole;size=430x600")
- return
-
+
+ ui_interact(user)
/obj/machinery/body_scanconsole/Topic(href, href_list)
- if (..())
- return
+ ..()
+ // shouldn't be reachable if occupant is invalid
if (href_list["print"])
- if (!src.connected)
- usr << "\icon[src]Error: No body scanner connected."
- return
- var/mob/living/carbon/human/occupant = src.connected.occupant
- if (!src.connected.occupant)
- usr << "\icon[src]The body scanner is empty."
- return
- if (!istype(occupant,/mob/living/carbon/human))
- usr << "\icon[src]The body scanner cannot scan that lifeform."
- return
var/obj/item/weapon/paper/R = new(src.loc)
- R.set_content_unsafe("Scan ([occupant])", format_occupant_data(src.connected.get_occupant_data()))
+ R.set_content_unsafe("Scan ([src.connected.occupant])", format_occupant_data(src.connected.get_occupant_data()))
+ print(R, "[src] beeps, printing [R.name] after a moment.")
+
+/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
+ var/list/data = list()
+ var/occupied = (src.connected && src.connected.occupant)
+ var/mob/living/carbon/human/occupant
+ if (src.connected)
+ occupant = src.connected.occupant
+
+ data["noscan"] = src.connected.check_species()
+ data["nocons"] = !src.connected
+ data["occupied"] = occupied
+ data["invalid"] = src.connected && src.connected.check_species()
+ data["ipc"] = src.connected && occupant && isipc(occupant)
+ if (!data["invalid"])
+ var/datum/reagents/R = occupant.bloodstr
+ var/datum/reagents/B = occupant.vessel
+ data["stat"] = occupant.stat
+ data["name"] = occupant.name
+ data["species"] = occupant.get_species() // mostly for fluff.
+ data["health"] = occupant.health
+ data["maxHealth"] = occupant.maxHealth
+ data["minHealth"] = config.health_threshold_dead
+ data["bruteLoss"] = occupant.getBruteLoss()
+ data["oxyLoss"] = occupant.getOxyLoss()
+ data["toxLoss"] = occupant.getToxLoss()
+ data["fireLoss"] = occupant.getFireLoss()
+ data["rads"] = occupant.total_radiation
+ data["cloneloss"] = occupant.getCloneLoss()
+ data["brainloss"] = occupant.getBrainLoss()
+ data["paralysis"] = occupant.paralysis
+ data["bodytemp"] = occupant.bodytemperature
+ data["occupant"] = occupant
+ data["bloodAmt"] = B.get_reagent_amount("blood")
+ data["bloodMax"] = 560 // You'd think this'd be defined somewhere.
+ data["bloodPerc"] = (data["bloodAmt"] / data["bloodMax"]) * 100
+ data["bloodStatus"] = val2status(data["bloodAmt"], B.total_volume * 0.9, B.total_volume * 0.8, inverse = 1)
+ data["inaprovAmt"] = R.get_reagent_amount("inaprovaline")
+ data["soporAmt"] = R.get_reagent_amount("stoxin")
+ data["bicardAmt"] = R.get_reagent_amount("bicaridine")
+ data["dexAmt"] = R.get_reagent_amount("dexalin")
+ data["dermAmt"] = R.get_reagent_amount("dermaline")
+ data["otherAmt"] = R.total_volume - (data["soporAmt"] + data["dexAmt"] + data["bicardAmt"] + data["inaprovAmt"] + data["dermAmt"])
+ data["brainDmgStatus"] = val2status(occupant.brainloss, 20, 50)
+ data["radStatus"] = val2status(occupant.total_radiation)
+ data["cloneDmgStatus"] = val2status(occupant.cloneloss, 10, 35)
+ data["bodyparts"] = get_organ_wound_data(occupant)
+ var/list/missing = get_missing_organs(occupant)
+ data["missingparts"] = missing
+ data["hasmissing"] = missing.len ? 1 : 0
+ data["hasvirus"] = occupant.virus2.len || occupant.viruses.len
+ data["hastgvirus"] = occupant.viruses.len
+ data["tgvirus"] = occupant.viruses
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "med_diagnostics.tmpl", "Medical Diagnostics", 800, 500, state = state)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/body_scanconsole/proc/get_missing_organs(var/mob/living/carbon/human/H)
+ var/list/missingOrgans = list()
+ var/list/species_organs = H.species.has_organ
+ for (var/organ_name in H.species.has_organ)
+ if (!locate(species_organs[organ_name]) in H.internal_organs)
+ missingOrgans += organ_name
+ return missingOrgans
+
+/obj/machinery/body_scanconsole/proc/get_organ_wound_data(var/mob/living/carbon/human/H)
+ var/list/organs = list()
+
+ // Internal Organs. (Duh.)
+ for (var/obj/item/organ/O in H.internal_organs)
+ var/list/data = list()
+ data["name"] = O.name
+ var/list/wounds
+ switch (O.damtype)
+ if ("brute")
+ data["bruteDmg"] = O.damage
+ data["burnDmg"] = 0
+ if ("burn")
+ data["burnDmg"] = O.damage
+ data["bruteDmg"] = 0
+
+ if (istype(O, /obj/item/organ/lungs) && H.is_lung_ruptured())
+ wounds += "Shows symptoms of structural failure."
+
+ if (istype(O, /obj/item/organ/brain) && H.has_brain_worms())
+ wounds += "Has an abnormal growth."
+
+ if (istype(O, H.species.vision_organ))
+ if (H.sdisabilities & BLIND)
+ wounds += "Appears to have cataracts."
+ else if (H.disabilities & NEARSIGHTED)
+ wounds += "Appears to have misaligned retinas."
+
+ if (O.germ_level)
+ wounds += get_infection_level(O.germ_level)
+
+ if (O.rejecting)
+ wounds += "Shows symptoms of organ rejection."
+
+ data["hasWounds"] = length(wounds) ? 1 : 0
+ data["wounds"] = wounds
+ organs += list(data)
+
+ // Limbs.
+ for (var/obj/item/organ/external/O in H.organs)
+ var/list/data = list()
+ data["burnDmg"] = O.burn_dam
+ data["bruteDmg"] = O.brute_dam
+ data["name"] = O.name
+
+ var/list/wounds = list()
+ var/num_IB = 0
+ for (var/datum/wound/W in O.wounds)
+ if (W.internal)
+ num_IB++
+
+ if (num_IB)
+ if (num_IB > 1)
+ wounds += "Shows signs of severe internal bleeding."
+ else
+ wounds += "Shows signs of internal bleeding."
+
+ if (O.status & ORGAN_ROBOT)
+ wounds += "Appears to be composed of inorganic material."
+ if (O.status & ORGAN_SPLINTED)
+ wounds += "Splinted."
+ if (O.status & ORGAN_BLEEDING)
+ wounds += "Bleeding."
+ if (O.status & ORGAN_BROKEN)
+ wounds += "Is \a [O.broken_description]."
+ if (O.open)
+ wounds += "Has an open wound."
+ if (O.germ_level)
+ var/level = get_infection_level(O.germ_level)
+ if (level && level != "")
+ wounds += "Shows symptoms of \a [level] infection."
+ if (O.rejecting)
+ wounds += "Shows symptoms indicating limb rejection."
+
+ if (O.implants.len)
+ var/unk = 0
+ for (var/atom/movable/I in O.implants)
+ if (is_type_in_list(I, known_implants))
+ wounds += "[I.name] present."
+ else
+ unk += 1
+ if (unk)
+ wounds += "Has an abnormal mass present."
+
+ data["hasWounds"] = length(wounds) ? 1 : 0
+ data["wounds"] = wounds
+ organs += list(data)
+
+ return organs
+
+/obj/machinery/body_scanconsole/proc/get_infection_level(var/level)
+ switch (level)
+ if (INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200)
+ return "mild"
+ if (INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
+ return "worsening mild"
+ if (INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
+ return "borderline acute"
+ if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
+ return "acute"
+ if (INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
+ return "worsening acute"
+ if (INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 400)
+ return "borderline septic"
+ if (INFECTION_LEVEL_THREE to INFINITY)
+ return "septic"
+
+ return ""
+
+/obj/machinery/body_scanconsole/proc/val2status(var/val, var/warn_threshold = 10, var/danger_threshold = 50, var/inverse = 0)
+ if (val < warn_threshold)
+ return inverse ? "bad" : "good"
+ if (val < danger_threshold)
+ return "average"
+ return inverse ? "good" : "bad"
+
+
+// These are old procs used for printing.
/obj/machinery/bodyscanner/proc/get_occupant_data()
if (!occupant || !istype(occupant, /mob/living/carbon/human))
@@ -415,23 +574,12 @@
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_TWO + 400)
- infected = "Acute Infection++:"
- if (INFECTION_LEVEL_THREE to INFINITY)
- infected = "Septic:"
+ var/infection = "[get_infection_level(e.germ_level)] infection"
+ if (infection == "")
+ infection = "None"
if(e.rejecting)
- infected += "(being rejected)"
+ infected += " (being rejected)"
+
if (e.implants.len)
var/unknown_body = 0
for(var/I in e.implants)
@@ -458,20 +606,11 @@
if(i.robotic == 2)
mech = "Mechanical:"
- var/infection = "None"
- switch (i.germ_level)
- if (1 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 INFINITY)
- infection = "Acute Infection++:"
+ var/infection = get_infection_level(i.germ_level)
+ if (infection == "")
+ infection = "None"
+ else
+ infection = "[infection] infection"
if(i.rejecting)
infection += "(being rejected)"
diff --git a/code/global.dm b/code/global.dm
index 93da2ce5bd7..33257ccbbd9 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -40,7 +40,7 @@ var/const/company_name = "NanoTrasen"
var/const/company_short = "NT"
var/game_version = "Baystation12"
var/changelog_hash = ""
-var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
+var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 442)
var/round_progressing = 1
var/master_mode = "extended" // "extended"
diff --git a/html/changelogs/lohikar-advscan.yml b/html/changelogs/lohikar-advscan.yml
new file mode 100644
index 00000000000..c6bd6af9d0e
--- /dev/null
+++ b/html/changelogs/lohikar-advscan.yml
@@ -0,0 +1,33 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Lohikar
+delete-after: True
+changes:
+ - rscadd: "Added a fancy new UI to the medical advanced scanner."
+ - bugfix: "The medical advanced scanner can print once more."
+ - tweak: "Tweaked how the advanced scanner describes injuries and infections."
+ - rscdel: "You can no longer scan Dionae and IPCs with the adv. scanner."
+ - bugfix: "The in-game year should be lore-accurate again."
+ - bugfix: "Text-editors on consoles should no longer show [editorbr]."
diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm
index 97f81258ab3..9d13442fdec 100644
--- a/maps/exodus-2.dmm
+++ b/maps/exodus-2.dmm
@@ -1404,7 +1404,7 @@
"AZ" = (/turf/unsimulated/wall,/area/syndicate_mothership{name = "\improper Raider Base"})
"Ba" = (/obj/machinery/vending/cola{name = "Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"Bb" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/holding)
-"Bc" = (/obj/machinery/bodyscanner{dir = 8; icon_state = "body_scanner_0"; tag = "icon-body_scanner_0 (EAST)"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Bc" = (/obj/machinery/bodyscanner{allowed_species = list("Human","Skrell","Unathi","Tajara","M'sai Tajara","Zhan-Khazan Tajara","Vaurca Worker","Vaurca Warrior","Vox"); dir = 8; icon_state = "body_scanner_0"; tag = "icon-body_scanner_0 (EAST)"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
"Bd" = (/turf/simulated/shuttle/wall{tag = "icon-swall_straight (WEST)"; icon_state = "swall_straight"; dir = 8},/area/shuttle/escape/centcom)
"Be" = (/turf/simulated/shuttle/wall{tag = "icon-swall_t"; icon_state = "swall_t"},/area/shuttle/escape/centcom)
"Bf" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
diff --git a/nano/templates/med_diagnostics.tmpl b/nano/templates/med_diagnostics.tmpl
new file mode 100644
index 00000000000..8a4d2c54a89
--- /dev/null
+++ b/nano/templates/med_diagnostics.tmpl
@@ -0,0 +1,183 @@
+Overall Health
+
+{{if data.invalid}}
+ {{if data.nocons}}
+
Error: No scanner bed detected!
+ {{else !data.occupied}}
+
No occupant detected.
+ {{else data.ipc}}
+
Error: Object in scanner bed interfering with sensor array.
+ {{else data.noscan}}
+
Error: No diagnostics profile installed for this species.
+ {{/if}}
+{{else}}
+
+ {{:data.name}} =>
+ {{if data.stat == 0}}
+ Conscious
+ {{else data.stat == 1}}
+ Unconscious
+ {{else}}
+ DEAD
+ {{/if}}
+
+
+
Species:
+
{{:data.species}}
+
+ {{if data.stat < 2}}
+
+
Health:
+ {{if data.health >= 0}}
+ {{:helper.displayBar(data.health, 0, data.maxHealth, 'good')}}
+ {{else}}
+ {{:helper.displayBar(data.health, 0, data.minHealth, 'average alignRight')}}
+ {{/if}}
+
{{:helper.round(data.health)}}
+
+
+
=> Brute Damage:
+ {{:helper.displayBar(data.bruteLoss, 0, data.maxHealth, 'bad')}}
+
{{:helper.round(data.bruteLoss)}}
+
+
+
=> Resp. Damage:
+ {{:helper.displayBar(data.oxyLoss, 0, data.maxHealth, 'bad')}}
+
{{:helper.round(data.oxyLoss)}}
+
+
+
=> Toxin Damage:
+ {{:helper.displayBar(data.toxLoss, 0, data.maxHealth, 'bad')}}
+
{{:helper.round(data.toxLoss)}}
+
+
+
=> Burn Severity:
+ {{:helper.displayBar(data.fireLoss, 0, data.maxHealth, 'bad')}}
+
{{:helper.round(data.fireLoss)}}
+
+ {{/if}}
+
+
+
Radiation Lvl:
+
+ {{:data.rads}} rads
+
+
+
+
Genetic Dmg:
+
+ {{:data.cloneloss}}%
+
+
+
+
Est. Brain Dmg:
+
+ {{:data.brainloss}}%
+
+
+
+
Est. Paralysis Lvl:
+
{{:data.paralysis}}%{{if data.paralysis}} ({{:helper.round(data.paralysis / 4)}} seconds left){{/if}}
+
+
+
Body Temperature:
+
{{:data.bodytemp}} K (~{{:helper.round(data.bodytemp - 273.15)}} C)
+
+
+
Viral Status:
+ {{if data.hasvirus}}
+
Present
+ {{else data.hastgvirus}}
+ {{for data.tgvirus}}
+
{{:value.form}} Detected
+
=> Name
+
{{:value.name}}
+
=> Type
+
{{:value.spread}}
+
=> Stage
+
{{:value.stage}} of {{:value.max_stages}}
+
=> Possible Cure
+
{{:value.cure}}
+ {{/for}}
+ {{else}}
+
Not Detected
+ {{/if}}
+
+
+ Blood Status
+
+
+
Blood Level:
+ {{:helper.displayBar(data.bloodAmt, 0, data.bloodMax, data.bloodStatus)}}
+
{{:helper.round(data.bloodPerc)}}% ({{:helper.round(data.bloodAmt)}}u)
+
+
+
=> Inaprovaline:
+
{{:helper.round(data.inaprovAmt)}} unit(s)
+
+
+
=> Soporific:
+
{{:helper.round(data.soporAmt)}} unit(s)
+
+
+
=> Bicaridine:
+
{{:helper.round(data.bicardAmt)}} unit(s)
+
+
+
=> Dermaline:
+
{{:helper.round(data.dermAmt)}} unit(s)
+
+
+
=> Dexalin:
+
{{:helper.round(data.dexAmt)}} unit(s)
+
+
+
=> Other:
+
{{:helper.round(data.otherAmt)}} unit(s)
+
+
+ Body Status
+ {{if data.hasmissing}}
+
+
Unable to locate the following organ(s).
+
+ {{for data.missingparts}}
+ - {{:value}}
+ {{/for}}
+
+
+ {{/if}}
+
+ {{for data.bodyparts}}
+
+
+ {{:value.name}}
+
+
+
=> Burn Dmg:
+
{{:helper.round(value.burnDmg)}}
+
+
+
+
=> Brute Dmg:
+
{{:helper.round(value.bruteDmg)}}
+
+ {{if value.hasWounds}}
+
+
=> Information:
+
+
+ {{for value.wounds :wound:woundi}}
+ - {{:wound}}
+ {{/for}}
+
+
+
+ {{/if}}
+
+
+ {{/for}}
+
+ Actions
+ {{:helper.link('Print Report', '', {'print' : 1})}}
+{{/if}}