diff --git a/dungeonsheets/character.py b/dungeonsheets/character.py index 87469ea..92858a2 100644 --- a/dungeonsheets/character.py +++ b/dungeonsheets/character.py @@ -144,6 +144,20 @@ class Character(Entity): # Character-specific player_name = "" xp = 0 + # Hit points + hp_max = None + hp_current = None + hp_temp = None + # Base stats (ability scores) + strength = Ability() + dexterity = Ability() + constitution = Ability() + intelligence = Ability() + wisdom = Ability() + charisma = Ability() + armor_class = ArmorClass() + initiative = Initiative() + speed = Speed() inspiration = False attacks_and_spellcasting = "" class_list = list() @@ -159,6 +173,30 @@ class Character(Entity): features_and_traits = "Describe any other features and abilities." _proficiencies_text = list() + # Magic + spellcasting_ability = None + _spells = list() + _spells_prepared = list() + infusions = list() + # Features IN MAJOR DEVELOPMENT + custom_features = list() + feature_choices = list() + + # Appearance + # portrait = placeholder not sure how to implement + age = 0 + height = '' + weight = '' + eyes = '' + skin = '' + hair = '' + # Background + allies = '' + faction_name = '' + # faction_symbol = placeholder not sure how to implement + backstory = '' + other_feats_traits = '' + treasure = '' def __init__( self, diff --git a/dungeonsheets/fill_pdf_template.py b/dungeonsheets/fill_pdf_template.py index f0210af..5e064dc 100644 --- a/dungeonsheets/fill_pdf_template.py +++ b/dungeonsheets/fill_pdf_template.py @@ -87,6 +87,8 @@ def create_character_pdf_template(character, basename, flatten=False): # Hit points "HDTotal": character.hit_dice, "HPMax": str(character.hp_max), + "HPCurrent": str(character.hp_current), + "HPTemp": str(character.hp_temp), # Personality traits and other features "PersonalityTraits ": text_box(character.personality_traits), "Ideals": text_box(character.ideals), @@ -172,6 +174,30 @@ def create_character_pdf_template(character, basename, flatten=False): return make_pdf(fields, src_pdf=src_pdf, basename=basename, flatten=flatten) +def create_personality_pdf_template(character, basename, flatten=False): + # Prepare the list of fields + fields = { + "CharacterName 2": character.name, + "Age": str(character.age), + "Height": character.height, + "Weight": character.weight, + "Eyes": character.eyes, + "Skin": character.skin, + "Hair": character.hair, + # "CHARACTER IMAGE": None + # "Faction Symbol Image": None + "Allies": text_box(character.allies), + "FactionName": character.faction_name, + "Backstory": text_box(character.backstory), + "Feat+Traits": text_box(character.other_feats_traits), + "Treasure": text_box(character.treasure) + } + # Prepare the actual PDF + dirname = os.path.join(os.path.dirname(os.path.abspath(__file__)), "forms/") + src_pdf = os.path.join(dirname, "blank-personality-sheet-default.pdf") + return make_pdf(fields, src_pdf=src_pdf, basename=basename, flatten=flatten) + + def create_spells_pdf_template(character, basename, flatten=False): classes_and_levels = " / ".join( [c.name + " " + str(c.level) for c in character.spellcasting_classes] diff --git a/dungeonsheets/forms/blank-personality-sheet-default.pdf b/dungeonsheets/forms/blank-personality-sheet-default.pdf new file mode 100644 index 0000000..3d845cc Binary files /dev/null and b/dungeonsheets/forms/blank-personality-sheet-default.pdf differ diff --git a/dungeonsheets/make_sheets.py b/dungeonsheets/make_sheets.py index 5d023b3..d093f4b 100755 --- a/dungeonsheets/make_sheets.py +++ b/dungeonsheets/make_sheets.py @@ -17,6 +17,7 @@ from dungeonsheets import character as _char, exceptions, readers, latex, monste from dungeonsheets.stats import mod_str, findattr from dungeonsheets.fill_pdf_template import ( create_character_pdf_template, + create_personality_pdf_template, create_spells_pdf_template, ) from dungeonsheets.character import Character @@ -283,9 +284,9 @@ def make_character_sheet( character_props = readers.read_sheet_file(char_file) character = _char.Character.load(character_props) # Set the fields in the FDF - basename = char_file.stem - char_base = basename + "_char" - sheets = [char_base + ".pdf"] + char_base = os.path.splitext(character_file)[0] + "_char" + person_base = os.path.splitext(character_file)[0] + "_person" + sheets = [char_base + ".pdf", person_base + ".pdf"] pages = [] tex = [ jinja_env.get_template("preamble.tex").render( @@ -299,6 +300,10 @@ def make_character_sheet( character=character, basename=char_base, flatten=flatten ) pages.append(char_pdf) + person_pdf = create_personality_pdf_template( + character=character, basename=person_base, flatten=flatten + ) + pages.append(person_pdf) if character.is_spellcaster: # Create spell sheet spell_base = "{:s}_spells".format(basename) diff --git a/examples/monk1.py b/examples/monk1.py index 1b70b80..ae6ed48 100644 --- a/examples/monk1.py +++ b/examples/monk1.py @@ -23,6 +23,8 @@ alignment = "Lawful good" xp = 0 hp_max = 105 +hp_current = 92 +hp_temp = 0 inspiration = 0 # integer inspiration value # Ability Scores @@ -107,3 +109,17 @@ flaws = """TODO: Describe your characters interesting flaws. features_and_traits = """TODO: Describe other features and abilities your character has.""" + +age = 22 +height = "3'11\"" +weight = "47lb" +eyes = "Brown" +skin = "White tan" +hair = "Short and brown" +# Background +allies = """TODO: List what allies your character has.""" +faction_name = "TODO: Name of your faction" +# faction_symbol = placeholder not sure how to implement +backstory = """TODO: Describe your character's backstory""" +other_feats_traits = """TODO: Describe your character's other feats and traits""" +treasure = """TODO: Describe what treasures you character owns."""