Nexi Random Word Generator

Fragment of a sceenshot of the Nexi.com Random World Generator. Primarily features a 4-column block of nonsense words like 'topedic' and 'othemoboa' in all caps, under a header reading 'Your Freshly Minted Words'.

I really do intend to post more frequently than this, but I got really wrapped up in unnecessary and self-indulgent aesthetic changes. Honestly, that's a big part of why I started a site in the first place.

Anyway. Are you familiar with the Random Word Generator at Nexi.com? Created way back in 2004 by Sean Puckett, this little tool takes a submitted mass of text, looks at the letter selections and sequences, and outputs a set of 100 new words based on the patterns it recognizes. I think anybody who's into TTRPGs will recognize that this is massively useful for creating names for fantasy settings and such.

A really easy way to get good results from the generator is to feed it piles of culture-specific names from Kate Monk's Onomastikon—another excellent old roleplay resource, this one going back to 1997! Mixing names from two or three different cultures also works great. And of course you can do the same with names from fictional sources, or text blocks of regular words.

The generator's output is all-caps, and arranged in a set of space-separated columns, and I don't really find that ideal, so naturally I've created a spreadsheet tool to reprocess it.

Nexi output processor

Here's how it works: First, make your own copy of the spreadsheet so that you can edit it. Then, you just paste your Nexi-generated text into the blue cells. The output in the green cells will be arranged in a single column, changed to standard capitalization, sorted alphabetically, and deduped.

Random generator spreadsheets

Fragment of a Google Sheets spreadsheet. One column lists catagories of descriptive elements: head, horns, body, color, detail, detail. The next column, marked roll, lists a number for each element. The last column, marked result, lists descriptions for each element: goat, tiny spikes all over head, bulging with throbbing organs, dingy white, human hands for feet, 6 legs.

So, my other favorite TTRPG tool is Google Sheets. Spreadsheets in general, really, but the convenience of Google Sheets (and Google Drive, etc.) has me pretty solidly hooked into that ecosystem. Anyway, I'm a huge fan of generating RPG stuff by rolling on loads of tables—I really oughta do a whole post about Jennell Jaquays' Central Casting books, someday—and you can make that process a hell of a lot faster and more flexible by building your tables in a spreadsheet and using random number formulas to roll the results for you.

So, here's an example.

Osluth demon description generator

The irrelevant backstory here is that I was running a dungeon that had Orcus cultists accompanied by these demon goats, and in addition to recasting Orcus as a death god named Osluth, I decided the demon goats needed more varied and fucked up appearances.

Anway, I'd like to explain how this whole thing works, and it will hopefully be useful to the narrow sliver of humanity who wants to make random generators, and has some knowledge of how spreadsheets work, but doesn't already know how to do all of this stuff. And who actually encounters this post somehow.

The box on the left contains the actual generated description of the beast, while the rest of the spreadsheet comprises tables of possible results. The blue values are generated by formulas, while the black text is all static values. If you reload the spreadsheet, all of the random number formulas will reload, produce different numbers, and effectively roll up a new description. Reloading is kind of slow, though. It's better to just copy the sheet for yourself (File > Make a Copy) and click that green checkbox in the corner. The checkbox doesn't really do anything-it's just a TRUE/FALSE field that's not connected to anything else on the sheet-but all of the randomizers trigger every time something changes, so it functions as a handy reroll button.

Here's how it works. Each of the subtables in the sheet has three columns of numbers: chance, min roll, and max roll. "Min roll" and "max roll" are just the range of numbers that produce a given result, just like on a regular dice table. "Chance" is what determines how big that range is. The first min roll value in a table is always 1, so there's no formula generating that. Each max roll value is (min roll + chance) - 1, making the total range for a given result is equal to the chance value. Min roll values after the first are always just the previous line's max roll + 1.

So that first subtable—the one that generates the demon's head—is just a 1d17 dice table. It's four times as likely to produce a goat head as an ox head, because the "goat" result comes up on a roll of 1–4, while "ox" only comes up on a roll of 7.

Here's how we get the spreadsheet to roll a d17. The "roll" column of the description generator is produced by formulas like this: RANDBETWEEN(1, SUM(F:F)). That SUM(F:F) part just adds up the contents of column F. That's the "chance" column of the head subtable, and it sums up to 17, which is of course the same value as the maximum roll on that subtable. RANDBETWEEN(1, SUM(F:F)) generates a random number between 1 and the sum of column F, so it's effectively rolling 1d17. Each cell in the roll column looks at the chance column of a different subtable, and generates a number between 1 and that subtable's maximum roll.

