Hair and Facial Hair Overhaul:

○ Hairs are now defined in /datum classes located in the new file sprite_accessories.dm. Further explanation and documentation can be located in this file.
   ○ As a result of the above change, some new_player preferences code had be reworked. Savefile versions have also been updated, and a small conversion proc has been placed to prevent file corruption and mis-matched variable data.
   ○ The final result of all of these changes is a simpler, pain-free way to add in new hairs. It also makes the code much more readable.


Other stuff:
   ○ Three new hairstyles (mostly female), one new beard.
   ○ Updated the changelog.

Final bugfixes:

   ○ Fixed xray superpower preventing you from using any kind of HUD eyewear.
   ○ You can no longer strangle metroids - instead, attempting to strangle them will result in you "squeezing" them.



The new hair system, while thoroughly tested by myself, is very prone to bugs given its very prototype state. Any bugs are to be reported via Issues.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2444 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
vageyenaman@gmail.com
2011-10-29 17:06:37 +00:00
parent ee298cf27d
commit d93f83e593
11 changed files with 401 additions and 238 deletions

View File

@@ -18,43 +18,25 @@
// determine DNA fragment from hairstyle
// :wtc:
var/list/styles = list("bald", "hair_a", "hair_b", "hair_c", "hair_d", "hair_e", "hair_f", "hair_bedhead", "hair_dreads", "hair_vlong", "hair_jensen", "hair_skinhead" )
var/list/styles = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
var/hrange = round(4095 / styles.len)
var/style = styles.Find(character.hair_icon_state)
var/style = styles.Find(character.hair_style.type)
if(style)
hair = style * hrange + hrange - rand(1,hrange-1)
else
hair = 0
// Beard dna code - mostly copypasted from hair code to allow for more dynamic facial hair style additions
var/list/face_styles = list("bald", "facial_elvis", "facial_vandyke", "facial_neckbeard", "facial_chaplin", "facial_watson", "facial_abe", "facial_chin", "facial_hip", "facial_gt", "facial_hogan", "facial_selleck", "facial_fullbeard", "facial_longbeard", "facial_jensen" )
var/list/face_styles = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
var/f_hrange = round(4095 / face_styles.len)
var/f_style = face_styles.Find(character.face_icon_state)
var/f_style = face_styles.Find(character.facial_hair_style.type)
if(f_style)
beard = f_style * f_hrange + f_hrange - rand(1,f_hrange-1)
else
beard = 0
/* // Deprecated code -- Doohl
switch(character.face_icon_state)
if("bald") beard = rand(1,350)
if("facial_elvis") beard = rand(351,650)
if("facial_vandyke") beard = rand(651,950)
if("facial_neckbeard") beard = rand(951,1250)
if("facial_chaplin") beard = rand(1251,1550)
if("facial_watson") beard = rand(1551,1850)
if("facial_abe") beard = rand(1851,2150)
if("facial_chin") beard = rand(2151,2450)
if("facial_hip") beard = rand(2451,2750)
if("facial_gt") beard = rand(2751,3050)
if("facial_hogan") beard = rand(3051,3350)
if("facial_selleck") beard = rand(3351,3650)
if("facial_fullbeard") beard = rand(3651,3950)
if("facial_longbeard") beard = rand(3951,4095)
*/
temp = add_zero2(num2hex((character.r_hair),1), 3)
temp += add_zero2(num2hex((character.b_hair),1), 3)
temp += add_zero2(num2hex((character.g_hair),1), 3)

View File

@@ -10,10 +10,12 @@
var/g_hair = 0.0
var/b_hair = 0.0
var/h_style = "Short Hair"
var/datum/sprite_accessory/hair/hair_style
var/r_facial = 0.0
var/g_facial = 0.0
var/b_facial = 0.0
var/f_style = "Shaved"
var/datum/sprite_accessory/facial_hair/facial_hair_style
var/r_eyes = 0.0
var/g_eyes = 0.0
var/b_eyes = 0.0
@@ -1247,13 +1249,13 @@
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
var/icon/hair_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[hair_icon_state]_s")
var/icon/hair_l = new/icon("icon" = 'human_face.dmi', "icon_state" = "[hair_icon_state]_l")
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l")
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
var/icon/facial_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[face_icon_state]_s")
var/icon/facial_l = new/icon("icon" = 'human_face.dmi', "icon_state" = "[face_icon_state]_l")
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l")
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)

