Strike of the Giants
You have absorbed primeval magic that gives you an echo of the might of giants.
Choose one of the kinds of giants listed below. As a bonus action, you can call on the power of your giant magic to imbue your attacks with additional power. The next time you hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of your giant magic:
- Hill Giant. The target takes an extra 1d6 damage of the weapon's type. If the target is a creature, it must succeed on a Strength saving throw or be knocked prone.
- Stone Giant. The target takes an extra 1d6 force damage. If the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you in a straight line.
- Frost Giant. The target takes an extra 1d6 cold damage. If the target is a creature, it must succeed on a Constitution saving throw, or its speed is reduced to 0 until the start of your next turn.
- Fire Giant. The target takes an extra 1d8 fire damage.
- Cloud Giant. The target takes an extra 1d4 thunder damage. If the target is a creature, it must succeed on a Wisdom saving throw, or you become invisible to it until the start of your next turn.
- Storm Giant. The target takes an extra 1d6 lightning damage. If the target is a creature, it must succeed on a Constitution saving throw, or it has disadvantage on attack rolls until the start of your next turn.
The saving throw DC for these effects equals 8 + your proficiency bonus + your Strength or Constitution modifier.
You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.
name = 'Strike of the Giants'
description = "***Feat: Strike of the Giants.*** You have absorbed primeval magic that gives you an echo of the might of giants."
def prereq(npc): return True
def apply(npc):
giant = choose("Choose a type: ", ['Hill','Stone','Frost','Fire','Cloud','Storm'])
def applystrike(npc):
text = "You can call on the power of your giant magic to imbue your attacks with additional power. The next time you hit a target with a melee or thrown weapon attack within the next minute, "
bonus = npc.STRbonus() if npc.STRbonus() >= npc.CONbonus() else npc.CONbonus()
dc = 8 + npc.proficiencybonus() + bonus
if giant == 'Hill':
npc.bonusactions.append(f"***Hill Giant Strike ({npc.proficiencybonus()}/Recharges on long rest).*** {text} the target takes an extra 1d6 damage of the weapon's type. If the target is a creature, it must succeed on a Strength saving throw (DC {dc}) or be knocked prone.")
elif giant == 'Stone':
npc.bonusactions.append(f"***Stone Giant Strike ({npc.proficiencybonus()}/Recharges on long rest).*** {text} the target takes an extra 1d6 force damage. If the target is a creature, it must succeed on a Strength saving throw (DC {dc}) or be pushed 10 feet away from you in a straight line.")
elif giant == 'Frost':
npc.bonusactions.append(f"***Frost Giant Strike ({npc.proficiencybonus()}/Recharges on long rest).*** {text} the target takes an extra 1d6 cold damage. If the target is a creature, it must succeed on a Constitution saving throw (DC {dc}), or its speed is reduced to 0 until the start of your next turn.")
elif giant == 'Fire':
npc.bonusactions.append(f"***Fire Giant Strike ({npc.proficiencybonus()}/Recharges on long rest).*** {text} the target takes an extra 1d8 fire damage.")
elif giant == 'Cloud':
npc.bonusactions.append(f"***Cloud Giant Strike ({npc.proficiencybonus()}/Recharges on long rest).*** {text} the target takes an extra 1d4 thunder damage. If the target is a creature, it must succeed on a Wisdom saving throw (DC {dc}), or you become invisible to it until the start of your next turn.")
elif giant == 'Storm':
npc.bonusactions.append(f"***Storm Giant Strike ({npc.proficiencybonus()}/Recharges on long rest).*** {text} the target takes an extra 1d6 lightning damage. If the target is a creature, it must succeed on a Constitution saving throw (DC {dc}), or it has disadvantage on attack rolls until the start of your next turn.")
else:
error(f"WTF! {giant} -- Not a recognized giant type!")
npc.defer(lambda npc: applystrike(npc))