/**
* Record datum. Used for crew records and admin locked records.
*/
/datum/record
/// Age of the character
var/age
/// Their blood type
var/blood_type
/// Character appearance
var/mutable_appearance/character_appearance
/// DNA string
var/dna_string
/// Fingerprint string (md5)
var/fingerprint
/// The character's gender
var/gender
/// The character's initial rank at roundstart
var/initial_rank
/// The character's name
var/name = "Unknown"
/// The character's rank
var/rank
/// The character's species
var/species
/// The character's ID trim
var/trim
/// The character's voice, if they have one.
var/voice
/datum/record/New(
age = 18,
chrono_age = 18, // SKYRAT EDIT ADDITION - Chronological age
blood_type = "?",
character_appearance,
dna_string = "Unknown",
fingerprint = "?????",
gender = "Other",
initial_rank = "Unassigned",
name = "Unknown",
rank = "Unassigned",
species = "Human",
trim = "Unassigned",
voice = "?????",
)
src.age = age
src.chrono_age = chrono_age // SKYRAT EDIT ADDITION - Chronological age
src.blood_type = blood_type
src.character_appearance = character_appearance
src.dna_string = dna_string
src.fingerprint = fingerprint
src.gender = gender
src.initial_rank = rank
src.name = name
src.rank = rank
src.species = species
src.trim = trim
/**
* Crew record datum
*/
/datum/record/crew
/// List of citations
var/list/citations = list()
/// List of crimes
var/list/crimes = list()
/// Unique ID generated that is used to fetch lock record
var/lock_ref
/// Names of major disabilities
var/major_disabilities
/// Fancy description of major disabilities
var/major_disabilities_desc
/// List of medical notes
var/list/medical_notes = list()
/// Names of minor disabilities
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
var/security_note
/// Current arrest status
var/wanted_status = WANTED_NONE
///Photo used for records, which we store here so we don't have to constantly make more of.
var/list/obj/item/photo/record_photos
/datum/record/crew/New(
age = 18,
chrono_age = 18, // SKYRAT EDIT ADDITION - Chronological age
blood_type = "?",
character_appearance,
dna_string = "Unknown",
fingerprint = "?????",
gender = "Other",
initial_rank = "Unassigned",
name = "Unknown",
rank = "Unassigned",
species = "Human",
trim = "Unassigned",
/// Crew specific
lock_ref,
major_disabilities = "None",
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
past_general_records = "",
past_medical_records = "",
past_security_records = "",
// SKYRAT EDIT END
)
. = ..()
src.lock_ref = lock_ref
src.major_disabilities = major_disabilities
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.past_general_records = past_general_records
src.past_medical_records = past_medical_records
src.past_security_records = past_security_records
// SKYRAT EDIT END
GLOB.manifest.general += src
/datum/record/crew/Destroy()
GLOB.manifest.general -= src
QDEL_LAZYLIST(record_photos)
return ..()
/**
* Admin locked record
*/
/datum/record/locked
/// Mob's dna
var/datum/dna/locked_dna
/// Mind datum
var/datum/weakref/mind_ref
/// Typepath of species used by player, for usage in respawning via records
var/species_type
/datum/record/locked/New(
age = 18,
chrono_age = 18, // SKYRAT EDIT ADDITION - Chronological age
blood_type = "?",
character_appearance,
dna_string = "Unknown",
fingerprint = "?????",
gender = "Other",
initial_rank = "Unassigned",
name = "Unknown",
rank = "Unassigned",
species = "Human",
trim = "Unassigned",
/// Locked specific
datum/dna/locked_dna,
datum/mind/mind_ref,
// BUBBER EDIT BEGIN - Records
exploitable_information = "",
)
. = ..()
src.locked_dna = locked_dna
src.mind_ref = WEAKREF(mind_ref)
species_type = locked_dna.species.type
GLOB.manifest.locked += src
// BUBBER EDIT BEGIN - Records
src.exploitable_information = exploitable_information
// BUBBER EDIT END
/datum/record/locked/Destroy()
GLOB.manifest.locked -= src
return ..()
/// A helper proc to get the front photo of a character from the record.
/// Handles calling `get_photo()`, read its documentation for more information.
/datum/record/crew/proc/get_front_photo()
return get_photo("photo_front", SOUTH)
/// A helper proc to get the side photo of a character from the record.
/// Handles calling `get_photo()`, read its documentation for more information.
/datum/record/crew/proc/get_side_photo()
return get_photo("photo_side", WEST)
/// A helper proc to recreate all photos of a character from the record.
/datum/record/crew/proc/recreate_manifest_photos(add_height_chart)
delete_photos("photo_front")
make_photo("photo_front", SOUTH, add_height_chart)
delete_photos("photo_side")
make_photo("photo_side", WEST, add_height_chart)
///Deletes the existing photo for field_name
/datum/record/crew/proc/delete_photos(field_name)
var/obj/item/photo/existing_photo = LAZYACCESS(record_photos, field_name)
if(existing_photo)
qdel(existing_photo)
LAZYREMOVE(record_photos, field_name)
/**
* You shouldn't be calling this directly, use `get_front_photo()` or `get_side_photo()`
* instead.
*
* This is the proc that handles either fetching (if it was already generated before) or
* generating (if it wasn't) the specified photo from the specified record. This is only
* intended to be used by records that used to try to access `fields["photo_front"]` or
* `fields["photo_side"]`, and will return an empty icon if there isn't any of the necessary
* fields.
*
* Arguments:
* * field_name - The name of the key in the `fields` list, of the record itself.
* * orientation - The direction in which you want the character appearance to be rotated
* in the outputed photo.
*
* Returns an empty `/icon` if there was no `character_appearance` entry in the `fields` list,
* returns the generated/cached photo otherwise.
*/
/datum/record/crew/proc/get_photo(field_name, orientation = SOUTH)
if(!field_name)
return
if(!character_appearance)
return new /icon()
var/obj/item/photo/existing_photo = LAZYACCESS(record_photos, field_name)
if(!existing_photo)
existing_photo = make_photo(field_name, orientation)
return existing_photo
/**
* make_photo
*
* Called if the person doesn't already have a photo, this will make a photo of the person,
* then make a picture out of it, then finally create a new photo.
*/
/datum/record/crew/proc/make_photo(field_name, orientation, add_height_chart)
var/icon/picture_image
if(!isicon(character_appearance))
var/mutable_appearance/appearance = character_appearance
appearance.setDir(orientation)
if(add_height_chart)
appearance.underlays += mutable_appearance('icons/obj/machines/photobooth.dmi', "height_chart", alpha = 125, appearance_flags = RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM|KEEP_APART)
picture_image = getFlatIcon(appearance)
else
picture_image = character_appearance
var/datum/picture/picture = new
picture.picture_name = name
picture.picture_desc = "This is [name]."
picture.picture_image = picture_image
var/obj/item/photo/new_photo = new(null, picture)
LAZYSET(record_photos, field_name, new_photo)
return new_photo
/// Returns a paper printout of the current record's crime data.
/datum/record/crew/proc/get_rapsheet(alias, header = "Rapsheet", description = "No further details.")
var/print_count = ++GLOB.manifest.print_count
var/obj/item/paper/printed_paper = new
var/final_paper_text = "
SR-[print_count]: [header]
"
final_paper_text += "Name: [name]
Gender: [gender]
Age: [age]
"
final_paper_text += "Chronological Age: [chrono_age]
" // SKYRAT EDIT ADDITION - Chronological age
if(alias != name)
final_paper_text += "Alias: [alias]
"
final_paper_text += "Species: [species]
Fingerprint: [fingerprint]
Wanted Status: [wanted_status]
"
//SKYRAT EDIT ADD - RP RECORDS
if(past_general_records != "")
final_paper_text += "
General Records:"
final_paper_text += "
[past_general_records]
"
//SKYRAT EDIT ADD END
final_paper_text += "Security Data
"
//SKYRAT EDIT ADDITION START - RP RECORDS
if(past_security_records != "")
final_paper_text += "Security Records:"
final_paper_text += "
[past_security_records]
"
//SKYRAT EDIT END
final_paper_text += "Crimes:
"
final_paper_text += {"
| Crime |
Details |
Author |
Time Added |
"}
for(var/datum/crime/crime in crimes)
if(crime.valid)
final_paper_text += "| [crime.name] | "
final_paper_text += "[crime.details] | "
final_paper_text += "[crime.author] | "
final_paper_text += "[crime.time] | "
else
for(var/i in 1 to 4)
final_paper_text += "--REDACTED-- | "
final_paper_text += "
"
final_paper_text += "
"
final_paper_text += "Citations:
"
final_paper_text += {"
| Citation |
Details |
Author |
Time Added |
Fine |
"}
for(var/datum/crime/citation/warrant in citations)
final_paper_text += "| [warrant.name] | "
final_paper_text += "[warrant.details] | "
final_paper_text += "[warrant.author] | "
final_paper_text += "[warrant.time] | "
final_paper_text += "[warrant.fine] | "
final_paper_text += "
"
final_paper_text += "
"
final_paper_text += "Important Notes:
"
if(security_note)
final_paper_text += "- [security_note]
"
if(description)
final_paper_text += "- [description]
"
printed_paper.name = "SR-[print_count] '[name]'"
/// SKYRAT EDIT ADD - TRUE
printed_paper.add_raw_text(final_paper_text,TRUE)
/// SKYRAT EDIT ADD END
printed_paper.update_appearance()
return printed_paper