View File

@@ -805,26 +805,6 @@
sight |= SEE_OBJS
if (!druggy)
see_invisible = 0
else if(istype(glasses, /obj/item/clothing/glasses/hud/health))
if(client)
glasses:process_hud(src)
if (!druggy)
see_invisible = 0
else if(istype(glasses, /obj/item/clothing/glasses/hud/security))
if(client)
glasses:process_hud(src)
if (!druggy)
see_invisible = 0
else if(istype(glasses, /obj/item/clothing/glasses/sunglasses))
see_in_dark = 1
if(istype(glasses, /obj/item/clothing/glasses/sunglasses/sechud))
if(client)
if(glasses:hud)
glasses:hud:process_hud(src)
if (!druggy)
see_invisible = 0
else if(stat != 2)
sight &= ~SEE_TURFS
@@ -849,6 +829,29 @@
if(!head:up && tinted_weldhelh)
see_in_dark = 1
/* HUD shit goes here, as long as it doesn't modify src.sight flags */
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
if(istype(glasses, /obj/item/clothing/glasses/hud/health))
if(client)
glasses:process_hud(src)
if (!druggy)
see_invisible = 0
if(istype(glasses, /obj/item/clothing/glasses/hud/security))
if(client)
glasses:process_hud(src)
if (!druggy)
see_invisible = 0
if(istype(glasses, /obj/item/clothing/glasses/sunglasses))
see_in_dark = 1
if(istype(glasses, /obj/item/clothing/glasses/sunglasses/sechud))
if(client)
if(glasses:hud)
glasses:hud:process_hud(src)
if (!druggy)
see_invisible = 0
/*
if (istype(glasses, /obj/item/clothing/glasses))
sight = glasses.vision_flags

View File

@@ -146,6 +146,11 @@
assailant << "\blue You can't strangle [affecting] through their suit collar!"
return
*/
if(istype(affecting, /mob/living/carbon/metroid))
assailant << "\blue You squeeze [affecting], but nothing interesting happens."
return
for(var/mob/O in viewers(assailant, null))
O.show_message(text("\red [] has reinforced his grip on [] (now neck)!", assailant, affecting), 1)

View File

