diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 1d0d3424b7f0..34bf0b5be4d8 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -124,16 +124,23 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_WTA_GAROU_AUSPICE "wta_garou_auspice" // This mob has fur! #define TRAIT_FERA_FUR "fera_fur" -/// If the fera is wyrm tainted. Affects their sprite. +/// If the fera is wyrm tainted. #define TRAIT_WYRMTAINTED "wyrm_tainted" +/// If the fera is wyrm tainted. Affects their sprite. +#define TRAIT_WYRMTAINTED_SPRITE "wyrm_tainted_sprite" /// For living mobs to prevent adjustments to their lying angle. Used primarly for fera. #define TRAIT_NO_LYING_ANGLE "no_lying_angle" // Expensive but allows us to ensure there resting gets updated. #define TRAIT_TRANSFORM_UPDATES_ICON "transform_updates_icon" -// Massivly boosts the range of your howl emote. -#define TRAIT_LOUD_HOWLER "loud_howler" /// Prevents the mob from picking up items larger then small #define TRAIT_SMALL_HANDS "small_hands" +// Traits granted via gifts +// Massivly boosts the range of your howl emote. +#define TRAIT_LOUD_HOWLER "loud_howler" +#define TRAIT_RAZOR_CLAWS "razor_claws" + +/// Sixth sense restricted to view range +#define TRAIT_LOCAL_SIXTHSENSE "local_sixth_sense" // BELOW ARE ALL MERITS/FLAWS #define TRAIT_ILLEGAL_IDENTITY "illegal_identity" // GOVERNMENT diff --git a/code/__DEFINES/~darkpack/traits/sources.dm b/code/__DEFINES/~darkpack/traits/sources.dm index 6402f89925de..fbe972ee6d3a 100644 --- a/code/__DEFINES/~darkpack/traits/sources.dm +++ b/code/__DEFINES/~darkpack/traits/sources.dm @@ -4,6 +4,8 @@ #define CLAN_TRAIT "clan" #define DISCIPLINE_TRAIT "discipline" +#define GIFT_TRAIT "gift" + #define STAKE_TRAIT "stake" #define DAMAGE_TRAIT "damage" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 5b997464250f..a138dbdbf0f3 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -403,6 +403,10 @@ GLOBAL_LIST_INIT(skin_tone_names, list( override = TRUE if(HAS_TRAIT(M, TRAIT_SIXTHSENSE) && message_type == DEADCHAT_REGULAR) override = TRUE + // DARKPACK EDIT ADD START + if(HAS_TRAIT(M, TRAIT_LOCAL_SIXTHSENSE) && (message_type == DEADCHAT_REGULAR) && (source in orange(DEFAULT_MESSAGE_RANGE, M))) + override = TRUE + // DARKPACK EDIT ADD END if(SSticker.current_state == GAME_STATE_FINISHED) override = TRUE if(isnewplayer(M) && !override) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 04f7eed6098b..53e9ef760e9e 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -692,6 +692,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD + "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, @@ -731,9 +732,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT "TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_TRANSFORM_UPDATES_ICON" = TRAIT_TRANSFORM_UPDATES_ICON, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_SMALL_HANDS" = TRAIT_SMALL_HANDS, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_RAZOR_CLAWS" = TRAIT_RAZOR_CLAWS, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD "TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP, ), /mob/living/carbon = list( diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index a5e9ce27bdd6..eaf388a2315e 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -355,9 +355,12 @@ 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_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD - "TRAIT_VICISSITUDE_KNOWLEDGE" = TRAIT_VICISSITUDE_KNOWLEDGE, // DARKPACK EDIT ADD - "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD - POWERS + "TRAIT_VICISSITUDE_KNOWLEDGE" = TRAIT_VICISSITUDE_KNOWLEDGE, // DARKPACK EDIT ADD - POWERS + "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD - POWERS + "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, diff --git a/icons/effects/mouse_pointers/discipline.dmi b/icons/effects/mouse_pointers/discipline.dmi deleted file mode 100644 index 3a01efceb96e..000000000000 Binary files a/icons/effects/mouse_pointers/discipline.dmi and /dev/null differ diff --git a/modular_darkpack/modules/areas/code/__vtm.dm b/modular_darkpack/modules/areas/code/__vtm.dm index 58b3d2d86363..71afaff63047 100644 --- a/modular_darkpack/modules/areas/code/__vtm.dm +++ b/modular_darkpack/modules/areas/code/__vtm.dm @@ -7,6 +7,10 @@ outdoors = TRUE var/zone_type = ZONE_MASQUERADE + // 7 is an average city street. + /// The rating of the gauntlet, the Gauntlet is strongest near certain types of environments + var/gauntlet_rating = 7 // WEREWOLF + /area/vtm/powered(chan) if (!requires_power) return TRUE diff --git a/modular_darkpack/modules/areas/code/interiors/endron_facility.dm b/modular_darkpack/modules/areas/code/interiors/endron_facility.dm index 17be97f4b145..b5861760c854 100644 --- a/modular_darkpack/modules/areas/code/interiors/endron_facility.dm +++ b/modular_darkpack/modules/areas/code/interiors/endron_facility.dm @@ -4,6 +4,7 @@ zone_type = ZONE_NO_MASQUERADE music_index = MUSIC_FOREST fire_controled = FALSE + gauntlet_rating = 8 /area/vtm/interior/endron_facility/restricted name = MAIN_EVIL_COMPANY + " Facility Restricted" @@ -23,6 +24,7 @@ icon_state = "supply" zone_type = ZONE_NO_MASQUERADE fire_controled = TRUE + gauntlet_rating = 6 /area/vtm/interior/endron_facility/plant name = "Endron Processing Plant" diff --git a/modular_darkpack/modules/areas/code/interiors/garou.dm b/modular_darkpack/modules/areas/code/interiors/garou.dm index edf0bc42cc12..61d28ab27d6c 100644 --- a/modular_darkpack/modules/areas/code/interiors/garou.dm +++ b/modular_darkpack/modules/areas/code/interiors/garou.dm @@ -2,6 +2,7 @@ name = "Children of Gaia Caern" icon_state = "cog_caern" zone_type = ZONE_ELYSIUM + gauntlet_rating = 5 /area/vtm/interior/cog/pantry name = "Earth's Bounty Food Pantry" diff --git a/modular_darkpack/modules/areas/code/outsides/forest.dm b/modular_darkpack/modules/areas/code/outsides/forest.dm index 29bee2c1ce1f..5d5c00880bea 100644 --- a/modular_darkpack/modules/areas/code/outsides/forest.dm +++ b/modular_darkpack/modules/areas/code/outsides/forest.dm @@ -3,3 +3,4 @@ icon_state = "park" zone_type = ZONE_NO_MASQUERADE sound_environment = SOUND_ENVIRONMENT_FOREST + gauntlet_rating = 6 diff --git a/modular_darkpack/modules/areas/code/random_gen.dm b/modular_darkpack/modules/areas/code/random_gen.dm index 1a3653d55085..3d1aa7727e57 100644 --- a/modular_darkpack/modules/areas/code/random_gen.dm +++ b/modular_darkpack/modules/areas/code/random_gen.dm @@ -3,6 +3,7 @@ icon_state = "park" outdoors = TRUE map_generator = /datum/map_generator/jungle_generator + gauntlet_rating = 6 /area/vtm/planetgeneration/woodland @@ -10,3 +11,4 @@ icon_state = "cog_caern" outdoors = TRUE map_generator = /datum/map_generator/jungle_generator/woodland + gauntlet_rating = 6 diff --git a/modular_darkpack/modules/deprecated/sounds/necromancy.ogg b/modular_darkpack/modules/deprecated/sounds/necromancy.ogg deleted file mode 100644 index 09ad35772470..000000000000 Binary files a/modular_darkpack/modules/deprecated/sounds/necromancy.ogg and /dev/null differ diff --git a/modular_darkpack/modules/doors/code/vampdoor.dm b/modular_darkpack/modules/doors/code/vampdoor.dm index e326d7a8da04..01fb316bba1c 100644 --- a/modular_darkpack/modules/doors/code/vampdoor.dm +++ b/modular_darkpack/modules/doors/code/vampdoor.dm @@ -45,6 +45,11 @@ AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Try lock") + var/static/list/loc_connections = list( + COMSIG_ATOM_MAGICALLY_UNLOCKED = PROC_REF(on_magic_unlock), + ) + AddElement(/datum/element/connect_loc, loc_connections) + /obj/structure/vampdoor/CanAStarPass(to_dir, datum/can_pass_info/pass_info) return !density || !locked @@ -162,6 +167,13 @@ closed = FALSE SEND_SIGNAL(src, COMSIG_AIRLOCK_OPEN) +/// Signal proc for [COMSIG_ATOM_MAGICALLY_UNLOCKED]. Unlock and open up when we get knock casted. +/obj/structure/vampdoor/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, atom/caster) + SIGNAL_HANDLER + + locked = FALSE + INVOKE_ASYNC(src, PROC_REF(open_door)) + /obj/structure/vampdoor/proc/close_door(mob/user, force) if(!force) for(var/mob/living/L in src.loc) diff --git a/modular_darkpack/modules/powers/code/discipline/animalism.dm b/modular_darkpack/modules/powers/code/discipline/animalism.dm index d9baea2fa6e6..bbb2c5081d21 100644 --- a/modular_darkpack/modules/powers/code/discipline/animalism.dm +++ b/modular_darkpack/modules/powers/code/discipline/animalism.dm @@ -7,7 +7,7 @@ /datum/discipline_power/animalism name = "Animalism power name" desc = "Animalism power description" - effect_sound = 'modular_darkpack/modules/deprecated/sounds/wolves.ogg' + effect_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wolves.ogg' /datum/discipline_power/animalism/activate() . = ..() diff --git a/modular_darkpack/modules/splats/code/human_dummies.dm b/modular_darkpack/modules/splats/code/human_dummies.dm new file mode 100644 index 000000000000..c3dfc61a4934 --- /dev/null +++ b/modular_darkpack/modules/splats/code/human_dummies.dm @@ -0,0 +1,9 @@ +// mimmics /mob/living/carbon/human/species to allow for quick testing +/mob/living/carbon/human/splat + abstract_type = /mob/living/carbon/human/splat + var/auto_splats = list() + +/mob/living/carbon/human/splat/Initialize(mapload) + . = ..() + for(var/splat in auto_splats) + add_splat(splat) diff --git a/modular_darkpack/modules/splats/code/powers/_power.dm b/modular_darkpack/modules/splats/code/powers/_power.dm index 10480f589040..d99530edb81d 100644 --- a/modular_darkpack/modules/splats/code/powers/_power.dm +++ b/modular_darkpack/modules/splats/code/powers/_power.dm @@ -6,3 +6,40 @@ // Not used presently but good future proofing incase behavoirs care. /// Means that this action is not a real power, but some sort of innate ability we represent as a power/disc/gift mechnaicly. var/innate_ability = FALSE + + /// How much temporary willpower is required to use this ability + var/willpower_cost = 0 + +/datum/action/cooldown/power/IsAvailable(feedback) + . = ..() + + if(!can_afford(feedback)) + return FALSE + +/datum/action/cooldown/power/Activate(atom/target) + . = ..() + + spend_resources() + + +/** + * Returns a boolean of if the caster can afford + * this power's cost cost. + */ +/datum/action/cooldown/power/proc/can_afford(feedback) + if(willpower_cost && isliving(owner)) + var/mob/living/living_owner = owner + if(willpower_cost > living_owner.st_get_stat(STAT_TEMPORARY_WILLPOWER)) + if(feedback) + to_chat(owner, span_warning("You don't have enough willpower to do that!")) + return FALSE + return TRUE + +/** + * Overridable proc handling the spending of resources (willpower/vitae/rage/etc) + * when casting the power. + */ +/datum/action/cooldown/power/proc/spend_resources() + if(willpower_cost && isliving(owner)) + var/mob/living/living_owner = owner + living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -willpower_cost) diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm b/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm index 9abca7539c78..3187e547dcc7 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_subsystem.dm @@ -32,6 +32,13 @@ SUBSYSTEM_DEF(roll) dice_roll.numerical = numerical return dice_roll.st_roll(roller, roller, dice) +/datum/controller/subsystem/roll/proc/storyteller_roll_stats(applic_stats = list(), bonus = 0, difficulty = 6, mob/living/roller = null, numerical = FALSE) + var/datum/storyteller_roll/dice_roll = new() + dice_roll.applicable_stats = applic_stats + dice_roll.difficulty = difficulty + dice_roll.numerical = numerical + return dice_roll.st_roll(roller, roller, bonus) + //Config datums for exploding dice /datum/config_entry/flag/on_crit_additional_success diff --git a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm index 4bf56f68f8b8..4c818b3164af 100644 --- a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm +++ b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm @@ -16,6 +16,15 @@ var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] return given_stat?.set_score(amount) +/// Changes a specific mob's stat from its stats list by the given amount. +/mob/living/proc/st_change_stat(stat_path, amount) + var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + if(amount > 0) + return given_stat?.increase_score(amount) + else + return given_stat?.decrease_score(amount) + + /mob/living/proc/st_add_stat_mod(stat_path, amount, source) var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] return given_stat?.add_stat_mod(amount, source) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm b/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm index ab37d3dcdc65..8d6c56621715 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/kindred/give_vitae.dm @@ -7,7 +7,7 @@ button_icon_state = "vitae" background_icon = 'modular_darkpack/master_files/icons/mob/actions/backgrounds.dmi' background_icon_state = "bg_discipline" - ranged_mousepointer = 'icons/effects/mouse_pointers/discipline.dmi' + ranged_mousepointer = 'modular_darkpack/modules/deprecated/icons/effects/mouse_pointers/discipline.dmi' cooldown_time = 10 SECONDS vampiric = TRUE diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm index b711203a495a..0bf0978c692f 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/make_ghoul.dm @@ -2,3 +2,6 @@ RETURN_TYPE(/datum/splat/vampire/ghoul) return add_splat(/datum/splat/vampire/ghoul, domitor) + +/mob/living/carbon/human/splat/ghoul + auto_splats = list(/datum/splat/vampire/ghoul) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm index 44421fb3e4b5..48ec91f48ce3 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/vampire_clan/caitiff] return make_kindred(sire_splat.generation + 1, childe_clan, FALSE, sire) + +/mob/living/carbon/human/splat/kindred + auto_splats = list(/datum/splat/vampire/kindred) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gauntlet.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gauntlet.dm new file mode 100644 index 000000000000..c66cae920103 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gauntlet.dm @@ -0,0 +1,6 @@ +/atom/proc/get_gauntlet_rating() + var/area/vtm/my_area = astype(get_area(src)) + if(my_area) + return my_area.gauntlet_rating + return 7 + diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm index 8dfddb0a207e..95fa3ecad84b 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm @@ -7,49 +7,64 @@ check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS + var/default_activate_message = TRUE - var/rage_req = 0 - var/gnosis_req = 0 + var/rage_cost = 0 + var/gnosis_cost = 0 /datum/action/cooldown/power/gift/IsAvailable(feedback) . = ..() - if(!ishuman(owner)) + var/datum/splat/werewolf/casting_splat = iswerewolfsplat(owner) + if(!casting_splat) if(feedback) - owner.balloon_alert(owner, "not human!") + owner.balloon_alert(owner, "not a gift user!") return FALSE +/datum/action/cooldown/power/gift/Activate(atom/target) + . = ..() + + if(default_activate_message) + to_chat(owner, span_notice("You activate the [name]...")) + +/datum/action/cooldown/power/gift/can_afford(feedback) + . = ..() var/datum/splat/werewolf/casting_splat = iswerewolfsplat(owner) if(get_rage_cost()) + if(!casting_splat) + return FALSE if(casting_splat.rage < get_rage_cost()) if(feedback) to_chat(owner, span_warning("You don't have enough RAGE to do that!")) SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_cast_failed.ogg', volume = 50)) return FALSE - if(gnosis_req) - if(casting_splat.gnosis < gnosis_req) + if(gnosis_cost) + if(!casting_splat) + return FALSE + if(casting_splat.gnosis < gnosis_cost) if(feedback) to_chat(owner, span_warning("You don't have enough GNOSIS to do that!")) SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_cast_failed.ogg', volume = 50)) return FALSE - -/datum/action/cooldown/power/gift/Activate(atom/target) +/datum/action/cooldown/power/gift/spend_resources() . = ..() - if(!ishuman(owner)) - return FALSE - var/datum/splat/werewolf/casting_splat = iswerewolfsplat(owner) - if(get_rage_cost()) - casting_splat.adjust_rage(-get_rage_cost(), owner, FALSE) + casting_splat?.adjust_rage(-get_rage_cost(), owner, FALSE) if(get_gnosis_cost()) - casting_splat.adjust_gnosis(-get_gnosis_cost(), owner, FALSE) - to_chat(owner, span_notice("You activate the [name]...")) + casting_splat?.adjust_gnosis(-get_gnosis_cost(), owner, FALSE) + /datum/action/cooldown/power/gift/proc/get_rage_cost() - return rage_req + return rage_cost /datum/action/cooldown/power/gift/proc/get_gnosis_cost() - return gnosis_req + return gnosis_cost + + +/atom/movable/screen/alert/status_effect/gift + icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi' + icon_state = "bg_gift" + overlay_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi' diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm index 5422173bfc98..72598ccee025 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ahroun.dm @@ -3,12 +3,12 @@ desc = "This Gift allows the Garou to send her foe sprawling with but a touch." button_icon_state = "falling_touch" click_to_activate = TRUE + rank = 1 /datum/action/cooldown/power/gift/falling_touch/set_click_ability(mob/on_who) . = ..() SEND_SOUND(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/falling_touch.ogg') - /datum/action/cooldown/power/gift/falling_touch/Activate(atom/target) if(!isliving(target)) return @@ -24,7 +24,7 @@ if(caster.combat_mode) victim.Knockdown(1 TURNS) victim.Immobilize(1 TURNS) - playsound(get_turf(caster), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/falling_touch_activate.ogg', 75, FALSE) // red-tailed hawk sound mixed with disintegrate.ogg + playsound(caster, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/falling_touch_activate.ogg', 75, FALSE) // red-tailed hawk sound mixed with disintegrate.ogg SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION) if(holding) victim.attackby(holding, caster) @@ -43,3 +43,81 @@ StartCooldown() return TRUE + + +/datum/action/cooldown/power/gift/inspiration + name = "Inspiration" + desc = "The Garou with this Gift lends new resolve and righteous anger to his brethren." + button_icon_state = "inspiration" + gnosis_cost = 1 + rank = 1 + +/datum/action/cooldown/power/gift/inspiration/Activate(atom/target) + . = ..() + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspiration.ogg', 75, FALSE) + owner.emote("scream") + for(var/mob/living/nearby_guy in oviewers(7, owner)) + nearby_guy.apply_status_effect(/datum/status_effect/inspiration) + +/datum/status_effect/inspiration + id = "inspiration" + duration = 1 SCENES + status_type = STATUS_EFFECT_REPLACE + alert_type = /atom/movable/screen/alert/status_effect/gift/inspiration + +/datum/status_effect/inspiration/on_apply() + . = ..() + if(isliving(owner)) + var/mob/living/living_owner = owner + living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, 1) + +/datum/status_effect/inspiration/on_remove() + if(isliving(owner)) + var/mob/living/living_owner = owner + // Ugh. We really dont have a way to represent or register the spending of a temporary temp willpoint.... + living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -1) + return ..() + +/atom/movable/screen/alert/status_effect/gift/inspiration + name = /datum/action/cooldown/power/gift/inspiration::name + desc = "You have an extra temporary willpower for one scene!" + overlay_state = /datum/action/cooldown/power/gift/inspiration::button_icon_state + + +/datum/action/cooldown/power/gift/razor_claws + name = "Razor Claws" + desc = "By raking his claws over stone, steel, or another hard surface, the Ahroun hones them to razor sharpness." + button_icon_state = "razor_claws" + rank = 1 + rage_cost = 1 + +/datum/action/cooldown/power/gift/razor_claws/Activate(atom/target) + to_chat(owner, span_notice("You feel your claws sharpening...")) + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/razor_claws.ogg', 75, FALSE) + if(!do_after(owner, 1 TURNS)) + return + . = ..() + var/mob/living/living_owner = astype(owner) + living_owner?.apply_status_effect(/datum/status_effect/razor_claws) + +// DARKPACK TODO - Requires https://github.com/DarkPack13/SecondCity/pull/680 for its stat handling. +/datum/status_effect/razor_claws + id = "razor_claws" + duration = 1 SCENES + status_type = STATUS_EFFECT_REPLACE + alert_type = /atom/movable/screen/alert/status_effect/gift/razor_claws + +/datum/status_effect/razor_claws/on_apply() + . = ..() + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/razor_claws.ogg', 75, FALSE) + ADD_TRAIT(owner, TRAIT_RAZOR_CLAWS, GIFT_TRAIT) + +/datum/status_effect/razor_claws/on_remove() + REMOVE_TRAIT(owner, TRAIT_RAZOR_CLAWS, GIFT_TRAIT) + to_chat(owner, span_warning("Your claws are not sharp anymore...")) + return ..() + +/atom/movable/screen/alert/status_effect/gift/razor_claws + name = /datum/action/cooldown/power/gift/razor_claws::name + desc = "Your claws do extra damage." + overlay_state = /datum/action/cooldown/power/gift/razor_claws::button_icon_state diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm index 7774c0b3e5e7..11797387513f 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm @@ -1,60 +1,46 @@ -/* /datum/action/cooldown/power/gift/beast_speech name = "Beast Speech" desc = "The werewolf with this Gift may communicate with any animals from fish to mammals." button_icon_state = "beast_speech" - rage_req = 1 - //gnosis_req = 1 + rank = 1 + rage_cost = 1 + //gnosis_cost = 1 +// Extreamly TTRPG innacurate. /datum/action/cooldown/power/gift/beast_speech/Activate(atom/target) . = ..() - if(allowed_to_proceed) - var/mob/living/carbon/C = owner - if(length(C.beastmaster) > 3) - var/mob/living/simple_animal/hostile/beastmaster/B = pick(C.beastmaster) - qdel(B) - playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/wolves.ogg', 75, FALSE) - if(!length(C.beastmaster)) - var/datum/action/beastmaster_stay/E1 = new() - E1.Grant(C) - var/datum/action/beastmaster_deaggro/E2 = new() - E2.Grant(C) - var/mob/living/simple_animal/hostile/beastmaster/D = new(get_turf(C)) - D.my_creator = C - C.beastmaster |= D - D.beastmaster = C -*/ -/* + var/mob/living/carbon/human/human_owner = astype(owner) + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wolves.ogg', 75, FALSE) + human_owner?.add_beastmaster_minion(/mob/living/basic/pet/dog/darkpack/summoned) + + /datum/action/cooldown/power/gift/call_of_the_wyld name = "Call Of The Wyld" desc = "The werewolf may send her howl far beyond the normal range of hearing and imbue it with great emotion, stirring the hearts of fellow Garou and chilling the bones of all others." button_icon_state = "call_of_the_wyld" - rage_req = 1 + rage_cost = 1 + rank = 1 /datum/action/cooldown/power/gift/call_of_the_wyld/Activate(atom/target) . = ..() - if(!ishuman(owner)) - return - var/mob/living/carbon/human/human_owner = owner - if(allowed_to_proceed) - var/mob/living/carbon/C = owner - C.emote("howl") - for(var/mob/living/carbon/A in orange(6, owner)) - if(isgarou(A) || iswerewolf(A)) - A.emote("howl") - spawn(1 SECONDS) - adjust_gnosis(1, A, TRUE) + owner.emote("howl") + for(var/mob/living/carbon/human/guy in orange(7, owner)) + var/datum/splat/werewolf/werewolf_splat = iswerewolfsplat(guy) + if(werewolf_splat) + guy.emote("howl") + werewolf_splat.adjust_gnosis(1) // awo1 -*/ + // Very inaccurate right now /datum/action/cooldown/power/gift/mindspeak name = "Mindspeak" desc = "By invoking the power of waking dreams, the Garou can place any chosen characters into silent communion." button_icon_state = "mindspeak" -// gnosis_req = 1 + rank = 1 +// gnosis_cost = 1 /datum/action/cooldown/power/gift/mindspeak/Activate(atom/target) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm index ceff6a58f470..0b785813a5fe 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/philodox.dm @@ -1,8 +1,48 @@ + +/datum/action/cooldown/power/gift/resist_pain + name = "Resist Pain" + desc = "Through force of will, the Philodox is able to ignore the pain of his wounds and continue acting normally." + button_icon_state = "resist_pain" + rank = 1 + willpower_cost = 1 + +/datum/action/cooldown/power/gift/resist_pain/Activate(atom/target) + . = ..() + var/mob/living/living_owner = astype(owner) + + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/resist_pain.ogg', 75, FALSE) + living_owner.apply_status_effect(/datum/status_effect/resist_pain) + +/datum/status_effect/resist_pain + id = "resist_pain" + duration = 1 SCENES + status_type = STATUS_EFFECT_REPLACE + alert_type = /atom/movable/screen/alert/status_effect/gift/resist_pain + +/datum/status_effect/resist_pain/on_apply() + . = ..() + + to_chat(owner, span_notice("You feel your skin thickening...")) + owner.add_traits(list(TRAIT_NOSOFTCRIT, TRAIT_ANALGESIA), GIFT_TRAIT) + +/datum/status_effect/resist_pain/on_remove() + owner.remove_traits(list(TRAIT_NOSOFTCRIT, TRAIT_ANALGESIA), GIFT_TRAIT) + to_chat(owner, span_warning("Your skin is thin again...")) + + return ..() + +/atom/movable/screen/alert/status_effect/gift/resist_pain + name = /datum/action/cooldown/power/gift/resist_pain::name + desc = /datum/action/cooldown/power/gift/resist_pain::desc + overlay_state = /datum/action/cooldown/power/gift/resist_pain::button_icon_state + + /datum/action/cooldown/power/gift/scent_of_the_true_form name = "Scent Of The True Form" desc = "This Gift allows the Garou to determine the true nature of a person." button_icon_state = "scent_of_the_true_form" click_to_activate = TRUE + rank = 1 var/static/list/wyld_descriptors = list( "ozone", "euphoria", @@ -63,7 +103,7 @@ secondary_descriptor = "[pick(wyrm_descriptors)]" to_chat(owner, span_purple("[victim] smells like kin[secondary_descriptor ? "...
...and of [secondary_descriptor]." : "."]")) else - var/successes = SSroll.storyteller_roll(caster.st_get_stat(STAT_PERCEPTION) + PRIMAL_URGE_PLACEHOLDER, 6, owner, numerical = TRUE) + var/successes = SSroll.storyteller_roll_stats(list(STAT_PERCEPTION), PRIMAL_URGE_PLACEHOLDER, 6, owner, numerical = TRUE) switch(successes) if(0) to_chat(owner, span_purple("You can't exactly tell what [victim] smells like.")) @@ -82,6 +122,8 @@ // to_chat(owner, span_purple("[victim] smells of brimstone.")) // if(ismummy(victim)) // to_chat(owner, span_purple("[victim] smells of [pick(wyld_descriptors)]")) + else + to_chat(owner, span_purple("[victim] smells mundane.")) if(4) if(iskindred(victim)) to_chat(owner, span_purple("[victim] smells of [pick(wyrm_descriptors)]")) @@ -99,8 +141,48 @@ // to_chat(owner, span_purple("[victim] smells of [pick(wyld_descriptors)]")) // if(ismage(victim)) // to_chat(owner, span_purple("[victim] smells of pure energy.")) + else + to_chat(owner, span_purple("[victim] smells mundane.")) caster.emote("sniff") StartCooldown() return TRUE + + +/datum/action/cooldown/power/gift/truth_of_gaia + name = "Truth Of Gaia" + desc = "As judges of the Litany, Philodox have the ability to sense whether others have spoken truth or falsehood." + button_icon_state = "truth_of_gaia" + click_to_activate = TRUE + rank = 1 + +/datum/action/cooldown/power/gift/truth_of_gaia/Activate(atom/target) + var/mob/living/living_target = astype(target) + if(!living_target) + return FALSE + + . = ..() + + var/datum/storyteller_roll/roll_datum = new() + roll_datum.applicable_stats = list(STAT_INTELLIGENCE, STAT_EMPATHY) + roll_datum.difficulty = living_target.st_get_stat(STAT_MANIPULATION) + living_target.st_get_stat(STAT_SUBTERFUGE) + var/roll_result = roll_datum.st_roll(owner) + + if(roll_result != ROLL_SUCCESS) + return + + SEND_SOUND(target, sound('sound/effects/magic/clockwork/invoke_general.ogg', volume = 50)) // LOOK OUT! A WEREWOLF IS SMELLING YOU! + + ASYNC + var/response_w = tgui_input_list(target, "Does your character believe your last statement is the truth?", name, list("Yes", "No", "Not sure")) + switch(response_w) + if("Yes") + to_chat(owner, span_notice("[target]'s scent bares the aroma of truthfulness.")) + if("No") // Lying! + to_chat(owner, span_notice("[target]'s scent bares the aroma of deceit.")) + else // Dunno + to_chat(owner, span_notice("[target]'s scent is uncertain. You can't determine the truth one way or the other.")) + + StartCooldown() + return TRUE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm index 5455734ebfa7..4881dc8a2595 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm @@ -1,27 +1,54 @@ -/* +// W20 p. 161 /datum/action/cooldown/power/gift/blur_of_the_milky_eye name = "Blur Of The Milky Eye" desc = "The Garou's form becomes a shimmering blur, allowing him to pass unnoticed among others." button_icon_state = "blur_of_the_milky_eye" - rage_req = 2 - //gnosis_req = 1 + cooldown_time = 1 SCENES + rank = 1 /datum/action/cooldown/power/gift/blur_of_the_milky_eye/Activate(atom/target) . = ..() - if(allowed_to_proceed) - var/mob/living/carbon/C = owner - C.alpha = 36 - playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/milky_blur.ogg', 75, FALSE) - spawn(20 SECONDS) - C.alpha = 255 -*/ + var/mob/living/living_owner = astype(owner) + + var/datum/storyteller_roll/roll_datum = new() + roll_datum.applicable_stats = list(STAT_MANIPULATION, STAT_STEALTH) + roll_datum.numerical = TRUE + roll_datum.difficulty = 8 + var/roll_result = roll_datum.st_roll(owner) + + if(roll_result > 0) + living_owner?.apply_status_effect(/datum/status_effect/blur_of_the_milky_eye) + +/datum/status_effect/blur_of_the_milky_eye + id = "blur_of_the_milky_eye" + duration = 1 SCENES + status_type = STATUS_EFFECT_REPLACE + alert_type = /atom/movable/screen/alert/status_effect/gift/blur_of_the_milky_eye + +/datum/status_effect/blur_of_the_milky_eye/on_apply() + . = ..() + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/milky_blur.ogg', 75, FALSE) + owner.alpha = 50 + apply_wibbly_filters(owner) + +/datum/status_effect/blur_of_the_milky_eye/on_remove() + owner.alpha = initial(owner.alpha) + remove_wibbly_filters(owner) + return ..() + +/atom/movable/screen/alert/status_effect/gift/blur_of_the_milky_eye + name = /datum/action/cooldown/power/gift/blur_of_the_milky_eye::name + desc = /datum/action/cooldown/power/gift/blur_of_the_milky_eye::desc + overlay_state = /datum/action/cooldown/power/gift/blur_of_the_milky_eye::button_icon_state + /datum/action/cooldown/power/gift/infectious_laughter name = "Infectious Laughter" desc = "When the Ragabash laughs, those around her are compelled to follow along, forgetting their grievances. Uses the last message you spoke for the ability" button_icon_state = "infectious_laughter" + rank = 1 // I dont acctually see anything in the book that is causes rage. - // rage_req = 1 + // rage_cost = 1 var/last_spoken_message var/when_spoken = 0 @@ -40,6 +67,7 @@ last_spoken_message = speech_args[SPEECH_MESSAGE] when_spoken = world.time + build_all_button_icons(UPDATE_BUTTON_STATUS) /datum/action/cooldown/power/gift/infectious_laughter/IsAvailable(feedback) . = ..() @@ -51,14 +79,11 @@ /datum/action/cooldown/power/gift/infectious_laughter/Activate(atom/target) . = ..() - if(!ishuman(owner)) - return if(!last_spoken_message || (when_spoken + 3 TURNS < world.time)) return - var/mob/living/carbon/human/human_owner = owner owner.emote("laugh") - playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/infectious_laughter.ogg', 50, FALSE) + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/infectious_laughter.ogg', 50, FALSE) var/list/hearers = oviewers(DEFAULT_MESSAGE_RANGE, owner) var/highest_diff = 0 for(var/mob/living/dice_guy in hearers) @@ -66,7 +91,10 @@ if(!rage_haver) continue highest_diff = max(highest_diff, rage_haver.rage) - var/roll = SSroll.storyteller_roll(human_owner.st_get_stat(STAT_MANIPULATION) + human_owner.st_get_stat(STAT_EMPATHY), highest_diff, owner) + var/datum/storyteller_roll/roll_datum = new() + roll_datum.applicable_stats = list(STAT_MANIPULATION, STAT_EMPATHY) + roll_datum.difficulty = highest_diff + var/roll = roll_datum.st_roll(owner) if(roll == ROLL_SUCCESS) for(var/mob/living/hearer in hearers) to_chat(hearer, span_hypnophrase("The message bounces around in your head, \"[last_spoken_message]\". You struggle to recall why you might have been mad.")) @@ -75,21 +103,27 @@ last_spoken_message = null when_spoken = 0 - // laughers.emote("laugh") -/* + /datum/action/cooldown/power/gift/open_seal name = "Open Seal" desc = "With this Gift, the Garou can open nearly any sort of closed or locked physical device." button_icon_state = "open_seal" -// gnosis_req = 1 + click_to_activate = TRUE + rank = 1 + gnosis_cost = 1 /datum/action/cooldown/power/gift/open_seal/Activate(atom/target) . = ..() - if(allowed_to_proceed) - for(var/obj/structure/vampdoor/V in range(5, owner)) - if(V.closed) - if(V.lockpick_difficulty < 10) - V.open_door(owner, TRUE) -*/ + + var/datum/splat/werewolf/our_splat = iswerewolfsplat(owner) + + var/roll_result = SSroll.storyteller_roll(our_splat.permanent_gnosis, target.get_gauntlet_rating(), owner) + if(roll_result == ROLL_SUCCESS) + var/turf/target_turf = get_turf(target) + SEND_SIGNAL(target_turf, COMSIG_ATOM_MAGICALLY_UNLOCKED, src, owner) + playsound(owner, 'sound/effects/magic/knock.ogg', 50, FALSE) + + StartCooldown() + return TRUE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm index eb26fdefe41c..2b4c9e214ef8 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm @@ -14,10 +14,10 @@ the scar is received and an extra Gnosis point is spent. desc = "The Garou is able to heal the wounds of any living creature, aggravated or otherwise, simply by laying hands over the afflicted area." button_icon_state = "mothers_touch" click_to_activate = TRUE + rank = 1 - //rage_req = 1 - gnosis_req = 1 - + //rage_cost = 1 + gnosis_cost = 1 /datum/action/cooldown/power/gift/mothers_touch/Activate(atom/target) if(!isliving(target)) @@ -27,10 +27,9 @@ the scar is received and an extra Gnosis point is spent. . = ..() - var/mob/living/living_owner = owner var/datum/splat/werewolf/werewolf_splat = iswerewolfsplat(owner) var/difficulty = werewolf_splat.uses_rage ? werewolf_splat.rage : 5 - var/successes = SSroll.storyteller_roll(living_owner.st_get_stat(STAT_INTELLIGENCE) + living_owner.st_get_stat(STAT_EMPATHY), difficulty, owner, TRUE) + var/successes = SSroll.storyteller_roll_stats(list(STAT_INTELLIGENCE, STAT_EMPATHY), 0, difficulty, owner, TRUE) var/mob/living/living_target = target living_target.heal_storyteller_health(successes, TRUE, TRUE, TRUE) @@ -38,3 +37,96 @@ the scar is received and an extra Gnosis point is spent. SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION) StartCooldown() return TRUE + +/datum/action/cooldown/power/gift/sense_wyrm + name = "Sense Wyrm" + desc = "This Gift allows the werewolf to trace the location of all wyrm-tainted entities within the area." + button_icon_state = "sense_wyrm" + rank = 1 + var/list/navigation_images = list() + +/datum/action/cooldown/power/gift/sense_wyrm/Activate(atom/target) + . = ..() + cut_navigation() + + var/lowest_difficulty = 0 + var/list/wyrm_targets_in_range = list() + for(var/mob/living/target_guy in orange(owner, 30)) + var/difficulty = get_sense_difficulty(target_guy) + if(difficulty) + if(!lowest_difficulty || (difficulty < lowest_difficulty)) + lowest_difficulty = difficulty + wyrm_targets_in_range[target_guy] = difficulty + + if(!lowest_difficulty) + return + + var/datum/storyteller_roll/roll_datum = new() + roll_datum.applicable_stats = list(STAT_PERCEPTION, STAT_OCCULT) + roll_datum.difficulty = lowest_difficulty + var/roll_result = roll_datum.st_roll(owner) + + if(roll_result != ROLL_SUCCESS) + return + + for(var/mob/living/target_guy, difficulty in wyrm_targets_in_range) + var/list/path = get_path_to(owner, target_guy, 50, access = owner.get_access(), skip_first = FALSE) + for(var/i in 1 to length(path)) + var/turf/current_turf = path[i] + var/image/path_image = image(icon = 'icons/effects/effects.dmi', icon_state = "smoke", layer = HIGH_PIPE_LAYER, loc = current_turf) + SET_PLANE(path_image, GAME_PLANE, current_turf) + if(i == length(path)) + path_image.color = COLOR_PURPLE_GRAY + else + path_image.color = COLOR_PALE_PURPLE_GRAY + path_image.alpha = rand(5, path_image.alpha/2) + owner.client?.images += path_image + navigation_images += path_image + + RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(cut_navigation)) + +/datum/action/cooldown/power/gift/sense_wyrm/proc/cut_navigation() + SIGNAL_HANDLER + for(var/image/navigation_path in navigation_images) + owner.client?.images -= navigation_path + navigation_images.Cut() + UnregisterSignal(owner, COMSIG_LIVING_DEATH) + +/datum/action/cooldown/power/gift/sense_wyrm/proc/get_sense_difficulty(mob/living/target) + // To be used for stuff like banes. + if(HAS_TRAIT(target, TRAIT_WYRMTAINTED)) + . = 6 + + if(HAS_TRAIT(target, TRAIT_WYRMTAINTED_SPRITE)) + . = 5 + + var/datum/splat/vampire/kindred/kindred_splat = iskindred(target) + if(kindred_splat) + if(!kindred_splat.enlightenment) + . = 6 + else if(target.st_get_stat(STAT_MORALITY) <= 7) + . = 6 + +/datum/action/cooldown/power/gift/spirit_speech + name = "Spirit Speech" + desc = "This Gift allows the Garou to communicate with encountered spirits." + button_icon_state = "spirit_speech" + rank = 1 + +/datum/action/cooldown/power/gift/spirit_speech/Grant(mob/granted_to) + . = ..() + ADD_TRAIT(granted_to, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT) + +/datum/action/cooldown/power/gift/spirit_speech/Activate(atom/target) + . = ..() + + if(HAS_TRAIT_FROM(owner, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT)) + REMOVE_TRAIT(owner, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT) + to_chat(owner, span_notice("You deactivate [name].")) + else + ADD_TRAIT(owner, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT) + to_chat(owner, span_notice("You activate [name].")) + +/datum/action/cooldown/power/gift/spirit_speech/Remove(mob/removed_from) + . = ..() + REMOVE_TRAIT(removed_from, TRAIT_LOCAL_SIXTHSENSE, GIFT_TRAIT) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm index 2432605cc06b..d495238fde35 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/innate/howling.dm @@ -2,7 +2,7 @@ name = "Howl" desc = "The werewolf may send her howl far beyond the normal range of hearing and communicate a single word or concept to all other Garou across the city." button_icon_state = "call_of_the_wyld" - rage_req = 1 + rage_cost = 1 check_flags = null innate_ability = TRUE var/static/list/howls = list( @@ -48,7 +48,7 @@ if(istype(get_area(owner), /area/vtm/interior/penumbra)) if(feedback) to_chat(owner, span_warning("Your howl echoes and dissipates into the Umbra, it's sound blanketed by the spiritual energy of the Velvet Shadow.")) - return + return FALSE /datum/action/cooldown/power/gift/howling/Activate(atom/target) . = ..() @@ -76,9 +76,9 @@ garou_message = replacetext(garou_message, "tribe", tribe) */ var/origin_turf = get_turf(living_mob) - ADD_TRAIT(living_mob, TRAIT_LOUD_HOWLER, type) + ADD_TRAIT(living_mob, TRAIT_LOUD_HOWLER, GIFT_TRAIT) living_mob.emote("howl") - REMOVE_TRAIT(living_mob, TRAIT_LOUD_HOWLER, type) + REMOVE_TRAIT(living_mob, TRAIT_LOUD_HOWLER, GIFT_TRAIT) var/howl_details var/final_message diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm index 4ecee4e784c0..c25f2f664c73 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm @@ -2,13 +2,13 @@ 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 + rage_cost = 2 + gnosis_cost = 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/ice_blocking.ogg', 100, FALSE) var/mob/living/carbon/C = owner if(isgarou(C)) var/obj/were_ice/W = new (get_turf(owner)) @@ -51,13 +51,13 @@ 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 + rage_cost = 1 + //gnosis_cost = 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/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) @@ -71,8 +71,8 @@ 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 + rage_cost = 2 + gnosis_cost = 1 /datum/action/cooldown/power/gift/bloody_feast/Trigger() . = ..() @@ -82,7 +82,7 @@ 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/bloody_feast.ogg', 50, FALSE) qdel(L) C.revive(full_heal = TRUE, admin_revive = TRUE) @@ -94,7 +94,7 @@ /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) + playsound(get_turf(owner), 'modular_darkpack/modules/powers/sounds/necromancy.ogg', 75, FALSE) for(var/mob/living/carbon/C in orange(5, owner)) if(prob(25)) C.vomit() @@ -105,13 +105,13 @@ name = "Venom Claws" desc = "While this ability is active, strikes with claws poison foes of garou." button_icon_state = "venom_claws" - rage_req = 1 + rage_cost = 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/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 @@ -123,7 +123,7 @@ 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/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 @@ -139,8 +139,8 @@ 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 + rage_cost = 2 + gnosis_cost = 1 /datum/action/cooldown/power/gift/burning_scars/Trigger() . = ..() @@ -158,7 +158,7 @@ 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 + //rage_cost = 1 somewhat useless gift with MMB pounce /datum/action/cooldown/power/gift/smooth_move/Trigger() . = ..() @@ -177,8 +177,8 @@ 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 + rage_cost = 2 + gnosis_cost = 1 /datum/action/cooldown/power/gift/digital_feelings/Trigger() . = ..() @@ -194,15 +194,15 @@ 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 + rage_cost = 2 + gnosis_cost = 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/electro_cast.ogg', 75, FALSE) var/mob/living/carbon/human/H = owner H.physiology.armor.melee = 25 H.physiology.armor.bullet = 45 @@ -213,7 +213,7 @@ 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) + playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/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...")) 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/splats/fera_species.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm index 384cfec4311f..7b04298e9690 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm @@ -86,7 +86,7 @@ var/mob_icon = get_mob_icon(human) var/main_iconstate = "" - if(HAS_TRAIT(human, TRAIT_WYRMTAINTED)) + if(HAS_TRAIT(human, TRAIT_WYRMTAINTED_SPRITE)) main_iconstate += "spiral" main_iconstate += fur_color if(human.body_position == LYING_DOWN) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm index 1b5e676b5e10..8cbcccf4e0d0 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm @@ -4,10 +4,14 @@ power_type = /datum/action/cooldown/power/gift + // Perm is for rolls + // Non-perm/ or temp is for expenditure var/uses_rage = FALSE + var/permanent_rage = 10 var/rage = 0 // without a merit kinfolk cannot use gnosis var/uses_gnosis = FALSE + var/permanent_gnosis = 10 var/gnosis = 0 var/list/renown = list() @@ -22,8 +26,8 @@ return FALSE if(amount > 0) - if(rage < MAX_RAGE) - rage = min(MAX_RAGE, rage+amount) + if(rage < permanent_rage) + rage = min(permanent_rage, rage+amount) if(sound) SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/rage_increase.ogg', volume = 50)) to_chat(owner, span_userdanger("RAGE INCREASES")) @@ -46,8 +50,8 @@ return FALSE if(amount > 0) - if(gnosis < MAX_GNOSIS) - gnosis = clamp(gnosis + amount, 0, MAX_GNOSIS) + if(gnosis < permanent_gnosis) + gnosis = clamp(gnosis + amount, 0, permanent_gnosis) if(sound) SEND_SOUND(owner, sound('modular_darkpack/modules/deprecated/sounds/humanity_gain.ogg', volume = 50)) to_chat(owner, span_boldnotice("GNOSIS INCREASES")) @@ -55,7 +59,7 @@ return FALSE if(amount < 0) if(gnosis > 0) - gnosis = clamp(gnosis + amount, 0, MAX_GNOSIS) + gnosis = clamp(gnosis + amount, 0, permanent_gnosis) if(sound) SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/rage_decrease.ogg', volume = 50)) to_chat(owner, span_boldnotice("GNOSIS DECREASES")) @@ -173,3 +177,10 @@ ) transform_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/corax_transform.ogg' */ + + +/mob/living/carbon/human/splat/kinfolk + auto_splats = list(/datum/splat/werewolf/kinfolk) + +/mob/living/carbon/human/splat/garou + auto_splats = list(/datum/splat/werewolf/shifter/garou) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm index c045c1e49215..e43fa49cdae7 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm @@ -7,7 +7,11 @@ name = AUSPICE_AHROUN desc = "The Ahroun is the archetype of the werewolf as murderous beast, though they range from unapologetic berserkers to hardened veterans tempering their Rage with discipline. Their high levels of Rage put them on the edge at all times - the Full Moon's blessing is a hair trigger, among other things. Those closer to the waxing moon tend to exult in the glory of the war, while those closer to the waning moon are more viciously pragmatic, ruthless in their bloodthirst. Every Ahroun is a dangerous individual to be around, but when the forces of the Wyrm attack, their packmates are glad to have a Full Moon warrior at the front of the charge." start_rage = 5 - gifts_provided= list(/datum/action/cooldown/power/gift/falling_touch)//, /datum/action/cooldown/power/gift/inspiration, /datum/action/cooldown/power/gift/razor_claws) + gifts_provided= list( + /datum/action/cooldown/power/gift/falling_touch, + /datum/action/cooldown/power/gift/inspiration, + /datum/action/cooldown/power/gift/razor_claws, + ) moons_born_under = list(MOON_FULL) /datum/subsplat/werewolf/auspice/garou/ahroun/rank_requirments(list/renown) @@ -32,8 +36,8 @@ desc = "Where the Philodox is stoic, the Galliard is a creature of unbridled passion. The Gibbous Moon is a fiery muse, and stirs its children into great heights and depths of emotion. While all Galliards are prone to immense mirth and immense melancholy, those born under a waning moon fall more readily into dark, consuming passions; they are the tragedians of the Garou, mastering tales of doom, ruin, sacrifice and loss. Conversely, their waxing-moon cousins sing of triumph and conquest, of the pounding heart and the love of life. They tend to be the soul of their pack's morale - when the Galliard is willing to go on, so too are all the others." start_rage = 4 gifts_provided = list( - // /datum/action/cooldown/power/gift/beast_speech, - // /datum/action/cooldown/power/gift/call_of_the_wyld, + /datum/action/cooldown/power/gift/beast_speech, + /datum/action/cooldown/power/gift/call_of_the_wyld, /datum/action/cooldown/power/gift/mindspeak ) moons_born_under = list(MOON_WAXING_GIBBOUS, MOON_WANING_GIBBOUS) @@ -59,7 +63,11 @@ name = AUSPICE_PHILODOX desc = "Buried so heavily in his role as impartial judge and jury, the Philodox may seem aloof, even surprisingly cold-blooded for a werewolf. Those born under the waxing Half Moon may seem unusually serene and disaffected, their emotions only emerging when their Rage comes to a boil. The waning-moon Philodox is more incisive and judgmental, his all-seeing eye always carefully watching his packmates and colleagues for any departure from the expected. The Half Moons' opinions are somewhat feared, yet highly respected - a word of praise or condemnation means much coming from those born to see both sides of every struggle." start_rage = 3 - gifts_provided= list(/datum/action/cooldown/power/gift/scent_of_the_true_form)//,/datum/action/cooldown/power/gift/resist_pain, /datum/action/cooldown/power/gift/truth_of_gaia) + gifts_provided= list( + /datum/action/cooldown/power/gift/resist_pain, + /datum/action/cooldown/power/gift/scent_of_the_true_form, + /datum/action/cooldown/power/gift/truth_of_gaia, + ) moons_born_under = list(MOON_FIRST_QUARTER, MOON_LAST_QUARTER) /datum/subsplat/werewolf/auspice/garou/philodox/rank_requirments(list/renown) @@ -86,8 +94,8 @@ start_rage = 2 gifts_provided = list( /datum/action/cooldown/power/gift/mothers_touch, - // /datum/action/cooldown/power/gift/sense_wyrm, - // /datum/action/cooldown/power/gift/spirit_speech + /datum/action/cooldown/power/gift/sense_wyrm, + /datum/action/cooldown/power/gift/spirit_speech ) moons_born_under = list(MOON_WANING_CRESCENT, MOON_WAXING_CRESENT) @@ -114,9 +122,9 @@ desc = "The Ragabash born under the waxing new moon is usually light-hearted and capricious, while one born under the waning new moon has a slightly more wicked and ruthless streak. It's a rare Ragabash indeed that lacks a keen wit and the capacity to find some humor in any situation, no matter how bleak. Many other werewolves are slow to take the Ragabash seriously, though, as it's difficult to tell the difference between a New Moon's mockery that points out a grievous flaw in a plan and similar mockery that simply amuses him. Sometimes a Ragabash points out that the emperor has no clothes - but sometimes they're the first to cry wolf, so to speak." start_rage = 1 gifts_provided= list( - // /datum/action/cooldown/power/gift/blur_of_the_milky_eye, - /datum/action/cooldown/power/gift/infectious_laughter - // /datum/action/cooldown/power/gift/open_seal, + /datum/action/cooldown/power/gift/blur_of_the_milky_eye, + /datum/action/cooldown/power/gift/infectious_laughter, + /datum/action/cooldown/power/gift/open_seal, ) moons_born_under = list(MOON_NEW) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/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/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 2c9465302ad7..55fd1522a9d3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7522,6 +7522,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" @@ -7668,6 +7669,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"