Merge pull request #22367 from ShiftyRail/VampShapeshift

Refactors appearance randomisation.
This commit is contained in:
Kurfursten
2019-04-18 05:23:15 -05:00
committed by GitHub
44 changed files with 456 additions and 319 deletions

View File

@@ -144,25 +144,25 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
// Skin tone // Skin tone
if(H.species.anatomy_flags & HAS_SKIN_TONE) if(H.species.anatomy_flags & HAS_SKIN_TONE)
if (H.s_tone >= 0) if (H.my_appearance.s_tone >= 0)
preview_icon.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD) preview_icon.Blend(rgb(H.my_appearance.s_tone, H.my_appearance.s_tone, H.my_appearance.s_tone), ICON_ADD)
else else
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) preview_icon.Blend(rgb(-H.my_appearance.s_tone, -H.my_appearance.s_tone, -H.my_appearance.s_tone), ICON_SUBTRACT)
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s") var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD) eyes_s.Blend(rgb(H.my_appearance.r_eyes, H.my_appearance.g_eyes, H.my_appearance.b_eyes), ICON_ADD)
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style] var/datum/sprite_accessory/hair_style = hair_styles_list[H.my_appearance.h_style]
if(hair_style) if(hair_style)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
hair_s.Blend(rgb(H.r_hair, H.g_hair, H.b_hair), ICON_ADD) hair_s.Blend(rgb(H.my_appearance.r_hair, H.my_appearance.g_hair, H.my_appearance.b_hair), ICON_ADD)
eyes_s.Blend(hair_s, ICON_OVERLAY) eyes_s.Blend(hair_s, ICON_OVERLAY)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.f_style] var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.my_appearance.f_style]
if(facial_hair_style) if(facial_hair_style)
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
facial_s.Blend(rgb(H.r_facial, H.g_facial, H.b_facial), ICON_ADD) facial_s.Blend(rgb(H.my_appearance.r_facial, H.my_appearance.g_facial, H.my_appearance.b_facial), ICON_ADD)
eyes_s.Blend(facial_s, ICON_OVERLAY) eyes_s.Blend(facial_s, ICON_OVERLAY)
var/icon/clothes_s = null var/icon/clothes_s = null

View File

@@ -486,11 +486,11 @@
/datum/dynamic_ruleset/midround/from_ghosts/rambler/generate_ruleset_body(mob/applicant) /datum/dynamic_ruleset/midround/from_ghosts/rambler/generate_ruleset_body(mob/applicant)
var/mob/living/carbon/human/frankenstein/new_frank = new(pick(latejoin)) var/mob/living/carbon/human/frankenstein/new_frank = new(pick(latejoin))
var/datum/preferences/A = new() var/gender = pick(MALE, FEMALE)
A.randomize_appearance_for(new_frank) new_frank.randomise_appearance_for(gender)
new_frank.key = applicant.key new_frank.key = applicant.key
new_frank.dna.ready_dna(new_frank) new_frank.dna.ready_dna(new_frank)
new_frank.setGender(pick(MALE, FEMALE)) new_frank.setGender(gender)
return new_frank return new_frank
////////////////////////////////////////////// //////////////////////////////////////////////

View File

@@ -2577,15 +2577,15 @@ var/list/bloodcult_exitportals = list()
vessel.ckey = ghost.ckey vessel.ckey = ghost.ckey
qdel(husk) qdel(husk)
vessel.r_hair = 90 vessel.my_appearance.r_hair = 90
vessel.g_hair = 90 vessel.my_appearance.g_hair = 90
vessel.b_hair = 90 vessel.my_appearance.b_hair = 90
vessel.r_facial = 90 vessel.my_appearance.r_facial = 90
vessel.g_facial = 90 vessel.my_appearance.g_facial = 90
vessel.b_facial = 90 vessel.my_appearance.b_facial = 90
vessel.r_eyes = 255 vessel.my_appearance.r_eyes = 255
vessel.g_eyes = 0 vessel.my_appearance.g_eyes = 0
vessel.b_eyes = 0 vessel.my_appearance.b_eyes = 0
vessel.status_flags &= ~GODMODE vessel.status_flags &= ~GODMODE
vessel.regenerate_icons() vessel.regenerate_icons()
//Let's not forget to make them cultists as well //Let's not forget to make them cultists as well

View File

@@ -105,15 +105,15 @@ var/list/blood_communion = list()
if (!istype(H)) if (!istype(H))
return return
H.set_species("Manifested") H.set_species("Manifested")
H.r_hair = 90 H.my_appearance.r_hair = 90
H.g_hair = 90 H.my_appearance.g_hair = 90
H.b_hair = 90 H.my_appearance.b_hair = 90
H.r_facial = 90 H.my_appearance.r_facial = 90
H.g_facial = 90 H.my_appearance.g_facial = 90
H.b_facial = 90 H.my_appearance.b_facial = 90
H.r_eyes = 255 H.my_appearance.r_eyes = 255
H.g_eyes = 0 H.my_appearance.g_eyes = 0
H.b_eyes = 0 H.my_appearance.b_eyes = 0
H.revive(0) H.revive(0)
H.status_flags &= ~GODMODE H.status_flags &= ~GODMODE
H.status_flags &= ~CANSTUN H.status_flags &= ~CANSTUN

View File

@@ -17,7 +17,7 @@
/datum/role/catbeast/OnPostSetup() /datum/role/catbeast/OnPostSetup()
var/mob/living/carbon/human/H = antag.current var/mob/living/carbon/human/H = antag.current
H.set_species("Tajaran", force_organs=1) H.set_species("Tajaran", force_organs=1)
H.s_tone = CATBEASTBLACK H.my_appearance.s_tone = CATBEASTBLACK
H.dna.ResetUI() H.dna.ResetUI()
equip_catbeast(H) equip_catbeast(H)
H.regenerate_icons() H.regenerate_icons()

View File

@@ -1215,8 +1215,8 @@
/datum/religion/art/equip_chaplain(var/mob/living/carbon/human/H) /datum/religion/art/equip_chaplain(var/mob/living/carbon/human/H)
H.put_in_hands(new /obj/item/mounted/frame/painting) H.put_in_hands(new /obj/item/mounted/frame/painting)
H.h_style = "Big Afro" H.my_appearance.h_style = "Big Afro"
H.f_style = "Full Beard" H.my_appearance.f_style = "Full Beard"
H.update_hair() H.update_hair()
/datum/religion/clean /datum/religion/clean
@@ -1230,8 +1230,8 @@
/datum/religion/clean/equip_chaplain(var/mob/living/carbon/human/H) /datum/religion/clean/equip_chaplain(var/mob/living/carbon/human/H)
H.put_in_hands(new /obj/item/weapon/mop) H.put_in_hands(new /obj/item/weapon/mop)
H.h_style = "Bald" H.my_appearance.h_style = "Bald"
H.f_style = "Shaved" H.my_appearance.f_style = "Shaved"
H.update_hair() H.update_hair()
/datum/religion/guns /datum/religion/guns

View File

@@ -2576,8 +2576,8 @@ var/list/the_station_areas = list (
sound_delay = rand(0, 50) sound_delay = rand(0, 50)
for(var/mob/living/carbon/human/H in src) for(var/mob/living/carbon/human/H in src)
// if(H.s_tone > -55) //ugh...nice/novel idea but please no. // if(H.my_appearance.s_tone > -55) //ugh...nice/novel idea but please no.
// H.s_tone-- // H.my_appearance.s_tone--
// H.update_body() // H.update_body()
if(H.client) if(H.client)
mysound.status = SOUND_UPDATE mysound.status = SOUND_UPDATE

View File

@@ -172,28 +172,28 @@ var/global/list/facial_hair_styles_female_list = list()
ResetUI(1) ResetUI(1)
// Hair // Hair
// FIXME: Species-specific defaults pls // FIXME: Species-specific defaults pls
if(!character.h_style) if(!character.my_appearance.h_style)
character.h_style = "Skinhead" character.my_appearance.h_style = "Skinhead"
var/hair = hair_styles_list.Find(character.h_style) var/hair = hair_styles_list.Find(character.my_appearance.h_style)
// Facial Hair // Facial Hair
if(!character.f_style) if(!character.my_appearance.f_style)
character.f_style = "Shaved" character.my_appearance.f_style = "Shaved"
var/beard = facial_hair_styles_list.Find(character.f_style) var/beard = facial_hair_styles_list.Find(character.my_appearance.f_style)
SetUIValueRange(DNA_UI_HAIR_R, character.r_hair, 255, 1) SetUIValueRange(DNA_UI_HAIR_R, character.my_appearance.r_hair, 255, 1)
SetUIValueRange(DNA_UI_HAIR_G, character.g_hair, 255, 1) SetUIValueRange(DNA_UI_HAIR_G, character.my_appearance.g_hair, 255, 1)
SetUIValueRange(DNA_UI_HAIR_B, character.b_hair, 255, 1) SetUIValueRange(DNA_UI_HAIR_B, character.my_appearance.b_hair, 255, 1)
SetUIValueRange(DNA_UI_BEARD_R, character.r_facial, 255, 1) SetUIValueRange(DNA_UI_BEARD_R, character.my_appearance.r_facial, 255, 1)
SetUIValueRange(DNA_UI_BEARD_G, character.g_facial, 255, 1) SetUIValueRange(DNA_UI_BEARD_G, character.my_appearance.g_facial, 255, 1)
SetUIValueRange(DNA_UI_BEARD_B, character.b_facial, 255, 1) SetUIValueRange(DNA_UI_BEARD_B, character.my_appearance.b_facial, 255, 1)
SetUIValueRange(DNA_UI_EYES_R, character.r_eyes, 255, 1) SetUIValueRange(DNA_UI_EYES_R, character.my_appearance.r_eyes, 255, 1)
SetUIValueRange(DNA_UI_EYES_G, character.g_eyes, 255, 1) SetUIValueRange(DNA_UI_EYES_G, character.my_appearance.g_eyes, 255, 1)
SetUIValueRange(DNA_UI_EYES_B, character.b_eyes, 255, 1) SetUIValueRange(DNA_UI_EYES_B, character.my_appearance.b_eyes, 255, 1)
SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.s_tone, 220, 1) // Value can be negative. SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.my_appearance.s_tone, 220, 1) // Value can be negative.
SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1)

