shapechange trait upport (#19413)

* shapechange

* HIDE!

* shift the procs

* Update code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm

Co-authored-by: Cameron Lennox <killer65311@gmail.com>

---------

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
Olive
2026-04-20 23:40:05 -04:00
committed by GitHub
co-authored by Cameron Lennox
parent 22bfd1c56c
commit 9b329e5d61
2 changed files with 44 additions and 0 deletions
@@ -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
@@ -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)