add new druid subclass: circle of spores

This commit is contained in:
Robert Kubosz
2020-01-16 21:41:56 +01:00
parent df89508bea
commit dc690b5bf5
2 changed files with 155 additions and 21 deletions
+38 -11
View File
@@ -34,7 +34,7 @@ class MoonCircle(SubClass):
haunt the deepest parts of the wilderness, where they might go for weeks on
end before crossing paths with another humanoid creature, let alone another
druid.
Changeable as the moon, a druid of this circle might prowl as a great cat
one night, soar over the treetops as an eagle the next day, and crash
through the undergrowth in bear form to drive off a trespassing
@@ -99,6 +99,33 @@ class ShepherdCircle(SubClass):
features_by_level[14] = [features.FaithfulSummons]
#GGTR
class SporesCircle(SubClass):
"""Druids of the Circle of Spores find beauty in decay. They see within
mold and other fungi the ability to transform lifeless material into
abundant, ableit somewhat strange, life.
These druids believe that life and death are parts of a grand cycle, with
one leading to the other and then back again. Death isn't the end of life,
but instead a change of state that sees life shift into a new form.
Druids of this circle have a complex relationship with the undead. Unlike
most other druids, they see nothing inherently wrong with undeath, which
they consider to be a companion to life and death. But these druids believe
that the natural cycle is heathiest when each segment of it is vibrant and
changing. Undead that seek to replace all life with undeath, or that try to
avoid passing to a final rest, violate the cycle and must be thwarted.
"""
name = "Circle of Spores"
circle = "spores"
features_by_level = defaultdict(list)
features_by_level[2] = [features.CircleSpells, features.HaloOfSpores, features.SymbioticEntity]
features_by_level[6] = [features.FungalInfestation]
features_by_level[10] = [features.SpreadingSpores]
features_by_level[14] = [features.FungalBody]
class Druid(CharClass):
name = 'Druid'
_wild_shapes = ()
@@ -129,7 +156,7 @@ class Druid(CharClass):
features_by_level[18] = [features.TimelessBody, features.BeastSpells]
features_by_level[20] = [features.Archdruid]
subclasses_available = (LandCircle, MoonCircle, DreamsCircle,
ShepherdCircle)
ShepherdCircle, SporesCircle)
spellcasting_ability = 'wisdom'
spell_slots_by_level = {
1: (2, 2, 0, 0, 0, 0, 0, 0, 0, 0),
@@ -181,7 +208,7 @@ class Druid(CharClass):
def all_wild_shapes(self):
"""Return all wild shapes, regardless of validity."""
return self._wild_shapes
@property
def wild_shapes(self):
"""Return a list of valid wild shapes for this Druid."""
@@ -191,7 +218,7 @@ class Druid(CharClass):
if self.can_assume_shape(shape):
valid_shapes.append(shape)
return valid_shapes
@wild_shapes.setter
def wild_shapes(self, new_shapes):
actual_shapes = []
@@ -211,23 +238,23 @@ class Druid(CharClass):
actual_shapes.append(new_shape)
# Save the updated list for later
self._wild_shapes = actual_shapes
def can_assume_shape(self, shape: monsters.Monster)-> bool:
"""Determine if a given shape meets the requirements for transforming.
See Pg 66 of player's handbook.
Parameters
==========
shape
A monster that the Druid wishes to transform into.
Returns
=======
can_assume
True if the monster meets the C/R, swim and flying speed
restrictions.
"""
# Determine acceptable states based on druid level
if self.level < 2:
@@ -258,11 +285,11 @@ class Druid(CharClass):
valid_fly = (max_fly is None or shape.fly_speed <= max_fly)
can_assume = shape.is_beast and valid_cr and valid_swim and valid_fly
return can_assume
@property
def spells(self):
return tuple(S() for S in self.spells_prepared)
@spells.setter
def spells(self, val):
if len(val) > 0:
+117 -10
View File
@@ -13,7 +13,7 @@ class WildShape(Feature):
flying or swimming speed.
2nd Level: Max CR 1/4, No Flying/Swimming (ex: Wolf)
4th Level: Max CR 1/2, No Flying (ex: Crocodile)
8th Level: Max CR 1 (ex: Giant Eagle)
@@ -92,7 +92,7 @@ class BeastSpells(Feature):
name = "Beast Spells"
source = "Druid"
class Archdruid(Feature):
"""At 20th level, you can use your Wild Shape an unlimited number of times.
@@ -167,7 +167,7 @@ class _CircleSpells(Feature):
self.spells_known.extend(sps)
self.spells_prepared.extend(sps)
super().__init__(owner=owner)
class ArcticSpells(_CircleSpells):
"""Your mystical connection to the land infuses you with the ability to cast
@@ -281,6 +281,22 @@ class UnderdarkSpells(_CircleSpells):
9: [spells.Cloudkill, spells.InsectPlague]}
class SporesSpells(_CircleSpells):
"""Your symbiotic link do fungus and your ability to tap into the cycle of
life and death grants you access to certain spells.
These spells are included in your Spell Sheet.
"""
_name = 'Spores'
_spells = {2: [spells.ChillTouch],
3: [spells.Blindnessdeafness, spells.GentleRepose],
5: [spells.AnimateDead, spells.GaseousForm],
7: [spells.Blight, spells.Confusion],
9: [spells.Cloudkill, spells.Contagion]}
class CircleSpells(FeatureSelector, _CircleSpells):
"""
Select a land where you became a druid in feature_choices in your .py file:
@@ -300,7 +316,9 @@ class CircleSpells(FeatureSelector, _CircleSpells):
swamp
underdark
spores
"""
options = {'arctic': ArcticSpells,
'coast': CoastSpells,
@@ -309,9 +327,10 @@ class CircleSpells(FeatureSelector, _CircleSpells):
'grassland': GrasslandSpells,
'mountain': MountainSpells,
'swamp': SwampSpells,
'underdark': UnderdarkSpells}
'underdark': UnderdarkSpells,
'spores': SporesSpells}
name = "Circle Spells (Select One)"
source = "Druid (Circle of the Land)"
source = "Druid (Circle of the Land/Spores)"
class LandsStride(Feature):
@@ -439,7 +458,7 @@ class HearthOfMoonlightAndShadow(Feature):
you can invoke the shadowy power of the Gleaming Court to help guard your
respite. At the start of the rest, you touch a point in space, and an
invisible, 30-foot—radius sphere of magic appears, centered on that
point. Total cover blocks the sphere.
point. Total cover blocks the sphere.
While within the sphere, you and your allies gain a +5 bonus to Dexterity
(Stealth) and Wisdom (Perception) checks, and any light from open flames in
@@ -456,7 +475,7 @@ class HiddenPaths(Feature):
fey use to traverse space in the blink of an eye. As a bonus action on your
turn, you can teleport up to 60 feet to an unoccupied space you can
see.
Alternatively, you can use your action to teleport one willing creature you
touch up to 30 feet to an unoccupied space you can see. You can use this
feature a number of times equal to your Wisdom modifier (minimum of once),
@@ -466,7 +485,7 @@ class HiddenPaths(Feature):
name = "Hidden Paths"
source = "Druid (Circle of the Moon)"
class WalkerInDreams(Feature):
"""At 14th level, the magic of the Feywild grants you the ability to travel
mentally or physically through dreamlands. When you finish a short rest,
@@ -544,7 +563,7 @@ class MightySummoner(Feature):
"""Starting at 6th level, beasts and fey that you conjure are more resilient
than normal. Any beast or fey summoned or created by a spell that you cast
gains the. following benefits:
-- The creature appears with more hit points than normal: 2 extra hit
points per Hit Die it has.
@@ -585,3 +604,91 @@ class FaithfulSummons(Feature):
source = "Druid (Circle of the Shepherd)"
#Circle of Spores
class HaloOfSpores(Feature):
"""Starting at 2nd level, you are surrounded by invisible, necrotic spores
that are harmless until you unleash them on a creature nearby. When a
creature you can see moves into a space within 10 feet of you or starts its
turn there, you can use your reaction to deal 1d4 necrotic damage to that
creature unless it succeeds on a Constitution saving throw against your
spell save DC. The necrotic damage increases to 1d6 at 6th level, 1d8 at
10th level, and 1d10 at 14th level
"""
name = "Halo of Spores"
source = "Druid (Cirlce of Spores)"
class SymbioticEntity(Feature):
"""At 2nd level, you gain the ability to channel magic into your spores. As
an action, you can expend a use of your Wild Shape feature to awaken those
spores, rather than transforming into a beast form, and you gain 4
temporary hit points for each level you have in this class. While this
feature is active, you gain the following benefits:
-- When you deal your Halo of Spores damage, roll the damage die a second
time and add it to the total.
-- Your melee weapon attacks deal an extra 1d6 poison damage to any target
they hit.
These benefits last for 10 minutes, until you lose all these temporary hit
points, or until you use your Wild Shape again.
"""
name = "Symbiotic Entity"
source = "Druid (Circle of Spores)"
class FungalInfestation(Feature):
"""At 6th level, your spores gain the ability to infest a corpse and
animate it. If a beast or a humanoid that ist Small or Medium dies within
10 feet of you, you can use your reaction to animate it, causing it to
stand up immediately with 1 hit point. The creature uses the zombie stat
block in the _Monster Manual_. It remains animate for 1 hour, after which
time it collapses and dies.
In combat, the zombie's turn comes immediately after yours. It obeys your
mental commands, and the only action it can take is the Attack action,
making one melee attack.
You can use this feature a number of times equal to your Wisdom modifier
(minimum of once), and you regain all expended uses of it when you finish a
long rest.
"""
name = "Fungal Infestation"
source = "Druid (Circle of Spores)"
class SpreadingSpores(Feature):
"""At 10th level, you gain the ability to seed an area with deadly spores.
As a bonus action while your Symbiotic Entity feature is active, you can
hurl spores up to 30 feet away, where they swirl in a 10-foot cube for 1
minute. The spores disappear early if you use this feature again, if you
dismiss them as a bonus action, or if your Symbiotic Entity feature is no
longer active.
Whenever a creature moves into the cube or starts its turn there, that
creature takes your Halo of Spores damage, unless the creature succeeds on
a Constitution saving throw against your spell save DC. A creature can take
this damage nbo mre than once per turn.
While the cube of sproes persists, you can't use your Halo of Spores
reaction.
"""
name = "Spreading Spores"
source = "Druid (Circle of Spores)"
class FungalBody(Feature):
"""At 14th level, the fungal spores in your body alter you: you can't be
blinded, deafened, frightened, or poisoned, and any critical hit against
you counts as a normal hit instead, unless you're incapacitated.
"""
name = "Fungal Body"
source = "Druid (Circle of Spores)"