diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index b5a01d275f2..c89c563cf11 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -91,6 +91,7 @@
#define SPECIALROLE_HUD 8 // AntagHUD image.
#define STATUS_HUD_OOC 9 // STATUS_HUD without virus DB check for someone being ill.
#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
+#define TRIAGE_HUD 11 // a HUD that creates a bar above the user showing their medical status
// Shuttles.
diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index 2411d32bd84..f72337b96a3 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -390,6 +390,13 @@
#define CURE_SURGERY "surgery"
#define CURE_ADMIN "all"
+// triage tags
+#define TRIAGE_NONE "None"
+#define TRIAGE_GREEN "Green"
+#define TRIAGE_YELLOW "Yellow"
+#define TRIAGE_RED "Red"
+#define TRIAGE_BLACK "Black"
+
// Surgery Stuff
#define SURGERY_SUCCESS 2 // Proceed with surgery
#define SURGERY_FAIL 1 // Autofail surgery
@@ -419,4 +426,4 @@
// Robot Overlay Defines
#define ROBOT_PANEL_EXPOSED "exposed"
#define ROBOT_PANEL_CELL "cell"
-#define ROBOT_PANEL_NO_CELL "no cell"
+#define ROBOT_PANEL_NO_CELL "no cell"
\ No newline at end of file
diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm
index b37c9193b81..1e037d0d929 100644
--- a/code/defines/procs/hud.dm
+++ b/code/defines/procs/hud.dm
@@ -4,7 +4,7 @@ the HUD updates properly! */
//HUD image type used to properly clear client.images precisely
/image/hud_overlay
- appearance_flags = RESET_COLOR|RESET_ALPHA
+ appearance_flags = RESET_COLOR|RESET_ALPHA|RESET_TRANSFORM
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
@@ -19,12 +19,14 @@ proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
if(local_scanner)
P.Client.images += patient.hud_list[HEALTH_HUD]
P.Client.images += patient.hud_list[STATUS_HUD]
+ P.Client.images += patient.hud_list[TRIAGE_HUD]
else
var/sensor_level = getsensorlevel(patient)
if(sensor_level >= SUIT_SENSOR_VITAL)
P.Client.images += patient.hud_list[HEALTH_HUD]
if(sensor_level >= SUIT_SENSOR_BINARY)
P.Client.images += patient.hud_list[LIFE_HUD]
+ P.Client.images += patient.hud_list[TRIAGE_HUD]
//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features.
proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 99707d22266..134df1f27e8 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -366,8 +366,9 @@
if(istype(R))
medical = R.physical_status
- msg += "Physical status: \[[medical]\]\n"
- msg += "Medical records: \[View\] \[Add comment\]\n"
+ msg += "Physical Status: \[[medical]\]\n"
+ msg += "Medical Records: \[View\] \[Add Comment\]\n"
+ msg += "Triage Tag: \[[triage_tag]\]\n"
if(print_flavor_text()) msg += "[print_flavor_text()]\n"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 934b891e04c..bb1183256b1 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -9,7 +9,7 @@
var/species_items_equipped // used so species that need special items (autoinhalers for vaurca/RMT for offworlders) don't get them twice when they shouldn't.
- var/list/hud_list[10]
+ var/list/hud_list[11]
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
mob_size = 9//Based on average weight of a human
@@ -47,6 +47,7 @@
hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy")
+ hud_list[TRIAGE_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, triage_tag)
//Scaling down the ID hud
var/image/holder = hud_list[ID_HUD]
@@ -759,6 +760,18 @@
var/mob/living/silicon/robot/U = usr
R.medical.comments += text("Made by [U.name] ([U.mod_type] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]")
+ if(href_list["triagetag"])
+ if(hasHUD(usr, "medical"))
+ var/static/list/tags = list()
+ if(!length(tags))
+ for(var/thing in list(TRIAGE_NONE, TRIAGE_GREEN, TRIAGE_YELLOW, TRIAGE_RED, TRIAGE_BLACK))
+ tags[thing] = image(icon = 'icons/mob/screen/triage_tag.dmi', icon_state = thing)
+ var/chosen_tag = show_radial_menu(usr, src, tags, radius = 42, tooltips = TRUE)
+ if(chosen_tag)
+ triage_tag = chosen_tag
+ BITSET(hud_updateflag, HEALTH_HUD)
+ handle_hud_list()
+
if (href_list["lookitem"])
var/obj/item/I = locate(href_list["lookitem"])
if(!I)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index e644bba8e65..e8f1e24542e 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -124,3 +124,5 @@
var/datum/martial_art/primary_martial_art = null
var/list/datum/martial_art/known_martial_arts = null
+
+ var/triage_tag = TRIAGE_NONE
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 9cd396b9bd4..f76be394e56 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1153,15 +1153,21 @@
/mob/living/carbon/human/proc/handle_hud_list(var/force_update = FALSE)
if(force_update)
hud_updateflag = 1022
- if (BITTEST(hud_updateflag, HEALTH_HUD) && hud_list[HEALTH_HUD])
- var/image/holder = hud_list[HEALTH_HUD]
- if(stat == DEAD || (status_flags & FAKEDEATH))
- holder.icon_state = "0" // X_X
- else if(is_asystole())
- holder.icon_state = "flatline"
- else
- holder.icon_state = "[pulse()]"
- hud_list[HEALTH_HUD] = holder
+
+ if (BITTEST(hud_updateflag, HEALTH_HUD))
+ if(hud_list[HEALTH_HUD])
+ var/image/holder = hud_list[HEALTH_HUD]
+ if(stat == DEAD || (status_flags & FAKEDEATH))
+ holder.icon_state = "0" // X_X
+ else if(is_asystole())
+ holder.icon_state = "flatline"
+ else
+ holder.icon_state = "[pulse()]"
+ hud_list[HEALTH_HUD] = holder
+ if(hud_list[TRIAGE_HUD])
+ var/image/holder = hud_list[TRIAGE_HUD]
+ holder.icon_state = triage_tag
+ hud_list[TRIAGE_HUD] = holder
if (BITTEST(hud_updateflag, LIFE_HUD) && hud_list[LIFE_HUD])
var/image/holder = hud_list[LIFE_HUD]
diff --git a/html/changelogs/geeves-triage_tags.yml b/html/changelogs/geeves-triage_tags.yml
new file mode 100644
index 00000000000..b4ffa348b84
--- /dev/null
+++ b/html/changelogs/geeves-triage_tags.yml
@@ -0,0 +1,7 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Added triage tags. Examine any humanoid while wearing any MedHUD to edit their triage tags. It comes in four variants, green, yellow, red, black, to show how critical the patient is."
+ - tweak: "Made HUD elements for humanoids not inherit the rotation applied to them, so a horizontal human will still have a normal upright medHUD display."
diff --git a/icons/mob/hud_med.dmi b/icons/mob/hud_med.dmi
index 705886a5490..20656a19fb9 100644
Binary files a/icons/mob/hud_med.dmi and b/icons/mob/hud_med.dmi differ
diff --git a/icons/mob/screen/triage_tag.dmi b/icons/mob/screen/triage_tag.dmi
new file mode 100644
index 00000000000..19ea11fc4ca
Binary files /dev/null and b/icons/mob/screen/triage_tag.dmi differ