@@ -61,6 +61,7 @@ datum/preferences
//Hair type
h_style = "Short Hair"
datum/sprite_accessory/hair/hair_style
//Hair color
r_hair = 0
g_hair = 0
@@ -68,6 +69,7 @@ datum/preferences
//Face hair type
f_style = "Shaved"
datum/sprite_accessory/facial_hair/facial_hair_style
//Face hair color
r_facial = 0
g_facial = 0
@@ -102,6 +104,8 @@ datum/preferences
New()
hair_style = new/datum/sprite_accessory/hair/short
facial_hair_style = new/datum/sprite_accessory/facial_hair/shaved
randomize_name()
..()
@@ -427,17 +431,42 @@ datum/preferences
if(link_tags["h_style"])
switch(link_tags["h_style"])
if("random")
if(gender == FEMALE)
h_style = pickweight ( list ("Cut Hair" = 5, "Short Hair" = 5, "Long Hair" = 5, "Mohawk" = 5, "Balding" = 1, "Fag" = 5, "Bedhead" = 5, "Dreadlocks" = 5, "Bald" = 5))
else
h_style = pickweight ( list ("Cut Hair" = 5, "Short Hair" = 5, "Long Hair" = 5, "Mohawk" = 5, "Balding" = 5, "Fag" = 5, "Bedhead" = 5, "Dreadlocks" = 5, "Jensen Hair" = 5, "Skinhead" = 5, "Bald" = 5))
if("input")
var/new_style = input(user, "Please select hair style", "Character Generation") as null|anything in list( "Cut Hair", "Short Hair", "Long Hair", "Longer Hair", "Mohawk", "Balding", "Fag", "Bedhead", "Dreadlocks", "Jensen Hair", "Skinhead", "Bald" )
// New and improved hair selection code, by Doohl
if("random") // random hair selection
randomize_hair(gender) // call randomize_hair() proc with var/gender parameter
// see preferences_setup.dm for proc
if("input") // input hair selection
// Generate list of hairs via typesof()
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
// List of hair names
var/list/hairs = list()
// loop through potential hairs
for(var/x in all_hairs)
var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
hairs.Add(H.name) // add hair name to hairs
del(H) // delete the hair after it's all done
// prompt the user for a hair selection, the selection being anything in list hairs
var/new_style = input(user, "Select a hair style", "Character Generation") as null|anything in hairs
// if new style selected (not cancel)
if(new_style)
h_style = new_style
for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly.
var/datum/sprite_accessory/hair/H = new x // create new hair datum
if(H.name == new_style)
hair_style = H // assign the hair_style variable a new hair datum
break
else
del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry
if(link_tags["ooccolor"])
var/ooccolor = input(user, "Please select OOC colour.", "OOC colour") as color
@@ -446,15 +475,31 @@ datum/preferences
if(link_tags["f_style"])
switch(link_tags["f_style"])
// see above for commentation. This is just a slight modification of the hair code for facial hairs
if("random")
if(gender == FEMALE)
f_style = pickweight ( list("Watson" = 1, "Chaplin" = 1, "Selleck" = 1, "Full Beard" = 1, "Long Beard" = 1, "Neckbeard" = 1, "Van Dyke" = 1, "Elvis" = 1, "Abe" = 1, "Chinstrap" = 1, "Hipster" = 1, "Goatee" = 1, "Hogan" = 1, "Shaved" = 100))
else
f_style = pickweight ( list("Watson" = 1, "Chaplin" = 1, "Selleck" = 1, "Full Beard" = 1, "Long Beard" = 1, "Neckbeard" = 1, "Van Dyke" = 1, "Elvis" = 1, "Abe" = 1, "Chinstrap" = 1, "Hipster" = 1, "Goatee" = 1, "Hogan" = 1, "Jensen Goatee" = 1, "Shaved" = 10))
randomize_facial(gender)
if("input")
var/new_style = input(user, "Please select facial style", "Character Generation") as null|anything in list("Watson", "Chaplin", "Selleck", "Full Beard", "Long Beard", "Neckbeard", "Van Dyke", "Elvis", "Abe", "Chinstrap", "Hipster", "Goatee", "Jensen Goatee", "Hogan", "Shaved")
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
var/list/fhairs = list()
for(var/x in all_fhairs)
var/datum/sprite_accessory/facial_hair/H = new x
fhairs.Add(H.name)
del(H)
var/new_style = input(user, "Select a facial hair style", "Character Generation") as null|anything in fhairs
if(new_style)
f_style = new_style
for(var/x in all_fhairs)
var/datum/sprite_accessory/facial_hair/H = new x
if(H.name == new_style)
facial_hair_style = H
break
else
del(H)
if(link_tags["gender"])
if(gender == MALE)
@@ -568,63 +613,8 @@ datum/preferences
if(UI_NEW)
character.UI = 'screen1.dmi'
switch(h_style)
if("Short Hair")
character.hair_icon_state = "hair_a"
if("Long Hair")
character.hair_icon_state = "hair_b"
if("Cut Hair")
character.hair_icon_state = "hair_c"
if("Mohawk")
character.hair_icon_state = "hair_d"
if("Balding")
character.hair_icon_state = "hair_e"
if("Fag")
character.hair_icon_state = "hair_f"
if("Bedhead")
character.hair_icon_state = "hair_bedhead"
if("Dreadlocks")
character.hair_icon_state = "hair_dreads"
if("Longer Hair")
character.hair_icon_state = "hair_vlong"
if("Jensen Hair")
character.hair_icon_state = "hair_jensen"
if("Skinhead")
character.hair_icon_state = "hair_skinhead"
else
character.hair_icon_state = "bald"
switch(f_style)
if("Watson")
character.face_icon_state = "facial_watson"
if("Chaplin")
character.face_icon_state = "facial_chaplin"
if("Selleck")
character.face_icon_state = "facial_selleck"
if("Neckbeard")
character.face_icon_state = "facial_neckbeard"
if("Full Beard")
character.face_icon_state = "facial_fullbeard"
if("Long Beard")
character.face_icon_state = "facial_longbeard"
if("Van Dyke")
character.face_icon_state = "facial_vandyke"
if("Elvis")
character.face_icon_state = "facial_elvis"
if("Abe")
character.face_icon_state = "facial_abe"
if("Chinstrap")
character.face_icon_state = "facial_chin"
if("Hipster")
character.face_icon_state = "facial_hip"
if("Goatee")
character.face_icon_state = "facial_gt"
if("Hogan")
character.face_icon_state = "facial_hogan"
if("Jensen Goatee")
character.face_icon_state = "facial_jensen"
else
character.face_icon_state = "bald"
character.hair_style = hair_style
character.facial_hair_style = facial_hair_style
character.underwear = underwear == 1 ? pick(1,2,3,4,5) : 0

View File

@@ -25,67 +25,47 @@ datum/preferences
return
proc/randomize_hair(var/gender)
//Women are more likely to have longer hair.
var/temp = gender==FEMALE&&prob(80) ? pick(2,6,8,9) : rand(1,12)
switch(temp)
if(1)
h_style = "Short Hair"
if(2)
h_style = "Long Hair"
if(3)
h_style = "Cut Hair"
if(4)
h_style = "Mohawk"
if(5)
h_style = "Balding"
if(6)
h_style = "Fag"
if(7)
h_style = "Bedhead"
if(8)
h_style = "Dreadlocks"
if(9)
h_style = "Longer Hair"
if(10)
h_style = "Jensen Hair"
if(11)
h_style = "Skinhead"
else
h_style = "bald"
// Generate list of all possible hairs via typesof(), subtract the parent type however
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
// List of hair datums. Used in pick() to select random hair
var/list/hairs = list()
// Loop through potential hairs
for(var/x in all_hairs)
var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
if(gender == FEMALE && H.choose_female) // if female and hair is female-suitable, add to possible hairs
hairs.Add(H)
else if(gender != FEMALE && H.choose_male) // if male and hair is male-suitable, add to hairs
hairs.Add(H)
proc/randomize_facial()
var/temp = prob(50) ? 15 : rand(1,14)//50% of not having a beard. Otherwise get a random one.
switch(temp)
if(1)
f_style = "Watson"
if(2)
f_style = "Chaplin"
if(3)
f_style = "Selleck"
if(4)
f_style = "Neckbeard"
if(5)
f_style = "Full Beard"
if(6)
f_style = "Long Beard"
if(7)
f_style = "Van Dyke"
if(8)
f_style = "Elvis"
if(9)
f_style = "Abe"
if(10)
f_style = "Chinstrap"
if(11)
f_style = "Hipster"
if(12)
f_style = "Goatee"
if(13)
f_style = "Hogan"
if(14)
f_style = "Jensen Goatee"
else
f_style = "bald"
del(H) // delete if incompatible
if(hairs.len > 0) // if hairs could be generated
hair_style = pick(hairs) // assign random hair
h_style = hair_style.name
proc/randomize_facial() // uncommented, see randomize_hair() for commentation
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
var/list/fhairs = list()
for(var/x in all_fhairs)
var/datum/sprite_accessory/facial_hair/H = new x
if(gender == FEMALE && H.choose_female)
fhairs.Add(H)
else if(gender != FEMALE && H.choose_male)
fhairs.Add(H)
else
del(H)
if(fhairs.len > 0)
facial_hair_style = pick(fhairs)
f_style = facial_hair_style.name
proc/randomize_skin_tone()
var/tone
@@ -242,72 +222,15 @@ datum/preferences
var/icon/eyes_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "eyes_s")
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
var/h_style_r = null
switch(h_style)
if("Short Hair")
h_style_r = "hair_a"
if("Long Hair")
h_style_r = "hair_b"
if("Cut Hair")
h_style_r = "hair_c"
if("Mohawk")
h_style_r = "hair_d"
if("Balding")
h_style_r = "hair_e"
if("Fag")
h_style_r = "hair_f"
if("Bedhead")
h_style_r = "hair_bedhead"
if("Dreadlocks")
h_style_r = "hair_dreads"
if("Longer Hair")
h_style_r = "hair_vlong"
if("Jensen Hair")
h_style_r = "hair_jensen"
if("Skinhead")
h_style_r = "hair_skinhead"
else
h_style_r = "bald"
var/f_style_r = null
switch(f_style)
if ("Watson")
f_style_r = "facial_watson"
if ("Chaplin")
f_style_r = "facial_chaplin"
if ("Selleck")
f_style_r = "facial_selleck"
if ("Neckbeard")
f_style_r = "facial_neckbeard"
if ("Full Beard")
f_style_r = "facial_fullbeard"
if ("Long Beard")
f_style_r = "facial_longbeard"
if ("Van Dyke")
f_style_r = "facial_vandyke"
if ("Elvis")
f_style_r = "facial_elvis"
if ("Abe")
f_style_r = "facial_abe"
if ("Chinstrap")
f_style_r = "facial_chin"
if ("Hipster")
f_style_r = "facial_hip"
if ("Goatee")
f_style_r = "facial_gt"
if ("Hogan")
f_style_r = "facial_hogan"
if ("Jensen Goatee")
f_style_r = "facial_jensen"
else
f_style_r = "bald"
var/icon/hair_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[h_style_r]_s")
// Hair and facial hair, improved by Doohl
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
var/icon/facial_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "[f_style_r]_s")
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
var/icon/mouth_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "mouth_[g]_s")
eyes_s.Blend(hair_s, ICON_OVERLAY)
@@ -319,4 +242,24 @@ datum/preferences
del(mouth_s)
del(facial_s)
del(hair_s)
del(eyes_s)
del(eyes_s)
proc/style_to_datum()
// use h_style and f_style to load /datum hairs
// hairs
for(var/x in typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair)
var/datum/sprite_accessory/hair/H = new x
if(H.name == h_style)
hair_style = H
else
del(H)
// facial hairs
for(var/x in typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair)
var/datum/sprite_accessory/facial_hair/H = new x
if(H.name == f_style)
facial_hair_style = H
else
del(H)

View File

@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 3
#define SAVEFILE_VERSION_MAX 4
#define SAVEFILE_VERSION_MAX 5
datum/preferences/proc/savefile_path(mob/user)
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav"
@@ -104,6 +104,9 @@ datum/preferences/proc/savefile_load(mob/user)
F["UI"] >> src.UI
F["be_special"] >> src.be_special
if(version && version < 5)
convert_hairstyles_four() // convert version 4 hairstyles to version 5
if(version && (version >= SAVEFILE_VERSION_MAX))
F["job_civilian_high"] >> src.job_civilian_high
F["job_civilian_med"] >> src.job_civilian_med
@@ -118,7 +121,43 @@ datum/preferences/proc/savefile_load(mob/user)
F["job_engsec_low"] >> src.job_engsec_low
style_to_datum() // convert f_style and h_style to /datum
return 1
#undef SAVEFILE_VERSION_MAX
#undef SAVEFILE_VERSION_MIN
datum/preferences/proc/convert_hairstyles_four()
// convert hairstyle names from savefile version 4 to version 5.
switch(h_style)
if("Balding")
h_style = "Balding Hair"
if("Fag")
h_style = "Flow Hair"
if("Jensen Hair")
h_style = "Adam Jensen Hair"
switch(f_style)
if("Watson")
f_style = "Watson Mustache"
if("Chaplin")
f_style = "Square Mustache"
if("Selleck")
f_style = "Selleck Mustache"
if("Van Dyke")
f_style = "Van Dyke Mustache"
if("Elvis")
f_style = "Elvis Sideburns"
if("Abe")
f_style = "Abraham Lincoln Beard"
if("Hipster")
f_style = "Hipster Beard"
if("Hogan")
f_style = "Hulk Hogan Mustache"
if("Jensen Goatee")
f_style = "Adam Jensen Beard"

View File

