Browse Source

Added subclass functionality

main
suzan 2 weeks ago
parent
commit
248f66e4f0
  1. 65
      creation_engine.py
  2. 1
      main.py
  3. 181
      races.json

65
creation_engine.py

@ -1,8 +1,8 @@
import random import random
import json import json
#TODO 5 AC? Or Gold Start no AC? # TODO AC? Or Gold Start no AC?
#TODO 6 Sub Classes? # TODO Feats?
VOWELS = ["A", "E", "I", "O", "U"] VOWELS = ["A", "E", "I", "O", "U"]
@ -23,8 +23,10 @@ instrument_list = ["Bagpipes", "Birdpipes", "Clarinet", "Drum", "Dulcimer", "Fid
"Harp", "Horn", "Longhorn", "Lute", "Lyre", "Pan Flute", "Shawm", "Songhorn", "Tantan", "Thelarr", "Harp", "Horn", "Longhorn", "Lute", "Lyre", "Pan Flute", "Shawm", "Songhorn", "Tantan", "Thelarr",
"Tocken", "Trumpet", "Viol", "Wargong", "Yarting", "Zulkoon"] "Tocken", "Trumpet", "Viol", "Wargong", "Yarting", "Zulkoon"]
languages = ["Aarakocra", "Abyssal", "Aquan"," Auran", "Celestial", "Deep Speech", "Draconic", "Dwarvish", "Elvish", "Giant", languages = ["Aarakocra", "Abyssal", "Aquan", "Auran", "Celestial", "Deep Speech", "Draconic", "Dwarvish", "Elvish",
"Gith", "Gnomish", "Goblin", "Halfling", "Infernal", "Orc", "Primordial", "Sylvan", "Undercommon", "Vedalken"] "Giant",
"Gith", "Gnomish", "Goblin", "Halfling", "Infernal", "Orc", "Primordial", "Sylvan", "Undercommon",
"Vedalken"]
known_language_list = ["Common"] known_language_list = ["Common"]
@ -35,6 +37,17 @@ ARTISANS_TOOLS = ["Alchemist's Supplies", "Brewer's Supplies", "Calligrapher's S
"Jeweler's Tools", "Leatherworker's Tools", "Mason's Tools", "Painter's Supplies", "Potter's Tools", "Jeweler's Tools", "Leatherworker's Tools", "Mason's Tools", "Painter's Supplies", "Potter's Tools",
"Smith's Tools", "Tinker's Tools", "Weaver's Tools", "Woodcarver's Tools"] "Smith's Tools", "Tinker's Tools", "Weaver's Tools", "Woodcarver's Tools"]
CLERIC_SUBCLASSES = ["Life Domain", "Knowledge Domain", "Light Domain", "Nature Domain", "Tempest Domain",
"Trickery Domain", "War Domain", "Death Domain", "Arcana Domain", "Forge Domain", "Grave Domain",
"Twilight Domain", "Peace Domain", "Order Domain"]
SORCERER_SUBCLASSES = ["Aberrant Mind", "Clockwork Soul", "Divine Soul", "Draconic Bloodline", "Lunar Sorcery",
"Shadow Magic", "Storm Sorcery", "Wild Magic"]
WIZARD_SUBCLASSES = ["Bladesinging", "Chronurgy Magic", "Graviturgy Magic", "Order of Scribes", "School of Abjuration",
"School of Conjuration", "School of Divination", "School of Enchantment", "School of Evocation",
"School of Illusion", "School of Necromancy", "School of Transmutation", "War Magic"]
class HeroCreation: class HeroCreation:
def __init__(self): def __init__(self):
self.name_generation() self.name_generation()
@ -46,6 +59,7 @@ class HeroCreation:
self.background = random.choice(BACKGROUND_LIST) self.background = random.choice(BACKGROUND_LIST)
self.stat_rolls() self.stat_rolls()
self.racial_bonuses() self.racial_bonuses()
self.speed = self.race_string["Speed"]
self.article = self.grammar() self.article = self.grammar()
self.skill_generation() self.skill_generation()
self.skill_proficiency() self.skill_proficiency()
@ -58,8 +72,7 @@ class HeroCreation:
self.background_proficiencies() self.background_proficiencies()
self.finalize_languages() self.finalize_languages()
self.apply_skill_modifiers("dexterity", "initiative") self.apply_skill_modifiers("dexterity", "initiative")
self.whoami = (f"Your new character is {self.name}, {self.article} {self.race} {self.job}, with the " self.whoami()
f"{self.background} background.\n")
self.stat_block = (f"Stat Block\n----------\nCharisma: {self.charisma}\nConstitution: {self.constitution}\n" self.stat_block = (f"Stat Block\n----------\nCharisma: {self.charisma}\nConstitution: {self.constitution}\n"
f"Dexterity: {self.dexterity}\nIntelligence: {self.intelligence}\n" f"Dexterity: {self.dexterity}\nIntelligence: {self.intelligence}\n"
f"Strength: {self.strength}\nWisdom: {self.wisdom}\n") f"Strength: {self.strength}\nWisdom: {self.wisdom}\n")
@ -69,9 +82,11 @@ class HeroCreation:
f"Intelligence Save: {self.intelligence_save}\n" f"Intelligence Save: {self.intelligence_save}\n"
f"Strength Save: {self.strength_save}\n" f"Strength Save: {self.strength_save}\n"
f"Wisdom Save: {self.wisdom_save}\n") f"Wisdom Save: {self.wisdom_save}\n")
self.additional_stats = (f"Additional Stats\n----------\nStarting HP: {self.starting_hp}\nHit Die: {self.hit_die}\n" self.additional_stats = (
f"Initiative Bonus: {self.initiative}\n") f"Additional Stats\n----------\nStarting HP: {self.starting_hp}\nHit Die: {self.hit_die}\n"
self.skill_bonuses = (f"Skill Bonuses\n----------\nAcrobatics: {self.acrobatics}\nAnimal Handling: {self.animal_handling}" f"Initiative Bonus: {self.initiative}\nSpeed: {self.speed}\n")
self.skill_bonuses = (
f"Skill Bonuses\n----------\nAcrobatics: {self.acrobatics}\nAnimal Handling: {self.animal_handling}"
f"\nArcana: {self.arcana}\nAthletics: {self.athletics}\nDeception: {self.deception}" f"\nArcana: {self.arcana}\nAthletics: {self.athletics}\nDeception: {self.deception}"
f"\nHistory: {self.history}\nInsight: {self.insight}\nIntimidation: {self.intimidation}" f"\nHistory: {self.history}\nInsight: {self.insight}\nIntimidation: {self.intimidation}"
f"\nInvestigation: {self.investigation}\nMedicine: {self.medicine}\nNature: {self.nature}" f"\nInvestigation: {self.investigation}\nMedicine: {self.medicine}\nNature: {self.nature}"
@ -81,7 +96,8 @@ class HeroCreation:
self.other_proficiencies = (f"Additional Proficiencies\n----------\n" self.other_proficiencies = (f"Additional Proficiencies\n----------\n"
f"Languages: {self.languages}\n" f"Languages: {self.languages}\n"
f"Instruments: {self.instruments}\n" f"Instruments: {self.instruments}\n"
f"Artisan's Tools: {self.artisan_tools}\nAdditional Tools: {self.additional_tools}\n" f"Artisan's Tools: {self.artisan_tools}\nAdditional Tools: "
f"{self.additional_tools}\n"
f"Weapon Proficiencies: {self.weapon_proficiency}\n" f"Weapon Proficiencies: {self.weapon_proficiency}\n"
f"Armor Proficiencies: {self.armor_proficiency}\n") f"Armor Proficiencies: {self.armor_proficiency}\n")
@ -217,7 +233,6 @@ class HeroCreation:
starting_hp_value = job_data[self.job]["Starting HP"] starting_hp_value = job_data[self.job]["Starting HP"]
setattr(self, "starting_hp", starting_hp_value) setattr(self, "starting_hp", starting_hp_value)
def job_proficiencies(self): def job_proficiencies(self):
with open('jobs.json') as json_file: with open('jobs.json') as json_file:
job_data = json.load(json_file) job_data = json.load(json_file)
@ -338,6 +353,7 @@ class HeroCreation:
known_languages = self.race_string["Languages"] known_languages = self.race_string["Languages"]
for language in known_languages: for language in known_languages:
known_language_list.append(language) known_language_list.append(language)
print(language)
languages.remove(language) languages.remove(language)
except KeyError: except KeyError:
pass pass
@ -354,6 +370,27 @@ class HeroCreation:
language_string = ", ".join(known_language_list) language_string = ", ".join(known_language_list)
setattr(self, "languages", language_string) setattr(self, "languages", language_string)
def whoami(self):
if self.job == "Cleric":
subclass = random.choice(CLERIC_SUBCLASSES)
setattr(self,"subclass",subclass)
print(f"Your new character is {self.name}, {self.article} {self.race} {self.job}, with the "
f"{self.background} background and the {self.subclass} subclass.\n")
elif self.job == "Sorcerer":
subclass = random.choice(SORCERER_SUBCLASSES)
setattr(self, "subclass", subclass)
print(f"Your new character is {self.name}, {self.article} {self.race} {self.job}, with the "
f"{self.background} background and the {self.subclass} subclass.\n")
elif self.job == "Wizard":
subclass = random.choice(WIZARD_SUBCLASSES)
setattr(self, "subclass", subclass)
print(f"Your new character is {self.name}, {self.article} {self.race} {self.job}, with the "
f"{self.background} background and the {self.subclass} subclass.\n")
else:
print(f"Your new character is {self.name}, {self.article} {self.race} {self.job}, with the "
f"{self.background} background.\n")
# Used for interactively moving around stats in case of a bad allocation. # Used for interactively moving around stats in case of a bad allocation.
# Disabling for now, as this project is intended to be one-command and self-contained # Disabling for now, as this project is intended to be one-command and self-contained
@ -362,8 +399,10 @@ class HeroCreation:
# while not finished: # while not finished:
# move_request = input("Would you like to move any of these stats around? (y/n)").lower() # move_request = input("Would you like to move any of these stats around? (y/n)").lower()
# if move_request == "y": # if move_request == "y":
# stat_1 = input("What is the first stat you would like to move? Please enter the full stat name.").lower() # stat_1 = input("What is the first stat you would like to move? Please enter the full stat
# stat_2 = input("What is the second stat you would like to move? Please enter the full stat name.").lower() # name.").lower()
# stat_2 = input("What is the second stat you would like to move? Please enter the full stat
# name.").lower()
# if hasattr(self, stat_1) and hasattr(self, stat_2): # if hasattr(self, stat_1) and hasattr(self, stat_2):
# stat_1_value = getattr(self, stat_1) # stat_1_value = getattr(self, stat_1)
# stat_2_value = getattr(self, stat_2) # stat_2_value = getattr(self, stat_2)

1
main.py

@ -2,7 +2,6 @@ import creation_engine
hero = creation_engine.HeroCreation() hero = creation_engine.HeroCreation()
print(hero.whoami)
print(hero.stat_block) print(hero.stat_block)
print(hero.saves) print(hero.saves)
print(hero.additional_stats) print(hero.additional_stats)

181
races.json

@ -11,20 +11,8 @@
"Aarakocra", "Aarakocra",
"Auran" "Auran"
], ],
"AdditionalLanguages": 1 "AdditionalLanguages": 1,
}, "Speed": 50
{
"Race": "Aasimar",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 2,
"Languages": [
"Celestial"
],
"AdditionalLanguages": 1
}, },
{ {
"Race": "Aasimar (Fallen)", "Race": "Aasimar (Fallen)",
@ -37,7 +25,9 @@
"Languages": [ "Languages": [
"Celestial" "Celestial"
], ],
"AdditionalLanguages": 1 "AdditionalLanguages": 1,
"Speed": 30,
"Resistances": ["Radiant Damage", "Necrotic Damage"]
}, },
{ {
"Race": "Aasimar (Protector)", "Race": "Aasimar (Protector)",
@ -50,7 +40,9 @@
"Languages": [ "Languages": [
"Celestial" "Celestial"
], ],
"AdditionalLanguages": 1 "AdditionalLanguages": 1,
"Speed": 30,
"Resistances": ["Radiant Damage", "Necrotic Damage"]
}, },
{ {
"Race": "Aasimar (Scourge)", "Race": "Aasimar (Scourge)",
@ -63,7 +55,9 @@
"Languages": [ "Languages": [
"Celestial" "Celestial"
], ],
"AdditionalLanguages": 1 "AdditionalLanguages": 1,
"Speed": 30,
"Resistances": ["Radiant Damage", "Necrotic Damage"]
}, },
{ {
"Race": "Bugbear", "Race": "Bugbear",
@ -76,7 +70,8 @@
"Languages": [ "Languages": [
"Goblin" "Goblin"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Centaur", "Race": "Centaur",
@ -90,7 +85,8 @@
"Sylvan", "Sylvan",
"Elvish" "Elvish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 40
}, },
{ {
"Race": "Dwarf (Duergar)", "Race": "Dwarf (Duergar)",
@ -104,7 +100,8 @@
"Dwarvish", "Dwarvish",
"Undercommon" "Undercommon"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Dwarf (Hill)", "Race": "Dwarf (Hill)",
@ -117,7 +114,8 @@
"Languages": [ "Languages": [
"Dwarvish" "Dwarvish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Dwarf (Mountain)", "Race": "Dwarf (Mountain)",
@ -130,7 +128,8 @@
"Languages": [ "Languages": [
"Dwarvish" "Dwarvish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Dragonborn", "Race": "Dragonborn",
@ -143,7 +142,8 @@
"Languages": [ "Languages": [
"Draconic" "Draconic"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Elf (Drow)", "Race": "Elf (Drow)",
@ -157,7 +157,8 @@
"Elvish", "Elvish",
"Undercommon" "Undercommon"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Elf (Eladrin)", "Race": "Elf (Eladrin)",
@ -170,7 +171,8 @@
"Languages": [ "Languages": [
"Elvish" "Elvish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Elf (High)", "Race": "Elf (High)",
@ -183,7 +185,8 @@
"Languages": [ "Languages": [
"Elvish" "Elvish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Elf (Sea)", "Race": "Elf (Sea)",
@ -197,7 +200,8 @@
"Elvish", "Elvish",
"Undercommon" "Undercommon"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Elf (Shadar-Kai)", "Race": "Elf (Shadar-Kai)",
@ -211,7 +215,8 @@
"Elvish", "Elvish",
"Undercommon" "Undercommon"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Elf (Wood)", "Race": "Elf (Wood)",
@ -224,7 +229,8 @@
"Languages": [ "Languages": [
"Elvish" "Elvish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 35
}, },
{ {
"Race": "Firbolg", "Race": "Firbolg",
@ -237,7 +243,8 @@
"Languages": [ "Languages": [
"Sylvan" "Sylvan"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Genasi (Air)", "Race": "Genasi (Air)",
@ -250,7 +257,8 @@
"Languages": [ "Languages": [
"Primordial" "Primordial"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Genasi (Earth)", "Race": "Genasi (Earth)",
@ -263,7 +271,8 @@
"Languages": [ "Languages": [
"Primordial" "Primordial"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Genasi (Fire)", "Race": "Genasi (Fire)",
@ -276,7 +285,8 @@
"Languages": [ "Languages": [
"Primordial" "Primordial"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Genasi (Water)", "Race": "Genasi (Water)",
@ -289,7 +299,8 @@
"Languages": [ "Languages": [
"Primordial" "Primordial"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Githyanki", "Race": "Githyanki",
@ -302,7 +313,8 @@
"Languages": [ "Languages": [
"Gith" "Gith"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Githzerai", "Race": "Githzerai",
@ -315,7 +327,8 @@
"Languages": [ "Languages": [
"Gith" "Gith"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Gnome (Deep)", "Race": "Gnome (Deep)",
@ -329,7 +342,8 @@
"Gnomish", "Gnomish",
"Undercommon" "Undercommon"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Gnome (Forest)", "Race": "Gnome (Forest)",
@ -342,7 +356,8 @@
"Languages": [ "Languages": [
"Gnomish" "Gnomish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Gnome (Rock)", "Race": "Gnome (Rock)",
@ -355,7 +370,8 @@
"Languages": [ "Languages": [
"Gnomish" "Gnomish"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Goblin", "Race": "Goblin",
@ -368,7 +384,8 @@
"Languages": [ "Languages": [
"Goblin" "Goblin"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Goliath", "Race": "Goliath",
@ -381,7 +398,8 @@
"Languages": [ "Languages": [
"Giant" "Giant"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Halfling (Lightfoot)", "Race": "Halfling (Lightfoot)",
@ -394,7 +412,8 @@
"Languages": [ "Languages": [
"Halfling" "Halfling"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Halfling (Stout)", "Race": "Halfling (Stout)",
@ -407,7 +426,8 @@
"Languages": [ "Languages": [
"Halfling" "Halfling"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 25
}, },
{ {
"Race": "Half-Orc", "Race": "Half-Orc",
@ -420,7 +440,8 @@
"Languages": [ "Languages": [
"Orc" "Orc"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Hobgoblin", "Race": "Hobgoblin",
@ -433,7 +454,8 @@
"Languages": [ "Languages": [
"Goblin" "Goblin"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Human", "Race": "Human",
@ -443,7 +465,8 @@
"Intelligence": 1, "Intelligence": 1,
"Wisdom": 1, "Wisdom": 1,
"Charisma": 1, "Charisma": 1,
"AdditionalLanguages": 1 "AdditionalLanguages": 1,
"Speed": 30
}, },
{ {
"Race": "Kenku", "Race": "Kenku",
@ -456,7 +479,8 @@
"Languages": [ "Languages": [
"Auran" "Auran"
], ],
"AdditionalLanguages": 1 "AdditionalLanguages": 1,
"Speed": 30
}, },
{ {
"Race": "Kobold", "Race": "Kobold",
@ -469,7 +493,8 @@
"Languages": [ "Languages": [
"Draconic" "Draconic"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Lizardfolk", "Race": "Lizardfolk",
@ -482,7 +507,8 @@
"Languages": [ "Languages": [
"Draconic" "Draconic"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Minotaur", "Race": "Minotaur",
@ -495,7 +521,8 @@
"Languages": [ "Languages": [
"Giant" "Giant"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Orc", "Race": "Orc",
@ -508,7 +535,8 @@
"Languages": [ "Languages": [
"Orc" "Orc"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Shifter (Beasthide)", "Race": "Shifter (Beasthide)",
@ -521,7 +549,8 @@
"Languages": [ "Languages": [
"Sylvan" "Sylvan"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Shifter (Longtooth)", "Race": "Shifter (Longtooth)",
@ -534,7 +563,8 @@
"Languages": [ "Languages": [
"Sylvan" "Sylvan"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Shifter (Swiftstride)", "Race": "Shifter (Swiftstride)",
@ -547,7 +577,8 @@
"Languages": [ "Languages": [
"Sylvan" "Sylvan"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 35
}, },
{ {
"Race": "Shifter (Wildhunt)", "Race": "Shifter (Wildhunt)",
@ -560,7 +591,8 @@
"Languages": [ "Languages": [
"Sylvan" "Sylvan"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tabaxi", "Race": "Tabaxi",
@ -570,7 +602,8 @@
"Intelligence": 0, "Intelligence": 0,
"Wisdom": 0, "Wisdom": 0,
"Charisma": 1, "Charisma": 1,
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling", "Race": "Tiefling",
@ -583,7 +616,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling (Dispater)", "Race": "Tiefling (Dispater)",
@ -596,7 +630,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling (Glasya)", "Race": "Tiefling (Glasya)",
@ -609,7 +644,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling (Feral)", "Race": "Tiefling (Feral)",
@ -622,7 +658,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling (Fierna)", "Race": "Tiefling (Fierna)",
@ -635,7 +672,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling (Levistus)", "Race": "Tiefling (Levistus)",
@ -648,7 +686,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Tiefling (Zariel)", "Race": "Tiefling (Zariel)",
@ -661,7 +700,8 @@
"Languages": [ "Languages": [
"Infernal" "Infernal"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Triton", "Race": "Triton",
@ -674,7 +714,8 @@
"Languages": [ "Languages": [
"Aquan" "Aquan"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Vedalken", "Race": "Vedalken",
@ -688,7 +729,8 @@
"Vedalken", "Vedalken",
"Undercommon" "Undercommon"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Warforged (Juggernaut)", "Race": "Warforged (Juggernaut)",
@ -698,7 +740,8 @@
"Intelligence": 0, "Intelligence": 0,
"Wisdom": 0, "Wisdom": 0,
"Charisma": 0, "Charisma": 0,
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Warforged (Skirmisher)", "Race": "Warforged (Skirmisher)",
@ -708,7 +751,8 @@
"Intelligence": 0, "Intelligence": 0,
"Wisdom": 0, "Wisdom": 0,
"Charisma": 0, "Charisma": 0,
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
}, },
{ {
"Race": "Yuan-Ti Pureblood", "Race": "Yuan-Ti Pureblood",
@ -722,6 +766,7 @@
"Abyssal", "Abyssal",
"Draconic" "Draconic"
], ],
"AdditionalLanguages": 0 "AdditionalLanguages": 0,
"Speed": 30
} }
] ]
Loading…
Cancel
Save