Wednesday, February 9, 2022

Google Sheets Character Generator for Hyperborea 3rd Edition

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.

Somewhere along the way, we developed the habit of using a Google Sheets file to keep track of our PCs for the various games we've been playing. It turned out to be really convenient for online games, because you can have just one doc that everyone can use and each just keep their character sheet on a different tab. You can have one template tab that contains the layout, and just make additional tabs that are duplicates of the template as needed.

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 container to run the generator as a REST API here. I have also published the package to pypi so people can do whatever with it, and I plan to continue adding more stuff like 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 E137 [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 K137 [Default = 3]

Subclasses: Select an option by clicking the arrow in Q137 [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.

Game On!


UPDATE 2023-02-20: Heroku recently eliminated their free tier for hosting apps. As a result, I've needed to find a new host to run the character generation app. Luckily I've found a good home for it at

Additionally, I've made some enhancements to the generator:

  • Name generation
  • Age, height, weight
  • Eye colour, hair colour, complexion
  • Secondary skill
  • Languages
  • Spells have hyperlinks to the spell description for fast lookup (so cool!)


Play Report: Broodmother Skyfortress

I found this in draft form from April 2017... nearly 5 years ago! It is incomplete, but I no longer remember many details about this adventure, other than that it was very fun. I release it as-is!


Original text begins below