[READY] Taursuits and Tail socks [IDB IGNORE] (#19611)

* Consolidation and Sorting Taurs

There has been an excellent consolidation of taur bodies, but the taur.dm file still has the big legs and long tails in them... which these are not taur bodies and have been evicted. Taur bodies have been broken into multiple files to improve readability. Tails will be receiving a similar break up later.

Some pathing was adjusted to make inheritence a lot easier. They've also been made alphabetical.

Prelude to Taur suits.

* Sorted Alphabetically now

* Update taur_animal.dm

* sprite maintenance

Kitsune given triple color zones like fox taurs

Feline sprites consistent for what they modify. Some of them were misaligned weirdly. Giant spider taurs have coloration where needed, and aren't colored, as are the CITADEL ported wolf taurs.

* Make sure this gets cleaned up to avoid confus

* actually y'know what, let's just do it.

Tails sorted.

Old, uncolored sprites removed:
squirrel, orange/red
stripe taj, brown
bear, brow
wisewolf
wolf grey, green, black
mouse pink

Changed sprites:
Cross fox (regular) has three color zones now
Wolf has the tail tip colorable now
Tucker0666 and HooDoo's snowflake stuff named to them

* TaurClothingCutter tool and assorted assets

Bastardized from the old Human Cutter tool made ages ago, permits cookie-cutting the custom sprited tauric suits (Made by Poojawa) into the taur shape, with padding to include certain extra details like bulk or Imperium Monk, etc.

Bedsheet is to be added after. More info in .md

* Begin Tailsock vars

Also adding praliminary bunny taur cutouts, it'll be further trimmed for sock positioning.

* We'll make the taur specific tailsock seperate

snip snip snip!

* unfucks feline taur sprites

Turns out someone decided that feline taurs each needed uniquely identical sprites. and didn't bother to give the regular version a normal tail wag.

Now it's just normal, normal (wag). Fat, fat (wag), Marking 1 (chest, belly, feet), Marking2 (chest and belly) and Marking2_2 (feet).

Tiger simplified in the same way.

* Copied some homework from RS

this allows for the sock to appear, sometimes.

* adjusting fox cutter

* Batch actionable suit cutting

Otie is prepped for this, but you shouldn't batch longs and shorts at the same time for sanity's sake. or if you do, just rename the short version sotie or something I guess

Mobius suit moved from fullsuits to coats, preserves a lot more of the overcoat look like this

* Fresh cutouts, moved relevant files

Now we can bother people for review assistance. yay!

* Update ATTRIBUTIONS.md

Yeah! I think this is correct. I dunno. Seems like a good idea I guess.

Gunlocker stuff is there because I'm gunna port that soon too.

* actually getting it to compile

* Tail sock toggle & sealed state for voidsuits

I'm crashing out from how poorly upkept digitigrade suits are, but this needs to be fixed in a different PR, I'll leave my distracted regular human mob suits in here.

When my legacy template is still in the files but it's missing like, 80% of suit sprites... probably a bunch of uniform sprites too. uhg.

* scrape up the last few missing suits

I'm absolutely going to end up doing digitigrade suits too. Fucking watch me.

* I sorted mob and mob_digi.dmi

Unused (returned nothing on a quick search) placed into mob_unsued just in case, but most of the digi ones are leftovers from my own work back at Citadel. Wew lad.

* resolve compile issues

* TODO: Strip out or Flick() emotes with old wag

We no longer utilize the randomize system because it just never bloody worked right. And few people, if any, want to do NINE different wag animations for 200+ tails. Nah bro. Yeet. Now a player's chosen custom tail will be asked for, instead of the base species one.

* lmao, belly suffication linter check....

* more sprite work, mostly to get socks rendering

Added wag states for husky, deer, otie taurs, icon_sprite_tag hijacked for its use for tailsocks on taurs, which was previously only saddlebacks.

The majority of the tails_animal base sprites have had their markings unified, the overlay is still drawn on top, but the base sprite needs to be whole or there's holes in the tailsock. It's ok. You can just layer your markings on top...

* Update taur_animal.dm

* Assign Tail sock colors and other vars

* orite the item version needs to match name wise

* Updates with missing suit sprites

the missing ones are probably never used but someone might use 'em

Adding batch action, single outfit option to the cutter that won't do the entire sprite sheet

* Update TaurClothingCutter.dm

* Adding ability to toggle the full suit or clipped

Because I know people will grumble otherwise. pff.

cleans up some of my mess too, how about that.

* Adds blood sprites for taur suits

* Update vorestation.dme

* Poking at resolving North tailface being hidden

Also preparing Bunny taur, Scoli, and Sloog sprites for taursuit conversion. polishing socks to exist accordingly.

We'll figure things out, slowly ~

* apply_tailsock_layer(reducing Kesh blood pressure)

<3

North facing works for regular tails, but not for taur tails, but that's fine, we're making exceptional progress.

* Adding support for more taurs

Bunny, Scoli, Sloog, Husky (and wolftg) taurs all now have working suit support.

bunny and husky had some modified fluff on the chest/butt respectively to fit the premade suits. Sloog needs custom shoes to fix the six leg vs four leg sprites. but that's for another day. the sock will cover the missing pixels anyway.

Fixed extra sprites for the spotted drake/lizard states, we really only ever need the single base sprite!

also a more progress on getting the sock marking section updated for north facement layering. as well as the vars for proper icon states. added a 'none' state to avoid null icon issues.

* Update taur_socks.dmi

* Update taur_reptile.dm

* few more tweaks

* refractor tail render code to mutable_appearance

Extremely overdue! I like this puzzle box of a project, honestly.

also cleans up a lot of the procs related to tail generation, vore tails, and even wings get covered in tailsock now, tied to the toggle.

* please for the love of fuck stop kidnapping taurs

* fiddle fiddle...

* fix missing markings. evicted surplus naga alt

seriously, two alt naga types that are literally identical in shape and first overlay. why tho.

* clipping code should work better now

Improved some taur clipping masks like Giant Spiders and Husky

removed extraneous bigsnaketail, smooth tail icons

Adds adorable bubble helms to tailmaw (anthro and naga) socks!

still fiddling with tailsock code. the amount of nonsense layer code is...

* Purge snowflake species to default to mob.dmi

Default support, tailsocks will render on space suits, digi suits won't hiccup. Snowflake icons in icons/inventory/suit/mob_<species>.dmi preserved if someone wants to adapt alternatives for the big Unathi shoulder pauldrons or whatever. No on-sprite tail needed!

Teshari obviously excluded from these changes, as well as Altevian

* ...fiddle increases

* Update update_icons.dm

* fiddle fiddle... fukkit bedtime

* IT WORKS

Yeet HIDETAIL, no longer needed!!!!!

Custom tailsock states specific to uncolored tails + snowflake
cleaned up tailsock marking overlays a bit better.
Peacock tail moved to general use.

Full backpacks still maximum layer appearance'd, don't know the fuck why. Use a sachel. Will impliment saddlebags at some point for every version of backpack.

* Cleaning up

added missing snaketail_stripes, makes sure do_coloration is respected for those bodies that won't need a sock

Missing states, BEGON!

Also we properly retire the old sprite_accessories_tail file.  Shift bunny into taur_animal and the other rogue-star stuff into tails_long.

* Fixing some byond mischief

Sorted Update_icons a bit more, putting wing procs together, moving the flying proc checks to living_vr and human_powers_vr

forcing suits to clear their taurized stat more aggressively on equip and dropping. Removing the flip-flop check for making something taurized. Also cleaning up single letter vars

fixing a case of too-many-godamn-layers in the tailsock code. Also shoves north facing to actually drawing over backpacks on north face

Unless body designer code calls for all equipment to be re-equipped upon exiting the various methods, there will need to be a manual on/off of modified clothes to fix 'em. But if you're nude then you won't have this issue.

---------

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
Poojawa
2026-08-12 10:34:24 -04:00
committed by GitHub
co-authored by Cameron Lennox
parent 1d9cb8e948
commit 3e28b73e01
125 changed files with 1735 additions and 816 deletions
+25
View File
@@ -131,3 +131,28 @@
**File:** `/sound/talksounds/looc_sound.ogg`<br>
**Creator:** VerySoft<br>
**License:** [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/)<br>
<br>
**Files**:icons\inventory\suit\taursuits_wolf,<br>
icons\inventory\suit\taursuits_fox,<br>
icons\inventory\suit\taursuits_zorgoia,<br>
icons\inventory\suit\taursuits_redpanda,<br>
icons\inventory\suit\taursuits_lizard,<br>
icons\inventory\suit\taursuits_drake,<br>
icons\inventory\suit\taursuits_otie,<br>
icons\inventory\suit\taursuits_noodle,<br>
icons\inventory\suit\taursuits_horse,<br>
icons\inventory\suit\taursuits_cow,<br>
icons\inventory\suit\taursuits_skunk,<br>
icons\inventory\suit\taursuits_sergal,<br>
icons\inventory\suit\taursuits_rat,<br>
icons\inventory\suit\taursuits_deer,<br>
icons\inventory\suit\taursuits_feline<br>
**Folder**:tools\TaurClothingCutter<br>
**Notes:** All sprites other than the waist-up humanoid torso portions are fully created by Poojawa and as such must be credited if ported.<br>
**File**: icons/obj/guncabinet.dmi<br>
**Notes:** All sprites not appended with 'old' Are fully created by Poojawa.<br>
**File**: icons/obj/machines/foodsynthesizer.dmi
**Notes:** Original Sprite taken from Deep Space 13. Portable Synth, Screen Animations, East/West, Panel layering, and canisters, Are fully created by Poojawa.<br>
**Creator:** Poojawa<br>
**License:** [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)<br>
<br>
+140 -140
View File
@@ -1,190 +1,190 @@
// Default species get default sprites, VR species get VR sprites
#define ALL_SPRITE_SHEETS_SUIT_MOB list(\
SPECIES_HUMAN = 'icons/inventory/suit/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/suit/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/suit/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/suit/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/suit/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/suit/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/suit/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/suit/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/suit/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/suit/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/suit/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/suit/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/suit/mob_vulpkanin.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/suit/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/suit/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/suit/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/suit/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/suit/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/suit/mob.dmi',\
SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_altevian.dmi')
#define VR_SPECIES_SPRITE_SHEETS_HEAD_MOB list(\
SPECIES_HUMAN = 'icons/inventory/head/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/head/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/mob_vulpkanin.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/head/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/mob.dmi',\
SPECIES_ALTEVIAN = 'icons/inventory/head/mob_altevian.dmi')
#define VR_SPECIES_SPRITE_SHEETS_HANDS_MOB list(\
SPECIES_HUMAN = 'icons/inventory/hands/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/hands/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/hands/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/mob_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/hands/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/mob.dmi')
#define VR_SPECIES_SPRITE_SHEETS_FEET_MOB list(\
SPECIES_HUMAN = 'icons/inventory/feet/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/feet/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/feet/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/mob_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/feet/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/mob.dmi')
#define SPECIES_SPRITE_SHEETS_SUIT_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/suit/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/suit/item_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/suit/item_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/suit/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/suit/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/suit/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/suit/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/suit/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/suit/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/suit/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/suit/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/suit/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/suit/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/suit/item_vulpkanin.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/suit/item.dmi',\
SPECIES_AKULA = 'icons/inventory/suit/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/suit/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/suit/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/suit/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/suit/item.dmi',\
SPECIES_ALTEVIAN = 'icons/inventory/suit/item_altevian.dmi')
#define VR_SPECIES_SPRITE_SHEETS_HEAD_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/head/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/item_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/item_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/head/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/head/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/item_vulpkanin.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/item.dmi',\
SPECIES_AKULA = 'icons/inventory/head/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/item.dmi',\
SPECIES_ALTEVIAN = 'icons/inventory/head/item_altevian.dmi')
#define VR_SPECIES_SPRITE_SHEETS_HANDS_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/hands/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/item_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/item_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/hands/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/hands/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/item_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/hands/item.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/item.dmi')
#define VR_SPECIES_SPRITE_SHEETS_FEET_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/feet/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/item_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/item_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/feet/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/feet/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/item_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/feet/item.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/item.dmi')
#define ALL_VR_SPRITE_SHEETS_HEAD_MOB list(\
SPECIES_HUMAN = 'icons/inventory/head/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/head/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/mob_vulpkanin.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/head/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/mob.dmi',\
SPECIES_ALTEVIAN = 'icons/inventory/head/mob_altevian.dmi')
#define ALL_VR_SPRITE_SHEETS_HANDS_MOB list(\
SPECIES_HUMAN = 'icons/inventory/hands/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/hands/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/hands/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/mob_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/hands/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/mob.dmi')
#define ALL_VR_SPRITE_SHEETS_FEET_MOB list(\
SPECIES_HUMAN = 'icons/inventory/feet/mob.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/mob_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/mob_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/mob_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/mob.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/mob.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/mob.dmi',\
SPECIES_TESHARI = 'icons/inventory/feet/mob_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/feet/mob_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/mob_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/mob_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/mob_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/mob_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/mob_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/mob_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/feet/mob.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/mob.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/mob.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/mob.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/mob.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/mob.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/mob.dmi')
#define ALL_VR_SPRITE_SHEETS_HEAD_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/head/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/item_unathi.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/item_unathi.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/head/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/head/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/head/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/head/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/head/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/item_vulpkanin.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/head/item.dmi',\
SPECIES_AKULA = 'icons/inventory/head/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/head/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/head/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/head/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/head/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/head/item.dmi',\
SPECIES_ALTEVIAN = 'icons/inventory/head/item_altevian.dmi')
#define ALL_VR_SPRITE_SHEETS_HANDS_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/hands/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/item_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/item_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/hands/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/hands/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/hands/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/hands/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/hands/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/item_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/hands/item.dmi',\
SPECIES_AKULA = 'icons/inventory/hands/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/hands/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/hands/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/hands/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/hands/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/hands/item.dmi')
#define ALL_VR_SPRITE_SHEETS_FEET_ITEM list(\
SPECIES_HUMAN = 'icons/inventory/feet/item.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/item_tajaran.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/item_skrell.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/item_unathi.dmi',\
SPECIES_TAJARAN = 'icons/inventory/feet/item.dmi',\
SPECIES_SKRELL = 'icons/inventory/feet/item.dmi',\
SPECIES_UNATHI = 'icons/inventory/feet/item.dmi',\
SPECIES_TESHARI = 'icons/inventory/feet/item_teshari.dmi',\
SPECIES_XENOHYBRID = 'icons/inventory/feet/item_unathi.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/item_akula.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/item_sergal.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/item_sergal.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/item_vulpkanin.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/item_vulpkanin.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/item_vulpkanin.dmi')
SPECIES_XENOHYBRID = 'icons/inventory/feet/item.dmi',\
SPECIES_AKULA = 'icons/inventory/feet/item.dmi',\
SPECIES_SERGAL = 'icons/inventory/feet/item.dmi',\
SPECIES_NEVREAN = 'icons/inventory/feet/item.dmi',\
SPECIES_VULPKANIN = 'icons/inventory/feet/item.dmi',\
SPECIES_ZORREN_HIGH = 'icons/inventory/feet/item.dmi',\
SPECIES_FENNEC = 'icons/inventory/feet/item.dmi')
+4
View File
@@ -44,6 +44,10 @@
#define TARGETED_LAYER 41 //'Aimed at' overlay layer
#define TOTAL_LAYERS 41 // <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
/// Tail layering shortcuts
#define TAUR_LAYERING BODY_LAYER+TAIL_UPPER_LAYER+1
#define LOWER_TAIL_DIRS list(SOUTH, EAST, WEST)
#define TAIL_LAYER_CLEARING list(TAIL_UPPER_LAYER, TAIL_UPPER_LAYER_HIGH, TAIL_UPPER_LAYER_LOW, TAIL_LOWER_LAYER)
//These two are only used for gargoyles currently
#define HUMAN_BODY_LAYERS list(MUTATIONS_LAYER, TAIL_LOWER_LAYER, WING_LOWER_LAYER, BODYPARTS_LAYER, SKIN_LAYER, BLOOD_LAYER, MOB_DAM_LAYER, TAIL_UPPER_LAYER, HAIR_LAYER, HAIR_ACCESSORY_LAYER, EYES_LAYER, WING_LAYER, VORE_BELLY_LAYER, VORE_TAIL_LAYER, TAIL_UPPER_LAYER_HIGH, TAIL_UPPER_LAYER_LOW)
+1 -1
View File
@@ -111,7 +111,7 @@
slowdown = 0.5
armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
/obj/item/clothing/suit/space/cult/cultify()
return
+56 -48
View File
@@ -42,15 +42,14 @@
src.attach_accessory(null, tie)
set_clothing_index()
//VOREStation edit start
if(polychromic)
verbs |= /obj/item/clothing/proc/change_color
//VOREStation edit start
/obj/item/clothing/update_icon()
cut_overlays() //This removes all the overlays on the sprite and then goes down a checklist adding them as required.
if(forensic_data?.has_blooddna())
add_blood()
//TODO: strip out redundant icons like labcoats with an overlay badge, security uniforms with the trim, winter coats, etc etc.
. = ..()
/obj/item/clothing/equipped(mob/user,slot)
@@ -987,14 +986,26 @@
. = ..()
if(has_hood_sprite) //If we have a special hood_sprite, great, let's use it! Only used by /obj/item/clothing/suit/storage/hooded atm.
icon_state = "[toggleicon][hood_up ? "_t" : ""]"
update_clothing_icon()
/obj/item/clothing/suit/equipped(mob/user, slot)
//Let's make sure we're extra aggressive with taur settings.
icon_override = initial(icon_override)
taurized = FALSE
if(slot != slot_wear_suit)
RemoveHood()
if(ishuman(user))
var/mob/living/carbon/human/Hoomie = user
var/taurtail = istaurtail(Hoomie.tail_style)
if(taurtail)
taurize(Hoomie, taurtail)
update_clothing_icon()
..()
/obj/item/clothing/suit/dropped(mob/user, equipping, slot)
RemoveHood()
update_clothing_icon()
..()
/obj/item/clothing/suit/ui_action_click(mob/user, actiontype)
@@ -1017,9 +1028,9 @@
if(hood)
hood.canremove = TRUE // This shouldn't matter anyways but just incase.
if(ishuman(hood.loc))
var/mob/living/carbon/H = hood.loc
H.unEquip(hood, 1)
H.update_inv_wear_suit()
var/mob/living/carbon/Carbmob = hood.loc
Carbmob.unEquip(hood, 1)
Carbmob.update_inv_wear_suit()
hood.forceMove(src)
/obj/item/clothing/suit/proc/ToggleHood()
@@ -1029,69 +1040,64 @@
RemoveHood()
return
if(ishuman(loc))
var/mob/living/carbon/human/H = src.loc
if(H.wear_suit != src)
to_chat(H, span_warning("You must be wearing [src] to put up the hood!"))
var/mob/living/carbon/human/Hoomie = src.loc
if(Hoomie.wear_suit != src)
to_chat(Hoomie, span_warning("You must be wearing [src] to put up the hood!"))
return
if(H.head)
to_chat(H, span_warning("You're already wearing something on your head!"))
if(Hoomie.head)
to_chat(Hoomie, span_warning("You're already wearing something on your head!"))
return
else
if(color != hood.color)
hood.color = color
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
Hoomie.equip_to_slot_if_possible(hood,slot_head,0,0,1)
hood_up = TRUE
hood.canremove = FALSE
update_icon()
H.update_inv_wear_suit()
Hoomie.update_inv_wear_suit()
///Hood stuff end.
/obj/item/clothing/suit/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
M.update_inv_wear_suit()
/obj/item/clothing/suit/equipped(mob/user, slot)
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/taurtail = istaurtail(H.tail_style)
if((taurized && !taurtail) || (!taurized && taurtail))
taurize(user, taurtail)
return ..()
if (ismob(loc))
var/mob/Mobbie = loc
Mobbie.update_inv_wear_suit()
///Establishes Icon overrides for taur bodies
/obj/item/clothing/suit/proc/taurize(mob/living/carbon/human/taur, has_taur_tail = FALSE)
if(has_taur_tail)
var/datum/sprite_accessory/tail/taur/taurtail = taur.tail_style
if(taurtail.suit_sprites && (icon_exists(taurtail.suit_sprites, get_worn_icon_state(slot_wear_suit_str))))
icon_override = taurtail.suit_sprites
taurized = TRUE
// means that if a taur puts on an already taurized suit without a taur sprite
// for their taur type, but the previous taur type had a sprite, it stays
// taurized and they end up with that taur style which is funny
else
taurized = FALSE
/// We've already confirmed that we have a taur tail during equipped, this is just makes sure we get the correct icon override.
if(!has_taur_tail)
return
if(!taurized)
icon_override = initial(icon_override)
taurized = FALSE
taurized = TRUE
// Taur suits need to be shifted so its centered on their taur half.
/obj/item/clothing/suit/make_worn_icon(body_type,slot_name,inhands,default_icon,default_layer = 0,icon/clip_mask)
if(showtaurbutts) //We don't want the override icons if we're being asked to show that booty
return
// if we're not showing butts, then let's apply the proper overrides
var/datum/sprite_accessory/tail/taur/taurtail = taur.tail_style
if(taurtail?.suit_sprites && icon_exists(taurtail.suit_sprites, get_worn_icon_state(slot_wear_suit_str)))
icon_override = taurtail.suit_sprites
// Taur suits need to be shifted so it's centered on their taur half.
/obj/item/clothing/suit/make_worn_icon(body_type, slot_name, inhands, default_icon, default_layer = 0, icon/clip_mask)
var/image/standing = ..()
if(taurized) //Special snowflake var on suits
if(!standing)
return null
// Only apply the -16 offset when taurized AND showtaurbutts is FALSE
if(taurized && !showtaurbutts && icon_override)
standing.pixel_x = -16
standing.layer = BODY_LAYER + TAIL_UPPER_LAYER + 1
standing.layer = TAUR_LAYERING
// but if we don't have an icon_override, we already have our offsets, set.
return standing
/obj/item/clothing/suit/apply_accessories(image/standing)
if(LAZYLEN(accessories) && taurized)
for(var/obj/item/clothing/accessory/A in accessories)
var/image/I = new(A.get_mob_overlay())
I.pixel_x = 16 //Opposite of the pixel_x on the suit (-16) from taurization to cancel it out and puts the accessory in the correct place on the body.
standing.add_overlay(I)
else
return ..()
. = ..()
if(LAZYLEN(accessories) && taurized && !showtaurbutts && standing)
// account for the offset of our standing image
for(var/image/I in standing.overlays)
I.pixel_x += 16
///////////////////////////////////////////////////////////////////////
@@ -1162,6 +1168,8 @@
var/icon/rolled_down_sleeves_icon = 'icons/inventory/uniform/mob_sleeves_rolled.dmi'
update_icon_define_digi = "icons/inventory/uniform/mob_digi.dmi"
/// hehe, soon.
var/taurized = FALSE
/obj/item/clothing/under/attack_hand(mob/user)
if(LAZYLEN(accessories))
+7 -2
View File
@@ -24,6 +24,11 @@
if(forensic_data?.has_blooddna() && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
blood_sprite_state = "[blood_overlay_type]blood"
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state)
bloodsies.color = blood_color
var/datum/sprite_accessory/tail/taur/taurtail = H.tail_style
var/image/bloodsies
if(taurized && taurtail.suit_sprites)
bloodsies = image(icon = taurtail.suit_sprites, icon_state = blood_sprite_state)
else
bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state)
bloodsies.color = blood_color
standing.add_overlay(bloodsies)
@@ -21,7 +21,7 @@
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_SECURITY)
slowdown = 1.5
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
min_pressure_protection = 0
max_pressure_protection = 2 * ONE_ATMOSPHERE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -87,7 +87,7 @@
slowdown = 0
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.9
flags_inv = HIDETAIL|HIDEHOLSTER
flags_inv = HIDEHOLSTER
body_parts_covered = UPPER_TORSO|ARMS
//Orange emergency space suit
@@ -47,7 +47,7 @@
body_parts_covered = CHEST|LEGS|ARMS
heat_protection = CHEST|LEGS|ARMS
cold_protection = CHEST|LEGS|ARMS
flags_inv = HIDEJUMPSUIT|HIDETAIL
flags_inv = HIDEJUMPSUIT
item_flags = THICKMATERIAL | AIRTIGHT
slowdown = 0
//will reach 10 breach damage after 25 laser carbine blasts, 3 revolver hits, or ~1 PTR hit. Completely immune to smg or sts hits.
@@ -80,7 +80,7 @@
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_SUIT_REGULATORS)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
cold_protection = CHEST|LEGS|FEET|ARMS|HANDS
heat_protection = CHEST|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
@@ -77,7 +77,8 @@
/obj/item/clothing/suit/space/void/equipped(mob/M)
..()
/// for sealable void suits using the rig sprites like Engineering
icon_state = "[initial(icon_state)]"
var/mob/living/carbon/human/H = M
if(!istype(H)) return
@@ -94,6 +95,8 @@
to_chat(M, "You are unable to deploy your suit's helmet as \the [H.head] is in the way.")
else if (H.equip_to_slot_if_possible(hood, slot_head))
to_chat(M, "Your suit's helmet deploys with a hiss.")
if(sealable)
icon_state = "[initial(icon_state)]_sealed"
hood.canremove = FALSE
if(cooler)
@@ -181,6 +184,8 @@
H.drop_from_inventory(hood)
hood.forceMove(src)
playsound(src.loc, 'sound/machines/click2.ogg', 75, 1)
if(sealable)
icon_state = "[initial(icon_state)]"
else
if(H.head)
to_chat(H, span_danger("You cannot deploy your helmet while wearing \the [H.head]."))
@@ -189,6 +194,8 @@
hood.canremove = FALSE
to_chat(H, span_info("You deploy your suit helmet, sealing you off from the world."))
playsound(src.loc, 'sound/machines/click2.ogg', 75, 1)
if(sealable)
icon_state = "[initial(icon_state)]_sealed"
/obj/item/clothing/suit/space/void/click_alt(mob/living/user)
eject_tank()
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A traditional Zhan-Khazan garment."
icon_state = "zhan_furs"
body_parts_covered = CHEST|LEGS|FEET|ARMS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
+1 -1
View File
@@ -15,7 +15,7 @@
name = "wolf-taur armor vest"
desc = "An armored vest that protects against some damage. It appears to be created for a wolf-taur."
species_restricted = null //Species restricted since all it cares about is a taur half
icon = 'icons/mob/taursuits_wolf.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "wolf_item"
item_state = "heavy_wolf_armor"
+8 -8
View File
@@ -26,7 +26,7 @@
slowdown = 1.0
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
siemens_coefficient = 0.9
flags = PHORONGUARD
item_flags = THICKMATERIAL
@@ -41,7 +41,7 @@
/obj/item/clothing/suit/bio_suit/general
icon_state = "bio_general"
item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio")
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
//Virology biosuit, green stripe
/obj/item/clothing/head/bio_hood/virology
@@ -49,7 +49,7 @@
/obj/item/clothing/suit/bio_suit/virology
icon_state = "bio_virology"
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
//Security biosuit, grey with red stripe across the chest
/obj/item/clothing/head/bio_hood/security
@@ -57,7 +57,7 @@
/obj/item/clothing/suit/bio_suit/security
icon_state = "bio_security"
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
//Janitor's biosuit, grey with purple arms
/obj/item/clothing/head/bio_hood/janitor
@@ -65,7 +65,7 @@
/obj/item/clothing/suit/bio_suit/janitor
icon_state = "bio_janitor"
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
//Scientist's biosuit, white with a pink-ish hue
/obj/item/clothing/head/bio_hood/scientist
@@ -73,12 +73,12 @@
/obj/item/clothing/suit/bio_suit/scientist
icon_state = "bio_scientist"
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
//CMO's biosuit, blue stripe
/obj/item/clothing/suit/bio_suit/cmo
icon_state = "bio_cmo"
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
/obj/item/clothing/head/bio_hood/cmo
icon_state = "bio_cmo"
@@ -89,4 +89,4 @@
desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses."
icon_state = "plaguedoctor"
item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio")
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
+2 -2
View File
@@ -128,7 +128,7 @@
desc = "A plastic replica of a mercenary combat space suit, you'll look just like a real bloodthirsty mercenary in this! This is a toy, it is not made for use in space!"
w_class = ITEMSIZE_NORMAL
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
body_parts_covered = CHEST|ARMS|HANDS|LEGS|FEET
/obj/item/clothing/suit/hastur
@@ -258,7 +258,7 @@
desc = "A suit that completely restrains the wearer."
icon_state = "straight_jacket"
body_parts_covered = CHEST|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
var/resist_time = 4800 // Eight minutes.
@@ -24,7 +24,7 @@
/obj/item/clothing/suit/drake_cloak
name = "drake cloak"
desc = "A simple cloak for drake-taurs."
icon = 'icons/mob/taursuits_drake.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "cloak"
item_state_slots = list(slot_r_hand_str = "capjacket", slot_l_hand_str = "capjacket")
body_parts_covered = UPPER_TORSO|ARMS
@@ -41,7 +41,7 @@
/obj/item/clothing/suit/barding
name = DEVELOPER_WARNING_NAME
description_info = "You need to be a horsy to wear that."
icon = 'icons/mob/taursuits_horse.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
item_state_slots = list(slot_r_hand_str = "capjacket", slot_l_hand_str = "capjacket")
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS
pixel_x = -16
@@ -73,7 +73,7 @@
/obj/item/clothing/suit/taur
name = DEVELOPER_WARNING_NAME
icon = 'icons/mob/taursuits_horse.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
body_parts_covered = CHEST
pixel_x = -16
+3 -3
View File
@@ -20,7 +20,7 @@
body_parts_covered = CHEST|LEGS|FEET|ARMS|HANDS
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, /obj/item/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
item_flags = 0
heat_protection = CHEST|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -63,7 +63,7 @@
permeability_coefficient = 0.01
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
heat_protection = CHEST|LEGS|FEET|ARMS|HANDS
cold_protection = CHEST|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -107,7 +107,7 @@
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, /obj/item/clothing/head/radiation)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
item_flags = THICKMATERIAL
/obj/item/clothing/suit/radiation/Initialize(mapload)
+284
View File
@@ -0,0 +1,284 @@
//This file contains the vars used to give taur and tail socks a baseline color, using their base sprite, upon the various suits and space suits that require them
// I've tried to reasonably color match to the vibes of the overall sprite just to be sure. - Pooj
// Rig Suits deploy a clothing path'd suit, so we just need to keep that in mind for sealed/unsealed related applications.
// These are all stored seperately because I don't really want to edit all the clothing paths myself and change a bunch of files. plays nicer with downstreams too.alist
/obj/item/clothing/suit
///does the suit require a full-envelop suit sock? Spacesuits, bio suits, rad suits, etc.
var/requires_tailsock = FALSE
/// what color is the tailsock going to be? Defaults to a nice, dark grey that usually matches everything.
var/tailsock_color = "#1F1F1F"
/// toggle tailsock options
var/tailsock_toggle = TRUE
/// toggle taur extending for the sprites, for people who want their butts to be shown off, default false
var/showtaurbutts = FALSE
/obj/item/clothing/suit/space
/// unrelated to tailsocks directly, buuuuuut, taur suits have dedicated sealed/unsealed variants and that should be applied, too.
var/sealable = FALSE
requires_tailsock = TRUE
///This is purely for player preference.
/obj/item/clothing/suit/verb/toggletailsock()
set name = "Toggle Tail Sock"
set category = "Object"
set desc = "Toggle the tail sock on your suit."
toggle_tailsock(usr)
/obj/item/clothing/suit/proc/toggle_tailsock(mob/user)
if(!user || !ishuman(user))
return
var/mob/living/carbon/human/H = user
if(H.wear_suit != src)
to_chat(user, span_warning("You must be wearing \the [src] to adjust the tail sock."))
return
if(!requires_tailsock)
to_chat(user, span_notice("\The [src] does not have a tail sock extruder."))
return
if(showtaurbutts)
to_chat(user, span_notice("You must enable full body taur sheathing on \the [src] first."))
return
tailsock_toggle = !tailsock_toggle
to_chat(user, span_notice("You toggle \the [src]'s dynamic tail sheath [tailsock_toggle ? "ON" : "OFF"]."))
H.update_inv_wear_suit()
H.update_tail_showing()
/obj/item/clothing/suit/verb/toggletaursuit()
set name = "Toggle Taur Extension"
set category = "Object"
set desc = "Toggle the full body taur sprite on your suit."
toggle_taurextender(usr)
/obj/item/clothing/suit/proc/toggle_taurextender(mob/user)
if(!user || !ishuman(user))
return
var/mob/living/carbon/human/H = user
if(H.wear_suit != src)
to_chat(user, span_warning("You must be wearing \the [src] to adjust the taur extension."))
return
var/taurtail = istaurtail(H.tail_style)
if(!taurtail)
to_chat(user, span_warning("\The [src]'s taur extension requires a taur body."))
return
showtaurbutts = !showtaurbutts
if(showtaurbutts)
// Classic Mode: turn off suit tailsock sleeve
tailsock_toggle = FALSE
to_chat(user, span_notice("You disable full body sheathing on \the [src] (Classic mode)."))
else
// Modern Taur Mode: Enable suit override & tail sheath
tailsock_toggle = TRUE
to_chat(user, span_notice("You enable full body taur sheathing on \the [src]."))
taurize(H, taurtail)
H.update_inv_wear_suit()
H.update_tail_showing()
/obj/item/clothing/suit/examine(mob/user)
. = ..()
///It's a little thing, but feedback can help someone wondering why a suit isn't hinding their tails/butt.
. += span_notice("The dynamic sheathing toggle is [tailsock_toggle ? "enabled" : "disabled"].")
//The following for specific sock colors more than anything.
//Fire suits
/obj/item/clothing/suit/fire
requires_tailsock = TRUE
tailsock_color = "#343442"
/obj/item/clothing/suit/fire/firefighter
tailsock_color = "#3F3F3F"
/obj/item/clothing/suit/fire/heavy
tailsock_color = "#3F3F3F"
//Bomb suits
/obj/item/clothing/suit/bomb_suit
requires_tailsock = TRUE
tailsock_color = "#9C8956"
/obj/item/clothing/suit/bomb_suit/security
tailsock_color = "#4A4A2F"
// Bio suits
/obj/item/clothing/suit/bio_suit
requires_tailsock = TRUE
tailsock_color = "#BBBBBB"
/obj/item/clothing/suit/bio_suit/security
tailsock_color = "#5F615E"
/obj/item/clothing/suit/bio_suit/janitor
tailsock_color = "#5F615E"
/obj/item/clothing/suit/bio_suit/scientist
tailsock_color = "#CCB8A8"
// Radiation
/obj/item/clothing/suit/radiation
requires_tailsock = TRUE
// Misc suits
/obj/item/clothing/suit/straight_jacket
requires_tailsock = TRUE
tailsock_color = "#AAAAAA"
//Station Void Space Suits
/obj/item/clothing/suit/space/void/makeshift
tailsock_color = "#573226"
/obj/item/clothing/suit/space/void/refurb
tailsock_color = "#293f61"
/obj/item/clothing/suit/space/void/captain
tailsock_color = "#7F7F7F"
/obj/item/clothing/suit/space/void/security/prototype
tailsock_color = "#7F7F7F"
/obj/item/clothing/suit/space/void/pilot
tailsock_color = "#6B5E52"
/obj/item/clothing/suit/space/void/exploration/alt
tailsock_color = "#6B5E52"
/obj/item/clothing/suit/space/void/engineering
sealable = TRUE
tailsock_color = "#4E4139"
/obj/item/clothing/suit/space/void/engineering/salvage
tailsock_color = "#3E3823"
/obj/item/clothing/suit/space/void/atmos
sealable = TRUE
tailsock_color = "#6B5E52"
/obj/item/clothing/suit/space/void/mining
sealable = TRUE
tailsock_color = "#6B5E52"
/obj/item/clothing/suit/space/void/mining/alt
sealable = TRUE
tailsock_color = "#5F615E"
/obj/item/clothing/suit/space/void/medical
sealable = TRUE
tailsock_color = "#645C56"
/obj/item/clothing/suit/space/void/security
sealable = TRUE
tailsock_color = "#39342D"
/obj/item/clothing/suit/space/void/security/riot
sealable = TRUE
tailsock_color = "#660000"
/obj/item/clothing/suit/space/void/security/alt
sealable = TRUE
tailsock_color = "#1D1D1D"
/obj/item/clothing/suit/armor/captain
requires_tailsock = TRUE
tailsock_color = "#1E3E50"
/obj/item/clothing/suit/space/emergency
tailsock_color = "#282828"
//Bay ported Station Suits
/obj/item/clothing/suit/space/void/engineering/alt2
sealable = FALSE
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/void/atmos/alt2
sealable = FALSE
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/void/captain/alt
sealable = FALSE
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/void/medical/alt2
sealable = FALSE
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/void/exploration/alt2
sealable = FALSE
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/void/mining/alt2
sealable = FALSE
tailsock_color = "#2B3440"
/obj/item/clothing/suit/space/anomaly/alt
sealable = FALSE
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/void/security/riot/alt
sealable = FALSE
tailsock_color = "#1C222B"
//Event Space Suits
/obj/item/clothing/suit/space/void/hev
tailsock_color = "#2D313C"
/obj/item/clothing/suit/space/void/aether
tailsock_color = "#423F4F"
/obj/item/clothing/suit/space/void/custodian
tailsock_color = "#453542"
/obj/item/clothing/suit/space/void/excelsior
tailsock_color = "#6D6D6B"
//Antag Space suits
/obj/item/clothing/suit/space/syndicate
tailsock_color = "#282828"
/obj/item/clothing/suit/space/void/merc
sealable = TRUE
tailsock_color = "#851e0e"
/obj/item/clothing/suit/space/void/merc/fire
sealable = TRUE
tailsock_color = "#483031"
/obj/item/clothing/suit/space/void/wizard
sealable = TRUE
tailsock_color = "#493955"
//snowflake species suits
/obj/item/clothing/suit/space/vox
requires_tailsock = FALSE
/obj/item/clothing/suit/space/void/altevian_heartbreaker
requires_tailsock = FALSE
/obj/item/clothing/suit/space/void/zaddat
requires_tailsock = FALSE
//RIG's space suits
/obj/item/clothing/suit/space/rig/zero
tailsock_color = "#232226"
/obj/item/clothing/suit/space/rig/baymed
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/rig/pathfinder
tailsock_color = "#1C222B"
/obj/item/clothing/suit/space/rig/advsuit
tailsock_color = "#6B5E52"
/obj/item/clothing/suit/space/rig/focalpoint
tailsock_color = "#303B40"
/obj/item/clothing/suit/space/rig/hephaestus
tailsock_color = "#2D253E"
+3 -3
View File
@@ -26,7 +26,7 @@
key = "swish"
/datum/decl/emote/human/swish/do_emote(mob/living/carbon/human/user)
user.animate_tail_once()
user.animate_tail_start()
/datum/decl/emote/human/wag
key = "wag"
@@ -44,13 +44,13 @@
key = "qwag"
/datum/decl/emote/human/qwag/do_emote(mob/living/carbon/human/user)
user.animate_tail_fast()
user.animate_tail_start()
/datum/decl/emote/human/fastsway
key = "fastsway"
/datum/decl/emote/human/fastsway/do_emote(mob/living/carbon/human/user)
user.animate_tail_fast()
user.animate_tail_start()
/datum/decl/emote/human/swag
key = "swag"
@@ -2,6 +2,7 @@
#define DATA_X_OFFSET "x"
#define DATA_Y_OFFSET "y"
#define DATA_ROTATION "rotation"
#define DEFAULT_RGB_OUTLINE rgb(50,50,50)
/obj/item/remote_scene_tool/voodoo_doll
name = "voodoo doll"
@@ -84,17 +85,23 @@
output.Scale(data[DATA_SCALE], data[DATA_SCALE])
return output
/obj/item/remote_scene_tool/voodoo_doll/proc/generate_layer_image(image/input, matrix/newtransform, outline_width = 0, outline_color = rgb(50,50,50))
/obj/item/remote_scene_tool/voodoo_doll/proc/generate_layer_image(image/input, matrix/newtransform, outline_width = 0, outline_color = DEFAULT_RGB_OUTLINE)
if(input == null)
return null
input.dir = SOUTH
input.transform = newtransform
input.layer = FLOAT_LAYER
if(outline_width > 0)
input.filters += filter(type="outline", size = outline_width, color = outline_color)
// Please for the love of fuck stop kidnapping taur bodies.
var/image/doll_img = image(input)
return input
doll_img.dir = SOUTH
doll_img.transform = newtransform
doll_img.layer = FLOAT_LAYER
doll_img.plane = FLOAT_PLANE // Strip PLANE_CH_STOMACH or mob-specific planes!
doll_img.appearance_flags = NONE // Strip RESET_PLANE / KEEP_TOGETHER flags!
if(outline_width > 0)
doll_img.filters += filter(type="outline", size = outline_width, color = outline_color)
return doll_img
/obj/item/remote_scene_tool/voodoo_doll/update_icon()
. = ..()
@@ -124,26 +131,34 @@
if(no_fun_mode) return //no fun allowed
if(ishuman(owner)) //TODO, refactor the fuck out of this once I port the tgui filter manager stuff over.
var/image/tail_image = null
if(ishuman(owner)) //Am I a real boy now, papa?
var/mob/living/carbon/human/buddy = owner
var/is_tail_taur = istaurtail(buddy.tail_style)
var/icon/displacement_map = icon(src.icon,is_tail_taur ? "taurdisplacement" : "displacement",SOUTH)
var/image/displacement_rendered = get_humanoid_displacement_map_image(buddy,discarded_layer_indicies,displacement_map,2,null)
var/datum/sprite_accessory/tail/tail_style = buddy.tail_style
var/is_tail_taur = istaurtail(tail_style)
var/icon/displacement_map = icon(src.icon, is_tail_taur ? "taurdisplacement" : "displacement", SOUTH)
var/image/displacement_rendered = get_humanoid_displacement_map_image(buddy, discarded_layer_indicies, displacement_map, 2, null)
//tails need special attention because taurs
var/tailoutlinecolor = rgb(50,50,50) //default to a grey, otherwise we use a darker version of one of the tail colors
if(buddy.tail_style?.do_colouration)
tailoutlinecolor = get_outline_color(buddy.r_tail,buddy.g_tail,buddy.b_tail,buddy.a_tail)
var/tailoutlinecolor = DEFAULT_RGB_OUTLINE //default to a grey, otherwise we use a darker version of one of the tail colors
if(tail_style?.do_colouration)
tailoutlinecolor = get_outline_color(buddy.r_tail, buddy.g_tail, buddy.b_tail, buddy.a_tail)
var/image/tail_image = buddy.get_tail_image()
if(is_tail_taur)
tail_image = generate_layer_image(buddy.get_tail_image(),generate_layer_matrix(taur_data),outline_size,tailoutlinecolor)
tail_image.filters += filter(type="alpha", flags = MASK_INVERSE)
else
tail_image = generate_layer_image(buddy.get_tail_image(),generate_layer_matrix(tail_data),outline_size,tailoutlinecolor)
// Let's get the tail image, checks species and custom tail!
var/image/raw_tail = buddy.get_tail_image()
if(raw_tail)
var/image/full_tail = buddy.apply_tailsock_layer(raw_tail, apply_to_mob = FALSE)
var/matrix/target_matrix = generate_layer_matrix(is_tail_taur ? taur_data : tail_data)
var/image/cooked_tail = generate_layer_image(full_tail, target_matrix, outline_size, tailoutlinecolor)
if(is_tail_taur && cooked_tail)
cooked_tail.filters += filter(type="alpha", flags = MASK_INVERSE)
tail_image = cooked_tail
//same kind of scenario for wings
var/wingoutlinecolor = rgb(50,50,50)
var/wingoutlinecolor = DEFAULT_RGB_OUTLINE
if(buddy.wing_style?.do_colouration)
wingoutlinecolor = get_outline_color(buddy.r_wing,buddy.g_wing,buddy.b_wing,buddy.a_wing)
var/image/wing_image = generate_layer_image(buddy.get_wing_image(FALSE),generate_layer_matrix(wing_data),outline_size,wingoutlinecolor)
@@ -177,6 +192,7 @@
rotateMatrix.Turn(2) //very slight blur. this is unironically the best way to do it, any of the blur filters are just way too strong at a minimum value.
transform = rotateMatrix
#undef DEFAULT_RGB_OUTLINE
#undef DATA_X_OFFSET
#undef DATA_Y_OFFSET
#undef DATA_SCALE
@@ -305,7 +305,10 @@
return
/mob/living/carbon/human/set_dir(new_dir)
var/old_dir = dir
. = ..()
if(. && (species.tail || tail_style))
//we already check our tail through these procs now, tailsock/taur tail overlay needs higher priority to be updated correctly.
//this has specifically been updated to mutable_appearance and is not as costly as it used to be.
if(. && old_dir != new_dir && (old_dir == NORTH || new_dir == NORTH))
update_tail_showing()
update_inv_wear_suit()
@@ -291,3 +291,8 @@
holder.remove_status_indicator("dead")
holder.visible_message(span_warning("\The [src] literally just dies!"))
..()
//Moved flying logic out of update_icons
/mob/living/carbon/human/stop_flying()
if((. = ..()))
update_wing_showing()
@@ -287,8 +287,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
var/icon_x_offset = 0
var/icon_y_offset = 0
if(istype(tail_style, /datum/sprite_accessory/tail/taur)) // Tail icon 'cookie cutters' are filled in where icons are preserved. We need to invert that.
if(tail_style.clip_mask)
if(istype(tail_style, /datum/sprite_accessory/tail)) // Tail icon 'cookie cutters' are filled in where icons are preserved. We need to invert that.
if(tail_style.clip_mask) // trim it if we need to, for taur body types that don't have sprite sheets at all.
Cutter = new(icon = (tail_style.clip_mask_icon ? tail_style.clip_mask_icon : tail_style.icon), icon_state = tail_style.clip_mask_state)
Cutter.Blend("#000000", ICON_MULTIPLY) // Make it all black.
@@ -613,6 +613,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
update_inv_belt()
update_inv_back()
update_inv_wear_suit()
//check for tail related layers, mainly to resolve roundstart/spawn issues
update_tail_showing()
update_inv_r_hand()
update_inv_l_hand()
update_inv_handcuffed()
@@ -631,30 +633,37 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
remove_layer(UNIFORM_LAYER)
//Shoes can be affected by uniform being drawn onto them
// Shoes can be affected by uniform being drawn onto them
update_inv_shoes()
if(!w_uniform)
return
// Wearing a suit that prevents uniform rendering (e.g. non-RIG full suits)
if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space/rig))
return //Wearing a suit that prevents uniform rendering
return
var/obj/item/clothing/under/under = w_uniform
var/uniform_sprite = (istype(under) && !isnull(under.update_icon_define)) ? under.update_icon_define : INV_W_UNIFORM_DEF_ICON
var/uniform_sprite
if(istype(under) && !isnull(under.update_icon_define))
uniform_sprite = under.update_icon_define
else
uniform_sprite = INV_W_UNIFORM_DEF_ICON
var/icon/c_mask = null
//Build a uniform sprite
var/icon/c_mask = tail_style?.clip_mask
if(c_mask)
var/obj/item/clothing/suit/S = wear_suit
if((wear_suit?.flags_inv & HIDETAIL) || (istype(S) && S.taurized)) // Reasons to not mask: 1. If you're wearing a suit that hides the tail or if you're wearing a taurized suit.
c_mask = null
overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_w_uniform_str, default_icon = uniform_sprite, default_layer = UNIFORM_LAYER, clip_mask = c_mask)
// Check if a taur body is active on the mob
var/tail_is_rendered = (overlays_standing[get_tail_layer()] || overlays_standing[TAIL_UPPER_LAYER_HIGH])
// Clip uniform pants/legs off at the waist IF:
// Taur body with a mask and not fitted for taurs. Which is basically all of them lmaooo.
if(tail_is_rendered && tail_style?.clip_mask && (istype(under) && !under.taurized))
c_mask = tail_style.clip_mask
// Build uniform sprite with clip mask applied
overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(
body_type = species.get_bodytype(src),
slot_name = slot_w_uniform_str,
default_icon = uniform_sprite,
default_layer = UNIFORM_LAYER,
clip_mask = c_mask
)
apply_layer(UNIFORM_LAYER)
/mob/living/carbon/human/update_inv_wear_id()
@@ -849,31 +858,37 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
remove_layer(SUIT_LAYER)
//Hide/show other layers if necessary
// Hide/show uniform & shoes
update_inv_w_uniform()
update_inv_shoes()
// Always ensure tail/taur states are updated so overlay existence is current
update_tail_showing()
update_wing_showing()
if(!wear_suit)
return //No point, no suit.
return // No point, no suit.
var/obj/item/clothing/suit/suit = wear_suit
var/suit_sprite
if(istype(suit) && !isnull(suit.update_icon_define))
suit_sprite = suit.update_icon_define
else
suit_sprite = INV_SUIT_DEF_ICON
var/suit_sprite = (istype(suit) && !isnull(suit.update_icon_define)) ? suit.update_icon_define : INV_SUIT_DEF_ICON
var/icon/c_mask = null
var/tail_is_rendered = overlays_standing[TAIL_LOWER_LAYER] || overlays_standing[tail_layering]
var/valid_clip_mask = tail_style?.clip_mask
if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden.
c_mask = valid_clip_mask
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = suit_sprite, default_layer = SUIT_LAYER, clip_mask = c_mask)
// Check if a taur body is active and requires clipping the lower half of the suit off
var/tail_is_rendered = (overlays_standing[get_tail_layer()] || overlays_standing[TAIL_UPPER_LAYER_HIGH])
// Apply the clip mask to trim our suit for taur body fitting
if(tail_is_rendered && tail_style?.clip_mask && !(istype(suit) && suit.taurized))
c_mask = tail_style.clip_mask
// Generate suit overlay
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(
body_type = species.get_bodytype(src),
slot_name = slot_wear_suit_str,
default_icon = suit_sprite,
default_layer = SUIT_LAYER,
clip_mask = c_mask
)
apply_layer(SUIT_LAYER)
/mob/living/carbon/human/update_inv_pockets()
@@ -986,11 +1001,13 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
apply_layer(L_HAND_LAYER)
/mob/living/carbon/human/proc/get_tail_layer()
var/list/lower_layer_dirs = list(SOUTH, EAST, WEST) //Tail below clothing on side views too.
if(tail_style)
var/list/lower_layer_dirs = LOWER_TAIL_DIRS // Tail below clothing on side views too.
if(!tail_style) // Sanity checks good checks.
return
else
lower_layer_dirs = tail_style.lower_layer_dirs.Copy()
if(dir in lower_layer_dirs)
if(istaurtail(tail_style) || (dir in lower_layer_dirs))
return TAIL_LOWER_LAYER
else
return TAIL_UPPER_LAYER
@@ -999,130 +1016,378 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
if(QDESTROYING(src))
return
remove_layer(TAIL_UPPER_LAYER)
remove_layer(TAIL_UPPER_LAYER_HIGH)
remove_layer(TAIL_UPPER_LAYER_LOW)
remove_layer(TAIL_LOWER_LAYER)
// Clear previous tail layer assignments
for(var/layers in TAIL_LAYER_CLEARING)
remove_layer(layers)
var/tail_layer = get_tail_layer()
if(src.tail_style && src.tail_style.clip_mask_state)
tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything
// Use default, let clip mask handle everything
if(tail_style && tail_style.clip_mask_state && !istaurtail(tail_style))
tail_layer = TAIL_UPPER_LAYER
if(tail_layer == TAIL_UPPER_LAYER)
tail_layer = tail_layering
update_vore_tail_sprite()
var/obj/item/organ/external/chest = organs_by_name[BP_TORSO]
var/image/tail_image = get_tail_image()
if(tail_image)
tail_image.layer = BODY_LAYER+tail_layer
overlays_standing[tail_layer] = tail_image
apply_layer(tail_layer)
return
var/species_tail = species?.get_tail(src) // Species tail icon_state prefix.
//This one is actually not that bad I guess.
if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/icon/tail_s = get_tail_icon()
tail_image = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+tail_layer)
tail_image.alpha = chest?.transparent ? 180 : 255
overlays_standing[tail_layer] = tail_image
animate_tail_reset()
// Process tailsock & North-facing layer overrides
// apply_tailsock_layer is our heavy lifter for tail applying!
tail_image = apply_tailsock_layer(tail_image, tail_layer, apply_to_mob = TRUE)
//TODO: Is this the appropriate place for this, and not on species...?
/mob/living/carbon/human/proc/get_tail_icon()
var/icon_key = "[species.get_race_key(src)][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]"
var/icon/tail_icon = GLOB.tail_icon_cache[icon_key]
if(!tail_icon)
//generate a new one
var/species_tail_anim = species.get_tail_animation(src)
if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //Allow override of file for non-animated tails
if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi'
tail_icon = new/icon(species_tail_anim)
tail_icon.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
// The following will not work with animated tails.
var/use_species_tail = species.get_tail_hair(src)
if(use_species_tail)
var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]")
hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //Check for species color_mult
tail_icon.Blend(hair_icon, ICON_OVERLAY)
GLOB.tail_icon_cache[icon_key] = tail_icon
//Yes, and we can make it better too.
/mob/living/carbon/human/proc/get_tail_image_species()
var/race_key = species.get_race_key(src)
var/icon_key = "[race_key]_[r_skin]_[g_skin]_[b_skin]_[r_hair]_[g_hair]_[b_hair]"
return tail_icon
var/mutable_appearance/tail_app = GLOB.tail_icon_cache[icon_key]
if(tail_app)
return image(tail_app)
var/species_tail_anim = species.get_tail_animation(src)
if(!species_tail_anim && species.icobase_tail)
species_tail_anim = species.icobase
if(!species_tail_anim)
species_tail_anim = 'icons/effects/species.dmi'
// Base tail appearance
tail_app = mutable_appearance(species_tail_anim, "[tail_style]")
tail_app.color = rgb(r_skin, g_skin, b_skin)
tail_app.blend_mode = species.color_mult ? BLEND_MULTIPLY : BLEND_ADD
// Hair / Secondary overlay
var/use_species_tail = species.get_tail_hair(src)
if(use_species_tail)
var/tail_species_state = "[species.get_tail(src)]_[use_species_tail]"
var/mutable_appearance/hair_app = mutable_appearance('icons/effects/species.dmi', tail_species_state)
hair_app.color = rgb(r_hair, g_hair, b_hair)
hair_app.blend_mode = species.color_mult ? BLEND_MULTIPLY : BLEND_ADD
tail_app.overlays += hair_app
// Cache the tail for later use
GLOB.tail_icon_cache[icon_key] = tail_app
return image(tail_app)
/mob/living/carbon/human/proc/get_tail_image()
// Pull torso alpha channel information
var/torso_alpha = 255
var/obj/item/organ/external/chest = organs_by_name[BP_TORSO]
if(chest)
torso_alpha = chest.alpha
// Synthetic check
var/datum/robolimb/model = isSynthetic()
if(istype(model) && model.includes_tail && !tail_style && !tail_hidden)
var/mutable_appearance/syn_tail = mutable_appearance(synthetic.icon, "tail")
syn_tail.color = rgb(r_skin, g_skin, b_skin)
var/image/syn_img = image(syn_tail)
syn_img.alpha = torso_alpha
return syn_img
// Custom tail check
if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden)
var/target_icon = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon
var/target_state = (wagging && tail_style.ani_state) ? tail_style.ani_state : tail_style.icon_state
// arrange our taur loafing effects
if(tail_style.can_loaf && !is_shifted)
pixel_y = resting ? -tail_style.loaf_offset * size_multiplier : default_pixel_y
// base tail appearance
var/mutable_appearance/base_tail = mutable_appearance(target_icon, target_state)
if(tail_style.do_colouration)
base_tail.color = rgb(r_tail, g_tail, b_tail)
// basic tail image to build upon
var/image/working = image(icon = target_icon, icon_state = null)
working.overlays += base_tail
if(tail_style.extra_overlay)
var/ex1_state = (wagging && tail_style.ani_state) ? tail_style.extra_overlay_w : tail_style.extra_overlay
var/mutable_appearance/ex1 = mutable_appearance(target_icon, ex1_state)
ex1.color = rgb(r_tail2, g_tail2, b_tail2)
working.overlays += ex1
if(tail_style.extra_overlay2)
var/ex2_state = (wagging && tail_style.ani_state) ? tail_style.extra_overlay2_w : tail_style.extra_overlay2
var/mutable_appearance/ex2 = mutable_appearance(target_icon, ex2_state)
ex2.color = rgb(r_tail3, g_tail3, b_tail3)
working.overlays += ex2
if(tail_style.em_block)
working.overlays += em_block_image_generic(working)
if(istaurtail(tail_style) || islongtail(tail_style))
working.pixel_x = tail_style.offset_x
working.pixel_y = tail_style.offset_y
if(istaurtail(tail_style))
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
if(taurtype.can_ride && !riding_datum)
riding_datum = new /datum/riding/taur(src)
add_verb(src, /mob/living/carbon/human/proc/taur_mount)
add_verb(src, /mob/living/proc/toggle_rider_reins)
// Combine custom tail alpha variable with the torso's alpha channel
working.alpha = (a_tail != null) ? min(a_tail, torso_alpha) : torso_alpha
return working
// no custom tail? let's get the species default then
if(species && tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL) && !tail_hidden)
var/image/species_tail_img = get_tail_image_species()
if(species_tail_img)
species_tail_img.alpha = torso_alpha
return species_tail_img
return null
/mob/living/carbon/human/proc/set_tail_state(t_state)
if(QDESTROYING(src) || !tail_style)
return null
// wag compatibility check
if(tail_style.ani_state)
wagging = (t_state == tail_style.ani_state)
else
wagging = FALSE
// refresh our tail, please ~
update_tail_showing()
var/tail_layer = get_tail_layer()
if(src.tail_style && src.tail_style.clip_mask_state)
tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything
if(tail_layer == TAIL_UPPER_LAYER)
tail_layer = tail_layering
var/image/tail_overlay = overlays_standing[tail_layer]
return overlays_standing[tail_layer]
remove_layer(TAIL_UPPER_LAYER)
remove_layer(TAIL_UPPER_LAYER_HIGH)
remove_layer(TAIL_UPPER_LAYER_LOW)
remove_layer(TAIL_LOWER_LAYER)
//rather than repeatedly trying to assert offsets while rendering the code, let's kick this out into a more managable proc shall we
/mob/living/carbon/human/proc/get_tail_offsets(obj/item/clothing/suit/socksuit, datum/sprite_accessory/tail/tailtype)
var/off_x = tailtype ? tailtype.offset_x : 0
var/off_y = tailtype ? tailtype.offset_y : 0
if(tail_overlay)
overlays_standing[tail_layer] = tail_overlay
if(species.get_tail_animation(src))
tail_overlay.icon_state = t_state
. = tail_overlay
// Add suit offset if the suit isn't using an icon override
if(socksuit && !socksuit.icon_override)
off_x += socksuit.pixel_x
off_y += socksuit.pixel_y
apply_layer(tail_layer)
return list(off_x, off_y)
//Not really once, since BYOND can't do that.
//Update this if the ability to flick() images or make looping animation start at the first frame is ever added.
//You can sort of flick images now with flick_overlay -Aro
/mob/living/carbon/human/proc/animate_tail_once()
if(QDESTROYING(src))
return
/mob/living/carbon/human/proc/apply_tailsock_layer(image/tailoverlays, target_layer, apply_to_mob = TRUE)
if(!tailoverlays)
return null
var/t_state = "[species.get_tail(src)]_once"
var/tail_layer = get_tail_layer()
if(src.tail_style && src.tail_style.clip_mask_state)
tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything
var/obj/item/clothing/suit/socksuit = wear_suit
var/datum/sprite_accessory/tail/tailtype = tail_style
var/image/tail_overlay = overlays_standing[tail_layer]
if(tail_overlay && tail_overlay.icon_state == t_state)
return //let the existing animation finish
// Simplify our offset maths
var/list/offsets = get_tail_offsets(socksuit, tailtype)
var/total_off_x = offsets[1]
var/total_off_y = offsets[2]
tail_overlay = set_tail_state(t_state) // Calls remove_layer & apply_layer
if(tail_overlay)
spawn(20)
//check that the animation hasn't changed in the meantime
if(overlays_standing[tail_layer] == tail_overlay && tail_overlay.icon_state == t_state)
animate_tail_stop()
// Fallback in case target_layer wasn't passed by the parent proc
if(!target_layer)
target_layer = get_tail_layer()
if(!target_layer)
target_layer = tail_layering
/mob/living/carbon/human/proc/animate_tail_start()
if(QDESTROYING(src))
return
var/image/tail_img = image(tailoverlays)
tail_img.layer = target_layer
tail_img.pixel_x = total_off_x
tail_img.pixel_y = total_off_y
set_tail_state("[species.get_tail(src)]_slow[rand(0,9)]")
// Get our tailsock ready
var/has_sock = FALSE
var/icon/sock_icon = null
var/sock_state = null
/mob/living/carbon/human/proc/animate_tail_fast()
if(QDESTROYING(src))
return
if(socksuit && socksuit.requires_tailsock && socksuit.tailsock_toggle && tailtype)
has_sock = TRUE
sock_icon = tailtype.tailsock_icon ? tailtype.tailsock_icon : socksuit.icon
set_tail_state("[species.get_tail(src)]_loop[rand(0,9)]")
if(wagging && tailtype.tailsock_wagicon)
sock_state = tailtype.tailsock_wagicon
else if(tailtype.tailsock_iconstate)
sock_state = tailtype.tailsock_iconstate
else if(socksuit.item_state)
sock_state = socksuit.item_state
var/image/upper_sock_img = null
//whack on our lower layer directional tailsock, if needed
if(has_sock && sock_icon && sock_state)
upper_sock_img = image(icon = sock_icon, icon_state = sock_state)
upper_sock_img.alpha = socksuit.alpha
if(socksuit.tailsock_color)
upper_sock_img.color = socksuit.tailsock_color
if(target_layer != TAIL_LOWER_LAYER)
var/mutable_appearance/sock_overlay = mutable_appearance(sock_icon, sock_state)
if(socksuit.tailsock_color)
sock_overlay.color = socksuit.tailsock_color
//allow sneaky suits to have sneaky suit socks too
sock_overlay.alpha = socksuit.alpha
sock_overlay.layer = FLOAT_LAYER + 0.1
tail_img.overlays += sock_overlay
//we don't need a sock, so let's make a fake tail to appear on top of our clothes because that looks nicer
//We basically have every sock given their markings at this point. If your tail shows, it has its markings too.
else if(tailtype)
//just in case we have a null tailsock_icon somehow
var/icon/sock_mark_icon = tailtype.tailsock_icon ? tailtype.tailsock_icon : tailtype.icon
// If we don't need a sock, and we're not worrying about coloring (snowflake)
if(!tail_style.do_colouration)
var/n_state = (wagging && tailtype.ani_state) ? tailtype.ani_state : tailtype.icon_state
//we'll just get our default as our bonus layer
upper_sock_img = image(icon = tailtype.icon, icon_state = n_state)
// Generate the snipped base tail using the dedicated tailsock icon states instead of the full body state
else
var/n_state = (wagging && tailtype.tailsock_wagicon) ? tailtype.tailsock_wagicon : tailtype.tailsock_iconstate
upper_sock_img = image(icon = sock_mark_icon, icon_state = n_state)
var/mutable_appearance/base_north = mutable_appearance(sock_mark_icon, n_state)
if(tailtype.do_colouration)
base_north.color = rgb(r_tail, g_tail, b_tail)
upper_sock_img.overlays += base_north
// Attach secondary markings if present
if(tailtype.tailsock_markings)
var/m1_nstate = (wagging) ? tailtype.tailsock_wagmarkings : tailtype.tailsock_markings
var/mutable_appearance/m1_north = mutable_appearance(sock_mark_icon, m1_nstate)
m1_north.color = rgb(r_tail2, g_tail2, b_tail2)
m1_north.layer = FLOAT_LAYER + 0.01
upper_sock_img.overlays += m1_north
if(tailtype.tailsock_markings2)
var/m2_nstate = (wagging) ? tailtype.tailsock_wagmarkings2 : tailtype.tailsock_markings2
var/mutable_appearance/m2_north = mutable_appearance(sock_mark_icon, m2_nstate)
m2_north.color = rgb(r_tail3, g_tail3, b_tail3)
m2_north.layer = FLOAT_LAYER + 0.02
upper_sock_img.overlays += m2_north
//voodoo protection of butt theft
if(apply_to_mob)
//paste normal tail on their intended level
overlays_standing[target_layer] = tail_img
apply_layer(target_layer)
// apply our taur sock to its correct layer, voodoo is south only so should be fine... right?? Right byond?????
if(upper_sock_img)
//backpacks render over everything north face unless this is specifically set higher on the image.layer - even if it's in the higher index....
//have I mentioned how much I hate this system??
upper_sock_img.layer = TAIL_UPPER_LAYER_HIGH
upper_sock_img.pixel_x = total_off_x
upper_sock_img.pixel_y = total_off_y
overlays_standing[TAIL_UPPER_LAYER_HIGH] = upper_sock_img
apply_layer(TAIL_UPPER_LAYER_HIGH)
return tail_img
/mob/living/carbon/human/proc/animate_tail_reset()
if(QDESTROYING(src))
if(QDESTROYING(src) || !tail_style)
return
if(stat != DEAD)
set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]")
if(stat == DEAD)
set_tail_state(tail_style.icon_state)
toggle_tail(FALSE) // Stop wagging on death
else
set_tail_state("[species.get_tail(src)]_static")
toggle_tail(FALSE) //So tails stop when someone dies. TODO - Fix this hack ~Leshana
// Resets tail state based on current wagging flag
set_tail_state(wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)
/mob/living/carbon/human/proc/animate_tail_start()
if(QDESTROYING(src) || !tail_style)
return
toggle_tail(TRUE)
if(tail_style.ani_state)
set_tail_state(tail_style.ani_state)
/mob/living/carbon/human/proc/animate_tail_stop()
if(QDESTROYING(src) || !tail_style)
return
toggle_tail(FALSE)
set_tail_state(tail_style.icon_state)
/mob/living/carbon/human/proc/update_vore_belly_sprite()
if(QDESTROYING(src))
return
set_tail_state("[species.get_tail(src)]_static")
remove_layer(VORE_BELLY_LAYER)
var/image/vore_belly_image = get_vore_belly_image()
if(vore_belly_image)
vore_belly_image.layer = BODY_LAYER+VORE_BELLY_LAYER
overlays_standing[VORE_BELLY_LAYER] = vore_belly_image
vore_belly_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT.
vore_belly_image.appearance_flags = appearance_flags
apply_layer(VORE_BELLY_LAYER)
/mob/living/carbon/human/proc/get_vore_belly_image()
if(!(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/vs_fullness = vore_fullness_ex["stomach"]
var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Bellies.dmi', icon_state = "[species.vore_belly_default_variant]Belly[vs_fullness][struggle_anim_stomach ? "" : " idle"]")
vorebelly_s.Blend(vore_sprite_color["stomach"], vore_sprite_multiply["stomach"] ? ICON_MULTIPLY : ICON_ADD)
var/image/working = image(vorebelly_s)
working.overlays += em_block_image_generic(working)
return working
return null
/mob/living/carbon/human/proc/vore_belly_animation()
if(!struggle_anim_stomach)
struggle_anim_stomach = TRUE
update_vore_belly_sprite()
spawn(1.2 SECONDS)
struggle_anim_stomach = FALSE
update_vore_belly_sprite()
/mob/living/carbon/human/proc/update_vore_tail_sprite()
if(QDESTROYING(src))
return
remove_layer(VORE_TAIL_LAYER)
var/image/vore_tail_image = get_vore_tail_image()
if(vore_tail_image)
vore_tail_image.layer = BODY_LAYER + VORE_TAIL_LAYER
// This one line of code. THIS ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT.
vore_tail_image.plane = PLANE_CH_STOMACH
vore_tail_image.appearance_flags = appearance_flags
overlays_standing[VORE_TAIL_LAYER] = vore_tail_image
apply_layer(VORE_TAIL_LAYER)
/mob/living/carbon/human/proc/get_vore_tail_image()
if(!tail_style || !istaurtail(tail_style) || !tail_style.vore_tail_sprite_variant)
return null
var/vs_fullness = vore_fullness_ex["taur belly"]
var/loaf_alt = lying && tail_style.belly_variant_when_loaf
var/fullness_icons = min(tail_style.fullness_icons, vs_fullness)
var/target_state = "Taur[tail_style.vore_tail_sprite_variant]-Belly-[fullness_icons][loaf_alt ? " loaf" : (struggle_anim_taur ? "" : " idle")]"
//optimizing this with mutable_appearance, since it includes support for animations!
var/mutable_appearance/vorebelly_ma = mutable_appearance(tail_style.bellies_icon_path, target_state)
var/obj/item/clothing/suit/sockable = wear_suit
//scootchin' on by here to tailsock the tummy since it's important.
if(sockable && sockable.tailsock_toggle && sockable.tailsock_color)
vorebelly_ma.color = sockable.tailsock_color
else
var/base_color = vore_sprite_color["taur belly"]
vorebelly_ma.color = base_color
var/image/working = image(vorebelly_ma)
working.pixel_x = -16
if(tail_style.em_block) // Let 'em glow still
working.overlays += em_block_image_generic(working)
return working
/mob/living/carbon/human/proc/vore_tail_animation()
if(tail_style.struggle_anim && !struggle_anim_taur)
struggle_anim_taur = TRUE
update_vore_tail_sprite()
spawn(12)
// Prevent runtimes if the mob is destroyed while the animation timer was ticking
if(!src || QDESTROYING(src))
return
struggle_anim_taur = FALSE
update_vore_tail_sprite()
/mob/living/carbon/human/proc/update_wing_showing()
if(QDESTROYING(src))
@@ -1133,18 +1398,70 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
var/image/wing_image = get_wing_image(FALSE)
// Fetch wear_suit and check for tailsock coloration, because it makes sense to.
var/obj/item/clothing/suit/socksuit = wear_suit
var/wing_color = (istype(socksuit) && socksuit.requires_tailsock && socksuit.tailsock_toggle && socksuit.tailsock_color) ? socksuit.tailsock_color : null
if(wing_image)
wing_image.layer = BODY_LAYER+WING_LAYER
wing_image.layer = BODY_LAYER + WING_LAYER
if(wing_color)
wing_image.color = wing_color
overlays_standing[WING_LAYER] = wing_image
if(wing_style && wing_style.multi_dir)
wing_image = get_wing_image(TRUE)
if(wing_image)
wing_image.layer = BODY_LAYER+WING_LOWER_LAYER
wing_image.layer = BODY_LAYER + WING_LOWER_LAYER
if(wing_color)
wing_image.color = wing_color
overlays_standing[WING_LOWER_LAYER] = wing_image
apply_layer(WING_LAYER)
apply_layer(WING_LOWER_LAYER)
/mob/living/carbon/human/proc/get_wing_image(under_layer)
if(QDESTROYING(src))
return
//If you are FBP with wing style and didn't set a custom one
if(synthetic && synthetic.includes_wing && !wing_style && !wings_hidden)
var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing?
wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
var/image/working = image(wing_s)
working.overlays += em_block_image_generic(working) // Leaving this as overlays +=
return working
//If you have custom wings selected
if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL) && !wings_hidden)
var/wing_state = (flapping && wing_style.ani_state) ? wing_style.ani_state : wing_style.icon_state
if(wing_style.multi_dir)
wing_state += "_[under_layer ? "back" : "front"]"
var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = wing_state)
if(wing_style.do_colouration)
wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode)
if(wing_style.extra_overlay)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay)
overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(wing_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2)
if(wing_style.ani_state)
overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
var/image/working = image(wing_s)
working.alpha = src.a_wing
if(wing_style.em_block)
working.overlays += em_block_image_generic(working) // Leaving this as overlays +=
working.pixel_x -= wing_style.wing_offset
return working
/mob/living/carbon/human/update_modifier_visuals()
if(QDESTROYING(src))
return
@@ -1220,49 +1537,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
overlays_standing[SURGERY_LAYER] = total
apply_layer(SURGERY_LAYER)
/mob/living/carbon/human/proc/get_wing_image(under_layer)
if(QDESTROYING(src))
return
//If you are FBP with wing style and didn't set a custom one
if(synthetic && synthetic.includes_wing && !wing_style && !wings_hidden)
var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing?
wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
var/image/working = image(wing_s)
working.overlays += em_block_image_generic(working) // Leaving this as overlays +=
return working
//If you have custom wings selected
if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL) && !wings_hidden)
var/wing_state = (flapping && wing_style.ani_state) ? wing_style.ani_state : wing_style.icon_state
if(wing_style.multi_dir)
wing_state += "_[under_layer ? "back" : "front"]"
var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = wing_state)
if(wing_style.do_colouration)
wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode)
if(wing_style.extra_overlay)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay)
overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(wing_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2)
if(wing_style.ani_state)
overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
var/image/working = image(wing_s)
working.alpha = src.a_wing
if(wing_style.em_block)
working.overlays += em_block_image_generic(working) // Leaving this as overlays +=
working.pixel_x -= wing_style.wing_offset
return working
/mob/living/carbon/human/proc/get_ears_overlay()
//If you are FBP with ear style and didn't set a custom one
var/datum/robolimb/model = isSynthetic()
@@ -1319,145 +1593,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) //see UpdateDamageIcon()
return rendered
/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()
if(istype(model) && model.includes_tail && !tail_style && !tail_hidden)
var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail")
tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(tail_s)
//If you have a custom tail selected
if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden)
var/icon/tail_s = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state))
if(tail_style.can_loaf && !is_shifted)
pixel_y = (resting) ? -tail_style.loaf_offset*size_multiplier : default_pixel_y //move player down, then taur up, to fit the overlays correctly. Taur Loafing
if(tail_style.do_colouration)
tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode)
if(tail_style.extra_overlay)
var/icon/overlay = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay)
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay_w)
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(tail_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2)
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
var/image/working = image(tail_s)
if(tail_style.em_block)
working.overlays += em_block_image_generic(working) // Leaving this as overlays +=
if(istaurtail(tail_style))
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
working.pixel_x = tail_style.offset_x
working.pixel_y = tail_style.offset_y
if(taurtype.can_ride && !riding_datum)
riding_datum = new /datum/riding/taur(src)
add_verb(src, /mob/living/carbon/human/proc/taur_mount)
add_verb(src, /mob/living/proc/toggle_rider_reins)
else if(islongtail(tail_style))
working.pixel_x = tail_style.offset_x
working.pixel_y = tail_style.offset_y
working.alpha = src.a_tail
return working
return null
// TODO - Move this to where it should go ~Leshana
/mob/living/proc/stop_flying()
if(QDESTROYING(src))
return
flying = FALSE
return 1
/mob/living/carbon/human/stop_flying()
if((. = ..()))
update_wing_showing()
/mob/living/carbon/human/proc/update_vore_belly_sprite()
if(QDESTROYING(src))
return
remove_layer(VORE_BELLY_LAYER)
var/image/vore_belly_image = get_vore_belly_image()
if(vore_belly_image)
vore_belly_image.layer = BODY_LAYER+VORE_BELLY_LAYER
overlays_standing[VORE_BELLY_LAYER] = vore_belly_image
vore_belly_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT.
vore_belly_image.appearance_flags = appearance_flags
apply_layer(VORE_BELLY_LAYER)
/mob/living/carbon/human/proc/get_vore_belly_image()
if(!(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/vs_fullness = vore_fullness_ex["stomach"]
var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Bellies.dmi', icon_state = "[species.vore_belly_default_variant]Belly[vs_fullness][struggle_anim_stomach ? "" : " idle"]")
vorebelly_s.Blend(vore_sprite_color["stomach"], vore_sprite_multiply["stomach"] ? ICON_MULTIPLY : ICON_ADD)
var/image/working = image(vorebelly_s)
working.overlays += em_block_image_generic(working)
return working
return null
/mob/living/carbon/human/proc/vore_belly_animation()
if(!struggle_anim_stomach)
struggle_anim_stomach = TRUE
update_vore_belly_sprite()
spawn(12)
struggle_anim_stomach = FALSE
update_vore_belly_sprite()
/mob/living/carbon/human/proc/update_vore_tail_sprite()
if(QDESTROYING(src))
return
remove_layer(VORE_TAIL_LAYER)
var/image/vore_tail_image = get_vore_tail_image()
if(vore_tail_image)
vore_tail_image.layer = BODY_LAYER+VORE_TAIL_LAYER
overlays_standing[VORE_TAIL_LAYER] = vore_tail_image
vore_tail_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT.
vore_tail_image.appearance_flags = appearance_flags
apply_layer(VORE_TAIL_LAYER)
/mob/living/carbon/human/proc/get_vore_tail_image()
if(tail_style && istaurtail(tail_style) && tail_style.vore_tail_sprite_variant)
var/vs_fullness = vore_fullness_ex["taur belly"]
var/loaf_alt = lying && tail_style.belly_variant_when_loaf
var/fullness_icons = min(tail_style.fullness_icons, vs_fullness)
var/icon/vorebelly_s = new/icon(icon = tail_style.bellies_icon_path, icon_state = "Taur[tail_style.vore_tail_sprite_variant]-Belly-[fullness_icons][loaf_alt ? " loaf" : (struggle_anim_taur ? "" : " idle")]")
vorebelly_s.Blend(vore_sprite_color["taur belly"], vore_sprite_multiply["taur belly"] ? ICON_MULTIPLY : ICON_ADD)
var/image/working = image(vorebelly_s)
working.pixel_x = -16
if(tail_style.em_block)
working.overlays += em_block_image_generic(working)
return working
return null
/mob/living/carbon/human/proc/vore_tail_animation()
if(tail_style.struggle_anim && !struggle_anim_taur)
struggle_anim_taur = TRUE
update_vore_tail_sprite()
spawn(12)
struggle_anim_taur = FALSE
update_vore_tail_sprite()
/mob/living/carbon/human/proc/GetAppearanceFromPrefs(flavourtext, oocnotes)
/* Jank code that effectively creates the client's mob from save, then copies its appearance to our current mob.
Intended to be used with shapeshifter species so we don't reset their organs in doing so.*/
+7 -1
View File
@@ -1,8 +1,14 @@
/mob/living/Check_Shoegrip()
if(flying)
return 1
return TRUE
..()
/mob/living/proc/stop_flying()
if(QDESTROYING(src))
return
flying = FALSE
return TRUE
/mob/living/verb/customsay()
set category = "IC.Settings"
set name = "Customize Speech Verbs"
@@ -14,7 +14,7 @@
em_block = TRUE
var/extra_overlay // Icon state of an additional overlay to blend in.
var/extra_overlay2 //Tertiary.
var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it. If the clothing is bulky enough to hide a tail, it should also hide wings.
var/clothing_can_hide = TRUE // If true, clothing with HIDETAIL hides it. If the clothing is bulky enough to hide a tail, it should also hide wings.
// var/show_species_tail = 1 // Just so // TODO - Seems not needed ~Leshana
var/desc = DEVELOPER_WARNING_NAME
var/ani_state // State when flapping/animated
@@ -1,10 +1,10 @@
/*
////////////////////////////
/ =--------------------= /
/ == Tail Definitions == /
/ =--------------------= /
/ =OLD Tail Definitions= /
/ =-FOR REFERENCE ONLY-= /
////////////////////////////
*/
/datum/sprite_accessory/tail
name = DEVELOPER_WARNING_NAME
icon = 'icons/mob/human_races/sprite_accessories/tails.dmi'
@@ -33,7 +33,7 @@
///ADDITIONALLY, IF YOU ADD A SPECIAL VWAG, YOU NEED TO INCLUDE ani_state, extra_overlay_w, and extra_overlay2_w INTO icon_loaf TOO!
var/can_loaf = FALSE
var/loaf_offset = 0
var/list/lower_layer_dirs = list(SOUTH, WEST, EAST)
var/list/lower_layer_dirs = LOWER_TAIL_DIRS
var/icon_loaf = null
// Taur Vore
@@ -281,6 +281,7 @@
name = "xenomorph tail 2"
desc = ""
icon_state = "xenotail"
do_colouration = FALSE
/datum/sprite_accessory/tail/eboop
name = "EGN mech tail (dual color)"
@@ -825,6 +826,7 @@
name = "Zeng-Hu Tajaran Synth tail"
desc = ""
icon_state = "zenghu_taj"
do_colouration = FALSE
//Taurs moved to a separate file due to extra code around them
@@ -1982,4 +1984,4 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "chu_markings"
extra_overlay2 = "chu_tipmarkings"
extra_overlay2 = "chu_tipmarkings"*/
@@ -8,7 +8,6 @@
/datum/sprite_accessory/tail
name = DEVELOPER_WARNING_NAME
var/desc = DEVELOPER_WARNING_NAME
// icon = 'icons/mob/human_races/sprite_accessories/tails.dmi'
do_colouration = TRUE //Set to FALSE to disable coloration using the tail color.
/// Only appliciable if do_coloration = TRUE, ICON_MULTIPLY is a white bias, ICON_ADD is a black bias for colorations of sprites.
/// Virtually all sprites now are white-biased greyscale. The ones that aren't are pre-colored, typically donator snowflake.
@@ -34,7 +33,7 @@
///ADDITIONALLY, IF YOU ADD A SPECIAL VWAG, YOU NEED TO INCLUDE ani_state, extra_overlay_w, and extra_overlay2_w INTO icon_loaf TOO!
var/can_loaf = FALSE
var/loaf_offset = 0
var/list/lower_layer_dirs = list(SOUTH, WEST, EAST)
var/list/lower_layer_dirs = LOWER_TAIL_DIRS
var/icon_loaf = null
// Taur Vore
@@ -44,10 +43,42 @@
var/struggle_anim = FALSE
var/bellies_icon_path = 'icons/mob/vore/Taur_Bellies.dmi'
// Tail Socks
/// This can usually be the default icon, since the base icon is a complete unit.
/// Taur tails are snipped off to account for the butt positioning being easier to deal with.
var/tailsock_icon
var/tailsock_iconstate
/// Same for wag states, we just need the sprite itself, not any of the custom overlays
/// Fat Taur additions are just the belly variant, we layer this one before the vore one to account for that too.
var/tailsock_wagicon
// Vore belly overlays are handled in update_icons, because we just overlay the tummy colored to the tailsock if we're wearing a suit and it has a sock enabled.
// For north facing taur tails, using the sock + whatever tail related markings are visible when not in a sock but need to be drawn higher up.
// These are set to "none" to prevent null icon state issues
var/tailsock_markings = "none"
var/tailsock_markings2 = "none"
var/tailsock_wagmarkings = "none"
var/tailsock_wagmarkings2 = "none"
/datum/sprite_accessory/tail/New()
. = ..()
if(clip_mask_state)
clip_mask = icon(icon = (clip_mask_icon ? clip_mask_icon : icon), icon_state = clip_mask_state)
//because the compiler doesn't like this being preset I guess whatever loser.
if(!tailsock_icon)
tailsock_icon = initial(icon)
if(!tailsock_iconstate)
tailsock_iconstate = initial(icon_state)
if(!tailsock_wagicon)
tailsock_wagicon = initial(ani_state)
//use the same naming conventions, these are for north face stuff. follows the icon file anyway, so tail_whatever, tail_sock
if(extra_overlay)
tailsock_markings = extra_overlay
if(extra_overlay2)
tailsock_markings2 = extra_overlay2
if(extra_overlay_w)
tailsock_wagmarkings = extra_overlay_w
if(extra_overlay2_w)
tailsock_wagmarkings2 = extra_overlay2_w
// Default invis tail
/datum/sprite_accessory/tail/invisible
@@ -88,12 +88,21 @@
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_animal.dmi'
icon_state = "wagtail"
/datum/sprite_accessory/tail/peacocktail //it's been a long enough while, I'm gunna go ahead and just...
name = "Peacock tail, colorable (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_animal.dmi'
icon_state = "peacocktail"
ani_state = "peacocktail_w"
do_colouration = TRUE
/datum/sprite_accessory/tail/ketrai_wag
name = "fennix tail (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_animal.dmi'
icon_state = "ketraitail"
ani_state = "ketraitail_w"
do_colouration = FALSE
tailsock_iconstate = "ketraitail_sock"
tailsock_wagicon = "ketraitail_w_sock"
/datum/sprite_accessory/tail/ketrainew_wag
name = "new fennix tail (vwag)"
@@ -101,6 +110,8 @@
icon_state = "ketraitailnew"
ani_state = "ketraitailnew_w"
do_colouration = FALSE
tailsock_iconstate = "ketraitailnew_sock"
tailsock_wagicon = "ketraitailnew_w_sock"
/datum/sprite_accessory/tail/redpanda
name = "red panda"
@@ -234,6 +245,7 @@
name = "Kitsune 2 tails, colorable"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_animal.dmi'
icon_state = "doublekitsune"
extra_overlay = "doublekitsune-tips"
/datum/sprite_accessory/tail/doublekitsunealt
name = "Kitsune 2 tails, colorable, alt"
@@ -331,6 +343,7 @@
name = "turkey"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_animal.dmi'
icon_state = "turkey"
do_colouration = FALSE
/datum/sprite_accessory/tail/shark_markings
name = "akula tail, colorable, tail and fins"
@@ -392,6 +405,7 @@
name = "Raccoon gray tail"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_animal.dmi'
icon_state = "raccoon_tail"
tailsock_iconstate = "raccoon_tail_sock"
do_colouration = FALSE
/datum/sprite_accessory/tail/striped_tail
@@ -3,6 +3,7 @@
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_bug.dmi'
icon_state = "beethorax"
do_colouration = FALSE
tailsock_iconstate = "beethorax_sock"
/datum/sprite_accessory/tail/buggo
name = "Bug abdomen, colorable"
@@ -13,13 +13,13 @@
/datum/sprite_accessory/tail/nevreanwagdc
name = "nevrean wagtail, dual-color"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_exotic.dmi'
icon_state = "wagtail"
icon_state = "nevreanwagtail"
extra_overlay = "wagtail_dc_tail"
/datum/sprite_accessory/tail/nevreanwagdc_alt
name = "nevrean wagtail, marked, dual-color"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_exotic.dmi'
icon_state = "wagtail2_dc"
icon_state = "nevreanwagtail2_dc"
extra_overlay = "wagtail2_dc_mark"
/datum/sprite_accessory/tail/spade_color
@@ -38,11 +38,14 @@
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_exotic.dmi'
icon_state = "snag"
do_colouration = FALSE
tailsock_iconstate = "snag_sock"
/datum/sprite_accessory/tail/xenotail
name = "xenomorph tail 2"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_exotic.dmi'
icon_state = "xenotail"
do_colouration = FALSE
tailsock_iconstate = "xenotail_sock"
/datum/sprite_accessory/tail/xenotail_fullcolour
name = "xenomorph tail (fully colourable)"
@@ -94,12 +97,15 @@
name = "tailmaw, colorable"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_exotic.dmi'
icon_state = "tailmaw"
tailsock_iconstate = "tailmaw_sock"
/datum/sprite_accessory/tail/newtailmaw
name = "new tailmaw (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_exotic.dmi'
icon_state = "newtailmaw"
tailsock_iconstate = "tailmaw_sock"
ani_state = "newtailmaw_w"
tailsock_wagicon = "tailmaw_w_sock"
/datum/sprite_accessory/tail/shadekin_short
name = "Shadekin Short Tail, colorable"
@@ -104,14 +104,12 @@
/datum/sprite_accessory/tail/longtail/flagtail
name = "Flagtail"
icon = 'icons/rogue-star/tails_64x32_rs.dmi'
icon_state = "flagtail"
extra_overlay = "flagtail-1"
extra_overlay2 = "flagtail-2"
/datum/sprite_accessory/tail/longtail/chonksqrl
name = "Squirrel (Big)"
icon = 'icons/rogue-star/tails_64x32_rs.dmi'
icon_state = "chonksqrl"
extra_overlay = "chonksqrl-m1"
extra_overlay2 = "chonksqrl-m2"
@@ -24,36 +24,28 @@
icon_state = "bigsnaketail"
ani_state = "bigsnaketail_w"
/datum/sprite_accessory/tail/bigsnaketailstripes
/datum/sprite_accessory/tail/bigsnaketail/stripes
name = "large snake tail, striped (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_reptile.dmi'
icon_state = "bigsnaketailstripes"
extra_overlay = "bigsnaketailstripes-tips"
ani_state = "bigsnaketailstripes_w"
extra_overlay_w = "bigsnaketailstripes-tips_w"
/datum/sprite_accessory/tail/bigsnaketailstripes_alt
/datum/sprite_accessory/tail/bigsnaketail/stripes_alt
name = "large snake tail, striped, alt (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_reptile.dmi'
icon_state = "bigsnaketailstripesalt"
extra_overlay = "bigsnaketailstripesalt-tips"
ani_state = "bigsnaketailstripesalt_w"
extra_overlay_w = "bigsnaketailstripesalt-tips_w"
/datum/sprite_accessory/tail/bigsnaketaildual
/datum/sprite_accessory/tail/bigsnaketail/dual
name = "large snake tail, dual color (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_reptile.dmi'
icon_state = "bigsnaketaildual"
extra_overlay = "bigsnaketaildual-tips"
ani_state = "bigsnaketaildual_w"
extra_overlay_w = "bigsnaketaildual-tips_w"
/datum/sprite_accessory/tail/bigsnaketailunder
/datum/sprite_accessory/tail/bigsnaketail/under
name = "large snake tail, under (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_reptile.dmi'
icon_state = "bigsnaketailunder"
extra_overlay = "bigsnaketailunder-tips"
ani_state = "bigsnaketailunder_w"
extra_overlay_w = "bigsnaketailunder-tips_w"
/datum/sprite_accessory/tail/tail_smooth
@@ -62,11 +54,11 @@
icon_state = "tail_smooth"
ani_state = "tail_smooth_w"
/datum/sprite_accessory/tail/tail_smooth_dual
/datum/sprite_accessory/tail/tail_smooth/dual
name = "Smooth Lizard Tail, dual color"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_reptile.dmi'
icon_state = "tail_smooth"
extra_overlay = "tail_smooth_markings"
extra_overlay_w = "tail_smooth_w_markings"
/datum/sprite_accessory/tail/Easterntail
name = "Eastern Dragon (Animated)"
@@ -112,6 +104,7 @@
name = "kururak tail"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_reptile.dmi'
icon_state = "kururak"
do_colouration = FALSE
/datum/sprite_accessory/tail/snaketail_stripes
name = "snake tail with stripes, dual-color"
@@ -5,14 +5,8 @@
ani_state = "peacocktail_red_w"
ckeys_allowed = list("prettiebyrd")
do_colouration = FALSE
/datum/sprite_accessory/tail/peacocktail //ditto
name = "Peacock tail, colorable (vwag)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_snowflake.dmi'
icon_state = "peacocktail"
ani_state = "peacocktail_w"
do_colouration = FALSE
ckeys_allowed = list("prettiebyrd")
tailsock_iconstate = "peacocktail_red_sock"
tailsock_wagicon = "peacocktail_red_w_sock"
/datum/sprite_accessory/tail/perrin_tentacles
name = "octopus tentacles"
@@ -20,6 +14,7 @@
icon_state = "perrintentacles"
ckeys_allowed = list("codeme", "siennaathens")
do_colouration = FALSE
tailsock_iconstate = "perrintentacles_sock"
/datum/sprite_accessory/tail/kara //SatinIsle fluff item
name = "Pterokara Tail"
@@ -27,6 +22,7 @@
icon_state = "kara_tail"
ckeys_allowed = list("satinisle")
do_colouration = FALSE
tailsock_iconstate = "kara_tail_sock"
/datum/sprite_accessory/tail/molenar_kitsune
name = "quintail kitsune tails (Molenar)"
@@ -34,6 +30,7 @@
icon_state = "molenar-kitsune"
ckeys_allowed = list("molenar")
do_colouration = FALSE
tailsock_iconstate = "molenar-kitsune_sock"
/datum/sprite_accessory/tail/miria_fluffdragon
name = "fluffdragon tail (Miria Masters)"
@@ -41,6 +38,7 @@
icon_state = "miria-fluffdragontail"
ckeys_allowed = list("miriamasters")
do_colouration = FALSE
tailsock_iconstate = "miria-fluffdragontail_sock"
/datum/sprite_accessory/tail/miria_kitsune
name = "Black kitsune tails (Miria Masters)"
@@ -48,6 +46,7 @@
icon_state = "miria-kitsunetail"
ckeys_allowed = list("miriamasters")
do_colouration = FALSE
tailsock_iconstate = "miria-kitsunetail_sock"
/datum/sprite_accessory/tail/molenar_deathclaw
name = "deathclaw bits (Molenar)"
@@ -55,6 +54,7 @@
icon_state = "molenar-deathclaw"
ckeys_allowed = list("molenar","silvertalismen","jertheace")
do_colouration = FALSE
tailsock_iconstate = "molenar-deathclaw_sock"
/datum/sprite_accessory/tail/runac
name = "fennecsune tails (Runac)"
@@ -62,6 +62,7 @@
icon_state = "runac"
ckeys_allowed = list("rebcom1807")
do_colouration = FALSE
tailsock_iconstate = "runac_sock"
/datum/sprite_accessory/tail/reika //Leaving this since it was too hard to split the wings from the tail.
name = "fox tail (+ beewings) (Reika)"
@@ -69,6 +70,7 @@
icon_state = "reika"
ckeys_allowed = list("rikaru19xjenkins")
do_colouration = FALSE
tailsock_iconstate = "reika_sock"
/datum/sprite_accessory/tail/rosey
name = "tritail kitsune tails (Rosey)"
@@ -76,6 +78,7 @@
icon_state = "rosey_three"
ckeys_allowed = list("joey4298")
do_colouration = FALSE
tailsock_iconstate = "rosey_three_sock"
/datum/sprite_accessory/tail/rosey2
name = "pentatail kitsune tails (Rosey)" //I predict seven tails next. ~CK
@@ -83,6 +86,15 @@
icon_state = "rosey_five"
do_colouration = FALSE
ckeys_allowed = list("joey4298")
tailsock_iconstate = "rosey_five_sock"
/datum/sprite_accessory/tail/longtail/roiz_long_lizard
name = "Long Lizard Tail (Roiz Lizden)"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_long.dmi'
icon_state = "roiz_tail_s"
do_colouration = FALSE
ckeys_allowed = list("spoopylizz")
tailsock_iconstate = "roiz_tail_sock"
/datum/sprite_accessory/tail/scree
name = "green taj tail (Scree)"
@@ -90,6 +102,7 @@
icon_state = "scree"
ckeys_allowed = list("scree")
do_colouration = FALSE
tailsock_iconstate = "scree_sock"
/datum/sprite_accessory/tail/aronai
name = "aronai tail (Aronai)"
@@ -97,6 +110,7 @@
icon_state = "aronai"
ckeys_allowed = list("arokha")
do_colouration = FALSE
tailsock_iconstate = "aronai_sock"
/datum/sprite_accessory/tail/cabletail
name = "cabletail"
@@ -104,6 +118,7 @@
icon_state = "tuckercabletail"
ckeys_allowed = list("tucker0666")
do_colouration = FALSE
tailsock_iconstate = "tuckercabletail_sock"
/datum/sprite_accessory/tail/featherfluff_tail
name = "featherfluff_tail"
@@ -111,6 +126,7 @@
icon_state = "tuckerfeather_tail"
ckeys_allowed = list("tucker0666")
do_colouration = FALSE
tailsock_iconstate = "tuckerfeather_tail_sock"
/datum/sprite_accessory/tail/holly
name = "tigress tail (Holly)"
@@ -118,3 +134,4 @@
icon_state = "hoodootail"
ckeys_allowed = list("hoodoo")
do_colouration = FALSE
tailsock_iconstate = "hoodootail_sock"
@@ -8,6 +8,7 @@
name = "Zeng-Hu Tajaran Synth tail"
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_synth.dmi'
icon_state = "zenghu_taj"
do_colouration = FALSE
/datum/sprite_accessory/tail/wartacosushi_tail //brightened +20RGB from matching roboparts
name = "Ward-Takahashi Tail"
@@ -52,6 +52,7 @@
icon = 'icons/mob/human_races/sprite_accessories/tails/tails_teshari.dmi'
icon_state = "beethorax_tesh"
do_colouration = FALSE
tailsock_iconstate = "beethorax_tesh_sock"
/datum/sprite_accessory/tail/teshbuggo
name = "Teshari bug abdomen, colorable"
@@ -27,7 +27,8 @@
clip_mask_icon = 'icons/mob/human_races/sprite_accessories/biglegs.dmi'
clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
/datum/sprite_accessory/tail/taur/bigleggy
//By making big leggy a subtype of longtail, it gets the offset but doesn't conflict with taur specific settings.
/datum/sprite_accessory/tail/longtail/bigleggy
name = "Big Leggies"
icon = 'icons/mob/human_races/sprite_accessories/biglegs.dmi'
icon_state = "bigleggy"
@@ -36,46 +37,47 @@
fullness_icons = 3
ani_state = "bigleggy_stanced"
extra_overlay_w = "bigleggy_markings_stanced"
clip_mask_icon = 'icons/mob/human_races/sprite_accessories/biglegs.dmi'
clip_mask_state = "taur_clip_mask_def" //Leaving this here to make it clear it it's INTENTIONAL it shows above clothes. Use the marking if you want it to show UNDER clothes!
/datum/sprite_accessory/tail/taur/bigleggy/canine
/datum/sprite_accessory/tail/longtail/bigleggy/canine
name = "Big Leggies (Canine Tail)"
extra_overlay2 = "bigleggy_canine"
extra_overlay2_w = "bigleggy_canine"
/datum/sprite_accessory/tail/taur/bigleggy/feline
/datum/sprite_accessory/tail/longtail/bigleggy/feline
name = "Big Leggies (Feline Tail)"
extra_overlay2 = "bigleggy_feline"
extra_overlay2_w = "bigleggy_feline"
/datum/sprite_accessory/tail/taur/bigleggy/reptile
/datum/sprite_accessory/tail/longtail/bigleggy/reptile
name = "Big Leggies (Reptile Tail)"
extra_overlay2 = "bigleggy_reptile"
extra_overlay2_w = "bigleggy_reptile"
/datum/sprite_accessory/tail/taur/bigleggy/snake
/datum/sprite_accessory/tail/longtail/bigleggy/snake
name = "Big Leggies (Snake Tail)"
extra_overlay2 = "bigleggy_snake"
extra_overlay2_w = "bigleggy_snake"
/datum/sprite_accessory/tail/taur/bigleggy/fox
/datum/sprite_accessory/tail/longtail/bigleggy/fox
name = "Big Leggies (Fox Tail)"
extra_overlay2 = "bigleggy_vulpine"
extra_overlay2_w = "bigleggy_vulpine"
/datum/sprite_accessory/tail/taur/bigleggy/bird
/datum/sprite_accessory/tail/longtail/bigleggy/bird
name = "Big Leggies (Bird)"
extra_overlay = "bigleggy_m_bird"
extra_overlay2 = "bigleggy_bird"
extra_overlay_w = "bigleggy_m_bird_stanced"
extra_overlay2_w = "bigleggy_bird"
/datum/sprite_accessory/tail/taur/bigleggy/plug
/datum/sprite_accessory/tail/longtail/bigleggy/plug
name = "Big Leggies (Plug Tail)"
extra_overlay2 = "bigleggy_plug"
extra_overlay2_w = "bigleggy_plug"
/datum/sprite_accessory/tail/taur/bigleggy/AlienSlug
/datum/sprite_accessory/tail/longtail/bigleggy/AlienSlug
name = "Big Leggies (Alien Slug Tail)"
icon_state = "bigleggy_full_alienslug"
extra_overlay = "bigleggy_alienslug"
@@ -6,11 +6,12 @@
var/can_ride = TRUE //whether we're real rideable taur or just in that category
offset_x = -16
em_block = TRUE
/// Suit sprites are stored in icons/inventory/suit/taursuits_[name]
var/icon/suit_sprites = null //File for suit sprites, if any.
var/icon/under_sprites = null
var/icon_sprite_tag // This is where we put stuff like _Horse, so we can assign icons easier.
tailsock_icon = 'icons/mob/human_races/sprite_accessories/taurs/taur_socks.dmi'
//Could do nested lists but it started becoming a nightmare. It'd be more fun for lookups of a_intent and m_intent, but then subtypes need to
//duplicate all the messages, and it starts getting awkward. These are singletons, anyway!
@@ -41,6 +42,14 @@
hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case.
clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
/datum/sprite_accessory/tail/taur/New()
. = ..()
//give us the default sprite state, hijacking icon_sprite_tag that was only ever used for saddlebags.
if(icon_sprite_tag)
tailsock_iconstate = "[icon_sprite_tag]_sock"
///few taurs have working tailwags, but to ensure future proofing and no null icons the taur_sock.dmi file has these prepared.
tailsock_wagicon = "[icon_sprite_tag]_w_sock"
/datum/riding/taur
keytype = /obj/item/material/twohanded/riding_crop // Crack!
nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
+98 -52
View File
@@ -1,13 +1,17 @@
/datum/sprite_accessory/tail/taur/bunny
name = "Bunny (Taur, Fat vwag)"
icon = 'icons/rogue-star/tails_64x32_rs.dmi'
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "bnytr"
suit_sprites = 'icons/inventory/suit/taursuits_bnytr.dmi'
icon_sprite_tag = "bnytr"
extra_overlay = "bnytr-m1"
extra_overlay2 = "bnytr-m2"
ani_state = "bnytr-f"
extra_overlay_w = "bnytr-m1"
extra_overlay2_w = "bnytr-f-m2"
tailsock_wagicon = "bnytr-f_sock"
tailsock_wagmarkings = "bnytr-m1"
tailsock_wagmarkings2 = "bnytr-f-m2"
can_loaf = TRUE
icon_loaf = 'icons/rogue-star/loafs_64x32.dmi'
loaf_offset = 4
@@ -16,7 +20,7 @@
name = "Cow (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "cow_s"
suit_sprites = 'icons/mob/taursuits_cow.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_cow.dmi'
icon_sprite_tag = "cow"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -41,19 +45,19 @@
/datum/sprite_accessory/tail/taur/cow/fat
name = "Fat Cow (Taur)"
icon_sprite_tag = "fatcow"
icon_state = "fatcow_s"
/datum/sprite_accessory/tail/taur/cow/fat_wag
name = "Cow (Taur, Fat vwag)"
icon_state = "cow_s"
ani_state = "fatcow_s"
tailsock_wagicon = "fatcow_sock"
/datum/sprite_accessory/tail/taur/cow/paw // this grabs suit sprites from the normal cow, the outline is the same
name = "Cow w/ paws (Taur)"
icon_state = "pawcow_s"
icon_sprite_tag = "pawcow" //little suit booties in place of the hoof cutouts.
extra_overlay = "pawcow_markings"
suit_sprites = 'icons/mob/taursuits_cow.dmi'
icon_sprite_tag = "cow"
msg_owner_disarm_run = "You quickly push %prey to the ground with your paw!"
msg_prey_disarm_run = "%owner pushes you down to the ground with their paw!"
@@ -75,7 +79,9 @@
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "deer_s"
extra_overlay = "deer_markings"
suit_sprites = 'icons/mob/taursuits_deer.dmi'
ani_state = "deer_w"
extra_overlay_w = "deer_markings_w"
suit_sprites = 'icons/inventory/suit/taursuits_deer.dmi'
icon_sprite_tag = "deer"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -104,6 +110,7 @@
icon_state = "deer_s"
ani_state = "fatdeer_s"
extra_overlay_w = "fatdeer_markings"
tailsock_wagicon = "fatdeer_sock"
/datum/sprite_accessory/tail/taur/deer/fatdeer
name = "Fat Deer (Dual-color Taur)"
@@ -114,7 +121,7 @@
name = "Feline (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "feline_s" //I just want to talk to whomever thought every feline varient needed this same sprite but uniquely renamed...
suit_sprites = 'icons/mob/taursuits_deer.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_feline.dmi'
icon_sprite_tag = "feline"
extra_overlay = "feline_markings"
ani_state = "feline_w"
@@ -125,10 +132,13 @@
vore_tail_sprite_variant = "Feline"
belly_variant_when_loaf = TRUE
fullness_icons = 1
tailsock_markings = "none"
tailsock_wagmarkings = "none"
/datum/sprite_accessory/tail/taur/feline/fat
name = "Fat Feline (Taur)"
icon_state = "fatfeline_s"
icon_sprite_tag = "fatfeline"
extra_overlay = "fatfeline_markings" //feet, belly, and chest
ani_state = "fatfeline_w"
extra_overlay_w = "fatfeline_markings"
@@ -138,12 +148,15 @@
name = "Fat Feline (Taur, Fat vwag)"
ani_state = "fatfeline_s" //static fat sprite
can_loaf = TRUE
icon_sprite_tag = "fatfeline"
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
tailsock_wagicon = "fatfeline_sock"
/datum/sprite_accessory/tail/taur/feline/fatfeline_2c
name = "Fat Feline 3-color (Taur)"
icon_state = "fatfeline_s"
icon_sprite_tag = "fatfeline"
extra_overlay = "fatfeline2_markings" // chest and belly
extra_overlay2 = "fatfeline2_markings_2" // feet
can_loaf = TRUE
@@ -154,7 +167,6 @@
icon_state = "feline_s"
extra_overlay = "feline2_markings"
extra_overlay2 = "feline2_markings_2"
//icon_sprite_tag = "feline2c"
can_loaf = TRUE
/datum/sprite_accessory/tail/taur/feline/feline_2c_wag
@@ -162,19 +174,16 @@
extra_overlay = "feline2_markings"
extra_overlay2 = "feline2_markings_2"
ani_state = "fatfeline_s"
extra_overlay = "fatfeline2_markings"
extra_overlay2 = "fatfeline2_markings_2"
extra_overlay_w = "fatfeline2_markings"
extra_overlay2_w = "fatfeline2_markings_2"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/feline/tiger
name = "Tiger (Taur)"
suit_sprites = 'icons/mob/taursuits_deer.dmi'
icon_sprite_tag = "feline"
extra_overlay = "feline_markings"
extra_overlay2 = "tiger_markings"
extra_overlay2_w = "tiger_markings_w"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 5
vore_tail_sprite_variant = "Feline"
belly_variant_when_loaf = TRUE
@@ -183,21 +192,25 @@
/datum/sprite_accessory/tail/taur/feline/tiger/fat
name = "Fat Tiger (Taur)"
icon_state = "fatfeline_s"
icon_sprite_tag = "fatfeline"
extra_overlay = "fatfeline_markings"
extra_overlay2 = "fattiger_markings"
extra_overlay2_w = "fattiger_markings_w"
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
tailsock_markings2 = "tiger_markings"
tailsock_wagmarkings2 = "tiger_markings_w"
/datum/sprite_accessory/tail/taur/feline/tiger/fat_vwag
name = "Tiger (Taur, Fat vwag)"
ani_state = "fatfeline_s"
extra_overlay_w = "fatfeline_markings"
extra_overlay2_w = "fattiger_markings"
tailsock_wagicon = "fatfeline_sock"
/datum/sprite_accessory/tail/taur/fox
name = "Fox (Taur, 3-color)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_fox.dmi'
icon_state = "fox"
extra_overlay = "fox_markings"
extra_overlay2 = "fox_markings2"
@@ -210,6 +223,7 @@
/datum/sprite_accessory/tail/taur/fox/kitsune
name = "Kitsune (Taur)"
icon_state = "kitsune"
icon_sprite_tag = "kitsune"
extra_overlay = "kitsune_markings"
extra_overlay2 = "kitsune_markings2"
@@ -223,8 +237,8 @@
name = "Horse (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "horse_s"
under_sprites = 'icons/mob/taursuits_horse.dmi'
suit_sprites = 'icons/mob/taursuits_horse.dmi'
under_sprites = 'icons/inventory/suit/taursuits_horse.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_horse.dmi'
icon_sprite_tag = "horse"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -250,12 +264,12 @@
/datum/sprite_accessory/tail/taur/horse/big
name = "Kentauri (Taur)"
icon_state = "kentauri_s"
icon_sprite_tag = "kentauri"
extra_overlay = "kentauri_markings"
/datum/sprite_accessory/tail/taur/horse/horse_2c
name = "Horse & colorable tail (Taur)"
extra_overlay = "horse_markings"
//icon_sprite_tag = "wolf2c"
/datum/sprite_accessory/tail/taur/otie
name = "Otie (Taur)"
@@ -263,7 +277,10 @@
icon_state = "otie_s"
extra_overlay = "otie_markings"
extra_overlay2 = "otie_markings_2"
suit_sprites = 'icons/mob/taursuits_otie.dmi'
ani_state = "otie_w"
extra_overlay_w = "otie_markings_w"
extra_overlay2_w = "otie_markings_2w"
suit_sprites = 'icons/inventory/suit/taursuits_otie.dmi'
icon_sprite_tag = "otie"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -271,10 +288,15 @@
vore_tail_sprite_variant = "Otie"
belly_variant_when_loaf = TRUE
fullness_icons = 1
tailsock_markings = "none"
tailsock_wagmarkings = "none"
tailsock_markings2 = "otie_markings"
tailsock_wagmarkings2 = "otie_markings_w"
/datum/sprite_accessory/tail/taur/rat
name = "Rat (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_rat.dmi'
icon_state = "rat_s"
extra_overlay = "rat_markings"
clip_mask_state = "taur_clip_mask_rat"
@@ -283,18 +305,22 @@
/datum/sprite_accessory/tail/taur/redpanda
name = "Red Panda (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_redpanda.dmi'
icon_state = "redpanda"
icon_sprite_tag = "redpanda"
/datum/sprite_accessory/tail/taur/redpanda/dc
name = "Red Panda (Taur dual-color)"
icon_state = "redpanda_dc"
extra_overlay = "redpanda_dc_markings"
tailsock_markings = "redpanda_markings"
/datum/sprite_accessory/tail/taur/sergal/wheaties
name = "Sergal (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_sergal.dmi'
icon_state = "sergwheat"
icon_sprite_tag = "wolf"
icon_sprite_tag = "sergal"
vore_tail_sprite_variant = "N"
fullness_icons = 3
struggle_anim = TRUE
@@ -302,7 +328,6 @@
/datum/sprite_accessory/tail/taur/sergal/wheaties/fat
name = "Fat Sergal (Taur)"
icon_state = "fatsergal"
icon_sprite_tag = "wolf"
vore_tail_sprite_variant = "N"
fullness_icons = 3
struggle_anim = TRUE
@@ -312,7 +337,7 @@
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "sergwheat"
extra_overlay = "sergwheat_markings"
icon_sprite_tag = "wolf"
suit_sprites = 'icons/inventory/suit/taursuits_sergal.dmi'
vore_tail_sprite_variant = "N"
fullness_icons = 3
struggle_anim = TRUE
@@ -321,7 +346,6 @@
name = "Fat Sergal (Taur, dual-color)"
icon_state = "fatsergal"
extra_overlay = "sergwheat_markings"
icon_sprite_tag = "wolf"
vore_tail_sprite_variant = "N"
fullness_icons = 3
struggle_anim = TRUE
@@ -332,6 +356,7 @@
icon_state = "skunk_s"
extra_overlay = "skunk_markings"
extra_overlay2 = "skunk_markings_2"
suit_sprites = 'icons/inventory/suit/taursuits_skunk.dmi'
icon_sprite_tag = "skunk"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -344,8 +369,8 @@
name = "Wolf (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "wolf_s"
under_sprites = 'icons/mob/taursuits_wolf.dmi'
suit_sprites = 'icons/mob/taursuits_wolf.dmi'
under_sprites = 'icons/inventory/suit/taursuits_wolf.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_wolf.dmi'
icon_sprite_tag = "wolf"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -358,75 +383,96 @@
name = "Fat Wolf (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "fatwolf_s"
icon_sprite_tag = "wolf" //This could be modified later.
icon_sprite_tag = "fatwolf"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/fat_wag
name = "Wolf (Taur, Fat vwag)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "wolf_s"
ani_state = "fatwolf_s"
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c
name = "Fat Wolf 3-color (Taur)"
icon_state = "fatwolf2_s"
extra_overlay = "fatwolf2_markings"
extra_overlay2 = "fatwolf2_markings_2"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c/fatwolfalt
name = "Fat Wolf 3-color-alt (Taur)"
icon_state = "fatwolfalt_s"
extra_overlay = "fatwolfalt_markings1"
extra_overlay2 = "fatwolfalt_markings2"
icon_sprite_tag = "wolf"
tailsock_wagicon = "fatwolf_s"
/datum/sprite_accessory/tail/taur/wolf/wolf_2c
name = "Wolf 3-color (Taur)"
icon_state = "wolf_s"
extra_overlay = "wolf_markings"
extra_overlay2 = "wolf_markings_2"
//icon_sprite_tag = "wolf2c"
extra_overlay = "wolf2_markings"
extra_overlay2 = "wolf2_markings_2"
/datum/sprite_accessory/tail/taur/wolf/wolf_2c_wag
name = "Wolf 3-color (Taur, Fat vwag)"
icon_state = "wolf2_s"
extra_overlay = "wolf2_markings"
extra_overlay2 = "wolf2_markings_2"
ani_state = "fatwolf_s"
extra_overlay_w = "fatwolf2_markings"
extra_overlay2_w = "fatwolf2_markings_2"
ani_state = "fatwolf2_s"
/datum/sprite_accessory/tail/taur/wolf/fat/wolf_2c
name = "Fat Wolf 3-color (Taur)"
extra_overlay = "fatwolf2_markings"
extra_overlay2 = "fatwolf2_markings_2"
loaf_offset = 3
icon_sprite_tag = "fatwolf"
/datum/sprite_accessory/tail/taur/wolf/fat/altwolf_2c
name = "Fat Wolf 3-color-alt (Taur)"
extra_overlay = "fatwolfalt_markings1"
extra_overlay2 = "fatwolfalt_markings2"
icon_sprite_tag = "fatwolf"
/datum/sprite_accessory/tail/taur/wolf/wolf_3
name = "WolfTG (Taur)" //It's Citadel, not TG. :V
icon_state = "wolf3_s"
icon_state = "wolftg"
suit_sprites = 'icons/inventory/suit/taursuits_husky.dmi'
clip_mask_state = "taur_clip_mask_husky"
do_colouration = FALSE //this is already pre-colored.
tailsock_markings = "wolftg"
tailsock_wagmarkings = "wolftg_w"
icon_sprite_tag = "wolftg"
/datum/sprite_accessory/tail/taur/wolf/husky
name = "Husky (Taur)"
suit_sprites = 'icons/inventory/suit/taursuits_husky.dmi'
clip_mask_state = "taur_clip_mask_husky"
icon_state = "husky_s"
extra_overlay = "husky_markings" //Only affects the black back / tail fluff sections, so it works for the fat one too
ani_state = "husky_w"
extra_overlay_w = "husky_markings_w"
icon_sprite_tag = "husky"
/datum/sprite_accessory/tail/taur/wolf/huskyfat
name = "Fat Husky (Taur)"
icon_state = "huskyf_s"
icon_state = "fathusky_s"
extra_overlay = "husky_markings"
ani_state = "fathusky_w"
extra_overlay_w = "husky_markings_w"
icon_sprite_tag = "fathusky"
/datum/sprite_accessory/tail/taur/zorgoia
name = "Zorgoia (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "zorgoia"
extra_overlay = "zorgoia_fluff"
icon_sprite_tag = "zorgoia"
suit_sprites = 'icons/inventory/suit/taursuits_zorgoia.dmi'
/datum/sprite_accessory/tail/taur/zorgoia/fat
name = "Zorgoia (Fat Taur)"
extra_overlay = "zorgoia_fat2"
icon_state = "zorgoia_fat"
extra_overlay = "zorgoia_fat_fluff"
icon_sprite_tag = "zorgoia_fat"
/datum/sprite_accessory/tail/taur/zorgoia_new
name = "Zorgoia (Taur) (New)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_animal.dmi'
icon_state = "zorgoia_new"
icon_sprite_tag = "zorgoia_new"
extra_overlay = "zorgoia_new_fluff"
suit_sprites = 'icons/inventory/suit/taursuits_zorgoia.dmi'
/datum/sprite_accessory/tail/taur/zorgoia_new/fatvwag
name = "Zorgoia (Taur, vwag) (New)"
ani_state = "zorgoia_new_fat"
extra_overlay_w = "zorgoia_new_fat_fluff"
/datum/sprite_accessory/tail/taur/zorgoia_new/fat
name = "Zorgoia (Fat Taur) (New)"
icon_state = "zorgoia_new_fat"
extra_overlay = "zorgoia_new_fat_overlay"
extra_overlay = "zorgoia_new_fat_fluff"
+10 -13
View File
@@ -15,7 +15,6 @@
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
icon_state = "giantspidertaur"
do_colouration = FALSE
extra_overlay = null
icon_sprite_tag = "giantspidertaur"
msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!"
@@ -43,42 +42,38 @@
/datum/sprite_accessory/tail/taur/giantspider/carrier
name = "Carrier Spider (Taur)"
icon_state = "carrierspidertaur"
extra_overlay = null
icon_sprite_tag = "carrierspidertaur"
/datum/sprite_accessory/tail/taur/giantspider/phoron
name = "Phorogenic Spider (Taur)"
icon_state = "phoronspidertaur"
extra_overlay = null
icon_sprite_tag = "phoronspidertaur"
/datum/sprite_accessory/tail/taur/giantspider/spark
name = "Voltaic Spider (Taur)"
icon_state = "sparkspidertaur"
extra_overlay = null
icon_sprite_tag = "sparkspidertaur"
/datum/sprite_accessory/tail/taur/giantspider/frost
name = "Frost Spider (Taur)"
icon_state = "frostspidertaur"
extra_overlay = null
icon_sprite_tag = "frostspidertaur"
/datum/sprite_accessory/tail/taur/giantspider/ant //technically not a spider, but it inherits the same messages
name = "Ant (dual color)"
icon_state = "ant_s"
do_colouration = TRUE
extra_overlay = "ant_markings"
clip_mask_state = "taur_clip_mask_wasp"
icon_sprite_tag = "wasp"
icon_sprite_tag = "ant"
do_colouration = TRUE
/datum/sprite_accessory/tail/taur/giantspider/wasp //same as above, but for wasps
name = "Wasp (dual color)"
icon_state = "wasp_s"
do_colouration = TRUE
extra_overlay = "wasp_markings"
clip_mask_state = "taur_clip_mask_wasp"
icon_sprite_tag = "wasp"
do_colouration = TRUE
/datum/sprite_accessory/tail/taur/mermaid
name = "Mermaid (Taur)"
@@ -121,22 +116,23 @@
/datum/sprite_accessory/tail/taur/mermaid/alt/marked
name = "Mermaid Koi (Taur)"
icon_state = "altmermaid_s"
extra_overlay = "altmermaid_markings"
extra_overlay2 = "altmermaid_markings2"
/datum/sprite_accessory/tail/taur/horse/scoli
name = "Scolipede (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_scoli.dmi'
icon_state = "scoli_s"
extra_overlay = "scoli_markings1"
extra_overlay2 = "scoli_markings2"
icon_sprite_tag = "scoli"
/datum/sprite_accessory/tail/taur/spider
name = "Spider (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
icon_state = "spider_s"
suit_sprites = 'icons/mob/taursuits_spider.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_spider.dmi'
icon_sprite_tag = "spider"
msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!"
@@ -157,6 +153,7 @@
/datum/sprite_accessory/tail/taur/sloog
name = "Sloog (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_sloog.dmi'
icon_state = "sloog"
extra_overlay = "sloog_glowstripe"
extra_overlay_w = "sloog_glowstripe"
@@ -166,7 +163,6 @@
name = "Slug (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
icon_state = "slug_s"
suit_sprites = 'icons/mob/taursuits_deer.dmi' //Yes it sounds odd, but they share the same sprites.
icon_sprite_tag = "slug"
vore_tail_sprite_variant = "Slug"
fullness_icons = 1
@@ -200,15 +196,15 @@
/datum/sprite_accessory/tail/taur/slug/snail
name = "Snail (Taur)"
icon_state = "slug_s"
extra_overlay = "snail_shell_marking"
icon_sprite_tag = "snail"
/datum/sprite_accessory/tail/taur/tents
name = "Tentacles (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
icon_state = "tent_s"
icon_sprite_tag = "tentacle"
can_ride = 0
can_ride = FALSE
msg_prey_stepunder = "You run between %prey's tentacles."
msg_owner_stepunder = "%owner runs between your tentacles."
@@ -241,6 +237,7 @@
name = "Tree Roots (Oak)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_exotic.dmi'
icon_state = "tree_oak_roots"
icon_sprite_tag = "tree_oak_roots"
can_ride = FALSE
/*
+79 -129
View File
@@ -1,10 +1,9 @@
/datum/sprite_accessory/tail/taur/drake //Enabling on request, no suit compatibility but then again see 2 above.
/datum/sprite_accessory/tail/taur/drake
name = "Drake (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_reptile.dmi'
icon_state = "drake_s"
extra_overlay = "drake_markings"
/// suit_sprites = 'icons/mob/taursuits_drake.dmi'
suit_sprites = 'icons/mob/taursuits_drake_ch.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_drake.dmi'
icon_sprite_tag = "drake"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -17,98 +16,71 @@
name = "Fat Drake (Taur)"
icon_state = "fatdrake_s"
extra_overlay = "fatdrake_markings"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
icon_sprite_tag = "fatdrake"
vore_tail_sprite_variant = "FatDrake"
loaf_offset = 6
/datum/sprite_accessory/tail/taur/drake/drake_vwag
name = "Drake (Taur, Fat vwag)"
icon_state = "drake_s"
extra_overlay = "drake_markings"
ani_state = "fatdrake_s"
extra_overlay_w = "fatdrake_markings"
can_loaf = TRUE
/datum/sprite_accessory/tail/taur/drake/extended
name = "Fat Drake Extended (Taur)"
icon_state = "extended_fatdrake"
extra_overlay = "extended_fatdrake_markings"
extra_overlay2 = "extended_fatdrake_markings2"
fullness_icons = 2
can_loaf = TRUE //Soon //Actually, NOW
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
loaf_offset = 5
/datum/sprite_accessory/tail/taur/drake/extended/spotty
name = "Fat Spotted Drake Extended (Taur)"
vore_tail_sprite_variant = "FatDrake"
icon_state = "spottedextended_fatdrake"
extra_overlay = "spottedextended_fatdrake_markings"
extra_overlay_w = "spottedextended_fatdrake_markings"
extra_overlay2 = "spottedextended_fatdrake_markings_2"
extra_overlay2_w = "spottedextended_fatdrake_markings_2"
fullness_icons = 2
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
loaf_offset = 5
/datum/sprite_accessory/tail/taur/drake/spotty
name = "Spotted Drake (Taur, Tricolor)"
icon_state = "spotteddrake_s"
extra_overlay = "spotteddrake_markings"
extra_overlay_w = "spotteddrake_markings"
extra_overlay2 = "spotteddrake_markings_2"
extra_overlay2_w = "spotteddrake_markings_2"
suit_sprites = 'icons/mob/taursuits_drake_ch.dmi'
icon_sprite_tag = "drake"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
extra_overlay2_w = "spotteddrake_markings"
loaf_offset = 6
/datum/sprite_accessory/tail/taur/drake/fat/spotty
name = "Fat Spotted Drake (Taur, Tricolor)"
vore_tail_sprite_variant = "FatDrake"
icon_state = "fatspotteddrake_s"
extra_overlay = "fatspotteddrake_markings"
extra_overlay_w = "fatspotteddrake_markings"
extra_overlay2 = "fatspotteddrake_markings_2"
extra_overlay2_w = "fatspotteddrake_markings_2"
extra_overlay2 = "fatspotteddrake_markings"
extra_overlay2_w = "fatspotteddrake_markings"
fullness_icons = 2
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
loaf_offset = 6
/datum/sprite_accessory/tail/taur/drake/extended_alt
/datum/sprite_accessory/tail/taur/drake/drake_vwag/spotty
name = "Spotted Drake (Taur, Tricolor, Fat vwag)"
extra_overlay2 = "spotteddrake_markings"
extra_overlay2_w = "fatspotteddrake_markings"
loaf_offset = 6
/datum/sprite_accessory/tail/taur/drake/extended
name = "Drake Extended (Taur)"
vore_tail_sprite_variant = "Drake"
icon_state = "extended_drake"
extra_overlay = "extended_drake_markings"
extra_overlay_w = "extended_drake_markings"
extra_overlay2 = "extended_drake_markings_2"
extra_overlay2_w = "extended_drake_markings_2"
icon_state = "extendeddrake"
extra_overlay = "extendeddrake_markings"
extra_overlay_w = "extendeddrake_markings"
extra_overlay2 = "extendeddrake_markings_2"
extra_overlay2_w = "extendeddrake_markings_2"
icon_sprite_tag = "extendeddrake"
fullness_icons = 3
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 5
/datum/sprite_accessory/tail/taur/drake/extended_alt/spotted
/datum/sprite_accessory/tail/taur/drake/extended/spotted
name = "Spotted Drake Extended (Taur)"
vore_tail_sprite_variant = "Drake"
icon_state = "spottedextended_drake"
extra_overlay = "spottedextended_drake_markings"
extra_overlay_w = "spottedextended_drake_markings"
extra_overlay2 = "spottedextended_drake_markings_2"
extra_overlay2_w = "spottedextended_drake_markings_2"
fullness_icons = 3
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
loaf_offset = 5
extra_overlay2 = "spottedextendeddrake_markings"
extra_overlay2_w = "spottedextendeddrake_markings"
/datum/sprite_accessory/tail/taur/drake/extended/fat
name = "Fat Drake Extended (Taur)"
icon_state = "extendedfatdrake"
extra_overlay = "extendedfatdrake_markings"
extra_overlay2 = "extendedfatdrake_markings_2"
icon_sprite_tag = "extendedfatdrake"
vore_tail_sprite_variant = "FatDrake"
fullness_icons = 2
/datum/sprite_accessory/tail/taur/drake/extended/fat/spotty
name = "Fat Spotted Drake Extended (Taur)"
extra_overlay2 = "spottedextendedfatdrake_markings"
extra_overlay2_w = "spottedextendedfatdrake_markings"
/datum/sprite_accessory/tail/taur/lizard
name = "Lizard (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_reptile.dmi'
icon_state = "lizard_s"
suit_sprites = 'icons/mob/taursuits_lizard_ch.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_lizard.dmi'
icon_sprite_tag = "lizard"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
@@ -116,36 +88,16 @@
vore_tail_sprite_variant = "Lizard"
fullness_icons = 1
/datum/sprite_accessory/tail/taur/lizard/fatlizard
name = "Fat Lizard (Taur)"
icon_state = "fatlizard_s"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/lizard_wag
name = "Lizard (Taur, Fat vwag)"
icon_state = "lizard_s"
ani_state = "fatlizard_s"
/datum/sprite_accessory/tail/taur/lizard/lizard_2c
/datum/sprite_accessory/tail/taur/lizard/twocolor
name = "Lizard dual-color (Taur)"
icon_state = "lizard_s"
extra_overlay = "lizard_markings"
//icon_sprite_tag = "lizard2c"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 5
/datum/sprite_accessory/tail/taur/lizard/fatlizard_2c
name = "Fat Lizard (Taur, dual-color)"
icon_state = "fatlizard_s"
extra_overlay = "fatlizard_markings"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/lizard_2c_wag
/datum/sprite_accessory/tail/taur/lizard/twocolor_wag
name = "Fat Lizard (Taur, dual-color, Fat vwag)"
icon_state = "lizard_s"
extra_overlay = "lizard_markings"
@@ -154,32 +106,40 @@
/datum/sprite_accessory/tail/taur/lizard/spotty
name = "Spotted Lizard (Taur, Tricolor)"
icon_state = "spottedlizard_s"
extra_overlay = "spottedlizard_markings"
extra_overlay_w = "spottedlizard_markings"
extra_overlay2 = "spottedlizard_markings_2"
extra_overlay2_w = "spottedlizard_markings_2"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
loaf_offset = 5
extra_overlay2 = "spottedlizard_markings"
extra_overlay2_w = "spottedlizard_markings"
/datum/sprite_accessory/tail/taur/lizard/spotty_fat
name = "Fat Spotted Lizard (Taur, Tricolor)"
icon_state = "fatspottedlizard_s"
extra_overlay = "fatspottedlizard_markings"
extra_overlay_w = "fatspottedlizard_markings"
extra_overlay2 = "fatspottedlizard_markings_2"
extra_overlay2_w = "fatspottedlizard_markings_2"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi' //This file needs to be nuked during the removal of 'taurs_ch_loaf.dmi' into the normal loaf file.
/datum/sprite_accessory/tail/taur/lizard/spotty_wag
name = "Spotted Lizard (Taur, Tricolor, Fat vwag)"
ani_state = "fatlizard_s"
extra_overlay_w = "fatlizard_markings"
extra_overlay2 = "fatspottedlizard_markings"
extra_overlay2_w = "fatspottedlizard_markings"
/datum/sprite_accessory/tail/taur/lizard/fatlizard
name = "Fat Lizard (Taur)"
icon_state = "fatlizard_s"
icon_sprite_tag = "fatlizard"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/lizard/fatlizard/twocolor
name = "Fat Lizard (Taur, dual-color)"
extra_overlay = "fatlizard_markings"
/datum/sprite_accessory/tail/taur/lizard/fatlizard/spotty
name = "Fat Spotted Lizard (Taur, Tricolor)"
extra_overlay = "fatlizard_markings"
extra_overlay_w = "fatlizard_markings"
extra_overlay2 = "fatspottedlizard_markings"
extra_overlay2_w = "fatspottedlizard_markings"
/datum/sprite_accessory/tail/taur/naga
name = "Naga (Taur)"
//TODO: MOAR NAGA SUITS
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_reptile.dmi'
icon_state = "naga_s"
suit_sprites = 'icons/mob/taursuits_naga.dmi'
//icon_sprite_tag = "naga"
suit_sprites = 'icons/inventory/suit/taursuits_naga.dmi'
icon_sprite_tag = "naga"
vore_tail_sprite_variant = "Naga"
fullness_icons = 1
@@ -214,51 +174,41 @@
name = "Naga (Taur, Fat, dual color)"
icon_state = "fatnaga_s"
extra_overlay = "fatnaga_markings"
suit_sprites = null
icon_sprite_tag = "fatnaga"
/datum/sprite_accessory/tail/taur/naga/naga_2c
/datum/sprite_accessory/tail/taur/naga/naga_twocolor
name = "Naga dual-color (Taur)"
icon_state = "naga_s"
extra_overlay = "naga_markings"
//icon_sprite_tag = "naga2c"
//should really be called 'thin naga'
/datum/sprite_accessory/tail/taur/naga/alt
name = "Naga alt (Taur)"
icon_state = "naga_alt_s"
icon_state = "altnaga_s"
vore_tail_sprite_variant = "NagaAlt"
suit_sprites = 'icons/inventory/suit/taursuits_naga_alt.dmi'
fullness_icons = 1
icon_sprite_tag = "altnaga"
/datum/sprite_accessory/tail/taur/naga/alt/second
name = "Naga dual-color alt (Taur)"
extra_overlay = "naga_alt_markings"
/datum/sprite_accessory/tail/taur/naga/alt_2c
/datum/sprite_accessory/tail/taur/naga/alt/twocolor
name = "Naga alt style dual-color (Taur)"
suit_sprites = 'icons/mob/taursuits_naga.dmi' //TODO: PORT CHOMPS NAGA_ALT AND MAKE THESE NAGA_ALT.
icon_state = "altnaga_s"
extra_overlay = "altnaga_markings"
//icon_sprite_tag = "altnaga2c"
/datum/sprite_accessory/tail/taur/naga/alt_3c
/datum/sprite_accessory/tail/taur/naga/alt/threecolor
name = "Naga alt style tri-color (Taur)"
suit_sprites = 'icons/mob/taursuits_naga.dmi' //TODO: PORT CHOMPS NAGA_ALT AND MAKE THESE NAGA_ALT.
icon_state = "altnaga_s"
extra_overlay = "altnaga_markings"
extra_overlay2 = "altnaga_stripes"
/datum/sprite_accessory/tail/taur/naga/alt_3c_rattler
/datum/sprite_accessory/tail/taur/naga/alt/threecolor_rattler
name = "Naga alt style tri-color, rattler (Taur)"
suit_sprites = 'icons/mob/taursuits_naga.dmi' //TODO: PORT CHOMPS NAGA_ALT AND MAKE THESE NAGA_ALT.
icon_state = "altnaga_s"
extra_overlay = "altnaga_markings"
extra_overlay2 = "altnaga_rattler"
/datum/sprite_accessory/tail/taur/naga/alt_3c_tailmaw
/datum/sprite_accessory/tail/taur/naga/alt/threecolor_tailmaw
name = "Naga alt style tri-color, tailmaw (Taur)"
suit_sprites = 'icons/mob/taursuits_naga.dmi' //TODO: PORT CHOMPS NAGA_ALT AND MAKE THESE NAGA_ALT.
icon_state = "altnagatailmaw_s"
extra_overlay = "altnagatailmaw_markings"
extra_overlay2 = "altnagatailmaw_eyes"
icon_sprite_tag = "altnagatailmaw"
/datum/sprite_accessory/tail/taur/noodle
name = "Eastern Dragon (Taur)"
@@ -266,7 +216,7 @@
icon_state = "noodle_s"
extra_overlay = "noodle_markings"
extra_overlay2 = "noodle_markings_2"
suit_sprites = 'icons/mob/taursuits_noodle.dmi'
suit_sprites = 'icons/inventory/suit/taursuits_noodle.dmi'
clip_mask_state = "taur_clip_mask_noodle"
icon_sprite_tag = "noodle"
@@ -1,16 +1,4 @@
// Special snowflake tails/taurhalves
//spoopylizz: Roiz Lizden
/datum/sprite_accessory/tail/taur/roiz_long_lizard // Not ACTUALLY a taur, but it uses 64x32 so it wouldn't fit in tails.dmi, and having it as a tail bugs up the sprite.
name = "Long Lizard Tail (Roiz Lizden)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_snowflake.dmi'
icon_state = "roiz_tail_s"
do_colouration = FALSE
ckeys_allowed = list("spoopylizz")
hide_body_parts = null
clip_mask_icon = null
clip_mask_state = null
//grallstonefist: Ranihrönn Skrolk
/datum/sprite_accessory/tail/taur/altmermaid/orcamermaid
name = "Mermaid Orca (Taur)"
@@ -19,6 +7,7 @@
can_ride = TRUE
do_colouration = FALSE
ckeys_allowed = list("grallstonefist")
tailsock_markings = "orcamermaid_marking"
//wickedtemp: Chakat Tempest
/datum/sprite_accessory/tail/taur/feline/tempest
+29 -17
View File
@@ -3,6 +3,7 @@
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "sectdrone"
extra_overlay = "sectdrone_markings"
icon_sprite_tag = "sectdrone"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
vore_tail_sprite_variant = "SectDrone"
@@ -10,6 +11,7 @@
struggle_anim = TRUE
loaf_offset = 3
fullness_icons = 3
clip_mask_state = "taur_clip_mask_sectdrone"
msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!"
msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!"
@@ -26,21 +28,21 @@
msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!"
msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!"
/datum/sprite_accessory/tail/taur/sect_drone/drone_wag
/datum/sprite_accessory/tail/taur/sectdrone/drone_wag
name = "Sect Drone (Taur, Fat vwag)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "sect_drone"
extra_overlay = "sect_drone_markings"
ani_state = "fat_sect_drone"
extra_overlay_w = "fat_sect_drone_markings"
icon_sprite_tag = "sect_drone"
icon_state = "sectdrone"
extra_overlay = "sectdrone_markings"
ani_state = "fatsectdrone"
extra_overlay_w = "fatsectdrone_markings"
icon_sprite_tag = "sectdrone"
/datum/sprite_accessory/tail/taur/sect_drone/fat
/datum/sprite_accessory/tail/taur/sectdrone/fat
name = "Fat Sect Drone (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "fat_sect_drone"
extra_overlay = "fat_sect_drone_markings"
icon_sprite_tag = "sect_drone"
icon_state = "fatsectdrone"
extra_overlay = "fatsectdrone_markings"
icon_sprite_tag = "sectdrone"
/datum/sprite_accessory/tail/taur/horse/synthhorse
name = "SynthHorse dual-color (Taur)"
@@ -48,7 +50,7 @@
icon_state = "synthhorse_s"
extra_overlay = "synthhorse_markings"
extra_overlay2 = "synthhorse_glow"
//icon_sprite_tag = "synthhorse"
icon_sprite_tag = "synthhorse"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
@@ -59,7 +61,7 @@
icon_state = "synthfeline_s"
extra_overlay = "synthfeline_markings"
extra_overlay2 = "synthfeline_glow"
//icon_sprite_tag = "synthfeline"
icon_sprite_tag = "synthfeline"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
@@ -70,6 +72,7 @@
icon_state = "fatsynthfeline_s"
extra_overlay = "fatsynthfeline_markings"
extra_overlay2 = "fatsynthfeline_glow"
icon_sprite_tag = "fatsynthfeline"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
@@ -78,6 +81,7 @@
name = "SynthFeline dual-color (Taur, Fat vwag)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthfeline_s"
icon_sprite_tag = "synthfeline"
extra_overlay = "synthfeline_markings"
extra_overlay2 = "synthfeline_glow"
ani_state = "fatsynthfeline_s"
@@ -88,6 +92,7 @@
name = "Synthetic chassis - agile (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthtaur1_s"
icon_sprite_tag = "synthtaur1"
extra_overlay = "synthtaur1_markings"
extra_overlay2 = "synthtaur1_glow"
clip_mask_state = "taur_clip_mask_synthtaur1"
@@ -95,7 +100,8 @@
/datum/sprite_accessory/tail/taur/synthetic/syntheticagi_fat
name = "Synthetic chassis - agile (Taur, Fat)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthtaur1_s"
icon_state = "synthtaur1_fat_s"
icon_sprite_tag = "synthtaur1_fat"
extra_overlay = "synthtaur1_fat_markings"
extra_overlay2 = "synthtaur1_glow"
clip_mask_state = "taur_clip_mask_synthtaur1"
@@ -104,9 +110,10 @@
name = "Synthetic chassis - agile (Taur, Fat vwag)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthtaur1_s"
icon_sprite_tag = "synthtaur1"
extra_overlay = "synthtaur1_markings"
extra_overlay2 = "synthtaur1_glow"
ani_state = "synthtaur1_s"
ani_state = "synthtaur1_fat_s"
extra_overlay_w = "synthtaur1_fat_markings"
extra_overlay2_w = "synthtaur1_glow"
clip_mask_state = "taur_clip_mask_synthtaur1"
@@ -115,9 +122,9 @@
name = "SynthLizard dual-color (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthlizard_s"
icon_sprite_tag = "synthlizard"
extra_overlay = "synthlizard_markings"
extra_overlay2 = "synthlizard_glow"
//icon_sprite_tag = "synthlizard"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_loaf.dmi'
loaf_offset = 3
@@ -128,6 +135,7 @@
name = "Fat SynthLizard dual-color (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "fatsynthlizard_s"
icon_sprite_tag = "fatsynthlizard"
extra_overlay = "fatsynthlizard_markings"
extra_overlay2 = "fatsynthlizard_glow"
can_loaf = TRUE
@@ -138,6 +146,7 @@
name = "SynthLizard dual-color (Taur, Fat vwag)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthlizard_s"
icon_sprite_tag = "fatsynthlizard"
extra_overlay = "synthlizard_markings"
extra_overlay2 = "synthlizard_glow"
ani_state = "fatsynthlizard_s"
@@ -148,6 +157,7 @@
name = "Synthetic Naga dual-color (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthnaga"
icon_sprite_tag = "synthnaga"
extra_overlay = "synthnaga_belly"
/datum/sprite_accessory/tail/taur/longvirus
@@ -155,21 +165,22 @@
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "longvirus_s"
extra_overlay = "longvirus_markings"
icon_sprite_tag = "virus"
icon_sprite_tag = "longvirus"
/datum/sprite_accessory/tail/taur/wolf/synthwolf
name = "SynthWolf dual-color (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "synthwolf_s"
icon_sprite_tag = "synthwolf"
extra_overlay = "synthwolf_markings"
extra_overlay2 = "synthwolf_glow"
//icon_sprite_tag = "synthwolf"
loaf_offset = 3
/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf
name = "Fat SynthWolf dual-color (Taur)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_state = "fatsynthwolf_s"
icon_sprite_tag = "fatsynthwolf"
extra_overlay = "fatsynthwolf_markings"
extra_overlay2 = "fatsynthwolf_glow"
loaf_offset = 3
@@ -177,6 +188,7 @@
/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf_wag
name = "SynthWolf dual-color (Taur, Fat vwag)"
icon = 'icons/mob/human_races/sprite_accessories/taurs/taurs_synth.dmi'
icon_sprite_tag = "synthwolf"
icon_state = "synthwolf_s"
extra_overlay = "synthwolf_markings"
extra_overlay2 = "synthwolf_glow"
@@ -1147,7 +1147,7 @@ Departamental Swimsuits, for general use
/obj/item/clothing/suit/storage/hooded/wintercoat/jessie
name = "Handmade Winter Suit"
desc = "A durable, but somewhat ragged lower portion of a snow suit fitted for a wolftaur."
icon = 'icons/mob/taursuits_wolf.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "jessiecoat"
/obj/item/clothing/suit/storage/hooded/wintercoat/jessie/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
@@ -1163,7 +1163,7 @@ Departamental Swimsuits, for general use
name = "Kat's Fox Taur Armor"
desc = "A set of security armor, light weight and easy to run in for a Taur, this item protects the \
entire body."
icon = 'icons/mob/taursuits_wolf.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "katesuit"
item_state_slots = null
@@ -1181,7 +1181,7 @@ Departamental Swimsuits, for general use
desc = "Taur engineering voidsuit. Recolored navy blue and white. Slightly tweaked as well to \
get close to having security voidsuit protection as possible with a slight reduction in movement \
speed to compensate for custom padding and armor Kateryna made herself."
icon = 'icons/mob/taursuits_wolf.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "lilithsuit"
species_restricted = null
armor = list(melee = 40, bullet = 20, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
@@ -1534,7 +1534,7 @@ Departamental Swimsuits, for general use
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
desc = "A series of armor plates painted black, deployed from a back-mounted module. They fit smoothly over the unit's armor plates and projects a skintight bubble shield over the unit's uncovered parts. Faceplate and coolant unit not included."
species_restricted = null
icon = 'icons/mob/taursuits_lizard.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "hasd_suit"
pixel_x = -16
@@ -452,7 +452,7 @@
name = "custom security cuirass"
desc = "An armored vest that protects against some damage. It appears to be created for a wolfhound. The name 'Serdykov L. Antoz' is written on a tag inside one of the haunchplates."
species_restricted = null //Species restricted since all it cares about is a taur half
icon = 'icons/mob/taursuits_wolf.dmi'
icon = 'icons/inventory/suit/taursuits_snowflake.dmi'
icon_state = "serdy_armor"
item_state = "serdy_armor"
body_parts_covered = CHEST|LEGS|ARMS //It's a full body suit, minus hands and feet. Arms and legs should be protected, not just the torso. Retains normal security armor values still.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 KiB

After

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 687 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

@@ -0,0 +1,9 @@
Looking to add a new tail? Issue with one?
Due to limitations with Byond, we have to essentially copypasta all tail sections to avoid ghosts or layering issues. The current overlay system expects all four directions to be present and on the same layer. If you try to force a north only, but your sprite still contains all four directionals, then they'll be all four directions. And so, only the exposed tail markings will be shown.
Yes it's very silly but it was tried so many times to only get the north face of the main sprite to lay atop of things...
Tailsocks layer on top of tails. Suits without a tailsock will apply their markings and still layer over clothing. HIDETAIL clothing tag is removed as a result of these changes, the verb to hide your tail works anyway if that's your choice!
Snowflake colored tails (usually do_coloration = FALSE ones) need to have a whitescaled version of themselves added appended with _sock, as well as tailsock_iconstate = "[icon_state]_sock" in order to properly get a unique, tailsock colorized overlay. Tailmaws are another example, they've been given little space suit bubble helmets!
Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Some files were not shown because too many files have changed in this diff Show More