diff --git a/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm b/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm
index 0ea48837babf..0b5a3408e523 100644
--- a/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm
+++ b/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm
@@ -7,3 +7,5 @@
//from base of living/CanAllowThrough(): (atom/movable/mover, border_dir)
#define COMSIG_LIVING_CAN_ALLOW_THROUGH "living_can_allow_through"
#define COMPONENT_LIVING_PASSABLE (1<<0)
+//from /datum/storyteller_roll/proc/st_roll(), args are the roll datum and role output
+#define COMSIG_LIVING_DICE_ROLLED "living_dice_rolled"
diff --git a/code/__DEFINES/~darkpack/fera/fera.dm b/code/__DEFINES/~darkpack/fera/fera.dm
index 7a93866a0454..a00f41eece26 100644
--- a/code/__DEFINES/~darkpack/fera/fera.dm
+++ b/code/__DEFINES/~darkpack/fera/fera.dm
@@ -25,4 +25,4 @@ GLOBAL_LIST_INIT(garou_fur_colors, list(
"brown" = "brown"
))
-#define STATUS_EFFECT_SILVER_BULLLET_STACKS /datum/status_effect/stacking/silver_bullets
+#define STATUS_EFFECT_SILVER_BULLET_STACKS /datum/status_effect/stacking/silver_bullets
diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm
index 1d0d3424b7f0..34bf0b5be4d8 100644
--- a/code/__DEFINES/~darkpack/traits/declarations.dm
+++ b/code/__DEFINES/~darkpack/traits/declarations.dm
@@ -124,16 +124,23 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_WTA_GAROU_AUSPICE "wta_garou_auspice"
// This mob has fur!
#define TRAIT_FERA_FUR "fera_fur"
-/// If the fera is wyrm tainted. Affects their sprite.
+/// If the fera is wyrm tainted.
#define TRAIT_WYRMTAINTED "wyrm_tainted"
+/// If the fera is wyrm tainted. Affects their sprite.
+#define TRAIT_WYRMTAINTED_SPRITE "wyrm_tainted_sprite"
/// For living mobs to prevent adjustments to their lying angle. Used primarly for fera.
#define TRAIT_NO_LYING_ANGLE "no_lying_angle"
// Expensive but allows us to ensure there resting gets updated.
#define TRAIT_TRANSFORM_UPDATES_ICON "transform_updates_icon"
-// Massivly boosts the range of your howl emote.
-#define TRAIT_LOUD_HOWLER "loud_howler"
/// Prevents the mob from picking up items larger then small
#define TRAIT_SMALL_HANDS "small_hands"
+// Traits granted via gifts
+// Massivly boosts the range of your howl emote.
+#define TRAIT_LOUD_HOWLER "loud_howler"
+#define TRAIT_RAZOR_CLAWS "razor_claws"
+
+/// Sixth sense restricted to view range
+#define TRAIT_LOCAL_SIXTHSENSE "local_sixth_sense"
// BELOW ARE ALL MERITS/FLAWS
#define TRAIT_ILLEGAL_IDENTITY "illegal_identity" // GOVERNMENT
diff --git a/code/__DEFINES/~darkpack/traits/sources.dm b/code/__DEFINES/~darkpack/traits/sources.dm
index 6402f89925de..fbe972ee6d3a 100644
--- a/code/__DEFINES/~darkpack/traits/sources.dm
+++ b/code/__DEFINES/~darkpack/traits/sources.dm
@@ -4,6 +4,8 @@
#define CLAN_TRAIT "clan"
#define DISCIPLINE_TRAIT "discipline"
+#define GIFT_TRAIT "gift"
+
#define STAKE_TRAIT "stake"
#define DAMAGE_TRAIT "damage"
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 5b997464250f..a138dbdbf0f3 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -403,6 +403,10 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
override = TRUE
if(HAS_TRAIT(M, TRAIT_SIXTHSENSE) && message_type == DEADCHAT_REGULAR)
override = TRUE
+ // DARKPACK EDIT ADD START
+ if(HAS_TRAIT(M, TRAIT_LOCAL_SIXTHSENSE) && (message_type == DEADCHAT_REGULAR) && (source in orange(DEFAULT_MESSAGE_RANGE, M)))
+ override = TRUE
+ // DARKPACK EDIT ADD END
if(SSticker.current_state == GAME_STATE_FINISHED)
override = TRUE
if(isnewplayer(M) && !override)
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index fe4db9796e5c..6f9a9a4f2a09 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -665,9 +665,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_SPACE_ANT_IMMUNITY" = TRAIT_SPACE_ANT_IMMUNITY,
"TRAIT_BRAIN_TRAUMA_IMMUNITY" = TRAIT_BRAIN_TRAUMA_IMMUNITY,
"TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP,
+ "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD
"TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD
"TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD
- "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD
"TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD
"TRAIT_CANNOT_RESIST_MIND_CONTROL" = TRAIT_CANNOT_RESIST_MIND_CONTROL, // DARKPACK EDIT ADD
"TRAIT_CAN_ENTER_TORPOR" = TRAIT_CAN_ENTER_TORPOR, // DARKPACK EDIT ADD
@@ -693,6 +693,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD
"TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD
"TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD
+ "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD
"TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD
"TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD
@@ -706,6 +707,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD
"TRAIT_PASSDOOR" = TRAIT_PASSDOOR, // DARKPACK EDIT ADD
"TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD
+ "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_RUBICON" = TRAIT_RUBICON, // DARKPACK EDIT ADD
@@ -731,10 +733,11 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_VTM_MORALITY" = TRAIT_VTM_MORALITY, // DARKPACK EDIT ADD
"TRAIT_WARM_AURA" = TRAIT_WARM_AURA, // DARKPACK EDIT ADD
"TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate)
- "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD
- "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD
- "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD
- "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD
+ "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF
),
/mob/living/carbon = list(
"TRAIT_BRAINLESS_CARBON" = TRAIT_BRAINLESS_CARBON,
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index 65a95b899142..8d9ccfedf1d2 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -355,9 +355,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_LEFT_EYE_SCAR" = TRAIT_LEFT_EYE_SCAR,
"TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR,
"TRAIT_CARPOTOXIN_IMMUNE" = TRAIT_CARPOTOXIN_IMMUNE,
+ "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD
"TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD
"TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD
- "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD
"TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD
"TRAIT_CANNOT_RESIST_MIND_CONTROL" = TRAIT_CANNOT_RESIST_MIND_CONTROL, // DARKPACK EDIT ADD
"TRAIT_CAN_ENTER_TORPOR" = TRAIT_CAN_ENTER_TORPOR, // DARKPACK EDIT ADD
@@ -383,6 +383,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD
"TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD
"TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD
+ "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD
"TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD
"TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF
"TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD
@@ -396,6 +397,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD
"TRAIT_PASSDOOR" = TRAIT_PASSDOOR, // DARKPACK EDIT ADD
"TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD
+ "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_RUBICON" = TRAIT_RUBICON, // DARKPACK EDIT ADD
@@ -421,10 +423,11 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_VTM_MORALITY" = TRAIT_VTM_MORALITY, // DARKPACK EDIT ADD
"TRAIT_WARM_AURA" = TRAIT_WARM_AURA, // DARKPACK EDIT ADD
"TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate)
- "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD
- "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD
- "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD
- "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD
+ "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF
+ "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF
),
/obj/item = list(
"TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING,
diff --git a/icons/effects/mouse_pointers/discipline.dmi b/icons/effects/mouse_pointers/discipline.dmi
deleted file mode 100644
index 3a01efceb96e..000000000000
Binary files a/icons/effects/mouse_pointers/discipline.dmi and /dev/null differ
diff --git a/modular_darkpack/modules/areas/code/__vtm.dm b/modular_darkpack/modules/areas/code/__vtm.dm
index 58b3d2d86363..71afaff63047 100644
--- a/modular_darkpack/modules/areas/code/__vtm.dm
+++ b/modular_darkpack/modules/areas/code/__vtm.dm
@@ -7,6 +7,10 @@
outdoors = TRUE
var/zone_type = ZONE_MASQUERADE
+ // 7 is an average city street.
+ /// The rating of the gauntlet, the Gauntlet is strongest near certain types of environments
+ var/gauntlet_rating = 7 // WEREWOLF
+
/area/vtm/powered(chan)
if (!requires_power)
return TRUE
diff --git a/modular_darkpack/modules/areas/code/interiors/endron_facility.dm b/modular_darkpack/modules/areas/code/interiors/endron_facility.dm
index 17be97f4b145..b5861760c854 100644
--- a/modular_darkpack/modules/areas/code/interiors/endron_facility.dm
+++ b/modular_darkpack/modules/areas/code/interiors/endron_facility.dm
@@ -4,6 +4,7 @@
zone_type = ZONE_NO_MASQUERADE
music_index = MUSIC_FOREST
fire_controled = FALSE
+ gauntlet_rating = 8
/area/vtm/interior/endron_facility/restricted
name = MAIN_EVIL_COMPANY + " Facility Restricted"
@@ -23,6 +24,7 @@
icon_state = "supply"
zone_type = ZONE_NO_MASQUERADE
fire_controled = TRUE
+ gauntlet_rating = 6
/area/vtm/interior/endron_facility/plant
name = "Endron Processing Plant"
diff --git a/modular_darkpack/modules/areas/code/interiors/garou.dm b/modular_darkpack/modules/areas/code/interiors/garou.dm
index edf0bc42cc12..61d28ab27d6c 100644
--- a/modular_darkpack/modules/areas/code/interiors/garou.dm
+++ b/modular_darkpack/modules/areas/code/interiors/garou.dm
@@ -2,6 +2,7 @@
name = "Children of Gaia Caern"
icon_state = "cog_caern"
zone_type = ZONE_ELYSIUM
+ gauntlet_rating = 5
/area/vtm/interior/cog/pantry
name = "Earth's Bounty Food Pantry"
diff --git a/modular_darkpack/modules/areas/code/outsides/forest.dm b/modular_darkpack/modules/areas/code/outsides/forest.dm
index 29bee2c1ce1f..5d5c00880bea 100644
--- a/modular_darkpack/modules/areas/code/outsides/forest.dm
+++ b/modular_darkpack/modules/areas/code/outsides/forest.dm
@@ -3,3 +3,4 @@
icon_state = "park"
zone_type = ZONE_NO_MASQUERADE
sound_environment = SOUND_ENVIRONMENT_FOREST
+ gauntlet_rating = 6
diff --git a/modular_darkpack/modules/areas/code/random_gen.dm b/modular_darkpack/modules/areas/code/random_gen.dm
index 1a3653d55085..3d1aa7727e57 100644
--- a/modular_darkpack/modules/areas/code/random_gen.dm
+++ b/modular_darkpack/modules/areas/code/random_gen.dm
@@ -3,6 +3,7 @@
icon_state = "park"
outdoors = TRUE
map_generator = /datum/map_generator/jungle_generator
+ gauntlet_rating = 6
/area/vtm/planetgeneration/woodland
@@ -10,3 +11,4 @@
icon_state = "cog_caern"
outdoors = TRUE
map_generator = /datum/map_generator/jungle_generator/woodland
+ gauntlet_rating = 6
diff --git a/modular_darkpack/modules/deprecated/sounds/necromancy.ogg b/modular_darkpack/modules/deprecated/sounds/necromancy.ogg
deleted file mode 100644
index 09ad35772470..000000000000
Binary files a/modular_darkpack/modules/deprecated/sounds/necromancy.ogg and /dev/null differ
diff --git a/modular_darkpack/modules/doors/code/vampdoor.dm b/modular_darkpack/modules/doors/code/vampdoor.dm
index e326d7a8da04..01fb316bba1c 100644
--- a/modular_darkpack/modules/doors/code/vampdoor.dm
+++ b/modular_darkpack/modules/doors/code/vampdoor.dm
@@ -45,6 +45,11 @@
AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Try lock")
+ var/static/list/loc_connections = list(
+ COMSIG_ATOM_MAGICALLY_UNLOCKED = PROC_REF(on_magic_unlock),
+ )
+ AddElement(/datum/element/connect_loc, loc_connections)
+
/obj/structure/vampdoor/CanAStarPass(to_dir, datum/can_pass_info/pass_info)
return !density || !locked
@@ -162,6 +167,13 @@
closed = FALSE
SEND_SIGNAL(src, COMSIG_AIRLOCK_OPEN)
+/// Signal proc for [COMSIG_ATOM_MAGICALLY_UNLOCKED]. Unlock and open up when we get knock casted.
+/obj/structure/vampdoor/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, atom/caster)
+ SIGNAL_HANDLER
+
+ locked = FALSE
+ INVOKE_ASYNC(src, PROC_REF(open_door))
+
/obj/structure/vampdoor/proc/close_door(mob/user, force)
if(!force)
for(var/mob/living/L in src.loc)
diff --git a/modular_darkpack/modules/powers/code/discipline/animalism.dm b/modular_darkpack/modules/powers/code/discipline/animalism.dm
index d9baea2fa6e6..bbb2c5081d21 100644
--- a/modular_darkpack/modules/powers/code/discipline/animalism.dm
+++ b/modular_darkpack/modules/powers/code/discipline/animalism.dm
@@ -7,7 +7,7 @@
/datum/discipline_power/animalism
name = "Animalism power name"
desc = "Animalism power description"
- effect_sound = 'modular_darkpack/modules/deprecated/sounds/wolves.ogg'
+ effect_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wolves.ogg'
/datum/discipline_power/animalism/activate()
. = ..()
diff --git a/modular_darkpack/modules/splats/code/human_dummies.dm b/modular_darkpack/modules/splats/code/human_dummies.dm
new file mode 100644
index 000000000000..c3dfc61a4934
--- /dev/null
+++ b/modular_darkpack/modules/splats/code/human_dummies.dm
@@ -0,0 +1,9 @@
+// mimmics /mob/living/carbon/human/species to allow for quick testing
+/mob/living/carbon/human/splat
+ abstract_type = /mob/living/carbon/human/splat
+ var/auto_splats = list()
+
+/mob/living/carbon/human/splat/Initialize(mapload)
+ . = ..()
+ for(var/splat in auto_splats)
+ add_splat(splat)
diff --git a/modular_darkpack/modules/splats/code/powers/_power.dm b/modular_darkpack/modules/splats/code/powers/_power.dm
index 10480f589040..d99530edb81d 100644
--- a/modular_darkpack/modules/splats/code/powers/_power.dm
+++ b/modular_darkpack/modules/splats/code/powers/_power.dm
@@ -6,3 +6,40 @@
// Not used presently but good future proofing incase behavoirs care.
/// Means that this action is not a real power, but some sort of innate ability we represent as a power/disc/gift mechnaicly.
var/innate_ability = FALSE
+
+ /// How much temporary willpower is required to use this ability
+ var/willpower_cost = 0
+
+/datum/action/cooldown/power/IsAvailable(feedback)
+ . = ..()
+
+ if(!can_afford(feedback))
+ return FALSE
+
+/datum/action/cooldown/power/Activate(atom/target)
+ . = ..()
+
+ spend_resources()
+
+
+/**
+ * Returns a boolean of if the caster can afford
+ * this power's cost cost.
+ */
+/datum/action/cooldown/power/proc/can_afford(feedback)
+ if(willpower_cost && isliving(owner))
+ var/mob/living/living_owner = owner
+ if(willpower_cost > living_owner.st_get_stat(STAT_TEMPORARY_WILLPOWER))
+ if(feedback)
+ to_chat(owner, span_warning("You don't have enough willpower to do that!"))
+ return FALSE
+ return TRUE
+
+/**
+ * Overridable proc handling the spending of resources (willpower/vitae/rage/etc)
+ * when casting the power.
+ */
+/datum/action/cooldown/power/proc/spend_resources()
+ if(willpower_cost && isliving(owner))
+ var/mob/living/living_owner = owner
+ living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -willpower_cost)
diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm
index 7621113087d1..0ac46b1dc569 100644
--- a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm
+++ b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm
@@ -85,6 +85,7 @@
LAZYADDASSOC(mobs_last_rolled, WEAKREF(roller), list(world.time, output))
+ SEND_SIGNAL(roller, COMSIG_LIVING_DICE_ROLLED, src, output)
return output
diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm b/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm
index 9abca7539c78..3187e547dcc7 100644
--- a/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm
+++ b/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm
@@ -32,6 +32,13 @@ SUBSYSTEM_DEF(roll)
dice_roll.numerical = numerical
return dice_roll.st_roll(roller, roller, dice)
+/datum/controller/subsystem/roll/proc/storyteller_roll_stats(applic_stats = list(), bonus = 0, difficulty = 6, mob/living/roller = null, numerical = FALSE)
+ var/datum/storyteller_roll/dice_roll = new()
+ dice_roll.applicable_stats = applic_stats
+ dice_roll.difficulty = difficulty
+ dice_roll.numerical = numerical
+ return dice_roll.st_roll(roller, roller, bonus)
+
//Config datums for exploding dice
/datum/config_entry/flag/on_crit_additional_success
diff --git a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm
index 4bf56f68f8b8..4c818b3164af 100644
--- a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm
+++ b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm
@@ -16,6 +16,15 @@
var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"]
return given_stat?.set_score(amount)
+/// Changes a specific mob's stat from its stats list by the given amount.
+/mob/living/proc/st_change_stat(stat_path, amount)
+ var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"]
+ if(amount > 0)
+ return given_stat?.increase_score(amount)
+ else
+ return given_stat?.decrease_score(amount)
+
+
/mob/living/proc/st_add_stat_mod(stat_path, amount, source)
var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"]
return given_stat?.add_stat_mod(amount, source)
diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm b/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm
index ab37d3dcdc65..8d6c56621715 100644
--- a/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm
+++ b/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm
@@ -7,7 +7,7 @@
button_icon_state = "vitae"
background_icon = 'modular_darkpack/master_files/icons/mob/actions/backgrounds.dmi'
background_icon_state = "bg_discipline"
- ranged_mousepointer = 'icons/effects/mouse_pointers/discipline.dmi'
+ ranged_mousepointer = 'modular_darkpack/modules/deprecated/icons/effects/mouse_pointers/discipline.dmi'
cooldown_time = 10 SECONDS
vampiric = TRUE
diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm
index b711203a495a..0bf0978c692f 100644
--- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm
+++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm
@@ -2,3 +2,6 @@
RETURN_TYPE(/datum/splat/vampire/ghoul)
return add_splat(/datum/splat/vampire/ghoul, domitor)
+
+/mob/living/carbon/human/splat/ghoul
+ auto_splats = list(/datum/splat/vampire/ghoul)
diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm
index 637fbe7fdab2..9ffd786f578c 100644
--- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm
+++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm
@@ -27,3 +27,6 @@
childe_clan = GLOB.vampire_clans[/datum/subsplat/vampire_clan/caitiff]
return make_kindred(sire_splat.generation + 1, childe_clan, FALSE, sire)
+
+/mob/living/carbon/human/splat/kindred
+ auto_splats = list(/datum/splat/vampire/kindred)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gauntlet.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gauntlet.dm
new file mode 100644
index 000000000000..c66cae920103
--- /dev/null
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gauntlet.dm
@@ -0,0 +1,6 @@
+/atom/proc/get_gauntlet_rating()
+ var/area/vtm/my_area = astype(get_area(src))
+ if(my_area)
+ return my_area.gauntlet_rating
+ return 7
+
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm
index 8dfddb0a207e..95fa3ecad84b 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm
@@ -7,49 +7,64 @@
check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS
+ var/default_activate_message = TRUE
- var/rage_req = 0
- var/gnosis_req = 0
+ var/rage_cost = 0
+ var/gnosis_cost = 0
/datum/action/cooldown/power/gift/IsAvailable(feedback)
. = ..()
- if(!ishuman(owner))
+ var/datum/splat/werewolf/casting_splat = iswerewolfsplat(owner)
+ if(!casting_splat)
if(feedback)
- owner.balloon_alert(owner, "not human!")
+ owner.balloon_alert(owner, "not a gift user!")
return FALSE
+/datum/action/cooldown/power/gift/Activate(atom/target)
+ . = ..()
+
+ if(default_activate_message)
+ to_chat(owner, span_notice("You activate the [name]..."))
+
+/datum/action/cooldown/power/gift/can_afford(feedback)
+ . = ..()
var/datum/splat/werewolf/casting_splat = iswerewolfsplat(owner)
if(get_rage_cost())
+ if(!casting_splat)
+ return FALSE
if(casting_splat.rage < get_rage_cost())
if(feedback)
to_chat(owner, span_warning("You don't have enough RAGE to do that!"))
SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_cast_failed.ogg', volume = 50))
return FALSE
- if(gnosis_req)
- if(casting_splat.gnosis < gnosis_req)
+ if(gnosis_cost)
+ if(!casting_splat)
+ return FALSE
+ if(casting_splat.gnosis < gnosis_cost)
if(feedback)
to_chat(owner, span_warning("You don't have enough GNOSIS to do that!"))
SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_cast_failed.ogg', volume = 50))
return FALSE
-
-/datum/action/cooldown/power/gift/Activate(atom/target)
+/datum/action/cooldown/power/gift/spend_resources()
. = ..()
- if(!ishuman(owner))
- return FALSE
-
var/datum/splat/werewolf/casting_splat = iswerewolfsplat(owner)
-
if(get_rage_cost())
- casting_splat.adjust_rage(-get_rage_cost(), owner, FALSE)
+ casting_splat?.adjust_rage(-get_rage_cost(), owner, FALSE)
if(get_gnosis_cost())
- casting_splat.adjust_gnosis(-get_gnosis_cost(), owner, FALSE)
- to_chat(owner, span_notice("You activate the [name]..."))
+ casting_splat?.adjust_gnosis(-get_gnosis_cost(), owner, FALSE)
+
/datum/action/cooldown/power/gift/proc/get_rage_cost()
- return rage_req
+ return rage_cost
/datum/action/cooldown/power/gift/proc/get_gnosis_cost()
- return gnosis_req
+ return gnosis_cost
+
+
+/atom/movable/screen/alert/status_effect/gift
+ icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi'
+ icon_state = "bg_gift"
+ overlay_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi'
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm
index 5422173bfc98..72598ccee025 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm
@@ -3,12 +3,12 @@
desc = "This Gift allows the Garou to send her foe sprawling with but a touch."
button_icon_state = "falling_touch"
click_to_activate = TRUE
+ rank = 1
/datum/action/cooldown/power/gift/falling_touch/set_click_ability(mob/on_who)
. = ..()
SEND_SOUND(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/falling_touch.ogg')
-
/datum/action/cooldown/power/gift/falling_touch/Activate(atom/target)
if(!isliving(target))
return
@@ -24,7 +24,7 @@
if(caster.combat_mode)
victim.Knockdown(1 TURNS)
victim.Immobilize(1 TURNS)
- playsound(get_turf(caster), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/falling_touch_activate.ogg', 75, FALSE) // red-tailed hawk sound mixed with disintegrate.ogg
+ playsound(caster, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/falling_touch_activate.ogg', 75, FALSE) // red-tailed hawk sound mixed with disintegrate.ogg
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
if(holding)
victim.attackby(holding, caster)
@@ -43,3 +43,81 @@
StartCooldown()
return TRUE
+
+
+/datum/action/cooldown/power/gift/inspiration
+ name = "Inspiration"
+ desc = "The Garou with this Gift lends new resolve and righteous anger to his brethren."
+ button_icon_state = "inspiration"
+ gnosis_cost = 1
+ rank = 1
+
+/datum/action/cooldown/power/gift/inspiration/Activate(atom/target)
+ . = ..()
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspiration.ogg', 75, FALSE)
+ owner.emote("scream")
+ for(var/mob/living/nearby_guy in oviewers(7, owner))
+ nearby_guy.apply_status_effect(/datum/status_effect/inspiration)
+
+/datum/status_effect/inspiration
+ id = "inspiration"
+ duration = 1 SCENES
+ status_type = STATUS_EFFECT_REPLACE
+ alert_type = /atom/movable/screen/alert/status_effect/gift/inspiration
+
+/datum/status_effect/inspiration/on_apply()
+ . = ..()
+ if(isliving(owner))
+ var/mob/living/living_owner = owner
+ living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, 1)
+
+/datum/status_effect/inspiration/on_remove()
+ if(isliving(owner))
+ var/mob/living/living_owner = owner
+ // Ugh. We really dont have a way to represent or register the spending of a temporary temp willpoint....
+ living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -1)
+ return ..()
+
+/atom/movable/screen/alert/status_effect/gift/inspiration
+ name = /datum/action/cooldown/power/gift/inspiration::name
+ desc = "You have an extra temporary willpower for one scene!"
+ overlay_state = /datum/action/cooldown/power/gift/inspiration::button_icon_state
+
+
+/datum/action/cooldown/power/gift/razor_claws
+ name = "Razor Claws"
+ desc = "By raking his claws over stone, steel, or another hard surface, the Ahroun hones them to razor sharpness."
+ button_icon_state = "razor_claws"
+ rank = 1
+ rage_cost = 1
+
+/datum/action/cooldown/power/gift/razor_claws/Activate(atom/target)
+ to_chat(owner, span_notice("You feel your claws sharpening..."))
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/razor_claws.ogg', 75, FALSE)
+ if(!do_after(owner, 1 TURNS))
+ return
+ . = ..()
+ var/mob/living/living_owner = astype(owner)
+ living_owner?.apply_status_effect(/datum/status_effect/razor_claws)
+
+// DARKPACK TODO - Requires https://github.com/DarkPack13/SecondCity/pull/680 for its stat handling.
+/datum/status_effect/razor_claws
+ id = "razor_claws"
+ duration = 1 SCENES
+ status_type = STATUS_EFFECT_REPLACE
+ alert_type = /atom/movable/screen/alert/status_effect/gift/razor_claws
+
+/datum/status_effect/razor_claws/on_apply()
+ . = ..()
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/razor_claws.ogg', 75, FALSE)
+ ADD_TRAIT(owner, TRAIT_RAZOR_CLAWS, GIFT_TRAIT)
+
+/datum/status_effect/razor_claws/on_remove()
+ REMOVE_TRAIT(owner, TRAIT_RAZOR_CLAWS, GIFT_TRAIT)
+ to_chat(owner, span_warning("Your claws are not sharp anymore..."))
+ return ..()
+
+/atom/movable/screen/alert/status_effect/gift/razor_claws
+ name = /datum/action/cooldown/power/gift/razor_claws::name
+ desc = "Your claws do extra damage."
+ overlay_state = /datum/action/cooldown/power/gift/razor_claws::button_icon_state
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm
index 7774c0b3e5e7..11797387513f 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm
@@ -1,60 +1,46 @@
-/*
/datum/action/cooldown/power/gift/beast_speech
name = "Beast Speech"
desc = "The werewolf with this Gift may communicate with any animals from fish to mammals."
button_icon_state = "beast_speech"
- rage_req = 1
- //gnosis_req = 1
+ rank = 1
+ rage_cost = 1
+ //gnosis_cost = 1
+// Extreamly TTRPG innacurate.
/datum/action/cooldown/power/gift/beast_speech/Activate(atom/target)
. = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- if(length(C.beastmaster) > 3)
- var/mob/living/simple_animal/hostile/beastmaster/B = pick(C.beastmaster)
- qdel(B)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/wolves.ogg', 75, FALSE)
- if(!length(C.beastmaster))
- var/datum/action/beastmaster_stay/E1 = new()
- E1.Grant(C)
- var/datum/action/beastmaster_deaggro/E2 = new()
- E2.Grant(C)
- var/mob/living/simple_animal/hostile/beastmaster/D = new(get_turf(C))
- D.my_creator = C
- C.beastmaster |= D
- D.beastmaster = C
-*/
-/*
+ var/mob/living/carbon/human/human_owner = astype(owner)
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wolves.ogg', 75, FALSE)
+ human_owner?.add_beastmaster_minion(/mob/living/basic/pet/dog/darkpack/summoned)
+
+
/datum/action/cooldown/power/gift/call_of_the_wyld
name = "Call Of The Wyld"
desc = "The werewolf may send her howl far beyond the normal range of hearing and imbue it with great emotion, stirring the hearts of fellow Garou and chilling the bones of all others."
button_icon_state = "call_of_the_wyld"
- rage_req = 1
+ rage_cost = 1
+ rank = 1
/datum/action/cooldown/power/gift/call_of_the_wyld/Activate(atom/target)
. = ..()
- if(!ishuman(owner))
- return
- var/mob/living/carbon/human/human_owner = owner
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- C.emote("howl")
- for(var/mob/living/carbon/A in orange(6, owner))
- if(isgarou(A) || iswerewolf(A))
- A.emote("howl")
- spawn(1 SECONDS)
- adjust_gnosis(1, A, TRUE)
+ owner.emote("howl")
+ for(var/mob/living/carbon/human/guy in orange(7, owner))
+ var/datum/splat/werewolf/werewolf_splat = iswerewolfsplat(guy)
+ if(werewolf_splat)
+ guy.emote("howl")
+ werewolf_splat.adjust_gnosis(1)
// awo1
-*/
+
// Very inaccurate right now
/datum/action/cooldown/power/gift/mindspeak
name = "Mindspeak"
desc = "By invoking the power of waking dreams, the Garou can place any chosen characters into silent communion."
button_icon_state = "mindspeak"
-// gnosis_req = 1
+ rank = 1
+// gnosis_cost = 1
/datum/action/cooldown/power/gift/mindspeak/Activate(atom/target)
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 ceff6a58f470..0b785813a5fe 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,8 +1,48 @@
+
+/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."
+ button_icon_state = "resist_pain"
+ rank = 1
+ willpower_cost = 1
+
+/datum/action/cooldown/power/gift/resist_pain/Activate(atom/target)
+ . = ..()
+ var/mob/living/living_owner = astype(owner)
+
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/resist_pain.ogg', 75, FALSE)
+ living_owner.apply_status_effect(/datum/status_effect/resist_pain)
+
+/datum/status_effect/resist_pain
+ id = "resist_pain"
+ duration = 1 SCENES
+ status_type = STATUS_EFFECT_REPLACE
+ alert_type = /atom/movable/screen/alert/status_effect/gift/resist_pain
+
+/datum/status_effect/resist_pain/on_apply()
+ . = ..()
+
+ to_chat(owner, span_notice("You feel your skin thickening..."))
+ owner.add_traits(list(TRAIT_NOSOFTCRIT, TRAIT_ANALGESIA), GIFT_TRAIT)
+
+/datum/status_effect/resist_pain/on_remove()
+ owner.remove_traits(list(TRAIT_NOSOFTCRIT, TRAIT_ANALGESIA), GIFT_TRAIT)
+ to_chat(owner, span_warning("Your skin is thin again..."))
+
+ return ..()
+
+/atom/movable/screen/alert/status_effect/gift/resist_pain
+ name = /datum/action/cooldown/power/gift/resist_pain::name
+ desc = /datum/action/cooldown/power/gift/resist_pain::desc
+ overlay_state = /datum/action/cooldown/power/gift/resist_pain::button_icon_state
+
+
/datum/action/cooldown/power/gift/scent_of_the_true_form
name = "Scent Of The True Form"
desc = "This Gift allows the Garou to determine the true nature of a person."
button_icon_state = "scent_of_the_true_form"
click_to_activate = TRUE
+ rank = 1
var/static/list/wyld_descriptors = list(
"ozone",
"euphoria",
@@ -63,7 +103,7 @@
secondary_descriptor = "[pick(wyrm_descriptors)]"
to_chat(owner, span_purple("[victim] smells like kin[secondary_descriptor ? "...
...and of [secondary_descriptor]." : "."]"))
else
- var/successes = SSroll.storyteller_roll(caster.st_get_stat(STAT_PERCEPTION) + PRIMAL_URGE_PLACEHOLDER, 6, owner, numerical = TRUE)
+ var/successes = SSroll.storyteller_roll_stats(list(STAT_PERCEPTION), PRIMAL_URGE_PLACEHOLDER, 6, owner, numerical = TRUE)
switch(successes)
if(0)
to_chat(owner, span_purple("You can't exactly tell what [victim] smells like."))
@@ -82,6 +122,8 @@
// to_chat(owner, span_purple("[victim] smells of brimstone."))
// if(ismummy(victim))
// to_chat(owner, span_purple("[victim] smells of [pick(wyld_descriptors)]"))
+ else
+ to_chat(owner, span_purple("[victim] smells mundane."))
if(4)
if(iskindred(victim))
to_chat(owner, span_purple("[victim] smells of [pick(wyrm_descriptors)]"))
@@ -99,8 +141,48 @@
// to_chat(owner, span_purple("[victim] smells of [pick(wyld_descriptors)]"))
// if(ismage(victim))
// to_chat(owner, span_purple("[victim] smells of pure energy."))
+ else
+ to_chat(owner, span_purple("[victim] smells mundane."))
caster.emote("sniff")
StartCooldown()
return TRUE
+
+
+/datum/action/cooldown/power/gift/truth_of_gaia
+ name = "Truth Of Gaia"
+ desc = "As judges of the Litany, Philodox have the ability to sense whether others have spoken truth or falsehood."
+ button_icon_state = "truth_of_gaia"
+ click_to_activate = TRUE
+ rank = 1
+
+/datum/action/cooldown/power/gift/truth_of_gaia/Activate(atom/target)
+ var/mob/living/living_target = astype(target)
+ if(!living_target)
+ return FALSE
+
+ . = ..()
+
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.applicable_stats = list(STAT_INTELLIGENCE, STAT_EMPATHY)
+ roll_datum.difficulty = living_target.st_get_stat(STAT_MANIPULATION) + living_target.st_get_stat(STAT_SUBTERFUGE)
+ var/roll_result = roll_datum.st_roll(owner)
+
+ if(roll_result != ROLL_SUCCESS)
+ return
+
+ SEND_SOUND(target, sound('sound/effects/magic/clockwork/invoke_general.ogg', volume = 50)) // LOOK OUT! A WEREWOLF IS SMELLING YOU!
+
+ ASYNC
+ var/response_w = tgui_input_list(target, "Does your character believe your last statement is the truth?", name, list("Yes", "No", "Not sure"))
+ switch(response_w)
+ if("Yes")
+ to_chat(owner, span_notice("[target]'s scent bares the aroma of truthfulness."))
+ if("No") // Lying!
+ to_chat(owner, span_notice("[target]'s scent bares the aroma of deceit."))
+ else // Dunno
+ to_chat(owner, span_notice("[target]'s scent is uncertain. You can't determine the truth one way or the other."))
+
+ StartCooldown()
+ return TRUE
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm
index 5455734ebfa7..4881dc8a2595 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm
@@ -1,27 +1,54 @@
-/*
+// W20 p. 161
/datum/action/cooldown/power/gift/blur_of_the_milky_eye
name = "Blur Of The Milky Eye"
desc = "The Garou's form becomes a shimmering blur, allowing him to pass unnoticed among others."
button_icon_state = "blur_of_the_milky_eye"
- rage_req = 2
- //gnosis_req = 1
+ cooldown_time = 1 SCENES
+ rank = 1
/datum/action/cooldown/power/gift/blur_of_the_milky_eye/Activate(atom/target)
. = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- C.alpha = 36
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/milky_blur.ogg', 75, FALSE)
- spawn(20 SECONDS)
- C.alpha = 255
-*/
+ var/mob/living/living_owner = astype(owner)
+
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.applicable_stats = list(STAT_MANIPULATION, STAT_STEALTH)
+ roll_datum.numerical = TRUE
+ roll_datum.difficulty = 8
+ var/roll_result = roll_datum.st_roll(owner)
+
+ if(roll_result > 0)
+ living_owner?.apply_status_effect(/datum/status_effect/blur_of_the_milky_eye)
+
+/datum/status_effect/blur_of_the_milky_eye
+ id = "blur_of_the_milky_eye"
+ duration = 1 SCENES
+ status_type = STATUS_EFFECT_REPLACE
+ alert_type = /atom/movable/screen/alert/status_effect/gift/blur_of_the_milky_eye
+
+/datum/status_effect/blur_of_the_milky_eye/on_apply()
+ . = ..()
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/milky_blur.ogg', 75, FALSE)
+ owner.alpha = 50
+ apply_wibbly_filters(owner)
+
+/datum/status_effect/blur_of_the_milky_eye/on_remove()
+ owner.alpha = initial(owner.alpha)
+ remove_wibbly_filters(owner)
+ return ..()
+
+/atom/movable/screen/alert/status_effect/gift/blur_of_the_milky_eye
+ name = /datum/action/cooldown/power/gift/blur_of_the_milky_eye::name
+ desc = /datum/action/cooldown/power/gift/blur_of_the_milky_eye::desc
+ overlay_state = /datum/action/cooldown/power/gift/blur_of_the_milky_eye::button_icon_state
+
/datum/action/cooldown/power/gift/infectious_laughter
name = "Infectious Laughter"
desc = "When the Ragabash laughs, those around her are compelled to follow along, forgetting their grievances. Uses the last message you spoke for the ability"
button_icon_state = "infectious_laughter"
+ rank = 1
// I dont acctually see anything in the book that is causes rage.
- // rage_req = 1
+ // rage_cost = 1
var/last_spoken_message
var/when_spoken = 0
@@ -40,6 +67,7 @@
last_spoken_message = speech_args[SPEECH_MESSAGE]
when_spoken = world.time
+ build_all_button_icons(UPDATE_BUTTON_STATUS)
/datum/action/cooldown/power/gift/infectious_laughter/IsAvailable(feedback)
. = ..()
@@ -51,14 +79,11 @@
/datum/action/cooldown/power/gift/infectious_laughter/Activate(atom/target)
. = ..()
- if(!ishuman(owner))
- return
if(!last_spoken_message || (when_spoken + 3 TURNS < world.time))
return
- var/mob/living/carbon/human/human_owner = owner
owner.emote("laugh")
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/infectious_laughter.ogg', 50, FALSE)
+ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/infectious_laughter.ogg', 50, FALSE)
var/list/hearers = oviewers(DEFAULT_MESSAGE_RANGE, owner)
var/highest_diff = 0
for(var/mob/living/dice_guy in hearers)
@@ -66,7 +91,10 @@
if(!rage_haver)
continue
highest_diff = max(highest_diff, rage_haver.rage)
- var/roll = SSroll.storyteller_roll(human_owner.st_get_stat(STAT_MANIPULATION) + human_owner.st_get_stat(STAT_EMPATHY), highest_diff, owner)
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.applicable_stats = list(STAT_MANIPULATION, STAT_EMPATHY)
+ roll_datum.difficulty = highest_diff
+ var/roll = roll_datum.st_roll(owner)
if(roll == ROLL_SUCCESS)
for(var/mob/living/hearer in hearers)
to_chat(hearer, span_hypnophrase("The message bounces around in your head, \"[last_spoken_message]\". You struggle to recall why you might have been mad."))
@@ -75,21 +103,27 @@
last_spoken_message = null
when_spoken = 0
-
// laughers.emote("laugh")
-/*
+
/datum/action/cooldown/power/gift/open_seal
name = "Open Seal"
desc = "With this Gift, the Garou can open nearly any sort of closed or locked physical device."
button_icon_state = "open_seal"
-// gnosis_req = 1
+ click_to_activate = TRUE
+ rank = 1
+ gnosis_cost = 1
/datum/action/cooldown/power/gift/open_seal/Activate(atom/target)
. = ..()
- if(allowed_to_proceed)
- for(var/obj/structure/vampdoor/V in range(5, owner))
- if(V.closed)
- if(V.lockpick_difficulty < 10)
- V.open_door(owner, TRUE)
-*/
+
+ var/datum/splat/werewolf/our_splat = iswerewolfsplat(owner)
+
+ var/roll_result = SSroll.storyteller_roll(our_splat.permanent_gnosis, target.get_gauntlet_rating(), owner)
+ if(roll_result == ROLL_SUCCESS)
+ var/turf/target_turf = get_turf(target)
+ SEND_SIGNAL(target_turf, COMSIG_ATOM_MAGICALLY_UNLOCKED, src, owner)
+ playsound(owner, 'sound/effects/magic/knock.ogg', 50, FALSE)
+
+ StartCooldown()
+ return TRUE
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm
index eb26fdefe41c..2b4c9e214ef8 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm
@@ -14,10 +14,10 @@ the scar is received and an extra Gnosis point is spent.
desc = "The Garou is able to heal the wounds of any living creature, aggravated or otherwise, simply by laying hands over the afflicted area."
button_icon_state = "mothers_touch"
click_to_activate = TRUE
+ rank = 1
- //rage_req = 1
- gnosis_req = 1
-
+ //rage_cost = 1
+ gnosis_cost = 1
/datum/action/cooldown/power/gift/mothers_touch/Activate(atom/target)
if(!isliving(target))
@@ -27,10 +27,9 @@ the scar is received and an extra Gnosis point is spent.
. = ..()
- var/mob/living/living_owner = owner
var/datum/splat/werewolf/werewolf_splat = iswerewolfsplat(owner)
var/difficulty = werewolf_splat.uses_rage ? werewolf_splat.rage : 5
- var/successes = SSroll.storyteller_roll(living_owner.st_get_stat(STAT_INTELLIGENCE) + living_owner.st_get_stat(STAT_EMPATHY), difficulty, owner, TRUE)
+ var/successes = SSroll.storyteller_roll_stats(list(STAT_INTELLIGENCE, STAT_EMPATHY), 0, difficulty, owner, TRUE)
var/mob/living/living_target = target
living_target.heal_storyteller_health(successes, TRUE, TRUE, TRUE)
@@ -38,3 +37,96 @@ the scar is received and an extra Gnosis point is spent.
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
StartCooldown()
return TRUE
+
+/datum/action/cooldown/power/gift/sense_wyrm
+ name = "Sense Wyrm"
+ desc = "This Gift allows the werewolf to trace the location of all wyrm-tainted entities within the area."
+ button_icon_state = "sense_wyrm"
+ rank = 1
+ var/list/navigation_images = list()
+
+/datum/action/cooldown/power/gift/sense_wyrm/Activate(atom/target)
+ . = ..()
+ cut_navigation()
+
+ var/lowest_difficulty = 0
+ var/list/wyrm_targets_in_range = list()
+ for(var/mob/living/target_guy in orange(owner, 30))
+ var/difficulty = get_sense_difficulty(target_guy)
+ if(difficulty)
+ if(!lowest_difficulty || (difficulty < lowest_difficulty))
+ lowest_difficulty = difficulty
+ wyrm_targets_in_range[target_guy] = difficulty
+
+ if(!lowest_difficulty)
+ return
+
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.applicable_stats = list(STAT_PERCEPTION, STAT_OCCULT)
+ roll_datum.difficulty = lowest_difficulty
+ var/roll_result = roll_datum.st_roll(owner)
+
+ if(roll_result != ROLL_SUCCESS)
+ return
+
+ for(var/mob/living/target_guy, difficulty in wyrm_targets_in_range)
+ var/list/path = get_path_to(owner, target_guy, 50, access = owner.get_access(), skip_first = FALSE)
+ for(var/i in 1 to length(path))
+ var/turf/current_turf = path[i]
+ var/image/path_image = image(icon = 'icons/effects/effects.dmi', icon_state = "smoke", layer = HIGH_PIPE_LAYER, loc = current_turf)
+ SET_PLANE(path_image, GAME_PLANE, current_turf)
+ if(i == length(path))
+ path_image.color = COLOR_PURPLE_GRAY
+ else
+ path_image.color = COLOR_PALE_PURPLE_GRAY
+ path_image.alpha = rand(5, path_image.alpha/2)
+ owner.client?.images += path_image
+ navigation_images += path_image
+
+ RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(cut_navigation))
+
+/datum/action/cooldown/power/gift/sense_wyrm/proc/cut_navigation()
+ SIGNAL_HANDLER
+ for(var/image/navigation_path in navigation_images)
+ owner.client?.images -= navigation_path
+ navigation_images.Cut()
+ UnregisterSignal(owner, COMSIG_LIVING_DEATH)
+
+/datum/action/cooldown/power/gift/sense_wyrm/proc/get_sense_difficulty(mob/living/target)
+ // To be used for stuff like banes.
+ if(HAS_TRAIT(target, TRAIT_WYRMTAINTED))
+ . = 6
+
+ if(HAS_TRAIT(target, TRAIT_WYRMTAINTED_SPRITE))
+ . = 5
+
+ var/datum/splat/vampire/kindred/kindred_splat = iskindred(target)
+ if(kindred_splat)
+ if(!kindred_splat.enlightenment)
+ . = 6
+ else if(target.st_get_stat(STAT_MORALITY) <= 7)
+ . = 6
+
+/datum/action/cooldown/power/gift/spirit_speech
+ name = "Spirit Speech"
+ desc = "This Gift allows the Garou to communicate with encountered spirits."
+ button_icon_state = "spirit_speech"
+ rank = 1
+
+/datum/action/cooldown/power/gift/spirit_speech/Grant(mob/granted_to)
+ . = ..()
+ ADD_TRAIT(granted_to, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT)
+
+/datum/action/cooldown/power/gift/spirit_speech/Activate(atom/target)
+ . = ..()
+
+ if(HAS_TRAIT_FROM(owner, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT))
+ REMOVE_TRAIT(owner, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT)
+ to_chat(owner, span_notice("You deactivate [name]."))
+ else
+ ADD_TRAIT(owner, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT)
+ to_chat(owner, span_notice("You activate [name]."))
+
+/datum/action/cooldown/power/gift/spirit_speech/Remove(mob/removed_from)
+ . = ..()
+ REMOVE_TRAIT(removed_from, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT)
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 2432605cc06b..d495238fde35 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
@@ -2,7 +2,7 @@
name = "Howl"
desc = "The werewolf may send her howl far beyond the normal range of hearing and communicate a single word or concept to all other Garou across the city."
button_icon_state = "call_of_the_wyld"
- rage_req = 1
+ rage_cost = 1
check_flags = null
innate_ability = TRUE
var/static/list/howls = list(
@@ -48,7 +48,7 @@
if(istype(get_area(owner), /area/vtm/interior/penumbra))
if(feedback)
to_chat(owner, span_warning("Your howl echoes and dissipates into the Umbra, it's sound blanketed by the spiritual energy of the Velvet Shadow."))
- return
+ return FALSE
/datum/action/cooldown/power/gift/howling/Activate(atom/target)
. = ..()
@@ -76,9 +76,9 @@
garou_message = replacetext(garou_message, "tribe", tribe)
*/
var/origin_turf = get_turf(living_mob)
- ADD_TRAIT(living_mob, TRAIT_LOUD_HOWLER, type)
+ ADD_TRAIT(living_mob, TRAIT_LOUD_HOWLER, GIFT_TRAIT)
living_mob.emote("howl")
- REMOVE_TRAIT(living_mob, TRAIT_LOUD_HOWLER, type)
+ REMOVE_TRAIT(living_mob, TRAIT_LOUD_HOWLER, GIFT_TRAIT)
var/howl_details
var/final_message
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm
new file mode 100644
index 000000000000..4f5a042db6c1
--- /dev/null
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm
@@ -0,0 +1,71 @@
+/* • Breath of the Wyld - W20 p.173
+ *
+ * Furies embrace the energy of creation, and they can share that passion with others.
+ * With this Gift, the Black Fury instills a feeling of vitality, life, and lucidity in another living being.
+ * It is taught by a servant of Pegasus.
+ *
+ * Roll Gnosis (difficulty 5 against Garou, Kinfolk; 6 otherwise).
+ * Success grants the recipient an additional die to all mental rolls for the rest of the scene.
+ * Also adds 1 to the difficulty of rage rolls made in this time.
+ *
+ * TODO: Rage check difficulty and audio. Use a horse sound.
+*/
+
+/datum/action/cooldown/power/gift/breath_of_the_wyld
+ name = "Breath of the Wyld"
+ desc = "The Fury instills a target with a rush of lucidity."
+ button_icon_state = null // TODO: icon
+ click_to_activate = TRUE
+ rank = 1
+
+/datum/action/cooldown/power/gift/breath_of_the_wyld/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 = iswerewolfsplat(caster)
+ var/roll_difficulty = iswerewolfsplat(target) ? 5 : 6
+
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.difficulty = roll_difficulty
+ 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)
+ 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)
+ 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
+ name = "Breath of the Wyld"
+ desc = "Gain an additional die to all mental checks, but suffer a penalty to rage check difficulty." // TODO: rage difficulty code
+ 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/tribes/black_spiral_dancer.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancer.dm
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm
new file mode 100644
index 000000000000..a2a60d03d853
--- /dev/null
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm
@@ -0,0 +1,125 @@
+/* • Cooking - W20 p.174
+ *
+ * The werewolf calls on desperate reserves for a sudden surge of strength. A badger-spirit teaches this Gift.
+ *
+ * TBD
+ *
+*/
+/* TODO: this
+/datum/action/cooldown/power/gift/cooking
+ name = "Cooking"
+ desc = ""
+ button_icon_state = null // TODO: icon
+ click_to_activate = FALSE
+ rank = 1
+
+/datum/action/cooldown/power/gift/cooking/Activate(atom/target)
+ if(!isitem(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 = iswerewolfsplat(caster)
+
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.applicable_stats = list(STAT_WITS, STAT_SURVIVAL)
+ roll_datum.numerical = TRUE
+ roll_datum.difficulty = 6
+ var/roll_result = roll_datum.st_roll(owner)
+
+ if(roll_result > 0)
+
+
+ StartCooldown()
+ return TRUE
+*/
+/* • Desperate Strength - W20 p.174
+ *
+ * The werewolf calls on desperate reserves for a sudden surge of strength. A badger-spirit teaches this Gift.
+ *
+ * Select a number 1-5 on a radial menu and add that much strength to the next strength roll. Take 10 brute damage per level of strength.
+ *
+ * TODO: audio. Include a badger sound.
+*/
+/datum/action/cooldown/power/gift/desperate_strength
+ name = "Desperate Strength"
+ desc = "Call on desperate reserves for a sudden surge of strength."
+ button_icon_state = null // TODO: icon
+ rank = 1
+
+/datum/action/cooldown/power/gift/desperate_strength/IsAvailable(feedback)
+ . = ..()
+ if(owner.has_status_effect(/datum/status_effect/desperate_strength))
+ if(feedback)
+ to_chat(owner, span_warning("[name] cannot be used again right now."))
+ return FALSE
+
+/datum/action/cooldown/power/gift/desperate_strength/Activate(atom/target)
+ var/mob/living/caster = owner
+ var/list/radial_menu_options = list(
+ "One" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_one"),
+ "Two" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_two"),
+ "Three" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_three"),
+ "Four" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_four"),
+ "Five" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_five"),
+ )
+
+ var/pick = show_radial_menu(owner, owner, radial_menu_options)
+ var/value
+
+ switch(pick)
+ if("One")
+ value = 1
+ if("Two")
+ value = 2
+ if("Three")
+ value = 3
+ if("Four")
+ value = 4
+ if("Five")
+ value = 5
+
+ if(!isnull(value))
+ caster.apply_status_effect(/datum/status_effect/desperate_strength, value)
+
+/datum/status_effect/desperate_strength
+ id = "desperate_strength"
+ duration = STATUS_EFFECT_PERMANENT
+
+ status_type = STATUS_EFFECT_UNIQUE
+
+ alert_type = /atom/movable/screen/alert/status_effect/desperate_strength
+ /// Passed in by the gift's activate
+ var/value
+
+/datum/status_effect/desperate_strength/on_creation(mob/living/owner, value)
+ src.value = value
+ return ..()
+
+/datum/status_effect/desperate_strength/on_apply()
+ owner.st_add_stat_mod(STAT_STRENGTH, value, type)
+ to_chat(owner, span_userdanger("You feel stronger... at a cost."))
+ RegisterSignal(owner, COMSIG_LIVING_DICE_ROLLED, PROC_REF(on_dice_rolled))
+ return TRUE
+
+/datum/status_effect/desperate_strength/proc/on_dice_rolled(mob/living/roller, datum/storyteller_roll/roll_datum, output)
+ SIGNAL_HANDLER
+
+ if(STAT_STRENGTH in roll_datum.applicable_stats)
+ qdel(src)
+
+/datum/status_effect/desperate_strength/on_remove()
+ owner.adjust_brute_loss(value TTRPG_DAMAGE)
+ owner.st_remove_stat_mod(STAT_STRENGTH, type)
+ to_chat(owner, span_warning("Your strength subsides, the pain of your wounds creeping back in..."))
+ UnregisterSignal(owner, COMSIG_LIVING_DICE_ROLLED)
+
+/atom/movable/screen/alert/status_effect/desperate_strength
+ name = "Desperate Strength"
+ desc = "Your next roll will be made with bonus strength, at the penalty of bashing damage!"
+ 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/tribes/fianna.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm
new file mode 100644
index 000000000000..3c4ec116cdc5
--- /dev/null
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm
@@ -0,0 +1,83 @@
+/* • Faerie Light - W20 p.178-179
+ *
+ * The Fianna conjures a small, bobbing sphere of light. It’s no brighter than a torch,
+ * but that’s usually enough to light the werewolf’s way — or lead foes into an ambush.
+ * A marsh-spirit teaches this Gift.
+ *
+ * Roll Wits + Occult (PLACEHOLDER FOR Wits + Enigmas). On success, summon a light on the turf clicked on. If clicked on a mob,
+ * the light orbits the mob. When clicked on by the summoner, it orbits or de-orbits them. When clicked on by another, the light is dispelled.
+ * Lasts for 1 scene.
+ *
+ * TODO: Audio. Include marsh sounds or something. Crickets?
+*/
+
+/obj/effect/faerie_light // TODO: add an animate or something to make this gently bob up and down
+ name = "orb of light"
+ desc = "Happy to light your way."
+ icon = 'icons/obj/lighting.dmi' // TODO: or maybe a new icon that has that baked in?
+ icon_state = "orb"
+ light_system = OVERLAY_LIGHT
+ light_range = 4
+ light_power = 1.3
+ light_color = "#79f1ff"
+ light_flags = LIGHT_ATTACHED
+ layer = ABOVE_ALL_MOB_LAYER
+ plane = ABOVE_GAME_PLANE
+ var/mob/living/summoner
+
+/obj/effect/faerie_light/attack_hand(mob/living/user, list/modifiers)
+ . = ..()
+ if(user != summoner)
+ to_chat(user, span_purple("You wave your hand at [src], causing it to float away and disappear."))
+ animate(src, 1 SECONDS, alpha = 0)
+ QDEL_IN(src, 1.1 SECONDS)
+ return TRUE
+ else if(orbit_target)
+ to_chat(user, span_purple("You wave your hand at [src], causing it to float away and remain still."))
+ orbit_target.orbiters.end_orbit(src)
+ animate(src, flags = ANIMATION_END_NOW)
+ return TRUE
+ else
+ to_chat(user, span_purple("You wave your hand at [src], causing it to float over to you happily."))
+ orbit(user, 20)
+ return TRUE
+
+/obj/effect/faerie_light/proc/timeout(time)
+ QDEL_IN(src, time)
+
+/obj/effect/faerie_light/Destroy()
+ . = ..()
+ if(orbit_target)
+ orbit_target.orbiters.end_orbit(src)
+
+/datum/action/cooldown/power/gift/faerie_light
+ name = "Faerie Light"
+ desc = "Create a bobbing mote of light to light your way or attract targets for an ambush."
+ button_icon_state = null // TODO: icon
+ click_to_activate = TRUE
+ rank = 1
+ cooldown_time = 1 TURNS
+
+/datum/action/cooldown/power/gift/faerie_light/Activate(atom/target)
+ . = ..()
+
+ var/datum/storyteller_roll/roll_datum = new()
+ roll_datum.applicable_stats = list(STAT_WITS, STAT_OCCULT)
+ roll_datum.difficulty = 6
+ var/roll_result = roll_datum.st_roll(owner)
+
+ if(roll_result <= 0)
+ return FALSE
+
+ var/obj/effect/faerie_light/cool_guy = new /obj/effect/faerie_light(get_turf(target))
+ cool_guy.summoner = owner
+ cool_guy.alpha = 0
+ animate(cool_guy, 1 SECONDS, alpha = 255, easing = BOUNCE_EASING)
+
+ if(isliving(target))
+ cool_guy.orbit(target, 20)
+
+ cool_guy.timeout(1 SCENES)
+
+ StartCooldown()
+ return TRUE
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm
deleted file mode 100644
index 4ecee4e784c0..000000000000
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm
+++ /dev/null
@@ -1,223 +0,0 @@
-/datum/action/cooldown/power/gift/stoic_pose
- name = "Stoic Pose"
- desc = "With this gift garou sends theirself into cryo-state, ignoring all incoming damage but also covering themself in a block of ice."
- button_icon_state = "stoic_pose"
- rage_req = 2
- gnosis_req = 1
-
-/datum/action/cooldown/power/gift/stoic_pose/Trigger()
- . = ..()
- if(allowed_to_proceed)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/ice_blocking.ogg', 100, FALSE)
- var/mob/living/carbon/C = owner
- if(isgarou(C))
- var/obj/were_ice/W = new (get_turf(owner))
- C.Stun(12 SECONDS)
- C.forceMove(W)
- spawn(12 SECONDS)
- C.forceMove(get_turf(W))
- qdel(W)
- if(iscrinos(C))
- var/obj/were_ice/crinos/W = new (get_turf(owner))
- C.Stun(12 SECONDS)
- C.forceMove(W)
- spawn(12 SECONDS)
- C.forceMove(get_turf(W))
- qdel(W)
- if(islupus(C))
- var/obj/were_ice/lupus/W = new (get_turf(owner))
- C.Stun(12 SECONDS)
- C.forceMove(W)
- spawn(12 SECONDS)
- C.forceMove(get_turf(W))
- qdel(W)
-
-/obj/were_ice
- name = "ice block"
- desc = "Stores some precious organs..."
- icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_lupus.dmi'
- icon_state = "ice_man"
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
-
-/obj/were_ice/lupus
- icon_state = "ice_wolf"
-
-/obj/were_ice/crinos
- icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf.dmi'
- icon_state = "ice"
- pixel_w = -8
-
-/datum/action/cooldown/power/gift/freezing_wind
- name = "Freezing Wind"
- desc = "Garou of Wendigo Tribe can create a stream of cold, freezing wind, and strike her foes with it."
- button_icon_state = "freezing_wind"
- rage_req = 1
- //gnosis_req = 1
-
-/datum/action/cooldown/power/gift/freezing_wind/Trigger()
- . = ..()
- if(allowed_to_proceed)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/wind_cast.ogg', 100, FALSE)
- for(var/turf/T in range(3, get_step(get_step(owner, owner.dir), owner.dir)))
- if(owner.loc != T)
- var/obj/effect/wind/W = new(T)
- W.dir = owner.dir
- W.strength = 100
- spawn(200)
- qdel(W)
-// if(allowed_to_proceed)
-
-/datum/action/cooldown/power/gift/bloody_feast
- name = "Bloody Feast"
- desc = "By eating a grabbed corpse, garou can redeem their lost health and heal the injuries."
- button_icon_state = "bloody_feast"
- rage_req = 2
- gnosis_req = 1
-
-/datum/action/cooldown/power/gift/bloody_feast/Trigger()
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- if(C.pulling)
- if(isliving(C.pulling))
- var/mob/living/L = C.pulling
- if(L.stat == DEAD)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/bloody_feast.ogg', 50, FALSE)
- qdel(L)
- C.revive(full_heal = TRUE, admin_revive = TRUE)
-
-/datum/action/cooldown/power/gift/stinky_fur
- name = "Stinky Fur"
- desc = "Garou creates an aura of very toxic smell, which disorientates everyone around."
- button_icon_state = "stinky_fur"
-
-/datum/action/cooldown/power/gift/stinky_fur/Trigger()
- . = ..()
- if(allowed_to_proceed)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/necromancy.ogg', 75, FALSE)
- for(var/mob/living/carbon/C in orange(5, owner))
- if(prob(25))
- C.vomit()
- C.dizziness += 10
- C.add_confusion(10)
-
-/datum/action/cooldown/power/gift/venom_claws
- name = "Venom Claws"
- desc = "While this ability is active, strikes with claws poison foes of garou."
- button_icon_state = "venom_claws"
- rage_req = 1
-
-/datum/action/cooldown/power/gift/venom_claws/Trigger()
- . = ..()
- if(allowed_to_proceed)
- if(ishuman(owner))
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/venom_claws.ogg', 75, FALSE)
- var/mob/living/carbon/human/H = owner
- H.melee_damage_lower = initial(H.melee_damage_lower)+15
- H.melee_damage_upper = initial(H.melee_damage_upper)+15
- H.tox_damage_plus = 15
- to_chat(owner, span_notice("You feel your claws filling with pure venom..."))
- spawn(12 SECONDS)
- H.tox_damage_plus = 0
- H.melee_damage_lower = initial(H.melee_damage_lower)
- H.melee_damage_upper = initial(H.melee_damage_upper)
- to_chat(owner, span_warning("Your claws are not poison anymore..."))
- else
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/venom_claws.ogg', 75, FALSE)
- var/mob/living/carbon/H = owner
- H.melee_damage_lower = initial(H.melee_damage_lower)+10
- H.melee_damage_upper = initial(H.melee_damage_upper)+10
- H.tox_damage_plus = 10
- to_chat(owner, span_notice("You feel your claws filling with pure venom..."))
- spawn(12 SECONDS)
- H.tox_damage_plus = 0
- H.melee_damage_lower = initial(H.melee_damage_lower)
- H.melee_damage_upper = initial(H.melee_damage_upper)
- to_chat(owner, span_warning("Your claws are not poison anymore..."))
-
-/datum/action/cooldown/power/gift/burning_scars
- name = "Burning Scars"
- desc = "Garou creates an aura of very hot air, which burns everyone around."
- button_icon_state = "burning_scars"
- rage_req = 2
- gnosis_req = 1
-
-/datum/action/cooldown/power/gift/burning_scars/Trigger()
- . = ..()
- if(allowed_to_proceed)
- owner.visible_message(span_danger("[owner.name] crackles with heat!"), span_danger("You crackle with heat, charging up your Gift!"))
- if(do_after(owner, 3 SECONDS))
- for(var/mob/living/L in orange(5, owner))
- L.adjust_fire_loss(40)
- for(var/turf/T in orange(4, get_turf(owner)))
- var/obj/effect/abstract/turf_fire/F = new(T)
- spawn(5)
- qdel(F)
-
-/datum/action/cooldown/power/gift/smooth_move
- name = "Smooth Move"
- desc = "Garou jumps forward, avoiding every damage for a moment."
- button_icon_state = "smooth_move"
- //rage_req = 1 somewhat useless gift with MMB pounce
-
-/datum/action/cooldown/power/gift/smooth_move/Trigger()
- . = ..()
- if(allowed_to_proceed)
- var/turf/T = get_turf(get_step(get_step(get_step(owner, owner.dir), owner.dir), owner.dir))
- if(!T || T == owner.loc)
- return
- owner.visible_message(span_danger("[owner] charges!"))
- owner.setDir(get_dir(owner, T))
- var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(owner.loc,owner)
- animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 1)
- spawn(3)
- owner.throw_at(T, get_dist(owner, T), 1, owner, 0)
-
-/datum/action/cooldown/power/gift/digital_feelings
- name = "Digital Feelings"
- desc = "Every technology creates an electrical strike, which hits garou's enemies."
- button_icon_state = "digital_feelings"
- rage_req = 2
- gnosis_req = 1
-
-/datum/action/cooldown/power/gift/digital_feelings/Trigger()
- . = ..()
- if(allowed_to_proceed)
- owner.visible_message(span_danger("[owner.name] crackles with static electricity!"), span_danger("You crackle with static electricity, charging up your Gift!"))
- if(do_after(owner, 3 SECONDS))
- playsound(owner, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
- tesla_zap(owner, 3, 30, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_ALLOW_DUPLICATES)
- for(var/mob/living/L in orange(6, owner))
- L.electrocute_act(30, owner, siemens_coeff = 1, flags = NONE)
-
-/datum/action/cooldown/power/gift/elemental_improvement
- name = "Elemental Improvement"
- desc = "Garou flesh replaces itself with prothesis, making it less vulnerable to brute damage, but more for burn damage."
- button_icon_state = "elemental_improvement"
- rage_req = 2
- gnosis_req = 1
-
-/datum/action/cooldown/power/gift/elemental_improvement/Trigger()
- . = ..()
- if(allowed_to_proceed)
- animate(owner, color = "#6a839a", time = 10)
- if(ishuman(owner))
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/electro_cast.ogg', 75, FALSE)
- var/mob/living/carbon/human/H = owner
- H.physiology.armor.melee = 25
- H.physiology.armor.bullet = 45
- to_chat(owner, span_notice("You feel your skin replaced with the machine..."))
- spawn(20 SECONDS)
- H.physiology.armor.melee = initial(H.physiology.armor.melee)
- H.physiology.armor.bullet = initial(H.physiology.armor.bullet)
- to_chat(owner, span_warning("Your skin is natural again..."))
- owner.color = "#FFFFFF"
- else
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/electro_cast.ogg', 75, FALSE)
- var/mob/living/carbon/werewolf/H = owner
- H.werewolf_armor = 45
- to_chat(owner, span_notice("You feel your skin replaced with the machine..."))
- spawn(20 SECONDS)
- H.werewolf_armor = initial(H.werewolf_armor)
- to_chat(owner, span_warning("Your skin is natural again..."))
- owner.color = "#FFFFFF"
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm
index 86fec51a85d5..0d5bd0396e56 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm
@@ -1,177 +1,8 @@
-/datum/action/cooldown/power/gift/falling_touch
- name = "Falling Touch"
- desc = "This Gift allows the Garou to send her foe sprawling with but a touch."
- button_icon_state = "falling_touch"
- rage_req = 1
-
-/datum/action/cooldown/power/gift/falling_touch/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/H = owner
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/falling_touch.ogg', 75, FALSE)
- H.put_in_active_hand(new /obj/item/melee/touch_attack/werewolf(H))
-
-/datum/action/cooldown/power/gift/inspiration
- name = "Inspiration"
- desc = "The Garou with this Gift lends new resolve and righteous anger to his brethren."
- button_icon_state = "inspiration"
- rage_req = 1
-
-/mob/living/carbon/Life()
- . = ..()
- if(inspired)
- if(stat != DEAD)
- adjust_brute_loss(-10, TRUE)
- var/obj/effect/celerity/C = new(get_turf(src))
- C.appearance = appearance
- C.dir = dir
- var/matrix/ntransform = matrix(C.transform)
- ntransform.Scale(2, 2)
- animate(C, transform = ntransform, alpha = 0, time = 3)
-
-/mob/living/carbon/proc/inspired()
- inspired = TRUE
- to_chat(src, span_notice("You feel inspired..."))
- spawn(150)
- to_chat(src, span_warning("You no longer feel inspired..."))
- inspired = FALSE
-
-/datum/action/cooldown/power/gift/inspiration/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/H = owner
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/inspiration.ogg', 75, FALSE)
- H.emote("scream")
- for(var/mob/living/carbon/C in range(5, owner))
- if(iswerewolf(C) || isgarou(C))
- if(C.auspice.tribe == H.auspice.tribe)
- C.inspired()
-
-/datum/action/cooldown/power/gift/razor_claws
- name = "Razor Claws"
- desc = "By raking his claws over stone, steel, or another hard surface, the Ahroun hones them to razor sharpness."
- button_icon_state = "razor_claws"
- rage_req = 1
-
-/datum/action/cooldown/power/gift/razor_claws/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- if(ishuman(owner))
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/razor_claws.ogg', 75, FALSE)
- var/mob/living/carbon/human/H = owner
- H.dna.species.attack_verb = "slash"
- H.dna.species.attack_sound = 'sound/items/weapons/slash.ogg'
- H.dna.species.miss_sound = 'sound/items/weapons/slashmiss.ogg'
- H.dna.species.punchdamagelow = 20
- H.dna.species.punchdamagehigh = 20
- H.agg_damage_plus = 5
- to_chat(owner, span_notice("You feel your claws sharpening..."))
- spawn(150)
- H.dna.species.attack_verb = initial(H.dna.species.attack_verb)
- H.dna.species.attack_sound = initial(H.dna.species.attack_sound)
- H.dna.species.miss_sound = initial(H.dna.species.miss_sound)
- H.dna.species.punchdamagelow = initial(H.dna.species.punchdamagelow)
- H.dna.species.punchdamagehigh = initial(H.dna.species.punchdamagehigh)
- H.agg_damage_plus = 0
- to_chat(owner, span_warning("Your claws are not sharp anymore..."))
- else
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/razor_claws.ogg', 75, FALSE)
- var/mob/living/carbon/H = owner
- H.melee_damage_lower = H.melee_damage_lower+15
- H.melee_damage_upper = H.melee_damage_upper+15
- H.agg_damage_plus = 3
- to_chat(owner, span_notice("You feel your claws sharpening..."))
- spawn(150)
- H.melee_damage_lower = initial(H.melee_damage_lower)
- H.melee_damage_upper = initial(H.melee_damage_upper)
- H.agg_damage_plus = 0
- to_chat(owner, span_warning("Your claws are not sharp anymore..."))
-
-/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."
- button_icon_state = "resist_pain"
- rage_req = 2
-
-/datum/action/cooldown/power/gift/resist_pain/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- if(ishuman(owner))
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/resist_pain.ogg', 75, FALSE)
- var/mob/living/carbon/human/H = owner
- H.physiology.armor.melee = 40
- H.physiology.armor.bullet = 25
- to_chat(owner, span_notice("You feel your skin thickering..."))
- spawn(15 SECONDS)
- H.physiology.armor.melee = initial(H.physiology.armor.melee)
- H.physiology.armor.bullet = initial(H.physiology.armor.bullet)
- to_chat(owner, span_warning("Your skin is thin again..."))
- else
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/resist_pain.ogg', 75, FALSE)
- var/mob/living/carbon/werewolf/H = owner
- H.werewolf_armor = 40
- to_chat(owner, span_notice("You feel your skin thickering..."))
- spawn(15 SECONDS)
- H.werewolf_armor = initial(H.werewolf_armor)
- to_chat(owner, span_warning("Your skin is thin again..."))
-
-/datum/action/cooldown/power/gift/scent_of_the_true_form
- name = "Scent Of The True Form"
- desc = "This Gift allows the Garou to determine the true nature of a person."
- button_icon_state = "scent_of_the_true_form"
- rage_req = 1
- //gnosis_req = 1
-
-/datum/action/cooldown/power/gift/scent_of_the_true_form/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/datum/atom_hud/abductor_hud = GLOB.huds[DATA_HUD_ABDUCTOR]
- abductor_hud.add_hud_to(owner)
- spawn(200)
- abductor_hud.remove_hud_from(owner)
-
-/datum/action/cooldown/power/gift/truth_of_gaia
- name = "Truth Of Gaia"
- desc = "As judges of the Litany, Philodox have the ability to sense whether others have spoken truth or falsehood."
- button_icon_state = "truth_of_gaia"
-// rage_req = 1
-
-/datum/action/cooldown/power/gift/sense_wyrm
- name = "Sense Wyrm"
- desc = "This Gift allows the werewolf to sense the presence of Wyrm."
- button_icon_state = "sense_wyrm"
- rage_req = 1
-
-/datum/action/cooldown/power/gift/sense_wyrm/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- C.sight = SEE_MOBS|SEE_OBJS
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/sense_wyrm.ogg', 75, FALSE)
- to_chat(owner, span_notice("You feel your sense sharpening..."))
- spawn(200)
- C.sight = initial(C.sight)
- to_chat(owner, span_warning("You no longer sense anything more than normal..."))
-
-/datum/action/cooldown/power/gift/spirit_speech
- name = "Spirit Speech"
- desc = "This Gift allows the Garou to communicate with encountered spirits."
- button_icon_state = "spirit_speech"
- //gnosis_req = 1
-
-/datum/action/cooldown/power/gift/spirit_speech/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- C.see_invisible = SEE_INVISIBLE_OBSERVER
- spawn(200)
- C.see_invisible = initial(C.see_invisible)
-
/datum/action/cooldown/power/gift/rage_heal
name = "Rage Heal"
desc = "This Gift allows the Garou to heal severe injuries with rage."
button_icon_state = "rage_heal"
- rage_req = 1
+ rage_cost = 1
check_flags = null
/datum/action/cooldown/power/gift/rage_heal/Activate(atom/target)
@@ -220,73 +51,3 @@
C.sprite_apparel = 0
else
C.sprite_apparel = min(4, C.sprite_apparel+1)
-
-/datum/action/cooldown/power/gift/hispo
- name = "Hispo Form"
- desc = "Change your Lupus form into Hispo and backwards."
- button_icon_state = "hispo"
-
-/datum/action/cooldown/power/gift/hispo/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/werewolf/lupus/H = owner
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/transform.ogg', 50, FALSE)
- if(H.hispo)
- H.icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_lupus.dmi'
- H.pixel_w = 0
- H.pixel_z = 0
- H.melee_damage_lower = initial(H.melee_damage_lower)
- H.melee_damage_upper = initial(H.melee_damage_upper)
- H.hispo = FALSE
- H.update_icons()
- H.remove_movespeed_modifier(/datum/movespeed_modifier/crinosform)
- H.add_movespeed_modifier(/datum/movespeed_modifier/lupusform)
- else
- H.icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/hispo.dmi'
- H.pixel_w = -16
- H.pixel_z = -16
- H.melee_damage_lower = 35
- H.melee_damage_upper = 55
- H.hispo = TRUE
- H.update_icons()
- H.remove_movespeed_modifier(/datum/movespeed_modifier/lupusform)
- H.add_movespeed_modifier(/datum/movespeed_modifier/crinosform)
-
-/datum/action/cooldown/power/gift/glabro
- name = "Glabro Form"
- desc = "Change your Homid form into Glabro and backwards."
- button_icon_state = "glabro"
-
-/datum/action/cooldown/power/gift/glabro/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/human/H = owner
- var/datum/species/garou/G = H.dna.species
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/transform.ogg', 50, FALSE)
- if(G.glabro)
- H.remove_overlay(PROTEAN_LAYER)
- G.punchdamagelow -= 15
- G.punchdamagehigh -= 15
- H.st_remove_stat_mod(STAT_STRENGTH, "glabro_form")
- H.physiology.armor.melee -= 15
- H.physiology.armor.bullet -= 15
- var/matrix/M = matrix()
- M.Scale(1)
- animate(H, transform = M, time = 1 SECONDS)
- G.glabro = FALSE
- H.update_icons()
- else
- H.remove_overlay(PROTEAN_LAYER)
- var/mutable_appearance/glabro_overlay = mutable_appearance('modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/werewolf_abilities.dmi', H.transformator.crinos_form?.sprite_color, -PROTEAN_LAYER)
- H.overlays_standing[PROTEAN_LAYER] = glabro_overlay
- H.apply_overlay(PROTEAN_LAYER)
- G.punchdamagelow += 15
- G.punchdamagehigh += 15
- H.st_add_stat_mod(STAT_STRENGTH, 3, "glabro_form")
- H.physiology.armor.melee += 15
- H.physiology.armor.bullet += 15
- var/matrix/M = matrix()
- M.Scale(1.23)
- animate(H, transform = M, time = 1 SECONDS)
- G.glabro = TRUE
- H.update_icons()
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/silver_damage.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/silver_damage.dm
index 3932efaa0f8f..b238d4dabc35 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/silver_damage.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/silver_damage.dm
@@ -22,7 +22,7 @@
var/datum/splat/werewolf/shifter/shot_pup_splat = isshifter(target)
if(shot_pup_splat)
var/mob/living/carbon/human/shot_pup = target
- shot_pup.apply_status_effect(STATUS_EFFECT_SILVER_BULLLET_STACKS)
+ shot_pup.apply_status_effect(STATUS_EFFECT_SILVER_BULLET_STACKS)
if(!shot_pup_splat.is_breed_form())
// IDK. This is might TTRPG inaccurate RN because i think it should acctaully convert ALL the damage to agg not just add some agg to it.
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm
index 384cfec4311f..7b04298e9690 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm
@@ -86,7 +86,7 @@
var/mob_icon = get_mob_icon(human)
var/main_iconstate = ""
- if(HAS_TRAIT(human, TRAIT_WYRMTAINTED))
+ if(HAS_TRAIT(human, TRAIT_WYRMTAINTED_SPRITE))
main_iconstate += "spiral"
main_iconstate += fur_color
if(human.body_position == LYING_DOWN)
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 1b5e676b5e10..8cbcccf4e0d0 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
@@ -4,10 +4,14 @@
power_type = /datum/action/cooldown/power/gift
+ // Perm is for rolls
+ // Non-perm/ or temp is for expenditure
var/uses_rage = FALSE
+ var/permanent_rage = 10
var/rage = 0
// without a merit kinfolk cannot use gnosis
var/uses_gnosis = FALSE
+ var/permanent_gnosis = 10
var/gnosis = 0
var/list/renown = list()
@@ -22,8 +26,8 @@
return FALSE
if(amount > 0)
- if(rage < MAX_RAGE)
- rage = min(MAX_RAGE, rage+amount)
+ if(rage < permanent_rage)
+ rage = min(permanent_rage, rage+amount)
if(sound)
SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/rage_increase.ogg', volume = 50))
to_chat(owner, span_userdanger("RAGE INCREASES"))
@@ -46,8 +50,8 @@
return FALSE
if(amount > 0)
- if(gnosis < MAX_GNOSIS)
- gnosis = clamp(gnosis + amount, 0, MAX_GNOSIS)
+ if(gnosis < permanent_gnosis)
+ gnosis = clamp(gnosis + amount, 0, permanent_gnosis)
if(sound)
SEND_SOUND(owner, sound('modular_darkpack/modules/deprecated/sounds/humanity_gain.ogg', volume = 50))
to_chat(owner, span_boldnotice("GNOSIS INCREASES"))
@@ -55,7 +59,7 @@
return FALSE
if(amount < 0)
if(gnosis > 0)
- gnosis = clamp(gnosis + amount, 0, MAX_GNOSIS)
+ gnosis = clamp(gnosis + amount, 0, permanent_gnosis)
if(sound)
SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/rage_decrease.ogg', volume = 50))
to_chat(owner, span_boldnotice("GNOSIS DECREASES"))
@@ -173,3 +177,10 @@
)
transform_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/corax_transform.ogg'
*/
+
+
+/mob/living/carbon/human/splat/kinfolk
+ auto_splats = list(/datum/splat/werewolf/kinfolk)
+
+/mob/living/carbon/human/splat/garou
+ auto_splats = list(/datum/splat/werewolf/shifter/garou)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm
index c045c1e49215..e43fa49cdae7 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm
@@ -7,7 +7,11 @@
name = AUSPICE_AHROUN
desc = "The Ahroun is the archetype of the werewolf as murderous beast, though they range from unapologetic berserkers to hardened veterans tempering their Rage with discipline. Their high levels of Rage put them on the edge at all times - the Full Moon's blessing is a hair trigger, among other things. Those closer to the waxing moon tend to exult in the glory of the war, while those closer to the waning moon are more viciously pragmatic, ruthless in their bloodthirst. Every Ahroun is a dangerous individual to be around, but when the forces of the Wyrm attack, their packmates are glad to have a Full Moon warrior at the front of the charge."
start_rage = 5
- gifts_provided= list(/datum/action/cooldown/power/gift/falling_touch)//, /datum/action/cooldown/power/gift/inspiration, /datum/action/cooldown/power/gift/razor_claws)
+ gifts_provided= list(
+ /datum/action/cooldown/power/gift/falling_touch,
+ /datum/action/cooldown/power/gift/inspiration,
+ /datum/action/cooldown/power/gift/razor_claws,
+ )
moons_born_under = list(MOON_FULL)
/datum/subsplat/werewolf/auspice/garou/ahroun/rank_requirments(list/renown)
@@ -32,8 +36,8 @@
desc = "Where the Philodox is stoic, the Galliard is a creature of unbridled passion. The Gibbous Moon is a fiery muse, and stirs its children into great heights and depths of emotion. While all Galliards are prone to immense mirth and immense melancholy, those born under a waning moon fall more readily into dark, consuming passions; they are the tragedians of the Garou, mastering tales of doom, ruin, sacrifice and loss. Conversely, their waxing-moon cousins sing of triumph and conquest, of the pounding heart and the love of life. They tend to be the soul of their pack's morale - when the Galliard is willing to go on, so too are all the others."
start_rage = 4
gifts_provided = list(
- // /datum/action/cooldown/power/gift/beast_speech,
- // /datum/action/cooldown/power/gift/call_of_the_wyld,
+ /datum/action/cooldown/power/gift/beast_speech,
+ /datum/action/cooldown/power/gift/call_of_the_wyld,
/datum/action/cooldown/power/gift/mindspeak
)
moons_born_under = list(MOON_WAXING_GIBBOUS, MOON_WANING_GIBBOUS)
@@ -59,7 +63,11 @@
name = AUSPICE_PHILODOX
desc = "Buried so heavily in his role as impartial judge and jury, the Philodox may seem aloof, even surprisingly cold-blooded for a werewolf. Those born under the waxing Half Moon may seem unusually serene and disaffected, their emotions only emerging when their Rage comes to a boil. The waning-moon Philodox is more incisive and judgmental, his all-seeing eye always carefully watching his packmates and colleagues for any departure from the expected. The Half Moons' opinions are somewhat feared, yet highly respected - a word of praise or condemnation means much coming from those born to see both sides of every struggle."
start_rage = 3
- gifts_provided= list(/datum/action/cooldown/power/gift/scent_of_the_true_form)//,/datum/action/cooldown/power/gift/resist_pain, /datum/action/cooldown/power/gift/truth_of_gaia)
+ gifts_provided= list(
+ /datum/action/cooldown/power/gift/resist_pain,
+ /datum/action/cooldown/power/gift/scent_of_the_true_form,
+ /datum/action/cooldown/power/gift/truth_of_gaia,
+ )
moons_born_under = list(MOON_FIRST_QUARTER, MOON_LAST_QUARTER)
/datum/subsplat/werewolf/auspice/garou/philodox/rank_requirments(list/renown)
@@ -86,8 +94,8 @@
start_rage = 2
gifts_provided = list(
/datum/action/cooldown/power/gift/mothers_touch,
- // /datum/action/cooldown/power/gift/sense_wyrm,
- // /datum/action/cooldown/power/gift/spirit_speech
+ /datum/action/cooldown/power/gift/sense_wyrm,
+ /datum/action/cooldown/power/gift/spirit_speech
)
moons_born_under = list(MOON_WANING_CRESCENT, MOON_WAXING_CRESENT)
@@ -114,9 +122,9 @@
desc = "The Ragabash born under the waxing new moon is usually light-hearted and capricious, while one born under the waning new moon has a slightly more wicked and ruthless streak. It's a rare Ragabash indeed that lacks a keen wit and the capacity to find some humor in any situation, no matter how bleak. Many other werewolves are slow to take the Ragabash seriously, though, as it's difficult to tell the difference between a New Moon's mockery that points out a grievous flaw in a plan and similar mockery that simply amuses him. Sometimes a Ragabash points out that the emperor has no clothes - but sometimes they're the first to cry wolf, so to speak."
start_rage = 1
gifts_provided= list(
- // /datum/action/cooldown/power/gift/blur_of_the_milky_eye,
- /datum/action/cooldown/power/gift/infectious_laughter
- // /datum/action/cooldown/power/gift/open_seal,
+ /datum/action/cooldown/power/gift/blur_of_the_milky_eye,
+ /datum/action/cooldown/power/gift/infectious_laughter,
+ /datum/action/cooldown/power/gift/open_seal,
)
moons_born_under = list(MOON_NEW)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm
index fcf46b013c7f..d4e605bc9723 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm
@@ -7,89 +7,94 @@
name = TRIBE_GALESTALKERS
desc = "Tireless trackers and peerless hunters, the galestalkers carry the namesake of the wind that crosses the tundra."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
tribe_keys = /obj/item/vamp/keys/nps
/datum/subsplat/werewolf/tribe/garou/ghostcouncil
name = TRIBE_UKTENA
desc = "Seekers of mystery and highly secretive, the Uktena is one of the most misunderstood tribes. Their ranks include guides, academics and the religious."
- // gifts_provided = list(
- // /datum/action/gift/shroud = 1,
- // /datum/action/gift/coils_of_the_serpent = 2,
- // /datum/action/gift/banish_totem = 3
- // )
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/spirit_speech,
+ // /datum/action/cooldown/power/gift/shroud,
+ // /datum/action/cooldown/power/gift/coils_of_the_serpent,
+ // /datum/action/cooldown/power/gift/banish_totem
+ )
tribe_keys = /obj/item/vamp/keys/nps
/datum/subsplat/werewolf/tribe/garou/hartwardens
name = TRIBE_FIANNA
desc = "Growing, creating, cultivating and maintaining the most natural of Gaia's creations, the Wardens are some of the closest to nature. Wherever they are, they coax Gaia's blessing out of whatever they can."
- // gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
- // )
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/faerie_light,
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
+ )
tribe_keys = /obj/item/vamp/keys/nps
/datum/subsplat/werewolf/tribe/garou/glasswalkers
name = TRIBE_GLASS_WALKERS
desc = "The closest to the Weaver, they find themselves deeply entrenched in modern human society, religion, technology and cities. Every new invention and every new discovery is one that aids the Glass Walkers, instead of impeding them."
// gifts_provided = list(
- // /datum/action/gift/smooth_move = 1,
- // /datum/action/gift/digital_feelings = 2,
- // /datum/action/gift/elemental_improvement = 3
+ // /datum/action/cooldown/power/gift/smooth_move,
+ // /datum/action/cooldown/power/gift/digital_feelings,
+ // /datum/action/cooldown/power/gift/elemental_improvement
// )
tribe_keys = /obj/item/vamp/keys/techstore
/datum/subsplat/werewolf/tribe/garou/bonegnawers
name = TRIBE_BONE_GNAWERS
desc = "Survivors and scavengers, often destitute and homeless. The Gnawers are seen as mongrels who live off scraps, but they know better. They're the true survivors, patiently waiting for their moment to strike against overconfident foes."
- // gifts_provided = list(
- // /datum/action/gift/guise_of_the_hound = 1,
- // /datum/action/gift/infest = 2,
- // /datum/action/gift/gift_of_the_termite = 3
- // )
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/desperate_strength,
+ // /datum/action/cooldown/power/gift/guise_of_the_hound,
+ // /datum/action/cooldown/power/gift/infest,
+ // /datum/action/cooldown/power/gift/gift_of_the_termite
+ )
tribe_keys = /obj/item/vamp/keys/children_of_gaia
/datum/subsplat/werewolf/tribe/garou/childrenofgaia
name = TRIBE_CHILDREN_OF_GAIA
desc = "Peacekeepers, negotiators, treaty-makers and philosophers. The Children of Gaia strive as hard as they can create an understanding and unity between the disparate tribes that will allow them to form a united front against their foes."
- // gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
- // )
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/mothers_touch,
+ /datum/action/cooldown/power/gift/resist_pain,
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
+ )
tribe_keys = /obj/item/vamp/keys/children_of_gaia
/datum/subsplat/werewolf/tribe/garou/getoffenris
name = TRIBE_GET_OF_FENRIS
desc = "Warriors, compassionate and fierce. They view themselves are Gaia's strongest heroes, but the rest of the tribes view them with caution, their violence more famous than their courage."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
tribe_keys = /obj/item/vamp/keys/nps
/datum/subsplat/werewolf/tribe/garou/blackfuries
name = TRIBE_BLACK_FURIES
desc = "An all-female tribe, and the matriarchs of the Garou. The Black Furies are known fondly for their honor, wisdom, pride and impressive prowess in battle."
- // gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
- // )
+ gifts_provided = list(
+ /datum/action/cooldown/power/gift/breath_of_the_wyld,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
+ )
tribe_keys = /obj/item/vamp/keys/nps
/datum/subsplat/werewolf/tribe/garou/silentstriders
name = TRIBE_SILENT_STRIDERS
desc = "Highly spiritual nomads, the Silent Striders have headed deeper and longer into the depths of the Umbra than any other tribe."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
tribe_keys = /obj/item/vamp/keys/nps
@@ -97,9 +102,9 @@
name = TRIBE_SHADOW_LORDS
desc = "The closest one could consider a Garou to being a 'politician'. They manipulate the tribes, and their enemies, and rely on cunning and wits more than physical strength. Not to say there aren't adept warriors in their ranks, but the tribe tends towards brains than brawn."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
tribe_keys = /obj/item/vamp/keys/techstore
@@ -107,18 +112,18 @@
name = TRIBE_RED_TALONS
desc = "Exclusively consisting of lupus, the Red Talons shun humanity and think of them as a blight on Gaia."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
/datum/subsplat/werewolf/tribe/garou/silverfangs
name = TRIBE_SILVER_FANGS
desc = "Commonly known as the 'Alphas' of the Garou Nation, their ranks consist of traditional rulers and wartime leaders. Known for being honorable and having courage, odd mental quirks have begun plaguing their young members, and the tribe is beginning to suffer from diseases of the spirit and mind."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
tribe_keys = /obj/item/vamp/keys/nps
@@ -126,9 +131,9 @@
name = TRIBE_STARGAZERS
desc = "The calmest of the Garou, they are well known for their introversion. They are the smallest of the remaining tribes, many of their kind wiped out by the Wyrm."
// gifts_provided = list(
- // /datum/action/gift/stoic_pose = 1,
- // /datum/action/gift/freezing_wind = 2,
- // /datum/action/gift/bloody_feast = 3
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/freezing_wind,
+ // /datum/action/cooldown/power/gift/bloody_feast
// )
tribe_keys = /obj/item/vamp/keys/nps
@@ -136,19 +141,19 @@
name = TRIBE_BLACK_SPIRAL_DANCERS
desc = "The lost tribe. The dreadwolves. Those who dance lockstep with the Wyrm. They who have entered the labyrinth and come back, changed.\n{THIS IS AN ADVANCED TRIBE AND NOT RECOMMENDED FOR BEGINNERS. LORE KNOWLEDGE IS REQUIRED TO PLAY THIS TRIBE}"
// gifts_provided = list(
- // /datum/action/gift/stinky_fur = 1,
- // /datum/action/gift/venom_claws = 2,
- // /datum/action/gift/burning_scars = 3
+ // /datum/action/cooldown/power/gift/stinky_fur,
+ // /datum/action/cooldown/power/gift/venom_claws,
+ // /datum/action/cooldown/power/gift/burning_scars
// )
/datum/subsplat/werewolf/tribe/garou/ronin
name = TRIBE_RONIN
desc = "Garou who, for one reason or another, find themselves as outcasts of the Nation."
// gifts_provided = list(
- // /datum/action/gift/guise_of_the_hound = 1,
- // /datum/action/gift/stoic_pose = 2,
- // /datum/action/gift/smooth_move = 3,
- // /datum/action/gift/shroud = 4
+ // /datum/action/cooldown/power/gift/guise_of_the_hound,
+ // /datum/action/cooldown/power/gift/stoic_pose,
+ // /datum/action/cooldown/power/gift/smooth_move,
+ // /datum/action/cooldown/power/gift/shroud
// )
/* // DARKPACK TODO - CORAX
@@ -156,9 +161,9 @@
name = TRIBE_CORAX
desc = "{CONSIDER : THIS IS A PLACEHOLDER, FEATURES WILL BE MISSING.} \nMessengers of Gaia, children of Raven, and scions of Helios; the wereravens travel accross the globe, guided by their innate curiosity and insatiable thirst for gossip. \nThey are renowned for their ability to gather useful intelligence, and the difficulty of making them stop talking."
gifts_provided = list(
- /datum/action/gift/eye_drink = 1,
- /datum/action/gift/smooth_move = 2,
- /datum/action/gift/suns_guard = 3
+ /datum/action/cooldown/power/gift/eye_drink,
+ /datum/action/cooldown/power/gift/smooth_move,
+ /datum/action/cooldown/power/gift/suns_guard
)
tribe_trait = TRAIT_CORAX
*/
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm
index 5566401817ef..8328661545ae 100644
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm
+++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm
@@ -119,7 +119,7 @@
shifter_splat.adjust_rage(1, FALSE)
else
to_chat(human, span_boldnotice("YOUR TOTEM IS RESTORED"))
- SEND_SOUND(human, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/inspire.ogg', volume = 50))
+ SEND_SOUND(human, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspire.ogg', volume = 50))
shifter_splat.adjust_gnosis(1, FALSE)
/obj/structure/werewolf_totem/attack_hand(mob/living/user, list/modifiers)
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi
new file mode 100644
index 000000000000..a595e1059493
Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi differ
diff --git a/modular_darkpack/modules/deprecated/sounds/bloody_feast.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/bloody_feast.ogg
similarity index 100%
rename from modular_darkpack/modules/deprecated/sounds/bloody_feast.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/bloody_feast.ogg
diff --git a/modular_darkpack/modules/deprecated/sounds/electro_cast.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/electro_cast.ogg
similarity index 100%
rename from modular_darkpack/modules/deprecated/sounds/electro_cast.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/electro_cast.ogg
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/ice_blocking.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/ice_blocking.ogg
similarity index 100%
rename from modular_darkpack/modules/werewolf_the_apocalypse/sounds/ice_blocking.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/ice_blocking.ogg
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/inspiration.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspiration.ogg
similarity index 100%
rename from modular_darkpack/modules/werewolf_the_apocalypse/sounds/inspiration.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspiration.ogg
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/inspire.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspire.ogg
similarity index 100%
rename from modular_darkpack/modules/werewolf_the_apocalypse/sounds/inspire.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspire.ogg
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/milky_blur.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/milky_blur.ogg
similarity index 100%
rename from modular_darkpack/modules/werewolf_the_apocalypse/sounds/milky_blur.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/milky_blur.ogg
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/razor_claws.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/razor_claws.ogg
similarity index 100%
rename from modular_darkpack/modules/werewolf_the_apocalypse/sounds/razor_claws.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/razor_claws.ogg
diff --git a/modular_darkpack/modules/deprecated/sounds/resist_pain.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/resist_pain.ogg
similarity index 100%
rename from modular_darkpack/modules/deprecated/sounds/resist_pain.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/resist_pain.ogg
diff --git a/modular_darkpack/modules/deprecated/sounds/venom_claws.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/venom_claws.ogg
similarity index 100%
rename from modular_darkpack/modules/deprecated/sounds/venom_claws.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/venom_claws.ogg
diff --git a/modular_darkpack/modules/deprecated/sounds/wolves.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wolves.ogg
similarity index 100%
rename from modular_darkpack/modules/deprecated/sounds/wolves.ogg
rename to modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wolves.ogg
diff --git a/tgstation.dme b/tgstation.dme
index 718b13fd362a..000af9090361 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7527,6 +7527,7 @@
#include "modular_darkpack\modules\splats\code\__splat.dm"
#include "modular_darkpack\modules\splats\code\gaining_splats.dm"
#include "modular_darkpack\modules\splats\code\hud_managment.dm"
+#include "modular_darkpack\modules\splats\code\human_dummies.dm"
#include "modular_darkpack\modules\splats\code\is_splat_helpers.dm"
#include "modular_darkpack\modules\splats\code\losing_splats.dm"
#include "modular_darkpack\modules\splats\code\splat_configs.dm"
@@ -7674,6 +7675,7 @@
#include "modular_darkpack\modules\weather\code\effects.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\emotes.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\garou_languages.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gauntlet.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\glyphs.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\hud.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\silver_damage.dm"
@@ -7686,6 +7688,10 @@
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\ragabash.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\theurge.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\innate\howling.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\tribes\black_furies.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\tribes\black_spiral_dancer.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\tribes\bone_gnawers.dm"
+#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\tribes\fianna.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\auspice.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\breed.dm"
#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\fur.dm"