The "result" column interprets the rolls using formulas like this: VLOOKUP(C2, G:I, 3, TRUE). What this means is that it takes the value in cell C2 (the "head" roll), and looks it up on the table in columns G though I (meaning "min roll", "max roll", and "head" in the head table), and returns the matching result in the 3rd column of that range (the "head" column). The TRUE at the end there tells the formula to do an "approximate match", meaning that it will treat the column G values as minimum thresholds to match: A roll of 10 will match the value 8, and produce a result of "boar". If that TRUE argument was instead set to FALSE, the formula would be in "exact match" mode, and a result of 10 wouldn't match anything. (Note that the VLOOKUP formula doesn't actually look at the max roll column at all; it's just the min roll one that matters. I only create those max roll columns because I like to see the actual range.)

You might notice one slightly odd entry at the right side of the sheet: The 8 result on the "detail" subtable has its own little random generator inside it, using this formula: MIN(RANDBETWEEN(5, 9), RANDBETWEEN(5, 9))&" legs". So we've got two RANDBETWEEN functions, each one generating a result between 5 and 9. The MIN function looks at the two results and picks the smaller one. The &" legs" at the end there just appends " legs" to the resulting number. So the goat demon that gets this result has between five and nine legs, with smaller numbers being more common than large ones.

I could get into more advanced stuff here, but that would call for a whole new custom example spreadsheet, and this post is already too long. Anyway, I hope it's actually useful for somebody!

The luck roll

1 No, and... - 2 No. - 3 No, but... - 4 Yes, but... - 5 Yes. - 6 Yes, and...

I'm going to start this site off by talking about my favorite TTRPG tool, the luck roll. Loads of groups do something along these lines, but here's mine.

This is a procedure for resolving those questions that can't be answered by the established fiction, the GM's notes, or the player characters' actions—things like "Is there a fire extinguisher handy?" or "How many patrons are in this bar?" or "Did anyone notice all the commotion we just made?" First, you rephrase the question in yes-or-no format, so something more like "Is the bar crowded?" I kinda prefer to ask in a way that makes "yes" the better result for the player characters, but that's not really important.

Then, you just roll a d6 and interpret the result as follows.

1 No, and...
2 No.
3 No, but...
4 Yes, but...
5 Yes.
6 Yes, and...

The "and" results intensify the answer. The "but" results mitigate it. For example:

"Is there a fire extinguisher handy?" "No, and there isn't one in the whole building."
"Is the bar crowded?" "Yes, but you don't know anyone here."

It's extremely simple, but easily applied to an infinite range of situations. As a GM, I find it really fun to fill in those and/but details. I also love to roll a die and find our whole game taken in a new direction by the result.

I also use the luck roll during session prep to come up with background details, and occasionally base other random-roll tables on the same basic format. For example, I had my players roll on this "Do I escape the trap?" table when they wandered into a dungeon room with a falling cage trap.

d6 Do I escape the trap?
1 No, and you're hit by the cage for 2d10 bludgeoning damage, and stuck inside it.
2 No. You're stuck inside the cage.
3 No, but you're near the cage wall as it falls, and notice in time to try to escape. You can make a Dexterity save to jump away, but at a risk: Save result 10-, you're pinned underneath the cage for 4d10 bludgeoning damage, restrained, and prone. Result 10–14, you're hit for 2d10 bludgeoning damage, but escape. 15+, you escape completely.
4 Yes, but you're clipped by the cage's edge or falling debris, and take 1d10 bludgeoning damage.
5 Yes. You're outside the cage when it falls.
6 Yes, and the trap isn't even triggered if everyone in the room rolls result.

I should point out that this idea was very much influenced by FU: the Freeform Universal RPG. That game arranges its results slightly differently on the die, but it's pretty much the source of that Yes/No/And/But language for me, far as I remember. I've never actually used FU itself, though! Which is a shame, because it looks brilliantly simple.

So, that's the luck roll. It's handy.

So I wanted to have a website again...

Hey, all. I've been getting tired of platform-delivered, algorithm-managed media for a while now, and kind of yearning for the era of personal sites, webrings, hand-coded HTML, and the freedom to build whatever I wanted. So I've been saying—in all my social-media places, like Bluesky and Twitch and whatever—that it's time to return to the Old Ways. Then I watched that recent Homestar Runner "Back 2 a Website" cartoon and I realized it was finally time to actually do it.

So, here it is: The latest version of the Groove Pit—which is what I've called the various incarnations of my personal website since literally some time in the 1990s.

I'll probably mostly put TTRPG stuff here, and arrange it in a blog-like format. I don't think I'll add an actual blog, because content management systems are always vulnerable to hacks, or to comment spam, or to just rotting away over time. But if I build my site out of regular-ass HTML, and NeoCities gets rolled up in some corporate Katamari, I can just take the same files and put them up somewhere else.

That said, I will probably make an RSS feed! RSS is cool; it's absolutely one of those technologies that folks should rediscover.

Anyway, this whole thing is very much a work in progress. I'll spare you the "under construction" animated GIF, though.