View File

@@ -139,19 +139,19 @@
src.dna.UpdateUI() src.dna.UpdateUI()
dna.check_integrity() dna.check_integrity()
var/mob/living/carbon/human/H = src var/mob/living/carbon/human/H = src
H.r_hair = dna.GetUIValueRange(DNA_UI_HAIR_R, 255) H.my_appearance.r_hair = dna.GetUIValueRange(DNA_UI_HAIR_R, 255)
H.g_hair = dna.GetUIValueRange(DNA_UI_HAIR_G, 255) H.my_appearance.g_hair = dna.GetUIValueRange(DNA_UI_HAIR_G, 255)
H.b_hair = dna.GetUIValueRange(DNA_UI_HAIR_B, 255) H.my_appearance.b_hair = dna.GetUIValueRange(DNA_UI_HAIR_B, 255)
H.r_facial = dna.GetUIValueRange(DNA_UI_BEARD_R, 255) H.my_appearance.r_facial = dna.GetUIValueRange(DNA_UI_BEARD_R, 255)
H.g_facial = dna.GetUIValueRange(DNA_UI_BEARD_G, 255) H.my_appearance.g_facial = dna.GetUIValueRange(DNA_UI_BEARD_G, 255)
H.b_facial = dna.GetUIValueRange(DNA_UI_BEARD_B, 255) H.my_appearance.b_facial = dna.GetUIValueRange(DNA_UI_BEARD_B, 255)
H.r_eyes = dna.GetUIValueRange(DNA_UI_EYES_R, 255) H.my_appearance.r_eyes = dna.GetUIValueRange(DNA_UI_EYES_R, 255)
H.g_eyes = dna.GetUIValueRange(DNA_UI_EYES_G, 255) H.my_appearance.g_eyes = dna.GetUIValueRange(DNA_UI_EYES_G, 255)
H.b_eyes = dna.GetUIValueRange(DNA_UI_EYES_B, 255) H.my_appearance.b_eyes = dna.GetUIValueRange(DNA_UI_EYES_B, 255)
H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. H.my_appearance.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative.
H.setGender(MALE) H.setGender(MALE)
if (dna.GetUIState(DNA_UI_GENDER)) if (dna.GetUIState(DNA_UI_GENDER))
H.setGender(FEMALE) H.setGender(FEMALE)
@@ -161,12 +161,12 @@
//Hair //Hair
var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE,hair_styles_list.len) var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE,hair_styles_list.len)
if((0 < hair) && (hair <= hair_styles_list.len)) if((0 < hair) && (hair <= hair_styles_list.len))
H.h_style = hair_styles_list[hair] H.my_appearance.h_style = hair_styles_list[hair]
//Facial Hair //Facial Hair
var/beard = dna.GetUIValueRange(DNA_UI_BEARD_STYLE,facial_hair_styles_list.len) var/beard = dna.GetUIValueRange(DNA_UI_BEARD_STYLE,facial_hair_styles_list.len)
if((0 < beard) && (beard <= facial_hair_styles_list.len)) if((0 < beard) && (beard <= facial_hair_styles_list.len))
H.f_style = facial_hair_styles_list[beard] H.my_appearance.f_style = facial_hair_styles_list[beard]
H.update_body(0) H.update_body(0)
H.update_hair() H.update_hair()

View File

@@ -100,8 +100,8 @@
O.real_name = randomname O.real_name = randomname
i++ i++
O.UpdateAppearance() O.UpdateAppearance()
O.h_style = random_hair_style(O.gender,O.species.name) O.my_appearance.h_style = random_hair_style(O.gender,O.species.name)
O.f_style = random_facial_hair_style(O.gender,O.species.name) O.my_appearance.f_style = random_facial_hair_style(O.gender,O.species.name)
O.update_hair() O.update_hair()
O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) O.take_overall_damage(M.getBruteLoss(), M.getFireLoss())
O.adjustToxLoss(M.getToxLoss()) O.adjustToxLoss(M.getToxLoss())

View File

@@ -38,6 +38,6 @@
/datum/species/horror/handle_post_spawn(var/mob/living/carbon/human/H) /datum/species/horror/handle_post_spawn(var/mob/living/carbon/human/H)
H.h_style = "Bald" H.my_appearance.h_style = "Bald"
H.f_style = "Shaved" H.my_appearance.f_style = "Shaved"
H.update_hair() H.update_hair()

View File

@@ -28,7 +28,7 @@
status_flags = GODMODE|CANPUSH status_flags = GODMODE|CANPUSH
New(var/new_loc) New(var/new_loc)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Krampus") ..(new_loc, "Krampus")
maxHealth=999999 maxHealth=999999
health=999999 health=999999

View File

@@ -641,10 +641,10 @@
if(ishuman(occupant)) if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant var/mob/living/carbon/human/H = occupant
if(isdiona(H)) if(isdiona(H))
if(H.h_style != "Popped Hair") if(H.my_appearance.h_style != "Popped Hair")
to_chat(H, "<span class = 'notice'>Your head pops!</span>") to_chat(H, "<span class = 'notice'>Your head pops!</span>")
playsound(src, 'sound/effects/pop.ogg', 50, 1) playsound(src, 'sound/effects/pop.ogg', 50, 1)
H.h_style = "Popped Hair" H.my_appearance.h_style = "Popped Hair"
H.update_hair() H.update_hair()
else if(isjusthuman(H) && Holiday == APRIL_FOOLS_DAY) else if(isjusthuman(H) && Holiday == APRIL_FOOLS_DAY)
H.GALize() H.GALize()

View File

@@ -215,11 +215,11 @@
if(cover) if(cover)
to_chat(user, "<span class='notice'>You can't color [H == user ? "your" : "\the [H]'s"] facial hair through that [cover.name]!</span>") to_chat(user, "<span class='notice'>You can't color [H == user ? "your" : "\the [H]'s"] facial hair through that [cover.name]!</span>")
return return
if(!H.f_style || H.f_style == "Shaved") //if they have no facial hair if(!H.my_appearance.f_style || H.my_appearance.f_style == "Shaved") //if they have no facial hair
to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any facial hair!</span>") to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any facial hair!</span>")
return return
else else
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.f_style] var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.my_appearance.f_style]
if(!facial_hair_style.do_colouration) if(!facial_hair_style.do_colouration)
to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any colorable facial hair!</span>") to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any colorable facial hair!</span>")
return return
@@ -229,11 +229,11 @@
if(cover) if(cover)
to_chat(user, "<span class='notice'>You can't color [H == user ? "your" : "\the [H]'s"] hair through that [cover.name]!</span>") to_chat(user, "<span class='notice'>You can't color [H == user ? "your" : "\the [H]'s"] hair through that [cover.name]!</span>")
return return
if(!H.h_style || H.h_style == "Bald") //if they have no hair if(!H.my_appearance.h_style || H.my_appearance.h_style == "Bald") //if they have no hair
to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any hair!</span>") to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any hair!</span>")
return return
else else
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style] var/datum/sprite_accessory/hair_style = hair_styles_list[H.my_appearance.h_style]
if(!hair_style.do_colouration) if(!hair_style.do_colouration)
to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any colorable hair!</span>") to_chat(user, "<span class='notice'>[H == user ? "You don't" : "\The [H] doesn't"] seem to have any colorable hair!</span>")
return return
@@ -261,13 +261,13 @@
if(!H) if(!H)
return return
if(facial) if(facial)
H.r_facial = color_r H.my_appearance.r_facial = color_r
H.g_facial = color_g H.my_appearance.g_facial = color_g
H.b_facial = color_b H.my_appearance.b_facial = color_b
else else
H.r_hair = color_r H.my_appearance.r_hair = color_r
H.g_hair = color_g H.my_appearance.g_hair = color_g
H.b_hair = color_b H.my_appearance.b_hair = color_b
H.update_hair() H.update_hair()
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
@@ -364,9 +364,9 @@
/obj/item/weapon/razor/proc/shave(mob/living/carbon/human/H, location = "mouth") /obj/item/weapon/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
if(location == "mouth") if(location == "mouth")
H.f_style = "Shaved" H.my_appearance.f_style = "Shaved"
else else
H.h_style = "Skinhead" H.my_appearance.h_style = "Skinhead"
H.update_hair() H.update_hair()
playsound(loc, 'sound/items/Welder2.ogg', 20, 1) playsound(loc, 'sound/items/Welder2.ogg', 20, 1)
@@ -380,7 +380,7 @@
if(H.check_body_part_coverage(MOUTH)) if(H.check_body_part_coverage(MOUTH))
to_chat(user,"<span class='warning'>The mask is in the way!</span>") to_chat(user,"<span class='warning'>The mask is in the way!</span>")
return return
if(H.f_style == "Shaved") if(H.my_appearance.f_style == "Shaved")
to_chat(user,"<span class='warning'>Already clean-shaven!</span>") to_chat(user,"<span class='warning'>Already clean-shaven!</span>")
return return
@@ -403,7 +403,7 @@
if(H.check_body_part_coverage(HEAD)) if(H.check_body_part_coverage(HEAD))
to_chat(user,"<span class='warning'>The headgear is in the way!</span>") to_chat(user,"<span class='warning'>The headgear is in the way!</span>")
return return
if(H.h_style == "Bald" || H.h_style == "Skinhead") if(H.my_appearance.h_style == "Bald" || H.my_appearance.h_style == "Skinhead")
to_chat(user,"<span class='warning'>There is not enough hair left to shave!</span>") to_chat(user,"<span class='warning'>There is not enough hair left to shave!</span>")
return return
@@ -472,7 +472,7 @@
if (!Adjacent(user) || user.incapacitated()) if (!Adjacent(user) || user.incapacitated())
return return
if (new_style) if (new_style)
H.h_style = new_style H.my_appearance.h_style = new_style
H.update_hair() H.update_hair()
/obj/item/weapon/pocket_mirror/proc/shatter() /obj/item/weapon/pocket_mirror/proc/shatter()
@@ -556,7 +556,7 @@
if(!H) if(!H)
return return
else else
H.r_eyes = color_r H.my_appearance.r_eyes = color_r
H.g_eyes = color_g H.my_appearance.g_eyes = color_g
H.b_eyes = color_b H.my_appearance.b_eyes = color_b
H.update_body() H.update_body()

