Merge branch 'master' of https://github.com/jeromkiller/dungeon-sheets into jeromkiller-master

This commit is contained in:
Mark Wolfman
2020-04-29 22:08:52 -05:00
7 changed files with 255 additions and 5 deletions
+25 -1
View File
@@ -311,6 +311,30 @@ class GraveDomain(ClericDomain):
features_by_level[8] = [features.PotentSpellcasting] features_by_level[8] = [features.PotentSpellcasting]
features_by_level[17] = [features.KeeperOfSouls] features_by_level[17] = [features.KeeperOfSouls]
class DeathDomain(ClericDomain):
"""The Death domain is concerned with the forces that cause death, as
well as the negative energy that gives rise to undead creatures.
Deities such as Chemosh, Myrkul, and Wee Jas are patrons of necromancers,
death knights, liches, mummy lords, and vampires. Gods of the Death
domain also embody murder (Anubis, Bhaal, and Pyremius), pain
(Iuz or Loviatar), disease or poison (Incabulos, Talona, or Morgion),
and the underworld (Hades and Hel)..
"""
name = "Death Domain"
_domain_spells = {1: [spells.FalseLife, spells.RayOfSickness],
3: [spells.BlindnessDeafness, spells.RayOfEnfeeblement],
5: [spells.AnimateDead, spells.VampiricTouch],
7: [spells.Blight, spells.DeathWard],
9: [spells.AntilifeShell, spells.Cloudkill]}
weapon_proficiencies = (weapons.MartialWeapon,)
_proficiencies_text = ('martial weapons',)
features_by_level = defaultdict(list)
features_by_level[1] = [features.Reaper]
features_by_level[2] = [features.TouchOfDeathCleric] #a different one though
features_by_level[6] = [features.InescapableDestruction]
features_by_level[8] = [features.DivineStrikeDeath]
features_by_level[17] = [features.ImprovedReaper]
class Cleric(CharClass): class Cleric(CharClass):
name = 'Cleric' name = 'Cleric'
@@ -332,7 +356,7 @@ class Cleric(CharClass):
subclasses_available = (KnowledgeDomain, LifeDomain, LightDomain, subclasses_available = (KnowledgeDomain, LifeDomain, LightDomain,
NatureDomain, TempestDomain, TrickeryDomain, NatureDomain, TempestDomain, TrickeryDomain,
WarDomain, ArcanaDomain, ForgeDomain, WarDomain, ArcanaDomain, ForgeDomain,
GraveDomain) GraveDomain, DeathDomain)
spellcasting_ability = 'wisdom' spellcasting_ability = 'wisdom'
spell_slots_by_level = { spell_slots_by_level = {
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...) # char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
+48
View File
@@ -779,3 +779,51 @@ class KeeperOfSouls(Feature):
name = "Keeper of Souls" name = "Keeper of Souls"
source = "Cleric (Grave Domain)" source = "Cleric (Grave Domain)"
class Reaper(Feature):
"""At 1st level, you learn one necromancy cantrip of your choice from any
spell list. When you cast a necromancy cantrip that normally targets only
one creature, the spell can instead target two creatures within range and
within 5 feet of each other.
"""
name = "Reaper"
source = "Cleric (Death Domain)"
class TouchOfDeathCleric(Feature):
"""Starting at 2nd level, you can use Channel Divinity to destroy another
creature's life force by touch. When you hit a creature with a melee
attack, you can use Channel Divinity to deal extra necrotic damage to
the target. The damage equals 5 + twice your cleric level.
"""
name = "Channel Divinity: Touch of Death"
source = "Cleric (Death Domain)"
class InescapableDestruction(Feature):
"""Starting at 6th level, your ability to channel negative energy becomes
more potent. Necrotic damage dealt by your cleric spells and Channel
Divinity options ignores resistance to necrotic damage
"""
name = "Inescapable Destruction"
source = "Cleric (Death Domain)"
class DivineStrikeDeath(DivineStrike):
"""At 8th level, you gain the ability to infuse your weapon strikes with
necrotic energy. Once on each of your turns when you hit a creature with
a weapon attack, you can cause the attack to deal an a 1d8 necrotic
damage to the target. When you reach 14th level, the extra damage
increases to 2d8.
"""
source = "Cleric (Death Domain)"
class ImprovedReaper(Feature):
"""Starting at 17th level, when you cast a necromancy spell of 1st through
5th level that targets only one creature, the spell can instead target two
creatures within range and within 5 feet of each other. If the spell
consumes its material components, you must provide them for each target.
"""
name = "Improved Reaper"
source = "Cleric (Death Domain)"
+112
View File
@@ -762,3 +762,115 @@ class SeveredFromDreams(Feature):
""" """
name = "Severed from Dreams" name = "Severed from Dreams"
source = "Race (Kalashtar)" source = "Race (Kalashtar)"
#monsterous races
#bugbear
class LongLimbed(Feature):
""" When you make a melee attack on your turn, your reach for it is 5 feet greater than normal.
"""
name = "Long-Limbed"
source = "Race (BugBear)"
class SupriseAttack(Feature):
""" If you surprise a creature and hit it with an attack on your first turn
in combat, the attack deals an extra 2d6 damage to it. You can use this trait
only once per combat.
"""
name = "Suprise Attack"
source = "Race (BugBear)"
#goblin
class FuryOfTheSmall(Feature):
"""When you damage a creature with an attack or a spell and the creature's size
is larger than yours, you can cause the attack or spell to deal extra damage to
the creature. The extra damage equals your level. Once you use this trait, you
can't use it again until you finish a short or long rest.
"""
name = "Fury of the Small"
source = "Race (Goblin)"
class NimbleEscape(Feature):
""" You can take the Disengage or Hide action as a bonus action on each of your turns.
"""
name = "Nimble Escape"
source = "Race (Goblin)"
#HobGoblin
class SavingFace(Feature):
"""Hobgoblins are careful not to show weakness in front of their allies, for fear
of losing status. If you miss with an attack roll or fail an ability check or a
saving throw, you can gain a bonus to the roll equal to the number of allies you
can see within 30 feet of you (maximum bonus of +5). Once you use this trait, you
can't use it again until you finish a short or long rest.
"""
name = "Saving Face"
source = "Race (HobGoblin)"
class MartialTraining(Feature): #you have to add the weapons of choice to your sheet
"""You are proficient with two martial weapons of your choice and with light armor.
"""
name = "Martial Training"
source = "Race (HobGoblin)"
#kobold
class GrovelCowerAndBeg(Feature):
""" As an action on your turn, you can cower pathetically to
distract nearby foes. Until the end of your next turn, your
allies gain advantage on attack rolls against enemies
within 10 feet of you that can see you. Once you use this
trait, you can't use it again until you finish a short
or long rest
"""
name = "Grovel Cower and Beg"
source = "Race (Kobold)"
class PackTactics(Feature):
"""You have advantage on an attack roll against a creature
if at least one of your allies is within 5 feet of the
creature and the ally isn't incapacitated.
"""
name = "Pack Tactics"
source = "Race (Kobold)"
class Aggressive(Feature):
""" As a bonus action, you can move up to your speed
toward an enemy of your choice that you can see or hear.
You must end this move closer to the enemy than you started.
"""
name = "Aggressive"
source = "Race (Orc)"
#yuan-ti pureblood
class InnateSpellcasting(Feature):
"""You know the poison spray cantrip. You can cast animal
friendship an unlimited number of times with this trait,
but you can target only snakes with it. Starting at 3rd level,
you can also cast suggestion with this trait. Once you cast it,
you can't do so again until you finish a long rest. Charisma is
your spellcasting ability for these spells.
"""
name = "Innate Spellcasting"
source = "Race (Yuan-Ti Pureblood)"
class MagicResistance(Feature):
""" You have advantage on saving throws against spells and other magical effects.
"""
name = "Magic Resistance"
source = "Race (Yuan_Ti Pureblood)"
class PoisonImmunity(Feature):
"""You are immune to poison damage and the poi~oned condition.
"""
name = "Poison Immunity"
source = "Race (Yuan_Ti Pureblood)"
+68 -2
View File
@@ -428,6 +428,70 @@ class Kalashtar(Race):
languages = ("Common", "Quori",) # Not sure how to have a "+1 language of your choice" - naviabbot languages = ("Common", "Quori",) # Not sure how to have a "+1 language of your choice" - naviabbot
features = (feats.DualMind, feats.MentalDiscipline, feats.MindLink, feats.SeveredFromDreams) features = (feats.DualMind, feats.MentalDiscipline, feats.MindLink, feats.SeveredFromDreams)
class BugBear(Race):
name = "BugBear"
strength_bonus = 2
dexterity_bonus = 1
size = 'medium'
speed = 30
features = (feats.Darkvision, feats.LongLimbed,
feats.PowerfulBuild, feats.SupriseAttack)
skill_proficiencies = ("stealth", )
languages = ("Common", "Goblin")
class Goblin(Race):
name = "Goblin"
dexterity_bonus = 2
constitution_bonus = 1
size = 'small'
speed = 30
features = (feats.Darkvision, feats.FuryOfTheSmall,
feats.NimbleEscape)
languages = ("Common", "Goblin")
class HobGoblin(Race):
name = "HobGoblin"
constitution_bonus = 2
intelligence_bonus = 1
size = 'medium'
speed = 30
features = (feats.Darkvision, feats.SavingFace)
proficiencies_text = ('light armor', '[Chose two martial melee weapons]')
languages = ("Common", "Goblin")
class Kobold(Race):
name = "Kobold"
dexterity_bonus = 2
strength_bonus = -2
size = 'small'
speed = 30
features = (feats.Darkvision, feats.PackTactics,
feats.GrovelCowerAndBeg, feats.SunlightSensitivity)
languages = ("Common", "Draconic")
class Orc(Race):
name = "Orc"
strength_bonus = 2
constitution_bonus = 1
intelligence_bonus = -2
size = 'medium'
speed = 30
skill_proficiencies = ('intimidation',)
features = (feats.Darkvision, feats.Aggressive,
feats.PowerfulBuild)
languages = ("Common", "Orc")
class PureBlood(Race):
name = "Yuan-Ti Pureblood"
charisma_bonus = 2
intelligence_bonus = 1
size = 'medium'
speed = 30
features = (feats.Darkvision, feats.InnateSpellcasting,
feats.MagicResistance, feats.PoisonImmunity)
spells_known = (spells.PoisonSpray,)
languages = ("Common", "Abyssal", "Draconic")
PHB_races = [HillDwarf, MountainDwarf, HighElf, WoodElf, DarkElf, PHB_races = [HillDwarf, MountainDwarf, HighElf, WoodElf, DarkElf,
LightfootHalfling, StoutHalfling, Rashemi, Dragonborn, LightfootHalfling, StoutHalfling, Rashemi, Dragonborn,
@@ -439,9 +503,11 @@ VOLO_races = [ProtectorAasimar, ScourgeAasimar, FallenAasimar,
EE_races = [Aarakocra, DeepGnome, AirGenasi, FireGenasi, EarthGenasi, EE_races = [Aarakocra, DeepGnome, AirGenasi, FireGenasi, EarthGenasi,
WaterGenasi] WaterGenasi]
MONSTER_races = [BugBear, Goblin, HobGoblin, Kobold, Orc, PureBlood]
RFTLW_races = [Kalashtar] RFTLW_races = [Kalashtar]
available_races = PHB_races + VOLO_races + EE_races + RFTLW_races available_races = PHB_races + VOLO_races + EE_races + MONSTER_races + RFTLW_races
__all__ = tuple([r.name for r in available_races]) + ( __all__ = tuple([r.name for r in available_races]) + (
'available_races', 'PHB_races', 'VOLO_races', 'EE_races, RFTLW_races') 'available_races', 'PHB_races', 'VOLO_races', 'EE_races', 'MONSTER_races', 'RFTLW_races')
Binary file not shown.
+1 -1
View File
@@ -16,7 +16,7 @@ player_name = "Ben"
# Be sure to list Primary class first # Be sure to list Primary class first
classes = ['Cleric'] # ex: ['Wizard'] or ['Rogue', 'Fighter'] classes = ['Cleric'] # ex: ['Wizard'] or ['Rogue', 'Fighter']
levels = [20] # ex: [10] or [3, 2] levels = [20] # ex: [10] or [3, 2]
subclasses = ["War Domain"] # ex: ['Necromacy'] or ['Thief', None] subclasses = ["Death Domain"] # ex: ['Necromacy'] or ['Thief', None]
background = "Gladiator" background = "Gladiator"
race = "Lightfoot Halfling" race = "Lightfoot Halfling"
alignment = "Chaotic good" alignment = "Chaotic good"
+1 -1
View File
@@ -43,4 +43,4 @@ setup(name='dungeonsheets',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Topic :: Games/Entertainment :: Role-Playing', 'Topic :: Games/Entertainment :: Role-Playing',
], ],
) )