diff --git a/code/__DEFINES/medical.dm b/code/__DEFINES/medical.dm new file mode 100644 index 00000000000..899de5c273f --- /dev/null +++ b/code/__DEFINES/medical.dm @@ -0,0 +1,27 @@ +/// Physical statuses +#define PHYSICAL_ACTIVE "Active" +#define PHYSICAL_DEBILITATED "Debilitated" +#define PHYSICAL_UNCONSCIOUS "Unconscious" +#define PHYSICAL_DECEASED "Deceased" + +/// List of available physical statuses +#define PHYSICAL_STATUSES list(\ + PHYSICAL_ACTIVE, \ + PHYSICAL_DEBILITATED, \ + PHYSICAL_UNCONSCIOUS, \ + PHYSICAL_DECEASED, \ +) + +/// Mental statuses +#define MENTAL_STABLE "Stable" +#define MENTAL_WATCH "Watch" +#define MENTAL_UNSTABLE "Unstable" +#define MENTAL_INSANE "Insane" + +/// List of available mental statuses +#define MENTAL_STATUSES list(\ + MENTAL_STABLE, \ + MENTAL_WATCH, \ + MENTAL_UNSTABLE, \ + MENTAL_INSANE, \ +) diff --git a/code/datums/records/record.dm b/code/datums/records/record.dm index 9664f3ad1c3..def50e2a286 100644 --- a/code/datums/records/record.dm +++ b/code/datums/records/record.dm @@ -70,6 +70,10 @@ var/minor_disabilities /// Fancy description of minor disabilities var/minor_disabilities_desc + /// Physical status of this person in medical records. + var/physical_status + /// Mental status of this person in medical records. + var/mental_status /// Positive and neutral quirk strings var/quirk_notes /// Security note @@ -95,6 +99,8 @@ major_disabilities_desc = "No disabilities have been diagnosed at the moment.", minor_disabilities = "None", minor_disabilities_desc = "No disabilities have been diagnosed at the moment.", + physical_status = PHYSICAL_ACTIVE, + mental_status = MENTAL_STABLE, quirk_notes, // SKYRAT EDIT START - RP Records background_information = "", @@ -110,6 +116,8 @@ src.major_disabilities_desc = major_disabilities_desc src.minor_disabilities = minor_disabilities src.minor_disabilities_desc = minor_disabilities_desc + src.physical_status = physical_status + src.mental_status = mental_status src.quirk_notes = quirk_notes // SKYRAT EDIT START - RP Records src.background_information = background_information diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm index e5b82f248be..3b80f80888b 100644 --- a/code/game/machinery/computer/records/medical.dm +++ b/code/game/machinery/computer/records/medical.dm @@ -58,6 +58,8 @@ gender = target.gender, major_disabilities = target.major_disabilities_desc, minor_disabilities = target.minor_disabilities_desc, + physical_status = target.physical_status, + mental_status = target.mental_status, name = target.name, notes = notes, quirk_notes = target.quirk_notes, @@ -77,6 +79,8 @@ var/list/data = list() data["min_age"] = AGE_MIN data["max_age"] = AGE_MAX + data["physical_statuses"] = PHYSICAL_STATUSES + data["mental_statuses"] = MENTAL_STATUSES return data /obj/machinery/computer/records/medical/ui_act(action, list/params, datum/tgui/ui) @@ -114,6 +118,24 @@ return TRUE + if("set_physical_status") + var/physical_status = params["physical_status"] + if(!physical_status || !(physical_status in PHYSICAL_STATUSES)) + return FALSE + + target.physical_status = physical_status + + return TRUE + + if("set_mental_status") + var/mental_status = params["mental_status"] + if(!mental_status || !(mental_status in MENTAL_STATUSES)) + return FALSE + + target.mental_status = mental_status + + return TRUE + return FALSE /// Deletes medical information from a record. @@ -130,6 +152,8 @@ target.medical_notes.Cut() target.minor_disabilities = "" target.minor_disabilities_desc = "" + target.physical_status = "" + target.mental_status = "" target.name = "Unknown" target.quirk_notes = "" target.rank = "Unknown" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index ccad7d5eed2..46e27d3bf85 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -420,6 +420,11 @@ if(cyberimp_detect) . += "Detected cybernetic modifications:" . += "[cyberimp_detect]" + if(target_record) + var/health_record = target_record.physical_status + . += "\[[health_record]\]" + health_record = target_record.mental_status + . += "\[[health_record]\]" target_record = find_record(perpname) if(target_record) . += "\[Medical evaluation\]
" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 08e743a20ae..35ad3246858 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -174,6 +174,23 @@ if(!(ACCESS_MEDICAL in access)) to_chat(human_user, span_warning("ERROR: Invalid access")) return + + if(href_list["physical_status"]) + var/health_status = tgui_input_list(human_user, "Specify a new physical status for this person.", "Medical HUD", PHYSICAL_STATUSES, target_record.physical_status) + if(!health_status || !target_record || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_MEDICAL_HUD)) + return + + target_record.physical_status = health_status + return + + if(href_list["mental_status"]) + var/health_status = tgui_input_list(human_user, "Specify a new mental status for this person.", "Medical HUD", MENTAL_STATUSES, target_record.mental_status) + if(!health_status || !target_record || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_MEDICAL_HUD)) + return + + target_record.mental_status = health_status + return + if(href_list["quirk"]) var/quirkstring = get_quirk_string(TRUE, CAT_QUIRK_ALL) if(quirkstring) diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 7f3d099b719..0d8cec96378 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -54,6 +54,8 @@ current_record["bloodtype"] = person.blood_type current_record["ma_dis"] = person.major_disabilities_desc current_record["mi_dis"] = person.minor_disabilities_desc + current_record["physical_status"] = person.physical_status + current_record["mental_status"] = person.mental_status current_record["name"] = person.name current_record["notes"] = person.medical_notes diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 0c49a6b1cad..429050d1825 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -154,7 +154,7 @@ var/obj/item/paper/med_record_paper = new /obj/item/paper(src) var/med_record_text = "
Medical Record

