mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-18 20:23:27 +02:00
Added tests for Companions and Weight features
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
"""This file defines some homebrew mechanics that can be imported into
|
||||
character sheets using ``dungeonsheets.import_homebrew``. See
|
||||
``homebrew.py`` for an example of how these homebrew mechanics can be
|
||||
used.
|
||||
|
||||
"""
|
||||
|
||||
from dungeonsheets import race
|
||||
from dungeonsheets import features as feats
|
||||
# from dungeonsheets import mecanics
|
||||
|
||||
class WildCompanion(feats.Feature):
|
||||
"""You gain the ability to summon a spirit that assumes an animal form:
|
||||
as an action, you can expend a use of your Wild Shape feature
|
||||
to cast the *find familiar* spell, without material components.
|
||||
|
||||
When you cast the spell in this way, the familiar
|
||||
is a fey instead of a beast, and the familiar disapears after
|
||||
a number of hours equal to half your druid level.
|
||||
"""
|
||||
|
||||
name = "Wild Companion"
|
||||
source = "Class (Druid)"
|
||||
|
||||
# shifters
|
||||
class Shifting(feats.Feature):
|
||||
"""As a bonus action, you can assume a more bestial appearence.
|
||||
This transformation lasts for 1 minute, until you die, or until
|
||||
you revert to your normal appearence as a bonus action. When you shift,
|
||||
you gain temporary hit points equal to your level + your Constitution
|
||||
modifier (minimum of 1 temporary hit point). You also gain additional
|
||||
benefits that depend on your shifter subrace. Once you shift,
|
||||
you can't to so again until you finish a short or long rest.
|
||||
"""
|
||||
|
||||
name = "Beasthide Shifting"
|
||||
source = "Race (Beasthide Shifter)"
|
||||
|
||||
class BeasthideShifting(feats.Feature):
|
||||
"""Whenever you shift, you gain 1d6 additional temporary hit points.
|
||||
While shifted, you have a +1 bonus to your Armor Class.
|
||||
|
||||
"""
|
||||
|
||||
name = "Beasthide Shifting (1x/SR)"
|
||||
source = "Race (Beasthide Shifter)"
|
||||
|
||||
class LongtoothShifting(feats.Feature):
|
||||
"""While shifted, you can use your elongated fangs to make an unarmed
|
||||
strike as a bonus action. If you hit with your fangs, you can deal
|
||||
piercing damage equal to 1d6 + your Strength modifier, instead
|
||||
of the bludgeoning damage normal for an unarmed attack.
|
||||
|
||||
"""
|
||||
|
||||
name = "Longtooth Shifting (1x/SR)"
|
||||
source = "Race (Longtooth Shifter)"
|
||||
|
||||
class SwiftstrideShifting(feats.Feature):
|
||||
"""While shifted, your walking speed increases by 10 feet. Additionally,
|
||||
you can move up to 10 feet as a reaction when a creature ends its turn
|
||||
within 5 feet of you. This reactive movement doesn't provoke
|
||||
opportunity attacks.
|
||||
|
||||
"""
|
||||
|
||||
name = "Swiftstride Shifting (1x/SR)"
|
||||
source = "Race (Swiftstride Shifter)"
|
||||
|
||||
class WildhuntShifting(feats.Feature):
|
||||
"""While shifted, you have advantage on Wisdom checks, and no creature
|
||||
within 30 feet of you can make an attack roll with advantage against you,
|
||||
unless you are incapacitated.
|
||||
|
||||
"""
|
||||
|
||||
name = "Wildhunt Shifting (1x/SR)"
|
||||
source = "Race (Beasthide Shifter)"
|
||||
|
||||
class NaturalAthlete(feats.Feature):
|
||||
"""You have proficiency in the Athletics skill.
|
||||
"""
|
||||
|
||||
name = "Natural Athlete"
|
||||
source = "Race (Beasthide Shifter)"
|
||||
|
||||
class Fierce(feats.Feature):
|
||||
"""You have proficiency in the Intimidation skill.
|
||||
"""
|
||||
|
||||
name = "Fierce"
|
||||
source = "Race (Longtooth Shifter)"
|
||||
|
||||
class Graceful(feats.Feature):
|
||||
"""You have proficiency in the Acrobatics skill.
|
||||
"""
|
||||
|
||||
name = "Graceful"
|
||||
source = "Race (Swiftstride Shifter)"
|
||||
|
||||
class NaturalTracker(feats.Feature):
|
||||
"""You have proficiency in the Survival skill.
|
||||
"""
|
||||
|
||||
name = "Natural Tracker"
|
||||
source = "Race (Wildhunt Shifter)"
|
||||
|
||||
|
||||
class _Shifter(race.Race):
|
||||
name = "Shifter"
|
||||
size = "medium"
|
||||
speed = 30
|
||||
languages = ("Common", )
|
||||
features = (feats.Darkvision, Shifting)
|
||||
|
||||
|
||||
class BeasthideShifter(_Shifter):
|
||||
name = "Beasthide Shifter"
|
||||
constitution_bonus = 2
|
||||
strength_bonus = 1
|
||||
features = _Shifter.features + (BeasthideShifting, NaturalAthlete)
|
||||
|
||||
class LongtoothShifter(_Shifter):
|
||||
name = "Longtooth Shifter"
|
||||
constitution_bonus = 2
|
||||
strength_bonus = 1
|
||||
features = _Shifter.features + (LongtoothShifting, Fierce)
|
||||
|
||||
class SwiftstrideShifter(_Shifter):
|
||||
name = "Swiftstride Shifter"
|
||||
dexterity_bonus = 2
|
||||
charisma_bonus = 1
|
||||
features = _Shifter.features + (SwiftstrideShifting, Graceful)
|
||||
|
||||
class WildhuntShifter(_Shifter):
|
||||
name = "Wildhunt Shifter"
|
||||
constitution_bonus = 2
|
||||
strength_bonus = 1
|
||||
features = _Shifter.features + (WildhuntShifting, NaturalTracker)
|
||||
|
||||
class DualMind(feats.Feature):
|
||||
"""You have advantage on all Wisdom saving throws.
|
||||
"""
|
||||
name = "Dual Mind"
|
||||
source = "Race (Kalashtar)"
|
||||
|
||||
class MentalDiscipline(feats.Feature):
|
||||
"""You have resistance to psychic damage.
|
||||
"""
|
||||
name = "Mental Discipline"
|
||||
source = "Race (Kalashtar)"
|
||||
|
||||
class MindLink(feats.Feature):
|
||||
"""You can speak telepathically to any creature you can see, provided
|
||||
the crature is within a number of feet of you equal to 10 times your level.
|
||||
You don't need to share a language with the creature for it to understand
|
||||
your telepathic utterances, but the creature must be able to
|
||||
understand at least one language.
|
||||
|
||||
When you are using this trait to speak telepathically to a creature,
|
||||
you can use your action to give that crature the ability to speak
|
||||
telepatically with you for 1 hour or until you end this effect as an
|
||||
action. To use this ability, the creature must be able to see you and must
|
||||
be within this trait's range. You can give this ability to only
|
||||
one creature at a time; giving it to another creature takes it away from
|
||||
another creature who has it."""
|
||||
name = "Mind Link"
|
||||
source = "Race (Kalashtar)"
|
||||
|
||||
class SeveredFromDreams(feats.Feature):
|
||||
"""Kalashtar sleep, but they don't connect to the plane of dreams
|
||||
as other creatures do. Instead, their minds draw from the memoires
|
||||
of their otherworldly spirit while they sleep. As such,
|
||||
you are immune to spells that require you to dream, like *dream*,
|
||||
but not to spells and other magical effects that put you to sleep.
|
||||
"""
|
||||
name = "Severed from Dreams"
|
||||
source = "Race (Kalashtar)"
|
||||
|
||||
class Kalashtar(race.Race):
|
||||
name = "Kalashtar"
|
||||
size = "medium"
|
||||
speed = 30
|
||||
charisma_bonus = 1
|
||||
wisdom_bonus = 2
|
||||
languages = ("Common", "Quori", )
|
||||
features = (DualMind, MentalDiscipline, MindLink, SeveredFromDreams)
|
||||
|
||||
class PoisonResiliense(feats.Feature):
|
||||
"""You have advantage on saving throws you make to avoid or end the
|
||||
poisoned condition on yourself. You also have resistance to poison damage.
|
||||
"""
|
||||
name = "Poison Resilience"
|
||||
source = "Race (Yuan-Ti)"
|
||||
|
||||
class SerpentineSpellcasting(feats.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. You can also cast it using any spell slots you
|
||||
have of 2nd level or higher.
|
||||
|
||||
Intelligence, Wisdom, or Charisma is your spellcasting ability
|
||||
for these spells when you cast them with this trait
|
||||
(choose when you select this race).
|
||||
"""
|
||||
|
||||
class Yuan_Ti(race.Race):
|
||||
name = "Yuan-Ti"
|
||||
size = "medium"
|
||||
speed = 30
|
||||
languages = ("Common", )
|
||||
features = (feats.Darkvision, feats.MagicResistance, PoisonResiliense,
|
||||
SerpentineSpellcasting)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Tue Feb 22 01:04:23 2022
|
||||
|
||||
@author: mauricio
|
||||
"""
|
||||
|
||||
explorers_pack = """backpack, bedroll, mess kit, tinderbox, {torches} torches,
|
||||
{rations} days of rations, waterskin, {rope} feet of hempen rope"""
|
||||
dungeoneers_pack = """backpack, crowbar, hammer, {pitons} pitons,
|
||||
{torches} torches, tinderbox, {rations} days of rations, waterskin,
|
||||
{rope} feet of hempen rope"""
|
||||
priests_pack = """backpack, blanket, {candles} candles, tinderbox, alms box,
|
||||
{incense} blocks of incense, censer, vestments, {rations} days of rations,
|
||||
waterskin"""
|
||||
scholars_pack = """backpack, book of lore, bottle of ink, ink pen,
|
||||
{parchment} sheets of parchment, little bag of sand, small knife"""
|
||||
entertainers_pack = """backpack, bedroll, {costumes} costumes,
|
||||
{candles} candles, {rations} days of rations, waterskin, disguise kit"""
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 181 KiB |
@@ -0,0 +1,181 @@
|
||||
"""This file describes the heroic adventurer DooDee.
|
||||
It's used primarily for saving characters from create-character,
|
||||
where there will be many missing sections.
|
||||
Modify this file as you level up and then re-generate the character
|
||||
sheet by running ``makesheets`` from the command line.
|
||||
"""
|
||||
|
||||
# To add your own content, write a .py file with your definitions.
|
||||
# Then, import here using the 'import_homebrew' function.
|
||||
from dungeonsheets import import_homebrew
|
||||
HB_races = import_homebrew("HB_races.py")
|
||||
kits = import_homebrew("kits.py")
|
||||
|
||||
dungeonsheets_version = '0.17.1'
|
||||
name = "DooDee"
|
||||
player_name = "George Martin"
|
||||
|
||||
# Be sure to list Primary class first
|
||||
classes = ['Druid', 'Ranger', 'Sorceror'] # ex: ['Wizard'] or ['Rogue', 'Fighter']
|
||||
levels = [5, 3, 1] # ex: [10] or [3, 2]
|
||||
subclasses = ["Circle of the Moon", "Beast Master", None ] # ex: ['Necromacy'] or ['Thief', None]
|
||||
background = "Hermit"
|
||||
race = HB_races.WildhuntShifter
|
||||
alignment = "Lawful Neutral"
|
||||
|
||||
xp = 14587
|
||||
hp_max = 77
|
||||
# hp_temp = 5
|
||||
# hp_current = 31
|
||||
inspiration = 1 # integer inspiration value
|
||||
|
||||
# Ability Scores
|
||||
strength = 10
|
||||
dexterity = 17
|
||||
constitution = 14
|
||||
intelligence = 16
|
||||
wisdom = 14
|
||||
charisma = 12
|
||||
|
||||
# Select what skills you're proficient with
|
||||
skill_proficiencies = ('insight', 'perception',
|
||||
'medicine', 'survival', 'religion')
|
||||
|
||||
# Any skills you have "expertise" (Bard/Rogue) in
|
||||
skill_expertise = ()
|
||||
|
||||
# Named features / feats that aren't part of your classes, race, or background.
|
||||
# Also include Eldritch Invocations and features you make multiple selection of
|
||||
# (like Maneuvers for Fighter, Metamagic for Sorcerors, Trick Shots for
|
||||
# Gunslinger, etc.)
|
||||
# Example:
|
||||
# features = ('Tavern Brawler',) # take the optional Feat from PHB
|
||||
features = (HB_races.WildCompanion, "Sharpshooter")
|
||||
|
||||
# If selecting among multiple feature options: ex Fighting Style
|
||||
# Example (Fighting Style):
|
||||
# feature_choices = ('Archery',)
|
||||
feature_choices = ("Archery",)
|
||||
|
||||
# Weapons/other proficiencies not given by class/race/background
|
||||
weapon_proficiencies = () # ex: ('shortsword', 'quarterstaff')
|
||||
_proficiencies_text = ("Cartographer's tools", ) # ex: ("thieves' tools",)
|
||||
|
||||
# Proficiencies and languages
|
||||
languages = """Common, Druidic, Elven, Draconic"""
|
||||
|
||||
# Inventory
|
||||
# Get yourself some money
|
||||
cp = 0
|
||||
sp = 95
|
||||
ep = 12
|
||||
gp = 140
|
||||
pp = 0
|
||||
|
||||
# Put your equipped weapons and armor here
|
||||
weapons = ("Longbow", 'Quarterstaff','dagger') # Example: ('shortsword', 'longsword')
|
||||
magic_items = () # Example: ('ring of protection',)
|
||||
armor = "Hide Armor" # Eg "leather armor"
|
||||
shield = "" # Eg "shield"
|
||||
|
||||
# The equipment goes here. A total weight will be automatically
|
||||
# calculated and added.
|
||||
equipment = kits.explorers_pack.format(rations=9, torches=3,
|
||||
pitons=10, rope=50) + \
|
||||
", human skin mask, sacrificial knife."
|
||||
|
||||
# If the weight of an item is undetermined, you can include it
|
||||
# in the equipment_weight_dict
|
||||
equipment_weight_dict = {"human skin mask":0.5}
|
||||
|
||||
attacks_and_spellcasting = \
|
||||
"""
|
||||
Quarterstaff with Shillelagh: +5 to hit, 1d8+3/b
|
||||
"""
|
||||
|
||||
# List of known spells
|
||||
# Example: spells_prepared = ('magic missile', 'mage armor')
|
||||
spells_prepared = ("Shillelagh", "Druidcraft", "Cure Wounds", "Faerie Fire",
|
||||
"Entangle", "Thunderwave", "Fog Cloud", "Barkskin")
|
||||
|
||||
|
||||
# Which spells have not been prepared
|
||||
__spells_unprepared = ("Speak with animals", "Charm Person",
|
||||
"Animal Friendship", "Create or Destroy Water",
|
||||
"Goodberry", "Purify Food and Drink", "Find Familiar")
|
||||
|
||||
# all spells known
|
||||
spells = spells_prepared + __spells_unprepared
|
||||
|
||||
# Wild shapes for Druid
|
||||
wild_shapes = ("Ape", "Wolf", "Mastiff", "Giant Spider", "Tiger",
|
||||
"Dire Wolf", "Brown Bear","Cat") # Ex: ('ape', 'wolf', 'ankylosaurus')
|
||||
# List any monsters whose reference can come at hand
|
||||
# for spells like Find Familiar
|
||||
companions = ["owl", "poisonous snake"]
|
||||
|
||||
# Rangers Beast for Beast Master
|
||||
ranger_beast = "Panther"
|
||||
|
||||
# Backstory
|
||||
# Describe your backstory here
|
||||
personality_traits = """
|
||||
I am introspective.
|
||||
"""
|
||||
|
||||
ideals = """I search for nature balance."""
|
||||
|
||||
bonds = """My friends from my village."""
|
||||
|
||||
flaws = """
|
||||
I lose my temper when I see animal corpses as trophies."""
|
||||
|
||||
features_and_traits = """"""
|
||||
|
||||
portrait = 'shifter_2.png'
|
||||
age = 15
|
||||
height = "1,77m"
|
||||
weight = "72kg"
|
||||
eyes = "Black"
|
||||
skin = "Brown"
|
||||
hair = "Brown"
|
||||
|
||||
|
||||
# optionally, if you set portrait to false, you can include a text
|
||||
# in the appearance box using the 'appearece_text' variable:
|
||||
# appearance_text =
|
||||
additional_description = \
|
||||
'''
|
||||
Find it better to avoid conflict.
|
||||
'''
|
||||
|
||||
backstory = \
|
||||
'''
|
||||
|
||||
Born at Makudan Village, helped many other
|
||||
shifters to overcome the vampire known as Strahd.
|
||||
|
||||
'''
|
||||
|
||||
treasure = \
|
||||
'''
|
||||
A Dire Wolf tooth
|
||||
|
||||
'''
|
||||
|
||||
allies = \
|
||||
'''
|
||||
His childhood friend Krenak
|
||||
|
||||
His elder master Caiubi;
|
||||
|
||||
Druids of Rakshak
|
||||
|
||||
Druids of Makudan
|
||||
'''
|
||||
|
||||
org_name = \
|
||||
'''
|
||||
Druids of Makudan
|
||||
|
||||
'''
|
||||
Reference in New Issue
Block a user