diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 4bc91e95990..ab5ef0d4e94 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -16,7 +16,7 @@ spawn(3) var/mob/living/carbon/human/H = player.current if(istype(H)) - H.change_appearance(APPEARANCE_ALL, H, valid_species) + H.change_appearance(APPEARANCE_ALL, H, valid_species, update_id = TRUE) H.rejuvenate() //So that things like disabilities and stuff get cleared. if((flags & ANTAG_NO_FLAVORTEXT) && ishuman(player.current)) var/mob/living/carbon/human/H = player.current diff --git a/code/modules/acting/acting_items.dm b/code/modules/acting/acting_items.dm index 272d9135ecf..911710a3971 100644 --- a/code/modules/acting/acting_items.dm +++ b/code/modules/acting/acting_items.dm @@ -28,7 +28,7 @@ if(!istype(H)) return - H.change_appearance(APPEARANCE_ALL, H, TRUE, H.generate_valid_species(), null, default_state, src) + H.change_appearance(APPEARANCE_ALL, H, TRUE, H.generate_valid_species(), null, default_state, src, update_id = TRUE) var/getName = sanitizeName(sanitize_readd_odd_symbols(sanitize(input(H, "Would you like to change your name to something else?", "Name change") as null|text))) if(getName) H.real_name = getName diff --git a/code/modules/ghostroles/spawner/human/human.dm b/code/modules/ghostroles/spawner/human/human.dm index d35ea9c0f52..33df932a780 100644 --- a/code/modules/ghostroles/spawner/human/human.dm +++ b/code/modules/ghostroles/spawner/human/human.dm @@ -106,12 +106,6 @@ M.forceMove(T) M.lastarea = get_area(M.loc) //So gravity doesnt fuck them. - //Setup the appearance - if(allow_appearance_change) - M.change_appearance(allow_appearance_change, M) - else //otherwise randomize - M.client.prefs.randomize_appearance_for(M, FALSE) - //Setup the mob age and name if(!mname) mname = random_name(M.gender, M.species.name) @@ -134,6 +128,12 @@ M.preEquipOutfit(outfit, FALSE) M.equipOutfit(outfit, FALSE) + //Setup the appearance + if(allow_appearance_change) + M.change_appearance(allow_appearance_change, M, update_id = TRUE) + else //otherwise randomize + M.client.prefs.randomize_appearance_for(M, FALSE) + for(var/language in extra_languages) M.add_language(language) diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 86a76757625..c6869a2be23 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/mob/user = src, var/check_species_whitelist = TRUE, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/ui_state = interactive_state, var/datum/state_object = src) - var/datum/vueui_module/appearance_changer/AC = new /datum/vueui_module/appearance_changer(src, check_species_whitelist, species_whitelist, species_blacklist, ui_state, state_object) +/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/mob/user = src, var/check_species_whitelist = TRUE, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/ui_state = interactive_state, var/datum/state_object = src, var/update_id = FALSE) + var/datum/vueui_module/appearance_changer/AC = new /datum/vueui_module/appearance_changer(src, check_species_whitelist, species_whitelist, species_blacklist, ui_state, state_object, update_id) AC.flags = flags AC.ui_interact(user) diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index e27b840d79d..ab56bfa0f34 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -6,6 +6,8 @@ var/datum/state_object var/datum/weakref/target_human + var/datum/weakref/target_id //Mostly for ghostroles and plastic surgery machines. If there is an ID, update it when we close the UI to ensure the correct info is imprinted. + var/change_id = FALSE //Prevents runtimes in vueui_on_close if target_id is null var/list/valid_species = list() var/list/valid_genders = list() var/list/valid_pronouns = list() @@ -13,6 +15,7 @@ var/list/valid_facial_hairstyles = list() var/list/valid_cultures = list() var/list/valid_origins = list() + var/list/valid_citizenships = list() var/list/valid_accents = list() var/list/valid_languages = list() @@ -20,11 +23,16 @@ var/list/whitelist var/list/blacklist -/datum/vueui_module/appearance_changer/New(var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/set_ui_state = interactive_state, var/datum/set_state_object = null) +/datum/vueui_module/appearance_changer/New(var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/set_ui_state = interactive_state, var/datum/set_state_object = null, var/update_id) ..() ui_state = set_ui_state state_object = set_state_object target_human = WEAKREF(H) + if(istype(H) && update_id) + var/obj/item/card/id/idcard = H.GetIdCard() + if(idcard) + target_id = WEAKREF(idcard) + change_id = TRUE src.check_whitelist = check_species_whitelist src.whitelist = species_whitelist src.blacklist = species_blacklist @@ -144,6 +152,13 @@ owner.citizenship = new_origin.possible_citizenships[1] clear_and_generate_data() return 1 + if(href_list["citizenship"]) + if(can_change(APPEARANCE_CULTURE)) + var/new_citizenship = href_list["citizenship"] + if(new_citizenship in valid_citizenships) + owner.citizenship = new_citizenship + clear_and_generate_data() + return 1 if(href_list["accent"]) if(can_change(APPEARANCE_CULTURE)) if(owner.set_accent(href_list["accent"])) @@ -189,6 +204,8 @@ data["valid_cultures"] = valid_cultures data["owner_origin"] = owner.origin.name data["valid_origins"] = valid_origins + data["owner_citizenship"] = owner.citizenship + data["valid_citizenships"] = valid_citizenships data["owner_accent"] = owner.accent data["valid_accents"] = valid_accents @@ -217,6 +234,14 @@ return data +/datum/vueui_module/appearance_changer/vueui_on_close(var/datum/vueui/ui) + if(change_id) + var/mob/living/carbon/human/owner = target_human.resolve() + var/obj/item/card/id/I = target_id.resolve() + if(!istype(I) || !(istype(owner))) + return FALSE + owner.set_id_info(I) + /datum/vueui_module/appearance_changer/proc/update_dna() var/mob/living/carbon/human/owner = target_human.resolve() if(!istype(owner)) @@ -256,6 +281,7 @@ valid_facial_hairstyles = list() valid_cultures = list() valid_origins = list() + valid_citizenships = list() valid_accents = list() valid_languages = list() generate_data() @@ -282,6 +308,7 @@ for(var/origin in OC.possible_origins) var/decl/origin_item/origin/OI = decls_repository.get_decl(origin) valid_origins[OI.name] = OI + valid_citizenships = owner.origin.possible_citizenships valid_accents = owner.origin.possible_accents if(!length(valid_languages)) valid_languages = owner.generate_valid_languages() \ No newline at end of file diff --git a/html/changelogs/doxxmedearly-appearance_changer_additions.yml b/html/changelogs/doxxmedearly-appearance_changer_additions.yml new file mode 100644 index 00000000000..a3d5b598a61 --- /dev/null +++ b/html/changelogs/doxxmedearly-appearance_changer_additions.yml @@ -0,0 +1,6 @@ +author: Doxxmedearly +delete-after: True +changes: + - bugfix: "Ghostspawner roles will now have their ID card updated after they close the character setup window, so that it displays the correct information." + - rscadd: "Ghostspawner roles will now be able to select their citizenship, based on standard origin and culture selections." + - rscadd: "Citizenship selection and ID card updates will also apply to any mob using the plastic surgeon machine, assuming they have an ID equipped before using it." \ No newline at end of file diff --git a/vueui/src/components/view/misc/appearancechanger.vue b/vueui/src/components/view/misc/appearancechanger.vue index b052f66119e..1577ebc7f2b 100644 --- a/vueui/src/components/view/misc/appearancechanger.vue +++ b/vueui/src/components/view/misc/appearancechanger.vue @@ -40,6 +40,12 @@