diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index eb18d09eb3..7dd229fb7c 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -2,6 +2,9 @@ * VOREStation global lists */ +var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type +var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type + //stores numeric player size options indexed by name var/global/list/player_sizes_list = list( "Macro" = RESIZE_HUGE, @@ -73,3 +76,20 @@ var/global/list/struggle_sounds = list( "Squish2" = 'sound/vore/squish2.ogg', "Squish3" = 'sound/vore/squish3.ogg', "Squish4" = 'sound/vore/squish4.ogg') + + +/hook/startup/proc/init_vore_datum_ref_lists() + var/paths + + // Custom Ears + paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears + for(var/path in paths) + var/obj/item/clothing/head/instance = new path() + ear_styles_list[path] = instance + + // Custom Tails + paths = typesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail - /datum/sprite_accessory/tail/taur + for(var/path in paths) + var/datum/sprite_accessory/tail/instance = new path() + tail_styles_list[path] = instance + return 1 // Hooks must return 1 diff --git a/code/modules/client/preference_setup/vore/01_ears.dm b/code/modules/client/preference_setup/vore/01_ears.dm new file mode 100644 index 0000000000..17d03232ff --- /dev/null +++ b/code/modules/client/preference_setup/vore/01_ears.dm @@ -0,0 +1,121 @@ +// Super Global Stuff +/datum/category_collection/player_setup_collection/proc/copy_to_mob(var/mob/living/carbon/human/C) + for(var/datum/category_group/player_setup_category/PS in categories) + PS.copy_to_mob(C) + +/datum/category_group/player_setup_category/proc/copy_to_mob(var/mob/living/carbon/human/C) + for(var/datum/category_item/player_setup_item/PI in items) + PI.copy_to_mob(C) + +/datum/category_item/player_setup_item/proc/copy_to_mob(var/mob/living/carbon/human/C) + return + +// Global stuff that will put us on the map +/datum/category_group/player_setup_category/vore + name = "VORE" + sort_order = 7 + category_item_type = /datum/category_item/player_setup_item/vore + +// Definition of the stuff for Ears +/datum/category_item/player_setup_item/vore/ears + name = "Ears" + sort_order = 1 + +/datum/category_item/player_setup_item/vore/ears/load_character(var/savefile/S) + S["ear_style"] >> pref.ear_style + S["tail_style"] >> pref.tail_style + S["r_tail"] >> pref.r_tail + S["g_tail"] >> pref.g_tail + S["b_tail"] >> pref.b_tail + +/datum/category_item/player_setup_item/vore/ears/save_character(var/savefile/S) + S["ear_style"] << pref.ear_style + S["tail_style"] << pref.tail_style + S["r_tail"] << pref.r_tail + S["g_tail"] << pref.g_tail + S["b_tail"] << pref.b_tail + +/datum/category_item/player_setup_item/vore/ears/sanitize_character() + pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail)) + pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail)) + pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail)) + if(pref.ear_style) + pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style)) + if(pref.tail_style) + pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style)) + +/datum/category_item/player_setup_item/vore/ears/copy_to_mob(var/mob/living/carbon/human/character) + character.ear_style = ear_styles_list[pref.ear_style] + character.tail_style = tail_styles_list[pref.tail_style] + character.r_tail = pref.r_tail + character.b_tail = pref.b_tail + character.g_tail = pref.g_tail + +/datum/category_item/player_setup_item/vore/ears/content(var/mob/user) + . += "

VORE Station Settings

" + + pref.update_preview_icon() + if(pref.preview_icon_front && pref.preview_icon_side) + user << browse_rsc(pref.preview_icon_front, "preview_icon.png") + user << browse_rsc(pref.preview_icon_side, "preview_icon2.png") + . += "Preview
" + . += "
" + + . += "Ears
" + . += " Style: [pref.ear_style ? "Custom" : "Normal"]
" + + . += "Tail
" + . += " Style: [pref.tail_style ? "Custom" : "Normal"]
" + if(tail_styles_list[pref.tail_style]) + var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style] + if (T.do_colouration) + . += "Change Color \ + \ + \ +
__
" + +/datum/category_item/player_setup_item/vore/ears/OnTopic(var/href,var/list/href_list, var/mob/user) + + if(href_list["ear_style"]) + // Construct the list of names allowed for this user. + var/list/pretty_ear_styles = list("Normal") + for(var/path in ear_styles_list) + var/datum/sprite_accessory/ears/instance = ear_styles_list[path] + if((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) + pretty_ear_styles[instance.name] = path + + // Present choice to user + var/selection = input(user, "Pick ears", "Character Preference") as null|anything in pretty_ear_styles + if(selection && selection != "Normal") + pref.ear_style = pretty_ear_styles[selection] + else + pref.ear_style = null + return TOPIC_REFRESH + + else if(href_list["tail_style"]) + // Construct the list of names allowed for this user. + var/list/pretty_tail_styles = list("Normal") + for(var/path in tail_styles_list) + var/datum/sprite_accessory/tail/instance = tail_styles_list[path] + if((!instance.ckeys_allowed) || (user.ckey in instance.ckeys_allowed)) + pretty_tail_styles[instance.name] = path + + // Present choice to user + var/selection = input(user, "Pick tails", "Character Preference") as null|anything in pretty_tail_styles + if(selection && selection != "Normal") + pref.tail_style = pretty_tail_styles[selection] + else + pref.tail_style = null + return TOPIC_REFRESH + + else if(href_list["tail_color"]) + var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference", + rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null + if(new_tailc) + pref.r_tail = hex2num(copytext(new_tailc, 2, 4)) + pref.g_tail = hex2num(copytext(new_tailc, 4, 6)) + pref.b_tail = hex2num(copytext(new_tailc, 6, 8)) + return TOPIC_REFRESH + return ..() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e6627cc39d..a9f52a0d2b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -256,6 +256,11 @@ datum/preferences /datum/preferences/proc/copy_to(mob/living/carbon/human/character, safety = 0) // Sanitizing rather than saving as someone might still be editing when copy_to occurs. player_setup.sanitize_setup() + + // VOREStation Edit - Start + player_setup.copy_to_mob(character) + // VOREStation Edit - End + if(be_random_name) real_name = random_name(identifying_gender,species) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b073f8ccf6..22329cf2be 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -373,6 +373,12 @@ var/global/list/damage_icon_parts = list() face_standing.Blend(hair_s, ICON_OVERLAY) + // VOREStation Edit - START + var/icon/ears_s = get_ears_overlay() + if (ears_s) + face_standing.Blend(ears_s, ICON_OVERLAY) + // VOREStation Edit - END + overlays_standing[HAIR_LAYER] = image(face_standing) if(update_icons) update_icons() @@ -963,6 +969,14 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) overlays_standing[TAIL_LAYER] = null + // VOREStation Edit - START + overlays_standing[TAIL_LAYER] = get_tail_image() + if(overlays_standing[TAIL_LAYER]) + if(update_icons) + update_icons() + return + // VOREStation Edit - END + if(species.tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) var/icon/tail_s = get_tail_icon() overlays_standing[TAIL_LAYER] = image(tail_s, icon_state = "[species.tail]_s") diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 16ae76dbbb..3db8be967a 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -246,9 +246,31 @@ limb_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) preview_icon.Blend(limb_icon, ICON_OVERLAY) - //Tail - if(current_species && (current_species.tail)) - var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") + //Tails + + // VoreStation Edit - Start + var/show_species_tail = 1 + if(src.tail_style && tail_styles_list[src.tail_style]) + var/datum/sprite_accessory/tail/tail_meta = tail_styles_list[src.tail_style] + var/icon/tail_s = new/icon("icon" = tail_meta.icon, "icon_state" = tail_meta.icon_state) + if(tail_meta.do_colouration) + tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_meta.do_colouration) + if(tail_meta.extra_overlay) + var/icon/overlay = new/icon("icon" = tail_meta.icon, "icon_state" = tail_meta.extra_overlay) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + + show_species_tail = tail_meta.show_species_tail + if(istype(tail_meta, /datum/sprite_accessory/tail/taur)) + preview_icon.Blend(tail_s, ICON_OVERLAY, -16) + else + preview_icon.Blend(tail_s, ICON_OVERLAY) + // VoreStation Edit - End + + if(show_species_tail && current_species && (current_species.tail)) + var/icon/temp = new/icon( + "icon" = (current_species.icobase_tail ? current_species.icobase : 'icons/effects/species.dmi'), + "icon_state" = "[current_species.tail]_s") if(current_species && (current_species.appearance_flags & HAS_SKIN_COLOR)) temp.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) if(current_species && (current_species.appearance_flags & HAS_SKIN_TONE)) @@ -284,6 +306,19 @@ facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) eyes_s.Blend(facial_s, ICON_OVERLAY) + // VoreStation Edit - Start + // Ear Items + var/datum/sprite_accessory/ears/ears_meta = ear_styles_list[src.ear_style] + if(ears_meta) + var/icon/ears_s = icon("icon" = ears_meta.icon, "icon_state" = ears_meta.icon_state) + if(ears_meta.do_colouration) + ears_s.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), ears_meta.do_colouration) + if(ears_meta.extra_overlay) + var/icon/overlay = new/icon("icon" = ears_meta.icon, "icon_state" = ears_meta.extra_overlay) + ears_s.Blend(overlay, ICON_OVERLAY) + eyes_s.Blend(ears_s, ICON_OVERLAY) + // Vore Station Edit - End + var/icon/underwear_top_s = null if(underwear_top && current_species.appearance_flags & HAS_UNDERWEAR) underwear_top_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear_top) diff --git a/code/modules/vore/appearance/preferences_vr.dm b/code/modules/vore/appearance/preferences_vr.dm new file mode 100644 index 0000000000..2fad10109f --- /dev/null +++ b/code/modules/vore/appearance/preferences_vr.dm @@ -0,0 +1,25 @@ +/** + * Additional variables that must be defined on /mob/living/carbon/human + * for use in code that is part of the vore modules. + * + * These variables are declared here (separately from the normal human_defines.dm) + * in order to isolate VOREStation changes and ease merging of other codebases. + */ + +// Additional vars +/mob/living/carbon/human + + // Horray Furries! + var/datum/sprite_accessory/ears/ear_style = null + var/datum/sprite_accessory/tail/tail_style = null + var/r_tail = 30 + var/g_tail = 30 + var/b_tail = 30 + +/datum/preferences + // Appearance + var/ear_style // Type of selected ear style + var/tail_style // Type of selected tail style + var/r_tail = 30 // Tail/Taur color + var/g_tail = 30 // Tail/Taur color + var/b_tail = 30 // Tail/Taur color diff --git a/code/modules/vore/appearance/spider_taur_powers_vr.dm b/code/modules/vore/appearance/spider_taur_powers_vr.dm new file mode 100644 index 0000000000..e90003b3cd --- /dev/null +++ b/code/modules/vore/appearance/spider_taur_powers_vr.dm @@ -0,0 +1,44 @@ +// --------------------------------------------- +// -!-!-!-!-!-!-!-!- READ ME -!-!-!-!-!-!-!-!-!- +// --------------------------------------------- + +//Beep beep hello +// +//Use this file to define the exclusive abilities of the spidertaur folk +// +//ahuhuhuhu +//-Antsnap + +obj/item/clothing/suit/web_bindings + icon = 'icons/obj/clothing/suits.dmi' + name = "web bindings" + desc = "A webbed cocoon that completely restrains the wearer." + icon_state = "web_bindings" + item_state = "web_bindings" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL + +/* //Commenting all this out, as people keep abusing it. Sorry! +mob/proc/weaveWeb() + set name = "Weave Web" + set category = "Species Powers" + if(nutrition >= 500) //People decided to abuse it. Sorry. It was asked to be made so it couldn't be spammed, and what do ya know, people are spamming it everywhere. + src.visible_message("\blue \the [src] weaves a web from their spinneret silk.") + nutrition -= 500 + spawn(30) //3 seconds to form + new /obj/effect/spider/stickyweb(src.loc) + else + src << "You do not have enough nutrition to create webbing!" +*/ + +mob/proc/weaveWebBindings() + set name = "Weave Web Bindings" + set category = "Species Powers" + if(nutrition >= 30) //This isn't a huge problem. This is so you can bind people up. + src.visible_message("\blue \the [src] pulls silk from their spinneret and delicately weaves it into bindings.") + nutrition -= 30 + spawn(30) //5 seconds to weave the bindings~ + var/obj/item/clothing/suit/web_bindings/bindings = new() //This sprite is amazing, I must say. + src.put_in_hands(bindings) + else + src << "You do not have enough nutrition to create webbing!" //CK~ diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm new file mode 100644 index 0000000000..60d6c9dcb6 --- /dev/null +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -0,0 +1,490 @@ +/* + Hello and welcome to VOREStation sprite_accessories: For a more general overview + please read sprite_accessories.dm. This file is for ears, tails, and taur bodies! + + This is intended to be friendly for people with little to no actual coding experience. + + !!WARNING!!: changing existing accessory 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 +*/ + +// Add Additional variable onto sprite_accessory +/datum/sprite_accessory + // Ckey of person allowed to use this, if defined. + var/list/ckeys_allowed = null + +/* +//////////////////////////// +/ =--------------------= / +/ == Ear Definitions == / +/ =--------------------= / +//////////////////////////// +*/ +/datum/sprite_accessory/ears + name = "You should not see this..." + icon = 'icons/mob/vore/ears_vr.dmi' + do_colouration = 0 //Set to ICON_MULTIPLY or ICON_ADD to convert greyscale to the haircolor + + var/extra_overlay // Icon state of an additional overlay to blend in. + var/desc = "You should not see this..." + +// Ears avaliable to anyone + +/datum/sprite_accessory/ears/squirrel_orange + name = "squirel, orange" + desc = "" + icon_state = "squirrel-orange" + +/datum/sprite_accessory/ears/squirrel_red + name = "squirrel, red" + desc = "" + icon_state = "squirrel-red" + +/datum/sprite_accessory/ears/squirrel + name = "squirrel, hair-colored" + desc = "" + icon_state = "squirrel" + do_colouration = ICON_ADD + +/datum/sprite_accessory/ears/kitty + name = "kitty, hair-colored" + desc = "" + icon_state = "kitty" + do_colouration = ICON_ADD + extra_overlay = "kittyinner" + +/datum/sprite_accessory/ears/bunny + name = "bunny, hair-colored" + desc = "" + icon_state = "bunny" + do_colouration = ICON_ADD + +/datum/sprite_accessory/ears/bunny_white + name = "bunny, white" + desc = "" + icon_state = "bunny" + +/datum/sprite_accessory/ears/bear_brown + name = "bear, brown" + desc = "" + icon_state = "bear-brown" + +/datum/sprite_accessory/ears/bear + name = "bear, hair-colored" + desc = "" + icon_state = "bear" + do_colouration = ICON_ADD + +/datum/sprite_accessory/ears/wolf_grey + name = "wolf, grey" + desc = "" + icon_state = "wolf-grey" + +/datum/sprite_accessory/ears/wolf_green + name = "wolf, green" + desc = "" + icon_state = "wolf-green" + +/datum/sprite_accessory/ears/wisewolf + name = "wolf, wise" + desc = "" + icon_state = "wolf-wise" + +/datum/sprite_accessory/ears/wolf + name = "wolf, hair-colored" + desc = "" + icon_state = "wolf" + do_colouration = ICON_ADD + extra_overlay = "wolfinner" + +/datum/sprite_accessory/ears/mouse_grey + name = "mouse, grey" + desc = "" + icon_state = "mouse-grey" + +/datum/sprite_accessory/ears/mouse + name = "mouse, hair-colored" + desc = "" + icon_state = "mouse" + do_colouration = ICON_ADD + extra_overlay = "mouseinner" + +/datum/sprite_accessory/ears/bee + name = "bee antennae" + desc = "" + icon_state = "bee" + +/datum/sprite_accessory/ears/oni_h1 + name = "oni horns" + desc = "" + icon_state = "oni-h1" + +/datum/sprite_accessory/ears/demon_horns1 + name = "demon horns" + desc = "" + icon_state = "demon-horns1" + +// Special snowflake ears go below here. + +/datum/sprite_accessory/ears/molenar_kitsune + name = "quintail kitsune ears (Molenar)" + desc = "" + icon_state = "molenar-kitsune" + ckeys_allowed = list("molenar") + +/datum/sprite_accessory/ears/molenar_deathclaw + name = "deathclaw ears (Molenar)" + desc = "" + icon_state = "molenar-deathclaw" + ckeys_allowed = list("molenar") + +/datum/sprite_accessory/ears/runac + name = "fennecsune ears (Runac)" + desc = "" + icon_state = "runac" + ckeys_allowed = list("rebcom1807") + +/datum/sprite_accessory/ears/kerena + name = "wingwolf ears (Kerena)" + desc = "" + icon_state = "kerena" + ckeys_allowed = list("somekindofpony") + +/datum/sprite_accessory/ears/rosey + name = "tritail kitsune ears (Rosey)" + desc = "" + icon_state = "rosey" + ckeys_allowed = list("joey4298") + +/datum/sprite_accessory/ears/aronai + name = "aronai ears/head (Aronai)" + desc = "" + icon_state = "aronai" + ckeys_allowed = list("arokha") + +/* +//////////////////////////// +/ =--------------------= / +/ == Tail Definitions == / +/ =--------------------= / +//////////////////////////// +*/ +/datum/sprite_accessory/tail + name = "You should not see this..." + icon = 'icons/mob/vore/tails_vr.dmi' + do_colouration = 0 //Set to ICON_MULTIPLY or ICON_ADD to convert greyscale to the haircolor + + var/extra_overlay // Icon state of an additional overlay to blend in. + var/show_species_tail = 0 // If false, do not render species' tail. + var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it + var/desc = "You should not see this..." + +/datum/sprite_accessory/tail/invisible + name = "hide species-sprite tail" + icon = null + icon_state = null + +/datum/sprite_accessory/tail/squirrel_orange + name = "squirel, orange" + desc = "" + icon_state = "squirrel-orange" + +/datum/sprite_accessory/tail/squirrel_red + name = "squirrel, red" + desc = "" + icon_state = "squirrel-red" + +/datum/sprite_accessory/tail/squirrel + name = "squirrel, hair-colored" + desc = "" + icon_state = "squirrel" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/kitty + name = "kitty, hair-colored, downwards" + desc = "" + icon_state = "kittydown" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/kittyup + name = "kitty, hair-colored, upwards" + desc = "" + icon_state = "kittyup" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/tiger_white + name = "tiger, hair-colored, white stripes" + desc = "" + icon_state = "tiger" + do_colouration = ICON_ADD + extra_overlay = "tigerinnerwhite" + +/datum/sprite_accessory/tail/tiger_black + name = "tiger, hair-colored, black stripes" + desc = "" + icon_state = "tiger" + do_colouration = ICON_ADD + extra_overlay = "tigerinnerblack" + +/datum/sprite_accessory/tail/stripey + name = "stripey taj, hair-colored" + desc = "" + icon_state = "stripeytail" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/stripeytail_brown + name = "stripey taj, brown" + desc = "" + icon_state = "stripeytail-brown" + +/datum/sprite_accessory/tail/bunny + name = "bunny, hair-colored" + desc = "" + icon_state = "bunny" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/bear_brown + name = "bear, brown" + desc = "" + icon_state = "bear-brown" + +/datum/sprite_accessory/tail/bear + name = "bear, hair-colored" + desc = "" + icon_state = "bear" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/wolf_grey + name = "wolf, grey" + desc = "" + icon_state = "wolf-grey" + +/datum/sprite_accessory/tail/wolf_green + name = "wolf, green" + desc = "" + icon_state = "wolf-green" + +/datum/sprite_accessory/tail/wisewolf + name = "wolf, wise" + desc = "" + icon_state = "wolf-wise" + +/datum/sprite_accessory/tail/blackwolf + name = "wolf, black" + desc = "" + icon_state = "wolf" + +/datum/sprite_accessory/tail/wolf + name = "wolf, hair-colored" + desc = "" + icon_state = "wolf" + do_colouration = ICON_ADD + extra_overlay = "wolfinner" + +/datum/sprite_accessory/tail/mouse_grey + name = "mouse, grey" + desc = "" + icon_state = "mouse-grey" + +/datum/sprite_accessory/tail/crossfox + name = "cross fox" + desc = "" + icon_state = "crossfox" + +/datum/sprite_accessory/tail/mouse + name = "mouse, hair-colored" + desc = "" + icon_state = "mouse" + do_colouration = ICON_ADD + extra_overlay = "mouseinner" + +/datum/sprite_accessory/tail/bee + name = "bee thorax (+wings)" + desc = "" + icon_state = "bee" + +/datum/sprite_accessory/tail/succubus_purple + name = "succubus, purple (+wings)" + desc = "" + icon_state = "succubus-purple" + +/datum/sprite_accessory/tail/succubus_red + name = "succubus, red (+wings)" + desc = "" + icon_state = "succubus-red" + +/datum/sprite_accessory/tail/succubus_black + name = "succubus, black (+wings)" + desc = "" + icon_state = "succubus-black" + +/datum/sprite_accessory/tail/bat_black + name = "bat wings, black" + desc = "" + icon_state = "bat-black" + show_species_tail = 1 + +/datum/sprite_accessory/tail/bat_red + name = "bat wings, red" + desc = "" + icon_state = "bat-red" + show_species_tail = 1 + +/datum/sprite_accessory/tail/snag + name = "xenomorph tail w/ backplate" + desc = "" + icon_state = "snag" + +/datum/sprite_accessory/tail/xenotail + name = "xenomorph tail" + desc = "" + icon_state = "xenotail" + +/datum/sprite_accessory/tail/molenar_kitsune + name = "quintail kitsune tails (Molenar)" + desc = "" + icon_state = "molenar-kitsune" + ckeys_allowed = list("molenar") + +/datum/sprite_accessory/tail/molenar_deathclaw + name = "deathclaw bits (Molenar)" + desc = "" + icon_state = "molenar-deathclaw" + ckeys_allowed = list("molenar","jertheace") + +/datum/sprite_accessory/tail/runac + name = "fennecsune tails (Runac)" + desc = "" + icon_state = "runac" + ckeys_allowed = list("rebcom1807") + +/datum/sprite_accessory/tail/kerena + name = "wingwolf tail (+wings) (Kerena)" + desc = "" + icon_state = "kerena" + ckeys_allowed = list("somekindofpony") + +/datum/sprite_accessory/tail/rosey + name = "tritail kitsune tails (Rosey)" + desc = "" + icon_state = "rosey" + ckeys_allowed = list("joey4298") + +/datum/sprite_accessory/tail/scree + name = "green taj tail (+wings) (Scree)" + desc = "" + icon_state = "scree" + ckeys_allowed = list("scree") + +/datum/sprite_accessory/tail/aronai + name = "aronai tail (Aronai)" + desc = "" + icon_state = "aronai" + ckeys_allowed = list("arokha") + +/datum/sprite_accessory/tail/feathered + name = "feathered wings" + desc = "" + icon_state = "feathered" + +// TODO - Leshana - What is this? +/datum/sprite_accessory/tail/special + name = "Blank tail. Do not select." + icon = 'icons/effects/species.dmi' + +/datum/sprite_accessory/tail/special/unathi + name = "unathi tail" + desc = "" + icon_state = "sogtail_s" + +/datum/sprite_accessory/tail/special/tajaran + name = "tajaran tail" + desc = "" + icon_state = "tajtail_s" + +/datum/sprite_accessory/tail/special/sergal + name = "sergal tail" + desc = "" + icon_state = "sergtail_s" + +/datum/sprite_accessory/tail/special/akula + name = "akula tail" + desc = "" + icon_state = "sharktail_s" + +/datum/sprite_accessory/tail/special/nevrean + name = "nevrean tail" + desc = "" + icon_state = "nevrean_s" + +/datum/sprite_accessory/tail/special/unathihc + name = "unathi tail, hair colored" + desc = "" + icon_state = "sogtail_s" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/special/tajaranhc + name = "tajaran tail, hair colored" + desc = "" + icon_state = "tajtail_s" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/special/sergalhc + name = "sergal tail, hair colored" + desc = "" + icon_state = "sergtail_s" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/special/akulahc + name = "akula tail, hair colored" + desc = "" + icon_state = "sharktail_s" + do_colouration = ICON_ADD + +/datum/sprite_accessory/tail/special/nevreanhc + name = "nevrean tail, hair colored" + desc = "" + icon_state = "nevrean_s" + do_colouration = ICON_ADD + + +/* +//////////////////////////// +/ =--------------------= / +/ == Taur Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + +// Taur sprites are now a subtype of tail since they are mutually exclusive anyway. + +/datum/sprite_accessory/tail/taur + name = "You should not see this..." + icon = 'icons/mob/vore/taurs_vr.dmi' + do_colouration = ICON_MULTIPLY // In fact, it should use tail color! + +/datum/sprite_accessory/tail/taur/wolf + name = "Wolf" + icon_state = "wolf_s" + +/datum/sprite_accessory/tail/taur/naga + name = "Naga" + icon_state = "naga_s" + +/datum/sprite_accessory/tail/taur/horse + name = "Horse" + icon_state = "horse_s" + +/datum/sprite_accessory/tail/taur/cow + name = "Cow" + icon_state = "cow_s" + +/datum/sprite_accessory/tail/taur/lizard + name = "Lizard" + icon_state = "lizard_s" + +/datum/sprite_accessory/tail/taur/spider + name = "Spider" + icon_state = "spider_s" diff --git a/code/modules/vore/appearance/update_icons_vr.dm b/code/modules/vore/appearance/update_icons_vr.dm new file mode 100644 index 0000000000..9b263ba3c5 --- /dev/null +++ b/code/modules/vore/appearance/update_icons_vr.dm @@ -0,0 +1,30 @@ + +#define isTaurTail(A) istype(A, /datum/sprite_accessory/tail/taur) + +/mob/living/carbon/human/proc/get_ears_overlay() + if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR)) && (src.species.get_bodytype() in ear_style.species_allowed)) + var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state) + if(ear_style.do_colouration) + ears_s.Blend(rgb(src.r_hair, src.g_hair, src.b_hair), ear_style.do_colouration) + if(ear_style.extra_overlay) + var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay) + ears_s.Blend(overlay, ICON_OVERLAY) + return ears_s + return null + + +/mob/living/carbon/human/proc/get_tail_image() + if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !isTaurTail(tail_style))) + var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.icon_state) + if(tail_style.do_colouration) + tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.do_colouration) + if(tail_style.extra_overlay) + var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay) + tail_s.Blend(overlay, ICON_OVERLAY) + qdel(overlay) + + if(isTaurTail(tail_style)) + return image(tail_s, "pixel_x" = -16) + else + return image(tail_s) + return null diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 2b0f231067..9655113b5e 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -120,4 +120,4 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE S["weight_gain"] << weight_gain S["weight_loss"] << weight_loss - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index c81051a3f8..3d1262ab73 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -110,7 +110,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 now_pushing = 0 if(src.get_effective_size() > tmob.get_effective_size()) var/mob/living/carbon/human/M = src - if(0) // POLARISTODO istaur(src) && M.taur_style == 2) + if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) src << "You carefully slither around [tmob]." tmob << "[src]'s huge tail slithers past beside you!" else @@ -118,7 +118,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 tmob << "[src] steps over you carefully!" if(tmob.get_effective_size() > src.get_effective_size()) var/mob/living/carbon/human/M = tmob - if(0) // POLARISTODO istaur(src) && M.taur == 2) + if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) src << "You jump over [tmob]'s thick tail." tmob << "[src] bounds over your tail." else @@ -144,7 +144,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 tmob.Stun(4) var/mob/living/carbon/human/M = src - if(0) // POLARISTODO istaur(src) && M.taur_style == 2) + if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) src << "You carefully squish [tmob] under your tail!" tmob << "[src] pins you under their tail!" else @@ -159,7 +159,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 tmob.apply_damage(10, HALLOSS) var/mob/living/carbon/human/M = src - if(0) // POLARISTODO istaur(src) && M.taur_style == 2) + if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) src << "You steamroller over [tmob] with your heavy tail!" tmob << "[src] ploughs you down mercilessly with their heavy tail!" else @@ -176,13 +176,13 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 if(istype(M) && !M.shoes) // User is a human (capable of scooping) and not wearing shoes! Scoop into foot slot! equip_to_slot_if_possible(tmob.get_scooped(M), slot_shoes, 0, 1) - if(0) // POLARISTODO M.taur == 2) + if(istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) src << "You wrap up [tmob] with your powerful tail!" tmob << "[src] binds you with their powerful tail!" else src << "You clench your toes around [tmob]'s body!" tmob << "[src] grabs your body with their toes!" - else if(0) // POLARISTODO istaur(src) && M.taur_style == 2) + else if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) src << "You carefully squish [tmob] under your tail!" tmob << "[src] pins you under their tail!" else diff --git a/icons/mob/vore/ears_vr.dmi b/icons/mob/vore/ears_vr.dmi new file mode 100644 index 0000000000..6ed1ffde64 Binary files /dev/null and b/icons/mob/vore/ears_vr.dmi differ diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi new file mode 100644 index 0000000000..ed68a7587a Binary files /dev/null and b/icons/mob/vore/tails_vr.dmi differ diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi new file mode 100644 index 0000000000..d133e544dd Binary files /dev/null and b/icons/mob/vore/taurs_vr.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 2ddf362be4..7e53a1cb24 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1029,6 +1029,7 @@ #include "code\modules\client\preference_setup\loadout\loadout_xeno.dm" #include "code\modules\client\preference_setup\occupation\occupation.dm" #include "code\modules\client\preference_setup\skills\skills.dm" +#include "code\modules\client\preference_setup\vore\01_ears.dm" #include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\ears\skrell.dm" @@ -1896,6 +1897,10 @@ #include "code\modules\virus2\items_devices.dm" #include "code\modules\vore\hook-defs_vr.dm" #include "code\modules\vore\trycatch_vr.dm" +#include "code\modules\vore\appearance\preferences_vr.dm" +#include "code\modules\vore\appearance\spider_taur_powers_vr.dm" +#include "code\modules\vore\appearance\sprite_accessories_vr.dm" +#include "code\modules\vore\appearance\update_icons_vr.dm" #include "code\modules\vore\eating\belly_vr.dm" #include "code\modules\vore\eating\bellymodes_vr.dm" #include "code\modules\vore\eating\living_vr.dm"