Since COVID started about 22 months ago, my friends and I have been playing RPGs on Zoom/Foundry/Owlbear Rodeo/Google Jamboard/etcetera - every Wednesday. When I am Dungeon Mastering™, I've been running HYPERBOREA (formerly known as Astonishing Swordsmen & Sorcerers of Hyperborea). I've really been enjoying the system. It strikes a great balance between fast and easy to run, and lots of crunchy bits to tinker with and discover as you go.
Anyways, as things go, characters die and need to be replenished with fresh new
walking dead slabs of meat characters, so over the winter I built up a character generator and was able to get it linked in to Google Sheets. Luckily, I also got my grubby little paws on the 3rd edition rules in December as well, so I was able to integrate all the latest and greatest stuff. Here is a snapshot of what a freshly generated PC looks like:
If this looks like something you'd be into, below are instructions for accessing my read-only public copy of this sheet, and making a copy for your own personal use.
- Click on this link to open up the public read-only copy of the character generator Google Sheet.
- Click File > Make a Copy to create your own personal copy that now belongs to you.
- Click Extensions > Apps Script to examine the code that retrieves the character data and populates the active sheet. Note that nothing untoward is going on. If you aren't sure, ask a friend. Blind faith is an option as well.
- At the bottom of the Sheets doc, on the tab labeled Template, click the little arrow pointing down and choose Duplicate.
The Template sheet is only there to create more sheets from, and you
should never generate a character on the template. Now that you have a
new sheet created, find the menu item across the top labeled Generate. It should appear immediately to the right of Help. Sometimes you need to wait a few moments for it to appear. Click on that, then click Random Class.
The first time you (or anyone else) accesses this menu item, an ominous
warning will pop up, and you need to grant permissions for the script
to run. Only do this if you have followed the previous step (examining the code), and are
comfortable with granting the permissions. Here's how to do it:
- On the popup that appears saying Authorization Required, click Continue
- Choose the google account you want to use with this sheet, and login if necessary
- On the next window that says Google hasn't verified this app, click the small link on the lower left that says Advanced
- Click on the link that appears below. It should say something like Go to Hyperborea3 Character Generator (unsafe)
- It tells you all the nefarious things that could happen, but again, as you can see by examining the code, the only thing it does is update the active sheet with this Google Sheets doc. Click the Allow button.
- You can now generate characters! Congratulations!
- If you decide not to use this, you won't hurt my feelings. I would personally never use a tool like this from a stranger. 😃
- You can enter an XP amount in the blue-shaded Experience cell, and characters will be generated at the corresponding power level.
- You can select a class from the dropdown in the blue-shaded Class cell, then click Generate > Selected Class to generate a character of a specific class. Alternatively, Generate > Random Class will ignore any selection in the Class cell and generate a randomly classed character.
- If you aren't satisfied with the first character generated, you can continue using the Generate menu to try again. Each time the information will be cleared and a new PC will be populated into the sheet. Be careful not to accidentally overwrite a character you care about!
- Character generation usually takes a few seconds, but can sometimes take up to
30 seconds. Some classes such
as the Ranger, Shaman, and Bard cast spells from multiple schools and to
arrange these items in an easy-to-use layout, the script needs to
merge/unmerge certain cell ranges, add or remove checkboxes... stuff like that, and these
actions aren't very performant. There is a notification at the top that tells you when the script is running, and when it has finished.
- In order for your friends to be able to use your sheet and create their own tabs to generate their characters, you will need to click the Share button on your copy of the Google Sheets document and add them as Editors by their Google accounts in order for them to be able to Duplicate the template sheet and use the Generate menu. They will also need to click through all the security warnings as outlined above. Also, make sure they know not to click Generate while they have someone else's sheet active, or a sheet of their own that they care about. Generating a new character will completely overwrite the active sheet!
- The only automation that exists in the sheet is the initial
character generation. You can update anything you want after that, but
it is up to you to ensure that any other values that would be affected
by such a change are also updated. For example, if you increase your
Strength score, you will also need to manually update your melee attack
bonus, damage adjustment, test, and feat values. If you change your Constitution score, your hit points may be affected and so forth.
- One final note: Once you have clicked Make a Copy,
per the above instructions, the copy is owned by you. This is good
because no one else can go in later and update what the Apps Scripts
code is doing, but it also precludes you from bug fixes or performance
updates. That's just how it is, so be aware of it. If I have any
worthwhile updates to make on the Google Sheets side, I'll update the public copy and make an update note at the foot of this post. If you are interested in the updates, you can use Make a Copy again to get the new version.
I put a TON of hours into this project, making sure all the rules were applied properly for all 33 classes/subclasses across all 12 levels... all so my friends could resume playing faster once their character gets killed. I hope there are others out there that could get some enjoyment from this tool as well. Let me know how it goes!
Blogger comments are a shit show right now, so I've been forced to turn on moderation. I'll do my best to keep an eye and things and let your legit comments through.
Also, if you are a programmer nerd like me and are curious about the inner workings of the character generator, you can check out the python package repo here, and the deploy-to-heroku repo here. I do plan to publish the package to pypi so people can do whatever with it, and I plan to continue adding more stuff like spells and monsters and treasure. It's been a really fun project and I've learned a ton doing it.
Update 2022-02-12: The sheet has been updated with selectable options for AC Type, Dice Method, and Subclasses, which indicates the set of classes selected from when generating a Random Class. Scroll to the bottom of the sheet (row 130) to select these options. Make these selections in the template prior to using Duplicate to have the same settings applied for everyone.
AC Type: Select an option by clicking the arrow in E130 [Default = descending]
- In the ascending AC version, AC values start at 10
(unarmoured) and go up from there. FA is added into all attack modifier
fields in the weapons sections.
- In the descending AC version, FA is not added to the attack bonuses in the weapons section, as it is assumed you guys use THAC0 or the combat matrix, which changes with FA. There isn't currently a spot on the sheet for combat matrix, but if you wanted to add it, the data is there in the pc object in an element called... you guessed it, "combat_matrix".
Dice Method: Select an option by clicking the arrow in K130 [Default = 3]
Subclasses: Select an option by clicking the arrow in Q130 [Default = 2]
- 0 for principal classes only (Fighter, Magician, Cleric, Thief)
- 1 for principal classes plus subclasses
- 2 for principal classes, plus subclasses, plus the subclass variants. These include Fell Paladin, the Warlock variants (Death Soldier, Ice Lord, Fire Lord), and the Legerdemainist variants (Mountebank, Ice Thief, Fire Thief)
Once all your selections are made, use the Generate menu at the top to generate your character.