diff --git a/_maps/map_files/rift/rift-03-underground1.dmm b/_maps/map_files/rift/rift-03-underground1.dmm index 5d7cf5dd165..e9fd3d72e06 100644 --- a/_maps/map_files/rift/rift-03-underground1.dmm +++ b/_maps/map_files/rift/rift-03-underground1.dmm @@ -8222,10 +8222,6 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "Gm" = ( -/obj/item/circuitboard/body_designer{ - pixel_x = -3; - pixel_y = 3 - }, /obj/item/circuitboard/resleeving_control{ pixel_x = -1; pixel_y = 1 diff --git a/_maps/map_files/rift/rift-05-surface2.dmm b/_maps/map_files/rift/rift-05-surface2.dmm index 03e238fa6bf..0c7f04fdc55 100644 --- a/_maps/map_files/rift/rift-05-surface2.dmm +++ b/_maps/map_files/rift/rift-05-surface2.dmm @@ -9370,10 +9370,6 @@ pixel_x = -2; pixel_y = -2 }, -/obj/item/storage/box/body_record_disk{ - pixel_x = 6; - pixel_y = -4 - }, /obj/structure/table/reinforced, /obj/effect/floor_decal/corner/paleblue{ dir = 10 diff --git a/_maps/map_files/rift/rift-11-orbital.dmm b/_maps/map_files/rift/rift-11-orbital.dmm index 0271b2bbd88..a18b5ae8242 100644 --- a/_maps/map_files/rift/rift-11-orbital.dmm +++ b/_maps/map_files/rift/rift-11-orbital.dmm @@ -5952,9 +5952,6 @@ /turf/simulated/floor/tiled/white, /area/centcom/simulated/medical) "rf" = ( -/obj/machinery/computer/transhuman/designer{ - dir = 8 - }, /obj/effect/floor_decal/borderfloorwhite{ dir = 4 }, diff --git a/_maps/map_files/tether/tether-02-surface2.dmm b/_maps/map_files/tether/tether-02-surface2.dmm index 667722b2698..50032e987d3 100644 --- a/_maps/map_files/tether/tether-02-surface2.dmm +++ b/_maps/map_files/tether/tether-02-surface2.dmm @@ -1401,7 +1401,6 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, -/obj/machinery/computer/transhuman/designer, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/resleeving) "ace" = ( @@ -3354,9 +3353,6 @@ /obj/effect/floor_decal/corner/pink/border{ dir = 8 }, -/obj/machinery/computer/transhuman/designer{ - dir = 4 - }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/examroom) "afp" = ( diff --git a/_maps/map_files/tether/tether-03-surface3.dmm b/_maps/map_files/tether/tether-03-surface3.dmm index 08ea42b190d..2a7b093f5a6 100644 --- a/_maps/map_files/tether/tether-03-surface3.dmm +++ b/_maps/map_files/tether/tether-03-surface3.dmm @@ -24733,10 +24733,6 @@ pixel_x = 10; pixel_y = 14 }, -/obj/item/storage/box/body_record_disk{ - pixel_x = -3; - pixel_y = -3 - }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/lobby) "aTL" = ( @@ -32786,7 +32782,6 @@ name = "Body Designer Note" }, /obj/item/sleevemate, -/obj/item/storage/box/body_record_disk, /obj/machinery/light{ dir = 4 }, @@ -32826,9 +32821,6 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/admin) "bke" = ( -/obj/machinery/computer/transhuman/designer{ - dir = 8 - }, /obj/effect/floor_decal/borderfloorwhite{ dir = 4 }, diff --git a/_maps/map_files/tether/tether-06-station2.dmm b/_maps/map_files/tether/tether-06-station2.dmm index be625b686a6..af5311a4320 100644 --- a/_maps/map_files/tether/tether-06-station2.dmm +++ b/_maps/map_files/tether/tether-06-station2.dmm @@ -2840,10 +2840,6 @@ /area/storage/tech) "amD" = ( /obj/structure/table/rack/steel, -/obj/item/circuitboard/body_designer{ - pixel_x = -3; - pixel_y = 3 - }, /obj/item/circuitboard/resleeving_control{ pixel_x = -1; pixel_y = 1 diff --git a/_maps/map_files/tether/tether_misc.dmm b/_maps/map_files/tether/tether_misc.dmm index 4613679305d..ef9f8f2f78e 100644 --- a/_maps/map_files/tether/tether_misc.dmm +++ b/_maps/map_files/tether/tether_misc.dmm @@ -6509,9 +6509,6 @@ /turf/simulated/floor/tiled/white, /area/centcom/simulated/medical) "Zd" = ( -/obj/machinery/computer/transhuman/designer{ - dir = 8 - }, /obj/effect/floor_decal/borderfloorwhite{ dir = 4 }, diff --git a/_maps/map_files/triumph/triumph-01-deck1.dmm b/_maps/map_files/triumph/triumph-01-deck1.dmm index 97f8e25352a..384ee7d7180 100644 --- a/_maps/map_files/triumph/triumph-01-deck1.dmm +++ b/_maps/map_files/triumph/triumph-01-deck1.dmm @@ -13830,10 +13830,6 @@ /obj/item/circuitboard/resleeving_control{ pixel_y = 1 }, -/obj/item/circuitboard/body_designer{ - pixel_x = 1; - pixel_y = -1 - }, /obj/item/circuitboard/med_data{ pixel_x = 5; pixel_y = -3 diff --git a/_maps/templates/admin/dhael_centcom.dmm b/_maps/templates/admin/dhael_centcom.dmm index ab0b821a156..7b8d742eb68 100644 --- a/_maps/templates/admin/dhael_centcom.dmm +++ b/_maps/templates/admin/dhael_centcom.dmm @@ -6793,7 +6793,6 @@ /obj/effect/floor_decal/corner_steel_grid{ dir = 10 }, -/obj/machinery/computer/transhuman/designer, /turf/unsimulated/floor/steel{ icon_state = "white" }, diff --git a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm index deaa965eada..b9e5a33db21 100644 --- a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm +++ b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm @@ -4171,9 +4171,6 @@ /turf/simulated/floor/tiled/steel_grid, /area/mothership/processing) "jp" = ( -/obj/machinery/computer/transhuman/designer{ - dir = 4 - }, /turf/simulated/floor/tiled/white, /area/mothership/resleeving) "jq" = ( @@ -4580,7 +4577,6 @@ /obj/structure/closet/medical_wall{ pixel_y = -32 }, -/obj/item/storage/box/body_record_disk, /obj/item/storage/firstaid/clotting, /obj/item/storage/firstaid/bonemed, /obj/item/storage/firstaid/adv{ diff --git a/citadel.dme b/citadel.dme index b57b734249b..b3f3841e25f 100644 --- a/citadel.dme +++ b/citadel.dme @@ -196,6 +196,7 @@ #include "code\__DEFINES\mobs\mobility.dm" #include "code\__DEFINES\mobs\organs.dm" #include "code\__DEFINES\mobs\silicon_privileges.dm" +#include "code\__DEFINES\mobs\sprite_accessories.dm" #include "code\__DEFINES\power\power.dm" #include "code\__DEFINES\preferences\data_keys_character.dm" #include "code\__DEFINES\preferences\data_keys_global.dm" @@ -317,28 +318,28 @@ #include "code\__HELPERS\vfx\color_animations.dm" #include "code\__HELPERS\vfx\see_anywhere.dm" #include "code\__HELPERS\vfx\shake_camera.dm" +#include "code\_globals\bitfields.dm" +#include "code\_globals\configuration.dm" +#include "code\_globals\debug.dm" +#include "code\_globals\loadout.dm" +#include "code\_globals\logging.dm" +#include "code\_globals\machines.dm" +#include "code\_globals\mobs.dm" #include "code\_globals\regexes.dm" -#include "code\_globalvars\bitfields.dm" -#include "code\_globalvars\configuration.dm" -#include "code\_globalvars\debug.dm" -#include "code\_globalvars\loadout.dm" -#include "code\_globalvars\logging.dm" -#include "code\_globalvars\machines.dm" -#include "code\_globalvars\mobs.dm" -#include "code\_globalvars\religion.dm" -#include "code\_globalvars\sensitive.dm" -#include "code\_globalvars\text_macros.dm" -#include "code\_globalvars\tgui.dm" -#include "code\_globalvars\time_vars.dm" -#include "code\_globalvars\traits.dm" -#include "code\_globalvars\lists\clients.dm" -#include "code\_globalvars\lists\keybindings.dm" -#include "code\_globalvars\lists\mapping.dm" -#include "code\_globalvars\lists\medical.dm" -#include "code\_globalvars\lists\misc.dm" -#include "code\_globalvars\lists\mobs.dm" -#include "code\_globalvars\lists\names.dm" -#include "code\_globalvars\lists\objects.dm" +#include "code\_globals\religion.dm" +#include "code\_globals\sensitive.dm" +#include "code\_globals\text_macros.dm" +#include "code\_globals\tgui.dm" +#include "code\_globals\time_vars.dm" +#include "code\_globals\traits.dm" +#include "code\_globals\lists\clients.dm" +#include "code\_globals\lists\keybindings.dm" +#include "code\_globals\lists\mapping.dm" +#include "code\_globals\lists\medical.dm" +#include "code\_globals\lists\misc.dm" +#include "code\_globals\lists\mobs.dm" +#include "code\_globals\lists\names.dm" +#include "code\_globals\lists\objects.dm" #include "code\_js\byjax.dm" #include "code\_js\menus.dm" #include "code\_onclick\adjacency.dm" @@ -3812,7 +3813,6 @@ #include "code\modules\research\designs\circuits\disks.dm" #include "code\modules\resleeving\circuitboards.dm" #include "code\modules\resleeving\computers.dm" -#include "code\modules\resleeving\designer.dm" #include "code\modules\resleeving\documents.dm" #include "code\modules\resleeving\implant.dm" #include "code\modules\resleeving\infocore_records.dm" @@ -3978,25 +3978,53 @@ #include "code\modules\spells\targeted\projectile\fireball.dm" #include "code\modules\spells\targeted\projectile\magic_missile.dm" #include "code\modules\spells\targeted\projectile\projectile.dm" -#include "code\modules\sprite_accessories\body_markings.dm" #include "code\modules\sprite_accessories\sprite_accessories.dm" -#include "code\modules\sprite_accessories\facial_hair\facial_hair.dm" -#include "code\modules\sprite_accessories\facial_hair\tajaran_facial_hair.dm" -#include "code\modules\sprite_accessories\facial_hair\teshari_facial_hair.dm" -#include "code\modules\sprite_accessories\facial_hair\unathi_facial_hair.dm" -#include "code\modules\sprite_accessories\facial_hair\vox_facial_hair.dm" -#include "code\modules\sprite_accessories\facial_hair\vulpakin_facial_hair.dm" -#include "code\modules\sprite_accessories\hair\hair.dm" -#include "code\modules\sprite_accessories\hair\sergal_hair.dm" +#include "code\modules\sprite_accessories\ears\_ears.dm" +#include "code\modules\sprite_accessories\ears\antenna.dm" +#include "code\modules\sprite_accessories\ears\horns.dm" +#include "code\modules\sprite_accessories\ears\misc.dm" +#include "code\modules\sprite_accessories\ears\animal\avian.dm" +#include "code\modules\sprite_accessories\ears\animal\bee.dm" +#include "code\modules\sprite_accessories\ears\animal\bovine.dm" +#include "code\modules\sprite_accessories\ears\animal\canid.dm" +#include "code\modules\sprite_accessories\ears\animal\cervid.dm" +#include "code\modules\sprite_accessories\ears\animal\equine.dm" +#include "code\modules\sprite_accessories\ears\animal\feline.dm" +#include "code\modules\sprite_accessories\ears\animal\lepid.dm" +#include "code\modules\sprite_accessories\ears\animal\leporid.dm" +#include "code\modules\sprite_accessories\ears\animal\murid.dm" +#include "code\modules\sprite_accessories\ears\animal\mushroom.dm" +#include "code\modules\sprite_accessories\ears\animal\sciurid.dm" +#include "code\modules\sprite_accessories\ears\animal\ursid.dm" +#include "code\modules\sprite_accessories\ears\fictional\deathclaw.dm" +#include "code\modules\sprite_accessories\ears\fictional\demon.dm" +#include "code\modules\sprite_accessories\ears\fictional\draconic.dm" +#include "code\modules\sprite_accessories\ears\fictional\elf.dm" +#include "code\modules\sprite_accessories\ears\fictional\jackalope.dm" +#include "code\modules\sprite_accessories\ears\fictional\oni.dm" +#include "code\modules\sprite_accessories\ears\fictional\otie.dm" +#include "code\modules\sprite_accessories\ears\fictional\pokemon.dm" +#include "code\modules\sprite_accessories\ears\fictional\sergal.dm" +#include "code\modules\sprite_accessories\ears\fictional\shadekin.dm" +#include "code\modules\sprite_accessories\ears\fictional\teshari.dm" +#include "code\modules\sprite_accessories\facial_hair\_facial_hair.dm" +#include "code\modules\sprite_accessories\facial_hair\tajaran.dm" +#include "code\modules\sprite_accessories\facial_hair\teshari.dm" +#include "code\modules\sprite_accessories\facial_hair\unathi.dm" +#include "code\modules\sprite_accessories\facial_hair\vox.dm" +#include "code\modules\sprite_accessories\facial_hair\vulpkanin.dm" +#include "code\modules\sprite_accessories\hair\_hair.dm" +#include "code\modules\sprite_accessories\hair\sergal.dm" #include "code\modules\sprite_accessories\hair\shadekin.dm" -#include "code\modules\sprite_accessories\hair\skrell_hair.dm" -#include "code\modules\sprite_accessories\hair\tajaran_hair.dm" -#include "code\modules\sprite_accessories\hair\teshari_hair.dm" -#include "code\modules\sprite_accessories\hair\unathi_hair.dm" -#include "code\modules\sprite_accessories\hair\unathidigi_hair.dm" -#include "code\modules\sprite_accessories\hair\vox_hair.dm" -#include "code\modules\sprite_accessories\hair\vulpakin_hair.dm" -#include "code\modules\sprite_accessories\hair\xenomorph_hybrid_domes.dm" +#include "code\modules\sprite_accessories\hair\skrell.dm" +#include "code\modules\sprite_accessories\hair\tajaran.dm" +#include "code\modules\sprite_accessories\hair\teshari.dm" +#include "code\modules\sprite_accessories\hair\unathi.dm" +#include "code\modules\sprite_accessories\hair\unathi_digitigrade.dm" +#include "code\modules\sprite_accessories\hair\vox.dm" +#include "code\modules\sprite_accessories\hair\vulpkanin.dm" +#include "code\modules\sprite_accessories\hair\xenomorph.dm" +#include "code\modules\sprite_accessories\markings\_markings.dm" #include "code\modules\sprite_accessories\markings\diona_stuff.dm" #include "code\modules\sprite_accessories\markings\eye_stuff.dm" #include "code\modules\sprite_accessories\markings\panda.dm" @@ -4008,9 +4036,50 @@ #include "code\modules\sprite_accessories\markings\tesh.dm" #include "code\modules\sprite_accessories\markings\unathi.dm" #include "code\modules\sprite_accessories\markings\vox.dm" -#include "code\modules\sprite_accessories\markings\vulp.dm" +#include "code\modules\sprite_accessories\markings\vulpkanin.dm" #include "code\modules\sprite_accessories\markings\werebeast.dm" #include "code\modules\sprite_accessories\markings\zorren.dm" +#include "code\modules\sprite_accessories\tail\_tail.dm" +#include "code\modules\sprite_accessories\tail\bearlike.dm" +#include "code\modules\sprite_accessories\tail\bird.dm" +#include "code\modules\sprite_accessories\tail\bovine.dm" +#include "code\modules\sprite_accessories\tail\bunny.dm" +#include "code\modules\sprite_accessories\tail\canid.dm" +#include "code\modules\sprite_accessories\tail\equine.dm" +#include "code\modules\sprite_accessories\tail\feline.dm" +#include "code\modules\sprite_accessories\tail\insects.dm" +#include "code\modules\sprite_accessories\tail\misc.dm" +#include "code\modules\sprite_accessories\tail\pokemon.dm" +#include "code\modules\sprite_accessories\tail\rodents_and_adjacent.dm" +#include "code\modules\sprite_accessories\tail\scalies.dm" +#include "code\modules\sprite_accessories\tail\snake.dm" +#include "code\modules\sprite_accessories\tail\synthetic.dm" +#include "code\modules\sprite_accessories\tail\taurs.dm" +#include "code\modules\sprite_accessories\tail\weird_shadow_creature_ocs.dm" +#include "code\modules\sprite_accessories\tail\species\akula.dm" +#include "code\modules\sprite_accessories\tail\species\monkey.dm" +#include "code\modules\sprite_accessories\tail\species\naramadi.dm" +#include "code\modules\sprite_accessories\tail\species\nevrean.dm" +#include "code\modules\sprite_accessories\tail\species\shadekin.dm" +#include "code\modules\sprite_accessories\tail\species\tajaran.dm" +#include "code\modules\sprite_accessories\tail\species\teshari.dm" +#include "code\modules\sprite_accessories\tail\species\unathi.dm" +#include "code\modules\sprite_accessories\tail\species\vox.dm" +#include "code\modules\sprite_accessories\tail\species\vulpkanin.dm" +#include "code\modules\sprite_accessories\tail\species\xenomorph.dm" +#include "code\modules\sprite_accessories\tail\species\zorren.dm" +#include "code\modules\sprite_accessories\wings\_wings.dm" +#include "code\modules\sprite_accessories\wings\bat.dm" +#include "code\modules\sprite_accessories\wings\draconic_furries.dm" +#include "code\modules\sprite_accessories\wings\feathered.dm" +#include "code\modules\sprite_accessories\wings\insect_not_really_wings.dm" +#include "code\modules\sprite_accessories\wings\misc.dm" +#include "code\modules\sprite_accessories\wings\moth.dm" +#include "code\modules\sprite_accessories\wings\non_moth_insects.dm" +#include "code\modules\sprite_accessories\wings\pokemon.dm" +#include "code\modules\sprite_accessories\wings\synthetic.dm" +#include "code\modules\sprite_accessories\wings\weird_shadow_creature_ocs.dm" +#include "code\modules\sprite_accessories\wings\xenomorph.dm" #include "code\modules\stockmarket\articles.dm" #include "code\modules\stockmarket\computer.dm" #include "code\modules\stockmarket\events.dm" @@ -4153,8 +4222,6 @@ #include "code\modules\vore\lick_wounds.dm" #include "code\modules\vore\trycatch_vr.dm" #include "code\modules\vore\appearance\spider_taur_powers_vr.dm" -#include "code\modules\vore\appearance\sprite_accessories_taur_vr.dm" -#include "code\modules\vore\appearance\sprite_accessories_vr.dm" #include "code\modules\vore\appearance\update_icons_vr.dm" #include "code\modules\vore\eating\belly_dat_vr.dm" #include "code\modules\vore\eating\belly_obj_vr.dm" diff --git a/code/__DEFINES/items_clothing.dm b/code/__DEFINES/items_clothing.dm index 42e333b72fa..4053ccf656b 100644 --- a/code/__DEFINES/items_clothing.dm +++ b/code/__DEFINES/items_clothing.dm @@ -77,7 +77,3 @@ #define FIRE_MAX_STACKS 25 /// If the number of stacks goes above this firesuits won't protect you anymore. If not, you can walk around while on fire like a badass. #define FIRE_MAX_FIRESUIT_STACKS 20 - -// Hair Defines -#define HAIR_VERY_SHORT 0x1 -#define HAIR_TIEABLE 0x4 diff --git a/code/__DEFINES/mobs/sprite_accessories.dm b/code/__DEFINES/mobs/sprite_accessories.dm new file mode 100644 index 00000000000..f6ebc867f7e --- /dev/null +++ b/code/__DEFINES/mobs/sprite_accessories.dm @@ -0,0 +1,9 @@ +//! hair flags +#define HAIR_VERY_SHORT (1<<0) +#define HAIR_TIEABLE (1<<1) + +DEFINE_BITFIELD(hair_flags, list( + BITFIELD(HAIR_VERY_SHORT), + BITFIELD(HAIR_TIEABLE), +)) +// Hair Defines diff --git a/code/__DEFINES/preferences/savefiles.dm b/code/__DEFINES/preferences/savefiles.dm index 92888c7e14d..c0c0476011f 100644 --- a/code/__DEFINES/preferences/savefiles.dm +++ b/code/__DEFINES/preferences/savefiles.dm @@ -11,6 +11,6 @@ //* no reason to need it for global loading, and global migrations //* should be low level anyways #define CHARACTER_VERSION_MIN -1 -#define CHARACTER_VERSION_MAX 2 +#define CHARACTER_VERSION_MAX 3 /// what nulled version fields are considered; this basically makes them go through all migrations #define CHARACTER_VERSION_LEGACY 0 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index f96fc2185c6..d39f825e7d3 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -37,27 +37,6 @@ var/global/list/NT_poster_designs = list() var/list/obj/item/uplink/world_uplinks = list() //* Preferences stuff *// -//!Hairstyles -/// Stores /datum/sprite_accessory/hair indexed by name -var/global/list/hair_styles_list = list() -var/global/list/hair_styles_male_list = list() -var/global/list/hair_styles_female_list = list() -/// Stores /datum/sprite_accessory/facial_hair indexed by name -var/global/list/facial_hair_styles_list = list() -var/global/list/facial_hair_styles_male_list = list() -var/global/list/facial_hair_styles_female_list = list() -//!Misc styles -var/global/list/skin_styles_female_list = list() //unused -/// Stores /datum/sprite_accessory/marking indexed by name -var/global/list/body_marking_styles_list = list() -/// Stores /datum/sprite_accessory/ears indexed by type -var/global/list/ear_styles_list = list() -/// Stores /datum/sprite_accessory/tail indexed by type -var/global/list/tail_styles_list = list() -/// Stores /datum/sprite_accessory/wing indexed by type -var/global/list/wing_styles_list = list() -/// Stores /datum/sprite_accessory/ears again indexed by type -var/global/list/horn_styles_list = list() //!Underwear var/datum/category_collection/underwear/global_underwear = new() //!Backpacks - The load order here is important to maintain. Don't go swapping these around. @@ -136,61 +115,6 @@ GLOBAL_LIST_EMPTY(mannequins) var/list/paths - //Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name - paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair - hair_styles_list = list() - for(var/path in paths) - var/datum/sprite_accessory/hair/H = new path - if(!istext(H.name)) - qdel(H) - continue - if(hair_styles_list[H.name]) - stack_trace("Duplicate name [H.name] detected - [hair_styles_list[H.name]] vs [H]") - continue - hair_styles_list[H.name] = H - switch(H.gender) - if(MALE) hair_styles_male_list += H.name - if(FEMALE) hair_styles_female_list += H.name - else - hair_styles_male_list += H.name - hair_styles_female_list += H.name - tim_sort(hair_styles_list, /proc/cmp_name_asc, associative = TRUE) - - //Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name - paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair - facial_hair_styles_list = list() - for(var/path in paths) - var/datum/sprite_accessory/facial_hair/H = new path() - if(!istext(H.name)) - qdel(H) - continue - if(facial_hair_styles_list[H.name]) - stack_trace("Duplicate name [H.name] detected - [facial_hair_styles_list[H.name]] vs [H]") - continue - facial_hair_styles_list[H.name] = H - switch(H.gender) - if(MALE) facial_hair_styles_male_list += H.name - if(FEMALE) facial_hair_styles_female_list += H.name - else - facial_hair_styles_male_list += H.name - facial_hair_styles_female_list += H.name - tim_sort(facial_hair_styles_list, /proc/cmp_name_asc, associative = TRUE) - - //Body markings - Initialise all /datum/sprite_accessory/marking into an list indexed by marking name - paths = typesof(/datum/sprite_accessory/marking) - /datum/sprite_accessory/marking - body_marking_styles_list = list() - for(var/path in paths) - var/datum/sprite_accessory/marking/M = new path() - if(!istext(M.name)) - qdel(M) - continue - if(body_marking_styles_list[M.name]) - stack_trace("Duplicate name [M.name] detected - [body_marking_styles_list[M.name]] vs [M]") - continue - - body_marking_styles_list[M.name] = M - tim_sort(body_marking_styles_list, /proc/cmp_name_asc, associative = TRUE) - //Posters paths = typesof(/datum/poster) - /datum/poster paths -= typesof(/datum/poster/nanotrasen) @@ -203,27 +127,6 @@ GLOBAL_LIST_EMPTY(mannequins) var/datum/poster/P = new T NT_poster_designs += P - //Custom Ears - paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears - for(var/path in paths) - var/obj/item/clothing/head/instance = new path() - ear_styles_list[path] = instance - - //Custom Tails - paths = typesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail - /datum/sprite_accessory/tail/taur - for(var/path in paths) - var/datum/sprite_accessory/tail/instance = new path() - tail_styles_list[path] = instance - - //Custom Wings - paths = typesof(/datum/sprite_accessory/wing) - /datum/sprite_accessory/wing - for(var/path in paths) - var/datum/sprite_accessory/wing/instance = new path() - wing_styles_list[path] = instance - - //Custom Ears2 -- Repathing was deemed worse than this I'm so sorry - horn_styles_list = LAZYCOPY(ear_styles_list) - // Custom species traits paths = typesof(/datum/trait) - /datum/trait - /datum/trait/negative - /datum/trait/neutral - /datum/trait/positive for(var/path in paths) diff --git a/code/__HELPERS/lists/traverse.dm b/code/__HELPERS/lists/traverse.dm index 5188590e69d..5cb4e2b77f6 100644 --- a/code/__HELPERS/lists/traverse.dm +++ b/code/__HELPERS/lists/traverse.dm @@ -21,3 +21,31 @@ else i-- return L[i] + +/** + * Returns the next item in a list. + */ +/proc/next_list_item_safe(item, list/L) + var/i + i = L.Find(item) + if(!i) + return + if(i == L.len) + i = 1 + else + i++ + return L[i] + +/** + * Returns the previous item in a list. + */ +/proc/previous_list_item_safe(item, list/L) + var/i + i = L.Find(item) + if(!i) + return + if(i == 1) + i = L.len + else + i-- + return L[i] diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 91e964c8b16..210992e23a1 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -34,43 +34,26 @@ return mobs /proc/random_hair_style(gender, species = SPECIES_HUMAN) - var/h_style = "Bald" - - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) + var/list/valid = list() + for(var/id in GLOB.sprite_accessory_hair) + var/datum/sprite_accessory/hair/S = GLOB.sprite_accessory_hair[id] + if(S.gender != NEUTER && gender != S.gender) continue if(S.apply_restrictions && !(species in S.species_allowed)) continue - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] - - if(valid_hairstyles.len) - h_style = pick(valid_hairstyles) - - return h_style + valid += id + return SAFEPICK(valid) /proc/random_facial_hair_style(gender, species = SPECIES_HUMAN) - var/f_style = "Shaved" - - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) + var/list/valid = list() + for(var/id in GLOB.sprite_accessory_facial_hair) + var/datum/sprite_accessory/facial_hair/S = GLOB.sprite_accessory_facial_hair[id] + if(S.gender != NEUTER && gender != S.gender) continue if(S.apply_restrictions && !(species in S.species_allowed)) continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - - if(valid_facialhairstyles.len) - f_style = pick(valid_facialhairstyles) - - return f_style + valid += id + return SAFEPICK(valid) /proc/sanitize_name(name, species = SPECIES_HUMAN) var/datum/species/current_species diff --git a/code/_globalvars/bitfields.dm b/code/_globals/bitfields.dm similarity index 100% rename from code/_globalvars/bitfields.dm rename to code/_globals/bitfields.dm diff --git a/code/_globalvars/configuration.dm b/code/_globals/configuration.dm similarity index 100% rename from code/_globalvars/configuration.dm rename to code/_globals/configuration.dm diff --git a/code/_globalvars/debug.dm b/code/_globals/debug.dm similarity index 100% rename from code/_globalvars/debug.dm rename to code/_globals/debug.dm diff --git a/code/_globalvars/lists/clients.dm b/code/_globals/lists/clients.dm similarity index 100% rename from code/_globalvars/lists/clients.dm rename to code/_globals/lists/clients.dm diff --git a/code/_globalvars/lists/keybindings.dm b/code/_globals/lists/keybindings.dm similarity index 100% rename from code/_globalvars/lists/keybindings.dm rename to code/_globals/lists/keybindings.dm diff --git a/code/_globalvars/lists/mapping.dm b/code/_globals/lists/mapping.dm similarity index 100% rename from code/_globalvars/lists/mapping.dm rename to code/_globals/lists/mapping.dm diff --git a/code/_globalvars/lists/medical.dm b/code/_globals/lists/medical.dm similarity index 100% rename from code/_globalvars/lists/medical.dm rename to code/_globals/lists/medical.dm diff --git a/code/_globalvars/lists/misc.dm b/code/_globals/lists/misc.dm similarity index 100% rename from code/_globalvars/lists/misc.dm rename to code/_globals/lists/misc.dm diff --git a/code/_globals/lists/mobs.dm b/code/_globals/lists/mobs.dm new file mode 100644 index 00000000000..33a58955dc9 --- /dev/null +++ b/code/_globals/lists/mobs.dm @@ -0,0 +1,163 @@ +/// all player mobs (not clients!) +GLOBAL_LIST_EMPTY(player_list) + +/// by id +GLOBAL_LIST_INIT(sprite_accessory_hair, all_hair_styles()) +/// by id +GLOBAL_LIST_INIT(sprite_accessory_ears, all_ear_styles()) +/// by id +GLOBAL_LIST_INIT(sprite_accessory_tails, all_tail_styles()) +/// by id +GLOBAL_LIST_INIT(sprite_accessory_wings, all_wing_styles()) +/// by id +GLOBAL_LIST_INIT(sprite_accessory_facial_hair, all_facial_hair_styles()) +/// by id +GLOBAL_LIST_INIT(sprite_accessory_markings, all_marking_styles()) + +// todo: most uses of these should either be a direct ref under new marking system or +// todo: an id to ref. +// todo: however, there are some legitimate cases of needing fast name lookup, +// todo: like non-tgui interfaces that let you choose markings +// todo: do not blindly kill these lists, we'll deal with everything as we go. + +// by name +GLOBAL_LIST(legacy_hair_lookup) +// by id +GLOBAL_LIST(legacy_ears_lookup) +// by id +GLOBAL_LIST(legacy_wing_lookup) +// by id +GLOBAL_LIST(legacy_tail_lookup) +// by name +GLOBAL_LIST(legacy_facial_hair_lookup) +// by name +GLOBAL_LIST(legacy_marking_lookup) + +/proc/all_hair_styles() + . = list() + var/list/by_name = list() + for(var/path in subtypesof(/datum/sprite_accessory/hair)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(!S.id) + stack_trace("no id on [path]") + continue + if(.[S.id]) + stack_trace("duplicate id [S.id] on [path] and [.[S.id]]") + continue + if(by_name[S.name]) + stack_trace("duplicate name [S.name] on [path]") + continue + .[S.id] = S + by_name[S.name] = S + tim_sort(by_name, /proc/cmp_text_asc, associative = FALSE) + GLOB.legacy_hair_lookup = by_name + tim_sort(., /proc/cmp_name_asc, associative = TRUE) + +/proc/all_ear_styles() + . = list() + var/list/by_type = list() + for(var/path in subtypesof(/datum/sprite_accessory/ears)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(!S.id) + stack_trace("no id on [path]") + continue + if(.[S.id]) + stack_trace("duplicate id [S.id] on [path] and [.[S.id]]") + continue + .[S.id] = S + by_type[S.type] = S + tim_sort(by_type, /proc/cmp_name_asc, associative = TRUE) + GLOB.legacy_ears_lookup = by_type + tim_sort(., /proc/cmp_name_asc, associative = TRUE) + +/proc/all_wing_styles() + . = list() + var/list/by_type = list() + for(var/path in subtypesof(/datum/sprite_accessory/wing)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(!S.id) + stack_trace("no id on [path]") + continue + if(.[S.id]) + stack_trace("duplicate id [S.id] on [path] and [.[S.id]]") + continue + .[S.id] = S + by_type[S.type] = S + tim_sort(by_type, /proc/cmp_name_asc, associative = TRUE) + GLOB.legacy_wing_lookup = by_type + tim_sort(., /proc/cmp_name_asc, associative = TRUE) + +/proc/all_tail_styles() + . = list() + var/list/by_type = list() + for(var/path in subtypesof(/datum/sprite_accessory/tail)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(!S.id) + stack_trace("no id on [path]") + continue + if(.[S.id]) + stack_trace("duplicate id [S.id] on [path] and [.[S.id]]") + continue + .[S.id] = S + by_type[S.type] = S + tim_sort(by_type, /proc/cmp_name_asc, associative = TRUE) + GLOB.legacy_tail_lookup = by_type + tim_sort(., /proc/cmp_name_asc, associative = TRUE) + +/proc/all_facial_hair_styles() + . = list() + var/list/by_name = list() + for(var/path in subtypesof(/datum/sprite_accessory/facial_hair)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(!S.id) + stack_trace("no id on [path]") + continue + if(.[S.id]) + stack_trace("duplicate id [S.id] on [path] and [.[S.id]]") + continue + if(by_name[S.name]) + stack_trace("duplicate name [S.name] on [path]") + continue + .[S.id] = S + by_name[S.name] = S + tim_sort(by_name, /proc/cmp_text_asc, associative = FALSE) + GLOB.legacy_facial_hair_lookup = by_name + tim_sort(., /proc/cmp_name_asc, associative = TRUE) + +/proc/all_marking_styles() + . = list() + var/list/by_name = list() + for(var/path in subtypesof(/datum/sprite_accessory/marking)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(!S.id) + stack_trace("no id on [path]") + continue + if(.[S.id]) + stack_trace("duplicate id [S.id] on [path] and [.[S.id]]") + continue + if(by_name[S.name]) + stack_trace("duplicate name [S.name] on [path]") + continue + .[S.id] = S + by_name[S.name] = S + tim_sort(by_name, /proc/cmp_text_asc, associative = FALSE) + GLOB.legacy_marking_lookup = by_name + tim_sort(., /proc/cmp_name_asc, associative = TRUE) diff --git a/code/_globalvars/lists/names.dm b/code/_globals/lists/names.dm similarity index 100% rename from code/_globalvars/lists/names.dm rename to code/_globals/lists/names.dm diff --git a/code/_globalvars/lists/objects.dm b/code/_globals/lists/objects.dm similarity index 100% rename from code/_globalvars/lists/objects.dm rename to code/_globals/lists/objects.dm diff --git a/code/_globalvars/lists/typecache.dm b/code/_globals/lists/typecache.dm similarity index 100% rename from code/_globalvars/lists/typecache.dm rename to code/_globals/lists/typecache.dm diff --git a/code/_globalvars/loadout.dm b/code/_globals/loadout.dm similarity index 100% rename from code/_globalvars/loadout.dm rename to code/_globals/loadout.dm diff --git a/code/_globalvars/logging.dm b/code/_globals/logging.dm similarity index 100% rename from code/_globalvars/logging.dm rename to code/_globals/logging.dm diff --git a/code/_globalvars/machines.dm b/code/_globals/machines.dm similarity index 100% rename from code/_globalvars/machines.dm rename to code/_globals/machines.dm diff --git a/code/_globalvars/mobs.dm b/code/_globals/mobs.dm similarity index 100% rename from code/_globalvars/mobs.dm rename to code/_globals/mobs.dm diff --git a/code/_globalvars/religion.dm b/code/_globals/religion.dm similarity index 100% rename from code/_globalvars/religion.dm rename to code/_globals/religion.dm diff --git a/code/_globalvars/sensitive.dm b/code/_globals/sensitive.dm similarity index 100% rename from code/_globalvars/sensitive.dm rename to code/_globals/sensitive.dm diff --git a/code/_globalvars/text_macros.dm b/code/_globals/text_macros.dm similarity index 100% rename from code/_globalvars/text_macros.dm rename to code/_globals/text_macros.dm diff --git a/code/_globalvars/tgui.dm b/code/_globals/tgui.dm similarity index 100% rename from code/_globalvars/tgui.dm rename to code/_globals/tgui.dm diff --git a/code/_globalvars/time_vars.dm b/code/_globals/time_vars.dm similarity index 100% rename from code/_globalvars/time_vars.dm rename to code/_globals/time_vars.dm diff --git a/code/_globalvars/traits.dm b/code/_globals/traits.dm similarity index 100% rename from code/_globalvars/traits.dm rename to code/_globals/traits.dm diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm deleted file mode 100644 index 6c5fa8de683..00000000000 --- a/code/_globalvars/lists/mobs.dm +++ /dev/null @@ -1,2 +0,0 @@ -/// all player mobs (not clients!) -GLOBAL_LIST_EMPTY(player_list) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 8d8d0216498..0957f6671f7 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -189,27 +189,27 @@ var/global/list/datum/gene/dna_genes[0] // FIXME: Species-specific defaults pls if(!character.h_style) character.h_style = "Skinhead" - var/hair = hair_styles_list.Find(character.h_style) + var/hair = GLOB.legacy_hair_lookup.Find(character.h_style) //! Facial Hair if(!character.f_style) character.f_style = "Shaved" - var/beard = facial_hair_styles_list.Find(character.f_style) + var/beard = GLOB.legacy_facial_hair_lookup.Find(character.f_style) //! Demi Ears var/ear_style = 0 if(character.ear_style) - ear_style = ear_styles_list.Find(character.ear_style.type) + ear_style = GLOB.legacy_ears_lookup.Find(character.ear_style.type) //! Demi Tails var/tail_style = 0 if(character.tail_style) - tail_style = tail_styles_list.Find(character.tail_style.type) + tail_style = GLOB.legacy_tail_lookup.Find(character.tail_style.type) //! Demi Wings var/wing_style = 0 if(character.wing_style) - wing_style = wing_styles_list.Find(character.wing_style.type) + wing_style = GLOB.legacy_wing_lookup.Find(character.wing_style.type) //! Playerscale (This assumes list is sorted big->small) var/size_multiplier = player_sizes_list.len // If fail to find, take smallest @@ -232,10 +232,10 @@ var/global/list/datum/gene/dna_genes[0] // +1 to account for the none-of-the-above possibility - SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) - SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, tail_styles_list.len + 1, 1) + SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, GLOB.legacy_ears_lookup.len + 1, 1) + SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, GLOB.legacy_tail_lookup.len + 1, 1) SetUIValueRange(DNA_UI_PLAYERSCALE, size_multiplier, player_sizes_list.len, 1) - SetUIValueRange(DNA_UI_WING_STYLE, wing_style + 1, wing_styles_list.len + 1, 1) + SetUIValueRange(DNA_UI_WING_STYLE, wing_style + 1, GLOB.legacy_wing_lookup.len + 1, 1) // DNA BLOCK VALUE MAX MIN SetUIValueRange(DNA_UI_TAIL_R, character.r_tail, 255, 1) @@ -294,8 +294,8 @@ var/global/list/datum/gene/dna_genes[0] SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) - SetUIValueRange(DNA_UI_HAIR_STYLE, hair, hair_styles_list.len, 1) - SetUIValueRange(DNA_UI_BEARD_STYLE, beard, facial_hair_styles_list.len,1) + SetUIValueRange(DNA_UI_HAIR_STYLE, hair, GLOB.legacy_hair_lookup.len, 1) + SetUIValueRange(DNA_UI_BEARD_STYLE, beard, GLOB.legacy_facial_hair_lookup.len,1) body_markings.Cut() //s_base = character.s_base //doesn't work, fuck me diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 91d8322ed7e..5e80590cdf0 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -190,21 +190,21 @@ E.markings = marklist.Copy() //! Hair - var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE,hair_styles_list.len) - if((0 < hair) && (hair <= hair_styles_list.len)) - H.h_style = hair_styles_list[hair] + var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE, GLOB.legacy_hair_lookup.len) + if((0 < hair) && (hair <= GLOB.legacy_hair_lookup.len)) + H.h_style = GLOB.legacy_hair_lookup[hair] //! Facial Hair - var/beard = dna.GetUIValueRange(DNA_UI_BEARD_STYLE,facial_hair_styles_list.len) - if((0 < beard) && (beard <= facial_hair_styles_list.len)) - H.f_style = facial_hair_styles_list[beard] + var/beard = dna.GetUIValueRange(DNA_UI_BEARD_STYLE, GLOB.legacy_facial_hair_lookup.len) + if((0 < beard) && (beard <= GLOB.legacy_facial_hair_lookup.len)) + H.f_style = GLOB.legacy_facial_hair_lookup[beard] //! Ears - var/ears = dna.GetUIValueRange(DNA_UI_EAR_STYLE, ear_styles_list.len + 1) - 1 + var/ears = dna.GetUIValueRange(DNA_UI_EAR_STYLE, GLOB.legacy_ears_lookup.len + 1) - 1 if(ears <= 1) H.ear_style = null - else if((0 < ears) && (ears <= ear_styles_list.len)) - H.ear_style = ear_styles_list[ear_styles_list[ears]] + else if((0 < ears) && (ears <= GLOB.legacy_ears_lookup.len)) + H.ear_style = GLOB.legacy_ears_lookup[GLOB.legacy_ears_lookup[ears]] //! Ear Color H.r_ears = dna.GetUIValueRange(DNA_UI_EARS_R, 255) @@ -218,18 +218,18 @@ H.b_ears3 = dna.GetUIValueRange(DNA_UI_EARS3_B, 255) //! Tail - var/tail = dna.GetUIValueRange(DNA_UI_TAIL_STYLE, tail_styles_list.len + 1) - 1 + var/tail = dna.GetUIValueRange(DNA_UI_TAIL_STYLE, GLOB.legacy_tail_lookup.len + 1) - 1 if(tail <= 1) H.tail_style = null - else if((0 < tail) && (tail <= tail_styles_list.len)) - H.tail_style = tail_styles_list[tail_styles_list[tail]] + else if((0 < tail) && (tail <= GLOB.legacy_tail_lookup.len)) + H.tail_style = GLOB.legacy_tail_lookup[GLOB.legacy_tail_lookup[tail]] //! Wing - var/wing = dna.GetUIValueRange(DNA_UI_WING_STYLE, wing_styles_list.len + 1) - 1 + var/wing = dna.GetUIValueRange(DNA_UI_WING_STYLE, GLOB.legacy_wing_lookup.len + 1) - 1 if(wing <= 1) H.wing_style = null - else if((0 < wing) && (wing <= wing_styles_list.len)) - H.wing_style = wing_styles_list[wing_styles_list[wing]] + else if((0 < wing) && (wing <= GLOB.legacy_wing_lookup.len)) + H.wing_style = GLOB.legacy_wing_lookup[GLOB.legacy_wing_lookup[wing]] //! Wing Color H.r_wing = dna.GetUIValueRange(DNA_UI_WING_R, 255) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 18a859e6561..e9117e19859 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -987,12 +987,12 @@ var/list/admin_verbs_event_manager = list( M.s_tone = -M.s_tone + 35 // hair - var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list + var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in GLOB.legacy_hair_lookup if(new_hstyle) M.h_style = new_hstyle // facial hair - var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list + var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in GLOB.legacy_facial_hair_lookup if(new_fstyle) M.f_style = new_fstyle diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 8b2e905a497..00fd0440ae8 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -40,7 +40,7 @@ if(h_style == hair_style) return - if(!(hair_style in hair_styles_list)) + if(!(hair_style in GLOB.legacy_hair_lookup)) return h_style = hair_style @@ -85,7 +85,7 @@ if(f_style == facial_hair_style) return - if(!(facial_hair_style in facial_hair_styles_list)) + if(!(facial_hair_style in GLOB.legacy_facial_hair_lookup)) return f_style = facial_hair_style @@ -208,8 +208,8 @@ if(H) use_species = H.species.get_bodytype_legacy(src) var/list/valid_hairstyles = new() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + for(var/hairstyle in GLOB.legacy_hair_lookup) + var/datum/sprite_accessory/S = GLOB.legacy_hair_lookup[hairstyle] if(check_gender && gender != NEUTER) if(gender == MALE && S.gender == FEMALE) @@ -230,8 +230,8 @@ if(H) use_species = H.species.get_bodytype_legacy(src) var/list/valid_facial_hairstyles = new() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + for(var/facialhairstyle in GLOB.legacy_facial_hair_lookup) + var/datum/sprite_accessory/S = GLOB.legacy_facial_hair_lookup[facialhairstyle] if(gender != NEUTER) if(gender == MALE && S.gender == FEMALE) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 02befea8ecb..9637379e974 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -11,16 +11,16 @@ return if(h_style) - var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style] + var/datum/sprite_accessory/hair/hair_style = GLOB.legacy_hair_lookup[h_style] var/selected_string - if(!(hair_style.flags & HAIR_TIEABLE)) + if(!(hair_style.hair_flags & HAIR_TIEABLE)) to_chat(src, SPAN_WARNING("Your hair isn't long enough to tie.")) return else var/list/datum/sprite_accessory/hair/valid_hairstyles = list() - for(var/hair_string in hair_styles_list) - var/datum/sprite_accessory/hair/test = hair_styles_list[hair_string] - if(test.flags & HAIR_TIEABLE) + for(var/hair_string in GLOB.legacy_hair_lookup) + var/datum/sprite_accessory/hair/test = GLOB.legacy_hair_lookup[hair_string] + if(test.hair_flags & HAIR_TIEABLE) valid_hairstyles.Add(hair_string) selected_string = input("Select a new hairstyle", "Your hairstyle", hair_style) as null|anything in valid_hairstyles if(incapacitated()) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7c6da4c5a55..bacbe0f7e2b 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -390,7 +390,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) var/icon/face_standing = icon(icon = 'icons/mob/human_face.dmi', icon_state = "bald_s") if(f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + var/datum/sprite_accessory/facial_hair_style = GLOB.legacy_facial_hair_lookup[f_style] if(facial_hair_style && (!facial_hair_style.apply_restrictions || (src.species.get_bodytype_legacy(src) in facial_hair_style.species_allowed))) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(facial_hair_style.do_colouration) @@ -399,10 +399,10 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) face_standing.Blend(facial_s, ICON_OVERLAY) if(h_style) - var/datum/sprite_accessory/hair/hair_style = hair_styles_list[h_style] + var/datum/sprite_accessory/hair/hair_style = GLOB.legacy_hair_lookup[h_style] if(head && (head.flags_inv & BLOCKHEADHAIR)) - if(!(hair_style.flags & HAIR_VERY_SHORT)) - hair_style = hair_styles_list["Short Hair"] + if(!(hair_style.hair_flags & HAIR_VERY_SHORT)) + hair_style = GLOB.legacy_hair_lookup["Short Hair"] if(hair_style && (!hair_style.apply_restrictions || (src.species.get_bodytype_legacy(src) in hair_style.species_allowed))) var/icon/grad_s diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm index a26148e981d..6841a47add5 100644 --- a/code/modules/organs/external/_external_icons.dm +++ b/code/modules/organs/external/_external_icons.dm @@ -119,7 +119,7 @@ GLOBAL_LIST_EMPTY(limb_icon_cache) var/image/res = image('icons/mob/human_face.dmi',"bald_s") //Facial hair if(owner.f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] + var/datum/sprite_accessory/facial_hair_style = GLOB.legacy_facial_hair_lookup[owner.f_style] if(facial_hair_style && (!facial_hair_style.apply_restrictions || (species.get_bodytype_legacy(owner) in facial_hair_style.species_allowed))) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(facial_hair_style.do_colouration) @@ -129,10 +129,10 @@ GLOBAL_LIST_EMPTY(limb_icon_cache) //Head hair if(owner.h_style) var/style = owner.h_style - var/datum/sprite_accessory/hair/hair_style = hair_styles_list[style] + var/datum/sprite_accessory/hair/hair_style = GLOB.legacy_hair_lookup[style] if(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)) - if(!(hair_style.flags & HAIR_VERY_SHORT)) - hair_style = hair_styles_list["Short Hair"] + if(!(hair_style.hair_flags & HAIR_VERY_SHORT)) + hair_style = GLOB.legacy_hair_lookup["Short Hair"] if(hair_style && (!hair_style.apply_restrictions || (species.get_bodytype_legacy(owner) in hair_style.species_allowed))) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") var/icon/hair_s_add = new/icon("icon" = hair_style.icon_add, "icon_state" = "[hair_style.icon_state]_s") diff --git a/code/modules/organs/external/standard_vr.dm b/code/modules/organs/external/standard_vr.dm index 05348b13764..f9dd58d46e5 100644 --- a/code/modules/organs/external/standard_vr.dm +++ b/code/modules/organs/external/standard_vr.dm @@ -33,7 +33,7 @@ mob_icon.Blend(lip_icon, ICON_OVERLAY) if(owner.f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] + var/datum/sprite_accessory/facial_hair_style = GLOB.legacy_facial_hair_lookup[owner.f_style] if(facial_hair_style && (!facial_hair_style.apply_restrictions || (species.get_bodytype_legacy(owner) in facial_hair_style.species_allowed))) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(facial_hair_style.do_colouration) @@ -41,7 +41,7 @@ overlays |= image(facial_s, "pixel_y" = head_offset) if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR))) - var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style] + var/datum/sprite_accessory/hair_style = GLOB.legacy_hair_lookup[owner.h_style] if(hair_style && (!hair_style.apply_restrictions || (species.get_bodytype_legacy(owner) in hair_style.species_allowed))) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3) diff --git a/code/modules/preferences/_preferences.dm b/code/modules/preferences/_preferences.dm index ca4e3175bb0..813088567ac 100644 --- a/code/modules/preferences/_preferences.dm +++ b/code/modules/preferences/_preferences.dm @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// PDA type. var/pdachoice = 1 /// Hair type. - var/h_style = "Bald" + var/h_style_id /// Hair color. var/r_hair = 0 /// Hair color. @@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// Gradient style. var/grad_wingstyle = "None" /// Face hair type. - var/f_style = "Shaved" + var/f_style_id /// Face hair color. var/r_facial = 0 /// Face hair color. @@ -181,7 +181,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// Set to 1 when altering limb states. fix for prosthetic > normal changes not working on preview. var/regen_limbs = 0 - var/list/body_markings = list() //? "name" = "#rgbcolor" + var/list/body_marking_ids = list() //? "id" = "#rgbcolor" var/list/flavor_texts = list() var/list/flavour_texts_robot = list() @@ -263,6 +263,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) key_bindings = deep_copy_list(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds and update their movement keys client?.update_movement_keys(src) + LAZYINITLIST(character) + LAZYINITLIST(options) + LAZYINITLIST(skin) initialized = TRUE /datum/preferences/proc/block_until_initialized() diff --git a/code/modules/preferences/migration.dm b/code/modules/preferences/migration.dm index c76247b5183..6552f07937d 100644 --- a/code/modules/preferences/migration.dm +++ b/code/modules/preferences/migration.dm @@ -4,10 +4,15 @@ * - current_version - the version it's at * - errors - put errors into this list to be displayed to the player * - options - the loaded global options list + * - prefs - prefs if any; if null, we're probably doing a clientless migration. */ -/datum/preferences/proc/perform_global_migrations(savefile/S, current_version, list/errors, list/options) +/datum/controller/subsystem/characters/proc/perform_global_migrations(savefile/S, current_version, list/errors, list/options, datum/preferences/prefs) if(current_version < 13) - addtimer(CALLBACK(src, .proc/force_reset_keybindings), 5 SECONDS) + if(prefs) + addtimer(CALLBACK(prefs, /datum/preferences/proc/force_reset_keybindings), 5 SECONDS) + else + var/list/new_bindings = deep_copy_list(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds + WRITE_FILE(S["key_bindings"], new_bindings) if(current_version < 15) var/list/language_prefixes S["language_prefixes"] >> language_prefixes @@ -21,8 +26,9 @@ * - current_version - the version it's at * - errors - put errors into this list to be displayed to the player * - options - the loaded character options list + * - prefs - prefs if any; if null, we're probably doing a clientless migration. */ -/datum/preferences/proc/perform_character_migrations(savefile/S, current_version, list/errors, list/character) +/datum/controller/subsystem/characters/proc/perform_character_migrations(savefile/S, current_version, list/errors, list/character, datum/preferences/prefs) if(current_version < 1) // MIGRATE JOBS var/alternative_option @@ -108,6 +114,8 @@ character[CHARACTER_DATA_CHAR_SPECIES] = RS.uid else errors?.Add(SPAN_DANGER("Species migration failed - no species datum. Report this to a coder.")) + // GRAB CHARACTER SPECIES - WE'LL NEED IT + var/datum/character_species/CS = SScharacters.resolve_character_species(RS.uid) // MIGRATE LANGUAGES var/list/alternate_languages S["language"] >> alternate_languages @@ -115,12 +123,125 @@ alternate_languages = list() var/list/translated_languages = list() character[CHARACTER_DATA_LANGUAGES] = translated_languages - var/list/innate = innate_language_ids() + var/list/innate = CS.get_intrinsic_language_ids() for(var/name in alternate_languages) var/datum/language/L = SScharacters.resolve_language_name(name) if(L.id in innate) continue translated_languages += L.id - translated_languages.len = clamp(translated_languages.len, 0, extraneous_languages_max()) + translated_languages.len = clamp(translated_languages.len, 0, CS.get_max_additional_languages()) if(current_version < 2) character -= GLOBAL_DATA_LANGUAGE_PREFIX + if(current_version < 3) + // hair_style_name + // facial_style_name + // ear_style (type) + // horn_style (type) + // tail_style (type) + // wing_style (type) + // body_markings (list[name = color]) + //! get + var/old_hname + var/old_fname + var/old_etype + var/old_htype + var/old_ttype + var/old_wtype + var/old_mnames_colors + READ_FILE(S["hair_style_name"], old_hname) + READ_FILE(S["facial_style_name"], old_fname) + READ_FILE(S["ear_style"], old_etype) + READ_FILE(S["horn_style"], old_htype) + READ_FILE(S["wing_style"], old_wtype) + READ_FILE(S["tail_style"], old_ttype) + READ_FILE(S["body_markings"], old_mnames_colors) + old_mnames_colors = sanitize_islist(old_mnames_colors) + //! gather + var/datum/sprite_accessory/resolved_hair = GLOB.legacy_hair_lookup[old_hname] + var/datum/sprite_accessory/resolved_facial = GLOB.legacy_facial_hair_lookup[old_fname] + var/datum/sprite_accessory/resolved_ears = GLOB.legacy_ears_lookup[old_etype] + var/datum/sprite_accessory/resolved_horns = GLOB.legacy_ears_lookup[old_htype] + var/datum/sprite_accessory/resolved_tail = GLOB.legacy_tail_lookup[old_ttype] + var/datum/sprite_accessory/resolved_wings = GLOB.legacy_wing_lookup[old_wtype] + var/list/resolved_markings = list() + for(var/name in old_mnames_colors) + var/datum/sprite_accessory/resolved_marking = GLOB.legacy_marking_lookup[name] + if(!resolved_marking) + continue + resolved_markings[resolved_marking.id] = old_mnames_colors[name] + //! write + WRITE_FILE(S["hair_style"], resolved_hair?.id) + WRITE_FILE(S["facial_style"], resolved_facial?.id) + WRITE_FILE(S["ear_style_id"], resolved_ears?.id) + WRITE_FILE(S["wing_style_id"], resolved_wings?.id) + WRITE_FILE(S["tail_style_id"], resolved_tail?.id) + WRITE_FILE(S["horn_style_id"], resolved_horns?.id) + WRITE_FILE(S["body_marking_ids"], resolved_markings) + + +/** + * clientless migration of savefiles + */ +/datum/controller/subsystem/characters/proc/migrate_savefile(path, list/errors = list()) + var/savefile/S + if(istype(path, /savefile)) + S = path + else + S = new(path) + // perform global - we should be on / when migrations fire + S.cd = "/" + var/global_version + READ_FILE(S["version"], global_version) + if(!isnum(global_version)) + // no version? assume we don't have one. + global_version = SAVEFILE_VERSION_MAX + var/list/global_data + READ_FILE(S["global"], global_data) + global_data = sanitize_islist(global_data) + perform_global_migrations(S, global_version, errors, global_data, null) + // save global + global_version = SAVEFILE_VERSION_MAX + WRITE_FILE(S["version"], global_version) + WRITE_FILE(S["global"], global_data) + // migrate all slots + for(var/i in 1 to config_legacy.character_slots) + // perform character slot migrations - we should be on /character[slot] when migrations fire + S.cd = "/" + var/list/character_data + var/character_version + READ_FILE(S["slot_[i]"], character_data) + character_data = sanitize_islist(character_data) + character_version = character_data[CHARACTER_DATA_VERSION] + if(!isnum(character_version)) + // no version? assume it's a legacy file as all new files should have one. + character_version = CHARACTER_VERSION_LEGACY + S.cd = "/character[i]" + perform_character_migrations(S, character_version, errors, character_data, null) + character_data[CHARACTER_DATA_VERSION] = CHARACTER_VERSION_MAX + // save character + S.cd = "/" + WRITE_FILE(S["slot_[i]"], character_data) + +// the oh god oh fuck proc that migrates every file at once +/* +/proc/___migrate_all_savefiles() + // oh fuck you + . = 0 + var/timer = REALTIMEOFDAY + to_chat(world, SPAN_DANGER("Migrating all savefiles. Please do not attempt to use character setup, lest you risk data loss.")) + for(var/path in directory_walk(list("data/player_saves/"))) + var/list/split = splittext(path, "/") + if(!split.len || (split[split.len] != "preferences.sav")) + continue + var/list/what_fucked_up = list() + SScharacters.migrate_savefile(path, what_fucked_up) + ++. + if(!(. % 100)) + to_chat(world, SPAN_DANGER("Count: [.]")) + if(length(what_fucked_up)) + SScharacters.subsystem_log("Migration errored for [path]:\n\t[jointext(what_fucked_up, "\n\t")]") + CHECK_TICK + var/took = REALTIMEOFDAY - timer + to_chat(world, SPAN_DANGER("Migrated [.] savefiles in [round(took * 0.1, 0.1)] seconds.")) +*/ + diff --git a/code/modules/preferences/preference_setup/general/03_body.dm b/code/modules/preferences/preference_setup/general/03_body.dm index 45e5140ab8a..b36c0344baa 100644 --- a/code/modules/preferences/preference_setup/general/03_body.dm +++ b/code/modules/preferences/preference_setup/general/03_body.dm @@ -24,8 +24,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["skin_red"] >> pref.r_skin S["skin_green"] >> pref.g_skin S["skin_blue"] >> pref.b_skin - S["hair_style_name"] >> pref.h_style - S["facial_style_name"] >> pref.f_style + S["hair_style"] >> pref.h_style_id + S["facial_style"] >> pref.f_style_id S["grad_style_name"] >> pref.grad_style S["grad_wingstyle_name"]>> pref.grad_wingstyle S["eyes_red"] >> pref.r_eyes @@ -36,7 +36,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["mirror"] >> pref.mirror S["organ_data"] >> pref.organ_data S["rlimb_data"] >> pref.rlimb_data - S["body_markings"] >> pref.body_markings + S["body_marking_ids"] >> pref.body_marking_ids S["synth_color"] >> pref.synth_color S["synth_red"] >> pref.r_synth S["synth_green"] >> pref.g_synth @@ -61,8 +61,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["skin_red"] << pref.r_skin S["skin_green"] << pref.g_skin S["skin_blue"] << pref.b_skin - S["hair_style_name"] << pref.h_style - S["facial_style_name"] << pref.f_style + S["hair_style"] << pref.h_style_id + S["facial_style"] << pref.f_style_id S["grad_style_name"] << pref.grad_style S["grad_wingstyle_name"]<< pref.grad_wingstyle S["eyes_red"] << pref.r_eyes @@ -73,7 +73,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["mirror"] << pref.mirror S["organ_data"] << pref.organ_data S["rlimb_data"] << pref.rlimb_data - S["body_markings"] << pref.body_markings + S["body_marking_ids"] << pref.body_marking_ids S["synth_color"] << pref.synth_color S["synth_red"] << pref.r_synth S["synth_green"] << pref.g_synth @@ -97,8 +97,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin)) pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin)) pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin)) - pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style)) - pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style)) + pref.h_style_id = sanitize_inlist(pref.h_style_id, GLOB.sprite_accessory_hair) + pref.f_style_id = sanitize_inlist(pref.f_style_id, GLOB.sprite_accessory_facial_hair) pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style)) pref.grad_wingstyle = sanitize_inlist(pref.grad_wingstyle, GLOB.hair_gradients, initial(pref.grad_wingstyle)) pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes)) @@ -107,12 +107,13 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.b_type = sanitize_istext(pref.b_type, initial(pref.b_type)) if(pref.mirror == null) pref.mirror = TRUE - pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities)) - if(!pref.organ_data) pref.organ_data = list() - if(!pref.rlimb_data) pref.rlimb_data = list() - if(!pref.body_markings) pref.body_markings = list() - else pref.body_markings &= body_marking_styles_list + if(!pref.organ_data) + pref.organ_data = list() + if(!pref.rlimb_data) + pref.rlimb_data = list() + pref.body_marking_ids = sanitize_islist(pref.body_marking_ids) + pref.body_marking_ids &= GLOB.sprite_accessory_markings if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options)) pref.bgstate = "000" @@ -142,8 +143,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O character.g_skin = pref.g_skin character.b_skin = pref.b_skin character.s_tone = pref.s_tone - character.h_style = pref.h_style - character.f_style = pref.f_style + var/datum/sprite_accessory/S = GLOB.sprite_accessory_hair[pref.h_style_id] + character.h_style = S.name + S = GLOB.sprite_accessory_facial_hair[pref.f_style_id] + character.f_style = S.name character.grad_style = pref.grad_style character.grad_wingstyle = pref.grad_wingstyle character.b_type = pref.b_type @@ -218,14 +221,14 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O continue O.markings.Cut() - for(var/name in pref.body_markings) - var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[name] - var/mark_color = "[pref.body_markings[name]]" + for(var/id in pref.body_marking_ids) + var/datum/sprite_accessory/marking/mark_datum = GLOB.sprite_accessory_markings[id] + var/mark_color = "[pref.body_marking_ids[id]]" for(var/BP in mark_datum.body_parts) var/obj/item/organ/external/O = character.organs_by_name[BP] if(O) - O.markings[name] = list("color" = mark_color, "datum" = mark_datum) + O.markings[id] = list("color" = mark_color, "datum" = mark_datum) var/list/last_descriptors = list() if(islist(pref.body_descriptors)) @@ -379,16 +382,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "Hair
" if(has_flag(mob_species, HAS_HAIR_COLOR)) . += "Change Color [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] " - . += " Style: < > [pref.h_style]
" //The < & > in this line is correct-- those extra characters are the arrows you click to switch between styles. + var/datum/sprite_accessory/current_hair = GLOB.sprite_accessory_hair[pref.h_style_id] + . += " Style: < > [current_hair.name]
" //The < & > in this line is correct-- those extra characters are the arrows you click to switch between styles. . += "Gradient
" . += "Change Color [color_square(pref.r_grad, pref.g_grad, pref.b_grad)] " - . += " Style: < > [pref.grad_style]
" + . += " Style: < > [pref.grad_style]
" . += "
Facial
" if(has_flag(mob_species, HAS_HAIR_COLOR)) . += "Change Color [color_square(pref.r_facial, pref.g_facial, pref.b_facial)] " - . += " Style: < > [pref.f_style]
" //Same as above with the extra > & < characters + var/datum/sprite_accessory/current_face_hair = GLOB.sprite_accessory_facial_hair[pref.f_style_id] + . += " Style: < > [current_face_hair.name]
" //Same as above with the extra > & < characters if(has_flag(mob_species, HAS_EYE_COLOR)) . += "
Eyes
" @@ -400,8 +405,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "
Body Markings +
" . += "" - for(var/M in pref.body_markings) - . += "" + for(var/M in pref.body_marking_ids) + var/datum/sprite_accessory/S = GLOB.sprite_accessory_markings[M] + . += "" . += "
[M][pref.body_markings.len > 1 ? "˄ ˅ mv " : ""]- Color[color_square(hex = pref.body_markings[M])]
[S.name][pref.body_marking_ids.len > 1 ? "˄ ˅ mv " : ""]- Color[color_square(hex = pref.body_marking_ids[M])]
" . += "
" @@ -464,32 +470,19 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["hair_style"]) var/list/valid_hairstyles = pref.get_valid_hairstyles() - - var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference", pref.h_style) as null|anything in valid_hairstyles + var/datum/sprite_accessory/current = GLOB.sprite_accessory_hair[pref.h_style_id] + var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference", current.name) as null|anything in valid_hairstyles if(new_h_style && CanUseTopic(user)) - pref.h_style = new_h_style + var/datum/sprite_accessory/S = valid_hairstyles[new_h_style] + pref.h_style_id = S.id return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["hair_style_left"]) - var/H = href_list["hair_style_left"] - var/list/valid_hairstyles = pref.get_valid_hairstyles() - var/start = valid_hairstyles.Find(H) - - if(start != 1) //If we're not the beginning of the list, become the previous element. - pref.h_style = valid_hairstyles[start-1] - else //But if we ARE, become the final element. - pref.h_style = valid_hairstyles[valid_hairstyles.len] + pref.h_style_id = previous_list_item_safe(pref.h_style_id, GLOB.sprite_accessory_hair) || GLOB.sprite_accessory_hair[1] return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["hair_style_right"]) - var/H = href_list["hair_style_right"] - var/list/valid_hairstyles = pref.get_valid_hairstyles() - var/start = valid_hairstyles.Find(H) - - if(start != valid_hairstyles.len) //If we're not the end of the list, become the next element. - pref.h_style = valid_hairstyles[start+1] - else //But if we ARE, become the first element. - pref.h_style = valid_hairstyles[1] + pref.h_style_id = next_list_item_safe(pref.h_style_id, GLOB.sprite_accessory_hair) || GLOB.sprite_accessory_hair[1] return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["grad_style"]) @@ -501,25 +494,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["grad_style_left"]) - var/G = href_list["grad_style_left"] - var/list/valid_gradients = GLOB.hair_gradients - var/start = valid_gradients.Find(G) - - if(start != 1) //If we're not the beginning of the list, become the previous element. - pref.grad_style = valid_gradients[start-1] - else //But if we ARE, become the final element. - pref.grad_style = valid_gradients[valid_gradients.len] + pref.grad_style = previous_list_item_safe(pref.grad_style, GLOB.hair_gradients) || GLOB.hair_gradients[1] return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["grad_style_right"]) - var/G = href_list["grad_style_right"] - var/list/valid_gradients = GLOB.hair_gradients - var/start = valid_gradients.Find(G) - - if(start != valid_gradients.len) //If we're not the end of the list, become the next element. - pref.grad_style = valid_gradients[start+1] - else //But if we ARE, become the first element. - pref.grad_style = valid_gradients[1] + pref.grad_style = next_list_item_safe(pref.grad_style, GLOB.hair_gradients) || GLOB.hair_gradients[1] return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["eye_color"]) @@ -570,82 +549,78 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["facial_style"]) var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - - var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference", pref.f_style) as null|anything in valid_facialhairstyles + var/datum/sprite_accessory/current = GLOB.sprite_accessory_facial_hair[pref.f_style_id] + var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference", current.name) as null|anything in valid_facialhairstyles if(new_f_style && CanUseTopic(user)) - pref.f_style = new_f_style + var/datum/sprite_accessory/S = valid_facialhairstyles[new_f_style] + pref.f_style_id = S.id return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["facial_style_left"]) - var/F = href_list["facial_style_left"] - var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - var/start = valid_facialhairstyles.Find(F) - - if(start != 1) //If we're not the beginning of the list, become the previous element. - pref.f_style = valid_facialhairstyles[start-1] - else //But if we ARE, become the final element. - pref.f_style = valid_facialhairstyles[valid_facialhairstyles.len] + pref.f_style_id = previous_list_item_safe(pref.f_style_id, GLOB.sprite_accessory_facial_hair) || GLOB.sprite_accessory_facial_hair[1] return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["facial_style_right"]) - var/F = href_list["facial_style_right"] - var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles() - var/start = valid_facialhairstyles.Find(F) - - if(start != valid_facialhairstyles.len) //If we're not the end of the list, become the next element. - pref.f_style = valid_facialhairstyles[start+1] - else //But if we ARE, become the first element. - pref.f_style = valid_facialhairstyles[1] + pref.f_style_id = next_list_item_safe(pref.f_style_id, GLOB.sprite_accessory_facial_hair) || GLOB.sprite_accessory_facial_hair[1] return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["marking_style"]) - var/list/usable_markings = pref.body_markings.Copy() ^ body_marking_styles_list.Copy() - var/new_marking = input(user, "Choose a body marking:", "Character Preference") as null|anything in usable_markings + var/list/usable_markings = pref.body_marking_ids ^ GLOB.sprite_accessory_markings + var/list/translated = list() + for(var/id in usable_markings) + var/datum/sprite_accessory/S = GLOB.sprite_accessory_markings[id] + translated[S.name] = id + var/new_marking = input(user, "Choose a body marking:", "Character Preference") as null|anything in translated if(new_marking && CanUseTopic(user)) - pref.body_markings[new_marking] = "#000000" //New markings start black + pref.body_marking_ids[translated[new_marking]] = "#000000" //New markings start black return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["marking_up"]) var/M = href_list["marking_up"] - var/start = pref.body_markings.Find(M) + var/start = pref.body_marking_ids.Find(M) if(start != 1) //If we're not the beginning of the list, swap with the previous element. - move_element(pref.body_markings, start, start-1) + move_element(pref.body_marking_ids, start, start-1) else //But if we ARE, become the final element -ahead- of everything else. - move_element(pref.body_markings, start, pref.body_markings.len+1) + move_element(pref.body_marking_ids, start, pref.body_marking_ids.len+1) return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["marking_down"]) var/M = href_list["marking_down"] - var/start = pref.body_markings.Find(M) - if(start != pref.body_markings.len) //If we're not the end of the list, swap with the next element. - move_element(pref.body_markings, start, start+2) + var/start = pref.body_marking_ids.Find(M) + if(start != pref.body_marking_ids.len) //If we're not the end of the list, swap with the next element. + move_element(pref.body_marking_ids, start, start+2) else //But if we ARE, become the first element -behind- everything else. - move_element(pref.body_markings, start, 1) + move_element(pref.body_marking_ids, start, 1) return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["marking_move"]) var/M = href_list["marking_move"] - var/start = pref.body_markings.Find(M) - var/list/move_locs = pref.body_markings - M + var/start = pref.body_marking_ids.Find(M) + var/list/move_locs = pref.body_marking_ids - M if(start != 1) - move_locs -= pref.body_markings[start-1] + move_locs -= pref.body_marking_ids[start-1] + var/list/translated = list() + for(var/id in move_locs) + var/datum/sprite_accessory/S = GLOB.sprite_accessory_markings[id] + translated[S.name] = id - var/inject_after = input(user, "Move [M] ahead of...", "Character Preference") as null|anything in move_locs //Move ahead of any marking that isn't the current or previous one. - var/newpos = pref.body_markings.Find(inject_after) + var/inject_after = input(user, "Move [M] ahead of...", "Character Preference") as null|anything in translated //Move ahead of any marking that isn't the current or previous one. + var/newpos = pref.body_marking_ids.Find(translated[inject_after]) if(newpos) - move_element(pref.body_markings, start, newpos+1) + move_element(pref.body_marking_ids, start, newpos+1) return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["marking_remove"]) var/M = href_list["marking_remove"] - pref.body_markings -= M + pref.body_marking_ids -= M return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["marking_color"]) var/M = href_list["marking_color"] - var/mark_color = input(user, "Choose the [M] color: ", "Character Preference", pref.body_markings[M]) as color|null + var/datum/sprite_accessory/S = GLOB.sprite_accessory_markings[M] + var/mark_color = input(user, "Choose the [S.name]'s color: ", "Character Preference", pref.body_marking_ids[M]) as color|null if(mark_color && CanUseTopic(user)) - pref.body_markings[M] = "[mark_color]" + pref.body_marking_ids[M] = "[mark_color]" return PREFERENCES_REFRESH_UPDATE_PREVIEW else if(href_list["reset_limbs"]) diff --git a/code/modules/preferences/preference_setup/helpers/species_pick.dm b/code/modules/preferences/preference_setup/helpers/species_pick.dm index 1831662bc73..5b148ef9206 100644 --- a/code/modules/preferences/preference_setup/helpers/species_pick.dm +++ b/code/modules/preferences/preference_setup/helpers/species_pick.dm @@ -54,15 +54,17 @@ // hair/fhair var/list/valid_hair = get_valid_hairstyles() var/list/valid_fhair = get_valid_facialhairstyles() - if(!(h_style in valid_hair)) + var/datum/sprite_accessory/HS = GLOB.sprite_accessory_hair[h_style_id] + var/datum/sprite_accessory/FS = GLOB.sprite_accessory_facial_hair[f_style_id] + if(!(HS.name in valid_hair)) var/datum/sprite_accessory/hair/H = /datum/sprite_accessory/hair/bald - h_style = initial(H.name) - if(!(f_style in valid_fhair)) + h_style_id = initial(H.id) + if(!(FS.name in valid_fhair)) var/datum/sprite_accessory/facial_hair/FH = /datum/sprite_accessory/facial_hair/shaved - f_style = initial(FH.name) + f_style_id = initial(FH.id) // limbs/markings reset_limbs() - body_markings.Cut() + body_marking_ids.Cut() // age age = clamp(age, CS.min_age, CS.max_age) //! END diff --git a/code/modules/preferences/preference_setup/vore/01_ears.dm b/code/modules/preferences/preference_setup/vore/01_ears.dm index 71b265c72b8..41af2b98042 100644 --- a/code/modules/preferences/preference_setup/vore/01_ears.dm +++ b/code/modules/preferences/preference_setup/vore/01_ears.dm @@ -6,7 +6,7 @@ // Define a place to save appearance in character setup /datum/preferences - var/ear_style // Type of selected ear style + var/ear_style_id // Type of selected ear style var/r_ears = 30 // Ear color. var/g_ears = 30 // Ear color var/b_ears = 30 // Ear color @@ -16,7 +16,7 @@ var/r_ears3 = 30 // Ear tertiary color. var/g_ears3 = 30 // Ear tertiary color var/b_ears3 = 30 // Ear tertiary color - var/horn_style // Type of selected horn style + var/horn_style_id // Type of selected horn style var/r_horn = 30 // Horn color. var/g_horn = 30 // Horn color var/b_horn = 30 // Horn color @@ -26,7 +26,7 @@ var/r_horn3 = 30 // Horn tertiary color. var/g_horn3 = 30 // Horn tertiary color var/b_horn3 = 30 // Horn tertiary color - var/tail_style // Type of selected tail style + var/tail_style_id // Type of selected tail style var/r_tail = 30 // Tail/Taur color var/g_tail = 30 // Tail/Taur color var/b_tail = 30 // Tail/Taur color @@ -36,7 +36,7 @@ var/r_tail3 = 30 // For tertiary overlay. var/g_tail3 = 30 // For tertiary overlay. var/b_tail3 = 30 // For tertiary overlay. - var/wing_style // Type of selected wing style + var/wing_style_id // Type of selected wing style var/r_wing = 30 // Wing color var/g_wing = 30 // Wing color var/b_wing = 30 // Wing color @@ -56,7 +56,7 @@ sort_order = 1 /datum/category_item/player_setup_item/vore/ears/load_character(var/savefile/S) - S["ear_style"] >> pref.ear_style + S["ear_style_id"] >> pref.ear_style_id S["r_ears"] >> pref.r_ears S["g_ears"] >> pref.g_ears S["b_ears"] >> pref.b_ears @@ -66,7 +66,7 @@ S["r_ears3"] >> pref.r_ears3 S["g_ears3"] >> pref.g_ears3 S["b_ears3"] >> pref.b_ears3 - S["horn_style"] >> pref.horn_style + S["horn_style_id"] >> pref.horn_style_id S["r_horn"] >> pref.r_horn S["g_horn"] >> pref.g_horn S["b_horn"] >> pref.b_horn @@ -76,7 +76,7 @@ S["r_horn3"] >> pref.r_horn3 S["g_horn3"] >> pref.g_horn3 S["b_horn3"] >> pref.b_horn3 - S["tail_style"] >> pref.tail_style + S["tail_style_id"] >> pref.tail_style_id S["r_tail"] >> pref.r_tail S["g_tail"] >> pref.g_tail S["b_tail"] >> pref.b_tail @@ -86,7 +86,7 @@ S["r_tail3"] >> pref.r_tail3 S["g_tail3"] >> pref.g_tail3 S["b_tail3"] >> pref.b_tail3 - S["wing_style"] >> pref.wing_style + S["wing_style_id"] >> pref.wing_style_id S["r_wing"] >> pref.r_wing S["g_wing"] >> pref.g_wing S["b_wing"] >> pref.b_wing @@ -101,7 +101,7 @@ S["b_gradwing"] >> pref.b_gradwing /datum/category_item/player_setup_item/vore/ears/save_character(var/savefile/S) - S["ear_style"] << pref.ear_style + S["ear_style_id"] << pref.ear_style_id S["r_ears"] << pref.r_ears S["g_ears"] << pref.g_ears S["b_ears"] << pref.b_ears @@ -111,7 +111,7 @@ S["r_ears3"] << pref.r_ears3 S["g_ears3"] << pref.g_ears3 S["b_ears3"] << pref.b_ears3 - S["horn_style"] << pref.horn_style + S["horn_style_id"] << pref.horn_style_id S["r_horn"] << pref.r_horn S["g_horn"] << pref.g_horn S["b_horn"] << pref.b_horn @@ -121,7 +121,7 @@ S["r_horn3"] << pref.r_horn3 S["g_horn3"] << pref.g_horn3 S["b_horn3"] << pref.b_horn3 - S["tail_style"] << pref.tail_style + S["tail_style_id"] << pref.tail_style_id S["r_tail"] << pref.r_tail S["g_tail"] << pref.g_tail S["b_tail"] << pref.b_tail @@ -131,7 +131,7 @@ S["r_tail3"] << pref.r_tail3 S["g_tail3"] << pref.g_tail3 S["b_tail3"] << pref.b_tail3 - S["wing_style"] << pref.wing_style + S["wing_style_id"] << pref.wing_style_id S["r_wing"] << pref.r_wing S["g_wing"] << pref.g_wing S["b_wing"] << pref.b_wing @@ -189,33 +189,41 @@ var/datum/species/S = pref.real_species_datum() var/species_name = S.name - if(pref.ear_style) - pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style)) - var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style] - if(temp_ear_style.apply_restrictions && (!(species_name in temp_ear_style.species_allowed))) - pref.ear_style = initial(pref.ear_style) - if(pref.horn_style) - pref.horn_style = sanitize_inlist(pref.horn_style, horn_styles_list, initial(pref.horn_style)) - var/datum/sprite_accessory/temp_horn_style = horn_styles_list[pref.horn_style] - if(temp_horn_style.apply_restrictions && (!(species_name in temp_horn_style.species_allowed))) - pref.horn_style = initial(pref.horn_style) - if(pref.tail_style) - pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style)) - var/datum/sprite_accessory/temp_tail_style = tail_styles_list[pref.tail_style] - if(temp_tail_style.apply_restrictions && (!(species_name in temp_tail_style.species_allowed))) - pref.tail_style = initial(pref.tail_style) - if(pref.wing_style) - pref.wing_style = sanitize_inlist(pref.wing_style, wing_styles_list, initial(pref.wing_style)) - var/datum/sprite_accessory/temp_wing_style = wing_styles_list[pref.wing_style] - if(temp_wing_style.apply_restrictions && (!(species_name in temp_wing_style.species_allowed))) - pref.wing_style = initial(pref.wing_style) + if(pref.ear_style_id) + pref.ear_style_id = sanitize_inlist(pref.ear_style_id, GLOB.sprite_accessory_ears, initial(pref.ear_style_id)) + var/datum/sprite_accessory/temp_ear_style_id = GLOB.sprite_accessory_ears[pref.ear_style_id] + if(temp_ear_style_id.apply_restrictions && (!(species_name in temp_ear_style_id.species_allowed))) + pref.ear_style_id = initial(pref.ear_style_id) + if(pref.horn_style_id) + pref.horn_style_id = sanitize_inlist(pref.horn_style_id, GLOB.sprite_accessory_ears, initial(pref.horn_style_id)) + var/datum/sprite_accessory/temp_horn_style_id = GLOB.sprite_accessory_ears[pref.horn_style_id] + if(temp_horn_style_id.apply_restrictions && (!(species_name in temp_horn_style_id.species_allowed))) + pref.horn_style_id = initial(pref.horn_style_id) + if(pref.tail_style_id) + pref.tail_style_id = sanitize_inlist(pref.tail_style_id, GLOB.sprite_accessory_tails, initial(pref.tail_style_id)) + var/datum/sprite_accessory/temp_tail_style_id = GLOB.sprite_accessory_tails[pref.tail_style_id] + if(temp_tail_style_id.apply_restrictions && (!(species_name in temp_tail_style_id.species_allowed))) + pref.tail_style_id = initial(pref.tail_style_id) + if(pref.wing_style_id) + pref.wing_style_id = sanitize_inlist(pref.wing_style_id, GLOB.sprite_accessory_wings, initial(pref.wing_style_id)) + var/datum/sprite_accessory/temp_wing_style_id = GLOB.sprite_accessory_wings[pref.wing_style_id] + if(temp_wing_style_id.apply_restrictions && (!(species_name in temp_wing_style_id.species_allowed))) + pref.wing_style_id = initial(pref.wing_style_id) /datum/category_item/player_setup_item/vore/ears/copy_to_mob(datum/preferences/prefs, mob/M, data, flags) // todo: this is just a shim if(!ishuman(M)) return TRUE var/mob/living/carbon/human/character = M - character.ear_style = ear_styles_list[pref.ear_style] + var/datum/sprite_accessory/S = GLOB.sprite_accessory_ears[pref.ear_style_id] + character.ear_style = S + S = GLOB.sprite_accessory_tails[pref.tail_style_id] + character.tail_style = S + S = GLOB.sprite_accessory_wings[pref.wing_style_id] + character.wing_style = S + S = GLOB.sprite_accessory_ears[pref.horn_style_id] + character.horn_style = S + character.r_ears = pref.r_ears character.b_ears = pref.b_ears character.g_ears = pref.g_ears @@ -225,7 +233,7 @@ character.r_ears3 = pref.r_ears3 character.b_ears3 = pref.b_ears3 character.g_ears3 = pref.g_ears3 - character.horn_style = horn_styles_list[pref.horn_style] + character.r_horn = pref.r_horn character.b_horn = pref.b_horn character.g_horn = pref.g_horn @@ -235,7 +243,7 @@ character.r_horn3 = pref.r_horn3 character.b_horn3 = pref.b_horn3 character.g_horn3 = pref.g_horn3 - character.tail_style = tail_styles_list[pref.tail_style] + character.r_tail = pref.r_tail character.b_tail = pref.b_tail character.g_tail = pref.g_tail @@ -245,7 +253,7 @@ character.r_tail3 = pref.r_tail3 character.b_tail3 = pref.b_tail3 character.g_tail3 = pref.g_tail3 - character.wing_style = wing_styles_list[pref.wing_style] + character.r_wing = pref.r_wing character.b_wing = pref.b_wing character.g_wing = pref.g_wing @@ -263,80 +271,82 @@ /datum/category_item/player_setup_item/vore/ears/content(datum/preferences/prefs, mob/user, data) . += "

Appearance and Custom Species Settings

" - var/ear_display = "Normal" - if(pref.ear_style && (pref.ear_style in ear_styles_list)) - var/datum/sprite_accessory/ears/instance = ear_styles_list[pref.ear_style] - ear_display = instance.name + var/datum/sprite_accessory/rendering - else if(pref.ear_style) - ear_display = "REQUIRES UPDATE" + var/ear_display = "Normal" + if(pref.ear_style_id) + rendering = GLOB.sprite_accessory_ears[pref.ear_style_id] + if(rendering) + ear_display = rendering.name + else + ear_display = "REQUIRES UPDATE" . += "Ears
" . += " Style: [ear_display]
" - if(ear_styles_list[pref.ear_style]) - var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style] - if(ear.do_colouration) + if(rendering) + if(rendering.do_colouration) . += "Change Color
__

" - if(ear.extra_overlay) + if(rendering.extra_overlay) . += "Change Secondary Color
__

" - if(ear.extra_overlay2) + if(rendering.extra_overlay2) . += "Change Tertiary Color [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]
" + rendering = null var/horn_display = "Normal" - if(pref.horn_style && (pref.horn_style in horn_styles_list)) - var/datum/sprite_accessory/ears/instance = horn_styles_list[pref.horn_style] - horn_display = instance.name - - else if(pref.horn_style) - horn_display = "REQUIRES UPDATE" + if(pref.horn_style_id) + rendering = GLOB.sprite_accessory_ears[pref.horn_style_id] + if(rendering) + horn_display = rendering.name + else + horn_display = "REQUIRES UPDATE" . += "Secondary Ears
" . += " Style: [horn_display]
" - if(horn_styles_list[pref.horn_style]) - var/datum/sprite_accessory/ears/ear2 = horn_styles_list[pref.horn_style] - if(ear2.do_colouration) + if(rendering) + if(rendering.do_colouration) . += "Change Color
__

" - if(ear2.extra_overlay) + if(rendering.extra_overlay) . += "Change Secondary Color
__

" - if(ear2.extra_overlay2) + if(rendering.extra_overlay2) . += "Change Tertiary Color [color_square(pref.r_horn3, pref.g_horn3, pref.b_horn3)]
" + rendering = null var/tail_display = "Normal" - if(pref.tail_style && (pref.tail_style in tail_styles_list)) - var/datum/sprite_accessory/tail/instance = tail_styles_list[pref.tail_style] - tail_display = instance.name - else if(pref.tail_style) - tail_display = "REQUIRES UPDATE" + if(pref.tail_style_id) + rendering = GLOB.sprite_accessory_tails[pref.tail_style_id] + if(rendering) + tail_display = rendering.name + else + tail_display = "REQUIRES UPDATE" . += "Tail
" . += " Style: [tail_display]
" - - if(tail_styles_list[pref.tail_style]) - var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style] - if(T.do_colouration) + if(rendering) + if(rendering.do_colouration) . += "Change Color
__

" - if(T.extra_overlay) + if(rendering.extra_overlay) . += "Change Secondary Color
__

" - if(T.extra_overlay2) + if(rendering.extra_overlay2) . += "Change Tertiary Color [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]
" + rendering = null var/wing_display = "Normal" - if(pref.wing_style && (pref.wing_style in wing_styles_list)) - var/datum/sprite_accessory/wing/instance = wing_styles_list[pref.wing_style] - wing_display = instance.name - else if(pref.wing_style) - wing_display = "REQUIRES UPDATE" + if(pref.wing_style_id) + rendering = GLOB.sprite_accessory_wings[pref.wing_style_id] + if(rendering) + wing_display = rendering.name + else + wing_display = "REQUIRES UPDATE" . += "Wing
" . += " Style: [wing_display]
" - - if(wing_styles_list[pref.wing_style]) - var/datum/sprite_accessory/wing/W = wing_styles_list[pref.wing_style] - if(W.do_colouration) + if(rendering) + if(rendering.do_colouration) . += "Change Color
__

" . += "Gradient
" . += "Change Color [color_square(pref.r_gradwing, pref.g_gradwing, pref.b_gradwing)] " . += " Style: [pref.grad_wingstyle]
" - if(W.extra_overlay) + if(rendering.extra_overlay) . += "Change Secondary Color
__

" - if (W.extra_overlay2) + if(rendering.extra_overlay2) . += "Change Secondary Color [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]
" + rendering = null /datum/category_item/player_setup_item/vore/ears/OnTopic(var/href,var/list/href_list, var/mob/user) @@ -349,15 +359,16 @@ else if(href_list["ear_style"]) // Construct the list of names allowed for this user. var/list/pretty_ear_styles = list("Normal" = null) - for(var/path in ear_styles_list) - var/datum/sprite_accessory/ears/instance = ear_styles_list[path] + var/datum/sprite_accessory/ears/current = pref.ear_style_id && GLOB.sprite_accessory_ears[pref.ear_style_id] + for(var/id in GLOB.sprite_accessory_ears) + var/datum/sprite_accessory/ears/instance = GLOB.sprite_accessory_ears[id] if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (species_name in instance.species_allowed))) - pretty_ear_styles[instance.name] = path + pretty_ear_styles[instance.name] = id // Present choice to user - var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles + var/new_ear_style = input(user, "Pick ears", "Character Preference", current?.name) as null|anything in pretty_ear_styles if(new_ear_style) - pref.ear_style = pretty_ear_styles[new_ear_style] + pref.ear_style_id = pretty_ear_styles[new_ear_style] return PREFERENCES_REFRESH_UPDATE_PREVIEW @@ -391,15 +402,16 @@ else if(href_list["horn_style"]) // Construct the list of names allowed for this user. var/list/pretty_horn_styles = list("Normal" = null) - for(var/path in horn_styles_list) - var/datum/sprite_accessory/ears/instance = horn_styles_list[path] + var/datum/sprite_accessory/ears/current = pref.horn_style_id && GLOB.sprite_accessory_ears[pref.horn_style_id] + for(var/id in GLOB.sprite_accessory_ears) + var/datum/sprite_accessory/ears/instance = GLOB.sprite_accessory_ears[id] if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (species_name in instance.species_allowed))) - pretty_horn_styles[instance.name] = path + pretty_horn_styles[instance.name] = id // Present choice to user - var/new_horn_style = input(user, "Pick Secondary Ears", "Character Preference", pref.horn_style) as null|anything in pretty_horn_styles + var/new_horn_style = input(user, "Pick Secondary Ears", "Character Preference", current?.name) as null|anything in pretty_horn_styles if(new_horn_style) - pref.horn_style = pretty_horn_styles[new_horn_style] + pref.horn_style_id = pretty_horn_styles[new_horn_style] return PREFERENCES_REFRESH_UPDATE_PREVIEW @@ -433,15 +445,16 @@ else if(href_list["tail_style"]) // Construct the list of names allowed for this user. var/list/pretty_tail_styles = list("Normal" = null) - for(var/path in tail_styles_list) - var/datum/sprite_accessory/tail/instance = tail_styles_list[path] + var/datum/sprite_accessory/tail/current = pref.tail_style_id && GLOB.sprite_accessory_tails[pref.tail_style_id] + for(var/id in GLOB.sprite_accessory_tails) + var/datum/sprite_accessory/tail/instance = GLOB.sprite_accessory_tails[id] if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (species_name in instance.species_allowed))) - pretty_tail_styles[instance.name] = path + pretty_tail_styles[instance.name] = id // Present choice to user - var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles + var/new_tail_style = input(user, "Pick tails", "Character Preference", current?.name) as null|anything in pretty_tail_styles if(new_tail_style) - pref.tail_style = pretty_tail_styles[new_tail_style] + pref.tail_style_id = pretty_tail_styles[new_tail_style] return PREFERENCES_REFRESH_UPDATE_PREVIEW @@ -475,15 +488,16 @@ else if(href_list["wing_style"]) // Construct the list of names allowed for this user. var/list/pretty_wing_styles = list("Normal" = null) - for(var/path in wing_styles_list) - var/datum/sprite_accessory/wing/instance = wing_styles_list[path] + var/datum/sprite_accessory/wing/current = pref.wing_style_id && GLOB.sprite_accessory_wings[pref.wing_style_id] + for(var/id in GLOB.sprite_accessory_wings) + var/datum/sprite_accessory/wing/instance = GLOB.sprite_accessory_wings[id] if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (species_name in instance.species_allowed))) - pretty_wing_styles[instance.name] = path + pretty_wing_styles[instance.name] = id // Present choice to user - var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles + var/new_wing_style = input(user, "Pick wings", "Character Preference", current?.name) as null|anything in pretty_wing_styles if(new_wing_style) - pref.wing_style = pretty_wing_styles[new_wing_style] + pref.wing_style_id = pretty_wing_styles[new_wing_style] return PREFERENCES_REFRESH_UPDATE_PREVIEW diff --git a/code/modules/preferences/preferences_savefile.dm b/code/modules/preferences/preferences_savefile.dm index 37f037d9be6..eb7ec7c9507 100644 --- a/code/modules/preferences/preferences_savefile.dm +++ b/code/modules/preferences/preferences_savefile.dm @@ -32,7 +32,7 @@ // todo: wipe savefile_version = SAVEFILE_VERSION_MAX else if(savefile_version < SAVEFILE_VERSION_MAX) - perform_global_migrations(S, savefile_version, io_errors, options) + SScharacters.perform_global_migrations(S, savefile_version, io_errors, options, src) savefile_version = SAVEFILE_VERSION_MAX // don't flush immediately incase they want to cancel/ahelp about something breaking // save_preferences() @@ -147,7 +147,7 @@ // todo: wipe slot current_version = CHARACTER_VERSION_MAX else if(current_version < CHARACTER_VERSION_MAX) - perform_character_migrations(S, current_version, io_errors, character) + SScharacters.perform_character_migrations(S, current_version, io_errors, character, src) current_version = CHARACTER_VERSION_MAX queue_errors(io_errors, "error while migrating slot [slot]:") character[CHARACTER_DATA_VERSION] = current_version diff --git a/code/modules/preferences/preferences_setup.dm b/code/modules/preferences/preferences_setup.dm index 6f109733277..c9a002536bc 100644 --- a/code/modules/preferences/preferences_setup.dm +++ b/code/modules/preferences/preferences_setup.dm @@ -4,8 +4,8 @@ var/datum/species/current_species = real_species_datum() set_biological_gender(pick(current_species.genders)) - h_style = random_hair_style(biological_gender, current_species.name) - f_style = random_facial_hair_style(biological_gender, current_species.name) + h_style_id = random_hair_style(biological_gender, current_species.name) + f_style_id = random_facial_hair_style(biological_gender, current_species.name) if(current_species) if(current_species.species_appearance_flags & HAS_SKIN_TONE) s_tone = random_skin_tone() @@ -28,7 +28,6 @@ var/datum/category_item/underwear/WRI = pick(WRC.items) all_underwear[WRC.name] = WRI.name - backbag = rand(1, 7) pdachoice = rand(1, 7) age = rand(current_species.min_age, current_species.max_age) @@ -36,7 +35,6 @@ if(H) copy_to(H) - /datum/preferences/proc/randomize_hair_color(var/target = "hair") if(prob (75) && target == "facial") // Chance to inherit hair color r_facial = r_hair @@ -255,20 +253,20 @@ /datum/preferences/proc/get_valid_hairstyles() var/list/valid_hairstyles = list() var/species_name = real_species_name() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + for(var/hairstyle in GLOB.legacy_hair_lookup) + var/datum/sprite_accessory/S = GLOB.legacy_hair_lookup[hairstyle] if(S.apply_restrictions && !(species_name in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //Custom species base species allowance continue - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] + valid_hairstyles[hairstyle] = GLOB.legacy_hair_lookup[hairstyle] return valid_hairstyles /datum/preferences/proc/get_valid_facialhairstyles() var/list/valid_facialhairstyles = list() var/datum/species/RS = real_species_datum() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + for(var/facialhairstyle in GLOB.legacy_facial_hair_lookup) + var/datum/sprite_accessory/S = GLOB.legacy_facial_hair_lookup[facialhairstyle] if(biological_gender == MALE && S.gender == FEMALE) continue if(biological_gender == FEMALE && S.gender == MALE) @@ -276,7 +274,7 @@ if(S.apply_restrictions && !(RS.name in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //Custom species base species allowance continue - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] + valid_facialhairstyles[facialhairstyle] = GLOB.legacy_facial_hair_lookup[facialhairstyle] return valid_facialhairstyles diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index aa0d00f1bb6..ab9ac2a5fc7 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -98,12 +98,11 @@ overlays += I /obj/structure/bigDelivery/examine(mob/user) - if(..(user, 4)) - if(sortTag) - to_chat(user, "It is labeled \"[sortTag]\"") - if(examtext) - to_chat(user, "It has a note attached which reads, \"[examtext]\"") - return + . = ..() + if(sortTag) + . += "It is labeled \"[sortTag]\"" + if(examtext) + . += "It has a note attached which reads, \"[examtext]\"" /obj/structure/bigDelivery/Destroy() if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 @@ -216,12 +215,11 @@ overlays += I /obj/item/smallDelivery/examine(mob/user) - if(..(user, 4)) - if(sortTag) - to_chat(user, "It is labeled \"[sortTag]\"") - if(examtext) - to_chat(user, "It has a note attached which reads, \"[examtext]\"") - return + . = ..() + if(sortTag) + . += "It is labeled \"[sortTag]\"" + if(examtext) + . += "It has a note attached which reads, \"[examtext]\"" /obj/item/packageWrap name = "package wrapper" @@ -314,10 +312,8 @@ return /obj/item/packageWrap/examine(mob/user) - if(..(user, 0)) - to_chat(user, "There are [amount] units of package wrap left!") - - return + . = ..() + . += "There are [amount] units of package wrap left!" /obj/item/destTagger name = "destination tagger" diff --git a/code/modules/research/designs/circuits/circuits_vr.dm b/code/modules/research/designs/circuits/circuits_vr.dm index 715cf66197a..98ebaf2072b 100644 --- a/code/modules/research/designs/circuits/circuits_vr.dm +++ b/code/modules/research/designs/circuits/circuits_vr.dm @@ -111,13 +111,6 @@ build_path = /obj/item/circuitboard/resleeving_control sort_string = "HAADE" -/datum/design/circuit/body_designer - name = "Body design console" - id = "body_designer" - req_tech = list(TECH_DATA = 5) - build_path = /obj/item/circuitboard/body_designer - sort_string = "HAADF" - /datum/design/circuit/partslathe name = "Parts lathe" id = "partslathe" diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index 51822d05525..ad2a89b2c04 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -139,13 +139,6 @@ build_path = /obj/item/circuitboard/resleeving_control sort_string = "HAADE" -/datum/design/circuit/body_designer - name = "Body design console" - id = "body_designer" - req_tech = list(TECH_DATA = 5) - build_path = /obj/item/circuitboard/body_designer - sort_string = "HAADF" - /datum/design/circuit/partslathe name = "Parts lathe" id = "partslathe" diff --git a/code/modules/resleeving/circuitboards.dm b/code/modules/resleeving/circuitboards.dm index 23b3a7bf62f..90f5d19aab8 100644 --- a/code/modules/resleeving/circuitboards.dm +++ b/code/modules/resleeving/circuitboards.dm @@ -39,9 +39,3 @@ name = T_BOARD("resleeving control console") build_path = /obj/machinery/computer/transhuman/resleeving origin_tech = list(TECH_DATA = 5) - - -/obj/item/circuitboard/body_designer - name = T_BOARD("body design console") - build_path = /obj/machinery/computer/transhuman/designer - origin_tech = list(TECH_DATA = 5) diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index 9594161a727..d16ed3d0b2a 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -78,15 +78,15 @@ return disk = W to_chat(user, "You insert \the [W] into \the [src].") - if(istype(W, /obj/item/disk/body_record)) - var/obj/item/disk/body_record/brDisk = W - if(!brDisk.stored) - to_chat(user, "\The [W] does not contain a stored body record.") - return - active_br = new /datum/transhuman/body_record(brDisk.stored) // Loads a COPY! - menu = 4 - to_chat(user, "\The [src] loads the body record from \the [W] before ejecting it.") - attack_hand(user) + // if(istype(W, /obj/item/disk/body_record)) + // var/obj/item/disk/body_record/brDisk = W + // if(!brDisk.stored) + // to_chat(user, "\The [W] does not contain a stored body record.") + // return + // active_br = new /datum/transhuman/body_record(brDisk.stored) // Loads a COPY! + // menu = 4 + // to_chat(user, "\The [src] loads the body record from \the [W] before ejecting it.") + // attack_hand(user) if(istype(W, /obj/item/implant/mirror)) if(!user.attempt_insert_item_for_installation(W, src)) return diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm deleted file mode 100644 index 9c8999d3976..00000000000 --- a/code/modules/resleeving/designer.dm +++ /dev/null @@ -1,398 +0,0 @@ -// Little define makes it cleaner to read the tripple color values out of mobs. -#define MOB_HEX_COLOR(M, V) "#[num2hex(M.r_##V, 2)][num2hex(M.g_##V, 2)][num2hex(M.b_##V, 2)]" - -// todo: this entire file is no longer maintained and probably doesn't work -// it's a shame but frankly all of this is shitcode and therefore there's no point -// in maintaining it ~silicons - -// if you want in game bodymodding, please, talk with us so we can make a new system together. - -/obj/machinery/computer/transhuman/designer - name = "body design console" - catalogue_data = list(///datum/category_item/catalogue/information/organization/vey_med, - /datum/category_item/catalogue/technology/resleeving) - icon = 'icons/obj/computer.dmi' - icon_keyboard = "med_key" - icon_screen = "explosive" - light_color = "#315ab4" - circuit = /obj/item/circuitboard/body_designer - req_access = list(access_medical) // Used for loading people's designs - var/temp = "" - var/menu = 1 //Which menu screen to display - var/datum/transhuman/body_record/active_br = null - var/icon/preview_icon = null - // Mannequins are somewhat expensive to create, so cache it - var/mob/living/carbon/human/dummy/mannequin/mannequin = null - var/obj/item/disk/body_record/disk = null - -/obj/machinery/computer/transhuman/designer/Destroy() - active_br = null - preview_icon = null - mannequin = null - disk = null - return ..() - -/obj/machinery/computer/transhuman/designer/dismantle() - if(disk) - disk.forceMove(get_turf(src)) - disk = null - ..() - -/obj/machinery/computer/transhuman/designer/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/disk/body_record)) - if(!user.attempt_insert_item_for_installation(W, src)) - return - disk = W - to_chat(user, "You insert \the [W] into \the [src].") - updateUsrDialog() - else - ..() - -/obj/machinery/computer/transhuman/designer/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/transhuman/designer/attack_hand(mob/user as mob) - add_fingerprint(user) - if(inoperable()) - return - nano_ui_interact(user) - -/obj/machinery/computer/transhuman/designer/nano_ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // log_debug(SPAN_DEBUG("designer.nano_ui_interact([user], force_open = [force_open])")) - user.set_machine(src) - - var/data[0] - - if(menu == "2") - var/bodyrecords_list_ui[0] - for(var/N in SStranscore.body_scans) - var/datum/transhuman/body_record/BR = SStranscore.body_scans[N] - bodyrecords_list_ui[++bodyrecords_list_ui.len] = list("name" = N, "recref" = "\ref[BR]") - if(bodyrecords_list_ui.len) - data["bodyrecords"] = bodyrecords_list_ui - - if(menu == "3") - var/stock_bodyrecords_list_ui[0] - for (var/datum/species/S in SScharacters.all_static_species_meta()) - if((S.species_spawn_flags & (SPECIES_SPAWN_WHITELISTED|SPECIES_SPAWN_CHARACTER)) != SPECIES_SPAWN_CHARACTER) - continue - stock_bodyrecords_list_ui += S - if(stock_bodyrecords_list_ui.len) - data["stock_bodyrecords"] = stock_bodyrecords_list_ui - - if(active_br) - data["activeBodyRecord"] = list( - "real_name" = active_br.mydna.name, - "speciesname" = active_br.speciesname ? active_br.speciesname : active_br.mydna.dna.species, - "gender" = active_br.bodygender, - "synthetic" = active_br.synthetic ? "Yes" : "No", - "locked" = active_br.locked ? "Low" : "High", - "scale" = player_size_name(active_br.sizemult), - "booc" = active_br.body_oocnotes, - "styles" = list() - ) - if(!preview_icon) - update_preview_icon() - force_open = 1 // Force a refresh to send the new image - data["previewIconUrl"] = "body_preview_icon.png" - user << browse_rsc(preview_icon, "body_preview_icon.png") - - var/list/styles = data["activeBodyRecord"]["styles"] - var/list/temp - - temp = list("styleHref" = "ear_style", "style" = "Normal") - if(mannequin.ear_style) - temp["style"] = mannequin.ear_style.name - styles["Ears"] = temp - - temp = list("styleHref" = "tail_style", "style" = "Normal") - if(mannequin.tail_style) - temp["style"] = mannequin.tail_style.name - if(mannequin.tail_style.do_colouration) - temp["color"] = MOB_HEX_COLOR(mannequin, tail) - temp["colorHref"] = "tail_color" - styles["Tail"] = temp - - temp = list("styleHref" = "wing_style", "style" = "Normal") - if(mannequin.wing_style) - temp["style"] = mannequin.wing_style.name - if(mannequin.wing_style.do_colouration) - temp["color"] = MOB_HEX_COLOR(mannequin, wing) - temp["colorHref"] = "wing_color" - styles["Wing"] = temp - - temp = list("styleHref" = "hair_style", "style" = mannequin.h_style) - if(mannequin.species && (mannequin.species.species_appearance_flags & HAS_HAIR_COLOR)) - temp["color"] = MOB_HEX_COLOR(mannequin, hair) - temp["colorHref"] = "hair_color" - styles["Hair"] = temp - - temp = list("styleHref" = "facial_style", "style" = mannequin.f_style) - if(mannequin.species && (mannequin.species.species_appearance_flags & HAS_HAIR_COLOR)) - temp["color"] = MOB_HEX_COLOR(mannequin, facial) - temp["colorHref"] = "facial_color" - styles["Facial"] = temp - - if(mannequin.species && (mannequin.species.species_appearance_flags & HAS_EYE_COLOR)) - styles["Eyes"] = list("colorHref" = "eye_color", "color" = MOB_HEX_COLOR(mannequin, eyes)) - - if(mannequin.species && (mannequin.species.species_appearance_flags & HAS_SKIN_COLOR)) - styles["Body Color"] = list("colorHref" = "skin_color", "color" = MOB_HEX_COLOR(mannequin, skin)) - - var/datum/preferences/designer/P = new() - apply_markings_to_prefs(mannequin, P) - data["activeBodyRecord"]["markings"] = P.body_markings - - data["menu"] = menu - data["temp"] = temp - data["disk"] = disk ? 1 : 0 - data["diskStored"] = disk && disk.stored ? 1 : 0 - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "body_designer.tmpl", "Body Design Console", 400, 600) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/computer/transhuman/designer/Topic(href, href_list) - if(..()) - return 1 - - else if(href_list["debug_load_my_body"]) - active_br = new /datum/transhuman/body_record(usr, FALSE, FALSE) - preview_icon = null - - else if (href_list["view_brec"]) - var/datum/transhuman/body_record/BR = locate(href_list["view_brec"]) - if(BR && istype(BR.mydna)) - if(allowed(usr) || BR.ckey == usr.ckey) - active_br = new /datum/transhuman/body_record(BR) // Load a COPY! - preview_icon = null - menu = 4 - else - active_br = null - temp = "Access denied: Body records are confidential." - else - active_br = null - temp = "ERROR: Record missing." - - else if(href_list["view_stock_brec"]) - var/datum/species/S = SScharacters.resolve_species_name(href_list["view_stock_brec"]) - if(S && (S.species_spawn_flags & (SPECIES_SPAWN_WHITELISTED|SPECIES_SPAWN_CHARACTER)) == SPECIES_SPAWN_CHARACTER) - // Generate body record from species! - mannequin = new(null, S.name) - mannequin.real_name = "Stock [S.name] Body" - mannequin.name = mannequin.real_name - mannequin.dna.real_name = mannequin.real_name - active_br = new(mannequin, FALSE, FALSE) - active_br.speciesname = "Custom Sleeve" - preview_icon = null - menu = 4 - else - active_br = null - temp = "ERROR: Stock Record missing." - - else if (href_list["boocnotes"]) - menu = 6 - - else if (href_list["loadfromdisk"]) - if(disk && disk.stored) - active_br = new /datum/transhuman/body_record(disk.stored) // Loads a COPY! - preview_icon = null - - else if (href_list["savetodisk"]) - if(disk && active_br) - disk.stored = new /datum/transhuman/body_record(active_br) // Saves a COPY! - disk.name = "[initial(disk.name)] ([active_br.mydna.name])" - disk.forceMove(get_turf(src)) - disk = null - - else if (href_list["ejectdisk"]) - disk.forceMove(get_turf(src)) - disk = null - - else if (href_list["menu"]) - menu = href_list["menu"] - temp = "" - else - OnTopic(href, href_list, usr) - - add_fingerprint(usr) - return 1 // Return 1 to refresh UI - -// -// Code below is for generating preview icons based on a body_record -// - -// Based on /datum/preferences/proc/update_preview_icon() -/obj/machinery/computer/transhuman/designer/proc/update_preview_icon() - if(!mannequin) - mannequin = new () - - mannequin.delete_inventory(TRUE) - update_preview_mob(mannequin) - - preview_icon = icon('icons/effects/effects.dmi', "nothing") - preview_icon.Scale(48+32, 16+32) - - mannequin.dir = NORTH - var/icon/stamp = get_flat_icon(mannequin) - preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17) - - mannequin.dir = WEST - stamp = get_flat_icon(mannequin) - preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9) - - mannequin.dir = SOUTH - stamp = get_flat_icon(mannequin) - preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1) - - preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. - return preview_icon - -/obj/machinery/computer/transhuman/designer/proc/update_preview_mob(var/mob/living/carbon/human/H) - ASSERT(!QDELETED(H)) - ASSERT(!QDELETED(active_br)) - //log_debug(SPAN_DEBUG("designer.update_preview_mob([H]) active_br = \ref[active_br]")) - //Get the DNA and generate a new mob - var/datum/dna2/record/R = active_br.mydna - H.set_species(R.dna.species) // This needs to happen before anything else becuase it sets some variables. - - // Update the external organs - for(var/part in active_br.limb_data) - var/status = active_br.limb_data[part] - if(status == null) continue //Species doesn't have limb? Child of amputated limb? - - var/obj/item/organ/external/O = H.organs_by_name[part] - if(!O) continue //Not an organ. Perhaps another amputation removed it already. - - if(status == 1) //Normal limbs - continue - else if(status == 0) //Missing limbs - O.remove_rejuv() - else if(status) //Anything else is a manufacturer - if(active_br.synthetic) - O.robotize(status) - else - O.remove_rejuv() - - // Then the internal organs. I think only O_EYES acutally counts, but lets do all just in case - for(var/part in active_br.organ_data) - var/status = active_br.organ_data[part] - if(status == null) continue //Species doesn't have organ? Child of missing part? - - var/obj/item/organ/I = H.internal_organs_by_name[part] - if(!I) continue//Not an organ. Perhaps external conversion changed it already? - - if(status == 0) //Normal organ - continue - else if(status == 1) //Assisted organ - I.mechassist() - else if(status == 2) //Mechanical organ - I.robotize() - else if(status == 3) //Digital organ - I.digitize() - - // Apply DNA - H.dna = R.dna.Clone() - H.UpdateAppearance() // Update all appearance stuff from the DNA record - H.sync_organ_dna() // Do this because sprites depend on DNA-gender of organs (chest etc) - H.resize(active_br.sizemult, FALSE) - - // And as for clothing... - // We don't actually dress them! This is a medical machine, handle the nakedness DOCTOR! - - H.regenerate_icons() - return 0 // Success! - -// HORROR SHOW BELOW -// In order to avoid duplicating the many lines of code in player_setup that handle customizing -// body setup, we acutally are invoking those methods in order to let people customize the body here. -// Problem is, those procs save their data to /datum/preferences, not a body_record. -// Luckily the procs to convert from body_record to /datum/preferences and back already exist. -// Its ugly, but I think its still better than duplicating and maintaining all that code. -/obj/machinery/computer/transhuman/designer/proc/OnTopic(var/href,var/list/href_list, var/mob/user) - if(!mannequin || !preview_icon || !active_br) - return - - if(href_list["size_multiplier"]) - var/new_size = input(user, "Choose your character's size, ranging from 25% to 200%", "Character Preference") as num|null - if(new_size && ISINRANGE(new_size,25,200)) - active_br.sizemult = (new_size/100) - preview_icon = null - return 1 - - // The black magic horror show begins - var/datum/preferences/designer/P = new() - - // We did DNA to mob, now mob to prefs! - P.set_character_data(CHARACTER_DATA_REAL_SPECIES, mannequin.species.id) - apply_coloration_to_prefs(mannequin, P) - apply_organs_to_prefs(mannequin, P) - apply_markings_to_prefs(mannequin, P) - apply_ears_to_prefs(mannequin, P) - - // Now we start using the player_setup objects to do stuff! - var/datum/category_collection/CC = P.player_setup - var/datum/category_group/CG = CC.categories_by_name["General"] - var/datum/category_item/player_setup_item/general/body/B = CG.items_by_name["Body"] - ASSERT(istype(B)) - var/datum/category_item/player_setup_item/general/basic/G = CG.items_by_name["Basic"] - ASSERT(istype(G)) - CG = CC.categories_by_name["Species Customization"] - var/datum/category_item/player_setup_item/vore/ears/E = CG.items_by_name["Appearance"] - ASSERT(istype(E)) - - if(href_list["bio_gender"]) - var/new_gender = input(user, "Choose your character's biological gender:", "Character Preference", active_br.bodygender) as null|anything in G.get_genders() - if(new_gender) - active_br.bodygender = new_gender - active_br.mydna.dna.SetUIState(DNA_UI_GENDER, new_gender!=MALE, 1) - preview_icon = null - return 1 - - var/action = 0 - action = B.OnTopic(href, href_list, user) - if(action & PREFERENCES_UPDATE_PREVIEW && mannequin && active_br) - B.copy_to_mob(mannequin) - active_br.mydna.dna.ResetUIFrom(mannequin) - preview_icon = null - return 1 - action = E.OnTopic(href, href_list, user) - if(action & PREFERENCES_UPDATE_PREVIEW && mannequin && active_br) - E.copy_to_mob(mannequin) - active_br.mydna.dna.ResetUIFrom(mannequin) - preview_icon = null - return 1 - -// Fake subtype of preferences we can use to steal code from player_setup -/datum/preferences/designer/New() - player_setup = new(src) - // Do NOT call ..(), it expects real stuff - -// Disk for manually moving body records between the designer and sleever console etc. -/obj/item/disk/body_record - name = "Body Design Disk" - desc = "It has a small label: \n\ - \"Portable Body Record Storage Disk. \n\ - Insert into resleeving control console\"" - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk2" - item_state = "card-id" - w_class = ITEMSIZE_SMALL - var/datum/transhuman/body_record/stored = null - -/* - * Diskette Box - */ - -/obj/item/storage/box/body_record_disk - name = "body record disk box" - desc = "A box of body record disks, apparently." - icon_state = "disk_kit" - -/obj/item/storage/box/body_record_disk/PopulateContents() - for(var/i = 0 to 7) - new /obj/item/disk/body_record(src) - -#undef MOB_HEX_COLOR diff --git a/code/modules/species/species_shapeshift.dm b/code/modules/species/species_shapeshift.dm index 7b2d2cd661e..12fc5124c1c 100644 --- a/code/modules/species/species_shapeshift.dm +++ b/code/modules/species/species_shapeshift.dm @@ -108,8 +108,8 @@ var/list/wrapped_species_by_ref = list() var/list/valid_hairstyles = list() var/list/valid_facialhairstyles = list() var/list/valid_gradstyles = GLOB.hair_gradients - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + for(var/hairstyle in GLOB.legacy_hair_lookup) + var/datum/sprite_accessory/S = GLOB.legacy_hair_lookup[hairstyle] if(gender == MALE && S.gender == FEMALE) continue if(gender == FEMALE && S.gender == MALE) @@ -117,8 +117,8 @@ var/list/wrapped_species_by_ref = list() if(S.apply_restrictions && !(species.get_bodytype_legacy(src) in S.species_allowed)) continue valid_hairstyles += hairstyle - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + for(var/facialhairstyle in GLOB.legacy_facial_hair_lookup) + var/datum/sprite_accessory/S = GLOB.legacy_facial_hair_lookup[facialhairstyle] if(gender == MALE && S.gender == FEMALE) continue if(gender == FEMALE && S.gender == MALE) @@ -303,8 +303,8 @@ var/list/wrapped_species_by_ref = list() last_special = world.time + 10 // Construct the list of names allowed for this user. var/list/pretty_ear_styles = list("Normal" = null) - for(var/path in ear_styles_list) - var/datum/sprite_accessory/ears/instance = ear_styles_list[path] + for(var/path in GLOB.legacy_ears_lookup) + var/datum/sprite_accessory/ears/instance = GLOB.legacy_ears_lookup[path] if((!instance.ckeys_allowed) || (ckey in instance.ckeys_allowed)) pretty_ear_styles[instance.name] = path @@ -314,7 +314,7 @@ var/list/wrapped_species_by_ref = list() return //Set new style - ear_style = ear_styles_list[pretty_ear_styles[new_ear_style]] + ear_style = GLOB.legacy_ears_lookup[pretty_ear_styles[new_ear_style]] //Allow color picks var/current_pri_color = rgb(r_ears,g_ears,b_ears) @@ -357,8 +357,8 @@ var/list/wrapped_species_by_ref = list() last_special = world.time + 10 // Construct the list of names allowed for this user. var/list/pretty_tail_styles = list("Normal" = null) - for(var/path in tail_styles_list) - var/datum/sprite_accessory/tail/instance = tail_styles_list[path] + for(var/path in GLOB.legacy_tail_lookup) + var/datum/sprite_accessory/tail/instance = GLOB.legacy_tail_lookup[path] if((!instance.ckeys_allowed) || (ckey in instance.ckeys_allowed)) pretty_tail_styles[instance.name] = path @@ -368,7 +368,7 @@ var/list/wrapped_species_by_ref = list() return //Set new style - tail_style = tail_styles_list[pretty_tail_styles[new_tail_style]] + tail_style = GLOB.legacy_tail_lookup[pretty_tail_styles[new_tail_style]] //Allow color picks var/current_pri_color = rgb(r_tail,g_tail,b_tail) @@ -411,8 +411,8 @@ var/list/wrapped_species_by_ref = list() last_special = world.time + 10 // Construct the list of names allowed for this user. var/list/pretty_wing_styles = list("None" = null) - for(var/path in wing_styles_list) - var/datum/sprite_accessory/wing/instance = wing_styles_list[path] + for(var/path in GLOB.legacy_wing_lookup) + var/datum/sprite_accessory/wing/instance = GLOB.legacy_wing_lookup[path] if((!instance.ckeys_allowed) || (ckey in instance.ckeys_allowed)) pretty_wing_styles[instance.name] = path @@ -422,7 +422,7 @@ var/list/wrapped_species_by_ref = list() return //Set new style - wing_style = wing_styles_list[pretty_wing_styles[new_wing_style]] + wing_style = GLOB.legacy_wing_lookup[pretty_wing_styles[new_wing_style]] //Allow color picks var/current_color = rgb(r_wing,g_wing,b_wing) diff --git a/code/modules/sprite_accessories/ears/_ears.dm b/code/modules/sprite_accessories/ears/_ears.dm new file mode 100644 index 00000000000..6f62acd2bed --- /dev/null +++ b/code/modules/sprite_accessories/ears/_ears.dm @@ -0,0 +1,14 @@ +/datum/sprite_accessory/ears + abstract_type = /datum/sprite_accessory/ears + name = "You should not see this..." + icon = 'icons/mob/sprite_accessories/ears.dmi' + do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color + + color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + var/desc = "You should not see this..." + +// todo: sort ears by something that makes sense +// todo: tgui choice menu should be modular +// todo: and include way to do categories +//! right now the categories are way too sparse, we'll combine them later. + diff --git a/code/modules/sprite_accessories/ears/animal/avian.dm b/code/modules/sprite_accessories/ears/animal/avian.dm new file mode 100644 index 00000000000..cabe416bfa4 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/avian.dm @@ -0,0 +1 @@ +// holder file diff --git a/code/modules/sprite_accessories/ears/animal/bee.dm b/code/modules/sprite_accessories/ears/animal/bee.dm new file mode 100644 index 00000000000..6c347e19223 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/bee.dm @@ -0,0 +1,5 @@ +//! this file is not to convention because i'm not typing out "hyman.dm" +/datum/sprite_accessory/ears/bee + name = "bee antennae" + id = "ears_bee" + icon_state = "bee" diff --git a/code/modules/sprite_accessories/ears/animal/bovine.dm b/code/modules/sprite_accessories/ears/animal/bovine.dm new file mode 100644 index 00000000000..1f1011f5884 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/bovine.dm @@ -0,0 +1,27 @@ +//? cow +/datum/sprite_accessory/ears/cow + name = "cow, horns" + id = "ears_cow" + icon_state = "cow" + +/datum/sprite_accessory/ears/cowc + name = "cow, horns, colorable" + id = "ears_cow_colorable" + icon_state = "cow-c" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/cow_nohorns + name = "cow, no horns" + id = "ears_cow_nohorns" + icon_state = "cow-nohorns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +//? sheep +/datum/sprite_accessory/ears/ram + name = "ram horns" + id = "ears_ram" + icon_state = "ram" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/animal/canid.dm b/code/modules/sprite_accessories/ears/animal/canid.dm new file mode 100644 index 00000000000..1ceb9801807 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/canid.dm @@ -0,0 +1,91 @@ +//? fox +/datum/sprite_accessory/ears/fenears + name = "flatland zorren ears" + id = "ears_zorren_flat" + icon_state = "fenears" + +/datum/sprite_accessory/ears/fenearshc + name = "flatland zorren ears, colorable" + id = "ears_zorren_flat_color" + icon_state = "fenearshc" + extra_overlay = "fenears-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/foxears + name = "highlander zorren ears" + id = "ears_zorren_high" + icon_state = "foxears" + +/datum/sprite_accessory/ears/foxearshc + name = "highlander zorren ears, colorable" + id = "ears_zorren_high_color" + icon_state = "foxearshc" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/sandfox + name = "Sandfox Ears" + id = "ears_sandfox" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "sandfox" + extra_overlay = "sandfox-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +//? vulp +/datum/sprite_accessory/ears/vulp + name = "vulpkanin, dual-color" + id = "ears_vulp_dual" + icon_state = "vulp" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulp-inner" + +/datum/sprite_accessory/ears/vulp_jackal + name = "vulpkanin thin, dual-color" + id = "ears_vulp_thin_dual" + icon_state = "vulp_jackal" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulp_jackal-inner" + +/datum/sprite_accessory/ears/vulp_short + name = "vulpkanin short" + id = "ears_vulp_short" + icon_state = "vulp_terrier" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/vulp_short_dc + name = "vulpkanin short, dual-color" + id = "ears_vulp_short_dual" + icon_state = "vulp_terrier" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulp_terrier-inner" + +//? wolf +/datum/sprite_accessory/ears/wisewolf + name = "wolf, wise" + id = "ears_wolf_wise" + icon_state = "wolf-wise" + +/datum/sprite_accessory/ears/wolfhc + name = "wolf, colorable" + id = "ears_wolf_color" + icon_state = "wolf" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "wolfinner" + +/datum/sprite_accessory/ears/wolf_green + name = "wolf, green" + id = "ears_wolf_green" + icon_state = "wolf-green" + +/datum/sprite_accessory/ears/wolf_grey + name = "wolf, grey" + id = "ears_wolf_grey" + icon_state = "wolf-grey" + diff --git a/code/modules/sprite_accessories/ears/animal/cervid.dm b/code/modules/sprite_accessories/ears/animal/cervid.dm new file mode 100644 index 00000000000..519ca41609a --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/cervid.dm @@ -0,0 +1,53 @@ +//? generic antlers +/datum/sprite_accessory/ears/antlercrown + name = "antler crown" + id = "ears_antlers_crown" + icon_state = "antlercrown" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/antlers + name = "antlers" + id = "ears_antlers" + icon_state = "antlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/antlers_e + name = "antlers with ears" + id = "ears_antlers_nohorns" + icon_state = "cow-nohorns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "antlers_mark" + +/datum/sprite_accessory/ears/antlers_large + name = "Antlers (large)" + id = "ears_antlers_large" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "antlers_large" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/smallantlers + name = "small antlers" + id = "ears_antlers_small" + icon_state = "smallantlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/smallantlers_e + name = "small antlers with ears" + id = "ears_antlers_small_ear" + icon_state = "smallantlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "deer" + +//? deer +/datum/sprite_accessory/ears/deer + name = "deer ears" + id = "ears_deer" + icon_state = "deer" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/animal/equine.dm b/code/modules/sprite_accessories/ears/animal/equine.dm new file mode 100644 index 00000000000..0cff4f18bae --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/equine.dm @@ -0,0 +1,8 @@ +//? donkey +/datum/sprite_accessory/ears/donkey + name = "donkey, colorable" + id = "ears_donkey" + icon_state = "donkey" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "otie-inner" diff --git a/code/modules/sprite_accessories/ears/animal/feline.dm b/code/modules/sprite_accessories/ears/animal/feline.dm new file mode 100644 index 00000000000..69c2cf40c9e --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/feline.dm @@ -0,0 +1,18 @@ +// cat +/datum/sprite_accessory/ears/kittyhc + name = "kitty, colorable" + id = "ears_kitty_color" + icon_state = "kitty" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "kittyinner" + +/datum/sprite_accessory/ears/kittyr + name = "kitty right only, colorable" + id = "ears_kitty_right_color" + icon = 'icons/mob/sprite_accessories/ears_uneven.dmi' + icon_state = "kittyrinner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "kittyr" + diff --git a/code/modules/sprite_accessories/ears/animal/lepid.dm b/code/modules/sprite_accessories/ears/animal/lepid.dm new file mode 100644 index 00000000000..bda9f350416 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/lepid.dm @@ -0,0 +1,80 @@ +//? moth +/datum/sprite_accessory/ears/moth_antenna_fluff_burnt + name = "burnt moth antennae and fluff" + id = "ears_moth_burnt" + icon_state = "moth_antenna_fluff_burnt" + +/datum/sprite_accessory/ears/moth_antenna_fluff_deathhead + name = "death's-head hawkmoth antennae and fluff" + id = "ears_moth_deathhead" + icon_state = "moth_antenna_fluff_deathhead" + +/datum/sprite_accessory/ears/moth_antenna_fluff_firewatch + name = "firewatch moth antennae and fluff" + id = "ears_moth_firewatch" + icon_state = "moth_antenna_fluff_firewatch" + +/datum/sprite_accessory/ears/moth_antenna_fluff_gothic + name = "gothic moth antennae and fluff" + id = "ears_moth_gothic" + icon_state = "moth_antenna_fluff_goth" + +/datum/sprite_accessory/ears/moth_antenna_fluff_jungle + name = "jungle moth antennae and fluff" + id = "ears_moth_jungle" + icon_state = "moth_antenna_fluff_jungle" + +/datum/sprite_accessory/ears/moth_antenna_fluff_lovers + name = "lovers moth antennae and fluff" + id = "ears_moth_lovers" + icon_state = "moth_antenna_fluff_lovers" + +/datum/sprite_accessory/ears/moth_antenna_fluff_moonfly + name = "moonfly moth antennae and fluff" + id = "ears_moth_moonfly" + icon_state = "moth_antenna_fluff_moonfly" + +/datum/sprite_accessory/ears/moth_antenna_fluff_oakworm + name = "oakworm moth antennae and fluff" + id = "ears_moth_oakworm" + icon_state = "moth_antenna_fluff_oakworm" + +/datum/sprite_accessory/ears/moth_antenna_fluff_plain + name = "plain moth antennae and fluff" + id = "ears_moth_plain" + icon_state = "moth_antenna_fluff_plain" + +/datum/sprite_accessory/ears/moth_antenna_fluff_poison + name = "poison moth antennae and fluff" + id = "ears_moth_poison" + icon_state = "moth_antenna_fluff_poison" + +/datum/sprite_accessory/ears/moth_antenna_fluff_ragged + name = "ragged moth antennae and fluff" + id = "ears_moth_ragged" + icon_state = "moth_antenna_fluff_ragged" + +/datum/sprite_accessory/ears/moth_antenna_fluff_red + name = "red moth antennae and fluff" + id = "ears_moth_red" + icon_state = "moth_antenna_fluff_red" + +/datum/sprite_accessory/ears/moth_antenna_fluff_royal + name = "royal moth antennae and fluff" + id = "ears_moth_royal" + icon_state = "moth_antenna_fluff_royal" + +/datum/sprite_accessory/ears/moth_antenna_fluff_snowy + name = "snowy moth antennae and fluff" + id = "ears_moth_snowy" + icon_state = "moth_antenna_fluff_snowy" + +/datum/sprite_accessory/ears/moth_antenna_fluff_whitefly + name = "whitefly moth antennae and fluff" + id = "ears_moth_whitefly" + icon_state = "moth_antenna_fluff_whitefly" + +/datum/sprite_accessory/ears/moth_antenna_fluff_witchwing + name = "witchwing moth antennae and fluff" + id = "ears_moth_witchwing" + icon_state = "moth_antenna_fluff_witchwing" diff --git a/code/modules/sprite_accessories/ears/animal/leporid.dm b/code/modules/sprite_accessories/ears/animal/leporid.dm new file mode 100644 index 00000000000..569023d9c8a --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/leporid.dm @@ -0,0 +1,71 @@ +//? rabbit +/datum/sprite_accessory/ears/bnnuy //bnnuy + name = "Bnnuy Ears" + id = "ears_bunny" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "bnnuy" + extra_overlay = "bnnuy-inner" + extra_overlay2 = "bnnuy-tips" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bnnuy2 + name = "Bnnuy Ears 2" + id = "ears_bunny_2" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "bnnuy2" + extra_overlay = "bnnuy-inner" + extra_overlay2 = "bnnuy-tips2" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bunnyalt + name = "bunny 2, dual-color" + id = "ears_bunny_colorable_2" + icon_state = "bunny-alt" + extra_overlay = "bunny-alt-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bunnyhc + name = "bunny, colorable" + id = "ears_bunny_colorable" + icon_state = "bunny" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bunny_floppy + name = "floppy bunny ears (colorable)" + id = "ears_bunny_floppy" + icon_state = "floppy_bun" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bunny_tall + name = "Bunny Tall Ears" + id = "ears_bunny_tall" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "bunny-tall" + extra_overlay = "bunny-tall-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bunny_white + name = "bunny, white" + id = "ears_bunny_white" + icon_state = "bunny" + +/datum/sprite_accessory/ears/rabbit_swept + name = "Rabbit Ears (swept back)" + id = "ears_rabbit_back" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "rabbit-swept" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/swooped_bunny + name = "Swooped bunny ears (colorable)" + id = "ears_bunny_swoop" + icon_state = "swooped_bunny" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/animal/murid.dm b/code/modules/sprite_accessories/ears/animal/murid.dm new file mode 100644 index 00000000000..69bc7e472c5 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/murid.dm @@ -0,0 +1,20 @@ +//? mice +/datum/sprite_accessory/ears/mousehc + name = "mouse, colorable" + id = "ears_mouse" + icon_state = "mouse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "mouseinner" + +/datum/sprite_accessory/ears/mousehcno + name = "mouse, colorable, no inner" + id = "ears_mouse_outer" + icon_state = "mouse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/mouse_grey + name = "mouse, grey" + id = "ears_mouse_grey" + icon_state = "mouse-grey" diff --git a/code/modules/sprite_accessories/ears/animal/mushroom.dm b/code/modules/sprite_accessories/ears/animal/mushroom.dm new file mode 100644 index 00000000000..cb7ed6be09c --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/mushroom.dm @@ -0,0 +1,11 @@ +/datum/sprite_accessory/ears/fungal_muscaria + name = "fungal muscaria cap" + id = "ears_mushroom_muscaria" + desc = "" + icon_state = "fungal_muscaria" + +/datum/sprite_accessory/ears/fungal_polypore + name = "fungal polyporous cap" + id = "ears_mushroom_polyporous" + desc = "" + icon_state = "fungal_polypore" diff --git a/code/modules/sprite_accessories/ears/animal/sciurid.dm b/code/modules/sprite_accessories/ears/animal/sciurid.dm new file mode 100644 index 00000000000..19c2691fd25 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/sciurid.dm @@ -0,0 +1,17 @@ +//? squirrels +/datum/sprite_accessory/ears/squirrelhc + name = "squirrel, colorable" + id = "ears_squirrel_color" + icon_state = "squirrel" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/squirrel_orange + name = "squirel, orange" + id = "ears_squirrel_orange" + icon_state = "squirrel-orange" + +/datum/sprite_accessory/ears/squirrel_red + name = "squirrel, red" + id = "ears_squirrel_red" + icon_state = "squirrel-red" diff --git a/code/modules/sprite_accessories/ears/animal/ursid.dm b/code/modules/sprite_accessories/ears/animal/ursid.dm new file mode 100644 index 00000000000..b808873fd15 --- /dev/null +++ b/code/modules/sprite_accessories/ears/animal/ursid.dm @@ -0,0 +1,24 @@ +//? bear +/datum/sprite_accessory/ears/bear_brown + name = "bear, brown" + id = "ears_bear_brown" + icon_state = "bear-brown" + +/datum/sprite_accessory/ears/bear_panda + name = "bear, panda" + id = "ears_bear_panda" + icon_state = "panda" + +/datum/sprite_accessory/ears/bearhc + name = "bear, colorable" + id = "ears_bear_colorable" + icon_state = "bear" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/smallbear + name = "small bear" + id = "ears_bear_small" + icon_state = "smallbear" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/antenna.dm b/code/modules/sprite_accessories/ears/antenna.dm new file mode 100644 index 00000000000..1d7624df62b --- /dev/null +++ b/code/modules/sprite_accessories/ears/antenna.dm @@ -0,0 +1,34 @@ +/datum/sprite_accessory/ears/antennae + name = "antennae, colorable" + id = "ears_antenna" + icon_state = "antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/curly_bug + name = "curly antennae, colorable" + id = "ears_antenna_curly" + icon_state = "curly_bug" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/dual_robot + name = "synth antennae, colorable" + id = "ears_antenna_synth_dual" + icon_state = "dual_robot_antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/left_robot + name = "left synth, colorable" + id = "ears_antenna_synth_left" + icon_state = "left_robot_antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/right_robot + name = "right synth, colorable" + id = "ears_antenna_synth_right" + icon_state = "right_robot_antennae" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/deathclaw.dm b/code/modules/sprite_accessories/ears/fictional/deathclaw.dm new file mode 100644 index 00000000000..bc426672c43 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/deathclaw.dm @@ -0,0 +1,4 @@ +/datum/sprite_accessory/ears/molenar_deathclaw + name = "deathclaw ears" + id = "ears_deathclaw" + icon_state = "molenar-deathclaw" diff --git a/code/modules/sprite_accessories/ears/fictional/demon.dm b/code/modules/sprite_accessories/ears/fictional/demon.dm new file mode 100644 index 00000000000..841ec4656c0 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/demon.dm @@ -0,0 +1,40 @@ +/datum/sprite_accessory/ears/demon_horns1 + name = "demon horns" + id = "ears_demon" + icon_state = "demon-horns1" + +/datum/sprite_accessory/ears/demon_horns1_c + name = "demon horns, colorable" + id = "ears_demon_colorable" + icon_state = "demon-horns1_c" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/demon_horns2 + name = "demon horns, colorable(outward)" + id = "ears_demon_colorable_out" + icon_state = "demon-horns2" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/demon_horns3 + name = "demon horns, colorable(upward)" + id = "ears_demon_colorable_up" + icon_state = "demon-horns3" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/demon_horns4 + name = "demon horns, colorable ring(upward)" + id = "ears_demon_colorable_up2" + icon_state = "demon-horns4" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "demon-horns4-ring" + +/datum/sprite_accessory/ears/demon_horns5 + name = "demon horns, colorable (stubby)" + id = "ears_demon_colorable_stub" + icon_state = "demon-horns5" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/draconic.dm b/code/modules/sprite_accessories/ears/fictional/draconic.dm new file mode 100644 index 00000000000..83064997721 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/draconic.dm @@ -0,0 +1,20 @@ +/datum/sprite_accessory/ears/dragon_horns + name = "dragon horns, colorable" + id = "ears_dragon" + icon_state = "dragon-horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/drake + name = "drake frills" + id = "ears_drake" + icon_state = "drake" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/large_dragon + name = "vary large dragon horns" + id = "ears_dragon_verybig" + icon_state = "big_liz" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/elf.dm b/code/modules/sprite_accessories/ears/fictional/elf.dm new file mode 100644 index 00000000000..e4f0c670cc7 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/elf.dm @@ -0,0 +1,20 @@ +/datum/sprite_accessory/ears/elfs + name = "elven ears" + id = "ears_elf" + icon_state = "elfs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/elfshort + name = "elven ears (short)" + id = "ears_elf_short" + icon_state = "elfshort" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/floppyelf + name = "floppy elven ears" + id = "ears_elf_floppy" + icon_state = "floppy-elf" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/jackalope.dm b/code/modules/sprite_accessories/ears/fictional/jackalope.dm new file mode 100644 index 00000000000..3b964e5b421 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/jackalope.dm @@ -0,0 +1,8 @@ +/datum/sprite_accessory/ears/jackalope + name = "Jackalope Ears and Antlers" + id = "ears_jackalope_antlers" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "jackalope" + extra_overlay = "jackalope-antlers" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/oni.dm b/code/modules/sprite_accessories/ears/fictional/oni.dm new file mode 100644 index 00000000000..9e4d2639083 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/oni.dm @@ -0,0 +1,11 @@ +/datum/sprite_accessory/ears/oni_h1 + name = "oni horns" + id = "ears_oni" + icon_state = "oni-h1" + +/datum/sprite_accessory/ears/oni_h1_c + name = "oni horns, colorable" + id = "ears_oni_color" + icon_state = "oni-h1_c" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/otie.dm b/code/modules/sprite_accessories/ears/fictional/otie.dm new file mode 100644 index 00000000000..e5b6e55f23a --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/otie.dm @@ -0,0 +1,7 @@ +/datum/sprite_accessory/ears/otie + name = "otie, colorable" + id = "ears_otie" + icon_state = "otie" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "otie-inner" diff --git a/code/modules/sprite_accessories/ears/fictional/pokemon.dm b/code/modules/sprite_accessories/ears/fictional/pokemon.dm new file mode 100644 index 00000000000..b921d4b46a9 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/pokemon.dm @@ -0,0 +1,4 @@ +/datum/sprite_accessory/ears/leafeon + name = "Leaf Ears" + id = "ears_leafeon" + icon_state = "leaf_ears" diff --git a/code/modules/sprite_accessories/ears/fictional/sergal.dm b/code/modules/sprite_accessories/ears/fictional/sergal.dm new file mode 100644 index 00000000000..bc241a3f1a2 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/sergal.dm @@ -0,0 +1,11 @@ +/datum/sprite_accessory/ears/sergal //Redundant + name = "Sergal ears" + id = "ears_sergal" + icon_state = "serg_plain_s" + +/datum/sprite_accessory/ears/sergalhc + name = "Sergal ears, colorable" + id = "ears_sergal_color" + icon_state = "serg_plain_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/ears/fictional/shadekin.dm b/code/modules/sprite_accessories/ears/fictional/shadekin.dm new file mode 100644 index 00000000000..603ed6152f1 --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/shadekin.dm @@ -0,0 +1,8 @@ +/datum/sprite_accessory/ears/shadekin + name = "Shadekin Ears, colorable" + id = "ears_shadekin" + icon_state = "shadekin" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + apply_restrictions = TRUE + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) diff --git a/code/modules/sprite_accessories/ears/fictional/teshari.dm b/code/modules/sprite_accessories/ears/fictional/teshari.dm new file mode 100644 index 00000000000..757a09632bf --- /dev/null +++ b/code/modules/sprite_accessories/ears/fictional/teshari.dm @@ -0,0 +1,39 @@ +/datum/sprite_accessory/ears/teshari + name = "Teshari ears (colorable)" + id = "ears_teshari" + icon_state = "teshari" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshariinner" + +/datum/sprite_accessory/ears/tesharihigh + name = "Teshari upper ears (colorable)" + id = "ears_teshari_upper" + icon_state = "tesharihigh" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tesharihighinner" + +/datum/sprite_accessory/ears/tesharilow + name = "Teshari lower ears (colorable)" + id = "ears_teshari_lower" + icon_state = "tesharilow" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tesharilowinner" + +/datum/sprite_accessory/ears/tesh_pattern_ear_male + name = "Teshari male ear pattern (colorable)" + id = "ears_teshari_male" + icon_state = "teshari" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + extra_overlay = "teshari_male_pattern" + +/datum/sprite_accessory/ears/tesh_pattern_ear_female + name = "Teshari female ear pattern (colorable)" + id = "ears_teshari_female" + icon_state = "teshari" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + extra_overlay = "teshari_female_pattern" diff --git a/code/modules/sprite_accessories/ears/horns.dm b/code/modules/sprite_accessories/ears/horns.dm new file mode 100644 index 00000000000..c783e074f02 --- /dev/null +++ b/code/modules/sprite_accessories/ears/horns.dm @@ -0,0 +1,22 @@ +/datum/sprite_accessory/ears/synthhorns_curly + name = "Synth horns, curly" + id = "ears_horns_synth_curly" + icon_state = "synthhorns_curled" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/synthhorns_plain + name = "Synth horns, plain" + id = "ears_horns_synth_plain" + icon_state = "synthhorns_plain" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "synthhorns_plain_light" + +/datum/sprite_accessory/ears/synthhorns_thick + name = "Synth horns, thick" + id = "ears_horns_synth_thick" + icon_state = "synthhorns_thick" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "synthhorns_thick_light" diff --git a/code/modules/sprite_accessories/ears/misc.dm b/code/modules/sprite_accessories/ears/misc.dm new file mode 100644 index 00000000000..66825b1b97d --- /dev/null +++ b/code/modules/sprite_accessories/ears/misc.dm @@ -0,0 +1,62 @@ +/datum/sprite_accessory/ears/caprahorns + name = "caprine horns" + id = "ears_capra_horns" + icon_state = "caprahorns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/inkling + name = "colorable mature inkling tentacles" + id = "ears_inkling_tentacle" + icon = 'icons/mob/human_face_vr.dmi' + icon_state = "inkling-colorable" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/peekinghuman + name = "peeking ears" + id = "ears_peeking" + icon_state = "earpeek" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/sleek + name = "sleek ears" + id = "ears_sleek" + icon_state = "sleek" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teppiears + name = "Teppi Ears" + id = "ears_teppi_ear" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "teppi_ears" + extra_overlay = "teppi_ears_inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teppihorns + name = "Teppi Horns" + id = "ears_teppi_horn" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "teppi_horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teppiearshorns + name = "Teppi Ears and Horns" + id = "ears_teppi_both" + icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' + icon_state = "teppi_ears" + extra_overlay = "teppi_ears_inner" + extra_overlay2 = "teppi_horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/zears + name = "jagged ears" + id = "ears_jagged" + icon_state = "zears" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/facial_hair/facial_hair.dm b/code/modules/sprite_accessories/facial_hair/_facial_hair.dm similarity index 83% rename from code/modules/sprite_accessories/facial_hair/facial_hair.dm rename to code/modules/sprite_accessories/facial_hair/_facial_hair.dm index df1e4dcf054..a3a56feadd5 100644 --- a/code/modules/sprite_accessories/facial_hair/facial_hair.dm +++ b/code/modules/sprite_accessories/facial_hair/_facial_hair.dm @@ -7,142 +7,176 @@ */ /datum/sprite_accessory/facial_hair + abstract_type = /datum/sprite_accessory/facial_hair icon = 'icons/mob/human_face_or_vr.dmi' color_blend_mode = ICON_MULTIPLY apply_restrictions = FALSE /datum/sprite_accessory/facial_hair/shaved name = "Shaved" + id = "fhair_shaved" icon_state = "bald" gender = NEUTER /datum/sprite_accessory/facial_hair/neck_fluff name = "Neck Fluff" + id = "fhair_neckfluff" icon = 'icons/mob/human_face_or_vr.dmi' icon_state = "facial_neckfluff" gender = NEUTER /datum/sprite_accessory/facial_hair/watson name = "Watson Mustache" + id = "fhair_watson" icon_state = "facial_watson" /datum/sprite_accessory/facial_hair/hogan name = "Hulk Hogan Mustache" + id = "fhair_hogan" icon_state = "facial_hogan" //-Neek /datum/sprite_accessory/facial_hair/vandyke name = "Van Dyke Mustache" + id = "fhair_vandyke" icon_state = "facial_vandyke" /datum/sprite_accessory/facial_hair/chaplin name = "Square Mustache" + id = "fhair_square" icon_state = "facial_chaplin" /datum/sprite_accessory/facial_hair/selleck name = "Selleck Mustache" + id = "fhair_selleck" icon_state = "facial_selleck" /datum/sprite_accessory/facial_hair/neckbeard name = "Neckbeard" + id = "fhair_neck" icon_state = "facial_neckbeard" /datum/sprite_accessory/facial_hair/fullbeard name = "Full Beard" + id = "fhair_full" icon_state = "facial_fullbeard" /datum/sprite_accessory/facial_hair/longbeard name = "Long Beard" + id = "fhair_long" icon_state = "facial_longbeard" /datum/sprite_accessory/facial_hair/vlongbeard name = "Very Long Beard" + id = "fhair_verylong" icon_state = "facial_wise" /datum/sprite_accessory/facial_hair/elvis name = "Elvis Sideburns" + id = "fhair_elvis" icon_state = "facial_elvis" //Fuck it, everyone is Elvis. species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) /datum/sprite_accessory/facial_hair/abe name = "Abraham Lincoln Beard" + id = "fhair_lincoln" icon_state = "facial_abe" /datum/sprite_accessory/facial_hair/chinstrap name = "Chinstrap" + id = "fhair_chinstrap" icon_state = "facial_chin" /datum/sprite_accessory/facial_hair/hip name = "Hipster Beard" + id = "fhair_hipster" icon_state = "facial_hip" /datum/sprite_accessory/facial_hair/gt name = "Goatee" + id = "fhair_goatee" icon_state = "facial_gt" /datum/sprite_accessory/facial_hair/jensen name = "Adam Jensen Beard" + id = "fhair_jensen" icon_state = "facial_jensen" /datum/sprite_accessory/facial_hair/volaju name = "Volaju" + id = "fhair_volaju" icon_state = "facial_volaju" /datum/sprite_accessory/facial_hair/dwarf name = "Dwarf Beard" + id = "fhair_dwarf" icon_state = "facial_dwarf" /datum/sprite_accessory/facial_hair/threeOclock name = "3 O'clock Shadow" + id = "fhair_3oclock" icon_state = "facial_3oclock" /datum/sprite_accessory/facial_hair/threeOclockstache name = "3 O'clock Shadow and Moustache" + id = "fhair_3oclock_mous" icon_state = "facial_3oclockmoustache" /datum/sprite_accessory/facial_hair/fiveOclock name = "5 O'clock Shadow" + id = "fhair_5oclock" icon_state = "facial_5oclock" /datum/sprite_accessory/facial_hair/fiveOclockstache name = "5 O'clock Shadow and Moustache" + id = "fhair_5oclock_mous" icon_state = "facial_5oclockmoustache" /datum/sprite_accessory/facial_hair/sevenOclock name = "7 O'clock Shadow" + id = "fhair_7oclock" icon_state = "facial_7oclock" /datum/sprite_accessory/facial_hair/sevenOclockstache name = "7 O'clock Shadow and Moustache" + id = "fhair_7oclock_mous" icon_state = "facial_7oclockmoustache" /datum/sprite_accessory/facial_hair/mutton name = "Mutton Chops" + id = "fhair_mutton" icon_state = "facial_mutton" /datum/sprite_accessory/facial_hair/muttonstache name = "Mutton Chops and Moustache" + id = "fhair_mutton_mous" icon_state = "facial_muttonmus" /datum/sprite_accessory/facial_hair/walrus name = "Walrus Moustache" + id = "fhair_walrus" icon_state = "facial_walrus" /datum/sprite_accessory/facial_hair/croppedbeard name = "Full Cropped Beard" + id = "fhair_fullcrop" icon_state = "facial_croppedfullbeard" /datum/sprite_accessory/facial_hair/chinless name = "Chinless Beard" + id = "fhair_chinless" icon_state = "facial_chinlessbeard" /datum/sprite_accessory/facial_hair/tribeard name = "Tribeard" + id = "fhair_tribeard" icon_state = "facial_tribeard" /datum/sprite_accessory/facial_hair/moonshiner name = "Moonshiner" + id = "fhair_moonshiner" icon_state = "facial_moonshiner" /datum/sprite_accessory/facial_hair/martial name = "Martial Artist" + id = "fhair_martial" icon_state = "facial_martialartist" diff --git a/code/modules/sprite_accessories/facial_hair/tajaran_facial_hair.dm b/code/modules/sprite_accessories/facial_hair/tajaran.dm similarity index 84% rename from code/modules/sprite_accessories/facial_hair/tajaran_facial_hair.dm rename to code/modules/sprite_accessories/facial_hair/tajaran.dm index cf99e0f4f5d..f5b70e434a8 100644 --- a/code/modules/sprite_accessories/facial_hair/tajaran_facial_hair.dm +++ b/code/modules/sprite_accessories/facial_hair/tajaran.dm @@ -1,35 +1,41 @@ /datum/sprite_accessory/facial_hair/taj_sideburns name = "Tajaran Sideburns" + id = "fhair_tajaran_sideburns" icon_state = "facial_sideburns" species_allowed = list(SPECIES_TAJ) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/taj_mutton name = "Tajaran Mutton" + id = "fhair_tajaran_mutton" icon_state = "facial_mutton" species_allowed = list(SPECIES_TAJ) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/taj_pencilstache name = "Tajaran Pencilstache" + id = "fhair_tajaran_pencilstache" icon_state = "facial_pencilstache" species_allowed = list(SPECIES_TAJ) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/taj_moustache name = "Tajaran Moustache" + id = "fhair_tajaran_moustache" icon_state = "facial_moustache" species_allowed = list(SPECIES_TAJ) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/taj_goatee name = "Tajaran Goatee" + id = "fhair_tajaran_goatee" icon_state = "facial_goatee" species_allowed = list(SPECIES_TAJ) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/taj_smallstache name = "Tajaran Smallsatche" + id = "fhair_tajaran_smallstache" icon_state = "facial_smallstache" species_allowed = list(SPECIES_TAJ) apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/facial_hair/teshari_facial_hair.dm b/code/modules/sprite_accessories/facial_hair/teshari.dm similarity index 87% rename from code/modules/sprite_accessories/facial_hair/teshari_facial_hair.dm rename to code/modules/sprite_accessories/facial_hair/teshari.dm index ecaede506f8..fdba2cc9fa9 100644 --- a/code/modules/sprite_accessories/facial_hair/teshari_facial_hair.dm +++ b/code/modules/sprite_accessories/facial_hair/teshari.dm @@ -2,6 +2,7 @@ /datum/sprite_accessory/facial_hair/teshari_beard name = "Teshari Beard" + id = "fhair_teshari_chin" icon_state = "teshari_chin" species_allowed = list(SPECIES_TESHARI) apply_restrictions = TRUE @@ -9,6 +10,7 @@ /datum/sprite_accessory/facial_hair/teshari_scraggly name = "Teshari Scraggly" + id = "fhair_teshari_scraggly" icon_state = "teshari_scraggly" species_allowed = list(SPECIES_TESHARI) apply_restrictions = TRUE @@ -16,6 +18,7 @@ /datum/sprite_accessory/facial_hair/teshari_chops name = "Teshari Chops" + id = "fhair_teshari_chops" icon_state = "teshari_gap" species_allowed = list(SPECIES_TESHARI) apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/facial_hair/unathi_facial_hair.dm b/code/modules/sprite_accessories/facial_hair/unathi.dm similarity index 84% rename from code/modules/sprite_accessories/facial_hair/unathi_facial_hair.dm rename to code/modules/sprite_accessories/facial_hair/unathi.dm index 331aa7c543a..f05b1dbff7f 100644 --- a/code/modules/sprite_accessories/facial_hair/unathi_facial_hair.dm +++ b/code/modules/sprite_accessories/facial_hair/unathi.dm @@ -2,20 +2,24 @@ /datum/sprite_accessory/facial_hair/una_chinhorn name = "Unathi Chin Horn" + id = "fhair_unathi_chin" icon_state = "facial_chinhorns" species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/facial_hair/una_hornadorns name = "Unathi Horn Adorns" + id = "fhair_unathi_adorns" icon_state = "facial_hornadorns" species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/facial_hair/una_spinespikes name = "Unathi Spine Spikes" + id = "fhair_unathi_spikes" icon_state = "facial_spikes" species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/facial_hair/una_dorsalfrill name = "Unathi Dorsal Frill" + id = "fhair_unathi_dorsalfrill" icon_state = "facial_dorsalfrill" species_allowed = list(SPECIES_UNATHI) diff --git a/code/modules/sprite_accessories/facial_hair/vox_facial_hair.dm b/code/modules/sprite_accessories/facial_hair/vox.dm similarity index 87% rename from code/modules/sprite_accessories/facial_hair/vox_facial_hair.dm rename to code/modules/sprite_accessories/facial_hair/vox.dm index 5192af0e075..647f2624697 100644 --- a/code/modules/sprite_accessories/facial_hair/vox_facial_hair.dm +++ b/code/modules/sprite_accessories/facial_hair/vox.dm @@ -2,36 +2,42 @@ /datum/sprite_accessory/facial_hair/vox_face_colonel name = "Vox Colonel" + id = "fhair_vox_colonel" icon_state = "vox_colonel" species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/vox_face_fu name = "Quill Fu" + id = "fhair_vox_quillfu" icon_state = "vox_fu" species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/vox_face_neck name = "Neck Quills" + id = "fhair_vox_neck" icon_state = "vox_neck" species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/vox_face_beard name = "Quill Beard" + id = "fhair_vox_beard" icon_state = "vox_beard" species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/vox_ruff_beard name = "Ruff Beard" + id = "fhair_vox_ruff" icon_state = "vox_ruff_beard" species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE /datum/sprite_accessory/facial_hair/vox_shaved_beard name = "Vox Shaved" + id = "fhair_vox_shaved" icon_state = "vox_bald" species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/facial_hair/vulpakin_facial_hair.dm b/code/modules/sprite_accessories/facial_hair/vulpkanin.dm similarity index 91% rename from code/modules/sprite_accessories/facial_hair/vulpakin_facial_hair.dm rename to code/modules/sprite_accessories/facial_hair/vulpkanin.dm index 6665dfdb48a..3ec4b24b299 100644 --- a/code/modules/sprite_accessories/facial_hair/vulpakin_facial_hair.dm +++ b/code/modules/sprite_accessories/facial_hair/vulpkanin.dm @@ -1,5 +1,6 @@ /datum/sprite_accessory/facial_hair/vulp_none name = "None" + id = "fhair_vulp_none" icon = 'icons/mob/human_face_vr.dmi' icon_state = "none" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -8,6 +9,7 @@ /datum/sprite_accessory/facial_hair/vulp_blaze name = "Blaze" + id = "fhair_vulp_blaze" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_blaze" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -16,6 +18,7 @@ /datum/sprite_accessory/facial_hair/vulp_vulpine name = "Vulpine" + id = "fhair_vulp_vulpine" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_vulpine" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -24,6 +27,7 @@ /datum/sprite_accessory/facial_hair/vulp_earfluff name = "Earfluff" + id = "fhair_vulp_earfluff" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_earfluff" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -32,6 +36,7 @@ /datum/sprite_accessory/facial_hair/vulp_mask name = "Mask" + id = "fhair_vulp_mask" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_mask" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -40,6 +45,7 @@ /datum/sprite_accessory/facial_hair/vulp_patch name = "Patch" + id = "fhair_vulp_patch" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_patch" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -48,6 +54,7 @@ /datum/sprite_accessory/facial_hair/vulp_ruff name = "Ruff" + id = "fhair_vulp_ruff" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_ruff" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -56,6 +63,7 @@ /datum/sprite_accessory/facial_hair/vulp_kita name = "Kita" + id = "fhair_vulp_kita" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_kita" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) @@ -64,6 +72,7 @@ /datum/sprite_accessory/facial_hair/vulp_swift name = "Swift" + id = "fhair_vulp_swift" icon = 'icons/mob/human_face_vr.dmi' icon_state = "vulp_facial_swift" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) diff --git a/code/modules/sprite_accessories/hair/hair.dm b/code/modules/sprite_accessories/hair/_hair.dm similarity index 70% rename from code/modules/sprite_accessories/hair/hair.dm rename to code/modules/sprite_accessories/hair/_hair.dm index 7cf14c7b766..ef79dc15142 100644 --- a/code/modules/sprite_accessories/hair/hair.dm +++ b/code/modules/sprite_accessories/hair/_hair.dm @@ -7,946 +7,1118 @@ */ /datum/sprite_accessory/hair + abstract_type = /datum/sprite_accessory/hair icon = 'icons/mob/human_face_m.dmi' // default icon for all hairs var/icon_add = 'icons/mob/human_face.dmi' //Enhanced colours and hair for all color_blend_mode = ICON_MULTIPLY apply_restrictions = FALSE - var/flags + var/hair_flags /datum/sprite_accessory/hair/eighties name = "80's" + id = "hair_80s" icon_state = "hair_80s" /datum/sprite_accessory/hair/fluffyshort name = "Fluffy Short" + id = "hair_fluffyshort" icon_state = "hair_fluffy_short" /datum/sprite_accessory/hair/eighties_alt name = "80's (Alternative)" + id = "hair_80s_alt" icon_state = "hair_80s_alt" /datum/sprite_accessory/hair/afro name = "Afro" + id = "hair_afro" icon_state = "hair_afro" /datum/sprite_accessory/hair/afro2 name = "Afro 2" + id = "hair_afro2" icon_state = "hair_afro2" /datum/sprite_accessory/hair/afro_large name = "Big Afro" + id = "hair_afro_big" icon_state = "hair_bigafro" /datum/sprite_accessory/hair/ahoge name = "Ahoge" + id = "hair_ahoge" icon_state = "hair_ahoge" icon = 'icons/mob/human_face_vr.dmi' icon_add = null /datum/sprite_accessory/hair/bald //Everyone goes bald. name = "Bald" + id = "hair_bald" icon_state = "bald" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/baldfade name = "Balding Fade" + id = "hair_balding_fade" icon_state = "hair_baldfade" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/balding name = "Balding Hair" + id = "hair_balding" icon_state = "hair_e" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/bedhead name = "Bedhead" + id = "hair_bedhead" icon_state = "hair_bedhead" /datum/sprite_accessory/hair/bedhead2 name = "Bedhead 2" + id = "hair_bedhead2" icon_state = "hair_bedheadv2" /datum/sprite_accessory/hair/bedhead3 name = "Bedhead 3" + id = "hair_bedhead3" icon_state = "hair_bedheadv3" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bedheadlong name = "Bedhead Long" + id = "hair_bedhead_long" icon_state = "hair_long_bedhead" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/beehive name = "Beehive" + id = "hair_beehive" icon_state = "hair_beehive" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/beehive2 name = "Beehive 2" + id = "hair_beehive2" icon_state = "hair_beehive2" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/belenko name = "Belenko" + id = "hair_balenko" icon_state = "hair_belenko" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/belenkotied name = "Belenko Tied" + id = "hair_balenko_tied" icon_state = "hair_belenkotied" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bob name = "Bob" + id = "hair_bob" icon_state = "hair_bobcut" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bobcutalt name = "Bob Chin Length" + id = "hair_bob_chin" icon_state = "hair_bobcutalt" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bobcurl name = "Bobcurl" + id = "hair_bob_curl" icon_state = "hair_bobcurl" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bowl name = "Bowl" + id = "hair_bowlcut" icon_state = "hair_bowlcut" /datum/sprite_accessory/hair/bowlcut2 name = "Bowl 2" + id = "hair_bowlcut2" icon_state = "hair_bowlcut2" /datum/sprite_accessory/hair/grandebraid name = "Braid Grande" + id = "hair_braid_grande" icon_state = "hair_grande" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/braid2 name = "Braid Long" + id = "hair_braid_long" icon_state = "hair_hbraid" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/mbraid name = "Braid Medium" + id = "hair_braid_medium" icon_state = "hair_shortbraid" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/braid name = "Floorlength Braid" + id = "hair_braid_floorlength" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "hair_braid" /datum/sprite_accessory/hair/bun name = "Bun" + id = "hair_bun" icon_state = "hair_bun" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bun2 name = "Bun 2" + id = "hair_bun2" icon_state = "hair_bun2" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bun3 name = "Bun 3" + id = "hair_bun3" icon_state = "hair_bun3" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bun name = "Bun Casual" + id = "hair_bun_casual" icon_state = "hair_bun" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/doublebun name = "Bun Double" + id = "hair_bun_double" icon_state = "hair_doublebun" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/tightbun name = "Bun Tight" + id = "hair_bun_tight" icon_state = "hair_tightbun" gender = FEMALE - flags = HAIR_VERY_SHORT | HAIR_TIEABLE + hair_flags = HAIR_VERY_SHORT | HAIR_TIEABLE /datum/sprite_accessory/hair/buzz name = "Buzzcut" + id = "hair_buzzcut" icon_state = "hair_buzzcut" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/crono name = "Chrono" + id = "hair_chrono" icon_state = "hair_toriyama" /datum/sprite_accessory/hair/cia name = "CIA" + id = "hair_cia" icon_state = "hair_cia" /datum/sprite_accessory/hair/coffeehouse name = "Coffee House Cut" + id = "hair_coffeehouse" icon_state = "hair_coffeehouse" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/combover name = "Combover" + id = "hair_combover" icon_state = "hair_combover" /datum/sprite_accessory/hair/country name = "Country" + id = "hair_country" icon_state = "hair_country" /datum/sprite_accessory/hair/crew name = "Crewcut" + id = "hair_crewcut" icon_state = "hair_crewcut" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/curls name = "Curls" + id = "hair_curls" icon_state = "hair_curls" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/cut name = "Cut Hair" + id = "hair_cut" icon_state = "hair_c" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/dave name = "Dave" + id = "hair_dave" icon_state = "hair_dave" /datum/sprite_accessory/hair/devillock name = "Devil Lock" + id = "hair_devillock" icon_state = "hair_devilock" /datum/sprite_accessory/hair/dreadlocks name = "Dreadlocks" + id = "hair_dreadlocks" icon_state = "hair_dreads" /datum/sprite_accessory/hair/mahdrills name = "Drillruru" + id = "hair_drillruru" icon_state = "hair_drillruru" /datum/sprite_accessory/hair/emo name = "Emo" + id = "hair_emo" icon_state = "hair_emo" /datum/sprite_accessory/hair/emo2 name = "Emo Alt" + id = "hair_emo_alt" icon_state = "hair_emo2" /datum/sprite_accessory/hair/fringeemo name = "Emo Fringe" + id = "hair_emo_fringe" icon_state = "hair_emofringe" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/halfshaved name = "Emo Half-Shaved" + id = "hair_emo_halfshave" icon_state = "hair_halfshaved" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/longemo name = "Emo Long" + id = "hair_emo_long" icon_state = "hair_emolong" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/highfade name = "Fade High" + id = "hair_fade_high" icon_state = "hair_highfade" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/medfade name = "Fade Medium" + id = "hair_fade_medium" icon_state = "hair_medfade" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/lowfade name = "Fade Low" + id = "hair_fade_low" icon_state = "hair_lowfade" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/partfade name = "Fade Parted" + id = "hair_fade_parted" icon_state = "hair_shavedpart" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/familyman name = "Family Man" + id = "hair_familyman" icon_state = "hair_thefamilyman" /datum/sprite_accessory/hair/father name = "Father" + id = "hair_father" icon_state = "hair_father" /datum/sprite_accessory/hair/feather name = "Feather" + id = "hair_feather" icon_state = "hair_feather" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/flair name = "Flaired Hair" + id = "hair_flair" icon_state = "hair_flair" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/sargeant name = "Flat Top" + id = "hair_sargeant" icon_state = "hair_sargeant" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/flowhair name = "Flow Hair" + id = "hair_flow" icon_state = "hair_f" /datum/sprite_accessory/hair/longfringe name = "Fringe Long" + id = "hair_fringe_long" icon_state = "hair_longfringe" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/longestalt name = "Fringe Longer" + id = "hair_fringe_verylong" icon_state = "hair_vlongfringe" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/fringetail name = "Fringetail" + id = "hair_fringe_tail" icon_state = "hair_fringetail" - flags = HAIR_TIEABLE|HAIR_VERY_SHORT + hair_flags = HAIR_TIEABLE|HAIR_VERY_SHORT /datum/sprite_accessory/hair/gelled name = "Gelled Back" + id = "hair_gelled" icon_state = "hair_gelled" /datum/sprite_accessory/hair/gentle name = "Gentle" + id = "hair_gentle" icon_state = "hair_gentle" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/glossy name = "Glossy" + id = "hair_glossy" icon_state = "hair_glossy" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/halfbang name = "Half-banged Hair" + id = "hair_halfbang" icon_state = "hair_halfbang" /datum/sprite_accessory/hair/halfbangalt name = "Half-banged Hair Alt" + id = "hair_halfbang_alt" icon_state = "hair_halfbang_alt" /datum/sprite_accessory/hair/hedgehog name = "Hedgehog Hair" + id = "hair_hedgehog" icon_state = "hair_hedgehog" icon_add = null /datum/sprite_accessory/hair/hightight name = "High and Tight" + id = "hair_hightight" icon_state = "hair_hightight" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/himecut name = "Hime Cut" + id = "hair_hime" icon_state = "hair_himecut" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/shorthime name = "Hime Cut Short" + id = "hair_hime_short" icon_state = "hair_shorthime" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/hitop name = "Hitop" + id = "hair_hitop" icon_state = "hair_hitop" /datum/sprite_accessory/hair/jade name = "Jade" + id = "hair_jade" icon_state = "hair_jade" /datum/sprite_accessory/hair/jensen name = "Jensen" + id = "hair_jensen" icon_state = "hair_jensen" /datum/sprite_accessory/hair/joestar name = "Joestar" + id = "hair_joestar" icon_state = "hair_joestar" /datum/sprite_accessory/hair/kagami name = "Kagami" + id = "hair_kagami" icon_state = "hair_kagami" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/kusangi name = "Kusanagi Hair" + id = "hair_kusanagi" icon_state = "hair_kusanagi" /datum/sprite_accessory/hair/long name = "Long Hair Shoulder-length" + id = "hair_long_shoulder" icon_state = "hair_b" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /* longish name = "Longer Hair" icon_state = "hair_b2" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE */ /datum/sprite_accessory/hair/longer name = "Long Hair" + id = "hair_long" icon_state = "hair_vlong" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/longeralt2 name = "Long Hair Alt 2" + id = "hair_long_alt" icon_state = "hair_longeralt2" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/longest name = "Very Long Hair" + id = "hair_verylong" icon_state = "hair_longest" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/manbun name = "Manbun" + id = "hair_manbun" icon_state = "hair_manbun" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/modern name = "Modern" + id = "hair_modern" icon_state = "hair_modern" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/mohawk name = "Mohawk" + id = "hair_mohawk" icon_state = "hair_d" /datum/sprite_accessory/hair/regulationmohawk name = "Mohawk Regulation" + id = "hair_mohawk_regulation" icon_state = "hair_shavedmohawk" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/reversemohawk name = "Mohawk Reverse" + id = "hair_mohawk_reverse" icon_state = "hair_reversemohawk" /datum/sprite_accessory/hair/messy name = "Messy" + id = "hair_messy" icon_state = "hair_messy_tg" icon_add = null /datum/sprite_accessory/hair/mohawkunshaven name = "Mohawk Unshaven" + id = "hair_mohawk_unshaven" icon_state = "hair_unshaven_mohawk" /datum/sprite_accessory/hair/mulder name = "Mulder" + id = "hair_mulder" icon_state = "hair_mulder" /datum/sprite_accessory/hair/newyou name = "New You" + id = "hair_newyou" icon_state = "hair_newyou" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/nia name = "Nia" + id = "hair_nia" icon_state = "hair_nia" /datum/sprite_accessory/hair/nitori name = "Nitori" + id = "hair_nitori" icon_state = "hair_nitori" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/odango name = "Odango" + id = "hair_odango" icon_state = "hair_odango" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/ombre name = "Ombre" + id = "hair_ombre" icon_state = "hair_ombre" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/oxton name = "Oxton" + id = "hair_oxton" icon_state = "hair_oxton" /datum/sprite_accessory/hair/longovereye name = "Overeye Long" + id = "hair_overeye_long" icon_state = "hair_longovereye" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/shortovereye name = "Overeye Short" + id = "hair_overeye_short" icon_state = "hair_shortovereye" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/veryshortovereyealternate name = "Overeye Very Short, Alternate" + id = "hair_overeye_veryshort_alt" icon_state = "hair_veryshortovereyealternate" /datum/sprite_accessory/hair/veryshortovereye name = "Overeye Very Short" + id = "hair_overeye_veryshort" icon_state = "hair_veryshortovereye" /datum/sprite_accessory/hair/parted name = "Parted" + id = "hair_parted" icon_state = "hair_parted" /datum/sprite_accessory/hair/partedalt name = "Parted Alt" + id = "hair_parted_alt" icon_state = "hair_partedalt" /datum/sprite_accessory/hair/pompadour name = "Pompadour" + id = "hair_pompadour" icon_state = "hair_pompadour" /datum/sprite_accessory/hair/dandypomp name = "Pompadour Dandy" + id = "hair_pompadour_dandy" icon_state = "hair_dandypompadour" /datum/sprite_accessory/hair/ponytail1 name = "Ponytail 1" + id = "hair_ponytail" icon_state = "hair_ponytail" - flags = HAIR_TIEABLE|HAIR_VERY_SHORT + hair_flags = HAIR_TIEABLE|HAIR_VERY_SHORT /datum/sprite_accessory/hair/ponytail2 name = "Ponytail 2" + id = "hair_ponytail2" icon_state = "hair_pa" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/ponytail3 name = "Ponytail 3" + id = "hair_ponytail3" icon_state = "hair_ponytail3" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/ponytail4 name = "Ponytail 4" + id = "hair_ponytail4" icon_state = "hair_ponytail4" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/ponytail5 name = "Ponytail 5" + id = "hair_ponytail5" icon_state = "hair_ponytail5" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/ponytail6 name = "Ponytail 6" + id = "hair_ponytail6" icon_state = "hair_ponytail6" - flags = HAIR_TIEABLE|HAIR_VERY_SHORT + hair_flags = HAIR_TIEABLE|HAIR_VERY_SHORT /datum/sprite_accessory/hair/ponytail6_fixed //Eggnerd's done with waiting for upstream fixes lmao. name = "Ponytail 6 but fixed" + id = "hair_ponytail6_alt" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "hair_ponytail6" /datum/sprite_accessory/hair/sharpponytail name = "Ponytail Sharp" + id = "hair_ponytail_sharp" icon_state = "hair_sharpponytail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/spikyponytail name = "Ponytail Spiky" + id = "hair_ponytail_spiky" icon_state = "hair_spikyponytail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/highponytail name = "High Ponytail" + id = "hair_ponytail_high" icon_state = "hair_highponytail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/poofy name = "Poofy" + id = "hair_poofy" icon_state = "hair_poofy" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/poofy2 name = "Poofy 2" + id = "hair_poofy2" icon_state = "hair_poofy2" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/quiff name = "Quiff" + id = "hair_quiff" icon_state = "hair_quiff" /datum/sprite_accessory/hair/nofade name = "Regulation Cut" + id = "hair_regulation" icon_state = "hair_nofade" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/ronin name = "Ronin" + id = "hair_ronin" icon_state = "hair_ronin" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/rosa name = "Rosa" + id = "hair_rosa" icon_state = "hair_rosa" /datum/sprite_accessory/hair/rows name = "Rows" + id = "hair_row" icon_state = "hair_rows1" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/rows2 name = "Rows 2" + id = "hair_row2" icon_state = "hair_rows2" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/rowbun name = "Row Bun" + id = "hair_row_bun" icon_state = "hair_rowbun" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/rowdualbraid name = "Row Dual Braid" + id = "hair_row_braid_dual" icon_state = "hair_rowdualtail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/rowbraid name = "Row Braid" + id = "hair_row_braid" icon_state = "hair_rowbraid" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/scully name = "Scully" + id = "hair_scully" icon_state = "hair_scully" /datum/sprite_accessory/hair/shavehair name = "Shaved Hair" + id = "hair_shaved" icon_state = "hair_shaved" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/shortbangs name = "Short Bangs" + id = "hair_bangs_short" icon_state = "hair_shortbangs" /datum/sprite_accessory/hair/short name = "Short Hair" // try to capatilize the names please~ + id = "hair_short" icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/short2 name = "Short Hair 2" + id = "hair_short2" icon_state = "hair_shorthair3" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/shortalt2 name = "Short Hair 2 Alt" + id = "hair_short2_alt" icon_state = "shorthair3a" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' /datum/sprite_accessory/hair/short3 name = "Short Hair 3" + id = "hair_short3" icon_state = "hair_shorthair4" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/shy name = "Shy" + id = "hair_fluttershy" // let's be brutally honest about what htis is icon_state = "hair_shy" /datum/sprite_accessory/hair/sideponytail name = "Side Ponytail" + id = "hair_ponytail_side" icon_state = "hair_stail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/sideponytail4 //Not happy about this... but it's for the save files. name = "Side Ponytail 2" + id = "hair_ponytail_side2" icon_state = "hair_ponytailf" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/sideponytail2 name = "Shoulder One" + id = "hair_shoulder_one" icon_state = "hair_oneshoulder" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/sideponytail3 name = "Shoulder Tress" + id = "hair_shoulder_tress" icon_state = "hair_tressshoulder" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/skinhead name = "Skinhead" + id = "hair_skinhead" icon_state = "hair_skinhead" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/sleeze name = "Sleeze" + id = "hair_sleaze" icon_state = "hair_sleeze" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/spiky name = "Spiky" + id = "hair_spiky" icon_state = "hair_spikey" /datum/sprite_accessory/hair/thinning name = "Thinning" + id = "hair_thinning" icon_state = "hair_thinning" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/thinningfront name = "Thinning Front" + id = "hair_thinning_front" icon_state = "hair_thinningfront" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/thinningback name = "Thinning Back" + id = "hair_thinning_back" icon_state = "hair_thinningrear" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/topknot name = "Topknot" + id = "hair_topknot" icon_state = "hair_topknot" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/trimflat name = "Trimmed Flat Top" + id = "hair_trimmed_flat" icon_state = "hair_trimflat" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/jade name = "Jade" + id = "hair_jade" icon_state = "hair_jade" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/trimmed name = "Trimmed" + id = "hair_trimmed" icon_state = "hair_trimmed" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/twintai1 name = "Twintail" + id = "hair_twintails" icon_state = "hair_twintail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/twintail2 name = "Twintail Short" + id = "hair_twintails_short" icon_state = "hair_twintailshort" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/undercut1 name = "Undercut" + id = "hair_undercut" icon_state = "hair_undercut1" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/undercut2 name = "Undercut Swept Right" + id = "hair_undercut_right" icon_state = "hair_undercut2" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/undercut3 name = "Undercut Swept Left" + id = "hair_undercut_left" icon_state = "hair_undercut3" gender = MALE - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/undercutlong name = "Undercut Long" + id = "hair_undercut_long" icon_state = "hair_undercutlong" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/unkept name = "Unkept" + id = "hair_upkept" icon_state = "hair_unkept" /datum/sprite_accessory/hair/updo name = "Updo" + id = "hair_updo" icon_state = "hair_updo" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/vegeta name = "Vegeta" + id = "hair_vegeta" icon_state = "hair_toriyama2" /datum/sprite_accessory/hair/volaju name = "Volaju" + id = "hair_volaju" icon_state = "hair_volaju" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/wisp name = "Wisp" + id = "hair_wisp" icon_state = "hair_wisp" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/zieglertail name = "Zieglertail" + id = "hair_ziegler" icon_state = "hair_ziegler" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/glossy name = "Glossy" + id = "hair_glossy" icon_state = "hair_glossy" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/sharpponytail name = "Ponytail Sharp" + id = "hair_ponytail_sharp" icon_state = "hair_sharpponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/newyou - name = "New You" - icon_state = "hair_newyou" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/partedalt name = "Parted Alt" + id = "hair_parted2" icon_state = "hair_partedalt" /datum/sprite_accessory/hair/amazon name = "Amazon" + id = "hair_amazon" icon_state = "hair_amazon" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/straightlong name = "Straight Long" + id = "hair_long_straight" icon_state = "hair_straightlong" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/marysue name = "Mary Sue" + id = "hair_marysue" icon_state = "hair_marysue" /datum/sprite_accessory/hair/sideundercut name = "Side Undercut" + id = "hair_undercut_side" icon_state = "hair_sideundercut" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/donutbun name = "Donut Bun" + id = "hair_bun_donut" icon_state = "hair_donutbun" /datum/sprite_accessory/hair/gentle2 name = "Gentle 2, Long" + id = "hair_gentle2" icon_state = "hair_gentle2long" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/sweepshave name = "Sweep Shave" + id = "hair_sweepshave" icon_state = "hair_sweepshave" /datum/sprite_accessory/hair/beachwave name = "Beach Waves" + id = "hair_beachwave" icon_state = "hair_beachwave" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/celebcurls name = "Celeb Curls" + id = "hair_curls_celeb" icon_state = "hair_celebcurls" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/bigcurls name = "Big Curls" + id = "hair_curls_big" icon_state = "hair_bigcurls" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/jessica name = "Jessica" + id = "hair_jessica" icon_state = "hair_jessica" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/proper name = "Proper" + id = "hair_proper" icon_state = "hair_proper" /datum/sprite_accessory/hair/himeup name = "Hime Updo" + id = "hair_hime_updo" icon_state = "hair_himeup" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/front_braid name = "Braided front" + id = "hair_braid_front" icon_state = "hair_braidfront" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/antenna name = "Antenna" + id = "hair_antenna" icon_state = "hair_antenna" /datum/sprite_accessory/hair/protagonist name = "Slightly Long" + id = "hair_protagonist" icon_state = "hair_protagonist" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/braidtail name = "Braided Tail" + id = "hair_braid_tail" icon_state = "hair_braidtail" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/business name = "Business Hair" + id = "hair_business" icon_state = "hair_business" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/business3 name = "Business Hair 3" + id = "hair_business3" icon_state = "hair_business3" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/business4 name = "Business Hair 4" + id = "hair_business4" icon_state = "hair_business4" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/sidepartlongalt name = "Long Side Part" + id = "hair_sidepart_long" icon_state = "hair_longsidepart" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/miles name = "Miles Hair" + id = "hair_miles" icon_state = "hair_miles" /datum/sprite_accessory/hair/vivi name = "Vivi" + id = "hair_vivi" icon_state = "hair_vivi" /datum/sprite_accessory/hair/taro name = "Taro" + id = "hair_taro" icon_state = "hair_taro" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/astolfo name = "Astolfo" + id = "hair_astolfo" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "hair_astolfo" /datum/sprite_accessory/hair/awoohair name = "Shoulder-length Messy" + id = "hair_messy_shoulder" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "momijihair" -/datum/sprite_accessory/hair/citheronia - name = "Citheronia Hair (Kira72)" - icon = 'icons/mob/human_face_vr.dmi' - icon_state = "citheronia_hair" - ckeys_allowed = list("Kira72") - do_colouration = 0 - -/datum/sprite_accessory/hair/taramaw - name = "Hairmaw (Liquidfirefly)" - icon = 'icons/mob/human_face_vr.dmi' - icon_state = "maw_hair" - ckeys_allowed = list("liquidfirefly") - do_colouration = 0 - /datum/sprite_accessory/hair/citheronia_colorable name = "Citheronia Hair" + id = "hair_citheronia" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "citheronia_hair_c" @@ -954,46 +1126,53 @@ /datum/sprite_accessory/hair/twindrills name = "Twin Drills" + id = "hair_twindrills" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "hair_twincurl" /datum/sprite_accessory/hair/myopia name = "Myopia" + id = "hair_myopia" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "myopia" - flags = HAIR_VERY_SHORT + hair_flags = HAIR_VERY_SHORT /datum/sprite_accessory/hair/shortish name = "Shortish" + id = "hair_shortish" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "bshort-1" /datum/sprite_accessory/hair/shortmess name = "Short Mess" + id = "hair_short_mess" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "bshort-2" /datum/sprite_accessory/hair/peaked name = "Peaked" + id = "hair_peaked" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "bshort-3" /datum/sprite_accessory/hair/blindbangs name = "Blind Bangs" + id = "hair_bangs_blind" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "blindbangs" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE /datum/sprite_accessory/hair/reallyblindbangs name = "Grudge" + id = "hair_grudge" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "grudge" - flags = HAIR_TIEABLE + hair_flags = HAIR_TIEABLE diff --git a/code/modules/sprite_accessories/hair/sergal_hair.dm b/code/modules/sprite_accessories/hair/sergal.dm similarity index 90% rename from code/modules/sprite_accessories/hair/sergal_hair.dm rename to code/modules/sprite_accessories/hair/sergal.dm index 75aba7cb483..c1efc05b4c4 100644 --- a/code/modules/sprite_accessories/hair/sergal_hair.dm +++ b/code/modules/sprite_accessories/hair/sergal.dm @@ -2,6 +2,7 @@ /datum/sprite_accessory/hair/ergal_plain name = "Sergal Plain" + id = "hair_sergal_plain" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_plain" @@ -10,6 +11,7 @@ /datum/sprite_accessory/hair/sergal_medicore name = "Sergal Medicore" + id = "hair_sergal_medicore" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_medicore" @@ -18,6 +20,7 @@ /datum/sprite_accessory/hair/sergal_tapered name = "Sergal Tapered" + id = "hair_sergal_tapered" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_tapered" @@ -26,6 +29,7 @@ /datum/sprite_accessory/hair/sergal_fairytail name = "Sergal Fairytail" + id = "hair_sergal_fairytail" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_fairytail" diff --git a/code/modules/sprite_accessories/hair/shadekin.dm b/code/modules/sprite_accessories/hair/shadekin.dm index 2d21ba5bd17..7b64c9be2cc 100644 --- a/code/modules/sprite_accessories/hair/shadekin.dm +++ b/code/modules/sprite_accessories/hair/shadekin.dm @@ -1,38 +1,31 @@ // Shadekin stuffs /datum/sprite_accessory/hair/shadekin_hair_short - name = "Shadekin Short Hair" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "shadekin_short" - species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) - apply_restrictions = TRUE - gender = NEUTER + name = "Shadekin Short Hair" + id = "hair_shadekin_short" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "shadekin_short" + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + apply_restrictions = TRUE + gender = NEUTER /datum/sprite_accessory/hair/shadekin_hair_poofy - name = "Shadekin Poofy Hair" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "shadekin_poofy" - species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) - apply_restrictions = TRUE - gender = NEUTER + name = "Shadekin Poofy Hair" + id = "hair_shadekin_poofy" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "shadekin_poofy" + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + apply_restrictions = TRUE + gender = NEUTER /datum/sprite_accessory/hair/shadekin_hair_long - name = "Shadekin Long Hair" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "shadekin_long" - species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/shadekin_hair_rivyr - name = "Rivyr Hair" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "shadekin_rivyr" - ckeys_allowed = list("verysoft") - species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) - apply_restrictions = TRUE - gender = NEUTER + name = "Shadekin Long Hair" + id = "hair_shadekin_long" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "shadekin_long" + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + apply_restrictions = TRUE + gender = NEUTER diff --git a/code/modules/sprite_accessories/hair/skrell_hair.dm b/code/modules/sprite_accessories/hair/skrell.dm similarity index 81% rename from code/modules/sprite_accessories/hair/skrell_hair.dm rename to code/modules/sprite_accessories/hair/skrell.dm index ecd2b46f364..42578625bb7 100644 --- a/code/modules/sprite_accessories/hair/skrell_hair.dm +++ b/code/modules/sprite_accessories/hair/skrell.dm @@ -1,19 +1,23 @@ //Skrell stuff /datum/sprite_accessory/hair/skr_tentacle_veryshort name = "Skrell Very Short Tentacles" + id = "hair_skrell_tentacles_veryshort" icon_state = "skrell_hair_veryshort" gender = MALE /datum/sprite_accessory/hair/skr_tentacle_short name = "Skrell Short Tentacles" + id = "hair_skrell_tentacles_short" icon_state = "skrell_hair_short" species_allowed = list(SPECIES_SKRELL, SPECIES_XENOCHIMERA, SPECIES_PROTEAN, SPECIES_CUSTOM, SPECIES_PROMETHEAN) /datum/sprite_accessory/hair/skr_tentacle_average name = "Skrell Average Tentacles" + id = "hair_skrell_tentacles_average" icon_state = "skrell_hair_average" /datum/sprite_accessory/hair/skr_tentacle_verylong name = "Skrell Long Tentacles" + id = "hair_skrell_tentacles_long" icon_state = "skrell_hair_verylong" gender = FEMALE diff --git a/code/modules/sprite_accessories/hair/tajaran_hair.dm b/code/modules/sprite_accessories/hair/tajaran.dm similarity index 91% rename from code/modules/sprite_accessories/hair/tajaran_hair.dm rename to code/modules/sprite_accessories/hair/tajaran.dm index 8108939a439..655670b22c6 100644 --- a/code/modules/sprite_accessories/hair/tajaran_hair.dm +++ b/code/modules/sprite_accessories/hair/tajaran.dm @@ -1,102 +1,119 @@ //Tajaran hairstyles /datum/sprite_accessory/hair/taj_ears name = "Tajaran Ears" + id = "hair_tajaran_ears" icon_state = "ears_plain" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_clean name = "Tajara Clean" + id = "hair_tajaran_clean" icon_state = "hair_clean" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_bangs name = "Tajara Bangs" + id = "hair_tajaran_bangs" icon_state = "hair_bangs" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_braid name = "Tajara Braid" + id = "hair_tajaran_braid" icon_state = "hair_tbraid" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_shaggy name = "Tajara Shaggy" + id = "hair_tajaran_shaggy" icon_state = "hair_shaggy" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_mohawk name = "Tajaran Mohawk" + id = "hair_tajaran_mohawk" icon_state = "hair_mohawk" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_plait name = "Tajara Plait" + id = "hair_tajaran_plait" icon_state = "hair_plait" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_straight name = "Tajara Straight" + id = "hair_tajaran_straight" icon_state = "hair_straight" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_long name = "Tajara Long" + id = "hair_tajaran_long" icon_state = "hair_long" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_rattail name = "Tajara Rat Tail" + id = "hair_tajaran_tail_rat" icon_state = "hair_rattail" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_spiky name = "Tajara Spiky" + id = "hair_tajaran_spiky" icon_state = "hair_tajspiky" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_messy name = "Tajara Messy" + id = "hair_tajaran_messy" icon_state = "hair_messy" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_curls name = "Tajaran Curly" + id = "hair_tajaran_curly" icon_state = "hair_curly" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_wife name = "Tajaran Housewife" + id = "hair_tajaran_wife" icon_state = "hair_wife" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_victory name = "Tajaran Victory Curls" + id = "hair_tajaran_victory" icon_state = "hair_victory" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE /datum/sprite_accessory/hair/taj_ears_bob name = "Tajaran Bob" + id = "hair_tajaran_bob" icon_state = "hair_tbob" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE - + /datum/sprite_accessory/hair/taj_ears_fingercurl name = "Tajaran Finger Curls" + id = "hair_tajaran_fingerwave" icon_state = "hair_fingerwave" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN, SPECIES_CUSTOM) apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/hair/teshari_hair.dm b/code/modules/sprite_accessories/hair/teshari.dm similarity index 88% rename from code/modules/sprite_accessories/hair/teshari_hair.dm rename to code/modules/sprite_accessories/hair/teshari.dm index 84ef031e3b3..cd2aab525d9 100644 --- a/code/modules/sprite_accessories/hair/teshari_hair.dm +++ b/code/modules/sprite_accessories/hair/teshari.dm @@ -1,6 +1,7 @@ //Teshari things /datum/sprite_accessory/hair/teshari name = "Teshari Default" + id = "hair_teshari_default" icon_state = "teshari_default" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -8,6 +9,7 @@ /datum/sprite_accessory/hair/teshari_altdefault name = "Teshari Alt. Default" + id = "hair_teshari_default_alt" icon_state = "teshari_ears" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -15,6 +17,7 @@ /datum/sprite_accessory/hair/teshari_tight name = "Teshari Tight" + id = "hair_teshari_tight" icon_state = "teshari_tight" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -22,6 +25,7 @@ /datum/sprite_accessory/hair/teshari_excited name = "Teshari Spiky" + id = "hair_teshari_spiky" icon_state = "teshari_spiky" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -29,6 +33,7 @@ /datum/sprite_accessory/hair/teshari_spike name = "Teshari Spike" + id = "hair_teshari_spike" icon_state = "teshari_spike" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -36,6 +41,7 @@ /datum/sprite_accessory/hair/teshari_long name = "Teshari Overgrown" + id = "hair_teshari_long" icon_state = "teshari_long" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -43,6 +49,7 @@ /datum/sprite_accessory/hair/teshari_burst name = "Teshari Starburst" + id = "hair_teshari_burst" icon_state = "teshari_burst" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -50,6 +57,7 @@ /datum/sprite_accessory/hair/teshari_shortburst name = "Teshari Short Starburst" + id = "hair_teshari_burst_short" icon_state = "teshari_burst_short" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -57,6 +65,7 @@ /datum/sprite_accessory/hair/teshari_mohawk name = "Teshari Mohawk" + id = "hair_teshari_mohawk" icon_state = "teshari_mohawk" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -64,6 +73,7 @@ /datum/sprite_accessory/hair/teshari_pointy name = "Teshari Pointy" + id = "hair_teshari_pointy" icon_state = "teshari_pointy" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -71,6 +81,7 @@ /datum/sprite_accessory/hair/teshari_upright name = "Teshari Upright" + id = "hair_teshari_upright" icon_state = "teshari_upright" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -78,6 +89,7 @@ /datum/sprite_accessory/hair/teshari_mane name = "Teshari Mane" + id = "hair_teshari_mane" icon_state = "teshari_mane" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -85,6 +97,7 @@ /datum/sprite_accessory/hair/teshari_droopy name = "Teshari Droopy" + id = "hair_teshari_droopy" icon_state = "teshari_droopy" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -92,6 +105,7 @@ /datum/sprite_accessory/hair/teshari_mushroom name = "Teshari Mushroom" + id = "hair_teshari_mushroom" icon_state = "teshari_mushroom" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -99,6 +113,7 @@ /datum/sprite_accessory/hair/teshari_twies name = "Teshari Twies" + id = "hair_teshari_twies" icon_state = "teshari_twies" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -106,6 +121,7 @@ /datum/sprite_accessory/hair/teshari_backstrafe name = "Teshari Backstrafe" + id = "hair_teshari_backstrafe" icon_state = "teshari_backstrafe" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -113,6 +129,7 @@ /datum/sprite_accessory/hair/teshari_longway name = "Teshari Long way" + id = "hair_teshari_longway" icon_state = "teshari_longway" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -120,6 +137,7 @@ /datum/sprite_accessory/hair/teshari_tree name = "Teshari Tree" + id = "hair_teshari_tree" icon_state = "teshari_tree" icon_add = 'icons/mob/human_face_vr_add.dmi' species_allowed = list(SPECIES_TESHARI) @@ -127,6 +145,7 @@ /datum/sprite_accessory/hair/teshari_fluffymohawk name = "Teshari Fluffy Mohawk" + id = "hair_teshari_mohawk_fluffy" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "teshari_fluffymohawk" @@ -135,6 +154,7 @@ /datum/sprite_accessory/hair/teshari_sleek name = "Teshari Sleek" + id = "hair_teshari_sleek" icon_state = "teshari_sleek" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -142,6 +162,7 @@ /datum/sprite_accessory/hair/teshari_thepeel name = "Teshari 'The Peel'" + id = "hair_teshari_peel" icon_state = "teshari_peel" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -149,6 +170,7 @@ /datum/sprite_accessory/hair/teshari_sweptup name = "Teshari Swept Up" + id = "hair_teshari_swept_up" icon_state = "teshari_sweep" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -156,6 +178,7 @@ /datum/sprite_accessory/hair/teshari_aerodynamic name = "Teshari Aerodynamic" + id = "hair_teshari_aerodynamic" icon_state = "teshari_aerodynamic" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -163,6 +186,7 @@ /datum/sprite_accessory/hair/teshari_tallmohawk name = "Teshari Tall Mohawk" + id = "hair_teshari_mohawk_tall" icon_state = "teshari_tallmohawk" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -170,6 +194,7 @@ /datum/sprite_accessory/hair/teshari_cowlick name = "Teshari Cow-lick" + id = "hair_teshari_cowlick" icon_state = "teshari_cowlick" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -177,6 +202,7 @@ /datum/sprite_accessory/hair/teshari_spikyalt name = "Teshari Spiky alt" + id = "hair_teshari_spiky_alt" icon_state = "teshari_spiky2" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -184,6 +210,7 @@ /datum/sprite_accessory/hair/teshari_soap name = "Teshari Soap" + id = "hair_teshari_soap" icon_state = "teshari_soap" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -191,6 +218,7 @@ /datum/sprite_accessory/hair/teshari_crowned name = "Teshari Crowned" + id = "hair_teshari_crowned" icon_state = "teshari_crowned" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -198,6 +226,7 @@ /datum/sprite_accessory/hair/teshari_crest name = "Teshari Crest" + id = "hair_teshari_crest" icon_state = "teshari_crest" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -205,6 +234,7 @@ /datum/sprite_accessory/hair/teshari_ponytail name = "Teshari Feather Ponytail" + id = "hair_teshari_ponytail" icon_state = "teshari_ponytail" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) @@ -212,6 +242,7 @@ /datum/sprite_accessory/hair/teshari_bun name = "Teshari Feather Bun" + id = "hair_teshari_bun" icon_state = "teshari_bun" color_blend_mode = ICON_ADD species_allowed = list(SPECIES_TESHARI) diff --git a/code/modules/sprite_accessories/hair/unathi_hair.dm b/code/modules/sprite_accessories/hair/unathi.dm similarity index 87% rename from code/modules/sprite_accessories/hair/unathi_hair.dm rename to code/modules/sprite_accessories/hair/unathi.dm index 70fb591b396..d54c17ac800 100644 --- a/code/modules/sprite_accessories/hair/unathi_hair.dm +++ b/code/modules/sprite_accessories/hair/unathi.dm @@ -2,18 +2,21 @@ /datum/sprite_accessory/hair/una_hood name = "Cobra Hood" + id = "hair_unathi_hood" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "soghun_hood" /datum/sprite_accessory/hair/una_spines_long name = "Long Unathi Spines" + id = "hair_unathi_spines_long" icon_state = "soghun_longspines" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) //Xenochimera get most hairstyles since they're abominations. apply_restrictions = TRUE /datum/sprite_accessory/hair/una_spines_short name = "Short Unathi Spines" + id = "hair_unathi_spines_short" icon_state = "soghun_shortspines" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE @@ -21,48 +24,56 @@ /datum/sprite_accessory/hair/una_frills_long name = "Long Unathi Frills" + id = "hair_unathi_frills_long" icon_state = "soghun_longfrills" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_frills_short name = "Short Unathi Frills" + id = "hair_unathi_frills_short" icon_state = "soghun_shortfrills" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_horns name = "Unathi Horns" + id = "hair_unathi_horns" icon_state = "soghun_horns" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_bighorns name = "Unathi Big Horns" + id = "hair_unathi_horns_big" icon_state = "unathi_bighorn" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_smallhorns name = "Unathi Small Horns" + id = "hair_unathi_horns_small" icon_state = "unathi_smallhorn" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_ramhorns name = "Unathi Ram Horns" + id = "hair_unathi_horns_ram" icon_state = "unathi_ramhorn" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_sidefrills name = "Unathi Side Frills" + id = "hair_unathi_frills_side" icon_state = "unathi_sidefrills" species_allowed = list(SPECIES_UNATHI, SPECIES_XENOCHIMERA, SPECIES_PROTEAN) apply_restrictions = TRUE /datum/sprite_accessory/hair/una_doublehorns name = "Double Unathi Horns" + id = "hair_unathi_horns_double" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "soghun_dubhorns" diff --git a/code/modules/sprite_accessories/hair/unathidigi_hair.dm b/code/modules/sprite_accessories/hair/unathi_digitigrade.dm similarity index 89% rename from code/modules/sprite_accessories/hair/unathidigi_hair.dm rename to code/modules/sprite_accessories/hair/unathi_digitigrade.dm index 9b090e3129e..515ea5be362 100644 --- a/code/modules/sprite_accessories/hair/unathidigi_hair.dm +++ b/code/modules/sprite_accessories/hair/unathi_digitigrade.dm @@ -2,6 +2,7 @@ /datum/sprite_accessory/hair/una_digi_spines_short name = "Short Digitigrade Unathi Spines" + id = "hair_flatunathi_spines_short" icon_state = "soghun_shortspines_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -10,6 +11,7 @@ /datum/sprite_accessory/hair/una_digi_spines_long name = "Long Digitigrade Unathi Spines" + id = "hair_flatunathi_spines_long" icon_state = "soghun_longspines_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -18,6 +20,7 @@ /datum/sprite_accessory/hair/una_digi_finhawk name = "Digitigrade Unathi Finhawk" + id = "hair_flatunathi_finhawk" icon_state = "fin_hawk_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -26,6 +29,7 @@ /datum/sprite_accessory/hair/una_digi_demonhorns name = "Digitigrade Unathi Demon Horns" + id = "hair_flatunathi_horns_demon" icon_state = "demon_horn_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -34,6 +38,7 @@ /datum/sprite_accessory/hair/una_digi_swepthorns name = "Digitigrade Unathi Swept Horns" + id = "hair_flatunathi_horns_swept" icon_state = "swept_horn_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -42,6 +47,7 @@ /datum/sprite_accessory/hair/una_digi_ramhorns name = "Digitigrade Unathi Ram Horns" + id = "hair_flatunathi_horns_ram" icon_state = "ram_horn_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -50,6 +56,7 @@ /datum/sprite_accessory/hair/una_digi_frills_long name = "Long Digitigrade Unathi Frills" + id = "hair_flatunathi_frills_long" icon_state = "soghun_longfrills_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -58,6 +65,7 @@ /datum/sprite_accessory/hair/una_digi_frills_short name = "Short Digitigrade Unathi Frills" + id = "hair_flatunathi_frills_short" icon_state = "soghun_shortfrills_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -66,6 +74,7 @@ /datum/sprite_accessory/hair/una_digi_horns name = "Digitigrade Unathi Horns" + id = "hair_flatunathi_horns" icon_state = "soghun_horns_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null @@ -74,6 +83,7 @@ /datum/sprite_accessory/hair/una_digi_frills_big name = "Big Digitigrade Unathi Frills" + id = "hair_flatunathi_frills_big" icon_state = "big_frills_digi" icon = 'icons/mob/species/unathidigi/hair.dmi' icon_add = null diff --git a/code/modules/sprite_accessories/hair/vox.dm b/code/modules/sprite_accessories/hair/vox.dm new file mode 100644 index 00000000000..cdfb3e9b402 --- /dev/null +++ b/code/modules/sprite_accessories/hair/vox.dm @@ -0,0 +1,118 @@ +/datum/sprite_accessory/hair/vox_braid_long + name = "Long Vox braid" + id = "hair_vox_braid_long" + icon_state = "vox_longbraid" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_braid_short + name = "Short Vox Braid" + id = "hair_vox_braid_short" + icon_state = "vox_shortbraid" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_short + name = "Short Vox Quills" + id = "hair_vox_quills_short" + icon_state = "vox_shortquills" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_kingly + name = "Kingly Vox Quills" + id = "hair_vox_quills_kingly" + icon_state = "vox_kingly" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_mohawk + name = "Quill Mohawk" + id = "hair_vox_quill_mohawk" + icon_state = "vox_mohawk" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_afro + name = "Vox Afro" + id = "hair_vox_afro" + icon_state = "vox_afro" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_mohawk + name = "Vox Mohawk" + id = "hair_vox_mohawk" + icon_state = "vox_mohawk" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_yasu + name = "Vox Yasuhiro" + id = "hair_vox_yasuhiro" + icon_state = "vox_yasu" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_horns + name = "Vox Quorns" + id = "hair_vox_horns" + icon_state = "vox_horns" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_nights + name = "Vox Nights" + id = "hair_vox_nights" + icon_state = "vox_nights" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_surf + name = "Vox Surf" + id = "hair_vox_surf" + icon_state = "vox_surf" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_cropped + name = "Vox Cropped" + id = "hair_vox_cropped" + icon_state = "vox_cropped" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_bald + name = "Vox Bald" + id = "hair_vox_bald" + icon_state = "vox_bald" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_ruffhawk + name = "Vox Ruffhawk" + id = "hair_vox_ruff_hawk" + icon_state = "vox_ruff_hawk" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_rows + name = "Vox Rows" + id = "hair_vox_rows" + icon_state = "vox_rows" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_mange + name = "Vox Mange" + id = "hair_vox_mange" + icon_state = "vox_mange" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE + +/datum/sprite_accessory/hair/vox_quills_pony + name = "Vox Pony" + id = "hair_vox_pony" + icon_state = "vox_pony" + species_allowed = list(SPECIES_VOX) + apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/hair/vox_hair.dm b/code/modules/sprite_accessories/hair/vox_hair.dm deleted file mode 100644 index d843802fea7..00000000000 --- a/code/modules/sprite_accessories/hair/vox_hair.dm +++ /dev/null @@ -1,101 +0,0 @@ -/datum/sprite_accessory/hair/vox_braid_long - name = "Long Vox braid" - icon_state = "vox_longbraid" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_braid_short - name = "Short Vox Braid" - icon_state = "vox_shortbraid" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_short - name = "Short Vox Quills" - icon_state = "vox_shortquills" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_kingly - name = "Kingly Vox Quills" - icon_state = "vox_kingly" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_mohawk - name = "Quill Mohawk" - icon_state = "vox_mohawk" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_afro - name = "Vox Afro" - icon_state = "vox_afro" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_mohawk - name = "Vox Mohawk" - icon_state = "vox_mohawk" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_yasu - name = "Vox Yasuhiro" - icon_state = "vox_yasu" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_horns - name = "Vox Quorns" - icon_state = "vox_horns" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_nights - name = "Vox Nights" - icon_state = "vox_nights" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_surf - name = "Vox Surf" - icon_state = "vox_surf" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_cropped - name = "Vox Cropped" - icon_state = "vox_cropped" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_bald - name = "Vox Bald" - icon_state = "vox_bald" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_ruffhawk - name = "Vox Ruffhawk" - icon_state = "vox_ruff_hawk" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_rows - name = "Vox Rows" - icon_state = "vox_rows" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_mange - name = "Vox Mange" - icon_state = "vox_mange" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE - -/datum/sprite_accessory/hair/vox_quills_pony - name = "Vox Pony" - icon_state = "vox_pony" - species_allowed = list(SPECIES_VOX) - apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/hair/vulpakin_hair.dm b/code/modules/sprite_accessories/hair/vulpakin_hair.dm deleted file mode 100644 index 1826c06bae6..00000000000 --- a/code/modules/sprite_accessories/hair/vulpakin_hair.dm +++ /dev/null @@ -1,134 +0,0 @@ -// Vulpa stuffs - -/datum/sprite_accessory/hair/vulp_hair_none - name = "None" - icon_state = "bald" - species_allowed = list(SPECIES_VULPKANIN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_kajam - name = "Kajam" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "kajam" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_keid - name = "Keid" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "keid" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_adhara - name = "Adhara" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "adhara" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_kleeia - name = "Kleeia" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "kleeia" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_mizar - name = "Mizar" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "mizar" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_apollo - name = "Apollo" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "apollo" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_belle - name = "Belle" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "belle" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_bun - name = "Bun" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "bun" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_jagged - name = "Jagged" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "jagged" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_curl - name = "Curl" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "curl" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_hawk - name = "Hawk" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "hawk" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_anita - name = "Anita" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "anita" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_short - name = "Short" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "short" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER - -/datum/sprite_accessory/hair/vulp_hair_spike - name = "Spike" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "spike" - species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) - apply_restrictions = TRUE - gender = NEUTER diff --git a/code/modules/sprite_accessories/hair/vulpkanin.dm b/code/modules/sprite_accessories/hair/vulpkanin.dm new file mode 100644 index 00000000000..c08ae2e2648 --- /dev/null +++ b/code/modules/sprite_accessories/hair/vulpkanin.dm @@ -0,0 +1,149 @@ +// Vulpa stuffs + +/datum/sprite_accessory/hair/vulp_hair_none + name = "None" + id = "hair_vulp_none" + icon_state = "bald" + species_allowed = list(SPECIES_VULPKANIN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_kajam + name = "Kajam" + id = "hair_vulp_kajam" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "kajam" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_keid + name = "Keid" + id = "hair_vulp_keid" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "keid" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_adhara + name = "Adhara" + id = "hair_vulp_adhara" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "adhara" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_kleeia + name = "Kleeia" + id = "hair_vulp_kleeia" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "kleeia" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_mizar + name = "Mizar" + id = "hair_vulp_mizar" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "mizar" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_apollo + name = "Apollo" + id = "hair_vulp_apollo" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "apollo" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_belle + name = "Belle" + id = "hair_vulp_belle" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "belle" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_bun + name = "Bun" + id = "hair_vulp_bun" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "bun" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_jagged + name = "Jagged" + id = "hair_vulp_jagged" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "jagged" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_curl + name = "Curl" + id = "hair_vulp_curl" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "curl" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_hawk + name = "Hawk" + id = "hair_vulp_hawk" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "hawk" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_anita + name = "Anita" + id = "hair_vulp_anita" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "anita" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_short + name = "Short" + id = "hair_vulp_short" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "short" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER + +/datum/sprite_accessory/hair/vulp_hair_spike + name = "Spike" + id = "hair_vulp_spike" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "spike" + species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) + apply_restrictions = TRUE + gender = NEUTER diff --git a/code/modules/sprite_accessories/hair/xenomorph.dm b/code/modules/sprite_accessories/hair/xenomorph.dm new file mode 100644 index 00000000000..24eefad71cf --- /dev/null +++ b/code/modules/sprite_accessories/hair/xenomorph.dm @@ -0,0 +1,57 @@ +//xeno stuffs + +/datum/sprite_accessory/hair/xeno_head_drone_color + name = "Drone dome" + id = "hair_xeno_drone" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "cxeno_drone" + species_allowed = list(SPECIES_XENOHYBRID) + gender = NEUTER + +// figure this one out for better coloring + +/datum/sprite_accessory/hair/xeno_head_sentinel_color + name = "Sentinal dome" + id = "hair_xeno_sentinel" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "cxeno_sentinel" + species_allowed = list(SPECIES_XENOHYBRID) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_queen_color + name = "Queen dome" + id = "hair_xeno_queen" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "cxeno_queen" + species_allowed = list(SPECIES_XENOHYBRID) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_hunter_color + name = "Hunter dome" + id = "hair_xeno_hunter" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "cxeno_hunter" + species_allowed = list(SPECIES_XENOHYBRID) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_praetorian_color + name = "Praetorian dome" + id = "hair_xeno_praetorian" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "cxeno_praetorian" + species_allowed = list(SPECIES_XENOHYBRID) + gender = NEUTER + +/datum/sprite_accessory/hair/xeno_head_hybrid_color1 + name = "Xenohybrid dome 1" + id = "hair_xeno_hybrid" + icon = 'icons/mob/human_face_vr.dmi' + icon_add = 'icons/mob/human_face_vr_add.dmi' + icon_state = "cxeno_hybrid1" + species_allowed = list(SPECIES_XENOHYBRID) + gender = NEUTER diff --git a/code/modules/sprite_accessories/hair/xenomorph_hybrid_domes.dm b/code/modules/sprite_accessories/hair/xenomorph_hybrid_domes.dm deleted file mode 100644 index 2fb4ed570ff..00000000000 --- a/code/modules/sprite_accessories/hair/xenomorph_hybrid_domes.dm +++ /dev/null @@ -1,51 +0,0 @@ -//xeno stuffs - -/datum/sprite_accessory/hair/xeno_head_drone_color - name = "Drone dome" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "cxeno_drone" - species_allowed = list(SPECIES_XENOHYBRID) - gender = NEUTER - - // figure this one out for better coloring - -/datum/sprite_accessory/hair/xeno_head_sentinel_color - name = "Sentinal dome" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "cxeno_sentinel" - species_allowed = list(SPECIES_XENOHYBRID) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_queen_color - name = "Queen dome" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "cxeno_queen" - species_allowed = list(SPECIES_XENOHYBRID) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_hunter_color - name = "Hunter dome" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "cxeno_hunter" - species_allowed = list(SPECIES_XENOHYBRID) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_praetorian_color - name = "Praetorian dome" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "cxeno_praetorian" - species_allowed = list(SPECIES_XENOHYBRID) - gender = NEUTER - -/datum/sprite_accessory/hair/xeno_head_hybrid_color1 - name = "Xenohybrid dome 1" - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' - icon_state = "cxeno_hybrid1" - species_allowed = list(SPECIES_XENOHYBRID) - gender = NEUTER diff --git a/code/modules/sprite_accessories/body_markings.dm b/code/modules/sprite_accessories/markings/_markings.dm similarity index 86% rename from code/modules/sprite_accessories/body_markings.dm rename to code/modules/sprite_accessories/markings/_markings.dm index 636d15cf1ad..e76d50bb984 100644 --- a/code/modules/sprite_accessories/body_markings.dm +++ b/code/modules/sprite_accessories/markings/_markings.dm @@ -1,13 +1,5 @@ -/* -//////////////////////////// -/ =--------------------= / -/ == Body Markings == / -/ =--------------------= / -//////////////////////////// -*/ -//Moved here from sprite_accessories.dm in the same folder - /datum/sprite_accessory/marking + abstract_type = /datum/sprite_accessory/marking icon = "icons/mob/sprite_accessories/markings.dmi" do_colouration = 1 //Almost all of them have it, COLOR_ADD color_blend_mode = ICON_ADD @@ -19,43 +11,49 @@ var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD - /datum/sprite_accessory/marking/bands name = "Color Bands" + id = "marking_bands" icon_state = "bands" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/bandsface name = "Color Bands (Face)" + id = "marking_bands_face" icon_state = "bandsface" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/tigerhead name = "Tiger Stripes (Head, Minor)" + id = "marking_tiger_head" icon_state = "tigerhead" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/backstripe name = "Back Stripe" + id = "marking_back" icon_state = "backstripe" body_parts = list(BP_TORSO) -/// Misc +/// Misc /datum/sprite_accessory/marking/abomination name = "Abomination" + id = "marking_abomination" icon_state = "abomination" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/abomination_alt name = "Abomination Alternate" + id = "marking_abomination2" icon_state = "abomination2" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/nevrean_female name = "Female Nevrean beak" + id = "marking_nevrean_f" icon_state = "nevrean_f" body_parts = list(BP_HEAD) color_blend_mode = ICON_MULTIPLY @@ -63,6 +61,7 @@ /datum/sprite_accessory/marking/nevrean_male name = "Male Nevrean beak" + id = "marking_nevrean_m" icon_state = "nevrean_m" body_parts = list(BP_HEAD) color_blend_mode = ICON_MULTIPLY @@ -70,261 +69,306 @@ /datum/sprite_accessory/marking/spots name = "Spots" + id = "marking_spots" icon_state = "spots" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) /datum/sprite_accessory/marking/shaggy_mane name = "Shaggy mane/feathers" + id = "marking_shaggy" icon_state = "shaggy" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/jagged_teeth name = "Jagged teeth" + id = "marking_teeth_jagged" icon_state = "jagged" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/blank_face name = "Blank round face (use with monster mouth)" + id = "marking_face_blank" icon_state = "blankface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/monster_mouth name = "Monster mouth" + id = "marking_mouth_monster" icon_state = "monster" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/saber_teeth name = "Saber teeth" + id = "marking_teeth_saber" icon_state = "saber" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/fangs name = "Fangs" + id = "marking_teeth_fangs" icon_state = "fangs" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/tusks name = "Tusks" + id = "marking_teeth_tusks" icon_state = "tusks" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/otie_face name = "Otie face" + id = "marking_face_otie" icon_state = "otieface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/otie_nose name = "Otie nose" + id = "marking_nose_otie" icon_state = "otie_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/otienose_lite name = "Short otie nose" + id = "marking_nose_otie_short" icon_state = "otienose_lite" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/backstripes name = "Back stripes" + id = "marking_stripes_otie" icon_state = "otiestripes" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/belly_butt name = "Belly and butt" + id = "marking_bellybutt" icon_state = "bellyandbutt" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN,BP_TORSO) /datum/sprite_accessory/marking/fingers_toes name = "Fingers and toes" + id = "marking_fingerstoes" icon_state = "fingerstoes" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) /datum/sprite_accessory/marking/otie_socks name = "Fingerless socks" + id = "marking_socks_otie" icon_state = "otiesocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) /datum/sprite_accessory/marking/corvid_beak name = "Corvid beak" + id = "marking_beak_corvid" icon_state = "corvidbeak" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/corvid_belly name = "Corvid belly" + id = "marking_belly_corvid" icon_state = "corvidbelly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/cow_body name = "Cow markings" + id = "marking_body_cow" icon_state = "cowbody" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/cow_nose name = "Cow nose" + id = "marking_nose_cow" icon_state = "cownose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/zbody name = "Thick jagged stripes" + id = "marking_jaggedstripes" icon_state = "zbody" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO) /datum/sprite_accessory/marking/znose name = "Jagged snout" + id = "marking_nose_jagged" icon_state = "znose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/otter_nose name = "Otter nose" + id = "marking_nose_otter" icon_state = "otternose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/otter_face name = "Otter face" + id = "marking_face_otter" icon_state = "otterface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/deer_face name = "Deer face" + id = "marking_face_deer" icon_state = "deerface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/sharkface name = "Akula snout" + id = "marking_face_akula" icon_state = "sharkface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/sheppy_face name = "Shepherd snout" + id = "marking_face_shepherd" icon_state = "shepface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/sheppy_back name = "Shepherd back" + id = "marking_back_shepherd" icon_state = "shepback" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/harpy_feathers name = "Rapala leg Feather" + id = "marking_leg_rapala" icon_state = "harpy-feathers" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG) /datum/sprite_accessory/marking/harpy_legs name = "Rapala leg coloring" + id = "marking_leg_harpy" icon_state = "harpy-leg" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) /datum/sprite_accessory/marking/chooves name = "Cloven hooves" + id = "marking_hooves_cloven" icon_state = "chooves" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT) /datum/sprite_accessory/marking/alurane name = "Alraune Body" + id = "marking_body_alraune" icon_state = "alurane" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/body_tone name = "Body toning (for emergency contrast loss)" + id = "marking_body_tone" icon_state = "btone" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) /datum/sprite_accessory/marking/gloss name = "Full body gloss" + id = "marking_body_gloss" icon_state = "gloss" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/osocks_rarm name = "Modular Longsock (right arm)" + id = "marking_sock_rarm" icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_ARM,BP_R_HAND) /datum/sprite_accessory/marking/osocks_larm name = "Modular Longsock (left arm)" + id = "marking_sock_larm" icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_ARM,BP_L_HAND) /datum/sprite_accessory/marking/osocks_rleg name = "Modular Longsock (right leg)" + id = "marking_sock_rleg" icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_FOOT,BP_R_LEG) /datum/sprite_accessory/marking/osocks_lleg name = "Modular Longsock (left leg)" + id = "marking_sock_lleg" icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_L_LEG) /datum/sprite_accessory/marking/catwomantorso name = "Catwoman chest stripes" + id = "marking_chest_catwoman" icon_state = "catwomanchest" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/catwomangroin name = "Catwoman groin stripes" + id = "marking_groin_catwoman" icon_state = "catwomangroin" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN) /datum/sprite_accessory/marking/catwoman_rleg name = "Catwoman right leg stripes" + id = "marking_catwoman_rleg" icon_state = "catwomanright" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_LEG) /datum/sprite_accessory/marking/catwoman_lleg name = "Catwoman left leg stripes" + id = "marking_catwoman_lleg" icon_state = "catwomanleft" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG) /datum/sprite_accessory/marking/tentacle_head name = "Squid Head" + id = "marking_head_squid" icon_state = "tentaclehead" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/tentacle_mouth name = "Tentacle Mouth" + id = "marking_mouth_tentacles" icon_state = "tentaclemouth" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/rosette name = "Rosettes" + id = "marking_rosettes" icon_state = "rosette" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/shadekin_snoot name = "Shadekin Snoot" + id = "marking_face_shadekin" icon_state = "shadekin-snoot" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) @@ -333,53 +377,62 @@ /datum/sprite_accessory/marking/talons name = "Talons" + id = "marking_talons" icon_state = "talons" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) /datum/sprite_accessory/marking/claws name = "Claws" + id = "marking_claws" icon_state = "claws" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_HAND,BP_R_HAND) /datum/sprite_accessory/marking/equine_snout //Why the long face? Works best with sergal bodytype. name = "Equine Snout" + id = "marking_face_donkey" icon_state = "donkey" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/equine_nose name = "Equine Nose" + id = "marking_nose_equine" icon_state = "dnose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/short_snoot name = "Short Snout" + id = "marking_snout_short" icon_state = "shortsnoot" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/short_snoot_nose name = "Short Snout Nose" + id = "marking_snout_short_nose" icon_state = "snootnose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/fullhead name = "Full Head Color" + id = "marking_head_full" icon_state = "fullhead" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/jackal_backpattern name = "Jackal Backpattern" + id = "marking_back_jackal" icon_state = "jackal_backpattern" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_ARM,BP_R_ARM,BP_TORSO) /datum/sprite_accessory/marking/jackal_bareback name = "Jackal Bareback" + id = "marking_back_jackal2" icon_state = "jackal_bareback" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_ARM,BP_R_ARM,BP_GROIN,BP_TORSO) diff --git a/code/modules/sprite_accessories/markings/diona_stuff.dm b/code/modules/sprite_accessories/markings/diona_stuff.dm index d178d787b1c..4c498988943 100644 --- a/code/modules/sprite_accessories/markings/diona_stuff.dm +++ b/code/modules/sprite_accessories/markings/diona_stuff.dm @@ -1,42 +1,36 @@ /datum/sprite_accessory/marking/diona + abstract_type = /datum/sprite_accessory/marking/diona icon = "icons/mob/sprite_accessories/markings/diona.dmi" + species_allowed = list(SPECIES_DIONA, SPECIES_ALRAUNE) /datum/sprite_accessory/marking/diona/diona_leaves name = "Diona Leaves" + id = "marking_diona_leaves" icon_state = "diona_leaves" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_TORSO,BP_HEAD) - species_allowed = list(SPECIES_DIONA, SPECIES_ALRAUNE) apply_restrictions = TRUE /datum/sprite_accessory/marking/diona/diona_thorns name = "Diona Thorns" + id = "marking_diona_thorns" icon_state = "diona_thorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_HEAD) - species_allowed = list(SPECIES_DIONA, SPECIES_ALRAUNE) apply_restrictions = TRUE /datum/sprite_accessory/marking/diona/diona_flowers name = "Diona Flowers" + id = "marking_diona_flowers" icon_state = "diona_flowers" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_HEAD) - species_allowed = list(SPECIES_DIONA, SPECIES_ALRAUNE) apply_restrictions = TRUE /datum/sprite_accessory/marking/diona/diona_moss name = "Diona moss" + id = "marking_diona_moss" icon_state = "diona_moss" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) - species_allowed = list(SPECIES_DIONA, SPECIES_ALRAUNE) - apply_restrictions = TRUE - -/datum/sprite_accessory/marking/diona/diona_flowers - name = "Diona Flowers" - icon_state = "diona_flowers" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_TORSO,BP_HEAD) - species_allowed = list(SPECIES_DIONA, SPECIES_ALRAUNE) apply_restrictions = TRUE diff --git a/code/modules/sprite_accessories/markings/eye_stuff.dm b/code/modules/sprite_accessories/markings/eye_stuff.dm index b9979c3d8ba..8de3bf3f4cf 100644 --- a/code/modules/sprite_accessories/markings/eye_stuff.dm +++ b/code/modules/sprite_accessories/markings/eye_stuff.dm @@ -1,60 +1,71 @@ /datum/sprite_accessory/marking/eye_stuff + abstract_type = /datum/sprite_accessory/marking/eye_stuff icon = 'icons/mob/sprite_accessories/markings/eye_stuff.dmi' /datum/sprite_accessory/marking/eye_stuff/monoeye name = "Monoeye" + id = "marking_eye_mono" icon_state = "monoeye" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/spidereyes name = "Spider Eyes" + id = "marking_eye_spider" icon_state = "spidereyes" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/brows name = "Eyebrows" + id = "marking_eye_brow" icon_state = "brows" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/zmask name = "Eye mask" + id = "marking_eye_mask" icon_state = "zmask" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/motheyes name = "Moth Eyes" + id = "marking_eye_moth" icon_state = "motheyes" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/animeeyesinner name = "Anime Eyes Inner" + id = "marking_eye_anime_inner" icon_state = "animeeyesinner" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/animeeyesouter name = "Anime Eyes Outer" + id = "marking_eye_anime_outer" icon_state = "animeeyesouter" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/heterochromia name = "Heterochromia" + id = "marking_eye_color_left" icon_state = "heterochromia" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/heterochromia_r name = "Heterochromia (right eye)" + id = "marking_eye_color_right" icon_state = "heterochromia_r" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/thirdeye name = "Third Eye" + id = "marking_eye_third" icon_state = "thirdeye" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/eye_stuff/closedeye name = "Closed Eyes" + id = "marking_eye_closed" icon_state = "closedeyes" body_parts = list(BP_HEAD) - diff --git a/code/modules/sprite_accessories/markings/panda.dm b/code/modules/sprite_accessories/markings/panda.dm index 4f1bbc98838..0e7331eb29d 100644 --- a/code/modules/sprite_accessories/markings/panda.dm +++ b/code/modules/sprite_accessories/markings/panda.dm @@ -1,14 +1,17 @@ /datum/sprite_accessory/marking/panda - icon = "icons/mob/sprite_accessories/markings/panda.dmi" + abstract_type = /datum/sprite_accessory/marking/panda + icon = "icons/mob/sprite_accessories/markings/panda.dmi" /datum/sprite_accessory/marking/panda/panda_eye_marks name = "Panda Eye Markings" + id = "marking_panda_eyes" icon_state = "eyes_panda" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_HUMAN) /datum/sprite_accessory/marking/panda/panda_full name = "Panda Limbs" + id = "marking_panda_full" icon_state = "panda" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) color_blend_mode = ICON_ADD diff --git a/code/modules/sprite_accessories/markings/sergal.dm b/code/modules/sprite_accessories/markings/sergal.dm index c3fbbc016e1..4ed063cee27 100644 --- a/code/modules/sprite_accessories/markings/sergal.dm +++ b/code/modules/sprite_accessories/markings/sergal.dm @@ -1,8 +1,10 @@ /datum/sprite_accessory/marking/sergal + abstract_type = /datum/sprite_accessory/marking/sergal icon = "icons/mob/sprite_accessories/markings/sergal.dmi" /datum/sprite_accessory/marking/sergal/sergal_full name = "Sergal Markings" + id = "marking_sergal_full_m" icon_state = "sergal_full" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) @@ -11,6 +13,7 @@ /datum/sprite_accessory/marking/sergal/sergal_full_female name = "Sergal Markings (Female)" + id = "marking_sergal_full_f" icon_state = "sergal_full_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) @@ -19,5 +22,6 @@ /datum/sprite_accessory/marking/sergal/sergaleyes name = "Sergal Eyes" + id = "marking_sergal_eyes" icon_state = "eyes_sergal" body_parts = list(BP_HEAD) diff --git a/code/modules/sprite_accessories/markings/synth_stuff.dm b/code/modules/sprite_accessories/markings/synth_stuff.dm index b62a8ae27d1..79fdc73d0af 100644 --- a/code/modules/sprite_accessories/markings/synth_stuff.dm +++ b/code/modules/sprite_accessories/markings/synth_stuff.dm @@ -1,80 +1,94 @@ /datum/sprite_accessory/marking/synth + abstract_type = /datum/sprite_accessory/marking/synth icon = "icons/mob/sprite_accessories/markings/synth_stuff.dmi" /datum/sprite_accessory/marking/synth/spirit_lights name = "Ward - Spirit FBP Lights" + id = "marking_synth_spirit" icon_state = "lights" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/synth/spirit_lights_body name = "Ward - Spirit FBP Lights (body)" + id = "marking_synth_spirit_body" icon_state = "lights" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO) /datum/sprite_accessory/marking/synth/spirit_lights_head name = "Ward - Spirit FBP Lights (head)" + id = "marking_synth_spirit_head" icon_state = "lights" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/synth/spirit_panels name = "Ward - Spirit FBP Panels" + id = "marking_synth_spirit_panel" icon_state = "panels" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) /datum/sprite_accessory/marking/synth/spirit_panels_body name = "Ward - Spirit FBP Panels (body)" + id = "marking_synth_spirit_panel_body" icon_state = "panels" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) /datum/sprite_accessory/marking/synth/spirit_panels_head name = "Ward - Spirit FBP Panels (head)" + id = "marking_synth_spirit_panel_head" icon_state = "panels" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/synth/c_beast_body name = "Cyber Body" + id = "marking_synth_cyber_body" icon_state = "c_beast_body" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/synth/c_beast_plating name = "Cyber Plating (Use with Cyber Body)" + id = "marking_synth_cyber_plating" icon_state = "c_beast_plating" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM) /datum/sprite_accessory/marking/synth/c_beast_band name = "Cyber Band (Use with Cybertech head)" + id = "marking_synth_cyber_band" icon_state = "c_beast_band" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/synth/c_beast_cheek_a name = "Cyber Beast Cheeks A (Use A, B and C)" + id = "marking_synth_cyber_cheek1" icon_state = "c_beast_a" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/synth/c_beast_cheek_b name = "Cyber Beast Cheeks B (Use A, B and C)" + id = "marking_synth_cyber_cheek2" icon_state = "c_beast_b" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/synth/c_beast_cheek_c name = "Cyber Beast Cheeks c (Use A, B and C)" + id = "marking_synth_cyber_cheek3" icon_state = "c_beast_c" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/synth/eboop_panels name = "Eggnerd FBP panels" + id = "marking_synth_eggnerd_panel" icon_state = "eboop" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) diff --git a/code/modules/sprite_accessories/markings/taj.dm b/code/modules/sprite_accessories/markings/taj.dm index 7c66bba1088..177f3f91106 100644 --- a/code/modules/sprite_accessories/markings/taj.dm +++ b/code/modules/sprite_accessories/markings/taj.dm @@ -1,11 +1,10 @@ -///////////////// -/// Taj stuff /// -///////////////// /datum/sprite_accessory/marking/taj + abstract_type = /datum/sprite_accessory/marking/taj icon = "icons/mob/sprite_accessories/markings/taj.dmi" /datum/sprite_accessory/marking/taj/taj_paw_socks name = "Socks Coloration (Taj)" + id = "marking_tajaran_pawsocks" icon_state = "taj_pawsocks" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) species_allowed = list(SPECIES_TAJ) @@ -13,30 +12,35 @@ /datum/sprite_accessory/marking/taj/paw_socks name = "Socks Coloration (Generic)" + id = "marking_pawsocks" icon_state = "pawsocks" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) /datum/sprite_accessory/marking/taj/paw_socks_belly name = "Socks,Belly Coloration (Generic)" + id = "marking_pawsocks_belly" icon_state = "pawsocksbelly" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) /datum/sprite_accessory/marking/taj/belly_hands_feet name = "Hands,Feet,Belly Color (Minor)" + id = "marking_tajaran_bhf_min" icon_state = "bellyhandsfeetsmall" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) /datum/sprite_accessory/marking/taj/hands_feet_belly_full name = "Hands,Feet,Belly Color (Major)" + id = "marking_tajaran_bhf_maj" icon_state = "bellyhandsfeet" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI) /datum/sprite_accessory/marking/taj/hands_feet_belly_full_female name = "Hands,Feet,Belly Color (Major, Female)" + id = "marking_tajaran_bhf_majf" icon_state = "bellyhandsfeet_female" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) species_allowed = list(SPECIES_TAJ) @@ -44,6 +48,7 @@ /datum/sprite_accessory/marking/taj/patches name = "Color Patches" + id = "marking_tajaran_patches" icon_state = "patches" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) species_allowed = list(SPECIES_TAJ) @@ -51,6 +56,7 @@ /datum/sprite_accessory/marking/taj/patchesface name = "Color Patches (Face)" + id = "marking_tajaran_patches_face" icon_state = "patchesface" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -58,6 +64,7 @@ /datum/sprite_accessory/marking/taj/tiger_stripes name = "Tiger Stripes" + id = "marking_tajaran_tiger" icon_state = "tiger" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) species_allowed = list(SPECIES_TAJ) //There's a tattoo for non-cats @@ -65,6 +72,7 @@ //Taj specific stuff /datum/sprite_accessory/marking/taj/taj_belly name = "Belly Fur (Taj)" + id = "marking_tajaran_belly" icon_state = "taj_belly" body_parts = list(BP_TORSO) species_allowed = list(SPECIES_TAJ) @@ -72,6 +80,7 @@ /datum/sprite_accessory/marking/taj/taj_bellyfull name = "Belly Fur Wide (Taj)" + id = "marking_tajaran_belly_wide" icon_state = "taj_bellyfull" body_parts = list(BP_TORSO) species_allowed = list(SPECIES_TAJ) @@ -79,6 +88,7 @@ /datum/sprite_accessory/marking/taj/taj_earsout name = "Outer Ear (Taj)" + id = "marking_tajaran_ears_out" icon_state = "taj_earsout" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -86,6 +96,7 @@ /datum/sprite_accessory/marking/taj/taj_earsin name = "Inner Ear (Taj)" + id = "marking_tajaran_ears_in" icon_state = "taj_earsin" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -93,6 +104,7 @@ /datum/sprite_accessory/marking/taj/taj_nose name = "Nose Color (Taj)" + id = "marking_tajaran_nose" icon_state = "taj_nose" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -100,6 +112,7 @@ /datum/sprite_accessory/marking/taj/taj_crest name = "Chest Fur Crest (Taj)" + id = "marking_tajaran_crest" icon_state = "taj_crest" body_parts = list(BP_TORSO) species_allowed = list(SPECIES_TAJ) @@ -107,6 +120,7 @@ /datum/sprite_accessory/marking/taj/taj_muzzle name = "Muzzle Color (Taj)" + id = "marking_tajaran_muzzle" icon_state = "taj_muzzle" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -114,6 +128,7 @@ /datum/sprite_accessory/marking/taj/taj_face name = "Cheeks Color (Taj)" + id = "marking_tajaran_cheeks" icon_state = "taj_face" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -121,6 +136,7 @@ /datum/sprite_accessory/marking/taj/taj_all name = "All Taj Head (Taj)" + id = "marking_tajaran_head_all" icon_state = "taj_all" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) @@ -128,12 +144,14 @@ /datum/sprite_accessory/marking/taj/taj_nose_alt name = "Nose Color, alt. (Taj)" + id = "marking_tajaran_nose_alt" icon_state = "taj_nosealt" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/taj/tigerface name = "Tiger Stripes (Head, Major)" + id = "marking_tajaran_head_tiger" icon_state = "tigerface" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) //There's a tattoo for non-cats diff --git a/code/modules/sprite_accessories/markings/tanlines.dm b/code/modules/sprite_accessories/markings/tanlines.dm index 6aeb0ab33da..fc0ccd37319 100644 --- a/code/modules/sprite_accessories/markings/tanlines.dm +++ b/code/modules/sprite_accessories/markings/tanlines.dm @@ -1,26 +1,27 @@ - -//////////////// -/// Tanlines /// -//////////////// /datum/sprite_accessory/marking/tanline + abstract_type = /datum/sprite_accessory/marking/tanline icon = "icons/mob/sprite_accessories/markings/tanlines.dmi" /datum/sprite_accessory/marking/tanline/tanlines name = "Tan Lines (One Piece, F)" + id = "marking_tanline_onepiece_f" icon_state = "tan_op" body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/tanline/tanlines_m name = "Tan Lines (One Piece, M)" + id = "marking_tanline_onepiece_m" icon_state = "tan_mop" body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/tanline/tanlines_bikini name = "Tan Lines (Bikini)" + id = "marking_tanline_bikini" icon_state = "tan_bikini" body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/tanline/tanlines_b_strap name = "Tan Lines (Bikini, Strapless)" + id = "marking_tanline_bikini_nostrap" icon_state = "tan_bikini_strap" body_parts = list(BP_TORSO,BP_GROIN) diff --git a/code/modules/sprite_accessories/markings/tattoo.dm b/code/modules/sprite_accessories/markings/tattoo.dm index 78bbed328b1..13043a0614d 100644 --- a/code/modules/sprite_accessories/markings/tattoo.dm +++ b/code/modules/sprite_accessories/markings/tattoo.dm @@ -1,72 +1,84 @@ -////////////// -/// Tatoos /// -////////////// /datum/sprite_accessory/marking/tatoo + abstract_type = /datum/sprite_accessory/marking/tatoo icon = "icons/mob/sprite_accessories/markings/tatoos.dmi" /datum/sprite_accessory/marking/tatoo/tat_rheart name = "Tattoo (Heart, R. Arm)" + id = "marking_tattoo_r_arm_heart" icon_state = "tat_rheart" body_parts = list(BP_R_ARM) /datum/sprite_accessory/marking/tatoo/tat_lheart name = "Tattoo (Heart, L. Arm)" + id = "marking_tattoo_l_arm_heart" icon_state = "tat_lheart" body_parts = list(BP_L_ARM) /datum/sprite_accessory/marking/tatoo/tat_hive name = "Tattoo (Hive, Back)" + id = "marking_tattoo_back_hive" icon_state = "tat_hive" body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/tatoo/tat_nightling name = "Tattoo (Nightling, Back)" + id = "marking_tattoo_back_nightling" icon_state = "tat_nightling" body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/tatoo/tat_campbell name = "Tattoo (Campbell, R.Arm)" + id = "marking_tattoo_r_arm_campbell" icon_state = "tat_campbell" body_parts = list(BP_R_ARM) /datum/sprite_accessory/marking/tatoo/tat_campbell/left name = "Tattoo (Campbell, L.Arm)" + id = "marking_tattoo_l_arm_campbell" body_parts = list(BP_L_ARM) /datum/sprite_accessory/marking/tatoo/tat_campbell/rightleg - name = "Tattoo (Campbell, R.Leg)" - body_parts = list(BP_R_LEG) + name = "Tattoo (Campbell, R.Leg)" + id = "marking_tattoo_r_leg_campbell" + body_parts = list(BP_R_LEG) /datum/sprite_accessory/marking/tatoo/tat_campbell/leftleg - name = "Tattoo (Campbell, L.Leg)" - body_parts = list (BP_L_LEG) + name = "Tattoo (Campbell, L.Leg)" + id = "marking_tattoo_l_leg_campbell" + body_parts = list (BP_L_LEG) /datum/sprite_accessory/marking/tatoo/tat_silverburgh name = "Tattoo (Silverburgh, R.Leg)" + id = "marking_tattoo_r_leg_silverburgh" icon_state = "tat_silverburgh" body_parts = list (BP_R_LEG) /datum/sprite_accessory/marking/tatoo/tat_silverburgh/left - name = "Tattoo (Silverburgh, L.Leg)" - icon_state = "tat_silverburgh" - body_parts = list (BP_L_LEG) + name = "Tattoo (Silverburgh, L.Leg)" + id = "marking_tattoo_l_leg_silverburgh" + icon_state = "tat_silverburgh" + body_parts = list (BP_L_LEG) /datum/sprite_accessory/marking/tatoo/tat_tiger name = "Tattoo (Tiger Stripes, Body)" + id = "marking_tattoo_body_tiger" icon_state = "tat_tiger" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/tatoo/tat_inmon1 name = "Tattoo (Inmon, Variant 1)" + id = "marking_tattoo_groin_inmon" icon_state = "tat_inmon1" body_parts = list(BP_GROIN) /datum/sprite_accessory/marking/tatoo/tat_inmon2 name = "Tattoo (Inmon, Variant 2)" + id = "marking_tattoo_groin_inmon2" icon_state = "tat_inmon2" body_parts = list(BP_GROIN) /datum/sprite_accessory/marking/tatoo/tat_inmon3 name = "Tattoo (Inmon, Variant 3)" + id = "marking_tattoo_groin_inmon3" icon_state = "tat_inmon3" body_parts = list(BP_GROIN) diff --git a/code/modules/sprite_accessories/markings/tesh.dm b/code/modules/sprite_accessories/markings/tesh.dm index bc7cf76cd76..7251e584023 100644 --- a/code/modules/sprite_accessories/markings/tesh.dm +++ b/code/modules/sprite_accessories/markings/tesh.dm @@ -1,46 +1,53 @@ -/// Teshari Markings. /datum/sprite_accessory/marking/tesh + abstract_type = /datum/sprite_accessory/marking/tesh icon = 'icons/mob/sprite_accessories/markings/tesh_stuff.dmi' species_allowed = list(SPECIES_TESHARI) apply_restrictions = TRUE /datum/sprite_accessory/marking/tesh/teshi_heterochromia name = "Teshari Heterochromia" + id = "marking_teshari_heterochromia" icon_state = "teshi_heterochromia" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/tesh/tesh_feathers name = "Teshari Feathers" + id = "marking_teshari_feathers" icon_state = "teshi_feathers" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT, BP_R_FOOT, BP_L_HAND, BP_R_HAND) /datum/sprite_accessory/marking/tesh/teshi_fluff name = "Teshari underfluff" + id = "marking_teshari_fluff" icon_state = "teshi_fluff" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO, BP_HEAD) /datum/sprite_accessory/marking/tesh/teshi_small_feathers name = "Teshari small wingfeathers" + id = "marking_teshari_wingfeathers_small" icon_state = "teshi_sf" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT, BP_R_FOOT, BP_L_HAND, BP_R_HAND, BP_TORSO) /datum/sprite_accessory/marking/tesh/teshari_coat name = "Teshari coat" + id = "marking_teshari_coat" icon_state = "teshi_coat" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_TORSO, BP_HEAD) /datum/sprite_accessory/marking/tesh/teshari_pattern_male name = "Teshari male pattern" + id = "marking_teshari_pattern_m" icon_state = "teshi_pattern_male" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_TORSO, BP_GROIN, BP_HEAD) /datum/sprite_accessory/marking/tesh/teshari_pattern_female name = "Teshari female pattern" + id = "marking_teshari_pattern_f" icon_state = "teshi_pattern_fem" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_HAND, BP_R_HAND, BP_TORSO, BP_GROIN, BP_HEAD) diff --git a/code/modules/sprite_accessories/markings/unathi.dm b/code/modules/sprite_accessories/markings/unathi.dm index 8083137e480..e8d4f9ceb80 100644 --- a/code/modules/sprite_accessories/markings/unathi.dm +++ b/code/modules/sprite_accessories/markings/unathi.dm @@ -1,75 +1,87 @@ -//Una specific stuff /datum/sprite_accessory/marking/unathi + abstract_type = /datum/sprite_accessory/marking/unathi icon = "icons/mob/sprite_accessories/markings/unathi_stuff.dmi" /datum/sprite_accessory/marking/unathi/una_paw_socks name = "Socks Coloration (Una)" + id = "marking_unathi_socks" icon_state = "una_pawsocks" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/marking/unathi/una_face name = "Face Color (Una)" + id = "marking_unathi_face" icon_state = "una_face" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/marking/unathi/una_facelow name = "Face Color Low (Una)" + id = "marking_unathi_face_low" icon_state = "una_facelow" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/marking/unathi/una_scutes name = "Scutes (Una)" + id = "marking_unathi_scutes" icon_state = "una_scutes" body_parts = list(BP_TORSO) species_allowed = list(SPECIES_UNATHI) /datum/sprite_accessory/marking/unathi/unathihood name = "Cobra Hood" + id = "marking_unathi_hood" icon_state = "unathihood" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathidoublehorns name = "Double Unathi Horns" + id = "marking_unathi_horns_double" icon_state = "unathidoublehorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathihorns name = "Unathi Horns" + id = "marking_unathi_horns" icon_state = "unathihorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathiramhorns name = "Unathi Ram Horns" + id = "marking_unathi_horns_ram" icon_state = "unathiramhorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathishortspines name = "Unathi Short Spines" + id = "marking_unathi_spines_short" icon_state = "unathishortspines" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathilongspines name = "Unathi Long Spines" + id = "marking_unathi_spines_lnog" icon_state = "unathilongspines" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathishortfrills name = "Unathi Short Frills" + id = "marking_unathi_frills_short" icon_state = "unathishortfrills" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/unathilongfrills name = "Unathi Long Frills" + id = "marking_unathi_frills_long" icon_state = "unathilongfrills" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) diff --git a/code/modules/sprite_accessories/markings/vox.dm b/code/modules/sprite_accessories/markings/vox.dm index aebd64a9023..0d432e4b7cd 100644 --- a/code/modules/sprite_accessories/markings/vox.dm +++ b/code/modules/sprite_accessories/markings/vox.dm @@ -1,19 +1,21 @@ ///////////// //Vox stuff// ///////////// - /datum/sprite_accessory/marking/vox + abstract_type = /datum/sprite_accessory/marking/vox icon = "icons/mob/sprite_accessories/markings/vox_stuff.dmi" /datum/sprite_accessory/marking/vox/vox_coloration name = "Vox Two Tone" - icon_state = "vox_two_tone" + id = "marking_vox_2tone" + icon_state = "vox_dual" body_parts = list(BP_HEAD,BP_L_HAND,BP_R_HAND,BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM) species_allowed = list(SPECIES_VOX) apply_restrictions = TRUE /datum/sprite_accessory/marking/vox/vox_alt name = "Vox Alternate" + id = "marking_vox_alt" icon_state = "bay_vox" body_parts = list (BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD) species_allowed = list(SPECIES_VOX) @@ -21,6 +23,7 @@ /datum/sprite_accessory/marking/vox/vox_alt_eyes name = "Alternate Vox Eyes" + id = "marking_vox_alt_eyes" icon_state = "bay_vox_eyes" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_VOX) @@ -28,6 +31,7 @@ /datum/sprite_accessory/marking/vox/voxscales name = "Vox Scales" + id = "marking_vox_scales" icon_state = "Voxscales" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_HEAD) @@ -35,11 +39,13 @@ /datum/sprite_accessory/marking/vox/voxclaws name = "Vox Claws" icon_state = "Voxclaws" + id = "marking_vox_claws" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) /datum/sprite_accessory/marking/vox/voxbeak name = "Vox Beak" + id = "marking_vox_beak" icon_state = "Voxscales" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) diff --git a/code/modules/sprite_accessories/markings/vulp.dm b/code/modules/sprite_accessories/markings/vulpkanin.dm similarity index 84% rename from code/modules/sprite_accessories/markings/vulp.dm rename to code/modules/sprite_accessories/markings/vulpkanin.dm index 7cee6b860fc..822f59f4e9a 100644 --- a/code/modules/sprite_accessories/markings/vulp.dm +++ b/code/modules/sprite_accessories/markings/vulpkanin.dm @@ -1,61 +1,72 @@ /datum/sprite_accessory/marking/vulp + abstract_type = /datum/sprite_accessory/marking/vulp icon = "icons/mob/sprite_accessories/markings/vulp.dmi" /datum/sprite_accessory/marking/vulp/vulp_belly name = "belly fur (Vulp)" + id = "marking_vulp_belly" icon_state = "vulp_belly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/vulp/vulp_fullbelly name = "full belly fur (Vulp)" + id = "marking_vulp_fullbelly" icon_state = "vulp_fullbelly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/vulp/vulp_crest name = "belly crest (Vulp)" + id = "marking_vulp_crest" icon_state = "vulp_crest" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/vulp/vulp_nose name = "nose (Vulp)" + id = "marking_vulp_nose" icon_state = "vulp_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/vulp/vulp_short_nose name = "nose, short (Vulp)" + id = "marking_vulp_nose_short" icon_state = "vulp_short_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/vulp/snoutstripe name = "snout stripe (Vulp)" + id = "marking_vulp_snoutstripe" icon_state = "snoutstripe" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/vulp/vulp_face name = "face (Vulp)" + id = "marking_vulp_face" icon_state = "vulp_face" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/vulp/vulp_facealt name = "face, alt. (Vulp)" + id = "marking_vulp_facealt" icon_state = "vulp_facealt" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/vulp/vulp_earsface name = "ears and face (Vulp)" + id = "marking_vulp_earsface" icon_state = "vulp_earsface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/vulp/vulp_all + id = "marking_vulp_all" name = "all head highlights (Vulp)" icon_state = "vulp_all" color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/markings/werebeast.dm b/code/modules/sprite_accessories/markings/werebeast.dm index 47e3acdb78d..ff3ddbe893b 100644 --- a/code/modules/sprite_accessories/markings/werebeast.dm +++ b/code/modules/sprite_accessories/markings/werebeast.dm @@ -1,4 +1,5 @@ -/datum/sprite_accessory/markering/werebeast +/datum/sprite_accessory/marking/werebeast + abstract_type = /datum/sprite_accessory/marking/werebeast icon = 'icons/mob/clothing/species/werebeast/werebeast_markings.dmi' color_blend_mode = ICON_MULTIPLY species_allowed = list(SPECIES_WEREBEAST) @@ -6,20 +7,24 @@ /datum/sprite_accessory/marking/werebeast/werewolf_nose name = "Werewolf nose" + id = "marking_werebeast_nose" icon_state = "werewolf_nose" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/werebeast/werewolf_face name = "Werewolf face" + id = "marking_werebeast_face" icon_state = "werewolf" body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/werebeast/werewolf_belly name = "Werewolf belly" + id = "marking_werebeast_belly" icon_state = "werewolf" body_parts = list(BP_GROIN,BP_TORSO) /datum/sprite_accessory/marking/werebeast/werewolf_socks name = "Werewolf socks" + id = "marking_werebeast_socks" icon_state = "werewolf" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) diff --git a/code/modules/sprite_accessories/markings/zorren.dm b/code/modules/sprite_accessories/markings/zorren.dm index aaba9d3c26b..bd11fdaafe7 100644 --- a/code/modules/sprite_accessories/markings/zorren.dm +++ b/code/modules/sprite_accessories/markings/zorren.dm @@ -1,26 +1,31 @@ /datum/sprite_accessory/marking/zorren - icon = "icons/mob/sprite_accessories/markings/zorren.dmi" + abstract_type = /datum/sprite_accessory/marking/zorren + icon = "icons/mob/sprite_accessories/markings/zorren.dmi" /datum/sprite_accessory/marking/zorren/zorren_belly_male name = "Zorren Male Torso" + id = "marking_zorren_belly_m" icon_state = "zorren_belly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/zorren/zorren_belly_female name = "Zorren Female Torso" + id = "marking_zorren_belly_f" icon_state = "zorren_belly_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/zorren/zorren_back_patch name = "Zorren Back Patch" + id = "marking_zorren_backpatch" icon_state = "zorren_backpatch" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/zorren/zorren_face_male name = "Zorren Male Face" + id = "marking_zorren_face_m" icon_state = "zorren_face" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) @@ -28,6 +33,7 @@ /datum/sprite_accessory/marking/zorren/zorren_face_female name = "Zorren Female Face" + id = "marking_zorren_face_f" icon_state = "zorren_face_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) @@ -35,6 +41,7 @@ /datum/sprite_accessory/marking/zorren/zorren_muzzle_male name = "Zorren Male Muzzle" + id = "marking_zorren_muzzle_m" icon_state = "zorren_muzzle" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) @@ -42,6 +49,7 @@ /datum/sprite_accessory/marking/zorren/zorren_muzzle_female name = "Zorren Female Muzzle" + id = "marking_zorren_muzzle_f" icon_state = "zorren_muzzle_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) @@ -49,12 +57,14 @@ /datum/sprite_accessory/marking/zorren/zorren_socks name = "Zorren Socks" + id = "marking_zorren_socks" icon_state = "zorren_socks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) /datum/sprite_accessory/marking/zorren/zorren_longsocks name = "Zorren Longsocks" + id = "marking_zorren_socks_long" icon_state = "zorren_longsocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) diff --git a/code/modules/sprite_accessories/sprite_accessories.dm b/code/modules/sprite_accessories/sprite_accessories.dm index 0e959550dc3..0f8d364025d 100644 --- a/code/modules/sprite_accessories/sprite_accessories.dm +++ b/code/modules/sprite_accessories/sprite_accessories.dm @@ -46,38 +46,14 @@ /// use front/behind, citadel snowflake for now; only usable on wings/tails var/front_behind_system = FALSE -//skin styles - WIP -//going to have to re-integrate this with surgery -//let the icon_state hold an icon preview for now -/datum/sprite_accessory/skin - icon = 'icons/mob/species/human/body.dmi' - -/datum/sprite_accessory/skin/human - name = "Default human skin" - icon_state = "default" - species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN) - -/datum/sprite_accessory/skin/human_tatt01 - name = "Tatt01 human skin" - icon_state = "tatt1" - icon = 'icons/mob/species/human/tatt1.dmi' - species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN) - -/datum/sprite_accessory/skin/tajaran - name = "Default tajaran skin" - icon_state = "default" - icon = 'icons/mob/species/tajaran/body.dmi' - species_allowed = list(SPECIES_TAJ) - apply_restrictions = TRUE - -/datum/sprite_accessory/skin/unathi - name = "Default Unathi skin" - icon_state = "default" - icon = 'icons/mob/species/unathi/body.dmi' - species_allowed = list(SPECIES_UNATHI) - -/datum/sprite_accessory/skin/skrell - name = "Default skrell skin" - icon_state = "default" - icon = 'icons/mob/species/skrell/body.dmi' - species_allowed = list(SPECIES_SKRELL) + // Ckey of person allowed to use this, if defined. + var/list/ckeys_allowed = null + var/apply_restrictions = FALSE //whether to apply restrictions for specific tails/ears/wings + var/center = FALSE + var/dimension_x = 32 + var/dimension_y = 32 + /// id + var/id + // these two are moved up for now + var/extra_overlay // Icon state of an additional overlay to blend in. + var/extra_overlay2 diff --git a/code/modules/sprite_accessories/tail/_tail.dm b/code/modules/sprite_accessories/tail/_tail.dm new file mode 100644 index 00000000000..e78a779f79f --- /dev/null +++ b/code/modules/sprite_accessories/tail/_tail.dm @@ -0,0 +1,52 @@ +/datum/sprite_accessory/tail + abstract_type = /datum/sprite_accessory/tail + name = "You should not see this..." + icon = 'icons/mob/sprite_accessories/tails.dmi' + do_colouration = 0 //Set to 1 to enable coloration using the tail color. + + color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + var/show_species_tail = 0 // If false, do not render species' tail. + var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it + var/desc = "You should not see this..." + var/ani_state // State when wagging/animated + var/extra_overlay_w // Wagging state for extra overlay + var/extra_overlay2_w // Tertiary wagging. + var/list/hide_body_parts = list() //Uses organ tag defines. Bodyparts in this list do not have their icons rendered, allowing for more spriter freedom when doing taur/digitigrade stuff. + var/icon/clip_mask_icon = null //Icon file used for clip mask. + var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits. + var/icon/clip_mask = null //Instantiated clip mask of given icon and state + +/datum/sprite_accessory/tail/New() + . = ..() + if(clip_mask_icon && clip_mask_state) + clip_mask = icon(icon = clip_mask_icon, icon_state = clip_mask_state) + +//For all species tails. Includes haircolored tails. +/datum/sprite_accessory/tail/special + abstract_type = /datum/sprite_accessory/tail/special + icon = 'icons/effects/species_tails_vr.dmi' + +// todo: sort ears by something that makes sense +// todo: tgui choice menu should be modular +// todo: and include way to do categories +//! right now the categories are way too sparse, we'll combine them later. + +//? AND YES, I AM SHITPOSTING WITH THE CATEGORY .DM NAMES +//? Deal with it, I'll deal with this in the emissives PR +//? Seriously I'm not categorizing our 500 kinds of wings. + +//? If anyone wants to sort it, obviously, PLEASE, be my guest, but I just don't have the energy to do the stuff I did +//? in /ears. It just isn't working out for me, sorry. + +//? Potential nomenclatures: +//? - by animal (real or fakefurrysona) type +//? - "Animal", "Species", "Robotic", "Misc" +//? etc + +//? PLEASE HELP WITH THIS. + +/datum/sprite_accessory/tail/invisible + name = "Invisible (hide species-sprite tail)" + id = "tail_abstract" + icon = null + icon_state = null diff --git a/code/modules/sprite_accessories/tail/bearlike.dm b/code/modules/sprite_accessories/tail/bearlike.dm new file mode 100644 index 00000000000..b5e6c112339 --- /dev/null +++ b/code/modules/sprite_accessories/tail/bearlike.dm @@ -0,0 +1,11 @@ +/datum/sprite_accessory/tail/bear + name = "bear, colorable" + id = "tail_bear" + icon_state = "bear" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/bear_brown + name = "bear, brown" + id = "tail_bear_brown" + icon_state = "bear-brown" diff --git a/code/modules/sprite_accessories/tail/bird.dm b/code/modules/sprite_accessories/tail/bird.dm new file mode 100644 index 00000000000..2e3140a8a97 --- /dev/null +++ b/code/modules/sprite_accessories/tail/bird.dm @@ -0,0 +1,6 @@ +/datum/sprite_accessory/tail/fantail + name = "avian fantail, colorable" + id = "tail_avian_fantail" + icon_state = "fantail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/bovine.dm b/code/modules/sprite_accessories/tail/bovine.dm new file mode 100644 index 00000000000..e0100391433 --- /dev/null +++ b/code/modules/sprite_accessories/tail/bovine.dm @@ -0,0 +1,16 @@ +/datum/sprite_accessory/tail/cow + name = "cow tail, colorable" + id = "tail_cow" + icon_state = "cow" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/satyr + name = "goat legs, colorable" + id = "tail_satyr_legs" + icon_state = "satyr" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case. + clip_mask_icon = 'icons/mob/sprite_accessories/taurs.dmi' + clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms. diff --git a/code/modules/sprite_accessories/tail/bunny.dm b/code/modules/sprite_accessories/tail/bunny.dm new file mode 100644 index 00000000000..a1500b2c3eb --- /dev/null +++ b/code/modules/sprite_accessories/tail/bunny.dm @@ -0,0 +1,5 @@ +/datum/sprite_accessory/tail/bunny + id = "tail_bunny" + name = "bunny, colorable" + icon_state = "bunny" + do_colouration = 1 diff --git a/code/modules/sprite_accessories/tail/canid.dm b/code/modules/sprite_accessories/tail/canid.dm new file mode 100644 index 00000000000..9dbd92f5fb5 --- /dev/null +++ b/code/modules/sprite_accessories/tail/canid.dm @@ -0,0 +1,117 @@ +/datum/sprite_accessory/tail/wolf_grey + name = "wolf, grey" + id = "tail_wolf_grey" + icon_state = "wolf-grey" + +/datum/sprite_accessory/tail/wolf_green + name = "wolf, green" + id = "tail_wolf_green" + icon_state = "wolf-green" + +/datum/sprite_accessory/tail/wisewolf + name = "wolf, wise" + id = "tail_wolf_wise" + icon_state = "wolf-wise" + +/datum/sprite_accessory/tail/wolf + name = "wolf, colorable" + id = "tail_wolf" + icon_state = "wolf" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "wolfinner" + +/datum/sprite_accessory/tail/blackwolf + name = "wolf, black" + id = "tail_wolf_black" + icon_state = "wolf" + +/datum/sprite_accessory/tail/crossfox + name = "cross fox" + id = "tail_fox_cross" + icon_state = "crossfox" + +/datum/sprite_accessory/tail/doublekitsune + name = "double kitsune tail, colorable" + id = "tail_kitsune_dual" + icon_state = "doublekitsune" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/fennec_tail + name = "Fennec tail" + id = "tail_fox_fennec" + icon_state = "fennec_tail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/fox_tail + name = "Fox tail" + id = "tail_fox" + icon_state = "fox_tail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/fox_tail_plain + name = "Fox tail 2" + id = "tail_fox2" + icon_state = "fox_tail_plain_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/foxtail + name = "Fox" + id = "tail_fox3" + desc = "" //leaving this just in case i break something if i just don't include a blank description because this codebase is akin to a house of cards + icon_state = "foxtail_but_good" + extra_overlay = "foxtail_but_good-tips" + do_colouration = TRUE + color_blend_mode = ICON_MULTIPLY + ani_state = "foxtail_but_good_w" + extra_overlay_w = "foxtail_but_good-tips_w" + +/datum/sprite_accessory/tail/jackal_bicolor + name = "jackal, dual-colorable" + id = "tail_jackal" + icon_state = "jackal_bicolor" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "jackal_bicolor_extra" + +/datum/sprite_accessory/tail/otietail + name = "otie tail (vwag)" + id = "tail_otie" + icon_state = "otie" + ani_state = "otie_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/takahiro_kitsune + name = "Takahiro Kitsune Tails" //takahiro had five tails i just wanted to follow the 'T' naming convention vs. tamamo and triple + id = "tail_kitsune_penta" + icon_state = "takahiro-kitsunetails" + extra_overlay = "takahiro-kitsunetails-tips" + do_colouration = TRUE + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/tamamo_kitsune + name = "Tamamo Kitsune Tails" //Tamamo-no-Tiro, let it be known! + id = "tail_kitsune_nine" + icon_state = "tamamo-kitsunetails" + extra_overlay = "tamamo-kitsunetails-tips" + do_colouration = TRUE + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/triple_kitsune + name = "Triple Kitsune Tails" + id = "tail_kitsune_triple" + icon_state = "triple-kitsunetails" + extra_overlay = "triple-kitsunetails-tips" + do_colouration = TRUE + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/ketrai_wag + name = "fennix tail (vwag)" + id = "tail_fennix" + icon_state = "ketraitail" + ani_state = "ketraitail_w" diff --git a/code/modules/sprite_accessories/tail/equine.dm b/code/modules/sprite_accessories/tail/equine.dm new file mode 100644 index 00000000000..870c47d7b90 --- /dev/null +++ b/code/modules/sprite_accessories/tail/equine.dm @@ -0,0 +1,6 @@ +/datum/sprite_accessory/tail/horse + name = "horse tail, colorable" + id = "tail_horse" + icon_state = "horse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/feline.dm b/code/modules/sprite_accessories/tail/feline.dm new file mode 100644 index 00000000000..6a16befc9e8 --- /dev/null +++ b/code/modules/sprite_accessories/tail/feline.dm @@ -0,0 +1,70 @@ +/datum/sprite_accessory/tail/tiger_new + name = "tiger tail (vwag)" + id = "tail_tiger2" + icon_state = "tigertail" + ani_state = "tigertail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tigertail_mark" + extra_overlay_w = "tigertail_mark_w" + +/datum/sprite_accessory/tail/tiger_white + name = "tiger, colorable" + id = "tail_tiger" + icon_state = "tiger" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tigerinnerwhite" + +/datum/sprite_accessory/tail/cat_big + name = "kitty (big), colorable" + id = "tail_cat_big" + icon_state = "catbig" + ani_state = "catbig_wag" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + front_behind_system = TRUE + +/datum/sprite_accessory/tail/kitty + name = "kitty, colorable, downwards" + id = "tail_cat_down" + icon_state = "kittydown" + ani_state = "kittydown_wag" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/kitty_tg + name = "kitty, colorable, main" + id = "tail_cat_tg" + icon_state = "kittytg" + ani_state = "kittytg_wag" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/kittyup + name = "kitty, colorable, upwards" + id = "tail_cat_up" + icon_state = "kittyup" + ani_state = "kittyup_wag" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/liontail + name = "Lion Tail (vwag)" + id = "tail_lion" + icon_state = "liontail" + ani_state = "liontail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "liontail_markings" + extra_overlay_w = "liontail_markings_w" + +/datum/sprite_accessory/tail/sneptail + name = "Snep/Furry Tail (vwag)" + id = "tail_snowleopard" + icon_state = "sneptail" + ani_state = "sneptail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "sneptail_mark" + extra_overlay_w = "sneptail_mark_w" diff --git a/code/modules/sprite_accessories/tail/insects.dm b/code/modules/sprite_accessories/tail/insects.dm new file mode 100644 index 00000000000..1d395816c1c --- /dev/null +++ b/code/modules/sprite_accessories/tail/insects.dm @@ -0,0 +1,256 @@ +/datum/sprite_accessory/tail/beethorax + name = "bee thorax" + id = "tail_bee_thorax" + icon_state = "beethorax" + +/datum/sprite_accessory/tail/buggo + name = "Bug abdomen, colorable" + id = "tail_bug_abdomen" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggowag + name = "Bug abdomen, colorable, vwag change" + id = "tail_bug_abdomen2" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggo_bee + name = "Bug abdomen, bee top, dual-colorable" + id = "tail_bug_abdomen_bee" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_markings" + +/datum/sprite_accessory/tail/buggo_beefull + name = "Bug abdomen, bee full, dual-colorable" + id = "tail_bug_abdomen_bee2" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_markings" + +/datum/sprite_accessory/tail/buggo_beefullwag + name = "Bug abdomen, bee full, dual color, vwag" + id = "tail_bug_abdomen_bee3" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_markings" + extra_overlay_w = "buggofatbeefull_markings" + +/datum/sprite_accessory/tail/buggo_beewag + name = "Bug abdomen, bee top, dual color, vwag" + id = "tail_bug_abdomen_bee4" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_markings" + extra_overlay_w = "buggofatbee_markings" + +/datum/sprite_accessory/tail/buggo_firefly + name = "Bug abdomen, firefly, dual-colorable" + id = "tail_bug_abdomen_firefly" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_markings" + +/datum/sprite_accessory/tail/buggo_fireflywag + name = "Bug abdomen, firefly, dual color, vwag" + id = "tail_bug_abdomen_firefly2" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_markings" + extra_overlay_w = "buggofatfirefly_markings" + +/datum/sprite_accessory/tail/buggo_under + name = "Bug abdomen, underside, dual-colorable" + id = "tail_bug_abdomen_under" + icon_state = "buggo_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_markings" + +/datum/sprite_accessory/tail/buggo_underwag + name = "Bug abdomen, underside, dual color, vwag" + id = "tail_bug_abdomen_under2" + icon_state = "buggo_s" + ani_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_markings" + extra_overlay_w = "buggofatunder_markings" + +/datum/sprite_accessory/tail/buggofat + name = "Fat bug abdomen, colorable" + id = "tail_bug_abdomen_fat" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggofat_bee + name = "Fat bug abdomen, bee top, dual-colorable" + id = "tail_bug_abdomen_fat_bee" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbee_markings" + +/datum/sprite_accessory/tail/buggofat_beefull + name = "Fat bug abdomen, bee full, dual-colorable" + id = "tail_bug_abdomen_fat_bee2" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbeefull_markings" + +/datum/sprite_accessory/tail/buggofat_firefly + name = "Fat bug abdomen, firefly, dual-colorable" + id = "tail_bug_abdomen_fat_firefly" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatfirefly_markings" + +/datum/sprite_accessory/tail/buggofat_under + name = "Fat bug abdomen, underside, dual-colorable" + id = "tail_bug_abdomen_fat_under" + icon_state = "buggofat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatunder_markings" + +/datum/sprite_accessory/tail/buggovass + name = "Bug abdomen, vass, colorable" + id = "tail_bug_vass" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggovass_wag + name = "Bug abdomen, vass, colorable, vwag change" + id = "tail_bug_vass2" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggovass_bee + name = "Bug abdomen, bee top, dc, vass" + id = "tail_bug_vass_bee" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_vass_markings" + +/datum/sprite_accessory/tail/buggovass_beewag + name = "Bug abdomen, bee top, dc, vass, vwag" + id = "tail_bug_vass_bee2" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobee_vass_markings" + extra_overlay_w = "buggofatbee_vass_markings" + +/datum/sprite_accessory/tail/buggovass_beefull + name = "Bug abdomen, bee full, dc, vass" + id = "tail_bug_vass_bee3" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_vass_markings" + +/datum/sprite_accessory/tail/buggovass_beefullwag + name = "Bug abdomen, bee full, dc, vass, vwag" + id = "tail_bug_vass_bee4" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggobeefull_vass_markings" + extra_overlay_w = "buggofatbeefull_vass_markings" + +/datum/sprite_accessory/tail/buggovass_firefly + name = "Bug abdomen, firefly, dc, vass" + id = "tail_bug_vass_firefly" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_vass_markings" + +/datum/sprite_accessory/tail/buggovass_fireflywag + name = "Bug abdomen, firefly, dc, vass, vwag" + id = "tail_bug_vass_firefly2" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofirefly_vass_markings" + extra_overlay_w = "buggofatfirefly_vass_markings" + +/datum/sprite_accessory/tail/buggovass_under + name = "Bug abdomen, underside, dc, vass" + id = "tail_bug_vass_under" + icon_state = "buggo_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_vass_markings" + +/datum/sprite_accessory/tail/buggovass_underwag + name = "Bug abdomen, underside, dc, vass, vwag" + id = "tail_bug_vass_under2" + icon_state = "buggo_vass_s" + ani_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggounder_vass_markings" + extra_overlay_w = "buggofatunder_vass_markings" + +/datum/sprite_accessory/tail/buggovassfat + name = "Fat bug abdomen, vass, colorable" + id = "tail_bug_vass_fat" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/buggovassfat_bee + name = "Fat bug abdomen, bee top, dc, vass" + id = "tail_bug_vass_fat_bee" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbee_vass_markings" + +/datum/sprite_accessory/tail/buggovassfat_beefull + name = "Fat bug abdomen, bee full, dc, vass" + id = "tail_bug_vass_fat_bee2" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatbeefull_vass_markings" + +/datum/sprite_accessory/tail/buggovassfat_firefly + name = "Fat bug abdomen, firefly, dc, vass" + id = "tail_bug_vass_fat_firefly" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatfirefly_vass_markings" + +/datum/sprite_accessory/tail/buggovassfat_under + name = "Fat bug abdomen, underside, dc, vass" + id = "tail_bug_vass_fat_under" + icon_state = "buggofat_vass_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "buggofatunder_vass_markings" diff --git a/code/modules/sprite_accessories/tail/misc.dm b/code/modules/sprite_accessories/tail/misc.dm new file mode 100644 index 00000000000..ac11543247e --- /dev/null +++ b/code/modules/sprite_accessories/tail/misc.dm @@ -0,0 +1,49 @@ +/datum/sprite_accessory/tail/ztail + name = "jagged flufftail" + id = "tail_jagged_flufftail" + icon_state = "ztail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/curltail + name = "curltail (vwag)" + id = "tail_curltail" + icon_state = "curltail" + ani_state = "curltail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "curltail_mark" + extra_overlay_w = "curltail_mark_w" + +/datum/sprite_accessory/tail/wagtail + name = "avian wagtail, colorable" + id = "tail_avian_wagtail" + icon_state = "wagtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/deertail + name = "deer tail, dual-color" + id = "tail_deer" + icon_state = "deertail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "deertail_mark" + +/datum/sprite_accessory/tail/Segmentedtail + name = "Segmented tail, animated" + id = "tail_segmented" + icon_state = "Segmentedtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "Segmentedtailmarking" + ani_state = "Segmentedtail_w" + extra_overlay_w = "Segmentedtailmarking_w" + +/datum/sprite_accessory/tail/shorttail + name = "shorttail (vwag)" + id = "tail_shorttail" + icon_state = "straighttail" + ani_state = "straighttail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/pokemon.dm b/code/modules/sprite_accessories/tail/pokemon.dm new file mode 100644 index 00000000000..df8b975c6e9 --- /dev/null +++ b/code/modules/sprite_accessories/tail/pokemon.dm @@ -0,0 +1,4 @@ +/datum/sprite_accessory/tail/leafeon + name = "Leaf Tail" + id = "tail_leafeon" + icon_state = "leaf_tail" diff --git a/code/modules/sprite_accessories/tail/rodents_and_adjacent.dm b/code/modules/sprite_accessories/tail/rodents_and_adjacent.dm new file mode 100644 index 00000000000..8744e081902 --- /dev/null +++ b/code/modules/sprite_accessories/tail/rodents_and_adjacent.dm @@ -0,0 +1,56 @@ +/datum/sprite_accessory/tail/beaver + name = "beaver tail, colorable" + id = "tail_beaver" + icon_state = "beaver" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/redpanda + name = "red panda" + id = "tail_redpanda" + icon_state = "redpanda" + +/datum/sprite_accessory/tail/ringtail + name = "ringtail, colorable" + id = "tail_ringtail" + icon_state = "ringtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "ringtail_mark" + +/datum/sprite_accessory/tail/mouse + name = "mouse, colorable" + id = "tail_mouse" + icon_state = "mouse" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/mouse_pink + name = "mouse, pink" + id = "tail_mouse_pink" + icon_state = "mouse-pink" + +/datum/sprite_accessory/tail/skunktail + name = "skunk, dual-color" + id = "tail_skunk" + icon_state = "skunktail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "skunktail_mark" + +/datum/sprite_accessory/tail/squirrel + name = "squirrel, colorable" + id = "tail_squirrel" + icon_state = "squirrel" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/squirrel_orange + name = "squirel, orange" + id = "tail_squirrel_orange" + icon_state = "squirrel-orange" + +/datum/sprite_accessory/tail/squirrel_red + name = "squirrel, red" + id = "tail_squirrel_red" + icon_state = "squirrel-red" diff --git a/code/modules/sprite_accessories/tail/scalies.dm b/code/modules/sprite_accessories/tail/scalies.dm new file mode 100644 index 00000000000..c8960660814 --- /dev/null +++ b/code/modules/sprite_accessories/tail/scalies.dm @@ -0,0 +1,58 @@ +/datum/sprite_accessory/tail/chameleon + name = "Chameleon, colorable" + id = "tail_chameleon" + icon_state = "chameleon" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/dragon + name = "dragon, colorable" + id = "tail_dragon" + icon_state = "dragon" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/Easterntail + name = "Eastern Dragon (Animated)" + id = "tail_dragon_eastern" + icon_state = "Easterntail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "EasterntailColorTip" + ani_state = "Easterntail_w" + extra_overlay_w = "EasterntailColorTip_w" + +/datum/sprite_accessory/tail/lizard_tail_dark_tiger + name = "Lizard Tail (Dark Tiger)" + id = "tail_lizard_darktiger" + icon_state = "lizard_tail_dark_tiger" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lizard_tail_light_tiger + name = "Lizard Tail (Light Tiger)" + id = "tail_lizard_lighttiger" + icon_state = "lizard_tail_light_tiger" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lizard_tail_smooth + name = "Lizard Tail (Smooth)" + id = "tail_lizard_smooth" + icon_state = "lizard_tail_smooth" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lizard_tail_spiked + name = "Lizard Tail (Spiked)" + id = "tail_lizard_spiked" + icon_state = "lizard_tail_spiked" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/tail_smooth + name = "Smooth Lizard Tail, Colorable" + id = "tail_lizard_smooth2" + icon_state = "tail_smooth" + ani_state = "tail_smooth_w" + do_colouration = 1 diff --git a/code/modules/sprite_accessories/tail/snake.dm b/code/modules/sprite_accessories/tail/snake.dm new file mode 100644 index 00000000000..60d5b586656 --- /dev/null +++ b/code/modules/sprite_accessories/tail/snake.dm @@ -0,0 +1,6 @@ +/datum/sprite_accessory/tail/snaketail + name = "snake tail, colorable" + id = "tail_snake" + icon_state = "snaketail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/species/akula.dm b/code/modules/sprite_accessories/tail/species/akula.dm new file mode 100644 index 00000000000..62ca47d4ddc --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/akula.dm @@ -0,0 +1,13 @@ +/datum/sprite_accessory/tail/special/akula + name = "akula tail" + id = "tail_akula" + icon_state = "sharktail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/akulahc + name = "akula tail, colorable" + id = "tail_akula_color" + icon_state = "sharktail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/species/monkey.dm b/code/modules/sprite_accessories/tail/species/monkey.dm new file mode 100644 index 00000000000..590d6536947 --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/monkey.dm @@ -0,0 +1,10 @@ +/datum/sprite_accessory/tail/special/monkeyhc + name = "monkey tail, colorable" + id = "tail_monkey" + icon_state = "chimptail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/monkey + name = "monkey tail" + id = "tail_monkey_nocolor" + icon_state = "chimptail_s" diff --git a/code/modules/sprite_accessories/tail/species/naramadi.dm b/code/modules/sprite_accessories/tail/species/naramadi.dm new file mode 100644 index 00000000000..f1fa75be65a --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/naramadi.dm @@ -0,0 +1,21 @@ +/datum/sprite_accessory/tail/special/sergal + name = "sergal tail" + id = "tail_naramadi" + icon_state = "sergtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/sergalhc + name = "sergal tail, colorable" + id = "tail_naramadi_color" + icon_state = "sergtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/sergaltaildc + name = "sergal, dual-color" + id = "tail_sergal" + icon_state = "sergal" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "sergal_mark" diff --git a/code/modules/sprite_accessories/tail/species/nevrean.dm b/code/modules/sprite_accessories/tail/species/nevrean.dm new file mode 100644 index 00000000000..60e68f17e3a --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/nevrean.dm @@ -0,0 +1,37 @@ +/datum/sprite_accessory/tail/special/nevreanhc + name = "nevrean tail, colorable" + id = "tail_nevrean_color" + icon_state = "nevreantail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/nevrean + name = "nevrean tail" + id = "tail_nevrean" + icon_state = "nevreantail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/nevreandc + name = "nevrean tail, dual-color" + id = "tail_nevrean2" + icon_state = "nevreantail_dc" + extra_overlay = "nevreantail_dc_tail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/nevreanwagdc + name = "nevrean wagtail, dual-color" + id = "tail_nevrean_wag" + icon_state = "wagtail" + extra_overlay = "wagtail_dc_tail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/nevreanwagdc_alt + name = "nevrean wagtail, marked, dual-color" + id = "tail_nevrean_wag_mark" + icon_state = "wagtail2_dc" + extra_overlay = "wagtail2_dc_mark" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/species/shadekin.dm b/code/modules/sprite_accessories/tail/species/shadekin.dm new file mode 100644 index 00000000000..9707bd2f109 --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/shadekin.dm @@ -0,0 +1,8 @@ +/datum/sprite_accessory/tail/shadekin_short + name = "Shadekin Short Tail, colorable" + id = "tail_shadekin_short" + icon_state = "shadekin-short" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + apply_restrictions = TRUE + species_allowed = list(SPECIES_SHADEKIN) diff --git a/code/modules/sprite_accessories/tail/species/tajaran.dm b/code/modules/sprite_accessories/tail/species/tajaran.dm new file mode 100644 index 00000000000..5d2aa0f3ba8 --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/tajaran.dm @@ -0,0 +1,40 @@ +/datum/sprite_accessory/tail/special/tajaran + name = "tajaran tail" + id = "tail_tajaran" + icon_state = "tajtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/tajaranhc + name = "tajaran tail, colorable" + id = "tail_tajaran_color" + icon_state = "tajtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/tajaran_damaged + name = "tajaran tail, damaged/short" + id = "tail_tajaran_short" + icon_state = "tajtail_damaged_s" + species_allowed = list(SPECIES_TAJ) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tajaran_stubby + name = "tajaran tail, stubby" + id = "tail_tajarna_stubby" + icon_state = "tajtail_stubby_s" + species_allowed = list(SPECIES_TAJ) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/stripey + name = "stripey taj, colorable" + id = "tail_tajaran_stripey" + icon_state = "stripeytail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "stripeytail_mark" + +/datum/sprite_accessory/tail/stripeytail_brown + name = "stripey taj, brown" + id = "tail_tajaran_stripey_brown" + icon_state = "stripeytail-brown" diff --git a/code/modules/sprite_accessories/tail/species/teshari.dm b/code/modules/sprite_accessories/tail/species/teshari.dm new file mode 100644 index 00000000000..b407ed106cd --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/teshari.dm @@ -0,0 +1,242 @@ +/datum/sprite_accessory/tail/tesh_pattern_fem + name = "Teshari female tail pattern" + id = "tail_teshari_pattern_f" + icon_state = "teshtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_fem_tail" + +/datum/sprite_accessory/tail/tesh_pattern_fem_alt + name = "Teshari female tail alt. pattern" + id = "tail_teshari_pattern_f2" + icon_state = "teshtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_fem_alt" + +/datum/sprite_accessory/tail/tesh_pattern_male + name = "Teshari male tail pattern" + id = "tail_teshari_pattern_m" + icon_state = "teshtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_male_tail" + +/datum/sprite_accessory/tail/tesh_pattern_male_alt + name = "Teshari male tail alt. pattern" + id = "tail_teshari_pattern_m2" + icon_state = "teshtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshpattern_male_alt" + +/datum/sprite_accessory/tail/teshari_fluffytail + name = "Teshari tail" + id = "tail_teshari_fluffy" + icon_state = "teshari_fluffytail" + extra_overlay = "teshari_fluffytail_mark" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/teshtailfeathered + name = "Teshari tail alt" + id = "tail_teshari2" + icon_state = "teshtail_s" + extra_overlay = "teshtail_feathers_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/tesharitail_noplume + name = "teshari tail, no plumage" + id = "tail_teshari3" + icon_state = "teshtail_noplume_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_noplume_feathered + name = "teshari tail, no plumage w/feathers" + id = "tail_teshari4" + icon_state = "teshtail_noplume_s" + extra_overlay = "teshtail_noplume_feathers_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged + name = "teshari tail, damaged" + id = "tail_teshari5" + icon_state = "teshtail_damaged_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_feathered + name = "teshari tail, damaged w/feathers" + id = "tail_teshari6" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_feathers_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_unbranded + name = "teshari tail, damaged w/ unbranded prosthetic" + id = "tail_teshari7" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_prosthetic_unbranded_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_unbranded_feathered + name = "teshari tail, damaged w/feathers + unbranded prosthetic" + id = "tail_teshari8" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_feathers_s" + extra_overlay2 = "teshtail_damaged_prosthetic_unbranded_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_cenilimi + name = "teshari tail, damaged w/ Cenilimi Cybernetics prosthetic" + id = "tail_teshari9" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_prosthetic_cenilimi_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_cenilimi_feathered + name = "teshari tail, damaged w/feathers + Cenilimi Cybernetics prosthetic" + id = "tail_teshari10" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_feathers_s" + extra_overlay2 = "teshtail_damaged_prosthetic_cenilimi_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_wood + id = "tail_teshari11" + name = "teshari tail, damaged w/ wooden prosthetic" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_prosthetic_wood_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_wood_feathered + name = "teshari tail, damaged w/feathers + wooden prosthetic" + id = "tail_teshari12" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_feathers_s" + extra_overlay2 = "teshtail_damaged_prosthetic_wood_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_sifwood + name = "teshari tail, damaged w/ Sivian wooden prosthetic" + id = "tail_teshari13" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_prosthetic_wood_sif_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_damaged_sifwood_feathered + name = "teshari tail, damaged w/feathers + Sivian wooden prosthetic" + id = "tail_teshari14" + icon_state = "teshtail_damaged_s" + extra_overlay = "teshtail_damaged_feathers_s" + extra_overlay2 = "teshtail_damaged_prosthetic_wood_sif_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby + name = "teshari tail, stubby" + id = "tail_teshari15" + icon_state = "teshtail_stubby_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_feathered + name = "teshari tail, stubby w/feathers" + id = "tail_teshari16" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_feathers_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_unbranded + name = "teshari tail, stubby w/ unbranded prosthetic" + id = "tail_teshari17" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_prosthetic_unbranded_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_unbranded_feathered + name = "teshari tail, stubby w/ feathers + unbranded prosthetic" + id = "tail_teshari18" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_feathers_s" + extra_overlay2 = "teshtail_stubby_prosthetic_unbranded_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_cenilimi + name = "teshari tail, stubby w/ Cenilimi Cybernetics prosthetic" + id = "tail_teshari19" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_prosthetic_cenilimi_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_cenilimi_feathered + name = "teshari tail, stubby w/ feathers + Cenilimi Cybernetics prosthetic" + id = "tail_teshari20" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_feathers_s" + extra_overlay2 = "teshtail_stubby_prosthetic_cenilimi_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_wood + name = "teshari tail, stubby w/ wooden prosthetic" + id = "tail_teshari21" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_prosthetic_wood_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_wood_feathered + name = "teshari tail, stubby w/feathers + wooden prosthetic" + id = "tail_teshari22" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_feathers_s" + extra_overlay2 = "teshtail_stubby_prosthetic_wood_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_sifwood + name = "teshari tail, stubby w/ Sivian wooden prosthetic" + id = "tail_teshari23" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_prosthetic_wood_sif_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_stubby_sifwood_feathered + name = "teshari tail, stubby w/feathers + Sivian wooden prosthetic" + id = "tail_teshari24" + icon_state = "teshtail_stubby_s" + extra_overlay = "teshtail_stubby_feathers_s" + extra_overlay2 = "teshtail_stubby_prosthetic_wood_sif_s" + species_allowed = list(SPECIES_TESHARI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/tesharitail_prosthetic_unbranded + name = "teshari tail, unbranded prosthetic" + id = "tail_teshari25" + icon_state = "teshtail_prosthetic_unbranded_s" + species_allowed = list(SPECIES_TESHARI) + do_colouration = FALSE + +/datum/sprite_accessory/tail/special/tesharitail_prosthetic_cenilimi + name = "teshari tail, Cenilimi Cybernetics prosthetic" + id = "tail_teshari26" + icon_state = "teshtail_prosthetic_cenilimi_s" + species_allowed = list(SPECIES_TESHARI) + do_colouration = FALSE diff --git a/code/modules/sprite_accessories/tail/species/unathi.dm b/code/modules/sprite_accessories/tail/species/unathi.dm new file mode 100644 index 00000000000..5c14d72f82a --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/unathi.dm @@ -0,0 +1,27 @@ +/datum/sprite_accessory/tail/special/unathi + name = "unathi tail" + id = "tail_unathi" + icon_state = "sogtail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/unathihc + name = "unathi tail, colorable" + id = "tail_unathi_color" + icon_state = "sogtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/unathi_damaged + name = "unathi tail, damaged" + id = "tail_unathi_damaged" + icon_state = "unathitail_damaged_s" + species_allowed = list(SPECIES_UNATHI) + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/special/unathi_stubby + name = "unathi tail, stubby" + id = "tail_unathi_stubby" + icon_state = "unathitail_stubby_s" + species_allowed = list(SPECIES_UNATHI) + color_blend_mode = ICON_ADD diff --git a/code/modules/sprite_accessories/tail/species/vox.dm b/code/modules/sprite_accessories/tail/species/vox.dm new file mode 100644 index 00000000000..9228bdfc8d1 --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/vox.dm @@ -0,0 +1,10 @@ +/datum/sprite_accessory/tail/special/armalis + name = "armalis tail" + id = "tail_vox_armalis" + icon_state = "armalis_tail_humanoid_s" + +/datum/sprite_accessory/tail/special/armalishc + name = "armalis tail, colorable" + id = "tail_vox_armalis_color" + icon_state = "armalis_tail_humanoid_hc_s" + do_colouration = 1 diff --git a/code/modules/sprite_accessories/tail/species/vulpkanin.dm b/code/modules/sprite_accessories/tail/species/vulpkanin.dm new file mode 100644 index 00000000000..2c498e46aad --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/vulpkanin.dm @@ -0,0 +1,23 @@ +/datum/sprite_accessory/tail/special/vulpan + name = "vulpkanin, colorable" + id = "tail_vulp" + icon_state = "vulptail_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/vulp_new + name = "new vulp tail (vwag)" + id = "tail_vulp2" + icon_state = "vulptail" + ani_state = "vulptail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "vulptail_mark" + extra_overlay_w = "vulptail_mark_w" + +/datum/sprite_accessory/tail/vulpan_alt + name = "vulpkanin alt style, colorable" + id = "tail_vulp3" + icon_state = "vulptail_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/species/xenomorph.dm b/code/modules/sprite_accessories/tail/species/xenomorph.dm new file mode 100644 index 00000000000..84f3eb1cd61 --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/xenomorph.dm @@ -0,0 +1,67 @@ +/datum/sprite_accessory/tail/snag + name = "xenomorph tail 1" + id = "tail_xenomorph" + icon_state = "snag" + +/datum/sprite_accessory/tail/xenotail + name = "xenomorph tail 2" + id = "tail_xenomorph2" + icon_state = "xenotail" + +/datum/sprite_accessory/tail/xenotail_fullcolour + name = "xenomorph tail (fully colourable)" + id = "tail_xenomorph3" + icon_state = "xenotail_fullcolour" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/xenotailalt_fullcolour + name = "xenomorph tail alt. (fully colourable)" + id = "tail_xenomorph4" + icon_state = "xenotailalt_fullcolour" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/xenodrone + name = "xenomorph drone tail" + id = "tail_xeno_drone" + icon_state = "xenos_drone_tail_s" + +/datum/sprite_accessory/tail/special/xenodronehc + name = "xenomorph drone tail, colorable" + id = "tail_xeno_drone_color" + icon_state = "xenos_drone_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenohunter + name = "xenomorph hunter tail" + id = "tail_xeno_hunter" + icon_state = "xenos_hunter_tail_s" + +/datum/sprite_accessory/tail/special/xenohunterhc + name = "xenomorph hunter tail, colorable" + id = "tail_xeno_hunter_color" + icon_state = "xenos_hunter_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenoqueen + name = "xenomorph queen tail" + id = "tail_xeno_queen" + icon_state = "xenos_queen_tail_s" + +/datum/sprite_accessory/tail/special/xenoqueenhc + name = "xenomorph queen tail, colorable" + id = "tail_xeno_queen_color" + icon_state = "xenos_queen_tail_hc_s" + do_colouration = 1 + +/datum/sprite_accessory/tail/special/xenosentinel + name = "xenomorph sentinel tail" + id = "tail_xeno_sentinel" + icon_state = "xenos_sentinel_tail_s" + +/datum/sprite_accessory/tail/special/xenosentinelhc + name = "xenomorph sentinel tail, colorable" + id = "tail_xeno_sentinel_color" + icon_state = "xenos_sentinel_tail_hc_s" + do_colouration = 1 diff --git a/code/modules/sprite_accessories/tail/species/zorren.dm b/code/modules/sprite_accessories/tail/species/zorren.dm new file mode 100644 index 00000000000..61dca3ba082 --- /dev/null +++ b/code/modules/sprite_accessories/tail/species/zorren.dm @@ -0,0 +1,13 @@ +/datum/sprite_accessory/tail/special/fennechc + name = "flatland zorren tail, colorable" + id = "tail_zorren_flat" + icon_state = "fentail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/special/foxhc + name = "highlander zorren tail, colorable" + id = "tail_zorren_high" + icon_state = "foxtail_hc_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/tail/synthetic.dm b/code/modules/sprite_accessories/tail/synthetic.dm new file mode 100644 index 00000000000..2c8962a8b6f --- /dev/null +++ b/code/modules/sprite_accessories/tail/synthetic.dm @@ -0,0 +1,69 @@ +/datum/sprite_accessory/tail/wartacosushi_tail //brightened +20RGB from matching roboparts + name = "Ward-Takahashi Tail" + id = "tail_synth_wardtakashi" + icon_state = "wardtakahashi_vulp" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/wartacosushi_tail_dc + name = "Ward-Takahashi Tail, dual-color" + id = "tail_synth_wardtakashi2" + icon_state = "wardtakahashi_vulp_dc" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "wardtakahashi_vulp_dc_mark" + +/datum/sprite_accessory/tail/zenghu_taj + name = "Zeng-Hu Tajaran Synth tail" + id = "tail_synth_zenghu_tajaran" + icon_state = "zenghu_taj" + +/datum/sprite_accessory/tail/eboop + name = "EGN mech tail (dual color)" + id = "tail_synth_egn" + icon_state = "eboop" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "eboop_mark" + +/datum/sprite_accessory/tail/Plugtail + name = "Synthetic plug tail" + id = "tail_synth_plug" + icon_state = "Plugtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "PlugtailMarking" + extra_overlay2 = "PlugtailMarking2" + +/datum/sprite_accessory/tail/robo_tail + name = "Robo Dragon Tail" + id = "tail_synth_dragon" + icon_state = "robo_dragon" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "robodragon_b" + +/datum/sprite_accessory/tail/Segmentedlights + name = "Segmented tail, animated synth" + id = "tail_synth_segmented" + icon_state = "Segmentedtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "Segmentedlights" + ani_state = "Segmentedtail_w" + extra_overlay_w = "Segmentedlights_w" + +/datum/sprite_accessory/tail/synthtail_static + name = "Synthetic lizard tail" + id = "tail_synth_lizard" + icon_state = "synthtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/synthtail_vwag + name = "Synthetic lizard tail (vwag)" + id = "tail_synth_lizard2" + icon_state = "synthtail" + ani_state = "synthtail_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/sprite_accessories/tail/taurs.dm similarity index 87% rename from code/modules/vore/appearance/sprite_accessories_taur_vr.dm rename to code/modules/sprite_accessories/tail/taurs.dm index 3c556831e2f..d9f168d827a 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/sprite_accessories/tail/taurs.dm @@ -1,14 +1,5 @@ -/* -//////////////////////////// -/ =--------------------= / -/ == Taur Definitions == / -/ =--------------------= / -//////////////////////////// -*/ - -// Taur sprites are now a subtype of tail since they are mutually exclusive anyway. - /datum/sprite_accessory/tail/taur + abstract_type = /datum/sprite_accessory/tail/taur name = "You should not see this..." icon = 'icons/mob/sprite_accessories/taurs.dmi' do_colouration = 1 // Yes color, using tail color @@ -48,15 +39,11 @@ clip_mask_icon = 'icons/mob/sprite_accessories/taurs.dmi' clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms -/datum/sprite_accessory/tail/taur/roiz_long_lizard // Not ACTUALLY a taur, but it uses 32x64 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_state = "roiz_tail_s" - do_colouration = 0 - ckeys_allowed = list("spoopylizz") // Species-unique long tails/taurhalves /datum/sprite_accessory/tail/taur/shadekin_tail name = "Shadekin Tail" + id = "tail_taur_shadekin" icon_state = "shadekin_s" can_ride = 0 hide_body_parts = null @@ -67,51 +54,61 @@ /datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_2c name = "Shadekin Tail dual-color" + id = "tail_taur_shadekin_colorable" extra_overlay = "shadekin_markings" /datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_long name = "Shadekin Long Tail" + id = "tail_taur_shadekin_long" icon_state = "shadekin_long_s" /datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_long_2 name = "Shadekin Striped Long Tail" + id = "tail_taur_shadekin_long_stripes" icon_state = "shadekin_long_2" extra_overlay = "shadekin_long_marking_2" /datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_small name = "Shadekin Small Tail" + id = "tail_taur_shadekin_small" icon_state = "shadekin_s2" // Tails/taurhalves for everyone /datum/sprite_accessory/tail/taur/wolf name = "Wolf (Taur)" + id = "tail_taur_wolf" icon_state = "wolf_s" suit_sprites = 'icons/mob/clothing/taursuits_wolf.dmi' //TFF 22/11/19 - CHOMPStation port of fat taur sprites /datum/sprite_accessory/tail/taur/fatwolf name = "Fat Wolf (Taur)" + id = "tail_taur_wolf_fat" icon_state = "fatwolf_s" /datum/sprite_accessory/tail/taur/wolf/wolf_2c name = "Wolf dual-color (Taur)" + id = "tail_taur_wolf_colorable" icon_state = "wolf_s" extra_overlay = "wolf_markings" //TFF 22/11/19 - CHOMPStation port of fat taur sprites /datum/sprite_accessory/tail/taur/wolf/fatwolf_2c name = "Fat Wolf dual-color (Taur)" + id = "tail_taur_wolf_fat_colorable" icon_state = "fatwolf_s" extra_overlay = "fatwolf_markings" /datum/sprite_accessory/tail/taur/wolf/synthwolf name = "SynthWolf dual-color (Taur)" + id = "tail_taur_wolf_synth_colorable" icon_state = "synthwolf_s" extra_overlay = "synthwolf_markings" /datum/sprite_accessory/tail/taur/naga name = "Naga (Taur)" + id = "tail_taur_naga" icon_state = "naga_s" suit_sprites = 'icons/mob/clothing/taursuits_naga.dmi' @@ -144,11 +141,13 @@ /datum/sprite_accessory/tail/taur/naga/naga_2c name = "Naga dual-color (Taur)" + id = "tail_taur_naga_colorable" icon_state = "naga_s" extra_overlay = "naga_markings" /datum/sprite_accessory/tail/taur/horse name = "Horse (Taur)" + id = "tail_taur_horse" icon_state = "horse_s" suit_sprites = 'icons/mob/clothing/taursuits_horse.dmi' @@ -169,11 +168,13 @@ /datum/sprite_accessory/tail/taur/horse/synthhorse name = "SynthHorse dual-color (Taur)" + id = "tail_taur_horse_synth_colorable" icon_state = "synthhorse_s" extra_overlay = "synthhorse_markings" /datum/sprite_accessory/tail/taur/cow name = "Cow (Taur)" + id = "tail_taur_cow" icon_state = "cow_s" suit_sprites = 'icons/mob/clothing/taursuits_cow.dmi' @@ -194,6 +195,7 @@ /datum/sprite_accessory/tail/taur/deer name = "Deer dual-color (Taur)" + id = "tail_taur_deer_colorable" icon_state = "deer_s" extra_overlay = "deer_markings" suit_sprites = 'icons/mob/clothing/taursuits_deer.dmi' @@ -215,21 +217,25 @@ /datum/sprite_accessory/tail/taur/lizard name = "Lizard (Taur)" + id = "tail_taur_lizard" icon_state = "lizard_s" suit_sprites = 'icons/mob/clothing/taursuits_lizard.dmi' /datum/sprite_accessory/tail/taur/lizard/lizard_2c name = "Lizard dual-color (Taur)" + id = "tail_taur_lizard_colorable" icon_state = "lizard_s" extra_overlay = "lizard_markings" /datum/sprite_accessory/tail/taur/lizard/synthlizard name = "SynthLizard dual-color (Taur)" + id = "tail_taur_lizard_synth" icon_state = "synthlizard_s" extra_overlay = "synthlizard_markings" /datum/sprite_accessory/tail/taur/spider name = "Spider (Taur)" + id = "tail_taur_spider" icon_state = "spider_s" suit_sprites = 'icons/mob/clothing/taursuits_spider.dmi' @@ -250,6 +256,7 @@ /datum/sprite_accessory/tail/taur/tents name = "Tentacles (Taur)" + id = "tail_taur_tentacles" icon_state = "tent_s" can_ride = 0 @@ -276,37 +283,42 @@ /datum/sprite_accessory/tail/taur/feline name = "Feline (Taur)" + id = "tail_taur_feline" icon_state = "feline_s" suit_sprites = 'icons/mob/clothing/taursuits_feline.dmi' -//TFF 22/11/19 - CHOMPStation port of fat taur sprites /datum/sprite_accessory/tail/taur/fatfeline name = "Fat Feline (Taur)" + id = "tail_taur_feline_fat" icon_state = "fatfeline_s" /datum/sprite_accessory/tail/taur/fatfeline_wag name = "Fat Feline (Taur) (vwag)" + id = "tail_taur_feline_fat_waggable" icon_state = "fatfeline_s" ani_state = "fatfeline_w" /datum/sprite_accessory/tail/taur/feline/feline_2c name = "Feline dual-color (Taur)" + id = "tail_taur_feline_colorable" icon_state = "feline_s" extra_overlay = "feline_markings" -//TFF 22/11/19 - CHOMPStation port of fat taur sprites /datum/sprite_accessory/tail/taur/feline/fatfeline_2c name = "Fat Feline dual-color (Taur)" + id = "tail_taur_feline_fat_colorable" icon_state = "fatfeline_s" extra_overlay = "fatfeline_markings" /datum/sprite_accessory/tail/taur/feline/synthfeline name = "SynthFeline dual-color (Taur)" + id = "tail_taur_feline_synth_colorable" icon_state = "synthfeline_s" extra_overlay = "synthfeline_markings" /datum/sprite_accessory/tail/taur/slug name = "Slug (Taur)" + id = "tail_taur_slug" icon_state = "slug_s" suit_sprites = 'icons/mob/clothing/taursuits_slug.dmi' @@ -339,32 +351,26 @@ /datum/sprite_accessory/tail/taur/frog name = "Frog (Taur)" + id = "tail_taur_frog" icon_state = "frog_s" /datum/sprite_accessory/tail/taur/drake //Enabling on request, no suit compatibility but then again see 2 above. name = "Drake (Taur)" + id = "tail_taur_drake" icon_state = "drake_s" extra_overlay = "drake_markings" suit_sprites = 'icons/mob/clothing/taursuits_drake.dmi' /datum/sprite_accessory/tail/taur/otie name = "Otie (Taur)" + id = "tail_taur_otie" icon_state = "otie_s" extra_overlay = "otie_markings" suit_sprites = 'icons/mob/clothing/taursuits_otie.dmi' -/datum/sprite_accessory/tail/taur/alraune/alraune_2c - name = "Alraune (dual color)" - icon_state = "alraunecolor_s" - ani_state = "alraunecolor_closed_s" - ckeys_allowed = null - do_colouration = 1 - extra_overlay = "alraunecolor_markings" - extra_overlay_w = "alraunecolor_closed_markings" - clip_mask_state = "taur_clip_mask_alraune" - /datum/sprite_accessory/tail/taur/wasp name = "Wasp (dual color)" + id = "tail_taur_wasp" icon_state = "wasp_s" extra_overlay = "wasp_markings" clip_mask_state = "taur_clip_mask_wasp" @@ -386,6 +392,7 @@ /datum/sprite_accessory/tail/taur/mantis name = "Mantis (Taur)" + id = "tail_taur_mantis" icon_state = "mantis_s" clip_mask_state = "taur_clip_mask_mantis" @@ -406,52 +413,9 @@ // Special snowflake tails/taurhalves -//spoopylizz: Roiz Lizden -/datum/sprite_accessory/tail/taur/roiz_long_lizard // Not ACTUALLY a taur, but it uses 32x64 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_state = "roiz_tail_s" - do_colouration = 0 - ckeys_allowed = list("spoopylizz") - hide_body_parts = null - clip_mask_icon = null - clip_mask_state = null - -//wickedtemp: Chakat Tempest -/datum/sprite_accessory/tail/taur/feline/tempest - name = "Feline (wickedtemp) (Taur)" - icon_state = "tempest_s" - ckeys_allowed = list("wickedtemp") - -//silencedmp5a5: Serdykov Antoz -/datum/sprite_accessory/tail/taur/wolf/serdy - name = "CyberSerdy (silencedmp5a5) (Taur)" - icon_state = "serdy_s" - ckeys_allowed = list("silencedmp5a5") - -//liquidfirefly: Ariana Scol -/datum/sprite_accessory/tail/taur/centipede - name = "Centipede (liquidfirefly) (Taur)" - icon_state = "ariana_s" - ckeys_allowed = list("liquidfirefly") - do_colouration = 0 - - 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!" - - msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" - msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" - - msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor below!" - msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!" - - msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" - msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" - - 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!" - -//natje: +// todo: remove /datum/sprite_accessory/tail/taur/alraune + abstract_type = /datum/sprite_accessory/tail/taur/alraune name = "Alraune (natje) (Taur)" icon_state = "alraune_s" ani_state = "alraune_closed_s" @@ -484,15 +448,18 @@ /datum/sprite_accessory/tail/taur/alraune/alraune_2c name = "Alraune (dual color)" + id = "tail_taur_alraune_colorable" icon_state = "alraunecolor_s" ani_state = "alraunecolor_closed_s" ckeys_allowed = null do_colouration = 1 extra_overlay = "alraunecolor_markings" extra_overlay_w = "alraunecolor_closed_markings" + clip_mask_state = "taur_clip_mask_alraune" /datum/sprite_accessory/tail/taur/long_lizard name = "Large Dragon Tail" + id = "tail_taur_dragon_large" icon_state = "big_liz" can_ride = 0 hide_body_parts = null @@ -501,4 +468,5 @@ /datum/sprite_accessory/tail/taur/long_lizard/scaled name = "Large Dragon Tail/W scales" + id = "tail_taur_dragon_large_scales" extra_overlay = "big_liz_mark" diff --git a/code/modules/sprite_accessories/tail/weird_shadow_creature_ocs.dm b/code/modules/sprite_accessories/tail/weird_shadow_creature_ocs.dm new file mode 100644 index 00000000000..ab6c6682763 --- /dev/null +++ b/code/modules/sprite_accessories/tail/weird_shadow_creature_ocs.dm @@ -0,0 +1,28 @@ +/datum/sprite_accessory/tail/newtailmaw + name = "new tailmaw (vwag)" + id = "tail_maw" + icon_state = "newtailmaw" + ani_state = "newtailmaw_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/tailmaw + name = "tailmaw, colorable" + id = "tail_tailmaw2" + icon_state = "tailmaw" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + +/datum/sprite_accessory/tail/tentacles + name = "Tentacles" + id = "tail_tentacles" + icon_state = "tentacles" + do_colouration = TRUE + color_blend_mode = ICON_MULTIPLY + ani_state = "tentacles_wag" + +/datum/sprite_accessory/tail/spade_color + name = "spade-tail (colorable)" + id = "tail_spade" + icon_state = "spadetail-black" + do_colouration = 1 diff --git a/code/modules/sprite_accessories/wings/_wings.dm b/code/modules/sprite_accessories/wings/_wings.dm new file mode 100644 index 00000000000..3ae01264afc --- /dev/null +++ b/code/modules/sprite_accessories/wings/_wings.dm @@ -0,0 +1,35 @@ +/datum/sprite_accessory/wing + abstract_type = /datum/sprite_accessory/wing + name = "You should not see this..." + icon = 'icons/mob/sprite_accessories/wings.dmi' + dimension_x = 64 + do_colouration = 0 //Set to 1 to enable coloration using the tail color. + + color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 + 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/show_species_tail = 1 // Just so // TODO - Seems not needed ~Leshana + var/desc = "You should not see this..." + var/ani_state // State when flapping/animated + var/spr_state // State when spreading wings w/o anim + var/extra_overlay_w // Flapping state for extra overlay + var/extra_overlay2_w + + +// todo: sort ears by something that makes sense +// todo: tgui choice menu should be modular +// todo: and include way to do categories +//! right now the categories are way too sparse, we'll combine them later. + +//? AND YES, I AM SHITPOSTING WITH THE CATEGORY .DM NAMES +//? Deal with it, I'll deal with this in the emissives PR +//? Seriously I'm not categorizing our 500 kinds of wings. + +//? If anyone wants to sort it, obviously, PLEASE, be my guest, but I just don't have the energy to do the stuff I did +//? in /ears. It just isn't working out for me, sorry. + +//? Potential nomenclatures: +//? - by animal (real or fakefurrysona) type +//? - "Animal", "Species", "Robotic", "Misc" +//? etc + +//? PLEASE HELP WITH THIS. diff --git a/code/modules/sprite_accessories/wings/bat.dm b/code/modules/sprite_accessories/wings/bat.dm new file mode 100644 index 00000000000..207a821a071 --- /dev/null +++ b/code/modules/sprite_accessories/wings/bat.dm @@ -0,0 +1,30 @@ +/datum/sprite_accessory/wing/bat_black + id = "wing_bat_black" + name = "bat wings, black" + icon_state = "bat-black" + +/datum/sprite_accessory/wing/bat_color + name = "bat wings, colorable" + id = "wing_bat_color" + icon_state = "bat-color" + do_colouration = 1 + +/datum/sprite_accessory/wing/bat_red + name = "bat wings, red" + id = "wing_bat_red" + icon_state = "bat-red" + +/datum/sprite_accessory/wing/succubus + name = "succubus wings, black" + id = "wing_succubus_black" + icon_state = "succubus-black" + +/datum/sprite_accessory/wing/succubus_purple + name = "succubus wings, purple" + id = "wing_succubus_purple" + icon_state = "succubus-purple" + +/datum/sprite_accessory/wing/succubus_red + name = "succubus wings, red" + id = "wing_succubus_red" + icon_state = "succubus-red" diff --git a/code/modules/sprite_accessories/wings/draconic_furries.dm b/code/modules/sprite_accessories/wings/draconic_furries.dm new file mode 100644 index 00000000000..e038643e450 --- /dev/null +++ b/code/modules/sprite_accessories/wings/draconic_furries.dm @@ -0,0 +1,20 @@ +/datum/sprite_accessory/wing/cyberdragon + name = "Cyber dragon wing (colorable)" + id = "wing_cyberdragon" + icon_state = "cyberdragon_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/cyberdragon_red + name = "Cyber dragon wing (red)" + id = "wing_cyberdragon_red" + icon_state = "cyberdragon_red_s" + do_colouration = 0 + +/datum/sprite_accessory/wing/drago_wing + name = "Cybernetic Dragon wings" + id = "wing_cyberdragon2" + icon_state = "drago_wing" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "drago_wing_2" diff --git a/code/modules/sprite_accessories/wings/feathered.dm b/code/modules/sprite_accessories/wings/feathered.dm new file mode 100644 index 00000000000..10cce8f5bcd --- /dev/null +++ b/code/modules/sprite_accessories/wings/feathered.dm @@ -0,0 +1,75 @@ +/datum/sprite_accessory/wing/feathered + name = "feathered wings (colorable)" + id = "wing_feather" + icon_state = "feathered" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/feathered_medium + name = "medium feathered wings (colorable)" // Keekenox made these feathery things with a little bit more shape to them than the other wings. They are medium sized wing boys. + id = "wing_feather_medium" + icon_state = "feathered2" + spr_state = "feathered2_spr" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/feathered_large //Made by Natje! + name = "large feathered wings (colorable)" + id = "wing_feather_large" + icon_state = "feathered3" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/harpywings + name = "harpy wings (colorable)" + id = "wing_harpy" + icon_state = "harpywings" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +// the below two weren't my doing +// check blame, it wasn't me ~silicons +// yikes. + +/datum/sprite_accessory/wing/Harpywings_alt + name = "harpy wings alt, archeopteryx 2" + id = "wing_harpy_archeopterx" + icon_state = "Harpywings_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "Neckfur" + extra_overlay2 = "Harpywings_altmarkings" + +/datum/sprite_accessory/wing/harpywings_alt + name = "harpy wings alt, archeopteryx" + id = "wing_harpy_archeopteryx2" + icon_state = "harpywings_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "harpywings_altmarkings" + +/datum/sprite_accessory/wing/harpywings_alt_neckfur + name = "harpy wings alt, archeopteryx & neckfur" + id = "wing_harpy_archeopteryx3" + icon_state = "harpywings_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "harpywings_altmarkings" + extra_overlay2 = "neckfur" + +/datum/sprite_accessory/wing/harpywings_bat + name = "harpy wings, bat" + id = "wing_harpy_bat2" + icon_state = "harpywings_bat" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "harpywings_batmarkings" + +/datum/sprite_accessory/wing/harpywings_bat_neckfur + name = "harpy wings, bat & neckfur" + id = "wing_harpy_bat_neckfur" + icon_state = "harpywings_bat" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "harpywings_batmarkings" + extra_overlay2 = "neckfur" diff --git a/code/modules/sprite_accessories/wings/insect_not_really_wings.dm b/code/modules/sprite_accessories/wings/insect_not_really_wings.dm new file mode 100644 index 00000000000..eb0e28cf59e --- /dev/null +++ b/code/modules/sprite_accessories/wings/insect_not_really_wings.dm @@ -0,0 +1,20 @@ +/datum/sprite_accessory/wing/mantis_arms //Same rationale as spider legs. + name = "mantis arms" + id = "wing_mantis_arms" + icon_state = "mantis-arms" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/mantis_arms_saturated + name = "mantis arms (saturated)" + id = "wing_mantis_arms2" + icon_state = "mantis-arms_saturated" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/spider_legs //Not really /WINGS/ but they protrude from the back, kinda. Might as well have them here. + name = "spider legs" + id = "wing_spider_legs" + icon_state = "spider-legs" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/wings/misc.dm b/code/modules/sprite_accessories/wings/misc.dm new file mode 100644 index 00000000000..de8ffdfcd7c --- /dev/null +++ b/code/modules/sprite_accessories/wings/misc.dm @@ -0,0 +1,19 @@ +/datum/sprite_accessory/wing/neckfur + name = "neck fur" + id = "wing_neckfur" + icon_state = "neckfur" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/nevrean + name = "nevrean wings/fantail" + id = "wing_nevrean_wtail" + icon_state = "nevrean_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/sepulchre_c_yw + name = "demon wings (colorable)" + id = "wing_demon" + icon_state = "sepulchre_wingsc" + do_colouration = 1 diff --git a/code/modules/sprite_accessories/wings/moth.dm b/code/modules/sprite_accessories/wings/moth.dm new file mode 100644 index 00000000000..fb47aae413f --- /dev/null +++ b/code/modules/sprite_accessories/wings/moth.dm @@ -0,0 +1,118 @@ +/datum/sprite_accessory/wing/moth + name = "moth wings" + id = "wing_moth" + icon_state = "moth" + clothing_can_hide = FALSE + +/datum/sprite_accessory/wing/mothc + name = "moth wings (colorable)" + id = "wing_moth_color" + icon_state = "moth" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/moth_atlas + name = "atlas moth wings" + id = "wing_moth_atlas" + icon_state = "moth_atlas" + +/datum/sprite_accessory/wing/moth_burnt + name = "burnt moth wings" + id = "wing_moth_burnt" + icon_state = "moth_burnt" + +/datum/sprite_accessory/wing/moth_deathhead + name = "death's-head hawkmoth wings" + id = "wing_moth_deathshead" + icon_state = "moth_deathhead" + +/datum/sprite_accessory/wing/moth_firewatch + name = "firewatch moth wings" + id = "wing_moth_firewatch" + icon_state = "moth_firewatch" + front_behind_system = TRUE + +/datum/sprite_accessory/wing/moth_full + name = "moth antenna and wings" + id = "wing_moth_full" + icon_state = "moth_full" + +/datum/sprite_accessory/wing/moth_gothic + name = "gothic moth wings" + id = "wing_moth_gothic" + icon_state = "moth_gothic" + +/datum/sprite_accessory/wing/moth_jungle + name = "jungle moth wings" + id = "wing_moth_jungle" + icon_state = "moth_jungle" + +/datum/sprite_accessory/wing/moth_lover + name = "lover moth wings" + id = "wing_moth_lover" + icon_state = "moth_lover" + +/datum/sprite_accessory/wing/moth_luna + name = "luna moth wings" + id = "wing_moth_luna" + icon_state = "moth_luna" + +/datum/sprite_accessory/wing/moth_monarch + name = "monarch moth wings" + id = "wing_moth_monarch" + icon_state = "moth_monarch" + +/datum/sprite_accessory/wing/moth_moonfly + name = "moonfly moth wings" + id = "wing_moth_moonfly" + icon_state = "moth_moonfly" + +/datum/sprite_accessory/wing/moth_oakworm + name = "oakworm moth wings" + id = "wing_moth_oakworm" + icon_state = "moth_oakworm" + +/datum/sprite_accessory/wing/moth_plain + name = "plain moth wings" + id = "wing_moth_plain" + icon_state = "moth_plain" + +/datum/sprite_accessory/wing/moth_poison + name = "poison moth wings" + id = "wing_moth_poison" + icon_state = "moth_poison" + +/datum/sprite_accessory/wing/moth_ragged + name = "ragged moth wings" + id = "wing_moth_ragged" + icon_state = "moth_ragged" + +/datum/sprite_accessory/wing/moth_red + name = "red moth wings" + id = "wing_moth_read" + icon_state = "moth_red" + +/datum/sprite_accessory/wing/moth_royal + name = "royal moth wings" + id = "wing_moth_royal" + icon_state = "moth_royal" + +/datum/sprite_accessory/wing/moth_snowy + name = "snowy moth wings" + id = "wing_moth_snowy" + icon_state = "moth_snowy" + +/datum/sprite_accessory/wing/moth_white + name = "white moth wings" + id = "wing_moth_white" + icon_state = "moth_white" + +/datum/sprite_accessory/wing/moth_whitefly + name = "whitefly moth wings" + id = "wing_moth_whitefly" + icon_state = "moth_whitefly" + +/datum/sprite_accessory/wing/moth_witchwing + name = "witchwing moth wings" + id = "wing_moth_witchwing" + icon_state = "moth_witchwing" diff --git a/code/modules/sprite_accessories/wings/non_moth_insects.dm b/code/modules/sprite_accessories/wings/non_moth_insects.dm new file mode 100644 index 00000000000..f6ed116c6fc --- /dev/null +++ b/code/modules/sprite_accessories/wings/non_moth_insects.dm @@ -0,0 +1,10 @@ +/datum/sprite_accessory/wing/beewings + name = "bee wings" + id = "wing_bee" + icon_state = "beewings" + +/datum/sprite_accessory/wing/dragonfly + name = "dragonfly" + id = "wing_dragonfly" + icon_state = "dragonfly" + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/sprite_accessories/wings/pokemon.dm b/code/modules/sprite_accessories/wings/pokemon.dm new file mode 100644 index 00000000000..7c2d6bbcaf9 --- /dev/null +++ b/code/modules/sprite_accessories/wings/pokemon.dm @@ -0,0 +1,4 @@ +/datum/sprite_accessory/wing/leafeon + name = "Leaf Offshoots" + id = "wing_leafeon" + icon_state = "leaf_markings" diff --git a/code/modules/sprite_accessories/wings/synthetic.dm b/code/modules/sprite_accessories/wings/synthetic.dm new file mode 100644 index 00000000000..4157f9adbe5 --- /dev/null +++ b/code/modules/sprite_accessories/wings/synthetic.dm @@ -0,0 +1,14 @@ +/datum/sprite_accessory/wing/robo + name = "Robotic Wings" + id = "wing_robot1" + icon_state = "Drago_wing" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +//? synth furries count + +/datum/sprite_accessory/wing/cyberdoe + name = "Cyber doe wing" + id = "wing_cyberdoe" + icon_state = "cyberdoe_s" + do_colouration = 0 diff --git a/code/modules/sprite_accessories/wings/weird_shadow_creature_ocs.dm b/code/modules/sprite_accessories/wings/weird_shadow_creature_ocs.dm new file mode 100644 index 00000000000..ca2307e7bc5 --- /dev/null +++ b/code/modules/sprite_accessories/wings/weird_shadow_creature_ocs.dm @@ -0,0 +1,5 @@ +/datum/sprite_accessory/wing/liquidfirefly_gazer //I g-guess this could be considered wings? + name = "gazer eyestalks" + id = "wing_gazer" + icon_state = "liquidfirefly-eyestalks" + //ckeys_allowed = list("liquidfirefly","seiga") //At request. diff --git a/code/modules/sprite_accessories/wings/xenomorph.dm b/code/modules/sprite_accessories/wings/xenomorph.dm new file mode 100644 index 00000000000..27f805c36f8 --- /dev/null +++ b/code/modules/sprite_accessories/wings/xenomorph.dm @@ -0,0 +1,4 @@ +/datum/sprite_accessory/wing/snag + name = "xenomorph backplate" + id = "wing_xeno_backplate" + icon_state = "snag-backplate" diff --git a/code/modules/unit_tests/mob/_mob.dm b/code/modules/unit_tests/mob/_mob.dm index b964361dc30..4221cf340e1 100644 --- a/code/modules/unit_tests/mob/_mob.dm +++ b/code/modules/unit_tests/mob/_mob.dm @@ -1 +1,2 @@ #include "inventory.dm" +#include "sprite_accessories.dm" diff --git a/code/modules/unit_tests/mob/sprite_accessories.dm b/code/modules/unit_tests/mob/sprite_accessories.dm new file mode 100644 index 00000000000..ba2b7edd4da --- /dev/null +++ b/code/modules/unit_tests/mob/sprite_accessories.dm @@ -0,0 +1,52 @@ +/datum/unit_test/sprite_accessory_uniqueness/Run() + var/list/ids = list() + var/list/names_hair = list() + var/list/names_beard = list() + var/list/names_tail = list() + var/list/names_wing = list() + var/list/names_ear = list() + var/list/names_marking = list() + for(var/path in subtypesof(/datum/sprite_accessory)) + var/datum/sprite_accessory/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + if(isnull(S.id)) + Fail("null ID on [path]") + continue + else if(ids[S.id]) + Fail("duplicate id [S.id] on [path] against [ids[S.id]:type]") + else + ids[S.id] = S + // yanderedev gaming + if(istype(S, /datum/sprite_accessory/hair)) + if(names_hair[S.name]) + Fail("duplciate name [S.name] on [path] against [names_hair[S.name]:type]") + else + names_hair[S.name] = S + else if(istype(S, /datum/sprite_accessory/facial_hair)) + if(names_beard[S.name]) + Fail("duplciate name [S.name] on [path] against [names_beard[S.name]:type]") + else + names_beard[S.name] = S + else if(istype(S, /datum/sprite_accessory/wing)) + if(names_wing[S.name]) + Fail("duplciate name [S.name] on [path] against [names_wing[S.name]:type]") + else + names_wing[S.name] = S + else if(istype(S, /datum/sprite_accessory/ears)) + if(names_ear[S.name]) + Fail("duplciate name [S.name] on [path] against [names_ear[S.name]:type]") + else + names_ear[S.name] = S + else if(istype(S, /datum/sprite_accessory/tail)) + if(names_tail[S.name]) + Fail("duplciate name [S.name] on [path] against [names_tail[S.name]:type]") + else + names_tail[S.name] = S + else if(istype(S, /datum/sprite_accessory/marking)) + if(names_marking[S.name]) + Fail("duplciate name [S.name] on [path] against [names_marking[S.name]:type]") + else + names_marking[S.name] = S + diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm deleted file mode 100644 index eacd80cfb4b..00000000000 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ /dev/null @@ -1,2595 +0,0 @@ -/* - Hello and welcome to VOREStation sprite_accessories: For a more general overview - please read sprite_accessories.dm. This file is for ears and tails. - This is intended to be friendly for people with little to no actual coding experience. - !!WARNING!!: changing existing accessory information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ - -// Add Additional variable onto sprite_accessory -/datum/sprite_accessory - // Ckey of person allowed to use this, if defined. - var/list/ckeys_allowed = null - var/apply_restrictions = FALSE //whether to apply restrictions for specific tails/ears/wings - var/center = FALSE - var/dimension_x = 32 - var/dimension_y = 32 - -/* -//////////////////////////// -/ =--------------------= / -/ == Ear Definitions == / -/ =--------------------= / -//////////////////////////// -*/ -/datum/sprite_accessory/ears - name = "You should not see this..." - icon = 'icons/mob/sprite_accessories/ears.dmi' - do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color - - color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 - var/extra_overlay // Icon state of an additional overlay to blend in. - var/extra_overlay2 - var/desc = "You should not see this..." - -// Ears avaliable to anyone - -/datum/sprite_accessory/ears/antennae - name = "antennae, colorable" - desc = "" - icon_state = "antennae" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/antlercrown - name = "antler crown" - desc = "" - icon_state = "antlercrown" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/antlers - name = "antlers" - desc = "" - icon_state = "antlers" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/antlers_e - name = "antlers with ears" - desc = "" - icon_state = "cow-nohorns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "antlers_mark" - -/datum/sprite_accessory/ears/antlers_large - name = "Antlers (large)" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "antlers_large" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bear_brown - name = "bear, brown" - desc = "" - icon_state = "bear-brown" - -/datum/sprite_accessory/ears/bear_panda - name = "bear, panda" - desc = "" - icon_state = "panda" - -/datum/sprite_accessory/ears/bearhc - name = "bear, colorable" - desc = "" - icon_state = "bear" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bee - name = "bee antennae" - desc = "" - icon_state = "bee" - -/datum/sprite_accessory/ears/bnnuy //bnnuy - name = "Bnnuy Ears" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "bnnuy" - extra_overlay = "bnnuy-inner" - extra_overlay2 = "bnnuy-tips" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bnnuy2 - name = "Bnnuy Ears 2" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "bnnuy2" - extra_overlay = "bnnuy-inner" - extra_overlay2 = "bnnuy-tips2" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bunnyalt - name = "bunny 2, dual-color" - desc = "" - icon_state = "bunny-alt" - extra_overlay = "bunny-alt-inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bunnyhc - name = "bunny, colorable" - desc = "" - icon_state = "bunny" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bunny_floppy - name = "floppy bunny ears (colorable)" - desc = "" - icon_state = "floppy_bun" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bunny_tall - name = "Bunny Tall Ears" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "bunny-tall" - extra_overlay = "bunny-tall-inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/bunny_white - name = "bunny, white" - desc = "" - icon_state = "bunny" - -/datum/sprite_accessory/ears/caprahorns - name = "caprine horns" - desc = "" - icon_state = "caprahorns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/cow - name = "cow, horns" - desc = "" - icon_state = "cow" - -/datum/sprite_accessory/ears/cowc - name = "cow, horns, colorable" - desc = "" - icon_state = "cow-c" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/cow_nohorns - name = "cow, no horns" - desc = "" - icon_state = "cow-nohorns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/curly_bug - name = "curly antennae, colorable" - desc = "" - icon_state = "curly_bug" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/deer - name = "deer ears" - desc = "" - icon_state = "deer" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/demon_horns1 - name = "demon horns" - desc = "" - icon_state = "demon-horns1" - -/datum/sprite_accessory/ears/demon_horns1_c - name = "demon horns, colorable" - desc = "" - icon_state = "demon-horns1_c" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/demon_horns2 - name = "demon horns, colorable(outward)" - desc = "" - icon_state = "demon-horns2" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/demon_horns3 - name = "demon horns, colorable(upward)" - desc = "" - icon_state = "demon-horns3" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/demon_horns4 - name = "demon horns, colorable ring(upward)" - desc = "" - icon_state = "demon-horns4" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "demon-horns4-ring" - -/datum/sprite_accessory/ears/demon_horns5 - name = "demon horns, colorable (stubby)" - desc = "" - icon_state = "demon-horns5" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/donkey - name = "donkey, colorable" - desc = "" - icon_state = "donkey" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "otie-inner" - -/datum/sprite_accessory/ears/dragon_horns - name = "dragon horns, colorable" - desc = "" - icon_state = "dragon-horns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/drake - name = "drake frills" - desc = "" - icon_state = "drake" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/dual_robot - name = "synth antennae, colorable" - desc = "" - icon_state = "dual_robot_antennae" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/elfs - name = "elven ears" - desc = "" - icon_state = "elfs" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/elfshort - name = "elven ears (short)" - desc = "" - icon_state = "elfshort" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/fenears - name = "flatland zorren ears" - desc = "" - icon_state = "fenears" - -/datum/sprite_accessory/ears/fenearshc - name = "flatland zorren ears, colorable" - desc = "" - icon_state = "fenearshc" - extra_overlay = "fenears-inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/floppyelf - name = "floppy elven ears" - desc = "" - icon_state = "floppy-elf" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/foxears - name = "highlander zorren ears" - desc = "" - icon_state = "foxears" - -/datum/sprite_accessory/ears/foxearshc - name = "highlander zorren ears, colorable" - desc = "" - icon_state = "foxearshc" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/inkling - name = "colorable mature inkling tentacles" - icon = 'icons/mob/human_face_vr.dmi' - icon_state = "inkling-colorable" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/jackalope - name = "Jackalope Ears and Antlers" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "jackalope" - extra_overlay = "jackalope-antlers" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/kittyhc - name = "kitty, colorable" - desc = "" - icon_state = "kitty" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "kittyinner" - -/datum/sprite_accessory/ears/kittyr - name = "kitty right only, colorable" - icon = 'icons/mob/sprite_accessories/ears_uneven.dmi' - desc = "" - icon_state = "kittyrinner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "kittyr" - -/datum/sprite_accessory/ears/large_dragon - name = "vary large dragon horns" - desc = "" - icon_state = "big_liz" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/leafeon - name = "Leaf Ears" - desc = "" - icon_state = "leaf_ears" - -/datum/sprite_accessory/ears/left_robot - name = "left synth, colorable" - desc = "" - icon_state = "left_robot_antennae" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/mousehc - name = "mouse, colorable" - desc = "" - icon_state = "mouse" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "mouseinner" - -/datum/sprite_accessory/ears/mousehcno - name = "mouse, colorable, no inner" - desc = "" - icon_state = "mouse" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/mouse_grey - name = "mouse, grey" - desc = "" - icon_state = "mouse-grey" - -/datum/sprite_accessory/ears/oni_h1 - name = "oni horns" - desc = "" - icon_state = "oni-h1" - -/datum/sprite_accessory/ears/oni_h1_c - name = "oni horns, colorable" - desc = "" - icon_state = "oni-h1_c" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/otie - name = "otie, colorable" - desc = "" - icon_state = "otie" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "otie-inner" - -/datum/sprite_accessory/ears/peekinghuman - name = "peeking ears" - desc = "" - icon_state = "earpeek" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/rabbit_swept - name = "Rabbit Ears (swept back)" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "rabbit-swept" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/ram - name = "ram horns" - desc = "" - icon_state = "ram" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/right_robot - name = "right synth, colorable" - desc = "" - icon_state = "right_robot_antennae" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/sandfox - name = "Sandfox Ears" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "sandfox" - extra_overlay = "sandfox-inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/sergal //Redundant - name = "Sergal ears" - icon_state = "serg_plain_s" - -/datum/sprite_accessory/ears/sergalhc - name = "Sergal ears, colorable" - icon_state = "serg_plain_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/sleek - name = "sleek ears" - desc = "" - icon_state = "sleek" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/smallantlers - name = "small antlers" - desc = "" - icon_state = "smallantlers" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/smallantlers_e - name = "small antlers with ears" - desc = "" - icon_state = "smallantlers" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "deer" - -/datum/sprite_accessory/ears/smallbear - name = "small bear" - desc = "" - icon_state = "smallbear" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/squirrelhc - name = "squirrel, colorable" - desc = "" - icon_state = "squirrel" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/squirrel_orange - name = "squirel, orange" - desc = "" - icon_state = "squirrel-orange" - -/datum/sprite_accessory/ears/squirrel_red - name = "squirrel, red" - desc = "" - icon_state = "squirrel-red" - -/datum/sprite_accessory/ears/swooped_bunny - name = "Swooped bunny ears (colorable)" - desc = "" - icon_state = "swooped_bunny" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/synthhorns_curly - name = "Synth horns, curly" - desc = "" - icon_state = "synthhorns_curled" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/synthhorns_plain - name = "Synth horns, plain" - desc = "" - icon_state = "synthhorns_plain" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "synthhorns_plain_light" - -/datum/sprite_accessory/ears/synthhorns_thick - name = "Synth horns, thick" - desc = "" - icon_state = "synthhorns_thick" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "synthhorns_thick_light" - -/datum/sprite_accessory/ears/teppiears - name = "Teppi Ears" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "teppi_ears" - extra_overlay = "teppi_ears_inner" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/teppihorns - name = "Teppi Horns" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "teppi_horns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/teppiearshorns - name = "Teppi Ears and Horns" - desc = "" - icon = 'icons/mob/sprite_accessories/ears_32x64.dmi' - icon_state = "teppi_ears" - extra_overlay = "teppi_ears_inner" - extra_overlay2 = "teppi_horns" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/teshari - name = "Teshari ears (colorable)" - desc = "" - icon_state = "teshari" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshariinner" - -/datum/sprite_accessory/ears/tesharihigh - name = "Teshari upper ears (colorable)" - desc = "" - icon_state = "tesharihigh" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "tesharihighinner" - -/datum/sprite_accessory/ears/tesharilow - name = "Teshari lower ears (colorable)" - desc = "" - icon_state = "tesharilow" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "tesharilowinner" - -/datum/sprite_accessory/ears/tesh_pattern_ear_male - name = "Teshari male ear pattern (colorable)" - desc = "" - icon_state = "teshari" - color_blend_mode = ICON_MULTIPLY - do_colouration = 1 - extra_overlay = "teshari_male_pattern" - -/datum/sprite_accessory/ears/tesh_pattern_ear_female - name = "Teshari female ear pattern (colorable)" - desc = "" - icon_state = "teshari" - color_blend_mode = ICON_MULTIPLY - do_colouration = 1 - extra_overlay = "teshari_female_pattern" - -/datum/sprite_accessory/ears/vulp - name = "vulpkanin, dual-color" - desc = "" - icon_state = "vulp" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "vulp-inner" - -/datum/sprite_accessory/ears/vulp_jackal - name = "vulpkanin thin, dual-color" - desc = "" - icon_state = "vulp_jackal" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "vulp_jackal-inner" - -/datum/sprite_accessory/ears/vulp_short - name = "vulpkanin short" - desc = "" - icon_state = "vulp_terrier" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/vulp_short_dc - name = "vulpkanin short, dual-color" - desc = "" - icon_state = "vulp_terrier" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "vulp_terrier-inner" - -/datum/sprite_accessory/ears/wisewolf - name = "wolf, wise" - desc = "" - icon_state = "wolf-wise" - -/datum/sprite_accessory/ears/wolfhc - name = "wolf, colorable" - desc = "" - icon_state = "wolf" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "wolfinner" - -/datum/sprite_accessory/ears/wolf_green - name = "wolf, green" - desc = "" - icon_state = "wolf-green" - -/datum/sprite_accessory/ears/wolf_grey - name = "wolf, grey" - desc = "" - icon_state = "wolf-grey" - -/datum/sprite_accessory/ears/zears - name = "jagged ears" - desc = "" - icon_state = "zears" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -//Moths -/datum/sprite_accessory/ears/moth_antenna_fluff_burnt - name = "burnt moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_burnt" - -/datum/sprite_accessory/ears/moth_antenna_fluff_deathhead - name = "death's-head hawkmoth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_deathhead" - -/datum/sprite_accessory/ears/moth_antenna_fluff_firewatch - name = "firewatch moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_firewatch" - -/datum/sprite_accessory/ears/moth_antenna_fluff_gothic - name = "gothic moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_goth" - -/datum/sprite_accessory/ears/moth_antenna_fluff_jungle - name = "jungle moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_jungle" - -/datum/sprite_accessory/ears/moth_antenna_fluff_lovers - name = "lovers moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_lovers" - -/datum/sprite_accessory/ears/moth_antenna_fluff_moonfly - name = "moonfly moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_moonfly" - -/datum/sprite_accessory/ears/moth_antenna_fluff_oakworm - name = "oakworm moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_oakworm" - -/datum/sprite_accessory/ears/moth_antenna_fluff_plain - name = "plain moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_plain" - -/datum/sprite_accessory/ears/moth_antenna_fluff_poison - name = "poison moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_poison" - -/datum/sprite_accessory/ears/moth_antenna_fluff_ragged - name = "ragged moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_ragged" - -/datum/sprite_accessory/ears/moth_antenna_fluff_red - name = "red moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_red" - -/datum/sprite_accessory/ears/moth_antenna_fluff_royal - name = "royal moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_royal" - -/datum/sprite_accessory/ears/moth_antenna_fluff_snowy - name = "snowy moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_snowy" - -/datum/sprite_accessory/ears/moth_antenna_fluff_whitefly - name = "whitefly moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_whitefly" - -/datum/sprite_accessory/ears/moth_antenna_fluff_witchwing - name = "witchwing moth antennae and fluff" - desc = "" - icon_state = "moth_antenna_fluff_witchwing" - -//Mushroom Heads - Ha. -/datum/sprite_accessory/ears/fungal_muscaria - name = "fungal muscaria cap" - desc = "" - icon_state = "fungal_muscaria" - -/datum/sprite_accessory/ears/fungal_polypore - name = "fungal polyporous cap" - desc = "" - icon_state = "fungal_polypore" - -// Species-unique ears -/datum/sprite_accessory/ears/shadekin - name = "Shadekin Ears, colorable" - desc = "" - icon_state = "shadekin" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - apply_restrictions = TRUE - species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) - -// Special snowflake (Read: Whitelisted) ears go below here. -//None of these seem to be for Citadel users, but I'm retaining them for now. -/datum/sprite_accessory/ears/alurane - name = "alurane ears/hair (Pumila)" - desc = "" - icon_state = "alurane-ears" - ckeys_allowed = list("natje") - -/datum/sprite_accessory/ears/aronai - name = "aronai ears/head (Aronai)" - desc = "" - icon_state = "aronai" - ckeys_allowed = list("arokha") - -/datum/sprite_accessory/ears/frost - name = "Frost antenna" - desc = "" - icon_state = "frosted_tips" - ckeys_allowed = list("tucker0666") - -/datum/sprite_accessory/ears/holly - name = "tigress ears (Holly Sharp)" - desc = "" - icon_state = "tigressears" - ckeys_allowed = list("hoodoo") - -/datum/sprite_accessory/ears/kerena - name = "wingwolf ears (Kerena)" - desc = "" - icon_state = "kerena" - ckeys_allowed = list("somekindofpony") - -/datum/sprite_accessory/ears/lilimoth_antennae - name = "citheronia antennae (Kira72)" - desc = "" - icon_state = "lilimoth_antennae" - ckeys_allowed = list("kira72") - -/datum/sprite_accessory/ears/miria_fluffdragon - name = "fluffdragon ears (Miria Masters)" - desc = "" - icon_state = "miria-fluffdragonears" - ckeys_allowed = list("miriamasters") - -/datum/sprite_accessory/ears/molenar_deathclaw - name = "deathclaw ears" - desc = "" - icon_state = "molenar-deathclaw" - -/datum/sprite_accessory/ears/miria_kitsune - name = "kitsune ears (Miria Masters)" - desc = "" - icon_state = "miria-kitsuneears" - ckeys_allowed = list("miriamasters") - -/datum/sprite_accessory/ears/molenar_inkling - name = "teal mature inkling hair (Kari Akiren)" - desc = "" - icon_state = "molenar-tentacle" - ckeys_allowed = list("molenar") - -/datum/sprite_accessory/ears/molenar_kitsune - name = "quintail kitsune ears (Molenar)" - desc = "" - icon_state = "molenar-kitsune" - ckeys_allowed = list("molenar") - -/datum/sprite_accessory/ears/rosey - name = "tritail kitsune ears (Rosey)" - desc = "" - icon_state = "rosey" - ckeys_allowed = list("joey4298") - -/datum/sprite_accessory/ears/runac - name = "fennecsune ears (Runac)" - desc = "" - icon_state = "runac" - ckeys_allowed = list("rebcom1807") - -/datum/sprite_accessory/ears/shock - name = "pharoah hound ears (Shock Diamond)" - desc = "" - icon_state = "shock" - ckeys_allowed = list("icowom","cameron653") - -/* -//////////////////////////// -/ =--------------------= / -/ == Wing Definitions == / -/ =--------------------= / -//////////////////////////// -*/ -/datum/sprite_accessory/wing - name = "You should not see this..." - icon = 'icons/mob/sprite_accessories/wings.dmi' - dimension_x = 64 - do_colouration = 0 //Set to 1 to enable coloration using the tail color. - - color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 - var/extra_overlay // Icon state of an additional overlay to blend in. - var/extra_overlay2 - 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/show_species_tail = 1 // Just so // TODO - Seems not needed ~Leshana - var/desc = "You should not see this..." - var/ani_state // State when flapping/animated - var/spr_state // State when spreading wings w/o anim - var/extra_overlay_w // Flapping state for extra overlay - var/extra_overlay2_w - -/datum/sprite_accessory/wing/bat_black - name = "bat wings, black" - desc = "" - icon_state = "bat-black" - -/datum/sprite_accessory/wing/bat_color - name = "bat wings, colorable" - desc = "" - icon_state = "bat-color" - do_colouration = 1 - -/datum/sprite_accessory/wing/bat_red - name = "bat wings, red" - desc = "" - icon_state = "bat-red" - -/datum/sprite_accessory/wing/beewings - name = "bee wings" - desc = "" - icon_state = "beewings" - -/datum/sprite_accessory/wing/cyberdoe - name = "Cyber doe wing" - desc = "" - icon_state = "cyberdoe_s" - do_colouration = 0 - -/datum/sprite_accessory/wing/cyberdragon - name = "Cyber dragon wing (colorable)" - desc = "" - icon_state = "cyberdragon_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/cyberdragon_red - name = "Cyber dragon wing (red)" - desc = "" - icon_state = "cyberdragon_red_s" - do_colouration = 0 - -/datum/sprite_accessory/wing/drago_wing - name = "Cybernetic Dragon wings" - desc = "" - icon_state = "drago_wing" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "drago_wing_2" - -/datum/sprite_accessory/wing/dragonfly - name = "dragonfly" - desc = "" - icon_state = "dragonfly" - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/feathered - name = "feathered wings (colorable)" - desc = "" - icon_state = "feathered" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/feathered_medium - name = "medium feathered wings (colorable)" // Keekenox made these feathery things with a little bit more shape to them than the other wings. They are medium sized wing boys. - desc = "" - icon_state = "feathered2" - spr_state = "feathered2_spr" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/feathered_large //Made by Natje! - name = "large feathered wings (colorable)" - desc = "" - icon_state = "feathered3" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/harpywings - name = "harpy wings (colorable)" - desc = "" - icon_state = "harpywings" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/Harpywings_alt - name = "harpy wings alt, archeopteryx" - desc = "" - icon_state = "Harpywings_alt" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "Neckfur" - extra_overlay2 = "Harpywings_altmarkings" - -/datum/sprite_accessory/wing/harpywings_alt - name = "harpy wings alt, archeopteryx" - desc = "" - icon_state = "harpywings_alt" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "harpywings_altmarkings" - -/datum/sprite_accessory/wing/harpywings_alt_neckfur - name = "harpy wings alt, archeopteryx & neckfur" - desc = "" - icon_state = "harpywings_alt" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "harpywings_altmarkings" - extra_overlay2 = "neckfur" - -/datum/sprite_accessory/wing/Harpywings_Bat - name = "harpy wings, bat" - desc = "" - icon_state = "Harpywings_Bat" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "Neckfur" - extra_overlay2 = "Harpywings_BatMarkings" - -/datum/sprite_accessory/wing/harpywings_bat - name = "harpy wings, bat" - desc = "" - icon_state = "harpywings_bat" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "harpywings_batmarkings" - -/datum/sprite_accessory/wing/harpywings_bat_neckfur - name = "harpy wings, bat & neckfur" - desc = "" - icon_state = "harpywings_bat" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "harpywings_batmarkings" - extra_overlay2 = "neckfur" - -/datum/sprite_accessory/wing/leafeon - name = "Leaf Offshoots" - desc = "" - icon_state = "leaf_markings" - -/datum/sprite_accessory/wing/liquidfirefly_gazer //I g-guess this could be considered wings? - name = "gazer eyestalks" - desc = "" - icon_state = "liquidfirefly-eyestalks" - //ckeys_allowed = list("liquidfirefly","seiga") //At request. - -/datum/sprite_accessory/wing/mantis_arms //Same rationale as spider legs. - name = "mantis arms" - desc = "" - icon_state = "mantis-arms" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/mantis_arms_saturated - name = "mantis arms (saturated)" - desc = "" - icon_state = "mantis-arms_saturated" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/neckfur - name = "neck fur" - desc = "" - icon_state = "neckfur" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/nevrean - name = "nevrean wings/fantail" - desc = "" - icon_state = "nevrean_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/robo - name = "Robotic Wings" - desc = "" - icon_state = "Drago_wing" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/sepulchre_c_yw - name = "demon wings (colorable)" - desc = "" - icon_state = "sepulchre_wingsc" - do_colouration = 1 - -/datum/sprite_accessory/wing/snag - name = "xenomorph backplate" - desc = "" - icon_state = "snag-backplate" - -/datum/sprite_accessory/wing/spider_legs //Not really /WINGS/ but they protrude from the back, kinda. Might as well have them here. - name = "spider legs" - desc = "" - icon_state = "spider-legs" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/succubus - name = "succubus wings, black" - desc = "" - icon_state = "succubus-black" - -/datum/sprite_accessory/wing/succubus_purple - name = "succubus wings, purple" - desc = "" - icon_state = "succubus-purple" - -/datum/sprite_accessory/wing/succubus_red - name = "succubus wings, red" - desc = "" - icon_state = "succubus-red" - -//Moth Wings (We have a lot!) -/datum/sprite_accessory/wing/moth - name = "moth wings" - desc = "" - icon_state = "moth" - clothing_can_hide = FALSE - -/datum/sprite_accessory/wing/mothc - name = "moth wings (colorable)" - desc = "" - icon_state = "moth" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/moth_atlas - name = "atlas moth wings" - desc = "" - icon_state = "moth_atlas" - -/datum/sprite_accessory/wing/moth_burnt - name = "burnt moth wings" - desc = "" - icon_state = "moth_burnt" - -/datum/sprite_accessory/wing/moth_deathhead - name = "death's-head hawkmoth wings" - desc = "" - icon_state = "moth_deathhead" - -/datum/sprite_accessory/wing/moth_firewatch - name = "firewatch moth wings" - desc = "" - icon_state = "moth_firewatch" - front_behind_system = TRUE - -/datum/sprite_accessory/wing/moth_full - name = "moth antenna and wings" - desc = "" - icon_state = "moth_full" - -/datum/sprite_accessory/wing/moth_gothic - name = "gothic moth wings" - desc = "" - icon_state = "moth_gothic" - -/datum/sprite_accessory/wing/moth_jungle - name = "jungle moth wings" - desc = "" - icon_state = "moth_jungle" - -/datum/sprite_accessory/wing/moth_lover - name = "lover moth wings" - desc = "" - icon_state = "moth_lover" - -/datum/sprite_accessory/wing/moth_luna - name = "luna moth wings" - desc = "" - icon_state = "moth_luna" - -/datum/sprite_accessory/wing/moth_monarch - name = "monarch moth wings" - desc = "" - icon_state = "moth_monarch" - -/datum/sprite_accessory/wing/moth_moonfly - name = "moonfly moth wings" - desc = "" - icon_state = "moth_moonfly" - -/datum/sprite_accessory/wing/moth_oakworm - name = "oakworm moth wings" - desc = "" - icon_state = "moth_oakworm" - -/datum/sprite_accessory/wing/moth_plain - name = "plain moth wings" - desc = "" - icon_state = "moth_plain" - -/datum/sprite_accessory/wing/moth_poison - name = "poison moth wings" - desc = "" - icon_state = "moth_poison" - -/datum/sprite_accessory/wing/moth_ragged - name = "ragged moth wings" - desc = "" - icon_state = "moth_ragged" - -/datum/sprite_accessory/wing/moth_red - name = "red moth wings" - desc = "" - icon_state = "moth_red" - -/datum/sprite_accessory/wing/moth_royal - name = "royal moth wings" - desc = "" - icon_state = "moth_royal" - -/datum/sprite_accessory/wing/moth_snowy - name = "snowy moth wings" - desc = "" - icon_state = "moth_snowy" - -/datum/sprite_accessory/wing/moth_white - name = "white moth wings" - desc = "" - icon_state = "moth_white" - -/datum/sprite_accessory/wing/moth_whitefly - name = "whitefly moth wings" - desc = "" - icon_state = "moth_whitefly" - -/datum/sprite_accessory/wing/moth_witchwing - name = "witchwing moth wings" - desc = "" - icon_state = "moth_witchwing" - -/* -//////////////////////////// -/ =--------------------= / -/ == Tail Definitions == / -/ =--------------------= / -//////////////////////////// -*/ -/datum/sprite_accessory/tail - name = "You should not see this..." - icon = 'icons/mob/sprite_accessories/tails.dmi' - do_colouration = 0 //Set to 1 to enable coloration using the tail color. - - color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 - var/extra_overlay // Icon state of an additional overlay to blend in. - var/extra_overlay2 //Tertiary. - var/show_species_tail = 0 // If false, do not render species' tail. - var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it - var/desc = "You should not see this..." - var/ani_state // State when wagging/animated - var/extra_overlay_w // Wagging state for extra overlay - var/extra_overlay2_w // Tertiary wagging. - var/list/hide_body_parts = list() //Uses organ tag defines. Bodyparts in this list do not have their icons rendered, allowing for more spriter freedom when doing taur/digitigrade stuff. - var/icon/clip_mask_icon = null //Icon file used for clip mask. - var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits. - var/icon/clip_mask = null //Instantiated clip mask of given icon and state - -/datum/sprite_accessory/tail/New() - . = ..() - if(clip_mask_icon && clip_mask_state) - clip_mask = icon(icon = clip_mask_icon, icon_state = clip_mask_state) - -// Everyone tails -/datum/sprite_accessory/tail/bear - name = "bear, colorable" - desc = "" - icon_state = "bear" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/bear_brown - name = "bear, brown" - desc = "" - icon_state = "bear-brown" - -/datum/sprite_accessory/tail/beaver - name = "beaver tail, colorable" - desc = "" - icon_state = "beaver" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/beethorax - name = "bee thorax" - desc = "" - icon_state = "beethorax" - -/datum/sprite_accessory/tail/blackwolf - name = "wolf, black" - desc = "" - icon_state = "wolf" - -//Buggo Abdomens! -/datum/sprite_accessory/tail/buggo - name = "Bug abdomen, colorable" - desc = "" - icon_state = "buggo_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/buggowag - name = "Bug abdomen, colorable, vwag change" - desc = "" - icon_state = "buggo_s" - ani_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/buggo_bee - name = "Bug abdomen, bee top, dual-colorable" - desc = "" - icon_state = "buggo_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobee_markings" - -/datum/sprite_accessory/tail/buggo_beefull - name = "Bug abdomen, bee full, dual-colorable" - desc = "" - icon_state = "buggo_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobeefull_markings" - -/datum/sprite_accessory/tail/buggo_beefullwag - name = "Bug abdomen, bee full, dual color, vwag" - desc = "" - icon_state = "buggo_s" - ani_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobeefull_markings" - extra_overlay_w = "buggofatbeefull_markings" - -/datum/sprite_accessory/tail/buggo_beewag - name = "Bug abdomen, bee top, dual color, vwag" - desc = "" - icon_state = "buggo_s" - ani_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobee_markings" - extra_overlay_w = "buggofatbee_markings" - -/datum/sprite_accessory/tail/buggo_firefly - name = "Bug abdomen, firefly, dual-colorable" - desc = "" - icon_state = "buggo_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofirefly_markings" - -/datum/sprite_accessory/tail/buggo_fireflywag - name = "Bug abdomen, firefly, dual color, vwag" - desc = "" - icon_state = "buggo_s" - ani_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofirefly_markings" - extra_overlay_w = "buggofatfirefly_markings" - -/datum/sprite_accessory/tail/buggo_under - name = "Bug abdomen, underside, dual-colorable" - desc = "" - icon_state = "buggo_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggounder_markings" - -/datum/sprite_accessory/tail/buggo_underwag - name = "Bug abdomen, underside, dual color, vwag" - desc = "" - icon_state = "buggo_s" - ani_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggounder_markings" - extra_overlay_w = "buggofatunder_markings" - -/datum/sprite_accessory/tail/buggofat - name = "Fat bug abdomen, colorable" - desc = "" - icon_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/buggofat_bee - name = "Fat bug abdomen, bee top, dual-colorable" - desc = "" - icon_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatbee_markings" - -/datum/sprite_accessory/tail/buggofat_beefull - name = "Fat bug abdomen, bee full, dual-colorable" - desc = "" - icon_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatbeefull_markings" - -/datum/sprite_accessory/tail/buggofat_firefly - name = "Fat bug abdomen, firefly, dual-colorable" - desc = "" - icon_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatfirefly_markings" - -/datum/sprite_accessory/tail/buggofat_under - name = "Fat bug abdomen, underside, dual-colorable" - desc = "" - icon_state = "buggofat_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatunder_markings" - -//Vass buggo variants! -/datum/sprite_accessory/tail/buggovass - name = "Bug abdomen, vass, colorable" - desc = "" - icon_state = "buggo_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/buggovass_wag - name = "Bug abdomen, vass, colorable, vwag change" - desc = "" - icon_state = "buggo_vass_s" - ani_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/buggovass_bee - name = "Bug abdomen, bee top, dc, vass" - desc = "" - icon_state = "buggo_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobee_vass_markings" - -/datum/sprite_accessory/tail/buggovass_beewag - name = "Bug abdomen, bee top, dc, vass, vwag" - desc = "" - icon_state = "buggo_vass_s" - ani_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobee_vass_markings" - extra_overlay_w = "buggofatbee_vass_markings" - -/datum/sprite_accessory/tail/buggovass_beefull - name = "Bug abdomen, bee full, dc, vass" - desc = "" - icon_state = "buggo_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobeefull_vass_markings" - -/datum/sprite_accessory/tail/buggovass_beefullwag - name = "Bug abdomen, bee full, dc, vass, vwag" - desc = "" - icon_state = "buggo_vass_s" - ani_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggobeefull_vass_markings" - extra_overlay_w = "buggofatbeefull_vass_markings" - -/datum/sprite_accessory/tail/buggovass_firefly - name = "Bug abdomen, firefly, dc, vass" - desc = "" - icon_state = "buggo_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofirefly_vass_markings" - -/datum/sprite_accessory/tail/buggovass_fireflywag - name = "Bug abdomen, firefly, dc, vass, vwag" - desc = "" - icon_state = "buggo_vass_s" - ani_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofirefly_vass_markings" - extra_overlay_w = "buggofatfirefly_vass_markings" - -/datum/sprite_accessory/tail/buggovass_under - name = "Bug abdomen, underside, dc, vass" - desc = "" - icon_state = "buggo_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggounder_vass_markings" - -/datum/sprite_accessory/tail/buggovass_underwag - name = "Bug abdomen, underside, dc, vass, vwag" - desc = "" - icon_state = "buggo_vass_s" - ani_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggounder_vass_markings" - extra_overlay_w = "buggofatunder_vass_markings" - -/datum/sprite_accessory/tail/buggovassfat - name = "Fat bug abdomen, vass, colorable" - desc = "" - icon_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/buggovassfat_bee - name = "Fat bug abdomen, bee top, dc, vass" - desc = "" - icon_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatbee_vass_markings" - -/datum/sprite_accessory/tail/buggovassfat_beefull - name = "Fat bug abdomen, bee full, dc, vass" - desc = "" - icon_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatbeefull_vass_markings" - -/datum/sprite_accessory/tail/buggovassfat_firefly - name = "Fat bug abdomen, firefly, dc, vass" - desc = "" - icon_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatfirefly_vass_markings" - -/datum/sprite_accessory/tail/buggovassfat_under - name = "Fat bug abdomen, underside, dc, vass" - desc = "" - icon_state = "buggofat_vass_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "buggofatunder_vass_markings" - -/datum/sprite_accessory/tail/bunny - name = "bunny, colorable" - desc = "" - icon_state = "bunny" - do_colouration = 1 - -/datum/sprite_accessory/tail/cat_big - name = "kitty (big), colorable" - desc = "" - icon_state = "catbig" - ani_state = "catbig_wag" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - front_behind_system = TRUE - -/datum/sprite_accessory/tail/chameleon - name = "Chameleon, colorable" - desc = "" - icon_state = "chameleon" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/cow - name = "cow tail, colorable" - desc = "" - icon_state = "cow" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/crossfox - name = "cross fox" - desc = "" - icon_state = "crossfox" - -/datum/sprite_accessory/tail/curltail - name = "curltail (vwag)" - desc = "" - icon_state = "curltail" - ani_state = "curltail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "curltail_mark" - extra_overlay_w = "curltail_mark_w" - -/datum/sprite_accessory/tail/deertail - name = "deer tail, dual-color" - desc = "" - icon_state = "deertail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "deertail_mark" - -/datum/sprite_accessory/tail/doublekitsune - name = "double kitsune tail, colorable" - desc = "" - icon_state = "doublekitsune" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/dragon - name = "dragon, colorable" - desc = "" - icon_state = "dragon" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/Easterntail - name = "Eastern Dragon (Animated)" - desc = "" - icon_state = "Easterntail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "EasterntailColorTip" - ani_state = "Easterntail_w" - extra_overlay_w = "EasterntailColorTip_w" - -/datum/sprite_accessory/tail/eboop - name = "EGN mech tail (dual color)" - desc = "" - icon_state = "eboop" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "eboop_mark" - -/datum/sprite_accessory/tail/fantail - name = "avian fantail, colorable" - desc = "" - icon_state = "fantail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/fennec_tail - name = "Fennec tail" - desc = "" - icon_state = "fennec_tail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/fox_tail - name = "Fox tail" - desc = "" - icon_state = "fox_tail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/fox_tail_plain - name = "Fox tail" - desc = "" - icon_state = "fox_tail_plain_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/foxtail - name = "Fox" - desc = "" //leaving this just in case i break something if i just don't include a blank description because this codebase is akin to a house of cards - icon_state = "foxtail_but_good" - extra_overlay = "foxtail_but_good-tips" - do_colouration = TRUE - color_blend_mode = ICON_MULTIPLY - ani_state = "foxtail_but_good_w" - extra_overlay_w = "foxtail_but_good-tips_w" - -/datum/sprite_accessory/tail/horse - name = "horse tail, colorable" - desc = "" - icon_state = "horse" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/invisible - name = "hide species-sprite tail" - icon = null - icon_state = null - -/datum/sprite_accessory/tail/jackal_bicolor - name = "jackal, dual-colorable" - desc = "" - icon_state = "jackal_bicolor" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "jackal_bicolor_extra" - -/datum/sprite_accessory/tail/ketrai_wag - name = "fennix tail (vwag)" - desc = "" - icon_state = "ketraitail" - ani_state = "ketraitail_w" - //ckeys_allowed = list("ketrai") //They requested it to be enabled for everyone. - -/datum/sprite_accessory/tail/kitty - name = "kitty, colorable, downwards" - desc = "" - icon_state = "kittydown" - ani_state = "kittydown_wag" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/kitty_tg - name = "kitty, colorable, main" - desc = "" - icon_state = "kittytg" - ani_state = "kittytg_wag" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/kittyup - name = "kitty, colorable, upwards" - desc = "" - icon_state = "kittyup" - ani_state = "kittyup_wag" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/leafeon - name = "Leaf Tail" - desc = "" - icon_state = "leaf_tail" - -/datum/sprite_accessory/tail/liontail - name = "Lion Tail (vwag)" - desc = "" - icon_state = "liontail" - ani_state = "liontail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "liontail_markings" - extra_overlay_w = "liontail_markings_w" - -/datum/sprite_accessory/tail/lizard_tail_dark_tiger - name = "Lizard Tail (Dark Tiger)" - desc = "" - icon_state = "lizard_tail_dark_tiger" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/lizard_tail_light_tiger - name = "Lizard Tail (Light Tiger)" - desc = "" - icon_state = "lizard_tail_light_tiger" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/lizard_tail_smooth - name = "Lizard Tail (Smooth)" - desc = "" - icon_state = "lizard_tail_smooth" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/lizard_tail_spiked - name = "Lizard Tail (Spiked)" - desc = "" - icon_state = "lizard_tail_spiked" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/mouse - name = "mouse, colorable" - desc = "" - icon_state = "mouse" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/mouse_pink - name = "mouse, pink" - desc = "" - icon_state = "mouse-pink" - -/datum/sprite_accessory/tail/nevreandc - name = "nevrean tail, dual-color" - desc = "" - icon_state = "nevreantail_dc" - extra_overlay = "nevreantail_dc_tail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/nevreanwagdc - name = "nevrean wagtail, dual-color" - desc = "" - icon_state = "wagtail" - extra_overlay = "wagtail_dc_tail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/nevreanwagdc_alt - name = "nevrean wagtail, marked, dual-color" - desc = "" - icon_state = "wagtail2_dc" - extra_overlay = "wagtail2_dc_mark" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/newtailmaw - name = "new tailmaw (vwag)" - desc = "" - icon_state = "newtailmaw" - ani_state = "newtailmaw_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/otietail - name = "otie tail (vwag)" - desc = "" - icon_state = "otie" - ani_state = "otie_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/Plugtail - name = "Synthetic plug tail" - desc = "" - icon_state = "Plugtail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "PlugtailMarking" - extra_overlay2 = "PlugtailMarking2" - -/datum/sprite_accessory/tail/redpanda - name = "red panda" - desc = "" - icon_state = "redpanda" - -/datum/sprite_accessory/tail/ringtail - name = "ringtail, colorable" - desc = "" - icon_state = "ringtail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "ringtail_mark" - -/datum/sprite_accessory/tail/robo_tail - name = "Robo Dragon Tail" - desc = "" - icon_state = "robo_dragon" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "robodragon_b" - -/datum/sprite_accessory/tail/satyr - name = "goat legs, colorable" - desc = "" - icon_state = "satyr" - color_blend_mode = ICON_MULTIPLY - do_colouration = 1 - hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case. - clip_mask_icon = 'icons/mob/sprite_accessories/taurs.dmi' - clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms. - -/datum/sprite_accessory/tail/Segmentedlights - name = "Segmented tail, animated synth" - desc = "" - icon_state = "Segmentedtail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "Segmentedlights" - ani_state = "Segmentedtail_w" - extra_overlay_w = "Segmentedlights_w" - -/datum/sprite_accessory/tail/Segmentedtail - name = "Segmented tail, animated" - desc = "" - icon_state = "Segmentedtail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "Segmentedtailmarking" - ani_state = "Segmentedtail_w" - extra_overlay_w = "Segmentedtailmarking_w" - -/datum/sprite_accessory/tail/sergaltaildc - name = "sergal, dual-color" - desc = "" - icon_state = "sergal" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "sergal_mark" - -/datum/sprite_accessory/tail/shorttail - name = "shorttail (vwag)" - desc = "" - icon_state = "straighttail" - ani_state = "straighttail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/skunktail - name = "skunk, dual-color" - desc = "" - icon_state = "skunktail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "skunktail_mark" - -/datum/sprite_accessory/tail/snag - name = "xenomorph tail 1" - desc = "" - icon_state = "snag" - -/datum/sprite_accessory/tail/snaketail - name = "snake tail, colorable" - desc = "" - icon_state = "snaketail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/sneptail - name = "Snep/Furry Tail (vwag)" - desc = "" - icon_state = "sneptail" - ani_state = "sneptail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "sneptail_mark" - extra_overlay_w = "sneptail_mark_w" - -/datum/sprite_accessory/tail/spade_color - name = "spade-tail (colorable)" - desc = "" - icon_state = "spadetail-black" - do_colouration = 1 - -/datum/sprite_accessory/tail/squirrel - name = "squirrel, colorable" - desc = "" - icon_state = "squirrel" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/squirrel_orange - name = "squirel, orange" - desc = "" - icon_state = "squirrel-orange" - -/datum/sprite_accessory/tail/squirrel_red - name = "squirrel, red" - desc = "" - icon_state = "squirrel-red" - -/datum/sprite_accessory/tail/stripey - name = "stripey taj, colorable" - desc = "" - icon_state = "stripeytail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "stripeytail_mark" - -/datum/sprite_accessory/tail/stripeytail_brown - name = "stripey taj, brown" - desc = "" - icon_state = "stripeytail-brown" - -/datum/sprite_accessory/tail/synthtail_static - name = "Synthetic lizard tail" - desc = "" - icon_state = "synthtail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/synthtail_vwag - name = "Synthetic lizard tail (vwag)" - desc = "" - icon_state = "synthtail" - ani_state = "synthtail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/tail_smooth - name = "Smooth Lizard Tail, Colorable" - desc = "" - icon_state = "tail_smooth" - ani_state = "tail_smooth_w" - do_colouration = 1 - -/datum/sprite_accessory/tail/tailmaw - name = "tailmaw, colorable" - desc = "" - icon_state = "tailmaw" - color_blend_mode = ICON_MULTIPLY - do_colouration = 1 - -/datum/sprite_accessory/tail/takahiro_kitsune - name = "Takahiro Kitsune Tails" //takahiro had five tails i just wanted to follow the 'T' naming convention vs. tamamo and triple - desc = "" - icon_state = "takahiro-kitsunetails" - extra_overlay = "takahiro-kitsunetails-tips" - do_colouration = TRUE - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/tamamo_kitsune - name = "Tamamo Kitsune Tails" //Tamamo-no-Tiro, let it be known! - desc = "" - icon_state = "tamamo-kitsunetails" - extra_overlay = "tamamo-kitsunetails-tips" - do_colouration = TRUE - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/tentacles - name = "Tentacles" - desc = "" - icon_state = "tentacles" - do_colouration = TRUE - color_blend_mode = ICON_MULTIPLY - ani_state = "tentacles_wag" - -/datum/sprite_accessory/tail/tesh_pattern_fem - name = "Teshari female tail pattern" - desc = "" - icon_state = "teshtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_fem_tail" - -/datum/sprite_accessory/tail/tesh_pattern_fem_alt - name = "Teshari male tail alt. pattern" - desc = "" - icon_state = "teshtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_fem_alt" - -/datum/sprite_accessory/tail/tesh_pattern_male - name = "Teshari male tail pattern" - desc = "" - icon_state = "teshtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_male_tail" - -/datum/sprite_accessory/tail/tesh_pattern_male_alt - name = "Teshari male tail alt. pattern" - desc = "" - icon_state = "teshtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "teshpattern_male_alt" - -/datum/sprite_accessory/tail/teshari_fluffytail - name = "Teshari tail" - desc = "" - icon_state = "teshari_fluffytail" - extra_overlay = "teshari_fluffytail_mark" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/tiger_new - name = "tiger tail (vwag)" - desc = "" - icon_state = "tigertail" - ani_state = "tigertail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "tigertail_mark" - extra_overlay_w = "tigertail_mark_w" - -/datum/sprite_accessory/tail/tiger_white - name = "tiger, colorable" - desc = "" - icon_state = "tiger" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "tigerinnerwhite" - -/datum/sprite_accessory/tail/triple_kitsune - name = "Triple Kitsune Tails" - desc = "" - icon_state = "triple-kitsunetails" - extra_overlay = "triple-kitsunetails-tips" - do_colouration = TRUE - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/vulp_new - name = "new vulp tail (vwag)" - desc = "" - icon_state = "vulptail" - ani_state = "vulptail_w" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "vulptail_mark" - extra_overlay_w = "vulptail_mark_w" - -/datum/sprite_accessory/tail/vulpan_alt - name = "vulpkanin alt style, colorable" - desc = "" - icon_state = "vulptail_alt" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/wagtail - name = "avian wagtail, colorable" - desc = "" - icon_state = "wagtail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/wartacosushi_tail //brightened +20RGB from matching roboparts - name = "Ward-Takahashi Tail" - desc = "" - icon_state = "wardtakahashi_vulp" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/wartacosushi_tail_dc - name = "Ward-Takahashi Tail, dual-color" - desc = "" - icon_state = "wardtakahashi_vulp_dc" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "wardtakahashi_vulp_dc_mark" - -/datum/sprite_accessory/tail/wolf_grey - name = "wolf, grey" - desc = "" - icon_state = "wolf-grey" - -/datum/sprite_accessory/tail/wolf_green - name = "wolf, green" - desc = "" - icon_state = "wolf-green" - -/datum/sprite_accessory/tail/wisewolf - name = "wolf, wise" - desc = "" - icon_state = "wolf-wise" - -/datum/sprite_accessory/tail/wolf - name = "wolf, colorable" - desc = "" - icon_state = "wolf" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "wolfinner" - -/datum/sprite_accessory/tail/xenotail - name = "xenomorph tail 2" - desc = "" - icon_state = "xenotail" - -/datum/sprite_accessory/tail/xenotail_fullcolour - name = "xenomorph tail (fully colourable)" - desc = "" - icon_state = "xenotail_fullcolour" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/xenotailalt_fullcolour - name = "xenomorph tail alt. (fully colourable)" - desc = "" - icon_state = "xenotailalt_fullcolour" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/zenghu_taj - name = "Zeng-Hu Tajaran Synth tail" - desc = "" - icon_state = "zenghu_taj" - -/datum/sprite_accessory/tail/ztail - name = "jagged flufftail" - desc = "" - icon_state = "ztail" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -//For all species tails. Includes haircolored tails. -/datum/sprite_accessory/tail/special - name = "Blank tail. Do not select." - icon = 'icons/effects/species_tails_vr.dmi' - - - -/datum/sprite_accessory/tail/special/akula - name = "akula tail" - desc = "" - icon_state = "sharktail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/armalis - name = "armalis tail" - desc = "" - icon_state = "armalis_tail_humanoid_s" - -/datum/sprite_accessory/tail/special/armalishc - name = "armalis tail, colorable" - desc = "" - icon_state = "armalis_tail_humanoid_hc_s" - do_colouration = 1 - -/datum/sprite_accessory/tail/special/monkeyhc - name = "monkey tail, colorable" - desc = "" - icon_state = "chimptail_hc_s" - do_colouration = 1 - -/datum/sprite_accessory/tail/special/nevrean - name = "nevrean tail" - desc = "" - icon_state = "nevreantail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/akulahc - name = "akula tail, colorable" - desc = "" - icon_state = "sharktail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/fennechc - name = "flatland zorren tail, colorable" - desc = "" - icon_state = "fentail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/foxhc - name = "highlander zorren tail, colorable" - desc = "" - icon_state = "foxtail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/monkey - name = "monkey tail" - desc = "" - icon_state = "chimptail_s" - -/datum/sprite_accessory/tail/special/nevreanhc - name = "nevrean tail, colorable" - desc = "" - icon_state = "nevreantail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/sergal - name = "sergal tail" - desc = "" - icon_state = "sergtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/sergalhc - name = "sergal tail, colorable" - desc = "" - icon_state = "sergtail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/tajaran - name = "tajaran tail" - desc = "" - icon_state = "tajtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/tajaranhc - name = "tajaran tail, colorable" - desc = "" - icon_state = "tajtail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/tajaran_damaged - name = "tajaran tail, damaged/short" - icon_state = "tajtail_damaged_s" - species_allowed = list(SPECIES_TAJ) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tajaran_stubby - name = "tajaran tail, stubby" - icon_state = "tajtail_stubby_s" - species_allowed = list(SPECIES_TAJ) - color_blend_mode = ICON_ADD - - -/datum/sprite_accessory/tail/special/teshtailfeathered - name = "Teshari tail alt" - desc = "" - icon_state = "teshtail_s" - extra_overlay = "teshtail_feathers_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/tesharitail_noplume - name = "teshari tail, no plumage" - icon_state = "teshtail_noplume_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_noplume_feathered - name = "teshari tail, no plumage w/feathers" - icon_state = "teshtail_noplume_s" - extra_overlay = "teshtail_noplume_feathers_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged - name = "teshari tail, damaged" - icon_state = "teshtail_damaged_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_feathered - name = "teshari tail, damaged w/feathers" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_feathers_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_unbranded - name = "teshari tail, damaged w/ unbranded prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_prosthetic_unbranded_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_unbranded_feathered - name = "teshari tail, damaged w/feathers + unbranded prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_feathers_s" - extra_overlay2 = "teshtail_damaged_prosthetic_unbranded_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_cenilimi - name = "teshari tail, damaged w/ Cenilimi Cybernetics prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_prosthetic_cenilimi_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_cenilimi_feathered - name = "teshari tail, damaged w/feathers + Cenilimi Cybernetics prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_feathers_s" - extra_overlay2 = "teshtail_damaged_prosthetic_cenilimi_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_wood - name = "teshari tail, damaged w/ wooden prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_prosthetic_wood_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_wood_feathered - name = "teshari tail, damaged w/feathers + wooden prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_feathers_s" - extra_overlay2 = "teshtail_damaged_prosthetic_wood_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_sifwood - name = "teshari tail, damaged w/ Sivian wooden prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_prosthetic_wood_sif_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_damaged_sifwood_feathered - name = "teshari tail, damaged w/feathers + Sivian wooden prosthetic" - icon_state = "teshtail_damaged_s" - extra_overlay = "teshtail_damaged_feathers_s" - extra_overlay2 = "teshtail_damaged_prosthetic_wood_sif_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby - name = "teshari tail, stubby" - icon_state = "teshtail_stubby_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_feathered - name = "teshari tail, stubby w/feathers" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_feathers_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_unbranded - name = "teshari tail, stubby w/ unbranded prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_prosthetic_unbranded_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_unbranded_feathered - name = "teshari tail, stubby w/ feathers + unbranded prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_feathers_s" - extra_overlay2 = "teshtail_stubby_prosthetic_unbranded_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_cenilimi - name = "teshari tail, stubby w/ Cenilimi Cybernetics prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_prosthetic_cenilimi_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_cenilimi_feathered - name = "teshari tail, stubby w/ feathers + Cenilimi Cybernetics prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_feathers_s" - extra_overlay2 = "teshtail_stubby_prosthetic_cenilimi_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_wood - name = "teshari tail, stubby w/ wooden prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_prosthetic_wood_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_wood_feathered - name = "teshari tail, stubby w/feathers + wooden prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_feathers_s" - extra_overlay2 = "teshtail_stubby_prosthetic_wood_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_sifwood - name = "teshari tail, stubby w/ Sivian wooden prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_prosthetic_wood_sif_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_stubby_sifwood_feathered - name = "teshari tail, stubby w/feathers + Sivian wooden prosthetic" - icon_state = "teshtail_stubby_s" - extra_overlay = "teshtail_stubby_feathers_s" - extra_overlay2 = "teshtail_stubby_prosthetic_wood_sif_s" - species_allowed = list(SPECIES_TESHARI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/tesharitail_prosthetic_unbranded - name = "teshari tail, unbranded prosthetic" - icon_state = "teshtail_prosthetic_unbranded_s" - species_allowed = list(SPECIES_TESHARI) - do_colouration = FALSE - -/datum/sprite_accessory/tail/special/tesharitail_prosthetic_cenilimi - name = "teshari tail, Cenilimi Cybernetics prosthetic" - icon_state = "teshtail_prosthetic_cenilimi_s" - species_allowed = list(SPECIES_TESHARI) - do_colouration = FALSE - -/datum/sprite_accessory/tail/special/unathi - name = "unathi tail" - desc = "" - icon_state = "sogtail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/unathihc - name = "unathi tail, colorable" - desc = "" - icon_state = "sogtail_hc_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/unathi_damaged - name = "unathi tail, damaged" - icon_state = "unathitail_damaged_s" - species_allowed = list(SPECIES_UNATHI) - color_blend_mode = ICON_ADD - -/datum/sprite_accessory/tail/special/unathi_stubby - name = "unathi tail, stubby" - icon_state = "unathitail_stubby_s" - species_allowed = list(SPECIES_UNATHI) - color_blend_mode = ICON_ADD - - - -/datum/sprite_accessory/tail/special/vulpan - name = "vulpkanin, colorable" - desc = "" - icon_state = "vulptail_s" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/tail/special/xenodrone - name = "xenomorph drone tail" - desc = "" - icon_state = "xenos_drone_tail_s" - -/datum/sprite_accessory/tail/special/xenodronehc - name = "xenomorph drone tail, colorable" - desc = "" - icon_state = "xenos_drone_tail_hc_s" - do_colouration = 1 - -/datum/sprite_accessory/tail/special/xenohunter - name = "xenomorph hunter tail" - desc = "" - icon_state = "xenos_hunter_tail_s" - -/datum/sprite_accessory/tail/special/xenohunterhc - name = "xenomorph hunter tail, colorable" - desc = "" - icon_state = "xenos_hunter_tail_hc_s" - do_colouration = 1 - -/datum/sprite_accessory/tail/special/xenoqueen - name = "xenomorph queen tail" - desc = "" - icon_state = "xenos_queen_tail_s" - -/datum/sprite_accessory/tail/special/xenoqueenhc - name = "xenomorph queen tail, colorable" - desc = "" - icon_state = "xenos_queen_tail_hc_s" - do_colouration = 1 - -/datum/sprite_accessory/tail/special/xenosentinel - name = "xenomorph sentinel tail" - desc = "" - icon_state = "xenos_sentinel_tail_s" - -/datum/sprite_accessory/tail/special/xenosentinelhc - name = "xenomorph sentinel tail, colorable" - desc = "" - icon_state = "xenos_sentinel_tail_hc_s" - do_colouration = 1 - - - -// Species-unique tails -/datum/sprite_accessory/tail/shadekin_short - name = "Shadekin Short Tail, colorable" - desc = "" - icon_state = "shadekin-short" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - apply_restrictions = TRUE - species_allowed = list(SPECIES_SHADEKIN) - -//Snowflake/donator Tails. -/datum/sprite_accessory/tail/aronai - name = "aronai tail (Aronai)" - desc = "" - icon_state = "aronai" - ckeys_allowed = list("arokha") - -/datum/sprite_accessory/tail/cabletail - name = "cabletail" - desc = "cabletail" - icon_state = "cabletail" - ckeys_allowed = list("tucker0666") - -/datum/sprite_accessory/tail/featherfluff_tail - name = "featherfluff_tail" - desc = "" - icon_state = "featherfluff_tail" - ckeys_allowed = list("tucker0666") - -/datum/sprite_accessory/tail/holly - name = "tigress tail (Holly)" - desc = "" - icon_state = "tigresstail" - ckeys_allowed = list("hoodoo") - -/datum/sprite_accessory/tail/miria_fluffdragon - name = "fluffdragon tail (Miria Masters)" - desc = "" - icon_state = "miria-fluffdragontail" - ckeys_allowed = list("miriamasters") - -/datum/sprite_accessory/tail/miria_kitsune - name = "Black kitsune tails (Miria Masters)" - desc = "" - icon_state = "miria-kitsunetail" - ckeys_allowed = list("miriamasters") - -/datum/sprite_accessory/tail/molenar_deathclaw - name = "deathclaw bits (Molenar)" - desc = "" - icon_state = "molenar-deathclaw" - ckeys_allowed = list("molenar","silvertalismen","jertheace") - -/datum/sprite_accessory/tail/molenar_kitsune - name = "quintail kitsune tails (Molenar)" - desc = "" - icon_state = "molenar-kitsune" - ckeys_allowed = list("molenar") - -/datum/sprite_accessory/tail/reika //Leaving this since it was too hard to split the wings from the tail. - name = "fox tail (+ beewings) (Reika)" - desc = "" - icon_state = "reika" - ckeys_allowed = list("rikaru19xjenkins") - -/datum/sprite_accessory/tail/rosey - name = "tritail kitsune tails (Rosey)" - desc = "" - icon_state = "rosey_three" - ckeys_allowed = list("joey4298") - -/datum/sprite_accessory/tail/rosey2 - name = "pentatail kitsune tails (Rosey)" //I predict seven tails next. ~CK - desc = "" - icon_state = "rosey_five" - ckeys_allowed = list("joey4298") - -/datum/sprite_accessory/tail/runac - name = "fennecsune tails (Runac)" - desc = "" - icon_state = "runac" - ckeys_allowed = list("rebcom1807") - -/datum/sprite_accessory/tail/scree - name = "green taj tail (Scree)" - desc = "" - icon_state = "scree" - ckeys_allowed = list("scree") diff --git a/code/modules/vore/fluffstuff/custom_items.dm b/code/modules/vore/fluffstuff/custom_items.dm index 17d2f1236d5..69d44853af1 100644 --- a/code/modules/vore/fluffstuff/custom_items.dm +++ b/code/modules/vore/fluffstuff/custom_items.dm @@ -587,481 +587,11 @@ to_chat(user, "This isn't even an ID card you idiot.") return -//WickedTempest: Chakat Tempest -/obj/item/reagent_containers/hypospray/vial/tempest - name = "Tempest's Hypospray" - desc = "A custom-made MKII hypospray belonging to Chakat Tempest. There's small print engraved on the handle: A medicine-cat has no time for doubt. Act now, act swiftly." - icon = 'icons/vore/custom_items_vr.dmi' - item_state = "temphypo" - icon_state = "temphypo" - -//WickedTempest: Chakat Tempest -/obj/item/storage/backpack/saddlebag/tempest - name = "Tempest's Saddlebags" - desc = "A custom-made set of saddlebags, tailored to Chakat Tempest's exact dimensions, and taste in color! One one side, there's small print stitched in: ...to carry the weight of any responsibility, burden or task." - icon = 'icons/vore/custom_items_vr.dmi' - icon_override = 'icons/vore/custom_items_vr.dmi' - item_state = "tempestsaddlebag" - icon_state = "tempestbag" - max_storage_space = INVENTORY_DUFFLEBAG_SPACE //Since they play a macro character, no reason to put custom slowdown code on here. - slowdown = 0 - taurtype = /datum/sprite_accessory/tail/taur/feline/tempest - no_message = "These saddlebags seem to be fitted for someone else, and keep slipping off!" - action_button_name = "Toggle Mlembulance Mode" - var/ambulance = FALSE - var/datum/looping_sound/ambulance/soundloop - var/ambulance_state = FALSE - var/ambulance_last_switch = 0 - -/obj/item/storage/backpack/saddlebag/tempest/Initialize(mapload) - soundloop = new(list(src), FALSE) - return ..() - -/obj/item/storage/backpack/saddlebag/tempest/Destroy() - QDEL_NULL(soundloop) - return ..() - -/obj/item/storage/backpack/saddlebag/tempest/ui_action_click() - ambulance = !(ambulance) - if(ambulance) - START_PROCESSING(SSobj, src) - item_state = "tempestsaddlebag-amb" - icon_state = "tempestbag-amb" - if (ismob(loc)) - var/mob/M = loc - M.update_inv_back() - ambulance_state = FALSE - set_light(2, 1, "#FF0000") - soundloop.start() - else - item_state = "tempestsaddlebag" - icon_state = "tempestbag" - if (ismob(loc)) - var/mob/M = loc - M.update_inv_back() - set_light(0) - soundloop.stop() - -/obj/item/storage/backpack/saddlebag/tempest/process(delta_time) - if(!ambulance) - STOP_PROCESSING(SSobj, src) - return - if(world.time - ambulance_last_switch > 15) - ambulance_state = !(ambulance_state) - var/newlight = "#FF0000" - if(ambulance_state) - newlight = "#0000FF" - if (ismob(loc)) - var/mob/M = loc - M.update_inv_back() - set_light(2, 1, newlight) - ambulance_last_switch = world.time - /datum/looping_sound/ambulance mid_sounds = list('sound/items/amulanceweeoo.ogg'=1) mid_length = 20 volume = 25 -//WickedTempest: Chakat Tempest -/obj/item/implant/reagent_generator/tempest - generated_reagents = list("milk" = 2) - reagent_name = "milk" - usable_volume = 1000 - - empty_message = list("Your breasts are almost completely drained!") - full_message = list("Your teats feel heavy and swollen!") - emote_descriptor = list("squeezes milk", "tugs on Tempest's breasts, milking them") - self_emote_descriptor = list("squeeze") - random_emote = list("moos quietly") - verb_name = "Milk" - verb_desc = "Grab Tempest's nipples and milk them into a container! May cause blushing and groaning." - -/obj/item/implanter/reagent_generator/tempest - implant_type = /obj/item/implant/reagent_generator/tempest - - -//Hottokeeki: Belle Day -/obj/item/implant/reagent_generator/belle - generated_reagents = list("milk" = 2) - reagent_name = "milk" - usable_volume = 5000 - - empty_message = list("Your breasts and or udder feel almost completely drained!", "You're feeling a liittle on the empty side...") - full_message = list("You're due for a milking; your breasts and or udder feel heavy and swollen!", "Looks like you've got some full tanks!") - emote_descriptor = list("squeezes milk", "tugs on Belle's breasts/udders, milking them", "extracts milk") - self_emote_descriptor = list("squeeze", "extract") - random_emote = list("moos", "mrours", "groans softly") - verb_name = "Milk" - verb_desc = "Obtain Belle's milk and put it into a container! May cause blushing and groaning, or arousal." - -/obj/item/implanter/reagent_generator/belle - implant_type = /obj/item/implant/reagent_generator/belle - -//Gowst: Eldi Moljir -//Eldi iz coolest elf-dorf. -/obj/item/implant/reagent_generator/eldi - name = "lactation implant" - desc = "This is an implant that allows the user to lactate." - generated_reagents = list("milk" = 2) - reagent_name = "milk" - usable_volume = 1000 - - empty_message = list("Your breasts feel unusually empty.", "Your chest feels lighter - your milk supply is empty!", "Your milk reserves have run dry.", "Your grateful nipples ache as the last of your milk leaves them.") - full_message = list("Your breasts ache badly - they are swollen and feel fit to burst!", "You need to be milked! Your breasts feel bloated, eager for release.", "Your milky breasts are starting to leak...") - emote_descriptor = list("squeezes Eldi's nipples, milking them", "milks Eldi's breasts", "extracts milk") - self_emote_descriptor = list("squeeze out", "extract") - random_emote = list("surpresses a moan", "gasps sharply", "bites her lower lip") - verb_name = "Milk" - verb_desc = "Grab Eldi's breasts and milk her, storing her fresh, warm milk in a container. This will undoubtedly turn her on." - -/obj/item/implanter/reagent_generator/eldi - implant_type = /obj/item/implant/reagent_generator/eldi - -//Vorrarkul: Theodora Lindt -/obj/item/implant/reagent_generator/vorrarkul - generated_reagents = list("chocolate_milk" = 2) - reagent_name = "chocalate milk" - usable_volume = 1000 - - empty_message = list("Your nipples are sore from being milked!") - full_message = list("Your breasts are full, their sweet scent emanating from your chest!") - emote_descriptor = list("squeezes chocolate milk from Theodora", "tugs on Theodora's nipples, milking them", "kneads Theodora's breasts, milking them") - self_emote_descriptor = list("squeeze", "knead") - random_emote = list("moans softly", "gives an involuntary squeal") - verb_name = "Milk" - verb_desc = "Grab Theodora's breasts and extract delicious chocolate milk from them!" - -/obj/item/implanter/reagent_generator/vorrarkul - implant_type = /obj/item/implant/reagent_generator/vorrarkul - -//Lycanthorph: Savannah Dixon -/obj/item/implant/reagent_generator/savannah - generated_reagents = list("milk" = 2) - reagent_name = "milk" - usable_volume = 1000 - - empty_message = list("Your nipples are sore from being milked!", "Your breasts feel drained, milk is no longer leaking from your nipples!") - full_message = list("Your breasts are full, their sweet scent emanating from your chest!", "Your breasts feel full, milk is starting to leak from your nipples, filling the air with it's sweet scent!") - emote_descriptor = list("squeezes sweet milk from Savannah", "tugs on Savannah's nipples, milking them", "kneads Savannah's breasts, milking them") - self_emote_descriptor = list("squeeze", "knead") - random_emote = list("lets out a soft moan", "gives an involuntary squeal") - verb_name = "Milk" - verb_desc = "Grab Savannah's breasts and extract sweet milk from them!" - -/obj/item/implanter/reagent_generator/savannah - implant_type = /obj/item/implant/reagent_generator/savannah - -//SpoopyLizz: Roiz Lizden -//I made this! Woo! -//implant -//-------------------- -/obj/item/implant/reagent_generator/roiz - name = "egg laying implant" - desc = "This is an implant that allows the user to lay eggs." - generated_reagents = list("egg" = 2) - usable_volume = 500 - transfer_amount = 50 - - empty_message = list("Your lower belly feels smooth and empty. Sorry, we're out of eggs!", "The reduced pressure in your lower belly tells you there are no more eggs.") - full_message = list("Your lower belly looks swollen with irregular bumps, and it feels heavy.", "Your lower abdomen feels really heavy, making it a bit hard to walk.") - emote_descriptor = list("an egg right out of Roiz's lower belly!", "into Roiz' belly firmly, forcing him to lay an egg!", "Roiz really tight, who promptly lays an egg!") - var/verb_descriptor = list("squeezes", "pushes", "hugs") - var/self_verb_descriptor = list("squeeze", "push", "hug") - var/short_emote_descriptor = list("lays", "forces out", "pushes out") - self_emote_descriptor = list("lay", "force out", "push out") - random_emote = list("hisses softly with a blush on his face", "yelps in embarrassment", "grunts a little") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_roiz - -/obj/item/implant/reagent_generator/roiz/post_implant(mob/living/carbon/source) - START_PROCESSING(SSobj, src) - to_chat(source, "You implant [source] with \the [src].") - source.verbs |= assigned_proc - return 1 - -/obj/item/implanter/reagent_generator/roiz - implant_type = /obj/item/implant/reagent_generator/roiz - -/mob/living/carbon/human/proc/use_reagent_implant_roiz() - set name = "Lay Egg" - set desc = "Force Roiz to lay an egg by squeezing into his lower body! This makes the lizard extremely embarrassed, and it looks funny." - set category = "Object" - set src in view(1) - - //do_reagent_implant(usr) - if(!isliving(usr) || !usr.canClick()) - return - - if(usr.incapacitated() || usr.stat > CONSCIOUS) - return - - var/obj/item/implant/reagent_generator/roiz/rimplant - for(var/obj/item/organ/external/E in organs) - for(var/obj/item/implant/I in E.implants) - if(istype(I, /obj/item/implant/reagent_generator)) - rimplant = I - break - if (rimplant) - if(rimplant.reagents.total_volume <= rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return - - new /obj/item/reagent_containers/food/snacks/egg/roiz(get_turf(src)) - - var/index = rand(0,3) - - if (usr != src) - var/emote = rimplant.emote_descriptor[index] - var/verb_desc = rimplant.verb_descriptor[index] - var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", - "You [self_verb_desc] [emote]") - else - visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", - "You [pick(rimplant.self_emote_descriptor)] an egg.") - if(prob(15)) - visible_message("[src] [pick(rimplant.random_emote)].") // M-mlem. - - rimplant.reagents.remove_any(rimplant.transfer_amount) - -//Cameron653: Jasmine Lizden -/obj/item/implant/reagent_generator/jasmine - name = "egg laying implant" - desc = "This is an implant that allows the user to lay eggs." - generated_reagents = list("egg" = 2) - usable_volume = 500 - transfer_amount = 50 - - empty_message = list("Your lower belly feels flat, empty, and somewhat rough!", "Your lower belly feels completely empty, no more bulges visible... At least, for the moment!") - full_message = list("Your lower belly is stretched out, smooth,and heavy, small bulges visible from within!", "It takes considerably more effort to move yourself, the large bulges within your gut most likely the cause!") - emote_descriptor = list("an egg from Jasmine's tauric belly!", "into Jasmine's gut, forcing her to lay a considerably large egg!", "Jasmine with a considerable amount of force, causing an egg to slip right out of her!") - var/verb_descriptor = list("squeezes", "pushes", "hugs") - var/self_verb_descriptor = list("squeeze", "push", "hug") - var/short_emote_descriptor = list("lays", "forces out", "pushes out") - self_emote_descriptor = list("lay", "force out", "push out") - random_emote = list("hisses softly with a blush on her face", "bites down on her lower lip", "lets out a light huff") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_jasmine - -/obj/item/implant/reagent_generator/jasmine/post_implant(mob/living/carbon/source) - START_PROCESSING(SSobj, src) - to_chat(source, "You implant [source] with \the [src].") - source.verbs |= assigned_proc - return 1 - -/obj/item/implanter/reagent_generator/jasmine - implant_type = /obj/item/implant/reagent_generator/jasmine - -/mob/living/carbon/human/proc/use_reagent_implant_jasmine() - set name = "Lay Egg" - set desc = "Cause Jasmine to lay an egg by squeezing her tauric belly!" - set category = "Object" - set src in view(1) - - //do_reagent_implant(usr) - if(!isliving(usr) || !usr.canClick()) - return - - if(usr.incapacitated() || usr.stat > CONSCIOUS) - return - - var/obj/item/implant/reagent_generator/jasmine/rimplant - for(var/obj/item/organ/external/E in organs) - for(var/obj/item/implant/I in E.implants) - if(istype(I, /obj/item/implant/reagent_generator)) - rimplant = I - break - if (rimplant) - if(rimplant.reagents.total_volume <= rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return - - new /obj/item/reagent_containers/food/snacks/egg/roiz(get_turf(src)) - - var/index = rand(0,3) - - if (usr != src) - var/emote = rimplant.emote_descriptor[index] - var/verb_desc = rimplant.verb_descriptor[index] - var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", - "You [self_verb_desc] [emote]") - else - visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", - "You [pick(rimplant.self_emote_descriptor)] an egg.") - if(prob(15)) - visible_message("[src] [pick(rimplant.random_emote)].") - - rimplant.reagents.remove_any(rimplant.transfer_amount) - -//Draycu: Schae Yonra -/obj/item/implant/reagent_generator/yonra - name = "egg laying implant" - desc = "This is an implant that allows the user to lay eggs." - generated_reagents = list("egg" = 2) - usable_volume = 500 - transfer_amount = 50 - - empty_message = list("Your feathery lower belly feels smooth and empty. For now...", "The lack of clacking eggs in your abdomen lets you know you're free to continue your day as normal.", "The reduced pressure in your lower belly tells you there are no more eggs.", "With a soft sigh, you can feel your lower body is empty. You know it will only be a matter of time before another batch fills you up again, however.") - full_message = list("Your feathery lower belly looks swollen with irregular bumps, and feels very heavy.", "Your feathery covered lower abdomen feels really heavy, making it a bit hard to walk.", "The added weight from your collection of eggs constantly reminds you that you'll have to lay soon!", "The sounds of eggs clacking as you walk reminds you that you will have to lay soon!") - emote_descriptor = list("an egg right out of Yonra's feathery crotch!", "into Yonra's belly firmly, forcing her to lay an egg!", ", making Yonra gasp and softly moan while an egg slides out.") - var/verb_descriptor = list("squeezes", "pushes", "hugs") - var/self_verb_descriptor = list("squeeze", "push", "hug") - var/short_emote_descriptor = list("lays", "forces out", "pushes out") - self_emote_descriptor = list("lay", "force out", "push out") - random_emote = list("hisses softly with a blush on her face", "yelps in embarrassment", "grunts a little") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_yonra - -/obj/item/implant/reagent_generator/yonra/post_implant(mob/living/carbon/source) - START_PROCESSING(SSobj, src) - to_chat(source, "You implant [source] with \the [src].") - source.verbs |= assigned_proc - return 1 - -/obj/item/implanter/reagent_generator/yonra - implant_type = /obj/item/implant/reagent_generator/yonra - -/mob/living/carbon/human/proc/use_reagent_implant_yonra() - set name = "Lay Egg" - set desc = "Force Yonra to lay an egg by squeezing into her lower body! This makes the Teshari stop whatever she is doing at the time, greatly embarassing her." - set category = "Object" - set src in view(1) - - //do_reagent_implant(usr) - if(!isliving(usr) || !usr.canClick()) - return - - if(usr.incapacitated() || usr.stat > CONSCIOUS) - return - - var/obj/item/implant/reagent_generator/yonra/rimplant - for(var/obj/item/organ/external/E in organs) - for(var/obj/item/implant/I in E.implants) - if(istype(I, /obj/item/implant/reagent_generator)) - rimplant = I - break - if (rimplant) - if(rimplant.reagents.total_volume <= rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return - - new /obj/item/reagent_containers/food/snacks/egg/teshari(get_turf(src)) - - var/index = rand(0,3) - - if (usr != src) - var/emote = rimplant.emote_descriptor[index] - var/verb_desc = rimplant.verb_descriptor[index] - var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", - "You [self_verb_desc] [emote]") - else - visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", - "You [pick(rimplant.self_emote_descriptor)] an egg.") - if(prob(15)) - visible_message("[src] [pick(rimplant.random_emote)].") - - rimplant.reagents.remove_any(rimplant.transfer_amount) - -/obj/item/reagent_containers/food/snacks/egg/teshari - name = "teshari egg" - desc = "It's a large teshari egg." - icon = 'icons/vore/custom_items_vr.dmi' - icon_state = "tesh_egg" - filling_color = "#FDFFD1" - volume = 12 - -/obj/item/reagent_containers/food/snacks/egg/teshari/Initialize(mapload) - . = ..() - reagents.add_reagent("egg", 10) - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/egg/teshari/tesh2 - icon_state = "tesh_egg_2" - -//Konabird: Rischi -/obj/item/implant/reagent_generator/rischi - name = "egg laying implant" - desc = "This is an implant that allows the user to lay eggs." - generated_reagents = list("egg" = 2) - usable_volume = 3000 //They requested 1 egg every ~30 minutes. - transfer_amount = 3000 - - empty_message = list("Your abdomen feels normal and taught, like usual.", "The lack of eggs in your abdomen leaves your belly flat and smooth.", "The reduced pressure in your belly tells you there are no more eggs.", "With a soft sigh, you can feel your body is empty of eggs. You know it will only be a matter of time before an egg forms once again, however.") - full_message = list("Your lower abdomen feels a bit swollen", "You feel a pressure within your abdomen, and a broody mood slowly creeps over you.", "You can feel the egg inside of you shift as you move, the needy feeling to lay slowly growing stronger!", "You can feel the egg inside of you, swelling out your normally taught abdomen considerably. You'll definitely need to lay soon!") - emote_descriptor = list("Rischi, causing the small female to squeak and wriggle, an egg falling from between her legs!", "Rischi's midsection, forcing her to lay an egg!", "Rischi, the Teshari huffing and grunting as an egg is squeezed from her body!") - var/verb_descriptor = list("squeezes", "squashes", "hugs") - var/self_verb_descriptor = list("squeeze", "push", "hug") - var/short_emote_descriptor = list("lays", "forces out", "pushes out") - self_emote_descriptor = list("lay", "force out", "push out") - random_emote = list("trembles and huffs, panting from the exertion.", "sees what has happened and covers her face with both hands!", "whimpers softly, her legs shivering, knees pointed inward from the feeling.") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_rischi - -/obj/item/implant/reagent_generator/rischi/post_implant(mob/living/carbon/source) - START_PROCESSING(SSobj, src) - to_chat(source, "You implant [source] with \the [src].") - source.verbs |= assigned_proc - return 1 - -/obj/item/implanter/reagent_generator/rischi - implant_type = /obj/item/implant/reagent_generator/rischi - -/mob/living/carbon/human/proc/use_reagent_implant_rischi() - set name = "Lay Egg" - set desc = "Force Rischi to lay an egg by squeezing her! What a terribly rude thing to do!" - set category = "Object" - set src in view(1) - - //do_reagent_implant(usr) - if(!isliving(usr) || !usr.canClick()) - return - - if(usr.incapacitated() || usr.stat > CONSCIOUS) - return - - var/obj/item/implant/reagent_generator/rischi/rimplant - for(var/obj/item/organ/external/E in organs) - for(var/obj/item/implant/I in E.implants) - if(istype(I, /obj/item/implant/reagent_generator)) - rimplant = I - break - if (rimplant) - if(rimplant.reagents.total_volume <= rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return - - new /obj/item/reagent_containers/food/snacks/egg/teshari/tesh2(get_turf(src)) - - var/index = rand(0,3) - - if (usr != src) - var/emote = rimplant.emote_descriptor[index] - var/verb_desc = rimplant.verb_descriptor[index] - var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", - "You [self_verb_desc] [emote]") - else - visible_message("[src] falls to her knees as the urge to lay overwhelms her, letting out a whimper as she [pick(rimplant.short_emote_descriptor)] an egg from between her legs.", - "You fall to your knees as the urge to lay overwhelms you, letting out a whimper as you [pick(rimplant.self_emote_descriptor)] an egg from between your legs.") - if(prob(15)) - visible_message("[src] [pick(rimplant.random_emote)].") - - rimplant.reagents.remove_any(rimplant.transfer_amount) - -/* -/obj/item/implant/reagent_generator/pumila_nectar //Bugged. Two implants at once messes things up. - generated_reagents = list("honey" = 2) - reagent_name = "honey" - usable_volume = 5000 - - empty_message = list("You appear to be all out of nectar", "You feel as though you are lacking a majority of your nectar.") - full_message = list("You appear to be full of nectar.", "You feel as though you are full of nectar!") - emote_descriptor = list("squeezes nectar", "extracts nectar") - self_emote_descriptor = list("squeeze", "extract") - verb_name = "Extract Honey" - verb_desc = "Obtain pumila's nectar and put it into a container!" - -/obj/item/implanter/reagent_generator/pumila_nectar - implant_type = /obj/item/implant/reagent_generator/pumila_nectar -*/ //Egg item //------------- /obj/item/reagent_containers/food/snacks/egg/roiz diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index 53722eec3f7..64fc61f76b2 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -107,39 +107,6 @@ prefs.save_character() -// Saves mob's current coloration state to prefs -// This basically needs to be the reverse of /datum/category_item/player_setup_item/general/body/copy_to_mob() ~Leshana -/proc/apply_coloration_to_prefs(var/mob/living/carbon/human/character, var/datum/preferences/prefs) - if(!istype(character)) return - prefs.r_eyes = character.r_eyes - prefs.g_eyes = character.g_eyes - prefs.b_eyes = character.b_eyes - prefs.h_style = character.h_style - prefs.r_hair = character.r_hair - prefs.g_hair = character.g_hair - prefs.b_hair = character.b_hair - prefs.f_style = character.f_style - prefs.r_facial = character.r_facial - prefs.g_facial = character.g_facial - prefs.b_facial = character.b_facial - prefs.r_skin = character.r_skin - prefs.g_skin = character.g_skin - prefs.b_skin = character.b_skin - prefs.s_tone = character.s_tone - prefs.h_style = character.h_style - prefs.f_style = character.f_style - prefs.b_type = character.b_type - -// Saves mob's current custom species, ears, and tail state to prefs -// This basically needs to be the reverse of /datum/category_item/player_setup_item/vore/ears/copy_to_mob() ~Leshana -/proc/apply_ears_to_prefs(var/mob/living/carbon/human/character, var/datum/preferences/prefs) - if(character.ear_style) prefs.ear_style = character.ear_style.type - if(character.tail_style) prefs.tail_style = character.tail_style.type - prefs.r_tail = character.r_tail - prefs.b_tail = character.b_tail - prefs.g_tail = character.g_tail - prefs.custom_species = character.custom_species - // Saves mob's current organ state to prefs. // This basically needs to be the reverse of /datum/category_item/player_setup_item/general/body/copy_to_mob() ~Leshana /proc/apply_organs_to_prefs(var/mob/living/carbon/human/character, var/datum/preferences/prefs) @@ -188,13 +155,13 @@ if(!istype(mark_datum) || !mark_color) log_debug(SPAN_DEBUG("[character]'s organ [O] ([O.type]) has marking [list2params(ML)] with invalid/missing color/datum!")) continue; - if(!(mark_datum.name in body_marking_styles_list)) + if(!(mark_datum.name in GLOB.legacy_marking_lookup)) log_debug(SPAN_DEBUG("[character]'s organ [O] ([O.type]) has marking [mark_datum] which is not in body_marking_styles_list!")) continue; // Note: Since datums can cover multiple organs, we may encounter it multiple times, but this is okay // because you're only allowed to have each marking type once! If this assumption changes, obviously update this. ~Leshana - new_body_markings[mark_datum.name] = mark_color - prefs.body_markings = new_body_markings // Overwrite with new list! + new_body_markings[mark_datum.id] = mark_color + prefs.body_marking_ids = new_body_markings // Overwrite with new list! /** * Resolve any surplus/deficit in nutrition's effet on weight all at once.