diff --git a/code/__DEFINES/~darkpack/fera/fera.dm b/code/__DEFINES/~darkpack/fera/fera.dm
index fd28eb1c24c2..df121dccc279 100644
--- a/code/__DEFINES/~darkpack/fera/fera.dm
+++ b/code/__DEFINES/~darkpack/fera/fera.dm
@@ -16,6 +16,9 @@
#define BREED_CORAX_HOMID "Corax Homid"
#define BREED_CORVID "Corvid"
+#define BREED_ANANASI_HOMID "Ananasi Homid"
+#define BREED_ARACHNID "Arachnid"
+
#define FEATURE_FUR_COLOR "fera_fur"
// fera will likely have a seperate list of colors but uses the same feature or var as other fera
@@ -37,5 +40,14 @@ GLOBAL_LIST_INIT(corax_fur_colors, list(
"gray" = "gray",
))
+GLOBAL_LIST_INIT(ananasi_fur_colors, list(
+ "black" = "black",
+ "brown" = "brown",
+ "white" = "white",
+ "green" = "green",
+ "red" = "red",
+ "gray" = "gray",
+))
+
#define STATUS_EFFECT_DELIRIUM /datum/status_effect/delirium
#define STATUS_EFFECT_SILVER_BULLET_STACKS /datum/status_effect/stacking/silver_bullets
diff --git a/code/__DEFINES/~darkpack/signals_kindred.dm b/code/__DEFINES/~darkpack/signals_kindred.dm
index 2b4f66a68af1..220c5f0a35dd 100644
--- a/code/__DEFINES/~darkpack/signals_kindred.dm
+++ b/code/__DEFINES/~darkpack/signals_kindred.dm
@@ -1,10 +1,11 @@
// This is the new signals file for every signal vampire related in WOD13
// New signals related to vampires and things vampires do should be defined here
-///called in bloodsucking.dm at the end of /mob/living/carbon/human/proc/drinksomeblood
+// WAS called in bloodsucking.dm at the end of /mob/living/carbon/human/proc/drinksomeblood, now
+// handled by a trait check. this could still be useful for other things though so keeping this
#define COMSIG_MOB_VAMPIRE_SUCKED "mob_vampire_sucked"
///vampire suck resisted
- #define COMPONENT_RESIST_VAMPIRE_KISS (1<<0)
+ // #define COMPONENT_RESIST_VAMPIRE_KISS (1<<0)
///baali demons have touched the target, time to apply the effect from daimonion 4
#define COMSIG_BAALI_DEMON_REACHED_TARGET "baali_demon_reached_target"
diff --git a/code/__DEFINES/~darkpack/splats.dm b/code/__DEFINES/~darkpack/splats.dm
index ccdb0ba3296c..61ee0b2208e6 100644
--- a/code/__DEFINES/~darkpack/splats.dm
+++ b/code/__DEFINES/~darkpack/splats.dm
@@ -9,7 +9,8 @@
//#define SPLAT_FERA "splat_fera"
#define SPLAT_GAROU "splat_garou"
#define SPLAT_CORAX "splat_corax"
-#define SPLAT_SHIFTERS list(SPLAT_GAROU, SPLAT_CORAX)
+#define SPLAT_ANANASI "splat_ananasi"
+#define SPLAT_SHIFTERS list(SPLAT_GAROU, SPLAT_CORAX, SPLAT_ANANASI)
#define SPLAT_PRIO_HALFSPLAT 100
#define SPLAT_PRIO_SPLAT 200
diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm
index 7ceb749fd630..693af5361ac3 100644
--- a/code/__DEFINES/~darkpack/traits/declarations.dm
+++ b/code/__DEFINES/~darkpack/traits/declarations.dm
@@ -106,6 +106,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_SCARRING_RESISTANT "scarring_resistant"// Temporal scars wont save
/// Stepping on glass shards immunity. Currently used for a couple Garou forms but could be used elsewhere.
#define TRAIT_HARDENED_SOLES "hardened_soles"
+// Splats that resist the affects of The Kiss
+#define TRAIT_RESISTS_KISS "resists_kiss"
// Allows the user to pass through doors
@@ -159,6 +161,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_JAMMING_WEAPONS "jamming_weapons"
#define TRAIT_NATURAL "natural"
#define TRAIT_AURA_OF_CONFIDENCE "aura_of_confidence"
+// Fera with no passive healing
+#define TRAIT_NO_PASSIVE_HEALING "no_passive_healing"
/// Mob has had atleast one tooth yanked out while having no method of regenerating it.
#define TRAIT_TOOTH_PULLED "tooth_pulled"
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 0e8a9b7d466c..d471354e421d 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -755,6 +755,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NO_CUFF" = TRAIT_NO_CUFF, // DARKPACK EDIT ADD
"TRAIT_NO_EYE_CONTACT" = TRAIT_NO_EYE_CONTACT, // DARKPACK EDIT ADD
"TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_NO_PASSIVE_HEALING" = TRAIT_NO_PASSIVE_HEALING, // DARKPACK EDIT ADD - WEREWOLF - (Ananasi)
"TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD
"TRAIT_ORGANOVORE" = TRAIT_ORGANOVORE, // DARKPACK EDIT ADD - Nagaraja
"TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD
@@ -767,6 +768,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_RAZOR_CLAWS" = TRAIT_RAZOR_CLAWS, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_REJECTED_BY_TECHNOLOGY" = TRAIT_REJECTED_BY_TECHNOLOGY, // DARKPACK EDIT ADD
"TRAIT_REPELLED_BY_HOLINESS" = TRAIT_REPELLED_BY_HOLINESS, // DARKPACK EDIT ADD
+ "TRAIT_RESISTS_KISS" = TRAIT_RESISTS_KISS, // DARKPACK EDIT ADD
"TRAIT_RUBICON" = TRAIT_RUBICON, // DARKPACK EDIT ADD
"TRAIT_SANGUINE_INCONGRUITY" = TRAIT_SANGUINE_INCONGRUITY, // DARKPACK EDIT ADD - Giovanni Quirk
"TRAIT_SCARRING_RESISTANT" = TRAIT_SCARRING_RESISTANT, // DARKPACK EDIT ADD
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index 2d57124b8531..317a821ae97c 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -422,6 +422,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_NO_CUFF" = TRAIT_NO_CUFF, // DARKPACK EDIT ADD
"TRAIT_NO_EYE_CONTACT" = TRAIT_NO_EYE_CONTACT, // DARKPACK EDIT ADD
"TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_NO_PASSIVE_HEALING" = TRAIT_NO_PASSIVE_HEALING, // DARKPACK EDIT ADD - WEREWOLF - (Ananasi)
"TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD
"TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD
"TRAIT_PALE_AURA" = TRAIT_PALE_AURA, // DARKPACK EDIT ADD - MERITS_FLAWS
diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
index 10db1405eeac..bccac6c0dbcd 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
@@ -596,3 +596,9 @@
AddElement(/datum/element/pet_bonus, "chitter")
AddElement(/datum/element/ai_retaliate)
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
+
+// Ananasi Subtype
+/mob/living/basic/spider/giant/arachnid
+ name = "spider"
+ desc = "Furry and black, it makes you shudder to look at it."
+ speak_emote = list("hiss")
diff --git a/config/darkpack_config.txt b/config/darkpack_config.txt
index e9863297dedc..68a40eafa88d 100644
--- a/config/darkpack_config.txt
+++ b/config/darkpack_config.txt
@@ -50,6 +50,7 @@ ROUNDSTART_SPLATS splat_ghoul
ROUNDSTART_SPLATS splat_kinfolk
ROUNDSTART_SPLATS splat_garou
ROUNDSTART_SPLATS splat_corax
+ROUNDSTART_SPLATS splat_ananasi
## If dead people and ghosts can LOOC to people who are alive.
DISABLE_GHOST_LOOC
diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm
index f01f9866ce1f..e9e7e6d04f82 100644
--- a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -12,7 +12,8 @@
TRAIT_NOBREATH,
TRAIT_TOXIMMUNE,
TRAIT_NOCRITDAMAGE,
- TRAIT_FAKEDEATH
+ TRAIT_FAKEDEATH,
+ TRAIT_RESISTS_KISS
)
//mutantbrain = /obj/item/organ/brain/vampire //to prevent brain transplant surgery
//mutanteyes = /obj/item/organ/eyes/night_vision/zombie
@@ -34,17 +35,6 @@
C.health = 300
//zombies resist vampire bites better than mortals
- RegisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_zombie_bitten))
ADD_TRAIT(C, TRAIT_MASQUERADE_VIOLATING_FACE, "zombie")
-/datum/species/zombie/proc/on_zombie_bitten(datum/source, mob/living/carbon/being_bitten)
- SIGNAL_HANDLER
-
- if(iszombie(being_bitten))
- return COMPONENT_RESIST_VAMPIRE_KISS
-
-/datum/species/zombie/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
- . = ..()
- UnregisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED)
-
#undef REGENERATION_DELAY
diff --git a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm
index 86e13b1e75f1..9c0ea8c577ac 100644
--- a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm
+++ b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm
@@ -43,7 +43,7 @@
if(!do_after(src, 3 SECONDS, target = drunk_from, timed_action_flags = NONE, show_progress = FALSE))
remove_drinking_overlay(drunk_from)
- if(!(SEND_SIGNAL(drunk_from, COMSIG_MOB_VAMPIRE_SUCKED, drunk_from) & COMPONENT_RESIST_VAMPIRE_KISS))
+ if(get_kindred_splat(src) && !HAS_TRAIT(src, TRAIT_PAINFUL_VAMPIRE_KISS) && !HAS_TRAIT(drunk_from, TRAIT_RESISTS_KISS))
drunk_from.apply_status_effect(/datum/status_effect/kissed)
return
diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
index fa40f0cc91b5..77cde83a4ddb 100644
--- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
+++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
@@ -6,10 +6,15 @@
if(grab_state > GRAB_PASSIVE)
if(isliving(pulling))
var/mob/living/bit_living = pulling
- if(!get_vampire_splat(src))
+ if(!get_vampire_splat(src) && !get_ananasi_splat(src))
SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', volume = 75))
to_chat(src, span_warning("You're not desperate enough to try that."))
return
+ if(get_ananasi_splat(src))
+ if(get_kindred_splat(bit_living))
+ SEND_SOUND(src, sound('modular_darkpack/modules/blood_drinking/sounds/need_blood.ogg', volume = 75))
+ to_chat(src, span_warning("This BLOOD is toxic to you!"))
+ return
// Allow ghouls to steal viate?
if(get_ghoul_splat(src))
if(!get_kindred_splat(bit_living))
@@ -64,7 +69,9 @@
if(get_kindred_splat(src))
bit_living.emote("groan")
- else if(get_ghoul_splat(src))
+ if(get_ghoul_splat(src))
+ bit_living.emote("scream")
+ if(get_ananasi_splat(src))
bit_living.emote("scream")
if(ishuman(bit_living))
diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm
index ecfe699d3b1a..82554e20c663 100644
--- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm
+++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm
@@ -18,6 +18,7 @@
TRAIT_DRINKS_BLOOD,
TRAIT_PALE_AURA,
TRAIT_SCARRING_RESISTANT,
+ TRAIT_RESISTS_KISS,
)
splat_actions = list(
/datum/action/cooldown/mob_cooldown/give_vitae,
@@ -73,9 +74,6 @@
//vampires don't die while in crit, they just slip into torpor after 2 minutes of being critted
RegisterSignal(owner, COMSIG_MOB_STATCHANGE, PROC_REF(handle_enter_critical_condition))
- //vampires resist vampire bites better than mortals
- RegisterSignal(owner, COMSIG_MOB_VAMPIRE_SUCKED, PROC_REF(on_vampire_bitten))
-
// Apply bashing damage resistance
RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(damage_resistance))
@@ -110,7 +108,6 @@
UnregisterSignal(owner, list(
COMSIG_CARBON_LOSE_ORGAN,
COMSIG_MOB_STATCHANGE,
- COMSIG_MOB_VAMPIRE_SUCKED,
COMSIG_MOB_APPLY_DAMAGE_MODIFIERS,
COMSIG_HUMAN_ON_HANDLE_BLOOD,
COMSIG_PATH_HIT,
@@ -207,13 +204,11 @@
/**
* On being bit by a vampire
*
- * This handles vampire bite sleep immunity and any future special interactions.
+ * This handles any future special interactions. Vampire bite immunity is now handled by TRAIT_RESISTS_KISS.
*/
/datum/splat/vampire/kindred/proc/on_vampire_bitten(datum/source, mob/living/carbon/being_bitten)
SIGNAL_HANDLER
- return COMPONENT_RESIST_VAMPIRE_KISS
-
/datum/splat/vampire/kindred/proc/kindred_blood(mob/living/carbon/human/kindred, seconds_per_tick, times_fired)
SIGNAL_HANDLER
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/changing_breeds/ananasi.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/changing_breeds/ananasi.dm
new file mode 100644
index 000000000000..6fe2929535e6
--- /dev/null
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/changing_breeds/ananasi.dm
@@ -0,0 +1,127 @@
+/datum/action/cooldown/power/gift/bloodheal
+ name = "Blood Heal"
+ desc = "The Ananasi can heal their wounds by drawing on their own blood."
+ button_icon_state = "bloodheal"
+ click_to_activate = FALSE
+ rank = 1
+ handles_spend_resources = FALSE
+
+/datum/action/cooldown/power/gift/bloodheal/can_afford(feedback)
+ var/mob/living/human_owner = astype(owner)
+ if(!human_owner)
+ return ..()
+ if(human_owner.bloodpool < 1)
+ if(feedback)
+ to_chat(owner, span_warning("You don't have enough blood to cast [src]!"))
+ return FALSE
+ return ..()
+
+/datum/action/cooldown/power/gift/bloodheal/spend_resources()
+ var/mob/living/human_owner = astype(owner)
+ . = ..()
+ if(human_owner)
+ human_owner.adjust_blood_pool(-1)
+
+/datum/action/cooldown/power/gift/bloodheal/Activate(atom/target)
+ var/mob/living/human_owner = astype(owner)
+ if(!human_owner)
+ return FALSE
+ if(!do_after(human_owner, 1 TURNS))
+ return FALSE
+
+ . = ..()
+
+ human_owner.heal_ordered_damage(30, list(BRUTE, TOX, OXY, STAMINA))
+ human_owner.heal_ordered_damage(6, list(BURN, AGGRAVATED))
+ human_owner.update_damage_overlays()
+ human_owner.update_health_hud()
+ return TRUE
+
+/datum/action/cooldown/power/gift/stolen_moments
+ name = "Stolen Moments"
+ desc = "This Gift allows the Ananasi to literally steal away the last few minutes of memories from another being."
+ button_icon_state = "stolen_moments"
+ click_to_activate = TRUE
+ rank = 1
+
+ gnosis_cost = 1
+
+/datum/action/cooldown/power/gift/stolen_moments/Activate(atom/target)
+ var/mob/living/living_target = astype(target)
+ if(!living_target)
+ return FALSE
+
+ . = ..()
+
+ var/datum/splat/werewolf/shifter/shifter_splat = get_shifter_splat(owner)
+ var/datum/subsplat/werewolf/breed_form/breed = shifter_splat?.breed_form
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.difficulty = living_target.st_get_stat(STAT_TEMPORARY_WILLPOWER)
+ roll_datum.roll_output_type = ROLL_PRIVATE_AND_TARGET
+ var/roll_result = roll_datum.st_roll(owner, target, breed?.start_gnosis || 0)
+
+ if(roll_result != ROLL_SUCCESS)
+ return
+
+ SEND_SOUND(target, sound('modular_darkpack/modules/powers/sounds/dominate.ogg', volume = 50))
+ SEND_SIGNAL(target, COMSIG_ALL_MASQUERADE_REINFORCE)
+ to_chat(target, span_hypnophrase("At [owner]'s touch, the last fifteen minutes of your memory are stolen away. You feel a sense of confusion and disorientation as you struggle to recall what just happened."))
+
+/datum/action/cooldown/power/gift/breath_of_the_wyld/inspire
+ name = "Inspire"
+ desc = "The Ananasi instills a target with a rush of lucidity."
+
+/datum/action/cooldown/power/gift/breath_of_the_wyld/inspire/Activate(atom/target)
+ if(!isliving(target))
+ return
+ if(!(target in range(1, owner)))
+ return
+
+ . = ..()
+
+ var/mob/living/victim = target
+ var/mob/living/caster = owner
+ var/datum/splat/werewolf/casting_splat = get_werewolf_splat(caster)
+ var/roll_difficulty = get_werewolf_splat(target) ? 5 : 6
+ if(!roll_datum)
+ roll_datum = new()
+ roll_datum.difficulty = roll_difficulty
+ roll_datum.roll_output_type = ROLL_PRIVATE_AND_TARGET
+ var/roll_result = roll_datum.st_roll(caster, target, casting_splat.gnosis)
+
+ if(roll_result != ROLL_SUCCESS)
+ return
+
+ victim.apply_status_effect(/datum/status_effect/breath_of_the_wyld)
+
+ StartCooldown()
+ return TRUE
+
+/datum/status_effect/breath_of_the_wyld
+ id = "breath_of_the_wyld"
+ duration = 1 SCENES
+
+ status_type = STATUS_EFFECT_REPLACE
+
+ alert_type = /atom/movable/screen/alert/status_effect/breath_of_the_wyld
+
+/datum/status_effect/breath_of_the_wyld/on_apply()
+ owner.st_add_stat_mod(STAT_PERCEPTION, 1, type)
+ owner.st_add_stat_mod(STAT_INTELLIGENCE, 1, type)
+ owner.st_add_stat_mod(STAT_WITS, 1, type)
+ ADD_TRAIT(owner, TRAIT_DIFFICULT_RAGE, type)
+ to_chat(owner, span_notice("You feel a sense of heightened lucidity."))
+ return TRUE
+
+/datum/status_effect/breath_of_the_wyld/on_remove()
+ owner.st_remove_stat_mod(STAT_PERCEPTION, type)
+ owner.st_remove_stat_mod(STAT_INTELLIGENCE, type)
+ owner.st_remove_stat_mod(STAT_WITS, type)
+ REMOVE_TRAIT(owner, TRAIT_DIFFICULT_RAGE, type)
+ to_chat(owner, span_warning("Your mind settles, returning to it's normal state of lucidity."))
+
+/atom/movable/screen/alert/status_effect/breath_of_the_wyld/inspire
+ name = "Inspire"
+ desc = "Gain an additional die to all mental checks, but suffer a penalty to rage check difficulty."
+ icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi'
+ icon_state = "riddle" // TODO: get an icon for this
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm
index a9344b5e2184..14bf25741e3e 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm
@@ -1,7 +1,7 @@
/datum/action/cooldown/power/gift/resist_pain
name = "Resist Pain"
- desc = "Through force of will, the Philodox is able to ignore the pain of his wounds and continue acting normally."
+ desc = "Through force of will, the Fera is able to ignore the pain of their wounds and continue acting normally."
button_icon_state = "resist_pain"
rank = 1
willpower_cost = 1
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm
index 92136aa6ff92..411f88665099 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm
@@ -4,42 +4,35 @@
button_icon_state = "call_of_the_wyld"
rage_cost = 1
check_flags = null
- innate_ability = TRUE
+ innate_ability = FALSE
var/static/list/howls = list(
"attack" = list(
"menu" = "Attack",
SPLAT_GAROU = "A wolf howls a fierce call to attack",
- SPLAT_CORAX = "A raven hisses a fierce call to attack"
),
"retreat" = list(
"menu" = "Retreat",
SPLAT_GAROU = "A wolf howls a warning to retreat",
- SPLAT_CORAX = "A raven squawks a warning to retreat"
),
"help" = list(
"menu" = "Help",
SPLAT_GAROU = "A wolf howls a desperate plea for help",
- SPLAT_CORAX = "A raven shrieks a a desperate plea for help"
),
"gather" = list(
"menu" = "Gather",
SPLAT_GAROU = "A wolf howls to gather the pack",
- SPLAT_CORAX = "A raven beckons the conspiracy"
),
"victory" = list(
"menu" = "Victory",
SPLAT_GAROU = "A wolf howls in celebration of victory",
- SPLAT_CORAX = "A raven croaks in celebration of victory"
),
"dying" = list(
"menu" = "Dying",
SPLAT_GAROU = "A wolf howls in pain and despair",
- SPLAT_CORAX = "A raven shrieks in pain and despair"
),
"mourning" = list(
"menu" = "Mourning",
SPLAT_GAROU = "A wolf howls in deep mourning for the fallen",
- SPLAT_CORAX = "A raven mourns the loss of the fallen"
)
)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/hud.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/hud.dm
index 0f4f8e558446..d9ca1e92a31c 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/hud.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/hud.dm
@@ -139,8 +139,9 @@
abstract_type = /atom/movable/screen/fera_transform
icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/hud_transforms.dmi'
mouse_over_pointer = MOUSE_HAND_POINTER
- var/datum/species/left_click_transform
- var/datum/species/right_click_transform
+ /// Generic form slot (SPECIES_FERA_WAR, etc), resolved to the clicker's actual splat-specific species on use
+ var/left_click_form_id
+ var/right_click_form_id
/atom/movable/screen/fera_transform/Initialize(mapload, datum/hud/hud_owner)
. = ..()
@@ -157,9 +158,16 @@
return
var/datum/splat/werewolf/shifter/shifting = get_shifter_splat(clicker)
+ if(!istype(shifting))
+ return
+
var/list/modifiers = params2list(params)
// Right click for alt forms like glabro and hispo. Ctrl click to use rage to do it instantly (doesnt matter if its breed form tho)
- shifting.transform_fera(LAZYACCESS(modifiers, RIGHT_CLICK) ? right_click_transform : left_click_transform, LAZYACCESS(modifiers, CTRL_CLICK))
+ var/form_id = LAZYACCESS(modifiers, RIGHT_CLICK) ? right_click_form_id : left_click_form_id
+ var/datum/species/human/shifter/form_to_transform = shifting.get_form_by_id(form_id)
+ if(!form_to_transform)
+ return
+ shifting.transform_fera(form_to_transform, LAZYACCESS(modifiers, CTRL_CLICK))
/atom/movable/screen/fera_transform/update_icon(updates)
. = ..()
@@ -178,14 +186,19 @@
. = ..()
var/datum/splat/werewolf/shifter/shifting = get_shifter_splat(user)
+ if(!istype(shifting))
+ return
+
+ var/datum/species/human/shifter/left_form = shifting.get_form_by_id(left_click_form_id)
+ var/datum/species/human/shifter/right_form = shifting.get_form_by_id(right_click_form_id)
- if(left_click_transform && (left_click_transform in shifting.transformation_list))
- context[SCREENTIP_CONTEXT_LMB] = "Shift to [left_click_transform::name]"
- if(left_click_transform != shifting.get_breed_form_species())
+ if(left_form && (left_form in shifting.transformation_list))
+ context[SCREENTIP_CONTEXT_LMB] = "Shift to [initial(left_form.name)]"
+ if(left_form != shifting.get_breed_form_species())
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Shift using rage"
- if(right_click_transform && (right_click_transform in shifting.transformation_list))
- context[SCREENTIP_CONTEXT_RMB] = "Shift to [right_click_transform::name]"
- if(right_click_transform != shifting.get_breed_form_species())
+ if(right_form && (right_form in shifting.transformation_list))
+ context[SCREENTIP_CONTEXT_RMB] = "Shift to [initial(right_form.name)]"
+ if(right_form != shifting.get_breed_form_species())
context[SCREENTIP_CONTEXT_CTRL_RMB] = "Shift using rage"
return CONTEXTUAL_SCREENTIP_SET
@@ -195,23 +208,23 @@
name = "homid form"
icon_state = "homid"
screen_loc = UI_LIVING_TRANSFORM_HOMID
- left_click_transform = /datum/species/human/shifter/homid
- right_click_transform = /datum/species/human/shifter/bestial
+ left_click_form_id = SPECIES_FERA_HOMID
+ right_click_form_id = SPECIES_FERA_BESTIAL
/atom/movable/screen/fera_transform/war
name = "war form"
icon_state = "war"
screen_loc = UI_LIVING_TRANSFORM_WAR
- left_click_transform = /datum/species/human/shifter/war
+ left_click_form_id = SPECIES_FERA_WAR
/atom/movable/screen/fera_transform/feral
name = "feral form"
icon_state = "feral"
screen_loc = UI_LIVING_TRANSFORM_FERAL
- left_click_transform = /datum/species/human/shifter/feral
- right_click_transform = /datum/species/human/shifter/dire
+ left_click_form_id = SPECIES_FERA_FERAL
+ right_click_form_id = SPECIES_FERA_DIRE
#undef UI_LIVING_TRANSFORM_HOMID
#undef UI_LIVING_TRANSFORM_WAR
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm
index 91721e020a9d..87fad1c15a80 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm
@@ -44,3 +44,7 @@
/datum/preference/choiced/subsplat/fera_breed/coeax
savefile_key = "corax_breed"
splat_id = SPLAT_CORAX
+
+/datum/preference/choiced/subsplat/fera_breed/ananasi
+ savefile_key = "ananasi_breed"
+ splat_id = SPLAT_ANANASI
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm
index 7c735ce164ba..bc0d52a29a88 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm
@@ -33,3 +33,10 @@
/datum/preference/choiced/fera_fur_color/corax/init_possible_values()
return assoc_to_keys(GLOB.corax_fur_colors)
+
+/datum/preference/choiced/fera_fur_color/ananasi
+ savefile_key = "ananasi_fur_color"
+ splat_id = SPLAT_ANANASI
+
+/datum/preference/choiced/fera_fur_color/ananasi/init_possible_values()
+ return assoc_to_keys(GLOB.ananasi_fur_colors)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm
index 90ed73d3c5c8..f00b8a09d3ce 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm
@@ -274,10 +274,12 @@
fallback_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/hispo.dmi'
speed_mod = /datum/movespeed_modifier/shifter/dire
+/datum/species/human/shifter/dire/ananasi
+ form_causes_delirium = TRUE
+
/datum/species/human/shifter/dire/visible_gender_override(mob/living/carbon/human/holder)
return "beast"
-
/datum/species/human/shifter/feral
name = "feral form"
id = SPECIES_FERA_FERAL
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm
index 1f744e6cb2a1..f1ff6245d1a4 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm
@@ -109,4 +109,14 @@
/datum/splat/werewolf/shifter/proc/get_breed_form_species()
return breed_form?.breed_species
+/// Resolves generic form slot (SPECIES_FERA_WAR, SPECIES_FERA_FERAL, etc) to whatever species
+/// type this splat uses for that slot, letting individual fera subtypes (garou/corax/ananasi/etc)
+/// swap in their own unique subtype species
+/datum/splat/werewolf/shifter/proc/get_form_by_id(form_id)
+ if(!form_id)
+ return
+ for(var/datum/species/human/shifter/form_type as anything in transformation_list)
+ if(initial(form_type.id) == form_id)
+ return form_type
+
#undef DOGGY_ANIMATION_TIME
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm
index 2cf6da9efdd7..e60a5bb02912 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm
@@ -131,7 +131,6 @@
/datum/splat/werewolf/shifter/on_gain()
. = ..()
owner.set_species(/datum/species/human/shifter/homid)
- add_power(/datum/action/cooldown/power/gift/howling)
COOLDOWN_START(src, passive_regrowth_cd, 8 MINUTES)
RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(revert_to_breed_form))
@@ -140,8 +139,6 @@
. = ..()
if(!QDELETED(owner))
owner.set_species(/datum/species/human)
-
- remove_power(/datum/action/cooldown/power/gift/howling)
UnregisterSignal(owner, COMSIG_LIVING_DEATH)
/datum/splat/werewolf/shifter/splat_life(seconds_per_tick)
@@ -150,7 +147,7 @@
// their fast healing is represented in day/days in breed-form so we just dont.
var/can_passively_heal = !(is_breed_form() && (get_breed_form_species() != /datum/species/human/shifter/war))
if(COOLDOWN_FINISHED(src, passive_healing_cd))
- if(can_passively_heal)
+ if(can_passively_heal && !HAS_TRAIT(owner, TRAIT_NO_PASSIVE_HEALING))
// 2 to represent lethal. Fera passive regen closes burn, but not aggravated damage.
owner.heal_storyteller_health(2, heal_aggravated = FALSE, heal_scars = TRUE, heal_blood = TRUE, heal_burn = TRUE)
// Keep organ healing ticking so internal damage recovers even between major regrowth pulses.
@@ -290,6 +287,50 @@
. = ..()
remove_power(/datum/action/cooldown/power/gift/eye_drink)
+/datum/splat/werewolf/shifter/ananasi
+ name = "Ananasi"
+ id = SPLAT_ANANASI
+ uses_rage = FALSE
+ splat_traits = list(
+ TRAIT_FERA_FORMS,
+ TRAIT_FERA_FUR,
+ TRAIT_FERA_RENOWN,
+ TRAIT_NO_PASSIVE_HEALING,
+ )
+ transformation_list = list(
+ /datum/species/human/shifter/homid,
+ /datum/species/human/shifter/war,
+ /datum/species/human/shifter/dire/ananasi,
+ /datum/species/human/shifter/feral
+ )
+ transformation_stats = list(
+ SPECIES_FERA_WAR = list(
+ STAT_STRENGTH = 3,
+ STAT_STAMINA = 2,
+ STAT_DEXTERITY = 3,
+ STAT_MANIPULATION = -1,
+ STAT_APPEARANCE = -1
+ ),
+ SPECIES_FERA_FERAL = list(
+ STAT_DEXTERITY = 6,
+ ),
+ SPECIES_FERA_DIRE = list(
+ STAT_STRENGTH = 4,
+ STAT_DEXTERITY = 2,
+ STAT_MANIPULATION = -3,
+ STAT_APPEARANCE = -2
+ )
+ )
+ transform_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/ananasi_transform.ogg'
+ mob_icons = list(
+ SPECIES_FERA_WAR = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/lilian.dmi',
+ SPECIES_FERA_DIRE = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/pithus.dmi',
+ SPECIES_FERA_FERAL = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/crawlerling.dmi'
+ )
+ transform_hud_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/hud_transforms.dmi'
+ mimmicing_animal = /mob/living/basic/spider/giant/arachnid
+
+ warcry_emote = "hiss"
/mob/living/carbon/human/splat/kinfolk
auto_splats = list(/datum/splat/werewolf/kinfolk)
@@ -299,3 +340,6 @@
/mob/living/carbon/human/splat/corax
auto_splats = list(/datum/splat/werewolf/shifter/corax)
+
+/mob/living/carbon/human/splat/ananasi
+ auto_splats = list(/datum/splat/werewolf/shifter/ananasi)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/is_werewolf_helpers.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/is_werewolf_helpers.dm
index 1054fee7653b..82b47ad705e7 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/is_werewolf_helpers.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/is_werewolf_helpers.dm
@@ -21,6 +21,11 @@
return character.get_splat(/datum/splat/werewolf/shifter/corax)
+/proc/get_ananasi_splat(mob/character)
+ RETURN_TYPE(/datum/splat/werewolf/shifter/ananasi)
+
+ return character.get_splat(/datum/splat/werewolf/shifter/ananasi)
+
/proc/get_kinfolk_splat(mob/character)
RETURN_TYPE(/datum/splat/werewolf/kinfolk)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/pref_lore.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/pref_lore.dm
index 0e12111cee0c..51a328f15771 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/pref_lore.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/pref_lore.dm
@@ -93,3 +93,39 @@
)
return to_add
+
+// START - ANANASI SPLAT
+/datum/splat/werewolf/shifter/ananasi/prepare_human_for_preview(mob/living/carbon/human/human)
+ human.set_haircolor("#50504f", update = FALSE)
+ human.set_hairstyle("Wisp", update = TRUE)
+ human.undershirt = "Shirt (Black)"
+ human.glasses = "Prescription Glasses"
+ human.update_body()
+
+/datum/splat/werewolf/shifter/ananasi/get_splat_description()
+ return "Lorem Ipsum"
+
+/datum/splat/werewolf/shifter/ananasi/get_splat_lore()
+ return list(
+ "Lorem Ipsum",
+ )
+
+/datum/splat/werewolf/shifter/corax/create_pref_unique_perks()
+ var/list/to_add = list()
+
+ to_add += list(
+ list(
+ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
+ SPECIES_PERK_ICON = FA_ICON_SPIDER,
+ SPECIES_PERK_NAME = "Shapeshifting",
+ SPECIES_PERK_DESC = "Ananasi can shift between 4 different forms that grant them bonuses.",
+ ),
+ list(
+ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
+ SPECIES_PERK_ICON = FA_ICON_BAND_AID,
+ SPECIES_PERK_NAME = "Passive healing",
+ SPECIES_PERK_DESC = "Ananasi can use blood they've consumed to heal their injuries.",
+ ),
+ )
+
+ return to_add
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/ananasi.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/ananasi.dm
new file mode 100644
index 000000000000..7b964b81c68e
--- /dev/null
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/ananasi.dm
@@ -0,0 +1,31 @@
+/datum/subsplat/werewolf/breed_form/ananasi
+ abstract_type = /datum/subsplat/werewolf/breed_form/ananasi
+ fera_restriction = SPLAT_ANANASI
+ roleplay_level = "Advanced"
+
+/datum/subsplat/werewolf/breed_form/ananasi/homid
+ name = BREED_ANANASI_HOMID
+ start_gnosis = 4
+ breed_species = /datum/species/human/shifter/homid
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/breath_of_the_wyld/inspire,
+ /datum/action/cooldown/power/gift/resist_pain,
+ /datum/action/cooldown/power/gift/stolen_moments,
+ /datum/action/cooldown/power/gift/bloodheal
+ )
+
+/datum/subsplat/werewolf/breed_form/ananasi/arachnid
+ name = BREED_ARACHNID
+ start_gnosis = 4
+ breed_species = /datum/species/human/shifter/feral
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/breath_of_the_wyld/inspire,
+ /datum/action/cooldown/power/gift/resist_pain,
+ /datum/action/cooldown/power/gift/stolen_moments,
+ /datum/action/cooldown/power/gift/bloodheal
+ )
+
+/datum/subsplat/werewolf/breed_form/ananasi/arachnid/generation_pref_icon(datum/universal_icon/main_icon)
+ var/datum/universal_icon/breed_crinos = uni_icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/lilian.dmi', "black")
+ breed_crinos.scale(32, 32)
+ main_icon.blend_icon(breed_crinos, ICON_OVERLAY)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/garou.dm
index 5c97ce104781..3d57e19a8920 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/garou.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/breeds/garou.dm
@@ -1,6 +1,9 @@
/datum/subsplat/werewolf/breed_form/garou
abstract_type = /datum/subsplat/werewolf/breed_form/garou
fera_restriction = SPLAT_GAROU
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/howling
+ )
/datum/subsplat/werewolf/breed_form/garou/homid
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/crawlerling.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/crawlerling.dmi
new file mode 100644
index 000000000000..5f237db20253
Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/crawlerling.dmi differ
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/lilian.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/lilian.dmi
new file mode 100644
index 000000000000..c99595a890ff
Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/lilian.dmi differ
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/pithus.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/pithus.dmi
new file mode 100644
index 000000000000..c99595a890ff
Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/ananasi_forms/pithus.dmi differ
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi
index c7d80d11f83f..3cb07f0c2756 100644
Binary files a/modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi differ
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/ananasi_transform.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/ananasi_transform.ogg
new file mode 100644
index 000000000000..60bc29226fc6
Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/ananasi_transform.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 4c46ae943d84..74ae7d0ed112 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -8212,6 +8212,7 @@
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\banes\suffocating.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\corvid\_bird.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\corvid\bird_ai.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\changing_breeds\ananasi.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\changing_breeds\corax.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\_gift.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\ahroun.dm"
@@ -8258,6 +8259,7 @@
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\auspices\_auspice.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\auspices\garou.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\breeds\_breed.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\breeds\ananasi.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\breeds\corax.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\breeds\garou.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\subsplats\tribes\_tribe.dm"
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx
index f6bb6b7f0fa4..f133df4830b4 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx
@@ -10,3 +10,8 @@ export const corax_fur_color: FeatureChoiced = {
name: 'Corax Feather Color',
component: FeatureDropdownInput,
};
+
+export const ananasi_fur_color: FeatureChoiced = {
+ name: 'Ananasi Fur Color',
+ component: FeatureDropdownInput,
+};