/** * 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 += {""} for(var/datum/crime/crime in crimes) if(crime.valid) final_paper_text += "" final_paper_text += "" final_paper_text += "" final_paper_text += "" else for(var/i in 1 to 4) final_paper_text += "" final_paper_text += "" final_paper_text += "
Crime Details Author Time Added
[crime.name][crime.details][crime.author][crime.time]--REDACTED--


" final_paper_text += "Citations:
" final_paper_text += {"
"} for(var/datum/crime/citation/warrant in citations) final_paper_text += "" final_paper_text += "" final_paper_text += "" final_paper_text += "" final_paper_text += "" final_paper_text += "" final_paper_text += "
Citation Details Author Time Added Fine
[warrant.name][warrant.details][warrant.author][warrant.time][warrant.fine]


" 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