View File

@@ -47,7 +47,7 @@
if(userloc != H.loc) if(userloc != H.loc)
return //no tele-grooming return //no tele-grooming
if(new_style) if(new_style)
H.f_style = new_style H.my_appearance.f_style = new_style
H.update_hair() H.update_hair()
//handle normal hair //handle normal hair
@@ -57,7 +57,7 @@
if(userloc != H.loc) if(userloc != H.loc)
return //no tele-grooming return //no tele-grooming
if(new_style) if(new_style)
H.h_style = new_style H.my_appearance.h_style = new_style
H.update_hair() H.update_hair()

View File

@@ -55,28 +55,28 @@ var/list/response_team_members = list()
//todo: make it a panel, like in character creation //todo: make it a panel, like in character creation
var/new_facial = input(user, "Please select facial hair color.", "Character Generation") as color var/new_facial = input(user, "Please select facial hair color.", "Character Generation") as color
if(new_facial) if(new_facial)
M.r_facial = hex2num(copytext(new_facial, 2, 4)) M.my_appearance.r_facial = hex2num(copytext(new_facial, 2, 4))
M.g_facial = hex2num(copytext(new_facial, 4, 6)) M.my_appearance.g_facial = hex2num(copytext(new_facial, 4, 6))
M.b_facial = hex2num(copytext(new_facial, 6, 8)) M.my_appearance.b_facial = hex2num(copytext(new_facial, 6, 8))
var/new_hair = input(user, "Please select hair color.", "Character Generation") as color var/new_hair = input(user, "Please select hair color.", "Character Generation") as color
if(new_facial) if(new_facial)
M.r_hair = hex2num(copytext(new_hair, 2, 4)) M.my_appearance.r_hair = hex2num(copytext(new_hair, 2, 4))
M.g_hair = hex2num(copytext(new_hair, 4, 6)) M.my_appearance.g_hair = hex2num(copytext(new_hair, 4, 6))
M.b_hair = hex2num(copytext(new_hair, 6, 8)) M.my_appearance.b_hair = hex2num(copytext(new_hair, 6, 8))
var/new_eyes = input(user, "Please select eye color.", "Character Generation") as color var/new_eyes = input(user, "Please select eye color.", "Character Generation") as color
if(new_eyes) if(new_eyes)
M.r_eyes = hex2num(copytext(new_eyes, 2, 4)) M.my_appearance.r_eyes = hex2num(copytext(new_eyes, 2, 4))
M.g_eyes = hex2num(copytext(new_eyes, 4, 6)) M.my_appearance.g_eyes = hex2num(copytext(new_eyes, 4, 6))
M.b_eyes = hex2num(copytext(new_eyes, 6, 8)) M.my_appearance.b_eyes = hex2num(copytext(new_eyes, 6, 8))
var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (!new_tone) if (!new_tone)
new_tone = 35 new_tone = 35
M.s_tone = max(min(round(text2num(new_tone)), 220), 1) M.my_appearance.s_tone = max(min(round(text2num(new_tone)), 220), 1)
M.s_tone = -M.s_tone + 35 M.my_appearance.s_tone = -M.my_appearance.s_tone + 35
// hair // hair
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
@@ -92,12 +92,12 @@ var/list/response_team_members = list()
//hair //hair
var/new_hstyle = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list var/new_hstyle = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list
if(new_hstyle) if(new_hstyle)
M.h_style = new_hstyle M.my_appearance.h_style = new_hstyle
// facial hair // facial hair
var/new_fstyle = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list var/new_fstyle = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
if(new_fstyle) if(new_fstyle)
M.f_style = new_fstyle M.my_appearance.f_style = new_fstyle
var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female") var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender) if (new_gender)

View File

@@ -18,8 +18,7 @@
new_commando.gender = pick(MALE, FEMALE) new_commando.gender = pick(MALE, FEMALE)
var/datum/preferences/A = new()//Randomize appearance for the commando. new_commando.randomise_appearance_for(new_commando.gender)
A.randomize_appearance_for(new_commando)
new_commando.real_name = "[!leader_selected ? commando_rank : commando_leader_rank] [!leader_selected ? commando_name : "Creed"]" new_commando.real_name = "[!leader_selected ? commando_rank : commando_leader_rank] [!leader_selected ? commando_name : "Creed"]"
new_commando.age = !leader_selected ? rand(23,35) : rand(35,45) new_commando.age = !leader_selected ? rand(23,35) : rand(35,45)

View File

@@ -265,28 +265,28 @@ var/list/sent_strike_teams = list()
if(can_customize_appearance) if(can_customize_appearance)
var/new_facial = input(user, "Please select facial hair color.", "Character Generation") as color var/new_facial = input(user, "Please select facial hair color.", "Character Generation") as color
if(new_facial) if(new_facial)
new_commando.r_facial = hex2num(copytext(new_facial, 2, 4)) new_commando.my_appearance.r_facial = hex2num(copytext(new_facial, 2, 4))
new_commando.g_facial = hex2num(copytext(new_facial, 4, 6)) new_commando.my_appearance.g_facial = hex2num(copytext(new_facial, 4, 6))
new_commando.b_facial = hex2num(copytext(new_facial, 6, 8)) new_commando.my_appearance.b_facial = hex2num(copytext(new_facial, 6, 8))
var/new_hair = input(user, "Please select hair color.", "Character Generation") as color var/new_hair = input(user, "Please select hair color.", "Character Generation") as color
if(new_facial) if(new_facial)
new_commando.r_hair = hex2num(copytext(new_hair, 2, 4)) new_commando.my_appearance.r_hair = hex2num(copytext(new_hair, 2, 4))
new_commando.g_hair = hex2num(copytext(new_hair, 4, 6)) new_commando.my_appearance.g_hair = hex2num(copytext(new_hair, 4, 6))
new_commando.b_hair = hex2num(copytext(new_hair, 6, 8)) new_commando.my_appearance.b_hair = hex2num(copytext(new_hair, 6, 8))
var/new_eyes = input(user, "Please select eye color.", "Character Generation") as color var/new_eyes = input(user, "Please select eye color.", "Character Generation") as color
if(new_eyes) if(new_eyes)
new_commando.r_eyes = hex2num(copytext(new_eyes, 2, 4)) new_commando.my_appearance.r_eyes = hex2num(copytext(new_eyes, 2, 4))
new_commando.g_eyes = hex2num(copytext(new_eyes, 4, 6)) new_commando.my_appearance.g_eyes = hex2num(copytext(new_eyes, 4, 6))
new_commando.b_eyes = hex2num(copytext(new_eyes, 6, 8)) new_commando.my_appearance.b_eyes = hex2num(copytext(new_eyes, 6, 8))
var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (!new_tone) if (!new_tone)
new_tone = 35 new_tone = 35
new_commando.s_tone = max(min(round(text2num(new_tone)), 220), 1) new_commando.my_appearance.s_tone = max(min(round(text2num(new_tone)), 220), 1)
new_commando.s_tone = -new_commando.s_tone + 35 new_commando.my_appearance.s_tone = -new_commando.my_appearance.s_tone + 35
// hair // hair
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
@@ -302,12 +302,12 @@ var/list/sent_strike_teams = list()
//hair //hair
var/new_hstyle = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list var/new_hstyle = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list
if(new_hstyle) if(new_hstyle)
new_commando.h_style = new_hstyle new_commando.my_appearance.h_style = new_hstyle
// facial hair // facial hair
var/new_fstyle = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list var/new_fstyle = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
if(new_fstyle) if(new_fstyle)
new_commando.f_style = new_fstyle new_commando.my_appearance.f_style = new_fstyle
var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female") var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender) if (new_gender)
@@ -317,9 +317,7 @@ var/list/sent_strike_teams = list()
new_commando.setGender(FEMALE) new_commando.setGender(FEMALE)
else else
new_commando.setGender(pick(MALE, FEMALE)) new_commando.setGender(pick(MALE, FEMALE))
new_commando.randomise_appearance_for(new_commando.gender)
var/datum/preferences/A = new()
A.randomize_appearance_for(new_commando)
//M.rebuild_appearance() //M.rebuild_appearance()
new_commando.update_hair() new_commando.update_hair()

