diff --git a/code/__DEFINES/~darkpack/auras.dm b/code/__DEFINES/~darkpack/auras.dm index 6c7e04a137c3..0b17aa4ea525 100644 --- a/code/__DEFINES/~darkpack/auras.dm +++ b/code/__DEFINES/~darkpack/auras.dm @@ -15,7 +15,7 @@ #define AURA_HAPPY COLOR_VIVID_RED // Vermillion #define AURA_HATEFUL COLOR_BLACK // Black #define AURA_IDEALISTIC COLOR_YELLOW // Yellow -#define AURA_INNOCENT COLOR_WHITE // White +#define AURA_INNOCENT COLOR_OFF_WHITE // White #define AURA_LOVESTRUCK COLOR_BLUE // Blue #define AURA_OBSESSED COLOR_GREEN // Green #define AURA_SAD COLOR_SILVER // Silver 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/splats.dm b/code/__DEFINES/~darkpack/splats.dm index bdc75565c439..92845e185a24 100644 --- a/code/__DEFINES/~darkpack/splats.dm +++ b/code/__DEFINES/~darkpack/splats.dm @@ -9,5 +9,6 @@ //#define SPLAT_FERA "splat_fera" #define SPLAT_GAROU "splat_garou" #define SPLAT_CORAX "splat_corax" // DARKPACK TODO - CORAX +#define SPLAT_SHIFTERS list(SPLAT_GAROU, SPLAT_CORAX) #define SPLAT_ALL list(SPLAT_NONE, SPLAT_KINDRED, SPLAT_GHOUL, SPLAT_KINFOLK, SPLAT_GAROU) diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 1d0d3424b7f0..77e873f17de8 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -42,7 +42,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_CHARMER "charmer" // Mutates the apperance of auras -#define TRAIT_COLD_AURA "cold_aura" +#define TRAIT_PALE_AURA "pale_aura" #define TRAIT_WARM_AURA "warm_aura" #define TRAIT_FRENETIC_AURA "frenetic_aura" @@ -124,20 +124,34 @@ 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 +#define TRAIT_ANIMAL_MUSK "animal_musk" #define TRAIT_PERMAFANGS "permafangs" +#define TRAIT_PIERCED_VEIL "pierced_veil" +#define TRAIT_WEAK_WILLED "weak_willed" +#define TRAIT_TIME_SENSE "time_sense" +#define TRAIT_METAMORPH "metamorph" +#define TRAIT_MERIT_UNTAMABLE "merit_untamable" +#define TRAIT_FAIR_GLABRO "fair_glabro" // END TRAIT DEFINES 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..bbc9a3034cf9 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -492,7 +492,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_PERCEPTUAL_TRAUMA_BYPASS" = TRAIT_PERCEPTUAL_TRAUMA_BYPASS, "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, "TRAIT_PERMANENTLY_MORTAL" = TRAIT_PERMANENTLY_MORTAL, - "TRAIT_PERMAFANGS" = TRAIT_PERMAFANGS, "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE, @@ -665,21 +664,22 @@ 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_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS/FLAWS + "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 "TRAIT_CHARMER" = TRAIT_CHARMER, // DARKPACK EDIT ADD "TRAIT_COFFIN_THERAPY" = TRAIT_COFFIN_THERAPY, // DARKPACK EDIT ADD - "TRAIT_COLD_AURA" = TRAIT_COLD_AURA, // DARKPACK EDIT ADD + "TRAIT_PALE_AURA" = TRAIT_PALE_AURA, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_CONSENSUAL_FEEDING_ONLY" = TRAIT_CONSENSUAL_FEEDING_ONLY, // DARKPACK EDIT ADD "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD - "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS, // DARKPACK EDIT ADD + "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD @@ -693,10 +693,12 @@ 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 "TRAIT_MASQUERADE_VIOLATING_FACE" = TRAIT_MASQUERADE_VIOLATING_FACE, // DARKPACK EDIT ADD + "TRAIT_MERIT_UNTAMABLE" = TRAIT_MERIT_UNTAMABLE, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_NECROMANCY_KNOWLEDGE" = TRAIT_NECROMANCY_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy @@ -706,6 +708,8 @@ 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_PERMAFANGS" = TRAIT_PERMAFANGS, // DARKPACK EDIT ADD - MERITS/FLAWS "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 @@ -718,6 +722,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD "TRAIT_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD + "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_TORPOR" = TRAIT_TORPOR, // DARKPACK EDIT ADD "TRAIT_TOUGH_FLESH" = TRAIT_TOUGH_FLESH, // DARKPACK EDIT ADD "TRAIT_TRANSFORM_UPDATES_ICON" = TRAIT_TRANSFORM_UPDATES_ICON, // DARKPACK EDIT ADD - WEREWOLF @@ -731,10 +736,14 @@ 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_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS/FLAWS + "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 + "TRAIT_METAMORPH" = TRAIT_METAMORPH, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_PIERCED_VEIL" = TRAIT_PIERCED_VEIL, // DARKPACK EDIT ADD - MERITS/FLAWS ), /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..f2299a6e0337 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -355,21 +355,22 @@ 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_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS/FLAWS + "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 "TRAIT_CHARMER" = TRAIT_CHARMER, // DARKPACK EDIT ADD "TRAIT_COFFIN_THERAPY" = TRAIT_COFFIN_THERAPY, // DARKPACK EDIT ADD - "TRAIT_COLD_AURA" = TRAIT_COLD_AURA, // DARKPACK EDIT ADD + "TRAIT_PALE_AURA" = TRAIT_PALE_AURA, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_CONSENSUAL_FEEDING_ONLY" = TRAIT_CONSENSUAL_FEEDING_ONLY, // DARKPACK EDIT ADD "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD - "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS, // DARKPACK EDIT ADD + "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD @@ -383,10 +384,12 @@ 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 "TRAIT_MASQUERADE_VIOLATING_FACE" = TRAIT_MASQUERADE_VIOLATING_FACE, // DARKPACK EDIT ADD + "TRAIT_MERIT_UNTAMABLE" = TRAIT_MERIT_UNTAMABLE, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_NECROMANCY_KNOWLEDGE" = TRAIT_NECROMANCY_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy @@ -396,6 +399,8 @@ 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_PERMAFANGS" = TRAIT_PERMAFANGS, // DARKPACK EDIT ADD - MERITS/FLAWS "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 @@ -408,6 +413,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD "TRAIT_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD + "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_TORPOR" = TRAIT_TORPOR, // DARKPACK EDIT ADD "TRAIT_TOUGH_FLESH" = TRAIT_TOUGH_FLESH, // DARKPACK EDIT ADD "TRAIT_TRANSFORM_UPDATES_ICON" = TRAIT_TRANSFORM_UPDATES_ICON, // DARKPACK EDIT ADD - WEREWOLF @@ -421,10 +427,14 @@ 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_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS/FLAWS + "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 + "TRAIT_METAMORPH" = TRAIT_METAMORPH, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_PIERCED_VEIL" = TRAIT_PIERCED_VEIL, // DARKPACK EDIT ADD - MERITS/FLAWS ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 63effdc09f57..8b9b85cd7fc0 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -26,6 +26,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/settler, /datum/quirk/freerunning), list(/datum/quirk/numb, /datum/quirk/selfaware), list(/datum/quirk/empath, /datum/quirk/evil), + list(/datum/quirk/darkpack/weak_willed, /datum/quirk/darkpack/untamable), // DARKPACK EDIT ADD - MERITS/FLAWS )) GLOBAL_LIST_INIT(quirk_string_blacklist, generate_quirk_string_blacklist()) diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 31b0909e58ef..806fb8a90421 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -39,9 +39,10 @@ SUBSYSTEM_DEF(statpanels) "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss", world.timezone)]", "Round Time: [ROUND_TIME()]", - "Local City Time: [SSticker.round_start_timeofday ? "[station_time_timestamp("hh:mm MMM")] [CURRENT_STATION_YEAR]" : "The round hasn't started yet!"]", + // "Station Time: [station_time_timestamp()]", // DARKPACK EDIT REMOVAL - MERITS/FLAWS - (Time sense) "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)", - "---", // DARKPACK EDIT ADD + "\n", // DARKPACK EDIT ADD + "Canon: [GLOB.canon_event ? "Yes" : "No"]", // DARKPACK EDIT ADD "Masquerade: [SSmasquerade.get_description()]", // DARKPACK EDIT ADD ) diff --git a/code/datums/quirks/negative_quirks/scarred_eye.dm b/code/datums/quirks/negative_quirks/scarred_eye.dm index 3bead4bb248b..e7920e767c22 100644 --- a/code/datums/quirks/negative_quirks/scarred_eye.dm +++ b/code/datums/quirks/negative_quirks/scarred_eye.dm @@ -1,5 +1,5 @@ /datum/quirk/item_quirk/scarred_eye - name = "Scarred Eye" + name = "One Eye" // DARKPACK EDIT CHANGE - MERITS/FLAWS desc = "An accident in your past has cost you one of your eyes, but you got a cool eyepatch. Yarr!" icon = FA_ICON_EYE_SLASH value = -2 @@ -9,6 +9,7 @@ hardcore_value = 2 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/reagent_containers/cup/glass/bottle/rum, /obj/item/clothing/mask/bandana/red) + darkpack_allowed = TRUE // DARKPACK EDIT ADD - MERITS/FLAWS /datum/quirk_constant_data/eye_scarring associated_typepath = /datum/quirk/item_quirk/scarred_eye diff --git a/code/modules/client/preferences/scarred_eye.dm b/code/modules/client/preferences/scarred_eye.dm index 6cb0286fe86e..5905a13e2bec 100644 --- a/code/modules/client/preferences/scarred_eye.dm +++ b/code/modules/client/preferences/scarred_eye.dm @@ -14,7 +14,7 @@ if (!.) return FALSE - return "Scarred Eye" in preferences.all_quirks + return /datum/quirk/item_quirk/scarred_eye::name in preferences.all_quirks // DARKPACK EDIT CHANGE /datum/preference/choiced/scarred_eye/apply_to_human(mob/living/carbon/human/target, value) return diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 4d79a1b841e4..9bb053caaeef 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -171,12 +171,16 @@ var/mob/living/carbon/human/husrc = src // gross istypesrc but easier than refactoring even further for now if(husrc.skin_tone == "albino") apparent_blood_volume -= (BLOOD_VOLUME_NORMAL * 0.25) // knocks you down a few pegs - if(HAS_TRAIT(user, TRAIT_COLD_AURA)) + // DARKPACK EDIT ADD START + if(HAS_TRAIT(user, TRAIT_PALE_AURA)) apparent_blood_volume -= (BLOOD_VOLUME_NORMAL * 0.25) + /* I need a citation on if this thing is real, i got nothing. if(HAS_TRAIT(user, TRAIT_WARM_AURA)) apparent_blood_volume += (BLOOD_VOLUME_NORMAL * 0.25) + */ if(HAS_TRAIT(user, TRAIT_BLUSH_OF_HEALTH)) apparent_blood_volume += (BLOOD_VOLUME_NORMAL * 0.50) + // DAKRPACK EDIT ADD END switch(apparent_blood_volume) if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) . += span_warning("[t_He] [t_has] pale skin.") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b04cba60081e..022265103bab 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -905,7 +905,11 @@ /// Adds this list to the output to the stat browser /mob/proc/get_status_tab_items() - . = list("") //we want to offset unique stuff from standard stuff + // DARKPACK EDIT CHANGE START - MERITS/FLAWS - (Time sense) + . = list() + . += get_time_status() + . += "" //we want to offset unique stuff from standard stuff + // DARKPACK EDIT CHANGE END SEND_SIGNAL(src, COMSIG_MOB_GET_STATUS_TAB_ITEMS, .) return . 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/master_files/code/modules/mob/living/carbon/examine.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm index 72435558b539..67f27d9c2e90 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm @@ -26,6 +26,9 @@ if(HAS_TRAIT(src, TRAIT_SERPENTIS_SKIN) && !(HIDEJUMPSUIT)) // 'hidden by modest clothing' . += span_danger("[p_They()] [p_are()] covered in... scales!?
") + if(HAS_TRAIT(src, TRAIT_ANIMAL_MUSK)) + . += span_warning("[p_they(TRUE)] smell[p_s()] weirdly animal like...
") + if(!(obscured_slots & HIDEFACE)) switch(st_get_stat(STAT_APPEARANCE)) if(0) 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/jobs/code/supply/dealer.dm b/modular_darkpack/modules/jobs/code/supply/dealer.dm index b636f5b9fcd9..aae2ddcfb97c 100644 --- a/modular_darkpack/modules/jobs/code/supply/dealer.dm +++ b/modular_darkpack/modules/jobs/code/supply/dealer.dm @@ -1,8 +1,8 @@ /datum/job/vampire/dealer title = "Dealer" faction = FACTION_CITY - total_positions = 2 - spawn_positions = 2 + total_positions = 1 + spawn_positions = 1 supervisors = "nobody. You are beholden only to yourself." config_tag = "DEALER" job_flags = CITY_JOB_FLAGS @@ -16,8 +16,6 @@ ) known_contacts = list("Prince", "Seneschal", "Sheriff", "Baron") - allowed_splats = list(SPLAT_NONE) - splat_slots = list(SPLAT_NONE = 1) description = "You provide both legal and illegal supplies to those that get busy during the night. You are your own person yet you know people are out for you. Time to buckle in..." minimal_masquerade = 0 diff --git a/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm b/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm index bc12ccab4758..e4f286025da2 100644 --- a/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm +++ b/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm @@ -24,6 +24,8 @@ if(splat.id in allowed_splats) has_allowed_splat = TRUE break + if(!new_holder.splats && (SPLAT_NONE in allowed_splats)) + has_allowed_splat = TRUE if(!has_allowed_splat) return FALSE @@ -48,7 +50,8 @@ return TRUE var/datum/splat/splat_path = GLOB.splat_prototypes[mob_splat] - var/splat_id = splat_path?.id + // If splat is null, just assume we have no splat. + var/splat_id = splat_path?.id ? splat_path.id : SPLAT_NONE if(forbidden_splats && (splat_id in forbidden_splats)) return FALSE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm new file mode 100644 index 000000000000..0f683a469923 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm @@ -0,0 +1,12 @@ +// W20 p. 473 +/datum/quirk/darkpack/animal_musk + name = "Animal Musk" + // A little unsure who to do the logic on the social roll rn. + desc = {"(This is roleplay/flavor text at the moment) You have the odor of an animal, even in Homid form. + Whenever you are indoors or in a crowd of people, you make all Social rolls at a +2 difficulty. + Outdoors or in situations where you can distance yourself from humans, your odor is not noticeable. + Wolves (and lupus-born Garou) take little notice of this Flaw.."} + value = -1 + mob_trait = TRAIT_ANIMAL_MUSK + icon = FA_ICON_SPRAY_CAN_SPARKLES // icon = FA_ICON_BUGS + allowed_splats = SPLAT_SHIFTERS diff --git a/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/derangement.dm similarity index 89% rename from modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm rename to modular_darkpack/modules/merits_flaws/code/negative_quirks/derangement.dm index 494bea3a29eb..62c4ff9a71ee 100644 --- a/modular_darkpack/modules/quirks/code/negative_quirks/derangement.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/derangement.dm @@ -1,7 +1,7 @@ #define FLOOR_DISAPPEAR 3 SECONDS -/datum/quirk/derangement +/datum/quirk/darkpack/derangement name = "Derangement" desc = "Suffer from a permanent, incurable derangement that alters your perception." icon = FA_ICON_HOUSE_MEDICAL_CIRCLE_EXCLAMATION @@ -17,10 +17,10 @@ var/list/derangements COOLDOWN_DECLARE(next_process) -/datum/quirk/derangement/add() +/datum/quirk/darkpack/derangement/add() derangements = subtypesof(/datum/hallucination/malk) -/datum/quirk/derangement/process(seconds_per_tick) +/datum/quirk/darkpack/derangement/process(seconds_per_tick) if(!COOLDOWN_FINISHED(src, next_process)) return if(SPT_PROB(2, seconds_per_tick)) @@ -33,7 +33,7 @@ // largely taken from https://github.com/The-Final-Nights/The-Final-Nights/pull/287 // based on the work of maaacha -/datum/quirk/derangement/proc/handle_malk_floors() +/datum/quirk/darkpack/derangement/proc/handle_malk_floors() if(!quirk_holder?.client) return //Floors go crazy go stupid @@ -44,7 +44,7 @@ continue handle_malk_floor(floor) -/datum/quirk/derangement/proc/handle_malk_floor(turf/open/floor) +/datum/quirk/darkpack/derangement/proc/handle_malk_floor(turf/open/floor) var/mutable_appearance/fake_floor = image(floor.icon, floor, floor.icon_state, floor.layer) quirk_holder?.client.images += fake_floor var/offset = pick(-3,-2, -1, 1, 2, 3) @@ -52,11 +52,11 @@ animate(fake_floor, pixel_y = offset, time = disappearfirst, flags = ANIMATION_RELATIVE) addtimer(CALLBACK(src, PROC_REF(malk_floor_stage1), quirk_holder, offset, fake_floor), disappearfirst, TIMER_CLIENT_TIME) -/datum/quirk/derangement/proc/malk_floor_stage1(mob/living/malk, offset, mutable_appearance/fake_floor) +/datum/quirk/darkpack/derangement/proc/malk_floor_stage1(mob/living/malk, offset, mutable_appearance/fake_floor) animate(fake_floor, pixel_y = -offset, time = FLOOR_DISAPPEAR, flags = ANIMATION_RELATIVE) addtimer(CALLBACK(src, PROC_REF(malk_floor_stage2), malk, fake_floor), FLOOR_DISAPPEAR, TIMER_CLIENT_TIME) -/datum/quirk/derangement/proc/malk_floor_stage2(mob/living/malk, mutable_appearance/fake_floor) +/datum/quirk/darkpack/derangement/proc/malk_floor_stage2(mob/living/malk, mutable_appearance/fake_floor) malk.client?.images -= fake_floor /datum/hallucination/malk diff --git a/modular_darkpack/modules/merits_flaws/code/permanent_fangs.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_fangs.dm similarity index 85% rename from modular_darkpack/modules/merits_flaws/code/permanent_fangs.dm rename to modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_fangs.dm index 8ee8a3d81f9a..d4463c3c5acd 100644 --- a/modular_darkpack/modules/merits_flaws/code/permanent_fangs.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_fangs.dm @@ -1,6 +1,8 @@ +// V20 p. 482 /datum/quirk/darkpack/permafangs name = "Permanent Fangs" desc = "Your fangs do not retract, making it impossible for you to hide your true nature. While some mortals may think you've had your teeth filed or are wearing prosthetics, sooner or later you're going to run into someone who knows what you truly are." + // TTRPG accurate would be -3? But this is also missing the max Appearance lock.. value = -1 mob_trait = TRAIT_PERMAFANGS gain_text = span_notice("Your fangs become stuck.") diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/pierced_veil.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/pierced_veil.dm new file mode 100644 index 000000000000..c05a8d72e10f --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/pierced_veil.dm @@ -0,0 +1,10 @@ +// W20 p. 484 +/datum/quirk/darkpack/pierced_veil + name = "Pierced Veil" + // A little unsure who to do the logic on the social roll rn. + desc = {"Unlike most Garou, your Crinos form does not trigger the Delirium in mortals. + This makes you particularly vulnerable to werewolf hunters, who may find it less difficult to pursue you back to your caern, putting the members of your sept in considerable danger."} + value = -3 + mob_trait = TRAIT_PIERCED_VEIL + icon = FA_ICON_MASKS_THEATER + allowed_splats = SPLAT_SHIFTERS diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/weak_willed.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/weak_willed.dm new file mode 100644 index 000000000000..bc2c12965d19 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/weak_willed.dm @@ -0,0 +1,16 @@ +// W20 p. 478, V20 p. 486 +/datum/quirk/darkpack/weak_willed + name = "Weak Willed" + desc = {"You have little resistance to attempts to dominate or intimidate you. + Domination-focused Powers such as Dominate automatically succeed against you. + Your difficulties to resist mind-altering spells or magic, are increased by two."} + /* Need to implement the other effects still..... + desc = {"You have little resistance to attempts to dominate or intimidate you. + Domination-focused Powers such as Dominate, Staredown, Roll Over, etc. automatically succeed against you. + Your difficulties to resist Social Talents such as Intimidation or Leadership, as well as mind-altering spells or magic, are increased by two. + Your Willpower may never rise above 4"} + */ + value = -1 + mob_trait = TRAIT_WEAK_WILLED + icon = FA_ICON_BRAIN + diff --git a/modular_darkpack/modules/merits_flaws/code/illegal_identity.dm b/modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm similarity index 98% rename from modular_darkpack/modules/merits_flaws/code/illegal_identity.dm rename to modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm index 07688d52bdc5..7011d373b5b4 100644 --- a/modular_darkpack/modules/merits_flaws/code/illegal_identity.dm +++ b/modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm @@ -1,3 +1,4 @@ +// Homebrew? /datum/quirk/darkpack/illegal_identity name = "Illegal Identity" desc = "Illegal immigrant? Died legally? Born a wolf? The cops aren't happy." diff --git a/modular_darkpack/modules/quirks/code/quirks.dm b/modular_darkpack/modules/merits_flaws/code/old_quirks.dm similarity index 100% rename from modular_darkpack/modules/quirks/code/quirks.dm rename to modular_darkpack/modules/merits_flaws/code/old_quirks.dm diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserk.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserk.dm new file mode 100644 index 000000000000..debce1198337 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserk.dm @@ -0,0 +1,23 @@ +/* DARKPACK TODO - FRENZY +// W20 p. 473 +/datum/quirk/darkpack/metamorph + name = "Metamorph" + desc = {"You have uncanny control over your inner anger, and can use your Rage as most Garou cannot. + You can enter a berserk frenzy at will, ignoring your wound penalties. + You still suffer the consequences of any actions committed in the throes of frenzy. + When circumstances might cause you to frenzy, you must make a standard roll to see if you do so or not."} + value = 2 + icon = FA_ICON_ANGRY + allowed_splats = SPLAT_SHIFTERS + +/datum/quirk/darkpack/metamorph/add(client/client_source) + . = ..() + add_verb(quirk_holder, /mob/living/carbon/human/proc/manual_frenzy) + +/datum/quirk/darkpack/metamorph/remove() + . = ..() + remove_verb(quirk_holder, /mob/living/carbon/human/proc/manual_frenzy) + +/mob/living/carbon/human/proc/manual_frenzy() + return +*/ diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/fair_glabro.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/fair_glabro.dm new file mode 100644 index 000000000000..508eef62a44d --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/fair_glabro.dm @@ -0,0 +1,8 @@ +// W20 p. 472 +/datum/quirk/darkpack/fair_glabro + name = "Fair Glabro" + desc = "You have a Glabro form that can pass for human, though it's still larger than normal people. You have no penalties to Social Attributes in Glabro form." + value = 2 + mob_trait = TRAIT_FAIR_GLABRO + icon = FA_ICON_PERSON_HALF_DRESS + allowed_splats = list(SPLAT_GAROU) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/metamorph.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/metamorph.dm new file mode 100644 index 000000000000..b71e7626b970 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/metamorph.dm @@ -0,0 +1,18 @@ +// W20 p. 473 +/datum/quirk/darkpack/metamorph + name = "Metamorph" + desc = {"Shapechanging for you is as easy as breathing. + You do not need to roll to change forms, nor is it necessary to spend a Rage point for an instantaneous shift. + You make your changes as if you scored five successes on your roll to shift forms. + If you lose consciousness from wounds or for some other reason, you may roll Wits + Primal Urge (difficulty 8) to choose which form you assume rather than reverting to breed form."} + value = 7 + mob_trait = TRAIT_METAMORPH + // I love the greg sam. sa + icon = FA_ICON_BUG + allowed_splats = SPLAT_SHIFTERS + +/datum/storyteller_roll/metamorph + bumper_text = "metamorph" + applicable_stats = (STAT_WITS) // + PRIMAL_URGE + difficulty = 8 + roll_output_type = ROLL_PRIVATE diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm new file mode 100644 index 000000000000..ab605f190a8a --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm @@ -0,0 +1,12 @@ +// Ghouls & Revenants p. 137, HH p. 43 +/datum/quirk/darkpack/pale_aura + name = "Pale Aura" + desc = {"Any color your character's aura takes has a pale cast to it, as though he was a vampire."} + /*{"Any color your character's aura takes has a pale cast to it, as though he was a vampire. + Unless her player gains five chapter two or more successes on an Aura Perception roll, + any vampire discerns your character's aura as one belonging to the Kindred"} + */ + value = 2 + mob_trait = TRAIT_PALE_AURA + icon = FA_ICON_TEMPERATURE_EMPTY + allowed_splats = list(SPLAT_NONE, SPLAT_GHOUL) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm new file mode 100644 index 000000000000..132718fd3b99 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm @@ -0,0 +1,21 @@ +// W20 p. 475 +/datum/quirk/darkpack/time_sense + name = "Time Sense" + desc = {"You have an innate sense of time and are able to estimate the passage of time accurately without using a watch or other mechanical device, + even after long periods of unconsciousness. This allows you to know (among other things) what phase the moon is in."} + value = 1 + mob_trait = TRAIT_TIME_SENSE + icon = FA_ICON_STOPWATCH + +/mob/proc/get_time_status() + . = list() + . += "Local City Time: [SSticker.round_start_timeofday ? "[station_time_timestamp("hh:mm MMM")] [CURRENT_STATION_YEAR]" : "The round hasn't started yet!"]" + +/mob/living/get_time_status() + . = list() + if(HAS_TRAIT(src, TRAIT_TIME_SENSE)) + . += "Local City Time: [station_time_timestamp("hh:mm MMM")] [CURRENT_STATION_YEAR]" + . += "Phase of moon: [GLOB.moon_state]" + else + . += "Local City Time: [CURRENT_STATION_YEAR]? Get a watch." + diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/untamable.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/untamable.dm new file mode 100644 index 000000000000..913de0114813 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/untamable.dm @@ -0,0 +1,11 @@ +// W20 p. 476 +/datum/quirk/darkpack/untamable + name = "Untamable" + desc = {"You are a wild soul who has never bent to the leash. + You are immune to vampiric Domination (but not emotional manipulations via Presence)"} + // Change this line when we add these gifts. + // You are immune to vampiric Domination (but not emotional manipulations via Presence) and these Gifts will not work on you: Roll Over, Obedience, and Mastery."} + value = 5 + mob_trait = TRAIT_MERIT_UNTAMABLE + icon = FA_ICON_SHIELD_DOG + allowed_splats = SPLAT_SHIFTERS 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/powers/code/discipline/auspex/aura_component.dm b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm index 8b7844cd5d0e..6a51ad8dc809 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -1,3 +1,5 @@ +#define AUSPEX_LAYER BELOW_MOB_LAYER + /datum/atom_hud/data/auspex_aura hud_icons = list(AUSPEX_AURA_HUD) @@ -41,7 +43,7 @@ var/image/holder = parent_mob.hud_list[AUSPEX_AURA_HUD] if(!holder) holder = new - var/mutable_appearance/aura_appearance = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "aura", ABOVE_MOB_LAYER, parent_mob, GAME_PLANE) + var/mutable_appearance/aura_appearance = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "aura", AUSPEX_LAYER, parent_mob, GAME_PLANE) update_aura_colors(aura_appearance, holder) update_aura_overlays(aura_appearance, holder) update_aura_filters(aura_appearance, holder) @@ -62,9 +64,9 @@ holder.appearance = aura_appearance var/mob/parent_mob = parent - if(iskindred(parent_mob)) + if(HAS_TRAIT(parent, TRAIT_PALE_AURA)) var/icon/temporary_icon_holder = holder.appearance - var/mutable_appearance/aura_image = mutable_appearance(temporary_icon_holder, "aura", ABOVE_MOB_LAYER, parent_mob, GAME_PLANE) + var/mutable_appearance/aura_image = mutable_appearance(temporary_icon_holder, "aura", AUSPEX_LAYER, parent_mob, GAME_PLANE) var/list/hsv_color_value = rgb2hsv(holder.color) hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for kindred @@ -75,7 +77,7 @@ // DARKPACK TODO - aura still needs real sprites. if(HAS_TRAIT(parent_mob, TRAIT_FRENETIC_AURA)) var/icon/temporary_icon_holder = holder.appearance - var/mutable_appearance/aura_image = mutable_appearance(temporary_icon_holder, "old_aura_bright", ABOVE_MOB_LAYER, parent_mob, GAME_PLANE) + var/mutable_appearance/aura_image = mutable_appearance(temporary_icon_holder, "old_aura_bright", AUSPEX_LAYER, parent_mob, GAME_PLANE) var/list/hsv_color_value = rgb2hsv(holder.color) hsv_color_value[2] = hsv_color_value[2] * 1.5 // Way brighter for shapeshifters @@ -95,15 +97,15 @@ if(current_aura == AURA_ANXIOUS) var/icon/temporary_icon_holder = icon('modular_darkpack/modules/powers/icons/auras.dmi', "aura") var/icon/static_icon = getStaticIcon(temporary_icon_holder) - var/mutable_appearance/static_image = mutable_appearance(static_icon, "aura", ABOVE_MOB_LAYER+2, parent_mob, GAME_PLANE) + var/mutable_appearance/static_image = mutable_appearance(static_icon, "aura", AUSPEX_LAYER+0.01, parent_mob, GAME_PLANE) static_image.appearance_flags |= RESET_COLOR holder.add_overlay(static_image) - if(isghoul(parent_mob)) + if(!HAS_TRAIT(parent, TRAIT_PALE_AURA) && isghoul(parent_mob)) var/icon/temporary_icon_holder = icon('modular_darkpack/modules/powers/icons/auras.dmi', "aurablotch") - var/mutable_appearance/aura_blotches = mutable_appearance(temporary_icon_holder, "aurablotch", ABOVE_MOB_LAYER+3, parent_mob, GAME_PLANE) + var/mutable_appearance/aura_blotches = mutable_appearance(temporary_icon_holder, "aurablotch", AUSPEX_LAYER+0.02, parent_mob, GAME_PLANE) - var/list/hsv_color_value = rgb2hsv(aura_appearance.color) + var/list/hsv_color_value = rgb2hsv(holder.color) hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for ghouls var/icon/icon_mask = getIconMask(aura_blotches) @@ -122,3 +124,4 @@ if(HAS_TRAIT(parent_mob, TRAIT_IN_FRENZY)) apply_wibbly_filters(holder) +#undef AUSPEX_LAYER diff --git a/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm b/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm index 56d76f718711..0fa76fb66f82 100644 --- a/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm +++ b/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm @@ -103,12 +103,15 @@ var/mypower = SSroll.storyteller_roll(owner_stat, difficulty = theirpower, roller = owner, numerical = TRUE) //tremere have built-in safeguards to easily dominate their stone servitors - var/mob/living/carbon/human/human_target = target if(HAS_TRAIT(target, TRAIT_WEAK_TO_DOMINATE)) theirpower -= 2 + if(HAS_TRAIT(target, TRAIT_WEAK_WILLED)) + theirpower -= 2 + //wearing dark sunglasses makes it harder for the Dominator to capture the victim's gaze and raises difficulty -- V20 'Dominate' section titled 'Eye Contact' var/total_tint = 0 + var/mob/living/carbon/human/human_target = target for(var/obj/item/clothing/worn_item in human_target.get_equipped_items(INCLUDE_ABSTRACT)) total_tint += worn_item.tint @@ -132,9 +135,13 @@ var/datum/splat/vampire/kindred/target_splat = iskindred(target) if(target_splat) if(owner_splat.generation > target_splat.generation) - to_chat(owner, span_warning("Your fail to dominate [target], as their blood is more potent than yours!")) + to_chat(owner, span_warning("You fail to dominate [target], as their blood is more potent than yours!")) return FALSE + if(HAS_TRAIT(target, TRAIT_MERIT_UNTAMABLE)) + to_chat(owner, span_warning("You fail to dominate [target], they are an untamable beast!")) + return FALSE + if(numerical == TRUE) return mypower diff --git a/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm b/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm index 839b6e4bb325..32264cf723b0 100644 --- a/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm +++ b/modular_darkpack/modules/powers/code/discipline/temporis/temporis.dm @@ -36,6 +36,9 @@ check_flags = DISC_CHECK_CONSCIOUS vitae_cost = 0 +/datum/discipline_power/temporis/hourglass_of_the_mind/post_gain() + ADD_TRAIT(owner, TRAIT_TIME_SENSE, DISCIPLINE_TRAIT) + /datum/discipline_power/temporis/hourglass_of_the_mind/activate() . = ..() to_chat(owner, "[station_time_timestamp("hh:mm:ss")]") 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_dice/code/roll_subtypes.dm b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm index 1a06bc1ddfe8..1f0119040caf 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm @@ -66,7 +66,6 @@ bumper_text = "bash door" reroll_cooldown = 1 SCENES applicable_stats = list(STAT_STRENGTH) - numerical = TRUE /datum/storyteller_roll/grappling bumper_text = "grappling" 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/kindred_splat.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm index 175de38ea834..f0e060325e10 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm @@ -15,7 +15,8 @@ TRAIT_VTM_MORALITY, TRAIT_VTM_CLANS, TRAIT_UNAGING, - TRAIT_DRINKS_BLOOD + TRAIT_DRINKS_BLOOD, + TRAIT_PALE_AURA, ) splat_actions = list( /datum/action/cooldown/mob_cooldown/give_vitae, 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/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm index 650df4dd9f15..c1cd120ee8ff 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm @@ -21,7 +21,7 @@ var/datum/action/cooldown/malk_speech/malk_font = new(vampire) hivemind.Grant(vampire) malk_font.Grant(vampire) - vampire.add_quirk(/datum/quirk/derangement) + vampire.add_quirk(/datum/quirk/darkpack/derangement) // Madness Network handling LAZYADD(madness_network, vampire) 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..41c149da8e00 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 @@ -25,7 +25,7 @@ var/mob_pixel_w var/mob_pixel_z /// Stats added and removed upon gaining the species - var/list/form_bonus_stats = list() + var/list/form_bonus_stats /// Dice roll difficulty required to shift into this form var/shift_difficulty = 6 /// If update_body_parts is allowed to override the body render @@ -48,8 +48,7 @@ human_who_gained_species.add_offsets(type, w_add = mob_pixel_w, z_add = mob_pixel_z) - for(var/key, value in form_bonus_stats) - human_who_gained_species.st_add_stat_mod(key, value, type) + add_buffs(human_who_gained_species) /datum/species/human/shifter/on_species_loss(mob/living/carbon/human/human, datum/species/new_species, pref_load) . = ..() @@ -58,9 +57,23 @@ human.remove_offsets(type) + clear_buffs(human) + +/datum/species/human/shifter/proc/add_buffs(mob/living/carbon/human/human) + for(var/key, value in form_bonus_stats) + if(!should_add_buff(human, key, value)) + continue + human.st_add_stat_mod(key, value, type) + +/datum/species/human/shifter/proc/should_add_buff(mob/living/carbon/human/human, datum/st_stat/buff_type, amount) + return TRUE + +/datum/species/human/shifter/proc/clear_buffs(mob/living/carbon/human/human) for(var/key, value in form_bonus_stats) human.st_remove_stat_mod(key, type) +/datum/species/human/shifter/proc/is_veil_breaching_form(mob/living/carbon/human/human) + return veil_breaching_form /// Fetch the mobs fur color from their features. /datum/species/human/shifter/proc/get_fur_color(mob/living/carbon/human/human) @@ -86,7 +99,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) @@ -137,20 +150,28 @@ fallback_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/glabro.dmi' veil_breaching_form = TRUE +/datum/species/human/shifter/bestial/should_add_buff(mob/living/carbon/human/human, datum/st_stat/buff_type, amount) + . = ..() + // Raw string check instead of a define or type path is pretty bleak + if(HAS_TRAIT(human, TRAIT_FAIR_GLABRO) && (buff_type::subcategory == "Social") && (amount < 0)) + return FALSE + +/datum/species/human/shifter/bestial/is_veil_breaching_form(mob/living/carbon/human/human) + if(HAS_TRAIT(human, TRAIT_FAIR_GLABRO)) + return FALSE + return ..() + /datum/species/human/shifter/bestial/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load, regenerate_icons) . = ..() human_who_gained_species.update_mob_height() human_who_gained_species.update_transform(1.25) - - human_who_gained_species.remove_overlay(BODY_ADJ_LAYER) - - var/fur_color = get_fur_color(human_who_gained_species) - var/mob_icon = get_mob_icon(human_who_gained_species) - - human_who_gained_species.overlays_standing[BODY_ADJ_LAYER] = list(image(mob_icon, fur_color)) - - human_who_gained_species.apply_overlay(BODY_ADJ_LAYER) + if(!HAS_TRAIT(human_who_gained_species, TRAIT_FAIR_GLABRO)) + human_who_gained_species.remove_overlay(BODY_ADJ_LAYER) + var/fur_color = get_fur_color(human_who_gained_species) + var/mob_icon = get_mob_icon(human_who_gained_species) + human_who_gained_species.overlays_standing[BODY_ADJ_LAYER] = list(image(mob_icon, fur_color)) + human_who_gained_species.apply_overlay(BODY_ADJ_LAYER) /datum/species/human/shifter/bestial/on_species_loss(mob/living/carbon/human/human, datum/species/new_species, pref_load) . = ..() 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..21af088962eb 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")) @@ -130,7 +134,7 @@ COOLDOWN_START(src, passive_healing_cd, 1 TURNS) var/datum/species/human/shifter/shifter_species = owner.dna.species if(istype(shifter_species)) - if(shifter_species.veil_breaching_form && !shifter_species.causes_delerium) + if(shifter_species.is_veil_breaching_form(owner) && (!shifter_species.causes_delerium || HAS_TRAIT(owner, TRAIT_PIERCED_VEIL))) SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION) // Being used to represent meditating in your caern @@ -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/splats/transformation.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm index 5988945b512a..966652e34c66 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm @@ -19,7 +19,9 @@ to_chat(owner, span_warning("Your shifting is on cooldown for one turn.")) return - if(ispath(get_breed_form_species(), form_to_transform)) + if(HAS_TRAIT(owner, TRAIT_METAMORPH)) + requires_roll = FALSE + else if(ispath(get_breed_form_species(), form_to_transform)) requires_roll = FALSE else if(costs_rage) if(adjust_rage(-1, TRUE)) @@ -38,7 +40,7 @@ transform_roll.difficulty = form_to_transform::shift_difficulty switch(transform_roll.st_roll(owner, owner, PRIMAL_URGE_PLACEHOLDER)) if(ROLL_SUCCESS) - EMPTY_BLOCK_GUARD + pass() if(ROLL_FAILURE, ROLL_BOTCH) return @@ -60,6 +62,15 @@ addtimer(CALLBACK(src, PROC_REF(transform_finish), form_to_transform, time_to_transform), time_to_transform * 0.9) /datum/splat/werewolf/shifter/proc/revert_to_breed_form() + if(HAS_TRAIT(owner, TRAIT_METAMORPH)) + var/datum/storyteller_roll/metamorph/roll_datum = new() + if(roll_datum.st_roll(owner, bonus = PRIMAL_URGE_PLACEHOLDER) == ROLL_SUCCESS) + // First valid use of timeout discovered (we dont want to be able to hold it out) + var/choice = tgui_input_list(owner, "Revert to your choosen form", "Metamorph", transformation_list, get_breed_form_species(), 1 TURNS) + if(choice in transformation_list) + transform_fera(choice, force = TRUE) + return + transform_fera(get_breed_form_species(), force = TRUE) /datum/splat/werewolf/shifter/proc/transform_finish(form_to_transform, time_taken = DOGGY_ANIMATION_TIME) 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..a7770c78a336 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7290,8 +7290,18 @@ #include "modular_darkpack\modules\matrix\code\job.dm" #include "modular_darkpack\modules\matrix\code\matrix.dm" #include "modular_darkpack\modules\merits_flaws\code\_darkpack_quirk.dm" -#include "modular_darkpack\modules\merits_flaws\code\illegal_identity.dm" -#include "modular_darkpack\modules\merits_flaws\code\permanent_fangs.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\animal_musk.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\derangement.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\permanent_fangs.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\pierced_veil.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\weak_willed.dm" +#include "modular_darkpack\modules\merits_flaws\code\neutral_quirks\illegal_identity.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\beserk.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\fair_glabro.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\metamorph.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\pale_aura.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\time_sense.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\untamable.dm" #include "modular_darkpack\modules\mob_spawners\code\citizen.dm" #include "modular_darkpack\modules\movie_theatre\code\areas.dm" #include "modular_darkpack\modules\movie_theatre\code\fluff.dm" @@ -7446,7 +7456,6 @@ #include "modular_darkpack\modules\powers\code\discipline\vicissitude\fleshwalls.dm" #include "modular_darkpack\modules\powers\code\discipline\vicissitude\human_flesh.dm" #include "modular_darkpack\modules\preferences\height_preference.dm" -#include "modular_darkpack\modules\quirks\code\negative_quirks\derangement.dm" #include "modular_darkpack\modules\radios\code\admin_verb.dm" #include "modular_darkpack\modules\radios\code\radio.dm" #include "modular_darkpack\modules\radios\code\transceiver.dm" @@ -7527,6 +7536,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 +7684,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 +7697,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"