Hidden Shell Records, take TWO!!! (#20713)

!!! Please merge AFTER #20723 for migrate version (this PR is set up to
seamlessly be merged after that PR) !!!

Adds a new option to character preferences determining whether a shell
is a hidden shell or not. Right now this is a Yes/No toggle that solely
makes records display as "Human" instead of "Shell Frame".

The previous iteration of this was icky. 

![image](https://github.com/user-attachments/assets/c2d15682-9f35-40a7-8d46-e11cc9d9ee66)
I hope this is better.

My rationale for this is twofold:
Right now, you can only play a hidden shell "correctly" if you're
untagged. Firstly, this isn't explained anywhere, so people might miss
this by playing a tagged shell that's playing human. Someone might do
this because a tag can be a potent story tool, especially for specific
brands or lines of shells. Imagine tag scanning a runaway you've found
and getting presented with `HLTD-S07U24`, suddenly you get a huge amount
of storytelling there that wouldn't be present without the tag. <sub>any
similarities to persons living or dead is purely coincidental.</sub>

Secondly, it also means you can't play a shell who doesn't try and hide
it, but also has no tag, because that'll automatically show as human,
which is problematic in many ways.


Also, I moved the "species" field in records to the top with the rest of
the public info, and took it out of employement records, because
security and medical would definitely also get that info, logically
speaking.


In the future (with lore team approval) i would like to enable certain
human citizenships for shells with this preference enabled (likely just
Sol, but i mean if lore team wants we can get wacky with Dominia too),
but that's out of scope for this PR.
This commit is contained in:
FlamingLily
2025-05-08 04:36:16 +10:00
committed by GitHub
parent 0c51a92d9d
commit da592558c2
7 changed files with 115 additions and 33 deletions
@@ -17,6 +17,8 @@
S["ipc_tag_status"] >> pref.machine_tag_status
S["ipc_serial_number"] >> pref.machine_serial_number
S["ipc_ownership_status"] >> pref.machine_ownership_status
if(istype(GLOB.all_species[pref.species], /datum/species/machine/shell))
S["hidden_shell_status"] >> pref.hidden_shell_status
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
S["real_name"] << pref.real_name
@@ -33,6 +35,8 @@
S["ipc_tag_status"] << pref.machine_tag_status
S["ipc_serial_number"] << pref.machine_serial_number
S["ipc_ownership_status"] << pref.machine_ownership_status
if(istype(GLOB.all_species[pref.species], /datum/species/machine/shell))
S["hidden_shell_status"] << pref.hidden_shell_status
// if table_name and pref.var_name is different, then do it like
// "table_name" = "pref.var_name", as below
@@ -57,7 +61,8 @@
"vars" = list(
"tag_status" = "machine_tag_status",
"serial_number" = "machine_serial_number",
"ownership_status" = "machine_ownership_status"
"ownership_status" = "machine_ownership_status",
"hidden_status" = "hidden_shell_status"
),
"args" = list("char_id")
)
@@ -91,6 +96,7 @@
"tag_status",
"serial_number",
"ownership_status",
"hidden_status",
"char_id" = 1 // = 1 signifies argument
)
)
@@ -108,6 +114,7 @@
"tag_status" = pref.machine_tag_status,
"serial_number" = pref.machine_serial_number,
"ownership_status" = pref.machine_ownership_status,
"hidden_status" = pref.hidden_shell_status,
"id" = pref.current_character,
"char_id" = pref.current_character,
"floating_chat_color" = pref.floating_chat_color,
@@ -197,6 +204,8 @@
else
dat += "<b>Serial Number:</b> [pref.machine_serial_number] (<a href='byond://?src=[REF(src)];namehelp=1'>?</a>)<br>"
dat += "<b>Ownership Status:</b> [pref.machine_ownership_status] (<a href='byond://?src=[REF(src)];namehelp=1'>?</a>)<br>"
if(istype(S, /datum/species/machine/shell))
dat += "<b>Is Hidden Shell:</b> <a href='byond://?src=[REF(src)];hidden_status=1'>[pref.hidden_shell_status ? "Hidden" : "Not Hidden"]</a><br>"
if(GLOB.config.allow_Metadata)
dat += "<b>OOC Notes:</b> <a href='byond://?src=[REF(src)];metadata=1'> Edit </a>" \
+ "<a href='byond://?src=[REF(src)];clear_metadata=1'>Clear</a>" + "<br>"
@@ -357,6 +366,15 @@
pref.machine_ownership_status = new_ownership_status
return TOPIC_REFRESH
else if(href_list["hidden_status"])
var/choice = alert(user, "Do you want to be a hidden Shell? This will label your Shell as a Human in their records.\n\n WARNING: This would involve forging of records or some other form of fraud, and is highly illegal in the Republic of Biesel", "Hidden Shell Status", "Yes", "No")
if(CanUseTopic(user))
if(choice == "Yes")
pref.hidden_shell_status = TRUE
else
pref.hidden_shell_status = FALSE
return TOPIC_REFRESH
else if (href_list["clear_metadata"])
if (CanUseTopic(user))
var/user_choice = alert(
+1
View File
@@ -92,6 +92,7 @@ GLOBAL_LIST_EMPTY_TYPED(preferences_datums, /datum/preferences)
var/machine_tag_status = TRUE
var/machine_serial_number
var/machine_ownership_status = IPC_OWNERSHIP_COMPANY
var/hidden_shell_status = FALSE
//Some faction information.
var/home_system = "Unset" //System of birth.