Skip to content

Commit

Permalink
Adds gradient style/colour selection to the appearance changer (#19020)
Browse files Browse the repository at this point in the history
now the ghostspawner and augs and stuff can change gradient style/colour
too where applicable


![image](https://github.com/Aurorastation/Aurora.3/assets/82828093/3c6a7f54-3ec4-447d-a46d-c22ca9cc5a55)

changes:
- rscadd: "Added gradient style/colour selection to the appearance
changer."
- bugfix: "Fixed hair colour being unable to be the same as eye colour."
  • Loading branch information
Llywelwyn authored May 5, 2024
1 parent c8df1d4 commit d6c24f1
Show file tree
Hide file tree
Showing 4 changed files with 157 additions and 1 deletion.
52 changes: 51 additions & 1 deletion code/modules/mob/living/carbon/human/appearance.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,24 @@
update_hair()
return 1

/**
* Sets gradient style and updates hair overlay
*/
/mob/living/carbon/human/proc/change_gradient(var/gradient)
if(!gradient)
return

if(g_style == gradient)
return

if(!(gradient in GLOB.hair_gradient_styles_list))
return

g_style = gradient

update_hair()
return TRUE

/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style)
if(!facial_hair_style)
return
Expand Down Expand Up @@ -94,7 +112,7 @@
return 1

/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue)
if(red == r_eyes && green == g_eyes && blue == b_eyes)
if(red == r_hair && green == g_hair && blue == b_hair)
return

r_hair = red
Expand All @@ -106,6 +124,22 @@
update_hair()
return 1

/**
* Sets gradient colour and updates sprite
*/
/mob/living/carbon/human/proc/change_gradient_color(var/red, var/green, var/blue)
if(red == r_grad && green == g_grad && blue == b_grad)
return

r_grad = red
g_grad = green
b_grad = blue

force_update_limbs()
update_body()
update_hair()
return TRUE

/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue)
if(red == r_facial && green == g_facial && blue == b_facial)
return
Expand Down Expand Up @@ -236,6 +270,22 @@

return valid_hairstyles

/**
* Returns a list of all valid gradient styles for this mob
*/
/mob/living/carbon/human/proc/generate_valid_gradients()
var/list/valid_gradient_styles = list()
if(species.bald)
return valid_gradient_styles
for(var/gradient in GLOB.hair_gradient_styles_list)
var/datum/sprite_accessory/S = GLOB.hair_gradient_styles_list[gradient]

if(!(species.type in S.species_allowed))
continue

valid_gradient_styles += gradient
return valid_gradient_styles

/mob/living/carbon/human/proc/generate_valid_facial_hairstyles()
var/list/valid_facial_hairstyles = new()
if(species.bald)
Expand Down
24 changes: 24 additions & 0 deletions code/modules/nano/modules/human_appearance.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
var/list/valid_genders = list()
var/list/valid_pronouns = list()
var/list/valid_hairstyles = list()
var/list/valid_gradient_styles = list()
var/list/valid_facial_hairstyles = list()
var/list/valid_cultures = list()
var/list/valid_origins = list()
Expand Down Expand Up @@ -115,6 +116,21 @@
if(owner.change_hair_color(r_hair, g_hair, b_hair))
update_dna()
. = TRUE
if("gradient")
if(can_change(APPEARANCE_HAIR) && (params["gradient"] in valid_gradient_styles))
if(owner.change_gradient(params["gradient"]))
update_dna()
. = TRUE
if("gradient_color")
if(can_change(APPEARANCE_HAIR_COLOR))
var/new_gradient = input("Please select gradient color.", "Gradient Color", rgb(owner.r_grad, owner.g_grad, owner.b_grad)) as color|null
if(new_gradient)
var/r_grad = hex2num(copytext(new_gradient, 2, 4))
var/g_grad = hex2num(copytext(new_gradient, 4, 6))
var/b_grad = hex2num(copytext(new_gradient, 6, 8))
if(owner.change_gradient_color(r_grad, g_grad, b_grad))
update_dna()
. = TRUE
if("facial_hair")
if(can_change(APPEARANCE_FACIAL_HAIR) && (params["facial_hair"] in valid_facial_hairstyles))
if(owner.change_facial_hair(params["facial_hair"]))
Expand Down Expand Up @@ -261,11 +277,16 @@
data["owner_hair_style"] = owner.h_style
data["valid_hair_styles"] = valid_hairstyles

data["change_gradient"] = can_change(APPEARANCE_HAIR)
data["owner_gradient_style"] = owner.g_style
data["valid_gradient_styles"] = valid_gradient_styles

data["change_facial_hair"] = can_change(APPEARANCE_FACIAL_HAIR)
data["owner_facial_hair_style"] = owner.f_style
data["valid_facial_hair_styles"] = valid_facial_hairstyles

data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR)
data["change_gradient_color"] = can_change(APPEARANCE_HAIR_COLOR)
data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR)

return data
Expand Down Expand Up @@ -315,6 +336,7 @@
valid_genders = list()
valid_pronouns = list()
valid_hairstyles = list()
valid_gradient_styles = list()
valid_facial_hairstyles = list()
valid_cultures = list()
valid_origins = list()
Expand All @@ -338,6 +360,8 @@
valid_pronouns = owner.species.selectable_pronouns.Copy()
if(!length(valid_hairstyles) || !length(valid_facial_hairstyles))
valid_hairstyles = owner.generate_valid_hairstyles(check_gender = 1)
if(!length(valid_gradient_styles))
valid_gradient_styles = owner.generate_valid_gradients()
if(!length(valid_facial_hairstyles))
valid_facial_hairstyles = owner.generate_valid_facial_hairstyles()
if(!length(valid_cultures))
Expand Down
59 changes: 59 additions & 0 deletions html/changelogs/lly-hairstuff.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################

# Your name.
author: Llywelwyn

# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True

# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added gradient style/colour selection to the appearance changer."
- bugfix: "Fixed hair colour being unable to be the same as eye colour."
23 changes: 23 additions & 0 deletions tgui/packages/tgui/interfaces/AppearanceChanger.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,16 @@ export type ChangerData = {
owner_hair_style: string;
valid_hair_styles: string[];

change_gradient: BooleanLike;
owner_gradient_style: string;
valid_gradient_styles: string[];

change_facial_hair: BooleanLike;
owner_facial_hair_style: string;
valid_facial_hair_styles: string[];

change_hair_color: BooleanLike;
change_gradient_color: BooleanLike;
change_facial_hair_color: BooleanLike;

change_prosthetics: BooleanLike;
Expand Down Expand Up @@ -256,6 +261,14 @@ export const ColorsWindow = (props, context) => {
) : (
''
)}
{data.change_gradient_color ? (
<Button
content="Hair Gradient Color"
onClick={() => act('gradient_color')}
/>
) : (
''
)}
{data.change_facial_hair_color ? (
<Button
content="Facial Hair Color"
Expand Down Expand Up @@ -283,6 +296,16 @@ export const HairWindow = (props, context) => {
/>
))}
</Collapsible>
<Collapsible content="Gradient Styles">
{data.valid_gradient_styles.map((new_gradient_style) => (
<Button
key={new_gradient_style}
content={new_gradient_style}
selected={data.owner_gradient_style === new_gradient_style}
onClick={() => act('gradient', { gradient: new_gradient_style })}
/>
))}
</Collapsible>
{data.change_facial_hair && data.valid_facial_hair_styles.length && (
<Collapsible content="Facial Hair Styles">
{data.valid_facial_hair_styles.map((new_facial_hair_style) => (
Expand Down

0 comments on commit d6c24f1

Please sign in to comment.