mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-06-07 21:23:31 +02:00
Added spell proficiencies and an example warlock character sheet.
This commit is contained in:
@@ -107,7 +107,14 @@ class Character():
|
||||
self.race = MyRace()
|
||||
elif attr == 'spells':
|
||||
# Create a list of actual spell objects
|
||||
self.spells = tuple(findattr(spells, spell_name)() for spell_name in val)
|
||||
_spells = []
|
||||
for spell_name in val:
|
||||
try:
|
||||
_spells.append(findattr(spells, spell_name)())
|
||||
except AttributeError:
|
||||
msg = f'Spell "{spell_name}" not defined. Please add it to ``spells.py``'
|
||||
raise AttributeError(msg)
|
||||
self.spells = tuple(_spells)
|
||||
elif attr == 'spells_prepared':
|
||||
# Create a list of actual spell objects
|
||||
self.spells_prepared = tuple(findattr(spells, spell_name)
|
||||
|
||||
@@ -88,14 +88,29 @@ def create_spells_pdf(character, basename, flatten=False):
|
||||
8: (10101, 10100, 10102, 10103, 10104, 10105, 10106, ),
|
||||
9: (10108, 10107, 10109, 101010, 101011, 101012, 101013),
|
||||
}
|
||||
prep_numbers = {
|
||||
1: (251, 309, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, ),
|
||||
2: (313, 310, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, ),
|
||||
3: (315, 314, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, ),
|
||||
4: (317, 316, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, ),
|
||||
5: (319, 318, 3053, 3054, 3055, 3056, 3057, 3058, 3059, ),
|
||||
6: (321, 320, 3060, 3061, 3062, 3063, 3064, 3065, 3066, ),
|
||||
7: (323, 322, 3067, 3068, 3069, 3070, 3071, 3072, 3073, ),
|
||||
8: (325, 324, 3074, 3075, 3076, 3077, 3078, ),
|
||||
9: (327, 326, 3079, 3080, 3081, 3082, 3083, ),
|
||||
}
|
||||
for level in field_numbers.keys():
|
||||
spells = tuple(spl for spl in character.spells if spl.level == level)
|
||||
field_names = tuple(f'Spells {i}' for i in field_numbers[level])
|
||||
for spell, field in zip(spells, field_names):
|
||||
prep_names = tuple(f'Check Box {i}' for i in prep_numbers[level])
|
||||
for spell, field, chk_field in zip(spells, field_names, prep_names):
|
||||
fields.append((field, spell.name))
|
||||
is_prepared = any([isinstance(spell, Spl) for Spl in character.spells_prepared])
|
||||
fields.append((chk_field, is_prepared))
|
||||
# # Uncomment to post field names instead:
|
||||
# for field in field_names:
|
||||
# fields.append((field, field))
|
||||
fields.append(('Check Box 3083', True))
|
||||
# Make the actual pdf
|
||||
dirname = os.path.dirname(os.path.abspath(__file__))
|
||||
src_pdf = os.path.join(dirname, 'blank-spell-sheet-default.pdf')
|
||||
|
||||
+97
-18
@@ -1,6 +1,7 @@
|
||||
class Spell():
|
||||
"""A magical spell castable by a player character."""
|
||||
level = 0
|
||||
name = "Unknown spell"
|
||||
casting_time = "1 action"
|
||||
casting_range = "60 ft"
|
||||
components = ("V", "S")
|
||||
@@ -17,7 +18,7 @@ class Spell():
|
||||
|
||||
class AcidSplash(Spell):
|
||||
"""You hurl a bubble of acid. Choose one creature within range, or
|
||||
choose two crealures within range that are within 5 feet of each
|
||||
choose two creatures within range that are within 5 feet of each
|
||||
other. A target must succeed on a Dexterity saving throw or take
|
||||
1d6 acid damage.
|
||||
|
||||
@@ -26,8 +27,9 @@ class AcidSplash(Spell):
|
||||
|
||||
"""
|
||||
name = "Acid Splash"
|
||||
classes = ('Sorceror', 'Wizard', )
|
||||
level = 0
|
||||
magic_school = "Conjuration"
|
||||
classes = ('Sorceror', 'Wizard', )
|
||||
|
||||
|
||||
class Aid(Spell):
|
||||
@@ -125,6 +127,7 @@ class AnimalFriendship(Spell):
|
||||
slot level above 1st.
|
||||
|
||||
"""
|
||||
name = "Animal Friendship"
|
||||
level = 1
|
||||
casting_time = "1 action"
|
||||
casting_range = "30 ft"
|
||||
@@ -564,6 +567,7 @@ class ArmsOfHadar(Spell):
|
||||
level above 1st.
|
||||
|
||||
"""
|
||||
name = "Arms of Hadar"
|
||||
level = 1
|
||||
casting_time = "1 action"
|
||||
casting_range = "Self (10-foot radius)"
|
||||
@@ -789,13 +793,14 @@ class BeaconOfHope(Spell):
|
||||
healing.
|
||||
|
||||
"""
|
||||
name = "Beacon of Hope"
|
||||
level = 3
|
||||
casting_time = "1 action"
|
||||
casting_range = "30 feet"
|
||||
components = ('V', 'S')
|
||||
materials = ""
|
||||
duration = "Concentration, up to 1 minute"
|
||||
magic_school = "Abjuration"
|
||||
classes = ()
|
||||
classes = ('Cleric', )
|
||||
|
||||
|
||||
class BladeBarrier(Spell):
|
||||
@@ -828,6 +833,7 @@ class BladeWard(Spell):
|
||||
attacks.
|
||||
|
||||
"""
|
||||
name = "Blade Ward"
|
||||
level = 0
|
||||
casting_time = "1 action"
|
||||
components = ('V', 'S')
|
||||
@@ -836,9 +842,7 @@ class BladeWard(Spell):
|
||||
classes = ('Bard', 'Sorceror', 'Warlock', 'Wizard')
|
||||
|
||||
|
||||
|
||||
class Bless(Spell):
|
||||
|
||||
"""You bless up to three creatures of your choice within
|
||||
range. Whenever a target makes an attack roll or a saving throw
|
||||
before the spell ends, the target can roll a d4 and add the number
|
||||
@@ -982,6 +986,7 @@ class ChillTouch(Spell):
|
||||
(2d8), 11th level (3d8), and 17th level (4d8).
|
||||
|
||||
"""
|
||||
name = "Chill Touch"
|
||||
level = 0
|
||||
casting_time = "1 action"
|
||||
casting_range = "120 feet"
|
||||
@@ -1137,6 +1142,7 @@ class DancingLights(Spell):
|
||||
the spell’s range.
|
||||
|
||||
"""
|
||||
name = "Dancing Lights"
|
||||
level = 0
|
||||
casting_time = "1 action"
|
||||
casting_range = "120 feet"
|
||||
@@ -1524,7 +1530,32 @@ class Earthquake(Spell):
|
||||
classes = ()
|
||||
|
||||
|
||||
class ElementalWeapon(Spell):
|
||||
"""A nonmagical weapon you touch becomes a magic weapon. Choose one of
|
||||
the following damage types: acid, cold, fire, lightning, or
|
||||
thunder. For the duration, the weapon has a +1 bonus to attack
|
||||
rolls and deals an extra 1d4 damage of the chosen type when it
|
||||
hits.
|
||||
|
||||
**At Higher Levels** When you cast this spell using a spell slot
|
||||
of 5th or 6th level, the bonus to attack rolls increases to +2 and
|
||||
the extra damage increases to 2d4. When you use a spell slot of
|
||||
7th level or higher, the bonus increases to +3 and the extra
|
||||
damage increases to 3d4.
|
||||
|
||||
"""
|
||||
name = 'Elemental Weapon'
|
||||
level = 3
|
||||
casting_time = "1 action"
|
||||
casting_range = "Touch"
|
||||
components = ('V', 'S')
|
||||
duration = "Concentration, up to 1 hour"
|
||||
magic_school = "Transmutation"
|
||||
classes = ('Paladin', )
|
||||
|
||||
|
||||
class Etherealness(Spell):
|
||||
|
||||
"""You step into the border regions of the Ethereal Plane, in the area
|
||||
where it overlaps with your current plane. You remain in the
|
||||
Border Ethereal for the duration or until you use your action to
|
||||
@@ -1722,26 +1753,33 @@ class FlamingSphere(Spell):
|
||||
your choice within range and lasts for the duration. Any creature
|
||||
that ends its turn within 5 feet of the sphere must make a
|
||||
Dexterity saving throw. The creature takes 2d6 fire damage on a
|
||||
failed save, or half as much damage on a successful one. As a
|
||||
bonus action, you can move the sphere up to 30 feet. If you ram
|
||||
the sphere into a creature, that creature must make the saving
|
||||
failed save, or half as much damage on a successful one.
|
||||
|
||||
As a bonus action, you can move the sphere up to 30 feet. If you
|
||||
ram the sphere into a creature, that creature must make the saving
|
||||
throw against the sphere’s damage, and the sphere stops moving
|
||||
this turn. When you move the sphere, you can direct it over
|
||||
barriers up to 5 feet tall and jump it across pits up to 10 feet
|
||||
wide. The sphere ignites flammable objects not being worn or
|
||||
carried, and it sheds bright light in a 20-foot radius and dim
|
||||
light for an additional 20 feet. At Higher Levels. When you cast
|
||||
this spell using a spell slot of 3rd level or higher, the damage
|
||||
increases by 1d6 for each slot level above 2nd.
|
||||
this turn.
|
||||
|
||||
When you move the sphere, you can direct it over barriers up to 5
|
||||
feet tall and jump it across pits up to 10 feet wide. The sphere
|
||||
ignites flammable objects not being worn or carried, and it sheds
|
||||
bright light in a 20-foot radius and dim light for an additional
|
||||
20 feet.
|
||||
|
||||
**At Higher Levels** When you cast this spell using a spell slot
|
||||
of 3rd level or higher, the damage increases by 1d6 for each slot
|
||||
level above 2nd.
|
||||
|
||||
"""
|
||||
name = "Flaming Sphere"
|
||||
level = 2
|
||||
casting_time = "1 action"
|
||||
casting_range = "60 feet"
|
||||
components = ('V', 'S', 'M')
|
||||
materials = "a bit of tallow, a pinch of brimstone, and a dusting of powdered iron"
|
||||
duration = "Concentration, up to 1 minute"
|
||||
magic_school = "Conjuration"
|
||||
classes = ()
|
||||
classes = ('Druid', 'Wizard', )
|
||||
|
||||
|
||||
class Fly(Spell):
|
||||
@@ -1762,6 +1800,46 @@ class Fly(Spell):
|
||||
classes = ()
|
||||
|
||||
|
||||
class FindSteed(Spell):
|
||||
"""You summon a spirit that assumes the form of an unusually
|
||||
intelligent, strong and loyal steed, creating a long lasting bond
|
||||
with it. Appearing in an unoccupied space within range, the steed
|
||||
takes on a form that you choose: a warhorse, a pony, a camel, an
|
||||
elk, or a mastiff. (Your DM might allow other animals to be
|
||||
summoned as steeds.) The steed has the statistics of the chosen
|
||||
form, though it is a celestial, fey or fiend (your choice) instead
|
||||
of its normal type. Additionally if your steed has an intelligence
|
||||
of 5 or less, its intelligence becomes 6, and it gains the ability
|
||||
to understand one language of your choice that you speak.
|
||||
|
||||
The steed serves as a mount, both in combat and out, and you have
|
||||
an instinctive bond with it that allows you to fight as a seamless
|
||||
unit. While mounted on your steed, you can make any spell you cast
|
||||
that targets only you also target your steed.
|
||||
|
||||
When the steed drops to 0 hit points, it disappears, leaving
|
||||
behind no physical form. You can dismiss your steed at any time as
|
||||
an action, causing it to disappear. In either case, casting this
|
||||
spell again summons the same steed, restored to its hit point
|
||||
maximum.
|
||||
|
||||
While the steed is within 1 mile of you, you can communicate with
|
||||
it telepathically.
|
||||
|
||||
You cannot have more than one steed bonded by this spell at a
|
||||
time. As an action, you can release the steed from its bond at any
|
||||
time, causing it to disappear.
|
||||
|
||||
"""
|
||||
name = "Find Steed"
|
||||
level = 2
|
||||
casting_time = "10 minutes"
|
||||
components = ('V', 'S')
|
||||
duration = "Instantaneous"
|
||||
magic_school = "Conjuration"
|
||||
classes = ('Paladin', )
|
||||
|
||||
|
||||
class Foresight(Spell):
|
||||
"""You touch a willing creature and bestow a limited ability to see
|
||||
into the immediate future. For the duration, the target can’t be
|
||||
@@ -1916,13 +1994,14 @@ class Guidance(Spell):
|
||||
the ability check. The spell then ends.
|
||||
|
||||
"""
|
||||
name = "Guidance"
|
||||
level = 0
|
||||
casting_time = "1 action"
|
||||
components = ('V', 'S')
|
||||
materials = ""
|
||||
duration = "Concentration, up to 1 minute"
|
||||
magic_school = "Divination"
|
||||
classes = ()
|
||||
classes = ('Cleric', 'Druid')
|
||||
|
||||
|
||||
class GuidingBolt(Spell):
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,61 @@
|
||||
name = 'Warlock'
|
||||
character_class = 'wizard'
|
||||
player_name = 'Mark'
|
||||
background = "Criminal"
|
||||
race = "Rock Gnome"
|
||||
level = 5
|
||||
alignment = "True neutral"
|
||||
xp = 2790 * 3
|
||||
hp_max = 28
|
||||
|
||||
# Ability Scores
|
||||
strength = 11
|
||||
dexterity = 14
|
||||
constitution = 10
|
||||
intelligence = 17
|
||||
wisdom = 11
|
||||
charisma = 8
|
||||
skill_proficiencies = [
|
||||
'deception',
|
||||
'investigation',
|
||||
'nature',
|
||||
'stealth',
|
||||
]
|
||||
|
||||
# Proficiencies and languages
|
||||
languages = "Common, gnomish."
|
||||
|
||||
# Inventory
|
||||
cp = 1792
|
||||
sp = 987
|
||||
ep = 44
|
||||
gp = 803
|
||||
pp = 3
|
||||
weapons = ('lance', 'net')
|
||||
equipment = (
|
||||
"""Gallon of ale, red cloak, shortsword, longsword, jar of salt, vodka
|
||||
(500mL), potion of vitality, wand of magic missiles (7/7),
|
||||
component pouch, spellbook, backpack, bottle of ink, ink pen, 10
|
||||
sheets of parchment, small knife, tome of historical lore, holy
|
||||
symbol, prayer book, set of common clothes, pouch.""")
|
||||
|
||||
# List of known spells
|
||||
spells = ('blade ward', 'guidance', 'mage hand', 'animal friendship',
|
||||
'arms of hadar', 'find steed', 'flaming sphere', 'beacon of hope',
|
||||
'elemental weapon')
|
||||
# Which spells have been prepared (not including cantrips)
|
||||
spells_prepared = ('blade ward', 'guidance', 'mage hand', 'animal friendship',
|
||||
'arms of hadar', 'find steed', 'flaming sphere', 'beacon of hope',
|
||||
'elemental weapon')
|
||||
|
||||
# Backstory
|
||||
personality_traits = """"""
|
||||
|
||||
ideals = """"""
|
||||
|
||||
bonds = """"""
|
||||
|
||||
flaws = """"""
|
||||
|
||||
features_and_traits = (
|
||||
"""""")
|
||||
Binary file not shown.
+1
-1
@@ -54,7 +54,7 @@ personality_traits = """I use polysyllabic words that convey the impression of
|
||||
erudition. Also, I’ve spent so long in the temple that I have little
|
||||
experience dealing with people on a casual basis."""
|
||||
|
||||
ideals = """Knowledge. The path to power and self- improvement is through
|
||||
ideals = """Knowledge. The path to power and self-improvement is through
|
||||
knowledge."""
|
||||
|
||||
bonds = """The tome I carry with me is the record of my life’s work so far,
|
||||
|
||||
Reference in New Issue
Block a user