@@ -0,0 +1,194 @@
/*
Hello and welcome to sprite_accessories: For sprite accessories, such as hair,
facial hair, and possibly tattoos and stuff somewhere along the line. This file is
intended to be friendly for people with little to no actual coding experience.
The process of adding in new hairstyles has been made pain-free and easy to do.
Enjoy! - Doohl
Notice: This all gets automatically compiled in a list in dna.dm, so you do not
have to define any UI values for sprite accessories manually for hair and facial
hair. Just add in new hair types and the game will naturally adapt.
!!WARNING!!: changing existing hair information can be VERY hazardous to savefiles,
to the point where you may completely corrupt a server's savefiles. Please refrain
from doing this unless you absolutely know what you are doing, and have defined a
conversion in savefile.dm
*/
/datum/sprite_accessory
var/icon // the icon file the accessory is located in
var/icon_state // the icon_state of the accessory
var/preview_state // a custom preview state for whatever reason
var/name // the preview name of the accessory
// Determines if the accessory will be skipped or included in random hair generations
var/choose_female = 1
var/choose_male = 1
/*
////////////////////////////
/ =--------------------= /
/ == Hair Definitions == /
/ =--------------------= /
////////////////////////////
*/
/datum/sprite_accessory/hair
icon = 'human_face.dmi' // default icon for all hairs
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
long
name = "Long Hair"
icon_state = "hair_b"
longer
name = "Longer Hair"
icon_state = "hair_vlong"
halfbang
name = "Half-banged Hair"
icon_state = "hair_halfbang"
kusangi
name = "Kusangi Hair"
icon_state = "hair_kusangi"
ponytail
name = "Ponytail"
icon_state = "hair_ponytail"
cut
name = "Cut Hair"
icon_state = "hair_c"
mohawk
name = "Mohawk"
icon_state = "hair_d"
choose_female = 0 // gross
balding
name = "Balding Hair"
icon_state = "hair_e"
choose_female = 0 // turnoff!
fag
name = "Flow Hair"
icon_state = "hair_f"
bedhead
name = "Bedhead"
icon_state = "hair_bedhead"
dreadlocks
name = "Dreadlocks"
icon_state = "hair_dreads"
choose_female = 0 // okay.jpg
jensen
name = "Adam Jensen Hair"
icon_state = "hair_jensen"
skinhead
name = "Skinhead"
icon_state = "hair_skinhead"
bald
name = "Bald"
icon_state = "bald"
choose_female = 0
/*
///////////////////////////////////
/ =---------------------------= /
/ == Facial Hair Definitions == /
/ =---------------------------= /
///////////////////////////////////
*/
/datum/sprite_accessory/facial_hair
icon = 'human_face.dmi'
choose_female = 0 // barf (unless you're a dorf, dorfs dig chix /w beards :P)
watson
name = "Watson Mustache"
icon_state = "facial_watson"
hogan
name = "Hulk Hogan Mustache"
icon_state = "facial_chaplin"
vandyke
name = "Van Dyke Mustache"
icon_state = "facial_vandyke"
chaplin
name = "Square Mustache"
icon_state = "facial_chaplin"
selleck
name = "Selleck Mustache"
icon_state = "facial_selleck"
neckbeard
name = "Neckbeard"
icon_state = "facial_neckbeard"
fullbeard
name = "Full Beard"
icon_state = "facial_fullbeard"
longbeard
name = "Long Beard"
icon_state = "facial_longbeard"
vlongbeard
name = "Very Long Beard"
icon_state = "facial_wise"
elvis
name = "Elvis Sideburns"
icon_state = "facial_elvis"
abe
name = "Abraham Lincoln Beard"
icon_state = "facial_abe"
chinstrap
name = "Chinstrap"
icon_state = "facial_chin"
hip
name = "Hipster Beard"
icon_state = "facial_hip"
gt
name = "Goatee"
icon_state = "facial_gt"
jensen
name = "Adam Jensen Beard"
icon_state = "facial_jensen"
shaved
name = "Shaved"
icon_state = "bald"
choose_female = 1 // shaved is the only facial hair on women because why would chicks have beards???

View File

@@ -61,9 +61,13 @@ should be listed in the changelog upon commit tho. Thanks. -->
<li>Stunglove overhaul: part one. Stun gloves are now made by wiring a pair of gloves, and then attaching a battery- this shows up on the object sprite, but not on your character. Stungloves use 2500 charge per stun! This means that some low capacity batteries will make <i>useless</i> stungloves. To get your old inconspicous gloves back, simply cut away the wire and battery. <b>Yet to come:</b> insulated gloves losing their insulative properties when wired, and stungloves taking extra damage from shocked doors.</li>
</ul>
</li>
<li><b>Doohl updated:</b>
<ul>
<li>More hairs added and a very long beard.</li>
</ul>
</li>
</ul>
<b><font color='blue'>27 October 2011</font><b>
<ul>
<li><b>Mport updated:</b>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -871,6 +871,7 @@
#include "code\modules\mob\new_player\preferences.dm"
#include "code\modules\mob\new_player\preferences_setup.dm"
#include "code\modules\mob\new_player\savefile.dm"
#include "code\modules\mob\new_player\sprite_accessories.dm"
#include "code\modules\mob\organ\organ.dm"
#include "code\modules\mob\organ\organ_external.dm"
#include "code\modules\mob\organ\organ_internal.dm"