mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-13 02:52:03 +00:00
Adds secondary hair themes, darkens Tajara, fixes Skrell/human sprite issues, Skrell secondary hair-themes, CMA and Morph support and more..
This commit is contained in:
@@ -120,6 +120,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
var/r_hair = 0 //Hair color
|
||||
var/g_hair = 0 //Hair color
|
||||
var/b_hair = 0 //Hair color
|
||||
var/r_hair_sec = 0 //Secondary hair color
|
||||
var/g_hair_sec = 0 //Secondary hair color
|
||||
var/b_hair_sec = 0 //Secondary hair color
|
||||
var/f_style = "Shaved" //Facial hair type
|
||||
var/r_facial = 0 //Facial hair color
|
||||
var/g_facial = 0 //Facial hair color
|
||||
@@ -316,14 +319,19 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
|
||||
dat += "<b>Hair:</b> "
|
||||
dat += "<a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Color</a> [color_square(r_hair, g_hair, b_hair)]<br>"
|
||||
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Color</a> [color_square(r_hair, g_hair, b_hair)]"
|
||||
var/datum/sprite_accessory/temp_hair_style = hair_styles_list[h_style]
|
||||
if(temp_hair_style.secondary_theme && !temp_hair_style.no_sec_colour)
|
||||
dat += " <a href='?_src_=prefs;preference=secondary_hair;task=input'>Color #2</a> [color_square(r_hair_sec, g_hair_sec, b_hair_sec)]"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<b>Facial Hair:</b> "
|
||||
dat += "<a href='?_src_=prefs;preference=f_style;task=input'>[f_style ? "[f_style]" : "Shaved"]</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Color</a> [color_square(r_facial, g_facial, b_facial)]<br>"
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(facial_hair_style.secondary_colour)
|
||||
dat += "<a href='?_src_=prefs;preference=secondary_facial;task=input'>Secondary Color</a> [color_square(r_facial_sec, g_facial_sec, b_facial_sec)]<br>"
|
||||
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Color</a> [color_square(r_facial, g_facial, b_facial)]"
|
||||
var/datum/sprite_accessory/temp_facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(temp_facial_hair_style.secondary_theme && !temp_facial_hair_style.no_sec_colour)
|
||||
dat += " <a href='?_src_=prefs;preference=secondary_facial;task=input'>Color #2</a> [color_square(r_facial_sec, g_facial_sec, b_facial_sec)]"
|
||||
dat += "<br>"
|
||||
|
||||
|
||||
if(species != "Machine")
|
||||
@@ -1260,9 +1268,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
socks = random_socks(gender, species)
|
||||
|
||||
//reset hair colour and skin colour
|
||||
r_hair = 0//hex2num(copytext(new_hair, 2, 4))
|
||||
g_hair = 0//hex2num(copytext(new_hair, 4, 6))
|
||||
b_hair = 0//hex2num(copytext(new_hair, 6, 8))
|
||||
r_hair = 0
|
||||
g_hair = 0
|
||||
b_hair = 0
|
||||
r_hair_sec = 0
|
||||
g_hair_sec = 0
|
||||
b_hair_sec = 0
|
||||
r_facial = 0
|
||||
g_facial = 0
|
||||
b_facial = 0
|
||||
@@ -1333,6 +1344,16 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
|
||||
if("secondary_hair")
|
||||
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style.secondary_theme && !hair_style.no_sec_colour)
|
||||
var/new_hair = input(user, "Choose your character's secondary hair colour:", "Character Preference", rgb(r_hair_sec, g_hair_sec, b_hair_sec)) as color|null
|
||||
if(new_hair)
|
||||
r_hair_sec = hex2num(copytext(new_hair, 2, 4))
|
||||
g_hair_sec = hex2num(copytext(new_hair, 4, 6))
|
||||
b_hair_sec = hex2num(copytext(new_hair, 6, 8))
|
||||
|
||||
if("h_style")
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
@@ -1558,7 +1579,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
if("secondary_facial")
|
||||
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(facial_hair_style.secondary_colour)
|
||||
if(facial_hair_style.secondary_theme && !facial_hair_style.no_sec_colour)
|
||||
var/new_facial = input(user, "Choose your character's secondary facial-hair colour:", "Character Preference", rgb(r_facial_sec, g_facial_sec, b_facial_sec)) as color|null
|
||||
if(new_facial)
|
||||
r_facial_sec = hex2num(copytext(new_facial, 2, 4))
|
||||
@@ -2020,6 +2041,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
H.g_hair = g_hair
|
||||
H.b_hair = b_hair
|
||||
|
||||
H.r_hair_sec = r_hair_sec
|
||||
H.g_hair_sec = g_hair_sec
|
||||
H.b_hair_sec = b_hair_sec
|
||||
|
||||
H.r_facial = r_facial
|
||||
H.g_facial = g_facial
|
||||
H.b_facial = b_facial
|
||||
|
||||
@@ -110,6 +110,9 @@
|
||||
hair_red,
|
||||
hair_green,
|
||||
hair_blue,
|
||||
secondary_hair_red,
|
||||
secondary_hair_green,
|
||||
secondary_hair_blue,
|
||||
facial_red,
|
||||
facial_green,
|
||||
facial_blue,
|
||||
@@ -183,65 +186,68 @@
|
||||
r_hair = text2num(query.item[8])
|
||||
g_hair = text2num(query.item[9])
|
||||
b_hair = text2num(query.item[10])
|
||||
r_facial = text2num(query.item[11])
|
||||
g_facial = text2num(query.item[12])
|
||||
b_facial = text2num(query.item[13])
|
||||
r_facial_sec = text2num(query.item[14])
|
||||
g_facial_sec = text2num(query.item[15])
|
||||
b_facial_sec = text2num(query.item[16])
|
||||
s_tone = text2num(query.item[17])
|
||||
r_skin = text2num(query.item[18])
|
||||
g_skin = text2num(query.item[19])
|
||||
b_skin = text2num(query.item[20])
|
||||
m_colours = query.item[21]
|
||||
r_headacc = text2num(query.item[22])
|
||||
g_headacc = text2num(query.item[23])
|
||||
b_headacc = text2num(query.item[24])
|
||||
h_style = query.item[25]
|
||||
f_style = query.item[26]
|
||||
m_styles = query.item[27]
|
||||
ha_style = query.item[28]
|
||||
alt_head = query.item[29]
|
||||
r_eyes = text2num(query.item[30])
|
||||
g_eyes = text2num(query.item[31])
|
||||
b_eyes = text2num(query.item[32])
|
||||
underwear = query.item[33]
|
||||
undershirt = query.item[34]
|
||||
backbag = text2num(query.item[35])
|
||||
b_type = query.item[36]
|
||||
r_hair_sec = text2num(query.item[11])
|
||||
g_hair_sec = text2num(query.item[12])
|
||||
b_hair_sec = text2num(query.item[13])
|
||||
r_facial = text2num(query.item[14])
|
||||
g_facial = text2num(query.item[15])
|
||||
b_facial = text2num(query.item[16])
|
||||
r_facial_sec = text2num(query.item[17])
|
||||
g_facial_sec = text2num(query.item[18])
|
||||
b_facial_sec = text2num(query.item[19])
|
||||
s_tone = text2num(query.item[20])
|
||||
r_skin = text2num(query.item[21])
|
||||
g_skin = text2num(query.item[22])
|
||||
b_skin = text2num(query.item[23])
|
||||
m_colours = query.item[24]
|
||||
r_headacc = text2num(query.item[25])
|
||||
g_headacc = text2num(query.item[26])
|
||||
b_headacc = text2num(query.item[27])
|
||||
h_style = query.item[28]
|
||||
f_style = query.item[29]
|
||||
m_styles = query.item[30]
|
||||
ha_style = query.item[31]
|
||||
alt_head = query.item[32]
|
||||
r_eyes = text2num(query.item[33])
|
||||
g_eyes = text2num(query.item[34])
|
||||
b_eyes = text2num(query.item[35])
|
||||
underwear = query.item[36]
|
||||
undershirt = query.item[37]
|
||||
backbag = text2num(query.item[38])
|
||||
b_type = query.item[39]
|
||||
|
||||
|
||||
//Jobs
|
||||
alternate_option = text2num(query.item[37])
|
||||
job_support_high = text2num(query.item[38])
|
||||
job_support_med = text2num(query.item[39])
|
||||
job_support_low = text2num(query.item[40])
|
||||
job_medsci_high = text2num(query.item[41])
|
||||
job_medsci_med = text2num(query.item[42])
|
||||
job_medsci_low = text2num(query.item[43])
|
||||
job_engsec_high = text2num(query.item[44])
|
||||
job_engsec_med = text2num(query.item[45])
|
||||
job_engsec_low = text2num(query.item[46])
|
||||
job_karma_high = text2num(query.item[47])
|
||||
job_karma_med = text2num(query.item[48])
|
||||
job_karma_low = text2num(query.item[49])
|
||||
alternate_option = text2num(query.item[40])
|
||||
job_support_high = text2num(query.item[41])
|
||||
job_support_med = text2num(query.item[42])
|
||||
job_support_low = text2num(query.item[43])
|
||||
job_medsci_high = text2num(query.item[44])
|
||||
job_medsci_med = text2num(query.item[45])
|
||||
job_medsci_low = text2num(query.item[46])
|
||||
job_engsec_high = text2num(query.item[47])
|
||||
job_engsec_med = text2num(query.item[48])
|
||||
job_engsec_low = text2num(query.item[49])
|
||||
job_karma_high = text2num(query.item[50])
|
||||
job_karma_med = text2num(query.item[51])
|
||||
job_karma_low = text2num(query.item[52])
|
||||
|
||||
//Miscellaneous
|
||||
flavor_text = query.item[50]
|
||||
med_record = query.item[51]
|
||||
sec_record = query.item[52]
|
||||
gen_record = query.item[53]
|
||||
disabilities = text2num(query.item[54])
|
||||
player_alt_titles = params2list(query.item[55])
|
||||
organ_data = params2list(query.item[56])
|
||||
rlimb_data = params2list(query.item[57])
|
||||
nanotrasen_relation = query.item[58]
|
||||
speciesprefs = text2num(query.item[59])
|
||||
flavor_text = query.item[53]
|
||||
med_record = query.item[54]
|
||||
sec_record = query.item[55]
|
||||
gen_record = query.item[56]
|
||||
disabilities = text2num(query.item[57])
|
||||
player_alt_titles = params2list(query.item[58])
|
||||
organ_data = params2list(query.item[59])
|
||||
rlimb_data = params2list(query.item[60])
|
||||
nanotrasen_relation = query.item[61]
|
||||
speciesprefs = text2num(query.item[62])
|
||||
|
||||
//socks
|
||||
socks = query.item[60]
|
||||
body_accessory = query.item[61]
|
||||
gear = params2list(query.item[62])
|
||||
socks = query.item[63]
|
||||
body_accessory = query.item[64]
|
||||
gear = params2list(query.item[65])
|
||||
|
||||
//Sanitize
|
||||
metadata = sanitize_text(metadata, initial(metadata))
|
||||
@@ -256,7 +262,10 @@
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
r_hair = sanitize_integer(r_hair, 0, 255, initial(r_hair))
|
||||
g_hair = sanitize_integer(g_hair, 0, 255, initial(g_hair))
|
||||
b_hair = sanitize_integer(b_hair, 0, 255, initial(b_hair))
|
||||
b_hair_sec = sanitize_integer(b_hair, 0, 255, initial(b_hair))
|
||||
r_hair_sec = sanitize_integer(r_hair_sec, 0, 255, initial(r_hair_sec))
|
||||
g_hair_sec = sanitize_integer(g_hair_sec, 0, 255, initial(g_hair_sec))
|
||||
b_hair = sanitize_integer(b_hair_sec, 0, 255, initial(b_hair_sec))
|
||||
r_facial = sanitize_integer(r_facial, 0, 255, initial(r_facial))
|
||||
g_facial = sanitize_integer(g_facial, 0, 255, initial(g_facial))
|
||||
b_facial = sanitize_integer(b_facial, 0, 255, initial(b_facial))
|
||||
@@ -338,6 +347,9 @@
|
||||
hair_red='[r_hair]',
|
||||
hair_green='[g_hair]',
|
||||
hair_blue='[b_hair]',
|
||||
secondary_hair_red='[r_hair_sec]',
|
||||
secondary_hair_green='[g_hair_sec]',
|
||||
secondary_hair_blue='[b_hair_sec]',
|
||||
facial_red='[r_facial]',
|
||||
facial_green='[g_facial]',
|
||||
facial_blue='[b_facial]',
|
||||
@@ -405,8 +417,9 @@
|
||||
INSERT INTO [format_table_name("characters")] (ckey, slot, OOC_Notes, real_name, name_is_always_random, gender,
|
||||
age, species, language,
|
||||
hair_red, hair_green, hair_blue,
|
||||
secondary_hair_red, secondary_hair_green, secondary_hair_blue,
|
||||
facial_red, facial_green, facial_blue,
|
||||
secondary_facial_blue, secondary_facial_green, secondary_facial_blue,
|
||||
secondary_facial_red, secondary_facial_green, secondary_facial_blue,
|
||||
skin_tone, skin_red, skin_green, skin_blue,
|
||||
marking_colours,
|
||||
head_accessory_red, head_accessory_green, head_accessory_blue,
|
||||
@@ -427,6 +440,7 @@
|
||||
('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]',
|
||||
'[age]', '[sql_sanitize_text(species)]', '[sql_sanitize_text(language)]',
|
||||
'[r_hair]', '[g_hair]', '[b_hair]',
|
||||
'[r_hair_sec]', '[g_hair_sec]', '[b_hair_sec]',
|
||||
'[r_facial]', '[g_facial]', '[b_facial]',
|
||||
'[r_facial_sec]', '[g_facial_sec]', '[b_facial_sec]',
|
||||
'[s_tone]', '[r_skin]', '[g_skin]', '[b_skin]',
|
||||
|
||||
@@ -72,10 +72,17 @@
|
||||
return
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(location == "head" && head_organ.alt_head && head_organ.alt_head != "None")
|
||||
var/datum/sprite_accessory/body_markings/head/H = marking_styles_list[marking_style]
|
||||
if(marking.name != "None" && (!H.heads_allowed || !(head_organ.alt_head in H.heads_allowed)))
|
||||
return
|
||||
if(location == "head")
|
||||
if(head_organ.alt_head && head_organ.alt_head != "None")
|
||||
var/datum/sprite_accessory/body_markings/head/H = marking_styles_list[marking_style]
|
||||
if(marking.name != "None" && (!H.heads_allowed || !(head_organ.alt_head in H.heads_allowed)))
|
||||
return
|
||||
else
|
||||
if(!head_organ.alt_head || head_organ.alt_head == "None")
|
||||
head_organ.alt_head = "None"
|
||||
var/datum/sprite_accessory/body_markings/head/H = marking_styles_list[marking_style]
|
||||
if(H.heads_allowed )
|
||||
return
|
||||
|
||||
if(location == "tail" && marking.name != "None")
|
||||
var/datum/sprite_accessory/body_markings/tail/tail_marking = marking_styles_list[marking_style]
|
||||
@@ -210,38 +217,42 @@
|
||||
update_body()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue)
|
||||
/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue, var/secondary)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(red == H.r_hair && green == H.g_hair && blue == H.b_hair)
|
||||
return
|
||||
if(!secondary)
|
||||
if(red == H.r_hair && green == H.g_hair && blue == H.b_hair)
|
||||
return
|
||||
|
||||
H.r_hair = red
|
||||
H.g_hair = green
|
||||
H.b_hair = blue
|
||||
H.r_hair = red
|
||||
H.g_hair = green
|
||||
H.b_hair = blue
|
||||
else
|
||||
if(red == H.r_hair_sec && green == H.g_hair_sec && blue == H.b_hair_sec)
|
||||
return
|
||||
|
||||
H.r_hair_sec = red
|
||||
H.g_hair_sec = green
|
||||
H.b_hair_sec = blue
|
||||
|
||||
update_hair()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue)
|
||||
/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue, var/secondary)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(red == H.r_facial && green == H.g_facial && blue == H.b_facial)
|
||||
return
|
||||
if(!secondary)
|
||||
if(red == H.r_facial && green == H.g_facial && blue == H.b_facial)
|
||||
return
|
||||
|
||||
H.r_facial = red
|
||||
H.g_facial = green
|
||||
H.b_facial = blue
|
||||
H.r_facial = red
|
||||
H.g_facial = green
|
||||
H.b_facial = blue
|
||||
else
|
||||
if(red == H.r_facial_sec && green == H.g_facial_sec && blue == H.b_facial_sec)
|
||||
return
|
||||
|
||||
update_fhair()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_secondary_facial_hair_color(var/red, var/green, var/blue)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(red == H.r_facial_sec && green == H.g_facial_sec && blue == H.b_facial_sec)
|
||||
return
|
||||
|
||||
H.r_facial_sec = red
|
||||
H.g_facial_sec = green
|
||||
H.b_facial_sec = blue
|
||||
H.r_facial_sec = red
|
||||
H.g_facial_sec = green
|
||||
H.b_facial_sec = blue
|
||||
|
||||
update_fhair()
|
||||
return 1
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
dietflags = DIET_OMNI
|
||||
reagent_tag = PROCESS_ORG
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
base_color = "#424242"
|
||||
butt_sprite = "tajaran"
|
||||
|
||||
has_organ = list(
|
||||
|
||||
@@ -425,15 +425,15 @@ var/global/list/damage_icon_parts = list()
|
||||
//HAIR OVERLAY
|
||||
/mob/living/carbon/human/proc/update_hair(var/update_icons=1)
|
||||
//Reset our hair
|
||||
overlays_standing[HAIR_LAYER] = null
|
||||
overlays_standing[HAIR_LAYER] = null
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) )
|
||||
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
//masks and helmets can obscure our hair, unless we're a synthetic
|
||||
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
|
||||
if((head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
@@ -453,13 +453,19 @@ var/global/list/damage_icon_parts = list()
|
||||
else if(hair_style.do_colouration)
|
||||
hair_s.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD)
|
||||
|
||||
if(hair_style.secondary_theme)
|
||||
var/icon/hair_secondary_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_style.secondary_theme]_s")
|
||||
if(!hair_style.no_sec_colour)
|
||||
hair_secondary_s.Blend(rgb(head_organ.r_hair_sec, head_organ.g_hair_sec, head_organ.b_hair_sec), ICON_ADD)
|
||||
hair_s.Blend(hair_secondary_s, ICON_OVERLAY)
|
||||
|
||||
hair_standing = hair_s //hair_standing.Blend(hair_s, ICON_OVERLAY)
|
||||
//Having it this way preserves animations. Useful for IPC screens.
|
||||
else
|
||||
//warning("Invalid h_style for [species.name]: [h_style]")
|
||||
//hair_standing.Blend(debrained_s, ICON_OVERLAY)//how does i overlay for fish?
|
||||
|
||||
overlays_standing[HAIR_LAYER] = image(hair_standing)
|
||||
overlays_standing[HAIR_LAYER] = image(hair_standing)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
@@ -467,7 +473,7 @@ var/global/list/damage_icon_parts = list()
|
||||
//FACIAL HAIR OVERLAY
|
||||
/mob/living/carbon/human/proc/update_fhair(var/update_icons=1)
|
||||
//Reset our facial hair
|
||||
overlays_standing[FHAIR_LAYER] = null
|
||||
overlays_standing[FHAIR_LAYER] = null
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED))
|
||||
@@ -492,16 +498,17 @@ var/global/list/damage_icon_parts = list()
|
||||
else if(facial_hair_style.do_colouration)
|
||||
facial_s.Blend(rgb(head_organ.r_facial, head_organ.g_facial, head_organ.b_facial), ICON_ADD)
|
||||
|
||||
if(facial_hair_style.secondary_colour)
|
||||
var/icon/facial_secondary_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_[facial_hair_style.secondary_colour]_s")
|
||||
facial_secondary_s.Blend(rgb(head_organ.r_facial_sec, head_organ.g_facial_sec, head_organ.b_facial_sec), ICON_ADD)
|
||||
if(facial_hair_style.secondary_theme)
|
||||
var/icon/facial_secondary_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_[facial_hair_style.secondary_theme]_s")
|
||||
if(!facial_hair_style.no_sec_colour)
|
||||
facial_secondary_s.Blend(rgb(head_organ.r_facial_sec, head_organ.g_facial_sec, head_organ.b_facial_sec), ICON_ADD)
|
||||
facial_s.Blend(facial_secondary_s, ICON_OVERLAY)
|
||||
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
else
|
||||
//warning("Invalid f_style for [species.name]: [f_style]")
|
||||
|
||||
overlays_standing[FHAIR_LAYER] = image(face_standing)
|
||||
overlays_standing[FHAIR_LAYER] = image(face_standing)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
|
||||
@@ -321,6 +321,13 @@
|
||||
hair_s.Blend(rgb(r_skin, g_skin, b_skin, 160), ICON_ADD)
|
||||
else
|
||||
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||
|
||||
if(hair_style.secondary_theme)
|
||||
var/icon/hair_secondary_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_style.secondary_theme]_s")
|
||||
if(!hair_style.no_sec_colour)
|
||||
hair_secondary_s.Blend(rgb(r_hair_sec, g_hair_sec, b_hair_sec), ICON_ADD)
|
||||
hair_s.Blend(hair_secondary_s, ICON_OVERLAY)
|
||||
|
||||
face_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
//Head Accessory
|
||||
@@ -339,9 +346,10 @@
|
||||
else
|
||||
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
|
||||
|
||||
if(facial_hair_style.secondary_colour)
|
||||
var/icon/facial_secondary_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_[facial_hair_style.secondary_colour]_s")
|
||||
facial_secondary_s.Blend(rgb(r_facial_sec, g_facial_sec, b_facial_sec), ICON_ADD)
|
||||
if(facial_hair_style.secondary_theme)
|
||||
var/icon/facial_secondary_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_[facial_hair_style.secondary_theme]_s")
|
||||
if(!facial_hair_style.no_sec_colour)
|
||||
facial_secondary_s.Blend(rgb(r_facial_sec, g_facial_sec, b_facial_sec), ICON_ADD)
|
||||
facial_s.Blend(facial_secondary_s, ICON_OVERLAY)
|
||||
|
||||
face_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
@@ -47,7 +47,8 @@
|
||||
var/list/heads_allowed = null //Specifies which, if any, alt heads a head marking, hairstyle or facial hair style is compatible with.
|
||||
var/list/tails_allowed = null //Specifies which, if any, tails a tail marking is compatible with.
|
||||
var/marking_location //Specifies which bodypart a body marking is located on.
|
||||
var/secondary_colour = null //If exists, there's a secondary colour to that hair style and the secondary colour's icon state's suffix is equal to this.
|
||||
var/secondary_theme = null //If exists, there's a secondary colour to that hair style and the secondary theme's icon state's suffix is equal to this.
|
||||
var/no_sec_colour = null //If exists, prohibit the colouration of the secondary theme.
|
||||
|
||||
// Whether or not the accessory can be affected by colouration
|
||||
var/do_colouration = 1
|
||||
@@ -203,10 +204,18 @@
|
||||
icon_state = "hair_hbraid"
|
||||
gender = FEMALE
|
||||
|
||||
braid3
|
||||
braid_hip
|
||||
name = "Hippie Braid"
|
||||
icon_state = "hair_hipbraid"
|
||||
species_allowed = list("Human")
|
||||
secondary_theme = "beads"
|
||||
|
||||
|
||||
braid_hip_una
|
||||
name = "Unathi Hippie Braid"
|
||||
icon_state = "hair_ubraid"
|
||||
species_allowed = list("Human", "Unathi")
|
||||
species_allowed = list("Unathi")
|
||||
secondary_theme = "beads"
|
||||
|
||||
buzz
|
||||
name = "Buzzcut"
|
||||
@@ -697,27 +706,34 @@
|
||||
|
||||
skr_gold_m
|
||||
name = "Gold plated Skrell Male Tentacles"
|
||||
icon_state = "skrell_goldhair_m"
|
||||
icon_state = "skrell_hair_m"
|
||||
species_allowed = list("Skrell")
|
||||
gender = MALE
|
||||
secondary_theme = "gold"
|
||||
no_sec_colour = 1
|
||||
|
||||
skr_gold_f
|
||||
name = "Gold chained Skrell Female Tentacles"
|
||||
icon_state = "skrell_goldhair_f"
|
||||
icon_state = "skrell_hair_f"
|
||||
species_allowed = list("Skrell")
|
||||
gender = FEMALE
|
||||
secondary_theme = "gold"
|
||||
no_sec_colour = 1
|
||||
|
||||
|
||||
skr_clothtentacle_m
|
||||
name = "Cloth draped Skrell Male Tentacles"
|
||||
icon_state = "skrell_clothhair_m"
|
||||
icon_state = "skrell_hair_m"
|
||||
species_allowed = list("Skrell")
|
||||
gender = MALE
|
||||
secondary_theme = "cloth"
|
||||
|
||||
skr_clothtentacle_f
|
||||
name = "Cloth draped Skrell Female Tentacles"
|
||||
icon_state = "skrell_clothhair_f"
|
||||
icon_state = "skrell_hair_f"
|
||||
species_allowed = list("Skrell")
|
||||
gender = FEMALE
|
||||
secondary_theme = "cloth"
|
||||
|
||||
taj_hair_clean
|
||||
name = "Tajara Clean"
|
||||
@@ -733,6 +749,7 @@
|
||||
name = "Tajara Braid"
|
||||
icon_state = "hair_tbraid"
|
||||
species_allowed = list("Tajaran")
|
||||
secondary_theme = "beads"
|
||||
|
||||
taj_hair_shaggy
|
||||
name = "Tajara Shaggy"
|
||||
@@ -874,6 +891,7 @@
|
||||
name = "Braided"
|
||||
icon_state = "braided"
|
||||
species_allowed = list("Vulpkanin")
|
||||
secondary_theme = "beads"
|
||||
|
||||
//Vox
|
||||
|
||||
@@ -1130,21 +1148,21 @@
|
||||
name = "Aquatic Webbed Frills"
|
||||
icon_state = "soghun_aquaticfrills"
|
||||
species_allowed = list("Unathi")
|
||||
secondary_colour = "webbing"
|
||||
secondary_theme = "webbing"
|
||||
gender = NEUTER
|
||||
|
||||
una_frills_webbed_long
|
||||
name = "Long Webbed Frills"
|
||||
icon_state = "soghun_longfrills"
|
||||
species_allowed = list("Unathi")
|
||||
secondary_colour = "webbing"
|
||||
secondary_theme = "webbing"
|
||||
gender = NEUTER
|
||||
|
||||
una_frills_webbed_short
|
||||
name = "Short Webbed Frills"
|
||||
icon_state = "soghun_shortfrills"
|
||||
species_allowed = list("Unathi")
|
||||
secondary_colour = "webbing"
|
||||
secondary_theme = "webbing"
|
||||
gender = NEUTER
|
||||
|
||||
|
||||
|
||||
@@ -88,6 +88,16 @@
|
||||
if(owner.change_hair_color(r_hair, g_hair, b_hair))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["secondary_hair_color"])
|
||||
if(can_change(APPEARANCE_SECONDARY_HAIR_COLOR))
|
||||
var/new_hair = input("Please select secondary hair color.", "Secondary Hair Color", rgb(head_organ.r_hair_sec, head_organ.g_hair_sec, head_organ.b_hair_sec)) as color|null
|
||||
if(new_hair && can_still_topic(state))
|
||||
var/r_hair_sec = hex2num(copytext(new_hair, 2, 4))
|
||||
var/g_hair_sec = hex2num(copytext(new_hair, 4, 6))
|
||||
var/b_hair_sec = hex2num(copytext(new_hair, 6, 8))
|
||||
if(owner.change_hair_color(r_hair_sec, g_hair_sec, b_hair_sec, 1))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["facial_hair"])
|
||||
if(can_change(APPEARANCE_FACIAL_HAIR) && (href_list["facial_hair"] in valid_facial_hairstyles))
|
||||
if(owner.change_facial_hair(href_list["facial_hair"]))
|
||||
@@ -110,7 +120,7 @@
|
||||
var/r_facial_sec = hex2num(copytext(new_facial, 2, 4))
|
||||
var/g_facial_sec = hex2num(copytext(new_facial, 4, 6))
|
||||
var/b_facial_sec = hex2num(copytext(new_facial, 6, 8))
|
||||
if(owner.change_secondary_facial_hair_color(r_facial_sec, g_facial_sec, b_facial_sec))
|
||||
if(owner.change_facial_hair_color(r_facial_sec, g_facial_sec, b_facial_sec, 1))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["eye_color"])
|
||||
@@ -285,6 +295,7 @@
|
||||
|
||||
data["change_head_accessory_color"] = can_change_head_accessory()
|
||||
data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR)
|
||||
data["change_secondary_hair_color"] = can_change(APPEARANCE_SECONDARY_HAIR_COLOR)
|
||||
data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR)
|
||||
data["change_secondary_facial_hair_color"] = can_change(APPEARANCE_SECONDARY_FACIAL_HAIR_COLOR)
|
||||
data["change_head_marking_color"] = can_change_markings("head")
|
||||
|
||||
@@ -851,11 +851,11 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
/obj/item/organ/external/proc/mutate()
|
||||
src.status |= ORGAN_MUTATED
|
||||
if(owner) owner.update_body()
|
||||
if(owner) owner.update_body(0, 1) //Forces all bodyparts to update in order to correctly render the deformed sprite.
|
||||
|
||||
/obj/item/organ/external/proc/unmutate()
|
||||
src.status &= ~ORGAN_MUTATED
|
||||
if(owner) owner.update_body()
|
||||
if(owner) owner.update_body(0, 1) //Forces all bodyparts to update in order to correctly return them to normal.
|
||||
|
||||
/obj/item/organ/external/proc/get_damage() //returns total damage
|
||||
return max(brute_dam + burn_dam - perma_injury, perma_injury) //could use health?
|
||||
|
||||
@@ -146,6 +146,9 @@
|
||||
var/r_hair = 0
|
||||
var/g_hair = 0
|
||||
var/b_hair = 0
|
||||
var/r_hair_sec = 0
|
||||
var/g_hair_sec = 0
|
||||
var/b_hair_sec = 0
|
||||
var/h_style = "Bald"
|
||||
|
||||
//Head accessory colour and style
|
||||
|
||||
Reference in New Issue
Block a user