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. -->
  • 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 useless stungloves. To get your old inconspicous gloves back, simply cut away the wire and battery. Yet to come: insulated gloves losing their insulative properties when wired, and stungloves taking extra damage from shocked doors.
  • +
  • Doohl updated: + +
  • - 27 October 2011