diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm index 04b0c1fa8b3..87cabe8288b 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm @@ -1406,3 +1406,35 @@ to_chat(pred, span_vnotice("Your [belly] manages to [lowertext(belly.vore_verb)] \the [target].")) to_chat(target, span_vwarning("You are [lowertext(belly.vore_verb)]ed by \The [pred]'s [belly]!")) return pred.begin_instant_nom(src, target, pred, belly, FALSE) + +/mob/living/proc/name_change_verb() + set name = "Change Name" + set desc = "Change your name. Notifies admins." + set category = "Abilities.Superpower" + + if(last_special > world.time) + return + + var/chosen_name = tgui_input_text(src, "What would you like your name to become?", "Name change", name, MAX_NAME_LEN) + + if(!chosen_name || !length(chosen_name)) + return + + last_special = world.time + (5 SECONDS) //don't spam check the global list pls + for(var/mob/checkplayer in GLOB.player_list) + if(checkplayer == src) + continue + if(!checkplayer.client) //no client, no problem + continue + if(checkplayer.name == chosen_name) + if(checkplayer.client.prefs.resleeve_lock) + to_chat(src, span_notice("\The [checkplayer]'s preferences forbid you from impersonating them.")) + log_and_message_admins("[key_name(src)] attempted to impersonate [key_name(checkplayer)], but preferences prevented it.", src) + return + log_and_message_admins("[key_name(src)] impersonated [key_name(checkplayer)]!", src) + + log_and_message_admins("[key_name(src)] set their name to [chosen_name]", src) + if(dna) + dna.real_name = chosen_name + real_name = chosen_name + name = chosen_name diff --git a/code/modules/mob/living/carbon/human/species/station/traits/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits/positive.dm index 5b0591a1bd7..e82dbc5e13f 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits/positive.dm @@ -947,3 +947,15 @@ if(G) G.radiation_healing = initial(G.radiation_healing) G.radiation_nutrition = initial(G.radiation_nutrition) + +/datum/trait/positive/shapeshifting + name = "Shapeshifter" + desc = "You're able to shift your appearance." + cost = 3 //this trait is functionally wholly cosmetic, but it is less flavor-restricted than cocoon, and takes less time, so it's a bit pricier + custom_only = FALSE + hidden = TRUE + +/datum/trait/positive/shapeshifting/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..() + add_verb(H, /mob/living/carbon/human/proc/innate_shapeshifting) + add_verb(H, /mob/living/proc/name_change_verb)