Browse Source

Inititial Commit

main
suzan 3 weeks ago
commit
17a4129393
  1. 226
      backgrounds.json
  2. 197
      creation_engine.py
  3. 212
      jobs.json
  4. 10
      main.py
  5. 4282
      master_class.json
  6. 3177
      names.txt
  7. 803
      races.json

226
backgrounds.json

@ -0,0 +1,226 @@
{
"Acolyte": {
"Skills": [
"insight",
"religion"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Charlatan": {
"Skills": [
"deception",
"sleight_of_hand"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Criminal / Spy": {
"Skills": [
"deception",
"stealth"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Entertainer": {
"Skills": [
"acrobatics",
"performance"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Folk Hero": {
"Skills": [
"animal_handling",
"survival"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Gladiator": {
"Skills": [
"acrobatics",
"performance"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Guild Artisan / Guild Merchant": {
"Skills": [
"insight",
"persuasion"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Hermit": {
"Skills": [
"medicine",
"religion"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Knight": {
"Skills": [
"history",
"persuasion"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Noble": {
"Skills": [
"persuasion",
"history"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Outlander": {
"Skills": [
"athletics",
"survival"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Pirate": {
"Skills": [
"athletics",
"perception"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Sage": {
"Skills": [
"arcana",
"history"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Sailor": {
"Skills": [
"athletics",
"perception"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Soldier": {
"Skills": [
"athletics",
"intimidation"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
},
"Urchin": {
"Skills": [
"sleight_of_hand",
"stealth"
],
"Additional Proficiencies": {
"Languages": 0,
"Tools": 0,
"Specific Tools": "",
"Gaming Set": 0,
"Instrument": 0,
"Artisan's Tool": 0
}
}
}

197
creation_engine.py

@ -0,0 +1,197 @@
import random
import json
#TODO 1 Languages
#TODO 2 Tool Proficiencies
#TODO 3 Weapon Proficiencies
#TODO 4 Rogue Expertise
#TODO 5 AC? Or Gold Start no AC?
#TODO 6 Sub Classes?
VOWELS = ["A","E","I","O","U"]
SKILL_LIST = ["acrobatics", "animal_handling", "arcana", "athletics", "deception", "history", "insight", "intimidation",
"investigation", "medicine", "nature", "perception", "performance", "persuasion", "religion",
"sleight_of_hand", "stealth", "survival"]
ATTRIBUTE_LIST = ["strength", "dexterity", "wisdom", "constitution", "intelligence", "charisma"]
CLASS_LIST = ["Artificer","Barbarian","Bard","Cleric","Druid","Fighter","Monk","Paladin",
"Ranger","Rogue","Sorcerer","Warlock","Wizard","Blood Hunter"]
BACKGROUND_LIST = ["Acolyte", "Charlatan", "Criminal / Spy", "Entertainer", "Folk Hero", "Gladiator",
"Guild Artisan / Guild Merchant", "Hermit", "Knight", "Noble", "Outlander", "Pirate", "Sage",
"Sailor", "Soldier", "Urchin",]
class HeroCreation:
def __init__(self):
self.name_generation()
self.race_selection()
self.race = self.race_string["Race"]
#'job' is used in place of 'class' to avoid a function conflict
self.job = random.choice(CLASS_LIST)
self.job_characteristics()
self.background = random.choice(BACKGROUND_LIST)
self.stat_rolls()
self.racial_bonuses()
self.article = self.grammar()
self.skill_generation()
self.skill_proficiency()
self.apply_skill_modifiers("dexterity","initiative")
self.whoami = (f"Your new character is {self.name}, {self.article} {self.race} {self.job}, with the "
f"{self.background} background.\n")
self.stat_block = (f"Stat Block\n----------\nCharisma: {self.charisma}\nConstitution: {self.constitution}\n"
f"Dexterity: {self.dexterity}\nIntelligence: {self.intelligence}\n"
f"Strength: {self.strength}\nWisdom: {self.wisdom}\n")
self.additional_stats = (f"Additional Stats\n----------\nStarting HP: {self.starting_hp}\nHit Die: {self.hit_die}\n"
f"Initiative Bonus: {self.initiative}\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"\nHistory: {self.history}\nInsight: {self.insight}\nIntimidation: {self.intimidation}"
f"\nInvestigation: {self.investigation}\nMedicine: {self.medicine}\nNature: {self.nature}"
f"\nPerception: {self.perception}\nPerformance: {self.performance}\nPersuasion: {self.persuasion}"
f"\nReligion: {self.religion}\nSleight of Hand: {self.sleight_of_hand}"
f"\nStealth: {self.stealth}\nSurvival: {self.survival}")
#Assign the correct a/an article in the 'whoami' attr
def grammar(self):
if self.race[0] in VOWELS:
return "an"
else:
return "a"
def race_selection(self):
with open('races.json') as json_file:
race_data = json.load(json_file)
chosen_race = random.choice(race_data)
setattr(self,"race_string",chosen_race)
def stat_rolls(self):
# Configured to "Re-roll" 1s
# To include 1s, increase the randint range to 1,6
for attribute in ATTRIBUTE_LIST:
roll_list = []
for each in range(4):
roll_list.append(random.randint(2, 6))
roll_list.remove(min(roll_list))
stat_total = sum(roll_list)
setattr(self,f"{attribute}", stat_total)
#Assign racial stat bonuses
def racial_bonuses(self):
self.charisma += self.race_string["Charisma"]
self.constitution += self.race_string["Constitution"]
self.dexterity += self.race_string["Dexterity"]
self.intelligence += self.race_string["Intelligence"]
self.strength += self.race_string["Strength"]
self.wisdom += self.race_string["Wisdom"]
def name_generation(self):
with open("names.txt","r") as f:
name_list = f.read().splitlines()
first_name = random.choice(name_list)
sur_name = random.choice(name_list)
combined_name = f"{first_name} {sur_name}"
setattr(self,"name",combined_name)
#Created skill attributes with a base value of +0 to the roll
def skill_generation(self):
for skill in SKILL_LIST:
setattr(self, skill, 0)
if skill == "athletics":
self.apply_skill_modifiers("strength",skill)
elif skill in ["acrobatics", "sleight_of_hand", "stealth"]:
self.apply_skill_modifiers("dexterity",skill)
elif skill in ["arcana", "history", "investigation", "nature", "religion"]:
self.apply_skill_modifiers("intelligence",skill)
elif skill in ["animal_handling", "insight", "medicine", "perception", "survival"]:
self.apply_skill_modifiers("wisdom",skill)
elif skill in ["deception", "intimidation", "performance", "persuasion"]:
self.apply_skill_modifiers("charisma",skill)
def apply_skill_modifiers(self,attribute_name,skill_name):
attribute = getattr(self,attribute_name)
if attribute == 1:
modifier = -5
elif attribute in [2, 3]:
modifier = -4
elif attribute in [4, 5]:
modifier = -3
elif attribute in [6, 7]:
modifier = -2
elif attribute in [8, 9]:
modifier = -1
elif attribute in [10, 11]:
modifier = 0
elif attribute in [12, 13]:
modifier = 1
elif attribute in [14, 15]:
modifier = 2
elif attribute in [16, 17]:
modifier = 3
elif attribute in [18, 19]:
modifier = 4
elif attribute in [20, 21]:
modifier = 5
else:
modifier = 0
setattr(self,skill_name,modifier)
def skill_proficiency(self):
with open('backgrounds.json') as json_file:
background_data = json.load(json_file)
# Is this actually a dict?
background_dict = background_data[self.background]["Skills"]
for skill in background_dict:
current_score = getattr(self, skill)
new_score = str(current_score + 2)
setattr(self, skill, f"{new_score} (Prof)")
with open('jobs.json') as json_file:
job_data = json.load(json_file)
# Is this actually a dict?
job_dict = job_data[self.job]
proficiencies = job_dict["Proficiencies"]
job_skill_list = job_dict["Skills"]
for skill in background_dict:
if skill in job_skill_list:
job_skill_list.remove(skill)
for each in range(proficiencies):
proficient_skill = random.choice(job_skill_list)
job_skill_list.remove(proficient_skill)
current_score = getattr(self,proficient_skill)
new_score = str(current_score + 2)
setattr(self,proficient_skill,f"{new_score} (Prof)")
def job_characteristics(self):
with open('jobs.json') as json_file:
job_data = json.load(json_file)
hit_die_value = job_data[self.job]["Hit Die"]
setattr(self,"hit_die",hit_die_value)
starting_hp_value = job_data[self.job]["Starting HP"]
setattr(self,"starting_hp",starting_hp_value)
#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
# def stat_moves(self):
# finished = False
# while not finished:
# move_request = input("Would you like to move any of these stats around? (y/n)").lower()
# 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_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):
# stat_1_value = getattr(self, stat_1)
# stat_2_value = getattr(self, stat_2)
# setattr(self, stat_1, stat_2_value)
# setattr(self, stat_2, stat_1_value)
# self.update_stat_block()
# print(self.whoami)
# print(self.stat_block)
# elif move_request == "n":
# finished = True
#Currently only used for the stat_moves functionality. Disabling for now
# def update_stat_block(self):
# self.stat_block = (f"Stat Block\n---------\nCharisma: {self.charisma}\nConstitution: {self.constitution}\n"
# f"Dexterity: {self.dexterity}\nIntelligence: {self.intelligence}\n"
# f"Strength: {self.strength}\nWisdom: {self.wisdom}")

212
jobs.json

@ -0,0 +1,212 @@
{
"Artificer": {
"Proficiencies": 2,
"Skills": [
"arcana",
"history",
"investigation",
"medicine",
"nature",
"perception",
"sleight_of_hand"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Barbarian": {
"Proficiencies": 2,
"Skills": [
"animal_handling",
"athletics",
"intimidation",
"nature",
"perception",
"survival"
],
"Hit Die": "1d12",
"Starting HP": 12
},
"Bard": {
"Proficiencies": 3,
"Skills": [
"acrobatics",
"animal_handling",
"arcana",
"athletics",
"deception",
"history",
"insight",
"intimidation",
"investigation",
"medicine",
"nature",
"perception",
"performance",
"persuasion",
"religion",
"sleight_of_hand",
"stealth",
"survival"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Cleric": {
"Proficiencies": 2,
"Skills": [
"history",
"insight",
"medicine",
"persuasion",
"religion"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Druid": {
"Proficiencies": 2,
"Skills": [
"animal_handling",
"arcana",
"insight",
"medicine",
"nature",
"perception",
"performance",
"persuasion",
"religion",
"survival"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Fighter": {
"Proficiencies": 2,
"Skills": [
"acrobatics",
"animal_handling",
"athletics",
"history",
"insight",
"intimidation",
"perception",
"survival"
],
"Hit Die": "1d10",
"Starting HP": 10
},
"Monk": {
"Proficiencies": 2,
"Skills": [
"acrobatics",
"athletics",
"history",
"insight",
"religion"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Paladin": {
"Proficiencies": 2,
"Skills": [
"athletics",
"insight",
"intimidation",
"medicine",
"persuasion",
"religion"
],
"Hit Die": "1d10",
"Starting HP": 10
},
"Ranger": {
"Proficiencies": 3,
"Skills": [
"animal_handling",
"athletics",
"insight",
"investigation",
"nature",
"perception",
"stealth",
"survival"
],
"Hit Die": "1d10",
"Starting HP": 10
},
"Rogue": {
"Proficiencies": 4,
"Skills": [
"acrobatics",
"athletics",
"deception",
"insight",
"intimidation",
"investigation",
"perception",
"performance",
"persuasion",
"sleight_of_hand",
"stealth"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Sorcerer": {
"Proficiencies": 2,
"Skills": [
"arcana",
"deception",
"insight",
"intimidation",
"persuasion",
"religion"
],
"Hit Die": "1d6",
"Starting HP": 6
},
"Warlock": {
"Proficiencies": 2,
"Skills": [
"arcana",
"deception",
"history",
"intimidation",
"investigation",
"nature",
"religion"
],
"Hit Die": "1d8",
"Starting HP": 8
},
"Wizard": {
"Proficiencies": 2,
"Skills": [
"arcana",
"history",
"insight",
"investigation",
"medicine",
"religion"
],
"Hit Die": "1d6",
"Starting HP": 6
},
"Blood Hunter": {
"Proficiencies": 3,
"Skills": [
"acrobatics",
"arcana",
"athletics",
"history",
"insight",
"investigation",
"religion",
"survival"
],
"Hit Die": "1d8",
"Starting HP": 8
}
}

10
main.py

@ -0,0 +1,10 @@
import creation_engine
hero = creation_engine.HeroCreation()
print(hero.whoami)
print(hero.stat_block)
print(hero.additional_stats)
print(hero.skill_bonuses)

4282
master_class.json

File diff suppressed because it is too large Load Diff

3177
names.txt

File diff suppressed because it is too large Load Diff

803
races.json

@ -0,0 +1,803 @@
[
{
"Race": "Aarakocra",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Aasimar",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 2
},
{
"Race": "Aasimar (Fallen)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Aasimar (Protector)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 2
},
{
"Race": "Aasimar (Scourge)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Alseid",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Aven (Hawk)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Aven (Ibis)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Bugbear",
"Strength": 2,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Centaur",
"Strength": 2,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Dwarf (Duergar)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Dwarf (Hill)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Dwarf (Kaladesh)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Dwarf (Mountain)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Dragonborn",
"Strength": 2,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Dragonkin (Edjet/Soldier)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Dragonkin (Flame/Fire)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Dragonkin (Stone/Cave)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Dragonkin (Wave/Tide)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 2
},
{
"Race": "Dragonkin (Wind/Storm)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Elf (Drow)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Elf (Eladrin, High)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Elf (Kaladesh)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Elf (Sea, Shadar-Kai)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Elf (Shadow Fey)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Elf (Wood)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Elf (Zendikar Joraga)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Elf (Zendikar Mul Daya)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Elf (Zendikar Tajuru)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 1
},
{
"Race": "Firbolg",
"Strength": 1,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Genasi (Air)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Genasi (Earth)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Genasi (Fire)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Genasi (Water)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Githyanki",
"Strength": 2,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Githzerai",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Gnoll (Civilized)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Gnoll (Savage)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Gnome (Deep, Forest)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 2,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Gnome (Rock)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 2,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Goblin",
"Strength": 0,
"Dexterity": 2,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Goblin (Ixalan, Zendikar)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Goliath",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Halfling (Lightfoot)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Halfling (Stout)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Half-Orc",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Hobgoblin",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Human",
"Strength": 1,
"Dexterity": 1,
"Constitution": 1,
"Intelligence": 1,
"Wisdom": 1,
"Charisma": 1
},
{
"Race": "Kenku",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Khenra",
"Strength": 1,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Kobold",
"Strength": -2,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Kobold (Midgard)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Kor",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Lizardfolk (Southlands)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Lizardfolk (Volo’s)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Merfolk (Cosi/Trickster)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Merfolk (Emeria/Wind)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 1
},
{
"Race": "Merfolk (Ula/Water)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 2,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Merfolk (Ixalan Blue)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 2,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Merfolk (Ixalan Green)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 1
},
{
"Race": "Minotaur (Amonkhet)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Minotaur (Midgard, Southlands)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Naga",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Orc",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": -2,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Orc (Ixalan)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Ravenfolk",
"Strength": 0,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Shifter (Beasthide)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Shifter (Longtooth)",
"Strength": 2,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Shifter (Swiftstride)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Shifter (Wildhunt)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Siren",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Tabaxi",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Tiefling",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Tiefling (Dispater, Glasya)",
"Strength": 0,
"Dexterity": 1,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Tiefling (Feral Variant)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Tiefling (Fierna)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 2
},
{
"Race": "Tiefling (Levistus)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Tiefling (Zariel)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Tiefling (all other MTF)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Triton",
"Strength": 1,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 1
},
{
"Race": "Trollkin (Night Whisper)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Trollkin (Stonehide)",
"Strength": 1,
"Dexterity": 0,
"Constitution": 2,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Vedalken",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 2,
"Wisdom": 1,
"Charisma": 0
},
{
"Race": "Werelion",
"Strength": 1,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 2,
"Charisma": 0
},
{
"Race": "Vampire (Ixalan)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 0,
"Wisdom": 1,
"Charisma": 2
},
{
"Race": "Vampire (Zendikar)",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 2
},
{
"Race": "Warforged (Juggernaut)",
"Strength": 2,
"Dexterity": 0,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Warforged (Skirmisher)",
"Strength": 0,
"Dexterity": 2,
"Constitution": 1,
"Intelligence": 0,
"Wisdom": 0,
"Charisma": 0
},
{
"Race": "Yuan-Ti Pureblood",
"Strength": 0,
"Dexterity": 0,
"Constitution": 0,
"Intelligence": 1,
"Wisdom": 0,
"Charisma": 2
}
]
Loading…
Cancel
Save