diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index b2dfae0544..0406099616 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -3,6 +3,7 @@ */ var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type +var/global/list/hair_accesories_list= list()// Stores /datum/sprite_accessory/hair_accessory indexed by type var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type var/global/list/wing_styles_list = list() // Stores /datum/sprite_accessory/wing indexed by type var/global/list/negative_traits = list() // Negative custom species traits, indexed by path @@ -451,6 +452,12 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, var/datum/sprite_accessory/wing/instance = new path() wing_styles_list[path] = instance + // Custom Hair Accessories + paths = typesof(/datum/sprite_accessory/hair_accessory) - /datum/sprite_accessory/hair_accessory + for(var/path in paths) + var/datum/sprite_accessory/hair_accessory/instance = new path() + hair_accesories_list[path] = instance + // Custom species traits paths = typesof(/datum/trait) - /datum/trait for(var/path in paths) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1176e870a6..f47566279a 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -78,21 +78,22 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define SUIT_STORE_LAYER 17 //Suit storage-slot item #define BACK_LAYER 18 //Back-slot item #define HAIR_LAYER 19 //The human's hair -#define EARS_LAYER 20 //Both ear-slot items (combined image) -#define EYES_LAYER 21 //Mob's eyes (used for glowing eyes) -#define FACEMASK_LAYER 22 //Mask-slot item -#define HEAD_LAYER 23 //Head-slot item -#define HANDCUFF_LAYER 24 //Handcuffs, if the human is handcuffed, in a secret inv slot -#define LEGCUFF_LAYER 25 //Same as handcuffs, for legcuffs -#define L_HAND_LAYER 26 //Left-hand item -#define R_HAND_LAYER 27 //Right-hand item -#define WING_LAYER 28 //VOREStation edit. Simply move this up a number if things are added. -#define TAIL_LAYER_ALT 29 //VOREStation edit. Simply move this up a number if things are added. -#define MODIFIER_EFFECTS_LAYER 30 //Effects drawn by modifiers -#define FIRE_LAYER 31 //'Mob on fire' overlay layer -#define WATER_LAYER 32 //'Mob submerged' overlay layer -#define TARGETED_LAYER 33 //'Aimed at' overlay layer -#define TOTAL_LAYERS 33 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +#define HAIR_ACCESSORY_LAYER 20 //VOREStation edit. Simply move this up a number if things are added. +#define EARS_LAYER 21 //Both ear-slot items (combined image) +#define EYES_LAYER 22 //Mob's eyes (used for glowing eyes) +#define FACEMASK_LAYER 23 //Mask-slot item +#define HEAD_LAYER 24 //Head-slot item +#define HANDCUFF_LAYER 25 //Handcuffs, if the human is handcuffed, in a secret inv slot +#define LEGCUFF_LAYER 26 //Same as handcuffs, for legcuffs +#define L_HAND_LAYER 27 //Left-hand item +#define R_HAND_LAYER 28 //Right-hand item +#define WING_LAYER 29 //VOREStation edit. Simply move this up a number if things are added. +#define TAIL_LAYER_ALT 30 //VOREStation edit. Simply move this up a number if things are added. +#define MODIFIER_EFFECTS_LAYER 31 //Effects drawn by modifiers +#define FIRE_LAYER 32 //'Mob on fire' overlay layer +#define WATER_LAYER 33 //'Mob submerged' overlay layer +#define TARGETED_LAYER 34 //'Aimed at' overlay layer +#define TOTAL_LAYERS 34 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. ////////////////////////////////// /mob/living/carbon/human @@ -407,6 +408,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //Reset our hair remove_layer(HAIR_LAYER) + remove_layer(HAIR_ACCESSORY_LAYER) //VOREStation Edit update_eyes() //Pirated out of here, for glowing eyes. var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD) @@ -464,10 +466,26 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(head_organ.transparent) //VOREStation Edit. For better slime limbs. face_standing += rgb(,,,120) - + overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER) apply_layer(HAIR_LAYER) + // VOREStation Edit - START + var/icon/hair_acc_s = get_hair_accessory_overlay() + var/image/hair_acc_s_image = null + if(hair_acc_s) + if(hair_accessory_style.ignores_lighting) + hair_acc_s_image = image(hair_acc_s) + hair_acc_s_image.plane = PLANE_LIGHTING_ABOVE + hair_acc_s_image.appearance_flags = appearance_flags + if (hair_acc_s_image) + overlays_standing[HAIR_ACCESSORY_LAYER] = hair_acc_s_image + apply_layer(HAIR_ACCESSORY_LAYER) + return + overlays_standing[HAIR_ACCESSORY_LAYER] = image(hair_acc_s, layer = BODY_LAYER+HAIR_ACCESSORY_LAYER) + apply_layer(HAIR_ACCESSORY_LAYER) + // VOREStation Edit - END + /mob/living/carbon/human/update_eyes() if(QDESTROYING(src)) return diff --git a/code/modules/vore/appearance/preferences_vr.dm b/code/modules/vore/appearance/preferences_vr.dm index e362f51b3e..5897cb2a48 100644 --- a/code/modules/vore/appearance/preferences_vr.dm +++ b/code/modules/vore/appearance/preferences_vr.dm @@ -10,6 +10,16 @@ /mob/living/carbon/human // Horray Furries! + var/datum/sprite_accessory/hair_accessory/hair_accessory_style = null + var/r_acc = 30 + var/g_acc = 30 + var/b_acc = 30 + var/r_acc2 = 30 + var/g_acc2 = 30 + var/b_acc2 = 30 + var/r_acc3 = 30 + var/g_acc3 = 30 + var/b_acc3 = 30 var/datum/sprite_accessory/ears/ear_style = null var/r_ears = 30 var/g_ears = 30 diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 2a2d7592d9..0bf9514763 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -2022,3 +2022,30 @@ icon_state = "xenotailalt_fullcolour" do_colouration = 1 color_blend_mode = ICON_MULTIPLY + +/* +//////////////////////////// +/ =--------------------= / +/ == Misc Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + +// Yes, I have to add all of this just to make some glowy hair. +// No, this isn't a character creation option, but... I guess in the future it could be, if anyone wants that? + +/datum/sprite_accessory/hair_accessory + name = "You should not see this..." + icon = 'icons/mob/vore/hair_accessories_vr.dmi' + do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color + + var/ignores_lighting = 0 // Whether or not this hair accessory will ignore lighting and glow in the dark. + var/color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + var/desc = "You should not see this..." + +/datum/sprite_accessory/hair_accessory/verie_hair_glow + name = "verie's hair glow" + desc = "" + icon_state = "verie_hair_glow" + ignores_lighting = 1 + //ckeys_allowed = list("vitoras") // This probably won't come into play EVER but better safe than sorry \ No newline at end of file diff --git a/code/modules/vore/appearance/update_icons_vr.dm b/code/modules/vore/appearance/update_icons_vr.dm index ab470c6af6..9185db35f3 100644 --- a/code/modules/vore/appearance/update_icons_vr.dm +++ b/code/modules/vore/appearance/update_icons_vr.dm @@ -20,6 +20,15 @@ var/global/list/wing_icon_cache = list() return ears_s return null +/mob/living/carbon/human/proc/get_hair_accessory_overlay() + if(hair_accessory_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) + var/icon/hair_acc_s = icon(hair_accessory_style.icon, hair_accessory_style.icon_state) + if(hair_accessory_style.do_colouration) + hair_acc_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), hair_accessory_style.color_blend_mode) + return hair_acc_s + return null + + /mob/living/carbon/human/proc/get_tail_image() //If you are FBP with tail style and didn't set a custom one var/datum/robolimb/model = isSynthetic() @@ -103,6 +112,7 @@ var/global/list/wing_icon_cache = list() return image(wing_s) + // TODO - Move this to where it should go ~Leshana /mob/proc/stop_flying() if(QDESTROYING(src)) diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index 328609cfed..9fde531d69 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -2240,3 +2240,50 @@ Departamental Swimsuits, for general use add_attack_logs(user, target, "Teleported [target] with via \the [src]'s [translocator]!") else ..() + +//Vitoras: Verie +/obj/item/clothing/suit/storage/hooded/fluff/verie + name = "distressingly cyan hoodie" + desc = "A cute, brightly colored hoodie perfect for occasional concealment of a verie silly nerd. A little tag inside \ + the collar bears only the letters \"VW.\"" + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "verie_hoodie" + + icon_override = 'icons/vore/custom_onmob_vr.dmi' + item_state = "verie_hoodie" + + hoodtype = /obj/item/clothing/head/hood/winter/fluff/verie + + var/owner = "vitoras" + +/obj/item/clothing/suit/storage/hooded/fluff/verie/ToggleHood() + // If you ain't the robutt, you probably don't have the hair style that the hooded icon states are made for. sorry! + var/mob/living/carbon/human/H = src.loc + if (H.ckey != owner) + to_chat(H, "Strange... the hood doesn't go over your head no matter how you try to put it up.") + return + ..() + +/obj/item/clothing/head/hood/winter/fluff/verie + name = "not-so-cyan hood" + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "verie_hood" + + icon_override = 'icons/vore/custom_onmob_vr.dmi' + item_state = "verie_hood" + +/obj/item/clothing/under/fluff/verie + name = "salaciously stylised suit" + desc = "It's kind of difficult to identify the type of material that makes up this form-fitting suit. It is stretchy and flexible, but \ + is firm in its toughness, and clings tightly to the skin. Come to think of it, it glistens quite a bit in the light and- \ + oh god it's latex.\ + \n... A Verie appropriate material choice indeed." //the wordplay never ends + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "veriesuit" + + icon_override = 'icons/vore/custom_onmob_vr.dmi' + item_state = "veriesuit" + + body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET|ARMS|HANDS + + diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index f76afcb2e0..3b71faa6ab 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1354,4 +1354,53 @@ /obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask/update_icon() ..() name = initial(name) - desc = initial(desc) \ No newline at end of file + desc = initial(desc) + +//Vitoras: Verie +/obj/item/weapon/fluff/verie + name = "glowy hairbrush" + desc = "A pulse of light periodically zips across the top of this blue brush. This... is not an ordinary hair care tool. \ + A small inscription can be seen in one side of the brush: \"THIS DEVICE IS ONLY COMPATIBLE WITH MODEL RI \ + POSITRONICS IN A MODEL E CHASSIS.\"" + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "verie_brush" + w_class = ITEMSIZE_TINY + + var/owner = "vitoras" + +/obj/item/weapon/fluff/verie/attack_self(mob/living/carbon/human/user) + if (istype(user)) + // It's only made for Verie's chassis silly! + if (user.ckey != owner) + to_chat(user, "The brush's teeth are far too rough to even comb your hair. Apparently, \ + this device was not made for people like you.") + return + + if (!user.hair_accessory_style) + var/datum/sprite_accessory/hair_accessory/verie_hair_glow/V = new(user) + user.hair_accessory_style = V + user.update_hair() + user.visible_message("[user] combs her hair. \The [src] leaves behind glowing cyan highlights as it passes through \ + her black strands.", \ + "You brush your hair. \The [src]'s teeth begin to vibrate and glow as they react to your nanites. \ + The teeth stimulate the nanites in your hair strands until your hair give off a brilliant, faintly pulsing \ + cyan glow!") + + else + user.visible_message("[user] combs her hair. \The [src] brushes away her glowing cyan highlights. Neat!", \ + "You brush your hair. \The [src]'s teeth wipe away the glowing streaks in your hair \ + like a sponge scrubbing away a stain.") + user.hair_accessory_style = null + for(var/datum/sprite_accessory/hair_accessory/verie_hair_glow/V in user) + to_chat(user, "found a V to delete!") + qdel(V) + user.update_hair() + + + else + to_chat(user, "\The [src] isn't compatible with your body as it is now.") + + + + + diff --git a/icons/mob/vore/hair_accessories_vr.dmi b/icons/mob/vore/hair_accessories_vr.dmi new file mode 100644 index 0000000000..4411f5c00c Binary files /dev/null and b/icons/mob/vore/hair_accessories_vr.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index e9b58a4c7f..3e3d53b3db 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 4856d6c311..10580ec71f 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/icons/vore/custom_onmob_vr.dmi b/icons/vore/custom_onmob_vr.dmi index 0c723da5e8..aaf141e83f 100644 Binary files a/icons/vore/custom_onmob_vr.dmi and b/icons/vore/custom_onmob_vr.dmi differ