From 1098d40e4aecc5f03b1f8910ad14f0fe74789df3 Mon Sep 17 00:00:00 2001
From: Casper3667 <8396443+Casper3667@users.noreply.github.com>
Date: Sat, 1 Nov 2025 21:39:55 +0100
Subject: [PATCH] Puts blood type in the medical record and let the medhud see
it (#21521)
The blood type was already stored in the medical records, but was not
visible to players. With this, anyone with medical record access can see
the blood type and change it, and anyone with a medical hud can also see
what it is in the person's medical record.
---
.../mob/living/carbon/human/examine.dm | 3 ++
.../file_system/programs/generic/records.dm | 8 +++-
html/changelogs/BloodTypeIsShown.yml | 7 ++++
tgui/packages/tgui/interfaces/Records.tsx | 38 ++++++++++++++++++-
4 files changed, 53 insertions(+), 3 deletions(-)
create mode 100644 html/changelogs/BloodTypeIsShown.yml
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 09e067afde2..673b5cb010b 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -374,6 +374,7 @@
if(hasHUD(user,MED_HUDTYPE))
var/perpname = "wot"
var/medical = "None"
+ var/bloodtype = "Unknown"
var/obj/item/card/id/ID = GetIdCard()
if(ID)
@@ -384,10 +385,12 @@
var/datum/record/general/R = SSrecords.find_record("name", perpname)
if(istype(R))
medical = R.physical_status
+ bloodtype = R.medical.blood_type
msg += "Physical Status: \[[medical]\]\n"
msg += "Medical Records: \[View\] \[Add Comment\]\n"
msg += "Triage Tag: \[[triage_tag]\]\n"
+ msg += "Blood type: [bloodtype]\n"
if(print_flavor_text()) msg += "[print_flavor_text()]\n"
diff --git a/code/modules/modular_computers/file_system/programs/generic/records.dm b/code/modules/modular_computers/file_system/programs/generic/records.dm
index 32506850851..6c9a1b402e8 100644
--- a/code/modules/modular_computers/file_system/programs/generic/records.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/records.dm
@@ -28,7 +28,7 @@
"physical_status" = list("Active", "*Deceased*", "*SSD*", "*Missing*", "Physically Unfit", "Disabled"),
"criminal_status" = list("None", "*Arrest*", "Search", "Incarcerated", "Parolled", "Released"),
"mental_status" = list("Stable", "*Insane*", "*Unstable*", "*Watch*"),
- "medical" = list("A-", "B-", "AB-", "O-", "A+", "B+", "AB+", "O+", "SBS")
+ "blood_type" = list("A-", "B-", "AB-", "O-", "A+", "B+", "AB+", "O+", "SBS")
)
/datum/computer_file/program/records/New()
@@ -118,6 +118,7 @@
data["physical_status_options"] = typechoices["physical_status"]
data["criminal_status_options"] = typechoices["criminal_status"]
data["mental_status_options"] = typechoices["mental_status"]
+ data["blood_type_options"] = typechoices["blood_type"]
data["medical_options"] = typechoices["medical"]
data["allrecords"] = list()
data["allrecords_locked"] = list()
@@ -141,7 +142,7 @@
"religion" = R.religion,
"employer" = R.employer,
"notes" = html_decode(R.notes),
- "blood" = R.medical ? R.medical.blood_type : null,
+ "blood_type" = R.medical ? R.medical.blood_type : null,
"dna" = R.medical ? R.medical.blood_dna : null,
"ccia_notes" = R.ccia_record,
"ccia_actions" = R.ccia_actions,
@@ -272,6 +273,9 @@
if("allergies")
if(!(edit_type & RECORD_MEDICAL))
return FALSE
+ if("blood_type")
+ if(!(edit_type & RECORD_MEDICAL) || (edit_type & RECORD_SECURITY))
+ return FALSE
if("blood_dna")
if(!(edit_type & RECORD_MEDICAL) || (edit_type & RECORD_SECURITY))
return FALSE
diff --git a/html/changelogs/BloodTypeIsShown.yml b/html/changelogs/BloodTypeIsShown.yml
new file mode 100644
index 00000000000..8d9250656f8
--- /dev/null
+++ b/html/changelogs/BloodTypeIsShown.yml
@@ -0,0 +1,7 @@
+author: TheGreyWolf
+
+delete-after: True
+
+changes:
+ - rscadd: "The medical records can now see and edit blood types."
+ - rscadd: "Medhuds now show blood types of people that are examined, based on their medical record."
diff --git a/tgui/packages/tgui/interfaces/Records.tsx b/tgui/packages/tgui/interfaces/Records.tsx
index 6b4db0369b8..8cff47a89ad 100644
--- a/tgui/packages/tgui/interfaces/Records.tsx
+++ b/tgui/packages/tgui/interfaces/Records.tsx
@@ -11,6 +11,7 @@ export type RecordsData = {
physical_status_options: string[];
criminal_status_options: string[];
mental_status_options: string[];
+ blood_type_options: string[];
medical_options: string[];
authenticated: BooleanLike;
@@ -33,7 +34,7 @@ type Record = {
age: string;
fingerprint: string;
has_notes: string;
- blood: string;
+ blood_dna: string;
dna: string;
physical_status: string;
mental_status: string;
@@ -192,6 +193,11 @@ export const ListActive = (props, context) => {
'editingMentalStatus',
false
);
+ const [editingBloodType, setEditingBloodType] = useLocalState(
+ context,
+ 'editingBloodType',
+ false
+ );
const [editingFingerprint, setEditingFingerprint] = useLocalState(
context,
'editingFingerprint',
@@ -476,6 +482,36 @@ export const ListActive = (props, context) => {
{data.active.medical && recordTab === 'Medical' ? (
<>
+
+ {data.editable & 1 || data.editable & 2 ? (
+
+ {editingBloodType ? (
+
+ act('editrecord', {
+ record_type: 'medical',
+ key: 'blood_type',
+ value: v,
+ })
+ }
+ />
+ ) : (
+
+ {data.active.medical.blood_type}
+
+ )}
+
+ ) : (
+ data.active.medical.blood_type
+ )}
+
{data.editable & 2 ? (