Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions code/__DEFINES/~darkpack/fera/fera.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
5 changes: 3 additions & 2 deletions code/__DEFINES/~darkpack/signals_kindred.dm
Original file line number Diff line number Diff line change
@@ -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"
3 changes: 2 additions & 1 deletion code/__DEFINES/~darkpack/splats.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions code/__DEFINES/~darkpack/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"
Expand Down
2 changes: 2 additions & 0 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/traits/admin_tooling.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
1 change: 1 addition & 0 deletions config/darkpack_config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
11 changes: 9 additions & 2 deletions modular_darkpack/modules/blood_drinking/code/vamp_bite.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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 <i>that</i>."))
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 <b>BLOOD</b> is toxic to you!"))
return
// Allow ghouls to steal viate?
if(get_ghoul_splat(src))
if(!get_kindred_splat(bit_living))
Expand Down Expand Up @@ -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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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))

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
)

Expand Down
Loading
Loading