" med_record_text += "Name: [record.name] Rank: [record.rank]
\nGender: [record.gender]
\nAge: [record.age]
" - med_record_text += "
\n
Medical Data

\nBlood Type: [record.blood_type]
\nDNA: [record.dna_string]
\n
\nMinor Disabilities: [record.minor_disabilities]
\nDetails: [record.minor_disabilities_desc]
\n
\nMajor Disabilities: [record.major_disabilities]
\nDetails: [record.major_disabilities_desc]
\n
\nImportant Notes:
\n\t[record.medical_notes]
\n
\n
Comments/Log

" + med_record_text += "
\n
Medical Data

\nBlood Type: [record.blood_type]
\nDNA: [record.dna_string]
\n
\nPhysical Status: [record.physical_status]
\nMental Status: [record.mental_status]
\nMinor Disabilities: [record.minor_disabilities]
\nDetails: [record.minor_disabilities_desc]
\n
\nMajor Disabilities: [record.major_disabilities]
\nDetails: [record.major_disabilities_desc]
\n
\nImportant Notes:
\n\t[record.medical_notes]
\n
\n
Comments/Log

" med_record_text += "" med_record_paper.add_raw_text(med_record_text) med_record_paper.name = "paper - '[record.name]'" diff --git a/tgstation.dme b/tgstation.dme index e2b85b158a5..42183a644f3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -131,6 +131,7 @@ #include "code\__DEFINES\matrices.dm" #include "code\__DEFINES\MC.dm" #include "code\__DEFINES\mecha.dm" +#include "code\__DEFINES\medical.dm" #include "code\__DEFINES\melee.dm" #include "code\__DEFINES\memory_defines.dm" #include "code\__DEFINES\mergers.dm" diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx index 251b54539d2..673589d97ea 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx @@ -3,6 +3,7 @@ import { Stack, Section, NoticeBox, Box, LabeledList, Button, RestrictedInput } import { CharacterPreview } from '../common/CharacterPreview'; import { getMedicalRecord, getQuirkStrings } from './helpers'; import { useBackend } from '../../backend'; +import { PHYSICALSTATUS2COLOR, PHYSICALSTATUS2DESC, PHYSICALSTATUS2ICON, MENTALSTATUS2COLOR, MENTALSTATUS2DESC, MENTALSTATUS2ICON } from './constants'; import { MedicalRecordData } from './types'; import { EditableText } from '../common/EditableText'; @@ -12,7 +13,7 @@ export const MedicalRecordView = (props, context) => { if (!foundRecord) return No record selected.; const { act, data } = useBackend(context); - const { assigned_view } = data; + const { assigned_view, physical_statuses, mental_statuses, station_z } = data; const { min_age, max_age } = data; @@ -24,13 +25,15 @@ export const MedicalRecordView = (props, context) => { gender, major_disabilities, minor_disabilities, + physical_status, + mental_status, name, quirk_notes, rank, - species, // SKYRAT EDIT START - RP Records past_medical_records, // SKYRAT EDIT END + species, } = foundRecord; const minor_disabilities_array = getQuirkStrings(minor_disabilities); @@ -55,6 +58,7 @@ export const MedicalRecordView = (props, context) => { act('expunge_record', { crew_ref: crew_ref })} tooltip="Expunge record data." /> @@ -113,6 +117,62 @@ export const MedicalRecordView = (props, context) => { text={blood_type} /> + { + const isSelected = button === physical_status; + return ( + + ); + })} + label="Physical Status"> + + {physical_status} + + + { + const isSelected = button === mental_status; + return ( + + ); + })} + label="Mental Status"> + + {mental_status} + + {minor_disabilities_array.map((disability, index) => ( • {disability} diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/constants.ts b/tgui/packages/tgui/interfaces/MedicalRecords/constants.ts new file mode 100644 index 00000000000..fcb63caf06a --- /dev/null +++ b/tgui/packages/tgui/interfaces/MedicalRecords/constants.ts @@ -0,0 +1,42 @@ +export const PHYSICALSTATUS2ICON = { + Active: 'person-running', + Debilitated: 'crutch', + Unconscious: 'moon-o', + Deceased: 'skull', +}; + +export const PHYSICALSTATUS2COLOR = { + Active: 'green', + Debilitated: 'purple', + Unconscious: 'orange', + Deceased: 'red', +} as const; + +export const PHYSICALSTATUS2DESC = { + Active: 'Active. Individual is conscious and healthy.', + Debilitated: 'Debilitated. Individual is conscious, but unhealthy.', + Unconscious: 'Unconscious. Individual may require medical attention.', + Deceased: 'Deceased. Individual has died and begun to decay.', +} as const; + +export const MENTALSTATUS2ICON = { + Stable: 'face-smile-o', + Watch: 'eye-o', + Unstable: 'scale-unbalanced-flip', + Insane: 'head-side-virus', +}; + +export const MENTALSTATUS2COLOR = { + Stable: 'green', + Watch: 'purple', + Unstable: 'orange', + Insane: 'red', +} as const; + +export const MENTALSTATUS2DESC = { + Stable: 'Stable. Individual is sane and free from psychological disorders.', + Watch: + 'Watch. Individual has symptoms of mental illness. Monitor them closely.', + Unstable: 'Unstable. Individual has one or more mental illnesses.', + Insane: 'Insane. Individual exhibits severe, abnormal mental behaviors.', +} as const; diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/types.ts b/tgui/packages/tgui/interfaces/MedicalRecords/types.ts index 293db7a1d24..d585fd909d4 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/types.ts +++ b/tgui/packages/tgui/interfaces/MedicalRecords/types.ts @@ -3,6 +3,9 @@ import { BooleanLike } from 'common/react'; export type MedicalRecordData = { assigned_view: string; authenticated: BooleanLike; + station_z: BooleanLike; + physical_statuses: string[]; + mental_statuses: string[]; records: MedicalRecord[]; min_age: number; max_age: number; @@ -16,6 +19,8 @@ export type MedicalRecord = { gender: string; major_disabilities: string; minor_disabilities: string; + physical_status: string; + mental_status: string; name: string; notes: MedicalNote[]; quirk_notes: string; diff --git a/tgui/packages/tgui/interfaces/NtosRecords.js b/tgui/packages/tgui/interfaces/NtosRecords.js index f834f87ad47..b0d90d04455 100644 --- a/tgui/packages/tgui/interfaces/NtosRecords.js +++ b/tgui/packages/tgui/interfaces/NtosRecords.js @@ -78,9 +78,9 @@ export const NtosRecords = (props, context) => { ' ' + record.bloodtype + ' ' + - record.m_stat + + record.mental_status + ' ' + - record.p_stat + record.physical_status ) ) }>