diff --git a/code/game/dna.dm b/code/game/dna.dm index 9966c04d567..0ffd37f7925 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 7be092257a1..6454ca66718 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index dd8687ee03a..bf2ba2af520 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -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 diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 7c04f4dc305..9c404164ba6 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -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) diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 8f0f8228b8c..6c8b2c9a173 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -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 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 1b18fd93d55..db137f0a45f 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -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) \ No newline at end of file + 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) \ No newline at end of file diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index 1b6561052f0..a03d1b4ee57 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -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" + diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm new file mode 100644 index 00000000000..a563ee9a781 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -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??? + + + + + + diff --git a/html/changelog.html b/html/changelog.html index a8ed9d445a6..c0e559274c2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -61,9 +61,13 @@ should be listed in the changelog upon commit tho. Thanks. -->