View File

@@ -24,8 +24,7 @@
new_syndicate_commando.setGender(pick(MALE, FEMALE)) new_syndicate_commando.setGender(pick(MALE, FEMALE))
var/datum/preferences/A = new()//Randomize appearance for the commando. new_syndicate_commando.randomise_appearance_for(new_syndicate_commando.gender)
A.randomize_appearance_for(new_syndicate_commando)
new_syndicate_commando.real_name = "[!syndicate_leader_selected ? syndicate_commando_rank : syndicate_commando_leader_rank] [syndicate_commando_name]" new_syndicate_commando.real_name = "[!syndicate_leader_selected ? syndicate_commando_rank : syndicate_commando_leader_rank] [syndicate_commando_name]"
new_syndicate_commando.age = !syndicate_leader_selected ? rand(23,35) : rand(35,45) new_syndicate_commando.age = !syndicate_leader_selected ? rand(23,35) : rand(35,45)

View File

@@ -61,8 +61,8 @@
bloodDNA = null bloodDNA = null
// Floorlength braids? Enjoy your tripping. // Floorlength braids? Enjoy your tripping.
if(H.h_style && !H.check_hidden_head_flags(HIDEHEADHAIR)) if(H.my_appearance.h_style && !H.check_hidden_head_flags(HIDEHEADHAIR))
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style] var/datum/sprite_accessory/hair_style = hair_styles_list[H.my_appearance.h_style]
if(hair_style && (hair_style.flags & HAIRSTYLE_CANTRIP)) if(hair_style && (hair_style.flags & HAIRSTYLE_CANTRIP))
if(H.m_intent == "run" && prob(5)) if(H.m_intent == "run" && prob(5))
if (H.Slip(4, 5)) if (H.Slip(4, 5))

View File

@@ -777,37 +777,37 @@ var/list/admin_verbs_mod = list(
return return
var/new_facial = input("Please select facial hair color.", "Character Generation") as color var/new_facial = input("Please select facial hair color.", "Character Generation") as color
if(new_facial) if(new_facial)
M.r_facial = hex2num(copytext(new_facial, 2, 4)) M.my_appearance.r_facial = hex2num(copytext(new_facial, 2, 4))
M.g_facial = hex2num(copytext(new_facial, 4, 6)) M.my_appearance.g_facial = hex2num(copytext(new_facial, 4, 6))
M.b_facial = hex2num(copytext(new_facial, 6, 8)) M.my_appearance.b_facial = hex2num(copytext(new_facial, 6, 8))
var/new_hair = input("Please select hair color.", "Character Generation") as color var/new_hair = input("Please select hair color.", "Character Generation") as color
if(new_facial) if(new_facial)
M.r_hair = hex2num(copytext(new_hair, 2, 4)) M.my_appearance.r_hair = hex2num(copytext(new_hair, 2, 4))
M.g_hair = hex2num(copytext(new_hair, 4, 6)) M.my_appearance.g_hair = hex2num(copytext(new_hair, 4, 6))
M.b_hair = hex2num(copytext(new_hair, 6, 8)) M.my_appearance.b_hair = hex2num(copytext(new_hair, 6, 8))
var/new_eyes = input("Please select eye color.", "Character Generation") as color var/new_eyes = input("Please select eye color.", "Character Generation") as color
if(new_eyes) if(new_eyes)
M.r_eyes = hex2num(copytext(new_eyes, 2, 4)) M.my_appearance.r_eyes = hex2num(copytext(new_eyes, 2, 4))
M.g_eyes = hex2num(copytext(new_eyes, 4, 6)) M.my_appearance.g_eyes = hex2num(copytext(new_eyes, 4, 6))
M.b_eyes = hex2num(copytext(new_eyes, 6, 8)) M.my_appearance.b_eyes = hex2num(copytext(new_eyes, 6, 8))
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (new_tone) if (new_tone)
M.s_tone = max(min(round(text2num(new_tone)), 220), 1) M.my_appearance.s_tone = max(min(round(text2num(new_tone)), 220), 1)
M.s_tone = -M.s_tone + 35 M.my_appearance.s_tone = -M.my_appearance.s_tone + 35
// hair // hair
var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list
if(new_hstyle) if(new_hstyle)
M.h_style = new_hstyle M.my_appearance.h_style = new_hstyle
// facial hair // facial hair
var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
if(new_fstyle) if(new_fstyle)
M.f_style = new_fstyle M.my_appearance.f_style = new_fstyle
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female") var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender) if (new_gender)

View File

@@ -3407,7 +3407,7 @@
feedback_inc("admin_secrets_fun_used",1) feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","DF") feedback_add_details("admin_secrets_fun_used","DF")
for(var/mob/living/carbon/human/B in mob_list) for(var/mob/living/carbon/human/B in mob_list)
B.f_style = "Dward Beard" B.my_appearance.f_style = "Dward Beard"
B.update_hair() B.update_hair()
message_admins("[key_name_admin(usr)] activated dorf mode") message_admins("[key_name_admin(usr)] activated dorf mode")
if("ionstorm") if("ionstorm")

View File

@@ -222,8 +222,7 @@ client/proc/one_click_antag()
new_character.gender = pick(MALE,FEMALE) new_character.gender = pick(MALE,FEMALE)
var/datum/preferences/A = new() new_character.randomise_appearance_for(new_character.gender)
A.randomize_appearance_for(new_character)
new_character.generate_name() new_character.generate_name()
new_character.age = rand(17,45) new_character.age = rand(17,45)
@@ -240,8 +239,7 @@ client/proc/one_click_antag()
new_syndicate_commando.gender = pick(MALE, FEMALE) new_syndicate_commando.gender = pick(MALE, FEMALE)
var/datum/preferences/A = new()//Randomize appearance for the commando. new_syndicate_commando.randomise_appearance_for(new_syndicate_commando.gender)
A.randomize_appearance_for(new_syndicate_commando)
new_syndicate_commando.real_name = "[!syndicate_leader_selected ? syndicate_commando_rank : syndicate_commando_leader_rank] [syndicate_commando_name]" new_syndicate_commando.real_name = "[!syndicate_leader_selected ? syndicate_commando_rank : syndicate_commando_leader_rank] [syndicate_commando_name]"
new_syndicate_commando.name = new_syndicate_commando.real_name new_syndicate_commando.name = new_syndicate_commando.real_name
@@ -266,7 +264,7 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/new_vox = new(spawn_location.loc) var/mob/living/carbon/human/new_vox = new(spawn_location.loc)
new_vox.setGender(pick(MALE, FEMALE)) new_vox.setGender(pick(MALE, FEMALE))
new_vox.h_style = "Short Vox Quills" new_vox.my_appearance.h_style = "Short Vox Quills"
new_vox.regenerate_icons() new_vox.regenerate_icons()
new_vox.age = rand(12,20) new_vox.age = rand(12,20)

View File

@@ -67,8 +67,7 @@
var/mob/living/silicon/S = M var/mob/living/silicon/S = M
var/mob/living/carbon/human/new_human = new /mob/living/carbon/human(S.loc, delay_ready_dna=1) var/mob/living/carbon/human/new_human = new /mob/living/carbon/human(S.loc, delay_ready_dna=1)
new_human.setGender(pick(MALE, FEMALE)) //The new human's gender will be random new_human.setGender(pick(MALE, FEMALE)) //The new human's gender will be random
var/datum/preferences/A = new() //Randomize appearance for the human new_human.randomise_appearance_for(new_human.gender)
A.randomize_appearance_for(new_human)
new_human.generate_name() new_human.generate_name()
new_human.languages |= S.languages new_human.languages |= S.languages
if(S.default_language) if(S.default_language)

View File

@@ -496,8 +496,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
new_character.age = record_found.fields["age"] new_character.age = record_found.fields["age"]
else else
new_character.setGender(pick(MALE,FEMALE)) new_character.setGender(pick(MALE,FEMALE))
var/datum/preferences/A = new() new_character.randomise_appearance_for(new_character.gender)
A.randomize_appearance_for(new_character)
new_character.real_name = G_found.real_name new_character.real_name = G_found.real_name
if(!new_character.real_name) if(!new_character.real_name)

View File

@@ -1523,22 +1523,22 @@ NOTE: The change will take effect AFTER any current recruiting periods."}
character.setGender(gender) character.setGender(gender)
character.age = age character.age = age
character.r_eyes = r_eyes character.my_appearance.r_eyes = r_eyes
character.g_eyes = g_eyes character.my_appearance.g_eyes = g_eyes
character.b_eyes = b_eyes character.my_appearance.b_eyes = b_eyes
character.r_hair = r_hair character.my_appearance.r_hair = r_hair
character.g_hair = g_hair character.my_appearance.g_hair = g_hair
character.b_hair = b_hair character.my_appearance.b_hair = b_hair
character.r_facial = r_facial character.my_appearance.r_facial = r_facial
character.g_facial = g_facial character.my_appearance.g_facial = g_facial
character.b_facial = b_facial character.my_appearance.b_facial = b_facial
character.s_tone = s_tone character.my_appearance.s_tone = s_tone
character.h_style = h_style character.my_appearance.h_style = h_style
character.f_style = f_style character.my_appearance.f_style = f_style
character.skills = skills character.skills = skills

View File

@@ -186,7 +186,7 @@
if(!istype(user) || !haircolored) if(!istype(user) || !haircolored)
return return
wear_override = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty") wear_override = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
wear_override.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD) wear_override.Blend(rgb(user.my_appearance.r_hair, user.my_appearance.g_hair, user.my_appearance.b_hair), ICON_ADD)
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner") var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
wear_override.Blend(earbit, ICON_OVERLAY) wear_override.Blend(earbit, ICON_OVERLAY)

View File

@@ -214,7 +214,7 @@
voxcount++ voxcount++
if(isdiona(H)) if(isdiona(H))
dionacount++ dionacount++
if(isjusthuman(H) && (H.h_style == "Bald" || H.h_style == "Skinhead") && !H.check_body_part_coverage(HEAD)) if(isjusthuman(H) && (H.my_appearance.h_style == "Bald" || H.my_appearance.h_style == "Skinhead") && !H.check_body_part_coverage(HEAD))
baldycount++ baldycount++
if(M_FAT in H.mutations) if(M_FAT in H.mutations)
fattycount++ fattycount++

View File

@@ -82,7 +82,7 @@ var/global/list/datum/mind/raiders = list() //Antags.
var/mob/living/carbon/human/vox = raider.current var/mob/living/carbon/human/vox = raider.current
vox.age = rand(12,20) vox.age = rand(12,20)
vox.s_tone = random_skin_tone("Vox") vox.my_appearance.s_tone = random_skin_tone("Vox")
vox.dna.mutantrace = "vox" vox.dna.mutantrace = "vox"
vox.set_species("Vox") vox.set_species("Vox")
vox.fully_replace_character_name(vox.real_name, vox.generate_name()) vox.fully_replace_character_name(vox.real_name, vox.generate_name())
@@ -90,8 +90,8 @@ var/global/list/datum/mind/raiders = list() //Antags.
vox.flavor_text = "" vox.flavor_text = ""
vox.add_language(LANGUAGE_VOX) vox.add_language(LANGUAGE_VOX)
vox.remove_language(LANGUAGE_GALACTIC_COMMON) vox.remove_language(LANGUAGE_GALACTIC_COMMON)
vox.h_style = "Short Vox Quills" vox.my_appearance.h_style = "Short Vox Quills"
vox.f_style = "Shaved" vox.my_appearance.f_style = "Shaved"
for(var/datum/organ/external/limb in vox.organs) for(var/datum/organ/external/limb in vox.organs)
limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT)
vox.equip_vox_raider() vox.equip_vox_raider()

View File

@@ -0,0 +1,160 @@
#define INDEX_RED 1
#define INDEX_GREEN 2
#define INDEX_BLUE 3
/datum/human_appearance
// For identification.
var/name
var/gender
// "Proper" to the appearance datum.
var/s_tone
var/h_style
var/r_hair
var/g_hair
var/b_hair
var/f_style
var/r_facial
var/g_facial
var/b_facial
var/r_eyes
var/g_eyes
var/b_eyes
/mob/living/carbon/human/
var/datum/human_appearance/my_appearance
/mob/living/carbon/human/proc/switch_appearance(var/datum/human_appearance/new_looks)
if (!istype(new_looks))
return
my_appearance = new_looks
regenerate_icons()
/mob/living/carbon/human/proc/randomise_appearance_for(var/new_gender)
var/datum/human_appearance/appearance = new
if (new_gender)
appearance.gender = new_gender
else
appearance.gender = pick(MALE, FEMALE)
appearance.s_tone = random_skin_tone(species)
appearance.h_style = random_hair_style(gender, species)
appearance.f_style = random_facial_hair_style(gender, species)
var/list/hair_colour = randomize_hair_color("hair")
var/list/facial_hair_colour = randomize_hair_color("facial")
var/list/eye_colour = randomize_eyes_color()
appearance.r_hair = hair_colour[INDEX_RED]
appearance.g_hair = hair_colour[INDEX_GREEN]
appearance.b_hair = hair_colour[INDEX_BLUE]
appearance.r_facial = facial_hair_colour[INDEX_RED]
appearance.g_facial = facial_hair_colour[INDEX_GREEN]
appearance.b_facial = facial_hair_colour[INDEX_BLUE]
appearance.r_eyes = eye_colour[INDEX_RED]
appearance.g_eyes = eye_colour[INDEX_GREEN]
appearance.b_eyes = eye_colour[INDEX_BLUE]
gender = appearance.gender
regenerate_icons()
return appearance
/mob/living/carbon/human/proc/randomize_hair_color(var/target = "hair")
if(prob (75) && target == "facial") // Chance to inherit hair color
return list(my_appearance.r_hair, my_appearance.g_hair, my_appearance.b_hair)
var/red
var/green
var/blue
var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", 15;"punk")
switch(col)
if("blonde")
red = 255
green = 255
blue = 0
if("black")
red = 0
green = 0
blue = 0
if("chestnut")
red = 153
green = 102
blue = 51
if("copper")
red = 255
green = 153
blue = 0
if("brown")
red = 102
green = 51
blue = 0
if("wheat")
red = 255
green = 255
blue = 153
if("old")
red = rand (100, 255)
green = red
blue = red
if("punk")
red = rand(0, 255)
green = rand(0, 255)
blue = rand(0, 255)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
return list(red, green, blue)
/mob/living/carbon/human/proc/randomize_eyes_color()
var/red
var/green
var/blue
var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino")
switch(col)
if("black")
red = 0
green = 0
blue = 0
if("grey")
red = rand (100, 200)
green = red
blue = red
if("brown")
red = 102
green = 51
blue = 0
if("chestnut")
red = 153
green = 102
blue = 0
if("blue")
red = 51
green = 102
blue = 204
if("lightblue")
red = 102
green = 204
blue = 255
if("green")
red = 0
green = 102
blue = 0
if("albino")
red = rand (200, 255)
green = rand (0, 150)
blue = rand (0, 150)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
return list(red, green, blue)

View File

@@ -1,5 +1,5 @@
/mob/living/carbon/human/tajaran/New(var/new_loc) /mob/living/carbon/human/tajaran/New(var/new_loc)
h_style = "Tajaran Ears" my_appearance.h_style = "Tajaran Ears"
..(new_loc, "Tajaran") ..(new_loc, "Tajaran")
/mob/living/carbon/human/tajaran/IsAdvancedToolUser() /mob/living/carbon/human/tajaran/IsAdvancedToolUser()

View File

@@ -66,6 +66,7 @@
qdel(vessel) qdel(vessel)
vessel = null vessel = null
my_appearance = null
..() ..()
@@ -126,10 +127,10 @@
if(M_SKELETON in src.mutations) if(M_SKELETON in src.mutations)
return return
if(f_style) if(my_appearance.f_style)
f_style = "Shaved" my_appearance.f_style = "Shaved"
if(h_style) if(my_appearance.h_style)
h_style = "Bald" my_appearance.h_style = "Bald"
update_hair(0) update_hair(0)
mutations.Add(M_SKELETON) mutations.Add(M_SKELETON)
@@ -142,10 +143,10 @@
/mob/living/carbon/human/proc/ChangeToHusk() /mob/living/carbon/human/proc/ChangeToHusk()
if(M_HUSK in mutations) if(M_HUSK in mutations)
return return
if(f_style) if(my_appearance.f_style)
f_style = "Shaved" //We only change the icon_state of the hair datum, so it doesn't mess up their UI/UE my_appearance.f_style = "Shaved" //We only change the icon_state of the hair datum, so it doesn't mess up their UI/UE
if(h_style) if(my_appearance.h_style)
h_style = "Bald" my_appearance.h_style = "Bald"
update_hair(0) update_hair(0)
mutations.Add(M_HUSK) mutations.Add(M_HUSK)

View File

@@ -23,55 +23,55 @@
..(new_loc, "Manifested") ..(new_loc, "Manifested")
/mob/living/carbon/human/skrell/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/skrell/New(var/new_loc, delay_ready_dna = 0)
h_style = "Skrell Male Tentacles" my_appearance.h_style = "Skrell Male Tentacles"
..(new_loc, "Skrell") ..(new_loc, "Skrell")
/mob/living/carbon/human/tajaran/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/tajaran/New(var/new_loc, delay_ready_dna = 0)
h_style = "Tajaran Ears" my_appearance.h_style = "Tajaran Ears"
..(new_loc, "Tajaran") ..(new_loc, "Tajaran")
/mob/living/carbon/human/unathi/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/unathi/New(var/new_loc, delay_ready_dna = 0)
h_style = "Unathi Horns" my_appearance.h_style = "Unathi Horns"
..(new_loc, "Unathi") ..(new_loc, "Unathi")
/mob/living/carbon/human/vox/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/vox/New(var/new_loc, delay_ready_dna = 0)
h_style = "Short Vox Quills" my_appearance.h_style = "Short Vox Quills"
..(new_loc, "Vox") ..(new_loc, "Vox")
/mob/living/carbon/human/diona/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/diona/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Diona") ..(new_loc, "Diona")
/mob/living/carbon/human/skellington/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/skellington/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Skellington", delay_ready_dna) ..(new_loc, "Skellington", delay_ready_dna)
/mob/living/carbon/human/skelevox/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/skelevox/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Skeletal Vox") ..(new_loc, "Skeletal Vox")
/mob/living/carbon/human/plasma/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/plasma/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Plasmaman") ..(new_loc, "Plasmaman")
/mob/living/carbon/human/muton/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/muton/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Muton") ..(new_loc, "Muton")
/mob/living/carbon/human/grey/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/grey/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Grey") ..(new_loc, "Grey")
/mob/living/carbon/human/golem/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/golem/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Golem") ..(new_loc, "Golem")
/mob/living/carbon/human/grue/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/grue/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Grue") ..(new_loc, "Grue")
/mob/living/carbon/human/slime/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/slime/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Slime") ..(new_loc, "Slime")
/mob/living/carbon/human/NPC/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/NPC/New(var/new_loc, delay_ready_dna = 0)
@@ -79,13 +79,12 @@
initialize_basic_NPC_components() initialize_basic_NPC_components()
/mob/living/carbon/human/frankenstein/New(var/new_loc, delay_ready_dna = 0) //Just fuck my shit up: the mob /mob/living/carbon/human/frankenstein/New(var/new_loc, delay_ready_dna = 0) //Just fuck my shit up: the mob
f_style = pick(facial_hair_styles_list)
h_style = pick(hair_styles_list)
var/list/valid_species = (all_species - list("Krampus", "Horror")) var/list/valid_species = (all_species - list("Krampus", "Horror"))
var/datum/species/new_species = all_species[pick(valid_species)] var/datum/species/new_species = all_species[pick(valid_species)]
..(new_loc, new_species.name) ..(new_loc, new_species.name)
my_appearance.f_style = pick(facial_hair_styles_list)
my_appearance.h_style = pick(hair_styles_list)
gender = pick(MALE, FEMALE, NEUTER, PLURAL) gender = pick(MALE, FEMALE, NEUTER, PLURAL)
meat_type = pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/meat)) meat_type = pick(typesof(/obj/item/weapon/reagent_containers/food/snacks/meat))
@@ -95,11 +94,11 @@
update_body() update_body()
/mob/living/carbon/human/mushroom/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/mushroom/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Mushroom") ..(new_loc, "Mushroom")
/mob/living/carbon/human/lich/New(var/new_loc, delay_ready_dna = 0) /mob/living/carbon/human/lich/New(var/new_loc, delay_ready_dna = 0)
h_style = "Bald" my_appearance.h_style = "Bald"
..(new_loc, "Undead") ..(new_loc, "Undead")
/mob/living/carbon/human/generate_static_overlay() /mob/living/carbon/human/generate_static_overlay()
@@ -123,8 +122,9 @@
static_overlays["cult"] = static_overlay static_overlays["cult"] = static_overlay
/mob/living/carbon/human/New(var/new_loc, var/new_species_name = null, var/delay_ready_dna=0) /mob/living/carbon/human/New(var/new_loc, var/new_species_name = null, var/delay_ready_dna=0)
my_appearance = new // Initialise how they look.
if(new_species_name) if(new_species_name)
s_tone = random_skin_tone(new_species_name) my_appearance.s_tone = random_skin_tone(new_species_name)
multicolor_skin_r = rand(0,255) //Only used when the human has a species datum with the MULTICOLOR anatomical flag multicolor_skin_r = rand(0,255) //Only used when the human has a species datum with the MULTICOLOR anatomical flag
multicolor_skin_g = rand(0,255) multicolor_skin_g = rand(0,255)
multicolor_skin_b = rand(0,255) multicolor_skin_b = rand(0,255)
@@ -751,30 +751,30 @@
src.verbs -= /mob/living/carbon/human/proc/morph src.verbs -= /mob/living/carbon/human/proc/morph
return return
var/new_facial = input("Please select facial hair color.", "Character Generation",rgb(r_facial,g_facial,b_facial)) as color var/new_facial = input("Please select facial hair color.", "Character Generation",rgb(my_appearance.r_facial,my_appearance.g_facial,my_appearance.b_facial)) as color
if(new_facial) if(new_facial)
r_facial = hex2num(copytext(new_facial, 2, 4)) my_appearance.r_facial = hex2num(copytext(new_facial, 2, 4))
g_facial = hex2num(copytext(new_facial, 4, 6)) my_appearance.g_facial = hex2num(copytext(new_facial, 4, 6))
b_facial = hex2num(copytext(new_facial, 6, 8)) my_appearance.b_facial = hex2num(copytext(new_facial, 6, 8))
var/new_hair = input("Please select hair color.", "Character Generation",rgb(r_hair,g_hair,b_hair)) as color var/new_hair = input("Please select hair color.", "Character Generation",rgb(my_appearance.r_hair,my_appearance.g_hair,my_appearance.b_hair)) as color
if(new_facial) if(new_facial)
r_hair = hex2num(copytext(new_hair, 2, 4)) my_appearance.r_hair = hex2num(copytext(new_hair, 2, 4))
g_hair = hex2num(copytext(new_hair, 4, 6)) my_appearance.g_hair = hex2num(copytext(new_hair, 4, 6))
b_hair = hex2num(copytext(new_hair, 6, 8)) my_appearance.b_hair = hex2num(copytext(new_hair, 6, 8))
var/new_eyes = input("Please select eye color.", "Character Generation",rgb(r_eyes,g_eyes,b_eyes)) as color var/new_eyes = input("Please select eye color.", "Character Generation",rgb(my_appearance.r_eyes,my_appearance.g_eyes,my_appearance.b_eyes)) as color
if(new_eyes) if(new_eyes)
r_eyes = hex2num(copytext(new_eyes, 2, 4)) my_appearance.r_eyes = hex2num(copytext(new_eyes, 2, 4))
g_eyes = hex2num(copytext(new_eyes, 4, 6)) my_appearance.g_eyes = hex2num(copytext(new_eyes, 4, 6))
b_eyes = hex2num(copytext(new_eyes, 6, 8)) my_appearance.b_eyes = hex2num(copytext(new_eyes, 6, 8))
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-s_tone]") as text var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-my_appearance.s_tone]") as text
if (!new_tone) if (!new_tone)
new_tone = 35 new_tone = 35
s_tone = max(min(round(text2num(new_tone)), 220), 1) my_appearance.s_tone = max(min(round(text2num(new_tone)), 220), 1)
s_tone = -s_tone + 35 my_appearance.s_tone = -my_appearance.s_tone + 35
// hair // hair
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
@@ -787,11 +787,11 @@
qdel(H) // delete the hair after it's all done qdel(H) // delete the hair after it's all done
H = null H = null
var/new_style = input("Please select hair style", "Character Generation",h_style) as null|anything in hairs var/new_style = input("Please select hair style", "Character Generation",my_appearance.h_style) as null|anything in hairs
// if new style selected (not cancel) // if new style selected (not cancel)
if (new_style) if (new_style)
h_style = new_style my_appearance.h_style = new_style
// facial hair // facial hair
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
@@ -803,10 +803,10 @@
qdel(H) qdel(H)
H = null H = null
new_style = input("Please select facial style", "Character Generation",f_style) as null|anything in fhairs new_style = input("Please select facial style", "Character Generation",my_appearance.f_style) as null|anything in fhairs
if(new_style) if(new_style)
f_style = new_style my_appearance.f_style = new_style
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female") var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender) if (new_gender)
@@ -1723,18 +1723,18 @@ mob/living/carbon/human/isincrit()
/mob/living/carbon/human/send_to_past(var/duration) /mob/living/carbon/human/send_to_past(var/duration)
..() ..()
var/static/list/resettable_vars = list( var/static/list/resettable_vars = list(
"r_hair", "my_appearance.r_hair",
"g_hair", "my_appearance.g_hair",
"b_hair", "my_appearance.b_hair",
"h_style", "my_appearance.h_style",
"r_facial", "my_appearance.r_facial",
"g_facial", "my_appearance.g_facial",
"b_facial", "my_appearance.b_facial",
"f_style", "my_appearance.f_style",
"r_eyes", "my_appearance.r_eyes",
"g_eyes", ".my_appearance.g_eyes",
"b_eyes", ".my_appearance.b_eyes",
"s_tone", "my_appearance.s_tone",
"lip_style", "lip_style",
"eye_style", "eye_style",
"wear_suit", "wear_suit",

View File

@@ -1,22 +1,6 @@
/mob/living/carbon/human /mob/living/carbon/human
//Hair colour and style //Hair colour and style are in apperance.dm
var/r_hair = 0
var/g_hair = 0
var/b_hair = 0
var/h_style = "Bald"
//Facial hair colour and style
var/r_facial = 0
var/g_facial = 0
var/b_facial = 0
var/f_style = "Shaved"
//Eye colour
var/r_eyes = 0
var/g_eyes = 0
var/b_eyes = 0
var/s_tone = 0 //Skin tone
var/multicolor_skin_r = 0 //Only used when the human has a species datum with the MULTICOLOR anatomical flag var/multicolor_skin_r = 0 //Only used when the human has a species datum with the MULTICOLOR anatomical flag
var/multicolor_skin_g = 0 var/multicolor_skin_g = 0
var/multicolor_skin_b = 0 var/multicolor_skin_b = 0

View File

@@ -8,8 +8,8 @@
//No hair for radroaches //No hair for radroaches
if(src.radiation >= 50) if(src.radiation >= 50)
src.h_style = "Bald" src.my_appearance.h_style = "Bald"
src.f_style = "Shaved" src.my_appearance.f_style = "Shaved"
src.update_hair() src.update_hair()
//0.1% chance of playing a scary sound to someone who's in complete darkness //0.1% chance of playing a scary sound to someone who's in complete darkness

View File

@@ -256,10 +256,10 @@ var/global/list/damage_icon_parts = list()
if(species.anatomy_flags & MULTICOLOR) if(species.anatomy_flags & MULTICOLOR)
stand_icon.Blend(rgb(multicolor_skin_r, multicolor_skin_g, multicolor_skin_b), ICON_ADD) stand_icon.Blend(rgb(multicolor_skin_r, multicolor_skin_g, multicolor_skin_b), ICON_ADD)
else if(species.anatomy_flags & HAS_SKIN_TONE) else if(species.anatomy_flags & HAS_SKIN_TONE)
if(s_tone >= 0) if(my_appearance.s_tone >= 0)
stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) stand_icon.Blend(rgb(my_appearance.s_tone, my_appearance.s_tone, my_appearance.s_tone), ICON_ADD)
else else
stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) stand_icon.Blend(rgb(-my_appearance.s_tone, -my_appearance.s_tone, -my_appearance.s_tone), ICON_SUBTRACT)
if(husk) if(husk)
var/icon/mask = new(stand_icon) var/icon/mask = new(stand_icon)
@@ -272,7 +272,7 @@ var/global/list/damage_icon_parts = list()
//Eyes //Eyes
if(!skeleton) if(!skeleton)
var/icon/eyes = new/icon('icons/mob/human_face.dmi', species.eyes) var/icon/eyes = new/icon('icons/mob/human_face.dmi', species.eyes)
eyes.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) eyes.Blend(rgb(my_appearance.r_eyes, my_appearance.g_eyes, my_appearance.b_eyes), ICON_ADD)
stand_icon.Blend(eyes, ICON_OVERLAY) stand_icon.Blend(eyes, ICON_OVERLAY)
//Mouth (lipstick!) //Mouth (lipstick!)
@@ -315,28 +315,28 @@ var/global/list/damage_icon_parts = list()
var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s")
var/hair_suffix = check_hidden_head_flags(HIDEHEADHAIR) ? "s2" : "s" // s2 = cropped icon var/hair_suffix = check_hidden_head_flags(HIDEHEADHAIR) ? "s2" : "s" // s2 = cropped icon
if(f_style && !check_hidden_head_flags(HIDEBEARDHAIR)) if(my_appearance.f_style && !check_hidden_head_flags(HIDEBEARDHAIR))
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[my_appearance.f_style]
if((facial_hair_style) && (src.species.name in facial_hair_style.species_allowed)) if((facial_hair_style) && (src.species.name in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration) if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) facial_s.Blend(rgb(my_appearance.r_facial, my_appearance.g_facial, my_appearance.b_facial), ICON_ADD)
face_standing.Blend(facial_s, ICON_OVERLAY) face_standing.Blend(facial_s, ICON_OVERLAY)
// else // else
//warning("Invalid f_style for [species.name]: [f_style]") //warning("Invalid my_appearance.f_style for [species.name]: [my_appearance.f_style]")
if(h_style && !(src.head && (src.head.flags & HIDEHAIRCOMPLETELY))) if(my_appearance.h_style && !(src.head && (src.head.flags & HIDEHAIRCOMPLETELY)))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] var/datum/sprite_accessory/hair_style = hair_styles_list[my_appearance.h_style]
if((hair_style) && (src.species.name in hair_style.species_allowed)) if((hair_style) && (src.species.name in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_suffix]") var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_suffix]")
if(hair_style.do_colouration) if(hair_style.do_colouration)
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) hair_s.Blend(rgb(my_appearance.r_hair, my_appearance.g_hair, my_appearance.b_hair), ICON_ADD)
if(hair_style.additional_accessories) if(hair_style.additional_accessories)
hair_s.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_acc"), ICON_OVERLAY) hair_s.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_acc"), ICON_OVERLAY)
face_standing.Blend(hair_s, ICON_OVERLAY) face_standing.Blend(hair_s, ICON_OVERLAY)
// else // else
//warning("Invalid h_style for [species.name]: [h_style]") //warning("Invalid my_appearance.h_style for [species.name]: [my_appearance.h_style]")
if(body_alphas.len) if(body_alphas.len)
var/lowest_alpha = get_lowest_body_alpha() var/lowest_alpha = get_lowest_body_alpha()
@@ -1213,24 +1213,24 @@ var/global/list/damage_icon_parts = list()
//base icons //base icons
var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l")
if(f_style) if(my_appearance.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[my_appearance.f_style]
if(facial_hair_style) if(facial_hair_style)
var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l")
facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) facial_l.Blend(rgb(my_appearance.r_facial, my_appearance.g_facial, my_appearance.b_facial), ICON_ADD)
face_lying.Blend(facial_l, ICON_OVERLAY) face_lying.Blend(facial_l, ICON_OVERLAY)
if(h_style) if(my_appearance.h_style)
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] var/datum/sprite_accessory/hair_style = hair_styles_list[my_appearance.h_style]
if(hair_style) if(hair_style)
var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l")
hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) hair_l.Blend(rgb(my_appearance.r_hair, my_appearance.g_hair, my_appearance.b_hair), ICON_ADD)
face_lying.Blend(hair_l, ICON_OVERLAY) face_lying.Blend(hair_l, ICON_OVERLAY)
//Eyes //Eyes
// Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head // Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head
var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l")
eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) eyes_l.Blend(rgb(my_appearance.r_eyes, my_appearance.g_eyes, my_appearance.b_eyes), ICON_ADD)
face_lying.Blend(eyes_l, ICON_OVERLAY) face_lying.Blend(eyes_l, ICON_OVERLAY)
if(lip_style) if(lip_style)

View File

@@ -526,17 +526,17 @@ var/global/list/whitelisted_species = list("Human")
H.update_icon() H.update_icon()
/datum/species/tajaran/updatespeciescolor(var/mob/living/carbon/human/H) /datum/species/tajaran/updatespeciescolor(var/mob/living/carbon/human/H)
switch(H.s_tone) switch(H.my_appearance.s_tone)
if(CATBEASTBLACK) if(CATBEASTBLACK)
icobase = 'icons/mob/human_races/r_tajaranblack.dmi' icobase = 'icons/mob/human_races/r_tajaranblack.dmi'
deform = 'icons/mob/human_races/r_def_tajaranblack.dmi' deform = 'icons/mob/human_races/r_def_tajaranblack.dmi'
tail = "tajtailb" tail = "tajtailb"
H.h_style = "Black Tajaran Ears" H.my_appearance.h_style = "Black Tajaran Ears"
else else
icobase = 'icons/mob/human_races/r_tajaran.dmi' icobase = 'icons/mob/human_races/r_tajaran.dmi'
deform = 'icons/mob/human_races/r_def_tajaran.dmi' deform = 'icons/mob/human_races/r_def_tajaran.dmi'
tail = "tajtail" tail = "tajtail"
H.h_style = "Tajaran Ears" H.my_appearance.h_style = "Tajaran Ears"
/datum/species/tajaran/handle_speech(var/datum/speech/speech, mob/living/carbon/human/H) /datum/species/tajaran/handle_speech(var/datum/speech/speech, mob/living/carbon/human/H)
if (prob(15)) if (prob(15))
@@ -835,7 +835,7 @@ var/global/list/whitelisted_species = list("Human")
H.update_icon() H.update_icon()
/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H) /datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H)
switch(H.s_tone) switch(H.my_appearance.s_tone)
if(6) if(6)
icobase = 'icons/mob/human_races/vox/r_voxemrl.dmi' icobase = 'icons/mob/human_races/vox/r_voxemrl.dmi'
deform = 'icons/mob/human_races/vox/r_def_voxemrl.dmi' deform = 'icons/mob/human_races/vox/r_def_voxemrl.dmi'

View File

@@ -308,13 +308,13 @@
return new_mob return new_mob
/mob/living/carbon/human/proc/GALize() /mob/living/carbon/human/proc/GALize()
s_tone = -100 //Nichi saro ni itte hada o yaku my_appearance.s_tone = -100 //Nichi saro ni itte hada o yaku
update_body() update_body()
if(gender == MALE && h_style != "Toriyama 2") if(gender == MALE && my_appearance.h_style != "Toriyama 2")
h_style = "Toriyama 2" //Yeah, gyaru otoko sengen my_appearance.h_style = "Toriyama 2" //Yeah, gyaru otoko sengen
r_facial = r_hair = 255 my_appearance.r_facial = my_appearance.r_hair = 255
g_facial = g_hair = 255 my_appearance.g_facial = my_appearance.g_hair = 255
b_facial = b_hair = 0 my_appearance.b_facial = my_appearance.b_hair = 0
update_hair() update_hair()
playsound(src, 'sound/misc/gal-o-sengen.ogg', 50, 1)// GO GO GO GO GO GO GAL-O-SENGEN playsound(src, 'sound/misc/gal-o-sengen.ogg', 50, 1)// GO GO GO GO GO GO GAL-O-SENGEN

View File

@@ -1620,10 +1620,10 @@ obj/item/organ/external/New(loc, mob/living/carbon/human/H)
//Changing limb's skin tone to match owner //Changing limb's skin tone to match owner
if(H) if(H)
if(!H.species || H.species.anatomy_flags & HAS_SKIN_TONE) if(!H.species || H.species.anatomy_flags & HAS_SKIN_TONE)
if(H.s_tone >= 0) if(H.my_appearance.s_tone >= 0)
base.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD) base.Blend(rgb(H.my_appearance.s_tone, H.my_appearance.s_tone, H.my_appearance.s_tone), ICON_ADD)
else else
base.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) base.Blend(rgb(-H.my_appearance.s_tone, -H.my_appearance.s_tone, -H.my_appearance.s_tone), ICON_SUBTRACT)
icon = base icon = base
dir = SOUTH dir = SOUTH
@@ -1757,21 +1757,21 @@ obj/item/organ/external/head/New(loc, mob/living/carbon/human/H)
qdel(src) qdel(src)
return return
//Add (facial) hair. //Add (facial) hair.
if(H && H.f_style && !H.check_hidden_head_flags(HIDEBEARDHAIR)) if(H && H.my_appearance.f_style && !H.check_hidden_head_flags(HIDEBEARDHAIR))
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.f_style] var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.my_appearance.f_style]
if(facial_hair_style) if(facial_hair_style)
var/icon/facial = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") var/icon/facial = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration) if(facial_hair_style.do_colouration)
facial.Blend(rgb(H.r_facial, H.g_facial, H.b_facial), ICON_ADD) facial.Blend(rgb(H.my_appearance.r_facial, H.my_appearance.g_facial, H.my_appearance.b_facial), ICON_ADD)
overlays.Add(facial) // icon.Blend(facial, ICON_OVERLAY) overlays.Add(facial) // icon.Blend(facial, ICON_OVERLAY)
if(H && H.h_style && !H.check_hidden_head_flags(HIDEHEADHAIR)) if(H && H.my_appearance.h_style && !H.check_hidden_head_flags(HIDEHEADHAIR))
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style] var/datum/sprite_accessory/hair_style = hair_styles_list[H.my_appearance.h_style]
if(hair_style) if(hair_style)
var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration) if(hair_style.do_colouration)
hair.Blend(rgb(H.r_hair, H.g_hair, H.b_hair), ICON_ADD) hair.Blend(rgb(H.my_appearance.r_hair, H.my_appearance.g_hair, H.my_appearance.b_hair), ICON_ADD)
if(hair_style.additional_accessories) if(hair_style.additional_accessories)
hair.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_acc"), ICON_OVERLAY) hair.Blend(icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_acc"), ICON_OVERLAY)

View File

@@ -324,15 +324,15 @@
var/mob/living/carbon/human/H = target var/mob/living/carbon/human/H = target
if(istype(H)) if(istype(H))
eye_colour = list( eye_colour = list(
H.r_eyes ? H.r_eyes : 0, H.my_appearance.r_eyes ? H.my_appearance.r_eyes : 0,
H.g_eyes ? H.g_eyes : 0, H.my_appearance.g_eyes ? H.my_appearance.g_eyes : 0,
H.b_eyes ? H.b_eyes : 0 H.my_appearance.b_eyes ? H.my_appearance.b_eyes : 0
) )
// Leave bloody red pits behind! // Leave bloody red pits behind!
H.r_eyes = 128 H.my_appearance.r_eyes = 128
H.g_eyes = 0 H.my_appearance.g_eyes = 0
H.b_eyes = 0 H.my_appearance.b_eyes = 0
H.update_body() H.update_body()
/obj/item/organ/internal/proc/replaced(var/mob/living/target) /obj/item/organ/internal/proc/replaced(var/mob/living/target)
@@ -343,9 +343,9 @@
// Apply our eye colour to the target. // Apply our eye colour to the target.
var/mob/living/carbon/human/H = target var/mob/living/carbon/human/H = target
if(istype(H) && eye_colour) if(istype(H) && eye_colour)
H.r_eyes = eye_colour[1] H.my_appearance.r_eyes = eye_colour[1]
H.g_eyes = eye_colour[2] H.my_appearance.g_eyes = eye_colour[2]
H.b_eyes = eye_colour[3] H.my_appearance.b_eyes = eye_colour[3]
H.update_body() H.update_body()
/obj/item/organ/internal/proc/bitten(mob/user) /obj/item/organ/internal/proc/bitten(mob/user)

View File

@@ -28,13 +28,12 @@
/spell/shapeshift/choose_targets(var/mob/user = usr) /spell/shapeshift/choose_targets(var/mob/user = usr)
return list(user) // Self-cast return list(user) // Self-cast
/spell/shapeshift/cast(var/list/targets, var/mob/user) /spell/shapeshift/cast(var/list/targets, var/mob/living/carbon/human/user)
if (!user.client) if (!istype(user))
return FALSE return FALSE
user.visible_message("<span class='sinister'>\The [user] transforms!</span>") user.visible_message("<span class='sinister'>\The [user] transforms!</span>")
user.client.prefs.real_name = user.generate_name() //random_name(M.current.gender) user.real_name = user.generate_name() //random_name(M.current.gender)
user.client.prefs.randomize_appearance_for(user) user.randomise_appearance_for(user.gender)
user.regenerate_icons()
var/datum/role/vampire/V = isvampire(user) var/datum/role/vampire/V = isvampire(user)
if (V) if (V)
V.remove_blood(blood_cost) V.remove_blood(blood_cost)

View File

@@ -72,10 +72,10 @@
/datum/disease2/effect/hair/activate(var/mob/living/carbon/mob) /datum/disease2/effect/hair/activate(var/mob/living/carbon/mob)
if(istype(mob, /mob/living/carbon/human)) if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob var/mob/living/carbon/human/H = mob
if(H.species.name == "Human" && !(H.h_style == "Bald") && !(H.h_style == "Balding Hair")) if(H.species.name == "Human" && !(H.my_appearance.h_style == "Bald") && !(H.my_appearance.h_style == "Balding Hair"))
to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...</span>") to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...</span>")
spawn(50) spawn(50)
H.h_style = "Balding Hair" H.my_appearance.h_style = "Balding Hair"
H.update_hair() H.update_hair()
@@ -123,10 +123,10 @@
/datum/disease2/effect/beard/activate(var/mob/living/carbon/mob) /datum/disease2/effect/beard/activate(var/mob/living/carbon/mob)
if(istype(mob, /mob/living/carbon/human)) if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob var/mob/living/carbon/human/H = mob
if(H.species.name == "Human" && !(H.f_style == "Full Beard")) if(H.species.name == "Human" && !(H.my_appearance.f_style == "Full Beard"))
to_chat(H, "<span class='warning'>Your chin and neck itch!.</span>") to_chat(H, "<span class='warning'>Your chin and neck itch!.</span>")
spawn(50) spawn(50)
H.f_style = "Full Beard" H.my_appearance.f_style = "Full Beard"
H.update_hair() H.update_hair()

View File

@@ -151,14 +151,14 @@
if(istype(H)) if(istype(H))
if(H.species.name == "Human" && !(H.f_style == "Pompadour")) if(H.species.name == "Human" && !(H.my_appearance.f_style == "Pompadour"))
spawn(50) spawn(50)
H.h_style = "Pompadour" H.my_appearance.h_style = "Pompadour"
H.update_hair() H.update_hair()
if(H.species.name == "Human" && !(H.f_style == "Elvis Sideburns")) if(H.species.name == "Human" && !(H.my_appearance.f_style == "Elvis Sideburns"))
spawn(50) spawn(50)
H.f_style = "Elvis Sideburns" H.my_appearance.f_style = "Elvis Sideburns"
H.update_hair() H.update_hair()
/datum/disease2/effect/elvis/deactivate(var/mob/living/carbon/mob) /datum/disease2/effect/elvis/deactivate(var/mob/living/carbon/mob)
@@ -226,25 +226,25 @@ var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/mon
switch(hair_color) switch(hair_color)
if("pink") if("pink")
affected.b_hair = 153 affected.my_appearance.b_hair = 153
affected.g_hair = 102 affected.my_appearance.g_hair = 102
affected.r_hair = 255 affected.my_appearance.r_hair = 255
if("red") if("red")
affected.b_hair = 0 affected.my_appearance.b_hair = 0
affected.g_hair = 0 affected.my_appearance.g_hair = 0
affected.r_hair = 255 affected.my_appearance.r_hair = 255
if("green") if("green")
affected.b_hair = 0 affected.my_appearance.b_hair = 0
affected.g_hair = 255 affected.my_appearance.g_hair = 255
affected.r_hair = 0 affected.my_appearance.r_hair = 0
if("blue") if("blue")
affected.b_hair = 255 affected.my_appearance.b_hair = 255
affected.g_hair = 0 affected.my_appearance.g_hair = 0
affected.r_hair = 0 affected.my_appearance.r_hair = 0
if("purple") if("purple")
affected.b_hair = 102 affected.my_appearance.b_hair = 102
affected.g_hair = 0 affected.my_appearance.g_hair = 0
affected.r_hair = 102 affected.my_appearance.r_hair = 102
affected.update_hair() affected.update_hair()
triggered = 1 triggered = 1

View File

@@ -1674,6 +1674,7 @@
#include "code\modules\mob\living\carbon\complex\martian\life.dm" #include "code\modules\mob\living\carbon\complex\martian\life.dm"
#include "code\modules\mob\living\carbon\complex\martian\martian.dm" #include "code\modules\mob\living\carbon\complex\martian\martian.dm"
#include "code\modules\mob\living\carbon\complex\martian\update_icons.dm" #include "code\modules\mob\living\carbon\complex\martian\update_icons.dm"
#include "code\modules\mob\living\carbon\human\appearance.dm"
#include "code\modules\mob\living\carbon\human\combat.dm" #include "code\modules\mob\living\carbon\human\combat.dm"
#include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\death.dm"
#include "code\modules\mob\living\carbon\human\emote.dm" #include "code\modules\mob\living\carbon\human\emote.dm"