An app for creating randomly-generated characters for the Hyperborea 3rd edition tabletop roleplaying game.
$ python -m pip install hyperborea3
The main entry point to this application is the PlayerCharacter
class. By default, a random character will be generated with the following options:
from pprint import pprint
from hyperborea3.player_character import PlayerCharacter
pc = PlayerCharacter()
pprint(pc.to_dict())
See Sample Output for some examples of what the generated characters look like.
Parameter | Description |
---|---|
method |
int, default 3 Dice method used to roll ability scores. Allowed Values: If no class_id is passed, 1 , 2 , 3 , 4 , 5 may be used. If a specific class_id other than 0 is passed, any value passed is ignored and method=6 is automatically used.Example: pc = PlayerCharacter(method=5) to create a random-classed PC using dice method V for rolling ability scores. |
class_id |
int, default 0 If 0 , a random class will be selected and dice methods 1 through 5 can be used. Otherwise, a value of 1 to 33 can be entered, and the dice method will automatically be set to 6, regardless of what is passed.Allowed Values: 0 through 33 . See class_id_map below.Example: pc = PlayerCharacter(class_id=10) to create a Ranger. |
subclasses |
int, default 2 Determines which classes are selected from when generating a character of a random class. Allowed Values: 0 =Principal classes only (Fighter, Magician, Cleric, Thief); 1 =Principal classes plus subclasses; 2 =Principal classes, subclasses, and variant subclasses like the Ice Thief and Fell Paladin.Example: pc = PlayerCharacter(subclasses=0) to create a random character from one of the 4 principal classes. |
xp |
int, default 0 The number of experience points the character has. This will determine the character's level, which is capped at 12. Allowed Values: Any positive integer Example: pc = PlayerCharacter(class_id=1, xp=4000) to create a 3rd-level Fighter. |
ac_type |
str, default "descending" Choose whether to use ascending or descending AC system. Allowed Values: "descending" , "ascending" Example: pc = PlayerCharacter(ac_type="ascending") |
Check out the directory of sample characters to examine and explore the data structures.
class_id_map
Use this as a reference if you need to pass class_id
to generate a character of a specific class.
1: "Fighter"
2: "Magician"
3: "Cleric"
4: "Thief"
# --------------> subclasses=0 will return a choice from above this line
5: "Barbarian"
6: "Berserker"
7: "Cataphract"
8: "Huntsman"
9: "Paladin"
10: "Ranger"
11: "Warlock"
12: "Cryomancer"
13: "Illusionist"
14: "Necromancer"
15: "Pyromancer"
16: "Witch"
17: "Druid"
18: "Monk"
19: "Priest"
20: "Runegraver"
21: "Shaman"
22: "Assassin"
23: "Bard"
24: "Legerdemainist"
25: "Purloiner"
26: "Scout"
# --------------> subclasses=1 will return a choice from above this line
27: "Fell Paladin"
28: "Ice Lord"
29: "Fire Lord"
30: "Death Soldier"
31: "Mountebank"
32: "Fire Thief"
33: "Ice Thief"
# --------------> subclasses=2 will return a choice from above this line
I developed this package to generate characters for my personal gaming group. I use the package along with FastAPI and host the app on render. I use it in conjunction with Google's app script (javascript) to get the character data from the REST endpoint, and populate it into a Google Sheets character sheet. It's a bit janky, but it gets the job done for us. I put a lot of work into implementing the rules to generate characters of any class and any level up to the game's maximum of level 12.
App on render: All the endpoints prefixed with /hyperborea3/
use this package. If you are curious about the container that gets deployed, see this repo.
Google Sheet: with character generator integrated via Google's Apps Script. If you are intersted in simply making a copy of the Google Sheet character generator for your gaming group to use, see this blog post for instructions on how to do that.
Web-based Print-and-Play Character Generator: Generate a character using the dropdowns to set options. Note that if you generate a specific class, the dice method automatically changes to VI
. You should be able to fit the resulting character sheet on a single printed page. In my own experimentation, I've needed to set the scale to 70% to get everything to fit. Enjoy!
Pull requests for small updates and bug fixes are always welcome. If you have a larger update you're interested in contributing, please create an Issue and we can have a conversation about it. If you are a talented front end developer and are interested in creating pretty web tools for this, I'd love to do whatever I can to help you!