[Records rework] Creates defaults for all records (#4614)

## About The Pull Request
This PR does four things:
- Shortens and simplifies the medical records template, making it more
accessible
- Expands Security records flavor into a personnel file that includes
exploitables and your character's background, so that you can have
Security records without having a criminal history
- Creates defaults for medical records, general records, and Security
records in the character creator, rather than just the wiki.
- Removes exploitables and background records as they've now been
integrated into Security records.

## Why It's Good For The Game
This PR should make records more accessible for individual players by
reducing the amount of work involved, as well as expanding Security
records to be more useful.

## Proof Of Testing
<img width="656" height="494" alt="image"
src="https://github.com/user-attachments/assets/2b5455b2-0e73-4e0a-b9c8-fd278db85040"
/>

## Changelog

🆑 ReturnToZender (code)
add: All records now have enhanced defaults when making a new character 
add: Security records have been expanded into personnel records,
containing more information on your character
del: Exploitables and Background records have been merged into the
definition of Security records, which are now Personnel Records.
/🆑
This commit is contained in:
Return
2025-09-14 14:54:46 -05:00
committed by GitHub
parent f9682540c8
commit b5aa4f649b
8 changed files with 16 additions and 65 deletions

View File

@@ -143,8 +143,7 @@ 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/exploitable) || "",
background_information = person_client?.prefs.read_preference(/datum/preference/text/background) || "",
exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/security) || "",
// BUBBER EDIT END
)

View File

@@ -168,7 +168,6 @@
datum/mind/mind_ref,
// BUBBER EDIT BEGIN - Records
exploitable_information = "",
background_information = "",
)
. = ..()
src.locked_dna = locked_dna
@@ -177,8 +176,7 @@
GLOB.manifest.locked += src
// BUBBER EDIT BEGIn - Records
src.background_information = background_information
// BUBBER EDIT BEGIN - Records
src.exploitable_information = exploitable_information
// BUBBER EDIT END

View File

@@ -407,8 +407,6 @@
to_chat(usr, "<b>Medical Record:</b> [target_record.past_medical_records]")
if(href_list["genrecords"])
to_chat(usr, "<b>General Record:</b> [target_record.past_general_records]")
if(target_locked_record && href_list["bgrecords"])
to_chat(usr, "<b>Background information:</b> [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, "<b>Exploitable information:</b> [target_locked_record.exploitable_information]")

View File

@@ -11,7 +11,5 @@
var/past_security_records
/datum/record/locked
/// Contains their background information.
var/background_information
/// Contains their exploitable information.,
var/exploitable_information

View File

@@ -86,6 +86,9 @@
savefile_key = "general_record"
maximum_value_length = MAX_FLAVOR_LEN
/datum/preference/text/general/create_default_value()
return "PERSONAL INFORMATION \n\ Name: \n\ Species: \n\ Physical Description: Height, weight, visible age \n\ Birthdate: \n\ Homeworld: \n\ Preferred Language: \n\ Spoken Languages: \n\ Contact Info: Home, next of kin, phone number"
/datum/preference/text/general/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
return FALSE
@@ -95,6 +98,9 @@
savefile_key = "medical_record"
maximum_value_length = MAX_FLAVOR_LEN
/datum/preference/text/medical/create_default_value()
return "PHYSICAL EVALUATIONS \n\ \n\ PSYCHOLOGICAL EVALUATIONS \n\ \n\ MEDICATION HISTORY \n\ \n\ SURGICAL HISTORY \n\ \n\ DOCTOR NOTES:"
/datum/preference/text/medical/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
return FALSE
@@ -104,26 +110,8 @@
savefile_key = "security_record"
maximum_value_length = MAX_FLAVOR_LEN
/datum/preference/text/security/create_default_value()
return "EDUCATION \n\ \n\ EMPLOYMENT HISTORY \n\ Employed since: \n\ CRIMINAL HISTORY \n\ \n\ Loyalty Rating: \n\ Pressure Points: points used to control crewmember \n\ \n\ CASEWORKER NOTES:"
/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

View File

@@ -86,13 +86,6 @@
if(!isnull(target_record)) // this can be null
to_chat(usr, "<b>Exploitable information:</b> [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, "<b>Background information:</b> [target_record.background_information]")
/datum/record_manifest/ui_data(mob/user)
var/list/positions = list()

View File

@@ -236,13 +236,6 @@ 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(

View File

@@ -82,16 +82,16 @@ export const custom_smell: Feature<string> = {
export const general_record: Feature<string> = {
name: 'Records - General',
description:
'Viewable with any records access. \
For general viewing-things like employment, qualifications, etc.',
'The first part of any record that describes you. \
For a quick description, your languages and origin, and birthday.',
component: FeatureTextInput,
};
export const security_record: Feature<string> = {
name: 'Records - Security',
name: 'Records - Personnel',
description:
'Viewable with security access. \
For criminal records, arrest history, things like that.',
'Viewable with security access, or by Command. \
For employment and criminal history, loyalties and exploitables information, and more.',
component: FeatureTextInput,
};
@@ -103,22 +103,6 @@ export const medical_record: Feature<string> = {
component: FeatureTextInput,
};
export const exploitable_info: Feature<string> = {
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<string> = {
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<string> = {
name: 'PDA Ringer Message',
description: