Issue #4 - Implement custom tails, ears, and taurs.

- Added datums and icons for custom ears.
- Added datums and icons for custom tails.
- Added datums and icons for taurs, now a subtype of tails.
- Integrated into icon_updates() for in game appearance.
- Integrated into preferences_setup() for character setup preview.
- Added ears and tails to the character setup screen.
- Enabled nagataur support for micro/macro step-over messages.
This commit is contained in:
Leshana
2016-05-11 23:20:49 -04:00
parent 034f195091
commit 88e46b624a
15 changed files with 799 additions and 10 deletions

View File

@@ -2,6 +2,9 @@
* VOREStation global lists * 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 //stores numeric player size options indexed by name
var/global/list/player_sizes_list = list( var/global/list/player_sizes_list = list(
"Macro" = RESIZE_HUGE, "Macro" = RESIZE_HUGE,
@@ -73,3 +76,20 @@ var/global/list/struggle_sounds = list(
"Squish2" = 'sound/vore/squish2.ogg', "Squish2" = 'sound/vore/squish2.ogg',
"Squish3" = 'sound/vore/squish3.ogg', "Squish3" = 'sound/vore/squish3.ogg',
"Squish4" = 'sound/vore/squish4.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

View File

@@ -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)
. += "<h2>VORE Station Settings</h2>"
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")
. += "<b>Preview</b><br>"
. += "<img src=preview_icon.png height=64 width=64><img src=preview_icon2.png height=64 width=64><br>"
. += "<b>Ears</b><br>"
. += " Style: <a href='?src=\ref[src];ear_style=1'>[pref.ear_style ? "Custom" : "Normal"]</a><br>"
. += "<b>Tail</b><br>"
. += " Style: <a href='?src=\ref[src];tail_style=1'>[pref.tail_style ? "Custom" : "Normal"]</a><br>"
if(tail_styles_list[pref.tail_style])
var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style]
if (T.do_colouration)
. += "<a href='?src=\ref[src];tail_color=1'>Change Color</a> \
<font face='fixedsys' size='3' color='\
#[num2hex(pref.r_tail, 2)][num2hex(pref.g_tail, 2)][num2hex(pref.b_tail, 2)]'>\
<table style='display:inline;' bgcolor='\
#[num2hex(pref.r_tail, 2)][num2hex(pref.g_tail, 2)][num2hex(pref.b_tail)]'>\
<tr><td>__</td></tr></table> </font> "
/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 ..()

View File

@@ -256,6 +256,11 @@ datum/preferences
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, safety = 0) /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. // Sanitizing rather than saving as someone might still be editing when copy_to occurs.
player_setup.sanitize_setup() player_setup.sanitize_setup()
// VOREStation Edit - Start
player_setup.copy_to_mob(character)
// VOREStation Edit - End
if(be_random_name) if(be_random_name)
real_name = random_name(identifying_gender,species) real_name = random_name(identifying_gender,species)

View File

@@ -373,6 +373,12 @@ var/global/list/damage_icon_parts = list()
face_standing.Blend(hair_s, ICON_OVERLAY) 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) overlays_standing[HAIR_LAYER] = image(face_standing)
if(update_icons) update_icons() 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) /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1)
overlays_standing[TAIL_LAYER] = null 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)) if(species.tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/icon/tail_s = get_tail_icon() var/icon/tail_s = get_tail_icon()
overlays_standing[TAIL_LAYER] = image(tail_s, icon_state = "[species.tail]_s") overlays_standing[TAIL_LAYER] = image(tail_s, icon_state = "[species.tail]_s")

View File

@@ -246,9 +246,31 @@
limb_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) limb_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
preview_icon.Blend(limb_icon, ICON_OVERLAY) preview_icon.Blend(limb_icon, ICON_OVERLAY)
//Tail //Tails
if(current_species && (current_species.tail))
var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") // 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)) if(current_species && (current_species.appearance_flags & HAS_SKIN_COLOR))
temp.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) temp.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(current_species && (current_species.appearance_flags & HAS_SKIN_TONE)) 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) facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
eyes_s.Blend(facial_s, ICON_OVERLAY) 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 var/icon/underwear_top_s = null
if(underwear_top && current_species.appearance_flags & HAS_UNDERWEAR) if(underwear_top && current_species.appearance_flags & HAS_UNDERWEAR)
underwear_top_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear_top) underwear_top_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear_top)

