diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index 4a56272a..8b517021 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -210,6 +210,7 @@
conditions of your makeshift shelter, the hostile creatures, and the ash drakes swooping down from the cloudless skies, all you can wish for is the feel of soft grass between your toes and \
the fresh air of Earth. These thoughts are dispelled by yet another recollection of how you got here... "
assignedrole = "Hermit"
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/hermit/Initialize(mapload)
. = ..()
@@ -258,6 +259,7 @@
everyone's gone. One of the cats scratched you just a few minutes ago. That's why you were in the pod - to heal the scratch. The scabs are still fresh; you see them right now. So where is \
everyone? Where did they go? What happened to the hospital? And is that smoke you smell? You need to find someone else. Maybe they can tell you what happened."
assignedrole = "Translocated Vet"
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/doctor/alive/lavaland/Destroy()
var/obj/structure/fluff/empty_sleeper/S = new(drop_location())
@@ -318,6 +320,7 @@
flavour_text = "You are a staff member of a top-of-the-line space hotel! Cater to guests and DON'T leave the hotel, lest the manager fire you for\
dereliction of duty!"
assignedrole = "Hotel Staff"
+ mirrorcanloadappearance = TRUE
/datum/outfit/hotelstaff
name = "Hotel Staff"
@@ -335,6 +338,7 @@
flavour_text = "You are a peacekeeper assigned to this hotel to protect the interests of the company while keeping the peace between \
guests and the staff. Do NOT leave the hotel, as that is grounds for contract termination."
objectives = "Do not leave your assigned hotel. Try and keep the peace between staff and guests, non-lethal force heavily advised if possible."
+ mirrorcanloadappearance = TRUE
/datum/outfit/hotelstaff/security
name = "Hotel Secuirty"
@@ -431,6 +435,7 @@
\
The armory is not a candy store, and your role is not to assault the station directly, leave that work to the assault operatives."
outfit = /datum/outfit/syndicate_empty/SBC
+ mirrorcanloadappearance = TRUE
/datum/outfit/syndicate_empty/SBC
name = "Syndicate Battlecruiser Ship Operative"
@@ -444,6 +449,7 @@
\
Work as a team with your fellow operatives and work out a plan of attack. If you are overwhelmed, escape back to your ship!"
outfit = /datum/outfit/syndicate_empty/SBC/assault
+ mirrorcanloadappearance = TRUE
/datum/outfit/syndicate_empty/SBC/assault
name = "Syndicate Battlecruiser Assault Operative"
@@ -463,6 +469,7 @@
As the captain, this whole operation falls on your shoulders. You do not need to nuke the station, causing sufficient damage and preventing your ship from being destroyed will be enough."
outfit = /datum/outfit/syndicate_empty/SBC/assault/captain
id_access_list = list(150,151)
+ mirrorcanloadappearance = TRUE
/datum/outfit/syndicate_empty/SBC/assault/captain
name = "Syndicate Battlecruiser Captain"
@@ -497,6 +504,7 @@
l_pocket = /obj/item/assembly/flash/handheld
job_description = "Oldstation Crew"
assignedrole = "Ancient Crew"
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/oldsec/Destroy()
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
@@ -523,6 +531,7 @@
gloves = /obj/item/clothing/gloves/color/fyellow/old
l_pocket = /obj/item/tank/internals/emergency_oxygen
assignedrole = "Ancient Crew"
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/oldeng/Destroy()
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
@@ -548,6 +557,7 @@
l_pocket = /obj/item/stack/medical/bruise_pack
assignedrole = "Ancient Crew"
job_description = "Oldstation Crew"
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/oldsci/Destroy()
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 73bff081..38696231 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -23,7 +23,24 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
-
+ //Jay's mirror code suggestion
+ //This will be where the person gets to select their appearance instead of the random character
+ if (world.time <= (user.time_initialized + 900) && user.mirrorcanloadappearance == TRUE)
+ to_chat(user, "You peer into the mirror. Make sure you have your ID in your ID slot, if you have one.")
+ if(alert(user, "Would you like to load your currently loaded character's appearance?", "This can only be done up until 90s after you spawn.", "Yes", "No") == "Yes" && world.time <= (user.time_initialized + 900))
+ user.client.prefs.copy_to(user)
+ user.real_name = user.client.prefs.real_name
+ var/obj/item/card/id/idCard = user.get_idcard()
+ if (idCard != null)
+ idCard.update_label(user.real_name, idCard.assignment)
+ idCard.registered_name = user.real_name
+ user.mirrorcanloadappearance = FALSE
+ SEND_SOUND(user, 'sound/magic/charge.ogg')
+ to_chat(user, "Your head aches for a second. You feel like this is how things should have been.")
+ log_game("[key_name(user)] has loaded their default appearance for a ghost role.")
+ message_admins("[ADMIN_LOOKUPFLW(user)] has loaded their default appearance for a ghost role.")
+ return
+ else return
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
//this is largely copypasted from there.
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 74f81ec9..35b0ef71 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -162,6 +162,7 @@
var/hair_style
var/facial_hair_style
var/skin_tone
+ var/mirrorcanloadappearance = FALSE
/obj/effect/mob_spawn/human/Initialize()
if(ispath(outfit))
@@ -228,6 +229,8 @@
W.assignment = id_job
W.registered_name = H.real_name
W.update_label()
+ if (mirrorcanloadappearance)
+ H.mirrorcanloadappearance = TRUE
//Instant version - use when spawning corpses during runtime
/obj/effect/mob_spawn/human/corpse
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 28ff7c8e..fbbfe1bc 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -9,6 +9,7 @@
verbs += /mob/living/proc/mob_sleep
verbs += /mob/living/proc/lay_down
verbs += /mob/living/carbon/human/proc/underwear_toggle //fwee
+ time_initialized = world.time
//initialize limbs first
create_bodyparts()
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 803a392d..7820a780 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -119,3 +119,7 @@
var/registered_z
var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to
+
+ var/time_initialized = null
+
+ var/mirrorcanloadappearance = FALSE
diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm
index 92a637ce..3ea7fa59 100644
--- a/code/modules/ruins/lavaland_ruin_code.dm
+++ b/code/modules/ruins/lavaland_ruin_code.dm
@@ -117,6 +117,7 @@
flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. DON'T abandon the base without good cause. The base is rigged with explosives should the worst happen, do not let the base fall into enemy hands!"
outfit = /datum/outfit/lavaland_syndicate
assignedrole = "Lavaland Syndicate"
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/lavaland_syndicate/special(mob/living/new_spawn)
new_spawn.grant_language(/datum/language/codespeak)
@@ -143,6 +144,7 @@
job_description = "Off-station Syndicate Comms Agent"
flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!"
outfit = /datum/outfit/lavaland_syndicate/comms
+ mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize()
. = ..()