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 e85b890600ff..5eb76a3149ab 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/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/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..41cd66428a1c --- /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 = "breath_of_the_wyld" + 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 = get_werewolf_splat(caster) + var/roll_difficulty = get_werewolf_splat(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..9bf76494c4c9 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm @@ -0,0 +1,88 @@ +/* • 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 = "desperate_strength" + 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)) + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/desperate_strength_activate.ogg', 75, FALSE) + 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) + playsound(owner, 'sound/effects/magic/disintegrate.ogg', 50, FALSE) + 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..b969227fec19 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm @@ -0,0 +1,107 @@ +/* • 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. + * +*/ + +/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/Initialize(mapload) + . = ..() + register_context() + +/obj/effect/faerie_light/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + . = ..() + if(user == summoner) + context[SCREENTIP_CONTEXT_LMB] = "[orbit_target ? "Dismiss" : "Beckon"]" + else + context[SCREENTIP_CONTEXT_LMB] = "Dispel" + + context[SCREENTIP_CONTEXT_RMB] = "Dispel" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/effect/faerie_light/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(user != summoner) + to_chat(user, span_purple("You [ishuman(user) ? "wave your hand at" : "paw 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 [ishuman(user) ? "wave your hand at" : "paw 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 [ishuman(user) ? "wave your hand at" : "paw at"] [src], causing it to float over to you happily.")) + orbit(user, 20) + return TRUE + +/obj/effect/faerie_light/attack_hand_secondary(mob/living/user, list/modifiers) + . = ..() + to_chat(user, span_purple("You [ishuman(user) ? "wave your hand at" : "paw at"] [src], causing it to float away and disappear.")) // Don't have paws? Too bad. + animate(src, 1 SECONDS, alpha = 0) + QDEL_IN(src, 1.1 SECONDS) + 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) + + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/faerie_light_activate.ogg', 75, FALSE) + + StartCooldown() + return TRUE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm new file mode 100644 index 000000000000..bd41b466a050 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm @@ -0,0 +1,83 @@ +/* • Visage of Fenris - W20 p.180 + * + * The Get appears larger and more fearsome, commanding respect from peers + * and cowing his foes. A wolf or toad spirit teaches this Gift. + * + * Simple slowdown AOE. + * + * TODO: distinguish between friend and foe for the -1 social check thing + * + * TODO: less placeholder sound +*/ + +/datum/storyteller_roll/visage_of_fenris + bumper_text = "Visage of Fenris" + applicable_stats = list(STAT_CHARISMA, STAT_INTIMIDATION) + numerical = TRUE + roll_output_type = ROLL_PUBLIC + +/datum/movespeed_modifier/visage_of_fenris + multiplicative_slowdown = 0.75 + +/datum/action/cooldown/power/gift/visage_of_fenris + name = "Visage of Fenris" + desc = "Appear larger and more fearsome to your foes, rooting them to the spot in awe." + button_icon_state = "visage_of_fenris" + rank = 1 + cooldown_time = 1 SCENES + var/list/affected = list() + +/datum/action/cooldown/power/gift/visage_of_fenris/Activate(atom/target) + . = ..() + var/datum/splat/werewolf/our_splat = get_werewolf_splat(owner) + var/datum/splat/werewolf/guy_splat + var/datum/storyteller_roll/visage_of_fenris/roll_datum = new() + var/successes = roll_datum.st_roll(owner) + + var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(owner.loc, owner) + animate(D, alpha = 0, color = COLOR_RED, transform = matrix()*2, time = 3) + + playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/visage_of_fenris.ogg', 75, FALSE) + + for(var/mob/living/guy in viewers(world.view, owner)) + if(guy == owner) + continue + + var/difference = 0 + if(get_werewolf_splat(guy)) + guy_splat = get_werewolf_splat(guy) + if(guy_splat && (our_splat.renown_rank < guy_splat.renown_rank)) + difference = guy_splat.renown_rank-our_splat.renown_rank + if(successes && (successes >= difference*2)) + guy.apply_status_effect(/datum/status_effect/visage_of_fenris) + + StartCooldown() + return TRUE + +/datum/status_effect/visage_of_fenris + id = "visage_of_fenris" + duration = 6 TURNS // Nonstandard amount of time but 3 minutes of slowdown sucks. + + status_type = STATUS_EFFECT_REPLACE + + alert_type = /atom/movable/screen/alert/status_effect/visage_of_fenris + +/datum/status_effect/visage_of_fenris/on_apply() // TODO: make this a signal handler that turns the slowdown off when can't see the get for N seconds + owner.add_movespeed_modifier(/datum/movespeed_modifier/visage_of_fenris) + to_chat(owner, span_userdanger("You are consumed with terror, rooting you to the spot!")) + + if(prob(50)) + owner.emote("gasp") + else + owner.emote("scream") + + return TRUE + +/datum/status_effect/visage_of_fenris/on_remove() + owner.remove_movespeed_modifier(/datum/movespeed_modifier/visage_of_fenris) + +/atom/movable/screen/alert/status_effect/visage_of_fenris + name = "Visage of Fenris" + desc = "You are consumed with terror, rooting you to the spot!" + icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi' + icon_state = "fear" // TODO: get an icon for this 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 b63f6d3c0edd..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_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/gifts/ice_blocking.ogg', 100, FALSE) - var/mob/living/carbon/C = owner - if(get_garou_splat(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_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/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) - 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_cost = 2 - gnosis_cost = 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/gifts/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/powers/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_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/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 - 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/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 - 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_cost = 2 - gnosis_cost = 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_cost = 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_cost = 2 - gnosis_cost = 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_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/gifts/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/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...")) - 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/silver_damage.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/silver_damage.dm index 1ba31483be0f..24dc27e71fe0 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 = get_shifter_splat(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/subsplats/tribes/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm index f434d04a3478..3c364561c64c 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,95 @@ 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 // ) subsplat_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 + ) subsplat_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 + ) subsplat_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 // ) subsplat_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 + ) subsplat_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 + ) subsplat_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 - // ) + gifts_provided = list( + /datum/action/cooldown/power/gift/visage_of_fenris, + // /datum/action/cooldown/power/gift/stoic_pose, + // /datum/action/cooldown/power/gift/freezing_wind, + // /datum/action/cooldown/power/gift/bloody_feast + ) subsplat_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 + ) subsplat_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 // ) subsplat_keys = /obj/item/vamp/keys/nps @@ -97,9 +103,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 // ) subsplat_keys = /obj/item/vamp/keys/techstore @@ -107,18 +113,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 // ) subsplat_keys = /obj/item/vamp/keys/nps @@ -126,9 +132,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 // ) subsplat_keys = /obj/item/vamp/keys/nps @@ -136,19 +142,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 +162,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/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/werewolf_the_apocalypse/sounds/gifts/desperate_strength_activate.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/desperate_strength_activate.ogg new file mode 100644 index 000000000000..e57c914379a9 Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/desperate_strength_activate.ogg differ diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/faerie_light_activate.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/faerie_light_activate.ogg new file mode 100644 index 000000000000..8abac741114e Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/faerie_light_activate.ogg differ diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/visage_of_fenris.ogg b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/visage_of_fenris.ogg new file mode 100644 index 000000000000..8518d1511141 Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/visage_of_fenris.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 4eb831f486e7..c6821fb4c86a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7731,6 +7731,11 @@ #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\gifts\tribes\get_of_fenris.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"