View File

@@ -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

View File

@@ -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~

View File

@@ -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"

View File

@@ -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

View File

@@ -120,4 +120,4 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
S["weight_gain"] << weight_gain S["weight_gain"] << weight_gain
S["weight_loss"] << weight_loss S["weight_loss"] << weight_loss
return 1 return 1

View File

@@ -110,7 +110,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
now_pushing = 0 now_pushing = 0
if(src.get_effective_size() > tmob.get_effective_size()) if(src.get_effective_size() > tmob.get_effective_size())
var/mob/living/carbon/human/M = src 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]." src << "You carefully slither around [tmob]."
tmob << "[src]'s huge tail slithers past beside you!" tmob << "[src]'s huge tail slithers past beside you!"
else else
@@ -118,7 +118,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
tmob << "[src] steps over you carefully!" tmob << "[src] steps over you carefully!"
if(tmob.get_effective_size() > src.get_effective_size()) if(tmob.get_effective_size() > src.get_effective_size())
var/mob/living/carbon/human/M = tmob 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." src << "You jump over [tmob]'s thick tail."
tmob << "[src] bounds over your tail." tmob << "[src] bounds over your tail."
else else
@@ -144,7 +144,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
tmob.Stun(4) tmob.Stun(4)
var/mob/living/carbon/human/M = src 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!" src << "You carefully squish [tmob] under your tail!"
tmob << "[src] pins you under their tail!" tmob << "[src] pins you under their tail!"
else else
@@ -159,7 +159,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
tmob.apply_damage(10, HALLOSS) tmob.apply_damage(10, HALLOSS)
var/mob/living/carbon/human/M = src 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!" src << "You steamroller over [tmob] with your heavy tail!"
tmob << "[src] ploughs you down mercilessly with their heavy tail!" tmob << "[src] ploughs you down mercilessly with their heavy tail!"
else else
@@ -176,13 +176,13 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
if(istype(M) && !M.shoes) if(istype(M) && !M.shoes)
// User is a human (capable of scooping) and not wearing shoes! Scoop into foot slot! // 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) 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!" src << "You wrap up [tmob] with your powerful tail!"
tmob << "[src] binds you with their powerful tail!" tmob << "[src] binds you with their powerful tail!"
else else
src << "You clench your toes around [tmob]'s body!" src << "You clench your toes around [tmob]'s body!"
tmob << "[src] grabs your body with their toes!" 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!" src << "You carefully squish [tmob] under your tail!"
tmob << "[src] pins you under their tail!" tmob << "[src] pins you under their tail!"
else else

BIN
icons/mob/vore/ears_vr.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
icons/mob/vore/tails_vr.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
icons/mob/vore/taurs_vr.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1029,6 +1029,7 @@
#include "code\modules\client\preference_setup\loadout\loadout_xeno.dm" #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\occupation\occupation.dm"
#include "code\modules\client\preference_setup\skills\skills.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\chameleon.dm"
#include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\clothing.dm"
#include "code\modules\clothing\ears\skrell.dm" #include "code\modules\clothing\ears\skrell.dm"
@@ -1896,6 +1897,10 @@
#include "code\modules\virus2\items_devices.dm" #include "code\modules\virus2\items_devices.dm"
#include "code\modules\vore\hook-defs_vr.dm" #include "code\modules\vore\hook-defs_vr.dm"
#include "code\modules\vore\trycatch_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\belly_vr.dm"
#include "code\modules\vore\eating\bellymodes_vr.dm" #include "code\modules\vore\eating\bellymodes_vr.dm"
#include "code\modules\vore\eating\living_vr.dm" #include "code\modules\vore\eating\living_vr.dm"