Hanner Whitelist Species

Added a new whitelist species, the Hanner. These are the half-offspring of Lleill and share a small number of their abilities. Notably, they are shapeshifters, can drain energy from consenting people, can do basic alchemy and can transform into beasts.

Added the beast form ability to Lleill and Hanner, allowing them to turn into a small selection of simple mobs.

Changed lleill_energy and lleill_energy_max to be a base species variable rather than lleill species, allowing those abilities to be granted to other characters by GMs.

Added a small chance of finding potion materials in maint loot (pretty rare), to allow a little more consistent use of the alchemy ability for lleill, rather than relying on redgates alone.
This commit is contained in:
SatinIsle
2024-09-06 12:20:47 +01:00
parent 87dea05235
commit 791e259f63
13 changed files with 310 additions and 51 deletions
@@ -34,3 +34,6 @@
/mob/living/carbon/human/lleill/New(var/new_loc)
..(new_loc, SPECIES_LLEILL)
/mob/living/carbon/human/hanner/New(var/new_loc)
..(new_loc, SPECIES_HANNER)
@@ -0,0 +1,98 @@
/datum/species/shapeshifter/hanner
name = SPECIES_HANNER
name_plural = "Hanner"
blurb = "Hanner are a sub-species of almost any other sapient species, \
they are the offspring of one Lleill and any other non-lleill species. They are natural born fleshy \
shapeshifters, able to take the appearance of almost any humanoid form. Hanner also have some limited \
transmutation and energy sharing abilities not unlike they lleill, but considerably more limited. Unlike \
other shapeshifter species, such as proteans or prometheans, Hanner have a typical humanoid set of organs and can not regenerate."
flags = NO_SCAN
color_mult = 1
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
health_hud_intensity = 2
num_alternate_languages = 3
language = LANGUAGE_LLEILL
species_language = LANGUAGE_LLEILL
secondary_langs = list(LANGUAGE_LLEILL, LANGUAGE_SOL_COMMON) // For some reason, having this as their species language does not allow it to be chosen.
min_age = 18
max_age = 200
//Specific abilities
burn_mod = 0.8 //Slightly resistant to fire
pain_mod = 0.8 //Whilst not resistant to brute or stunning, they are slightly resistant to pain.
hazard_high_pressure = HAZARD_HIGH_PRESSURE + 700 // Dangerously high pressure.
warning_high_pressure = WARNING_HIGH_PRESSURE + 700 // High pressure warning.
warning_low_pressure = 100 // Low pressure warning.
hazard_low_pressure = 50 // Dangerously low pressure.
minimum_breath_pressure = 0 //Doesn't gasp and lungs shouldn't pop
cold_level_1 = 150 //Adapt well to temperature changes
cold_level_2 = 100
cold_level_3 = 50
heat_level_1 = 500 //quite resiliant to heat
heat_level_2 = 600
heat_level_3 = 700
chem_strength_alcohol = 0.8 //Handle alcohol slightly better
metabolic_rate = 0.4 //Major downside of the Hanner, they metabolise drugs much slower, meaning that they are difficult to treat with medicine alone.
bloodloss_rate = 1.2 //They bleed out faster too
lleill_energy = 100
lleill_energy_max = 100
genders = list(MALE, FEMALE, NEUTER, PLURAL)
has_organ = list(
O_HEART = /obj/item/organ/internal/heart,
O_LUNGS = /obj/item/organ/internal/lungs,
O_VOICE = /obj/item/organ/internal/voicebox,
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_APPENDIX = /obj/item/organ/internal/appendix,
O_SPLEEN = /obj/item/organ/internal/spleen,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/chest),
BP_GROIN = list("path" = /obj/item/organ/external/groin),
BP_HEAD = list("path" = /obj/item/organ/external/head),
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
)
inherent_verbs = list(
/mob/living/carbon/human/proc/shapeshifter_select_shape,
/mob/living/carbon/human/proc/shapeshifter_select_colour,
/mob/living/carbon/human/proc/shapeshifter_select_hair,
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
/mob/living/carbon/human/proc/shapeshifter_select_gender,
/mob/living/carbon/human/proc/shapeshifter_select_wings,
/mob/living/carbon/human/proc/shapeshifter_select_tail,
/mob/living/carbon/human/proc/shapeshifter_select_ears,
/mob/living/proc/set_size,
/mob/living/carbon/human/proc/lleill_contact,
/mob/living/carbon/human/proc/lleill_alchemy,
/mob/living/carbon/human/proc/lleill_beast_form
)
valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ALTEVIAN, SPECIES_TESHARI, SPECIES_MONKEY, SPECIES_LLEILL, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_RAPALA, SPECIES_NEVREAN, SPECIES_VASILISSAN, SPECIES_AKULA)
@@ -33,9 +33,6 @@
//Specific abilities
var/lleill_energy = 200
var/lleill_energy_max = 200
var/ring_cooldown = 0
darksight = 10 //Can see in dark
@@ -90,7 +87,8 @@
/mob/living/carbon/human/proc/lleill_transmute,
/mob/living/carbon/human/proc/lleill_rings,
/mob/living/carbon/human/proc/lleill_contact,
/mob/living/carbon/human/proc/lleill_alchemy)
/mob/living/carbon/human/proc/lleill_alchemy,
/mob/living/carbon/human/proc/lleill_beast_form)
//organs, going with just the basics for now
@@ -15,25 +15,19 @@
var/energy_cost = 75
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't go invisible when weakened like this.</span>")
return
if(!cloaked)
if(LL.lleill_energy < energy_cost)
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
cloak()
block_hud = 1
hud_updateflag = 1
to_chat(src, "<span class='warning'>Your fur shimmers and shifts around you, hiding you from the naked eye.</span>")
LL.lleill_energy -= energy_cost
species.lleill_energy -= energy_cost
else
uncloak()
block_hud = 0
@@ -115,13 +109,7 @@
var/energy_cost = 50
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(LL.lleill_energy < energy_cost)
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
@@ -155,7 +143,7 @@
var/spawnloc = get_turf(usr)
var/obj/item/N = new transmute_product(spawnloc)
put_in_active_hand(N)
LL.lleill_energy -= energy_cost
species.lleill_energy -= energy_cost
/mob/living/carbon/human/proc/lleill_rings()
set name = "Place/Use Rings"
@@ -166,22 +154,17 @@
var/energy_cost_spawn = (25 * energy_cost_multi)
var/energy_cost_tele = 50
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't go do that when weakened like this.</span>")
return
if(buckled)
to_chat(src,"<span class='warning'>You can't do that when restrained.</span>")
var/r_action = tgui_alert(src, "What would you like to do with your rings? You currently have [LL.lleill_energy] energy remaining.", "Actions", list("Spawn New Ring ([energy_cost_spawn])", "Teleport to Ring ([energy_cost_tele])", "Cancel"))
var/r_action = tgui_alert(src, "What would you like to do with your rings? You currently have [species.lleill_energy] energy remaining.", "Actions", list("Spawn New Ring ([energy_cost_spawn])", "Teleport to Ring ([energy_cost_tele])", "Cancel"))
if(!r_action || r_action == "Cancel")
return
if(findtext(r_action,"Spawn New Ring"))
if(LL.lleill_energy < energy_cost_spawn)
if(species.lleill_energy < energy_cost_spawn)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
@@ -192,9 +175,9 @@
var/obj/structure/glamour_ring/R = new(spawnloc)
R.connected_mob = src
src.teleporters |= R
LL.lleill_energy -= energy_cost_spawn
species.lleill_energy -= energy_cost_spawn
if(findtext(r_action,"Teleport to Ring"))
if(LL.lleill_energy < energy_cost_tele)
if(species.lleill_energy < energy_cost_tele)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
if(!src.teleporters.len)
@@ -214,7 +197,7 @@
var/S = get_turf(R)
src.forceMove(S)
LL.lleill_energy -= energy_cost_tele
species.lleill_energy -= energy_cost_tele
spk.start()
playsound(S, 'sound/effects/phasein.ogg', 25, 1)
@@ -238,7 +221,6 @@
set category = "Abilities"
if(!ishuman(src))
return //If you're not a human you don't have permission to do this.
var/datum/species/lleill/LL = species
var/list/contact_options = list(
"Kiss (lips)",
@@ -252,9 +234,6 @@
"Custom"
)
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't go do that when weakened like this.</span>")
return
@@ -313,7 +292,7 @@
else
src.visible_message("<b>\The [src]</b> and \the [chosen_target] break contact before energy has been transferred.")
src.visible_message("<b>\The [src]</b> and \the [chosen_target] complete their contact.")
LL.lleill_energy = LL.lleill_energy_max
species.lleill_energy = species.lleill_energy_max
nutrition += (chosen_target.nutrition / 2)
to_chat(src, "<span class='warning'>You feel revitalised.</span>")
chosen_target.tiredness += 70
@@ -329,13 +308,8 @@
var/energy_cost = 25
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(LL.lleill_energy < energy_cost)
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
@@ -367,4 +341,147 @@
var/spawnloc = get_turf(usr)
var/obj/item/N = new transmute_product(spawnloc)
put_in_active_hand(N)
LL.lleill_energy -= energy_cost
species.lleill_energy -= energy_cost
/mob/living/carbon/human/proc/lleill_beast_form()
set name = "Beast Form (100)"
set desc = "Take the form of a non-humanoid creature."
set category = "Abilities"
if(!ishuman(src))
return //If you're not a human you don't have permission to do this.
var/energy_cost = 100
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
var/list/beast_options = list("Rabbit" = /mob/living/simple_mob/vore/rabbit,
"Red Panda" = /mob/living/simple_mob/vore/redpanda,
"Fennec" = /mob/living/simple_mob/vore/fennec,
"Giant Frog" = /mob/living/simple_mob/vore/aggressive/frog,
"Giant Rat" = /mob/living/simple_mob/vore/aggressive/rat,
"Wolf" = /mob/living/simple_mob/vore/wolf,
"Panther" = /mob/living/simple_mob/vore/aggressive/panther,
"Giant Snake" = /mob/living/simple_mob/vore/aggressive/giant_snake,
"Otie" = /mob/living/simple_mob/vore/otie,
"Squirrel" = /mob/living/simple_mob/vore/squirrel,
"Raptor" = /mob/living/simple_mob/vore/raptor,
"Giant Bat" = /mob/living/simple_mob/vore/bat,
"Horse" = /mob/living/simple_mob/vore/horse,
"Horse (Big)" = /mob/living/simple_mob/vore/horse/big,
"Kelpie" = /mob/living/simple_mob/vore/horse/kelpie
)
var/chosen_beast = tgui_input_list(src, "Which form would you like to take?", "Choose Beast Form", beast_options)
if(!chosen_beast)
return
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
return
var/mob/living/M = src
log_debug("polymorph start")
if(!istype(M))
log_debug("polymorph istype")
return
visible_message("<b>\The [src]</b> begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("<b>\The [src]</b> ceases shifting their form.")
return 0
log_debug("polymorph else")
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
log_debug("polymorph dead")
return
var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation")
coolanimation.plane = PLANE_LIGHTING_ABOVE
src.overlays += coolanimation
spawn(14)
src.overlays -= coolanimation
log_debug("polymorph not dead")
var/mob/living/new_mob = spawn_beast_mob(beast_options[chosen_beast])
new_mob.faction = M.faction
if(new_mob && isliving(new_mob))
species.lleill_energy -= energy_cost
log_debug("polymorph new_mob")
for(var/obj/belly/B as anything in new_mob.vore_organs)
log_debug("polymorph new_mob belly")
new_mob.vore_organs -= B
qdel(B)
new_mob.vore_organs = list()
new_mob.name = M.name
new_mob.real_name = M.real_name
new_mob.verbs |= /mob/living/proc/revert_beast_form
for(var/lang in M.languages)
new_mob.languages |= lang
M.copy_vore_prefs_to_mob(new_mob)
new_mob.vore_selected = M.vore_selected
if(ishuman(M))
log_debug("polymorph ishuman part2")
var/mob/living/carbon/human/H = M
if(ishuman(new_mob))
log_debug("polymorph ishuman(newmob)")
var/mob/living/carbon/human/N = new_mob
N.gender = H.gender
N.identifying_gender = H.identifying_gender
else
log_debug("polymorph gender else")
new_mob.gender = H.gender
else
log_debug("polymorph gender else 2")
new_mob.gender = M.gender
if(ishuman(new_mob))
var/mob/living/carbon/human/N = new_mob
N.identifying_gender = M.gender
for(var/obj/belly/B as anything in M.vore_organs)
B.loc = new_mob
B.forceMove(new_mob)
B.owner = new_mob
M.vore_organs -= B
new_mob.vore_organs += B
new_mob.ckey = M.ckey
if(M.ai_holder && new_mob.ai_holder)
var/datum/ai_holder/old_AI = M.ai_holder
old_AI.set_stance(STANCE_SLEEP)
var/datum/ai_holder/new_AI = new_mob.ai_holder
new_AI.hostile = old_AI.hostile
new_AI.retaliate = old_AI.retaliate
M.loc = new_mob
M.forceMove(new_mob)
new_mob.tf_mob_holder = M
new_mob.visible_message("<b>\The [src]</b> has transformed into \the [new_mob]!")
/mob/living/carbon/human/proc/spawn_beast_mob(var/chosen_beast)
log_debug("polymorph proc spawn mob")
var/tf_type = chosen_beast
log_debug("polymorph [tf_type]")
if(!ispath(tf_type))
log_debug("polymorph tf_type fail")
return
log_debug("polymorph tf_type pass")
var/new_mob = new tf_type(get_turf(src))
return new_mob
/mob/living/proc/revert_beast_form()
set name = "Revert Beast Form"
set desc = "Return to your humanoid form."
set category = "Abilities"
visible_message("<b>\The [src]</b> begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("<b>\The [src]</b> ceases shifting their form.")
return 0
visible_message("<b>\The [src]</b> has reverted to their original form.")
revert_mob_tf()
@@ -45,6 +45,11 @@
var/list/food_preference = list() //RS edit
var/food_preference_bonus = 0
// For Lleill and Hanner
var/lleill_energy = 200
var/lleill_energy_max = 200
/datum/species/unathi
vore_belly_default_variant = "L"
@@ -9,7 +9,7 @@
name = "You should not see this..."
icon = 'icons/mob/vore/ears_vr.dmi'
do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
// Species-unique ears
@@ -38,7 +38,7 @@
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "lleill-antlers"
species_allowed = list(SPECIES_LLEILL)
species_allowed = list(SPECIES_LLEILL, SPECIES_HANNER)
/datum/sprite_accessory/ears/lleill/curled
name = "Lleill Ears Curled, colorable"
@@ -13,7 +13,7 @@
var/mob_offset_x = 0
var/mob_offset_y = 0
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use
var/list/lower_layer_dirs = list(SOUTH)
var/icon_loaf = null
@@ -6,7 +6,7 @@
/datum/sprite_accessory/hair
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use the default hairstyles.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use the default hairstyles.
/datum/sprite_accessory/hair/astolfo
name = "Astolfo"
@@ -485,20 +485,20 @@
/datum/sprite_accessory/facial_hair
icon = 'icons/mob/human_face_or_vr.dmi'
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use the facial hair styles.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use the facial hair styles.
/datum/sprite_accessory/facial_hair/shaved
name = "Shaved"
icon_state = "bald"
gender = NEUTER
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This needed to be manually defined, apparantly.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This needed to be manually defined, apparantly.
/datum/sprite_accessory/facial_hair/neck_fluff
name = "Neck Fluff"
icon = 'icons/mob/human_face_or_vr.dmi'
icon_state = "facial_neckfluff"
gender = NEUTER
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL)
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER)
/datum/sprite_accessory/facial_hair/vulp_none
name = "None"
@@ -9,7 +9,7 @@
name = "You should not see this..."
icon = 'icons/mob/vore/wings_vr.dmi'
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
var/wing_offset = 0
var/multi_dir = FALSE // Does it use different sprites at different layers? _front will be added for sprites on low layer, _back to high layer