mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
|
||||
|
||||
194
code/modules/mob/new_player/sprite_accessories.dm
Normal file
194
code/modules/mob/new_player/sprite_accessories.dm
Normal 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???
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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 |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user