diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm
index 27221f954cc..00c41459b48 100644
--- a/code/datums/records/manifest.dm
+++ b/code/datums/records/manifest.dm
@@ -143,7 +143,8 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
locked_dna = record_dna,
mind_ref = person.mind,
// BUBBER EDIT ADDITION BEGIN - Records
- exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/security) || "",
+ exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/exploitable) || "",
+ background_information = person_client?.prefs.read_preference(/datum/preference/text/background) || "",
// BUBBER EDIT END
)
diff --git a/code/datums/records/record.dm b/code/datums/records/record.dm
index c2682bb6ef8..04f3205a755 100644
--- a/code/datums/records/record.dm
+++ b/code/datums/records/record.dm
@@ -170,6 +170,7 @@
datum/mind/mind_ref,
// BUBBER EDIT BEGIN - Records
exploitable_information = "",
+ background_information = "",
)
. = ..()
src.locked_dna = locked_dna
@@ -178,7 +179,8 @@
GLOB.manifest.locked += src
- // BUBBER EDIT BEGIN - Records
+ // BUBBER EDIT BEGIn - Records
+ src.background_information = background_information
src.exploitable_information = exploitable_information
// BUBBER EDIT END
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 38b11b256b3..4ef0dd1ffe1 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -407,6 +407,8 @@
to_chat(usr, "Medical Record: [target_record.past_medical_records]")
if(href_list["genrecords"])
to_chat(usr, "General Record: [target_record.past_general_records]")
+ if(target_locked_record && href_list["bgrecords"])
+ to_chat(usr, "Background information: [target_locked_record.background_information]")
if(isobserver(usr) || usr.mind.can_see_exploitables || usr.mind.has_exploitables_override)
if(target_locked_record && href_list["exprecords"])
to_chat(usr, "Exploitable information: [target_locked_record.exploitable_information]")
diff --git a/modular_skyrat/master_files/code/datums/records/record.dm b/modular_skyrat/master_files/code/datums/records/record.dm
index 95394044d66..a1ce078754f 100644
--- a/modular_skyrat/master_files/code/datums/records/record.dm
+++ b/modular_skyrat/master_files/code/datums/records/record.dm
@@ -11,5 +11,7 @@
var/past_security_records
/datum/record/locked
+ /// Contains their background information.
+ var/background_information
/// Contains their exploitable information.,
var/exploitable_information
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm b/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm
index 413add1b0cc..2a761150ae1 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm
@@ -115,3 +115,24 @@
/datum/preference/text/security/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
return FALSE
+
+/datum/preference/text/exploitable
+ category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
+ savefile_identifier = PREFERENCE_CHARACTER
+ savefile_key = "exploitable_info"
+ maximum_value_length = MAX_FLAVOR_LEN
+
+/datum/preference/text/exploitable/create_default_value()
+ return EXPLOITABLE_DEFAULT_TEXT
+
+/datum/preference/text/exploitable/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
+ return FALSE
+
+/datum/preference/text/background
+ category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
+ savefile_identifier = PREFERENCE_CHARACTER
+ savefile_key = "background_info"
+ maximum_value_length = MAX_FLAVOR_LEN
+
+/datum/preference/text/background/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
+ return FALSE
diff --git a/modular_skyrat/modules/records_on_examine/code/record_manifest.dm b/modular_skyrat/modules/records_on_examine/code/record_manifest.dm
index 8c076d0eaca..728d6c04ddc 100644
--- a/modular_skyrat/modules/records_on_examine/code/record_manifest.dm
+++ b/modular_skyrat/modules/records_on_examine/code/record_manifest.dm
@@ -86,6 +86,13 @@
if(!isnull(target_record)) // this can be null
to_chat(usr, "Exploitable information: [target_record.exploitable_information]")
+ else if(action == "show_background")
+ var/background_id = params["background_id"]
+ var/datum/record/locked/target_record = find_record(background_id, TRUE)
+ if(!isnull(target_record))
+ to_chat(usr, "Background information: [target_record.background_information]")
+
+
/datum/record_manifest/ui_data(mob/user)
var/list/positions = list()
diff --git a/modular_zubbers/code/modules/client/verbs/character_directory.dm b/modular_zubbers/code/modules/client/verbs/character_directory.dm
index dc457529b6a..57b6da350ec 100644
--- a/modular_zubbers/code/modules/client/verbs/character_directory.dm
+++ b/modular_zubbers/code/modules/client/verbs/character_directory.dm
@@ -194,6 +194,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
var/hypno = "Ask"
var/noncon = "Ask"
var/character_ad = ""
+ var/exploitable = ""
var/ref = REF(mob)
//Just in case something we get is not a mob
if(!mob)
@@ -235,6 +236,13 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
noncon = READ_PREFS(mob, choiced/erp_status_nc)
character_ad = READ_PREFS(mob, text/character_ad)
ooc_notes = READ_PREFS(mob, text/ooc_notes)
+ //If the user is an antagonist or Observer, we want them to be able to see exploitables in the Directory.
+ if(user.mind?.has_antag_datum(/datum/antagonist) || isobserver(user))
+ if(exploitable == EXPLOITABLE_DEFAULT_TEXT)
+ exploitable = "Unset"
+ else exploitable = READ_PREFS(mob, text/exploitable)
+ else exploitable = "Obscured"
+ //And finally, we want to get the mob's name, taking into account disguised names.
name = mob.real_name ? mob.name : mob.real_name
directory_mobs.Add(list(list(
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx
index 3d14ba49a9d..7790f1c40d0 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx
@@ -88,9 +88,9 @@ export const general_record: Feature = {
};
export const security_record: Feature = {
- name: 'Records - Personnel',
+ name: 'Records - Security',
description:
- 'Privileged information accessible by Security, antags with information, Command and the NTC. \
+ 'Privileged information accessible by Security, Command and the NTC. \
Used to throw these roles a bone, and give more information to work with. \
For employment and criminal history, loyalties and exploitable tidbits, and more.',
component: FeatureTextInput,
@@ -104,6 +104,22 @@ export const medical_record: Feature = {
component: FeatureTextInput,
};
+export const exploitable_info: Feature = {
+ name: 'Records - Exploitable',
+ description:
+ 'Can be IC or OOC. Viewable by certain antagonists/OPFOR users, as well as ghosts. Generally contains \
+ things like weaknesses, strengths, important background, trigger words, etc. It ALSO may contain things like \
+ antagonist preferences, e.g. if you want to be antagonized, by whom, with what, etc.',
+ component: FeatureTextInput,
+};
+
+export const background_info: Feature = {
+ name: 'Records - Background',
+ description:
+ 'Only viewable by yourself and ghosts. You can have whatever you want in here - it may be valuable as a way to orient yourself to what your character is.',
+ component: FeatureTextInput,
+};
+
export const pda_ringer: Feature = {
name: 'PDA Ringer Message',
description: