Ports some Bay hair code

This commit is contained in:
Atermonera
2018-06-12 00:43:43 -07:00
committed by VirgoBot
parent d669d8a97f
commit 7cd1442e8f
5 changed files with 161 additions and 17 deletions

View File

@@ -219,3 +219,7 @@
#define SUIT_SENSOR_BINARY 1
#define SUIT_SENSOR_VITAL 2
#define SUIT_SENSOR_TRACKING 3
// Hair Defines
#define HAIR_VERY_SHORT 0x1
#define HAIR_TIEABLE 0x4

View File

@@ -1,6 +1,38 @@
// These should all be procs, you can add them to humans/subspecies by
// species.dm's inherent_verbs ~ Z
/mob/living/carbon/human/proc/tie_hair()
set name = "Tie Hair"
set desc = "Style your hair."
set category = "IC"
if(incapacitated())
to_chat(src, "<span class='warning'>You can't mess with your hair right now!</span>")
return
if(h_style)
var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style]
var/selected_string
if(!(hair_style.flags & HAIR_TIEABLE))
to_chat(src, "<span class ='warning'>Your hair isn't long enough to tie.</span>")
return
else
var/list/datum/sprite_accessory/hair/valid_hairstyles = list()
for(var/hair_string in hair_styles_list)
var/list/datum/sprite_accessory/hair/test = hair_styles_list[hair_string]
if(test.flags & HAIR_TIEABLE)
valid_hairstyles.Add(hair_string)
selected_string = input("Select a new hairstyle", "Your hairstyle", hair_style) as null|anything in valid_hairstyles
if(incapacitated())
to_chat(src, "<span class='warning'>You can't mess with your hair right now!</span>")
return
else if(selected_string && h_style != selected_string)
h_style = selected_string
regenerate_icons()
visible_message("<span class='notice'>[src] pauses a moment to style their hair.</span>")
else
to_chat(src, "<span class ='notice'>You're already using that style.</span>")
/mob/living/carbon/human/proc/tackle()
set category = "Abilities"
set name = "Tackle"

View File

@@ -23,6 +23,9 @@
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
inherent_verbs = list(
/mob/living/carbon/human/proc/tie_hair)
/datum/species/human/get_bodytype(var/mob/living/carbon/human/H)
return SPECIES_HUMAN

View File

@@ -47,60 +47,80 @@
icon = 'icons/mob/Human_face_m.dmi' // default icon for all hairs
var/icon_add = 'icons/mob/human_face.dmi'
var/flags
bald
name = "Bald"
icon_state = "bald"
gender = MALE
flags = HAIR_VERY_SHORT
species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_VOX)
short
name = "Short Hair" // try to capatilize the names please~
icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you
flags = HAIR_VERY_SHORT
short2
name = "Short Hair 2"
icon_state = "hair_shorthair3"
flags = HAIR_VERY_SHORT
short3
name = "Short Hair 3"
icon_state = "hair_shorthair4"
flags = HAIR_VERY_SHORT
twintail
name = "Twintail"
icon_state = "hair_twintail"
flags = HAIR_TIEABLE
cut
name = "Cut Hair"
icon_state = "hair_c"
flags = HAIR_VERY_SHORT
flair
name = "Flaired Hair"
icon_state = "hair_flair"
flags = HAIR_TIEABLE
long
name = "Shoulder-length Hair"
icon_state = "hair_b"
flags = HAIR_TIEABLE
/*longish
/*
longish
name = "Longer Hair"
icon_state = "hair_b2"*/
icon_state = "hair_b2"
flags = HAIR_TIEABLE
*/
longer
name = "Long Hair"
icon_state = "hair_vlong"
flags = HAIR_TIEABLE
longeralt2
name = "Long Hair Alt 2"
icon_state = "hair_longeralt2"
flags = HAIR_TIEABLE
longest
name = "Very Long Hair"
icon_state = "hair_longest"
flags = HAIR_TIEABLE
longfringe
name = "Long Fringe"
icon_state = "hair_longfringe"
flags = HAIR_TIEABLE
longestalt
name = "Longer Fringe"
icon_state = "hair_vlongfringe"
flags = HAIR_TIEABLE
halfbang
name = "Half-banged Hair"
@@ -113,57 +133,72 @@
ponytail1
name = "Ponytail 1"
icon_state = "hair_ponytail"
flags = HAIR_TIEABLE
ponytail2
name = "Ponytail 2"
icon_state = "hair_pa"
flags = HAIR_TIEABLE
ponytail3
name = "Ponytail 3"
icon_state = "hair_ponytail3"
flags = HAIR_TIEABLE
ponytail4
name = "Ponytail 4"
icon_state = "hair_ponytail4"
flags = HAIR_TIEABLE
ponytail5
name = "Ponytail 5"
icon_state = "hair_ponytail5"
flags = HAIR_TIEABLE
ponytail6
name = "Ponytail 6"
icon_state = "hair_ponytail6"
flags = HAIR_TIEABLE
fringetail
name = "Fringetail"
icon_state = "hair_fringetail"
flags = HAIR_TIEABLE
sideponytail
name = "Side Ponytail"
icon_state = "hair_stail"
flags = HAIR_TIEABLE
sideponytail4 //Not happy about this... but it's for the save files.
name = "Side Ponytail 2"
icon_state = "hair_ponytailf"
flags = HAIR_TIEABLE
sideponytail2
name = "One Shoulder"
icon_state = "hair_oneshoulder"
flags = HAIR_TIEABLE
sideponytail3
name = "Tress Shoulder"
icon_state = "hair_tressshoulder"
flags = HAIR_TIEABLE
spikyponytail
name = "Spiky Ponytail"
icon_state = "hair_spikyponytail"
flags = HAIR_TIEABLE
zieglertail
name = "Zieglertail"
icon_state = "hair_ziegler"
flags = HAIR_TIEABLE
wisp
name = "Wisp"
icon_state = "hair_wisp"
flags = HAIR_TIEABLE
parted
name = "Parted"
@@ -176,6 +211,7 @@
sleeze
name = "Sleeze"
icon_state = "hair_sleeze"
flags = HAIR_VERY_SHORT
quiff
name = "Quiff"
@@ -192,32 +228,39 @@
bedhead3
name = "Bedhead 3"
icon_state = "hair_bedheadv3"
flags = HAIR_TIEABLE
bedheadlong
name = "Bedhead Long"
icon_state = "hair_long_bedhead"
flags = HAIR_TIEABLE
beehive
name = "Beehive"
icon_state = "hair_beehive"
flags = HAIR_TIEABLE
beehive2
name = "Beehive 2"
icon_state = "hair_beehive2"
flags = HAIR_TIEABLE
bobcurl
name = "Bobcurl"
icon_state = "hair_bobcurl"
species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI)
flags = HAIR_TIEABLE
bob
name = "Bob"
icon_state = "hair_bobcut"
species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI)
flags = HAIR_TIEABLE
bobcutalt
name = "Chin Length Bob"
icon_state = "hair_bobcutalt"
flags = HAIR_TIEABLE
bun
name = "Bun"
@@ -238,15 +281,18 @@
buzz
name = "Buzzcut"
icon_state = "hair_buzzcut"
flags = HAIR_VERY_SHORT
species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI)
shavehair
name = "Shaved Hair"
icon_state = "hair_shaved"
flags = HAIR_VERY_SHORT
crew
name = "Crewcut"
icon_state = "hair_crewcut"
flags = HAIR_VERY_SHORT
combover
name = "Combover"
@@ -271,6 +317,7 @@
curls
name = "Curls"
icon_state = "hair_curls"
flags = HAIR_TIEABLE
afro
name = "Afro"
@@ -287,14 +334,17 @@
rows
name = "Rows"
icon_state = "hair_rows1"
flags = HAIR_VERY_SHORT
rows2
name = "Rows 2"
icon_state = "hair_rows2"
flags = HAIR_TIEABLE
sargeant
name = "Flat Top"
icon_state = "hair_sargeant"
flags = HAIR_VERY_SHORT
emo
name = "Emo"
@@ -307,10 +357,12 @@
longemo
name = "Long Emo"
icon_state = "hair_emolong"
flags = HAIR_TIEABLE
fringeemo
name = "Emo Fringe"
icon_state = "hair_emofringe"
flags = HAIR_TIEABLE
veryshortovereyealternate
name = "Overeye Very Short, Alternate"
@@ -327,6 +379,7 @@
longovereye
name = "Overeye Long"
icon_state = "hair_longovereye"
flags = HAIR_TIEABLE
flowhair
name = "Flow Hair"
@@ -335,6 +388,7 @@
feather
name = "Feather"
icon_state = "hair_feather"
flags = HAIR_TIEABLE
hitop
name = "Hitop"
@@ -356,6 +410,7 @@
gentle
name = "Gentle"
icon_state = "hair_gentle"
flags = HAIR_TIEABLE
spiky
name = "Spiky"
@@ -369,51 +424,63 @@
kagami
name = "Pigtails"
icon_state = "hair_kagami"
flags = HAIR_TIEABLE
himecut
name = "Hime Cut"
icon_state = "hair_himecut"
flags = HAIR_TIEABLE
shorthime
name = "Short Hime Cut"
icon_state = "hair_shorthime"
flags = HAIR_TIEABLE
grandebraid
name = "Grande Braid"
icon_state = "hair_grande"
flags = HAIR_TIEABLE
mbraid
name = "Medium Braid"
icon_state = "hair_shortbraid"
flags = HAIR_TIEABLE
braid2
name = "Long Braid"
icon_state = "hair_hbraid"
flags = HAIR_TIEABLE
braid
name = "Floorlength Braid"
icon_state = "hair_braid"
flags = HAIR_TIEABLE
odango
name = "Odango"
icon_state = "hair_odango"
flags = HAIR_TIEABLE
ombre
name = "Ombre"
icon_state = "hair_ombre"
flags = HAIR_TIEABLE
updo
name = "Updo"
icon_state = "hair_updo"
flags = HAIR_TIEABLE
skinhead
name = "Skinhead"
icon_state = "hair_skinhead"
flags = HAIR_VERY_SHORT
balding
name = "Balding Hair"
icon_state = "hair_e"
gender = MALE
flags = HAIR_VERY_SHORT
familyman
name = "The Family Man"
@@ -434,10 +501,13 @@
poofy
name = "Poofy"
icon_state = "hair_poofy"
flags = HAIR_TIEABLE
poofy2
name = "Poofy2"
icon_state = "hair_poofy2"
flags = HAIR_TIEABLE
crono
name = "Chrono"
icon_state = "hair_toriyama"
@@ -461,6 +531,7 @@
nitori
name = "Nitori"
icon_state = "hair_nitori"
flags = HAIR_TIEABLE
joestar
name = "Joestar"
@@ -469,6 +540,7 @@
volaju
name = "Volaju"
icon_state = "hair_volaju"
flags = HAIR_TIEABLE
eighties
name = "80's"
@@ -486,14 +558,6 @@
name = "Modern"
icon_state = "hair_modern"
bald
name = "Bald"
icon_state = "bald"
longeralt2
name = "Long Hair Alt 2"
icon_state = "hair_longeralt2"
shortbangs
name = "Short Bangs"
icon_state = "hair_shortbangs"
@@ -505,10 +569,12 @@
bun
name = "Casual Bun"
icon_state = "hair_bun"
flags = HAIR_TIEABLE
doublebun
name = "Double-Bun"
icon_state = "hair_doublebun"
flags = HAIR_TIEABLE
oxton
name = "Oxton"
@@ -518,93 +584,113 @@
name = "Low Fade"
icon_state = "hair_lowfade"
gender = MALE
flags = HAIR_VERY_SHORT
medfade
name = "Medium Fade"
icon_state = "hair_medfade"
flags = HAIR_VERY_SHORT
highfade
name = "High Fade"
icon_state = "hair_highfade"
gender = MALE
flags = HAIR_VERY_SHORT
baldfade
name = "Balding Fade"
icon_state = "hair_baldfade"
gender = MALE
flags = HAIR_VERY_SHORT
nofade
name = "Regulation Cut"
icon_state = "hair_nofade"
gender = MALE
flags = HAIR_VERY_SHORT
trimflat
name = "Trimmed Flat Top"
icon_state = "hair_trimflat"
gender = MALE
flags = HAIR_VERY_SHORT
trimmed
name = "Trimmed"
icon_state = "hair_trimmed"
gender = MALE
flags = HAIR_VERY_SHORT
tightbun
name = "Tight Bun"
icon_state = "hair_tightbun"
gender = FEMALE
flags = HAIR_VERY_SHORT | HAIR_TIEABLE
coffeehouse
name = "Coffee House Cut"
icon_state = "hair_coffeehouse"
gender = MALE
flags = HAIR_VERY_SHORT
undercut1
name = "Undercut"
icon_state = "hair_undercut1"
gender = MALE
flags = HAIR_VERY_SHORT
undercut2
name = "Undercut Swept Right"
icon_state = "hair_undercut2"
gender = MALE
flags = HAIR_VERY_SHORT
undercut3
name = "Undercut Swept Left"
icon_state = "hair_undercut3"
gender = MALE
flags = HAIR_VERY_SHORT
partfade
name = "Parted Fade"
icon_state = "hair_shavedpart"
gender = MALE
flags = HAIR_VERY_SHORT
hightight
name = "High and Tight"
icon_state = "hair_hightight"
flags = HAIR_VERY_SHORT
rowbun
name = "Row Bun"
icon_state = "hair_rowbun"
flags = HAIR_TIEABLE
rowdualbraid
name = "Row Dual Braid"
icon_state = "hair_rowdualtail"
flags = HAIR_TIEABLE
rowbraid
name = "Row Braid"
icon_state = "hair_rowbraid"
flags = HAIR_TIEABLE
regulationmohawk
name = "Regulation Mohawk"
icon_state = "hair_shavedmohawk"
flags = HAIR_VERY_SHORT
topknot
name = "Topknot"
icon_state = "hair_topknot"
flags = HAIR_TIEABLE
ronin
name = "Ronin"
icon_state = "hair_ronin"
flags = HAIR_TIEABLE
bowlcut2
name = "Bowl2"
@@ -613,18 +699,22 @@
thinning
name = "Thinning"
icon_state = "hair_thinning"
flags = HAIR_VERY_SHORT
thinningfront
name = "Thinning Front"
icon_state = "hair_thinningfront"
flags = HAIR_VERY_SHORT
thinningback
name = "Thinning Back"
icon_state = "hair_thinningrear"
flags = HAIR_VERY_SHORT
manbun
name = "Manbun"
icon_state = "hair_manbun"
flags = HAIR_TIEABLE
shy
name = "Shy"

View File

@@ -51,10 +51,10 @@ var/global/list/limb_icon_cache = list()
/obj/item/organ/external/head/get_icon()
..()
//The overlays are not drawn on the mob, they are used for if the head is removed and becomes an item
cut_overlays()
//Every 'addon' below requires information from species
if(!owner || !owner.species)
return
@@ -78,7 +78,7 @@ var/global/list/limb_icon_cache = list()
eyes_icon.Blend(rgb(owner.r_eyes, owner.g_eyes, owner.b_eyes), ICON_ADD)
add_overlay(eyes_icon)
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
//Lip color/icon
if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS)))
var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
@@ -94,27 +94,42 @@ var/global/list/limb_icon_cache = list()
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
overlays |= get_hair_icon()
return mob_icon
/obj/item/organ/external/head/proc/get_hair_icon()
var/image/res = image('icons/mob/human_face.dmi',"bald_s")
//Facial hair
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) 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")
if(facial_hair_style.do_colouration)
<<<<<<< HEAD
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_MULTIPLY) // VOREStation edit
add_overlay(facial_s)
=======
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
res.overlays |= facial_s
>>>>>>> e8020de... Merge pull request #5335 from Anewbe/hair_stealing
//Head hair
if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair/hair_style = hair_styles_list[owner.h_style]
var/style = owner.h_style
var/datum/sprite_accessory/hair/hair_style = hair_styles_list[style]
if(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR))
if(!(hair_style.flags & HAIR_VERY_SHORT))
hair_style = hair_styles_list["Short Hair"]
if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
var/icon/hair_s_add = new/icon("icon" = hair_style.icon_add, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3)
hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_MULTIPLY)
hair_s.Blend(hair_s_add, ICON_ADD)
add_overlay(hair_s)
res.overlays |= hair_s
return mob_icon
return res
/obj/item/organ/external/proc/get_icon(var/skeletal)