Added tests for Companions and Weight features

This commit is contained in:
bw-mutley
2022-03-19 15:20:13 -03:00
committed by GitHub
parent 6f6905f1ce
commit b31e56dffe
4 changed files with 419 additions and 0 deletions
+218
View File
@@ -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)
+20
View File
@@ -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

+181
View File
@@ -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
'''