[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, locked_dna = record_dna,
mind_ref = person.mind, mind_ref = person.mind,
// BUBBER EDIT ADDITION BEGIN - Records // BUBBER EDIT ADDITION BEGIN - Records
exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/exploitable) || "", exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/security) || "",
background_information = person_client?.prefs.read_preference(/datum/preference/text/background) || "",
// BUBBER EDIT END // BUBBER EDIT END
) )

View File

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

View File

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

View File

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

View File

@@ -86,6 +86,9 @@
savefile_key = "general_record" savefile_key = "general_record"
maximum_value_length = MAX_FLAVOR_LEN 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) /datum/preference/text/general/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
return FALSE return FALSE
@@ -95,6 +98,9 @@
savefile_key = "medical_record" savefile_key = "medical_record"
maximum_value_length = MAX_FLAVOR_LEN 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) /datum/preference/text/medical/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
return FALSE return FALSE
@@ -104,26 +110,8 @@
savefile_key = "security_record" savefile_key = "security_record"
maximum_value_length = MAX_FLAVOR_LEN 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) /datum/preference/text/security/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
return FALSE 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 if(!isnull(target_record)) // this can be null
to_chat(usr, "<b>Exploitable information:</b> [target_record.exploitable_information]") 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) /datum/record_manifest/ui_data(mob/user)
var/list/positions = list() 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) noncon = READ_PREFS(mob, choiced/erp_status_nc)
character_ad = READ_PREFS(mob, text/character_ad) character_ad = READ_PREFS(mob, text/character_ad)
ooc_notes = READ_PREFS(mob, text/ooc_notes) 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 name = mob.real_name ? mob.name : mob.real_name
directory_mobs.Add(list(list( directory_mobs.Add(list(list(

View File

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