mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-19 04:33:26 +02:00
165 lines
7.2 KiB
Python
165 lines
7.2 KiB
Python
from collections import defaultdict
|
|
|
|
from dungeonsheets import features, weapons
|
|
from dungeonsheets.classes.classes import CharClass, SubClass
|
|
|
|
|
|
# PHB
|
|
class DraconicBloodline(SubClass):
|
|
"""Your innate magic comes from draconic magic that was mingled with your
|
|
blood or that of your ancestors. Most often, sorcerers with this origin
|
|
trace their descent back to a mighty sorcerer of ancient times who made a
|
|
bargain with a dragon or who might even have claimed a dragon parent. Some
|
|
of these bloodlines are well established in the world, but most are
|
|
obscure. Any given sorcerer could be the first of a new bloodline, as a
|
|
result of a pact or some other exceptional circumstance.
|
|
|
|
"""
|
|
name = "Draconic Bloodline"
|
|
languages = ('draconic',)
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[1] = [features.DragonAncestor,
|
|
features.DraconicResilience]
|
|
features_by_level[6] = [features.ElementalAffinity]
|
|
features_by_level[14] = [features.DragonWings]
|
|
features_by_level[18] = [features.DraconicPresence]
|
|
|
|
|
|
class WildMagic(SubClass):
|
|
"""Your innate magic comes from the wild forces of chaos that underlie the
|
|
order of creation. You might have endured exposure to some form o f raw
|
|
magic, perhaps through a planar portal leading to Limbo, the Elemental
|
|
Planes, or the mysterious Far Realm. Perhaps you were blessed by a powerful
|
|
fey creature or marked by a demon. Or your magic could be a fluke of your
|
|
birth, with no apparent cause or reason. However it came to be, this
|
|
chaotic magic churns within you, waiting for any outlet.
|
|
|
|
"""
|
|
name = "Wild Magic"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[1] = [features.WildMagicSurge, features.TidesOfChaos]
|
|
features_by_level[6] = [features.BendLuck]
|
|
features_by_level[14] = [features.ControlledChaos]
|
|
features_by_level[18] = [features.SpellBombardment]
|
|
|
|
|
|
# XGTE
|
|
class DivineSoul(SubClass):
|
|
"""Sometimes the spark of magic that fuels a sorcerer comes from a divine
|
|
source that glimmers within the soul. Having such a blessed soul is a sign
|
|
that your innate magic might come from a distant but powerful familial
|
|
connection to a divine being. Perhaps your ances- tor was an angel,
|
|
transformed into a mortal and sent to fight in a god's name. Or your birth
|
|
might align with an ancient prophecy, marking you as a servant of the gods
|
|
or a chosen vessel of divine magic.
|
|
|
|
A Divine Soul, with a natural magnetism, is seen as a threat by some
|
|
religious hierarchies. As an outsider who commands sacred power, a Divine
|
|
Soul can undermine an existing order by claiming a direct tie to the
|
|
divine.
|
|
|
|
In some cultures, only those who can claim the power of a Divine Soul may
|
|
command religious power. In these lands, ecclesiastical positions are
|
|
dominated by a few bloodlines and preserved over generations
|
|
|
|
"""
|
|
name = "Divine Soul"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[1] = [features.DivineMagic, features.FavoredByTheGods]
|
|
features_by_level[6] = [features.EmpoweredHealing]
|
|
features_by_level[14] = [features.OtherworldlyWings]
|
|
features_by_level[18] = [features.UnearthlyRecovery]
|
|
|
|
|
|
class ShadowMagic(SubClass):
|
|
"""You are a creature of shadow, for your innate magic comes from the
|
|
Shadowfell itself. You might trace your lineage to an entity from that
|
|
place, or perhaps you were exposed to its fell energy and transformed by
|
|
it.
|
|
|
|
The power of shadow magic casts a strange pall over your physical
|
|
presence. The spark of life that sustains you is muffled, as if it
|
|
struggles to remain viable against the dark energy that imbues your
|
|
soul. At your option, you can pick from or roll on the Shadow Sorcerer
|
|
Quirks table to create a quirk for your character
|
|
|
|
"""
|
|
name = "Shadow Magic"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[1] = [features.EyesOfTheDark,
|
|
features.SuperiorDarkvision,
|
|
features.StrengthOfTheGrave]
|
|
features_by_level[6] = [features.HoundOfIllOmen]
|
|
features_by_level[14] = [features.ShadowWalk]
|
|
features_by_level[18] = [features.UmbralForm]
|
|
|
|
|
|
class StormSorcery(SubClass):
|
|
"""Your innate magic comes from the power of elemental air. Many with this
|
|
power can trace their magic back to a near-death experience caused by the
|
|
Great Rain, but perhaps you were born during a howling gale so powerful
|
|
that folk still tell stories of it, or your lineage might include the
|
|
influence of potent air creatures such as djinn. Whatever the case, the
|
|
magic of the storm permeates your being.
|
|
|
|
Storm sorcerers are invaluable members of a ship's crew. Their magic allows
|
|
them to exert control over wind and weather in their immediate area. Their
|
|
abilities also prove useful in repelling attacks by sahuagin, pirates,
|
|
and other waterborne threats.
|
|
|
|
"""
|
|
name = "Storm Sorcery"
|
|
languages = ("primordial",)
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[1] = [features.TempestuousMagic]
|
|
features_by_level[6] = [features.HeartOfTheStorm, features.StormGuide]
|
|
features_by_level[14] = [features.StormsFury]
|
|
features_by_level[18] = [features.WindSoul]
|
|
|
|
|
|
class Sorceror(CharClass):
|
|
name = 'Sorceror'
|
|
hit_dice_faces = 6
|
|
subclass_select_level = 1
|
|
saving_throw_proficiencies = ('constitution', 'charisma')
|
|
primary_abilities = ('charisma',)
|
|
_proficiencies_text = ('daggers', 'darts', 'slings',
|
|
'quarterstaffs', 'light crossbows')
|
|
weapon_proficiencies = (weapons.Dagger, weapons.Dart,
|
|
weapons.Sling, weapons.Quarterstaff,
|
|
weapons.LightCrossbow)
|
|
multiclass_weapon_proficiencies = ()
|
|
_multiclass_proficiencies_text = ()
|
|
class_skill_choices = ('Arcana', 'Deception', 'Insight',
|
|
'Intimidation', 'Persuasion', 'Religion')
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[2] = [features.FontOfMagic]
|
|
features_by_level[3] = [features.Metamagic]
|
|
features_by_level[20] = [features.SorcerousRestoration]
|
|
subclasses_available = (DraconicBloodline, WildMagic, DivineSoul,
|
|
ShadowMagic, StormSorcery)
|
|
spellcasting_ability = 'charisma'
|
|
spell_slots_by_level = {
|
|
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
|
|
1: (4, 2, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
2: (4, 3, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
3: (4, 4, 2, 0, 0, 0, 0, 0, 0, 0),
|
|
4: (5, 4, 3, 0, 0, 0, 0, 0, 0, 0),
|
|
5: (5, 4, 3, 2, 0, 0, 0, 0, 0, 0),
|
|
6: (5, 4, 3, 3, 0, 0, 0, 0, 0, 0),
|
|
7: (5, 4, 3, 3, 1, 0, 0, 0, 0, 0),
|
|
8: (5, 4, 3, 3, 2, 0, 0, 0, 0, 0),
|
|
9: (5, 4, 3, 3, 3, 1, 0, 0, 0, 0),
|
|
10: (6, 4, 3, 3, 3, 2, 0, 0, 0, 0),
|
|
11: (6, 4, 3, 3, 3, 2, 1, 0, 0, 0),
|
|
12: (6, 4, 3, 3, 3, 2, 1, 0, 0, 0),
|
|
13: (6, 4, 3, 3, 3, 2, 1, 1, 0, 0),
|
|
14: (6, 4, 3, 3, 3, 2, 1, 1, 0, 0),
|
|
15: (6, 4, 3, 3, 3, 2, 1, 1, 1, 0),
|
|
16: (6, 4, 3, 3, 3, 2, 1, 1, 1, 0),
|
|
17: (6, 4, 3, 3, 3, 2, 1, 1, 1, 1),
|
|
18: (6, 4, 3, 3, 3, 3, 1, 1, 1, 1),
|
|
19: (6, 4, 3, 3, 3, 3, 2, 1, 1, 1),
|
|
20: (6, 4, 3, 3, 3, 3, 2, 2, 1, 1),
|
|
}
|