ProcJam Entries, NaNoGenMo, and my Generated Generation Guidebook

ProcJam happened last month, pulling together lots of different awesome things:


Screen Shot 2015-11-26 at 3.47.25 PM

A procedural château generator (or perhaps you’d prefer a procedural Palladian façade generator). A Twitter bot that tweets about odd clothing combos.

Ordovician generates strange sea-creatures that swim across your screen:

Screen Shot 2015-11-26 at 4.37.57 PM

But I was most fascinated by the pieces that do procedural work with words. K Chapelier’s Stochastèmes generates new words based on the poetic corpora (such as thurweedlesoe when I picked Wordsworth, and woulders).


Balade is Windows-only, so I wasn’t able to play it, but the screenshots give a sense of the French cityscapes it generates through words: you can choose streets to travel and receive small descriptions of these places.

Paradise Generator uses random text combinations to suggest a variety of possible paradises: a fairly light level of procedural generation, but using some well-selected components. At least, my first couple of paradises were quite interesting.

Servitude plays a bit more like a traditional game, though it claims there are various randomized elements.

Or there’s Mainframe, a procedurally generated horror game by Liz England and Jurie Horneman. I didn’t manage to win it (maybe I just didn’t persist long enough; I’m not quite sure), but it combines the body horror and malevolent AI themes I associate with a lot of Liz’s stuff. (Maybe unfairly? Yes, maybe unfairly.)


Meanwhile, ProcJam was not the only place for a bit of procedural generation this month. NaNoGenMo was the full-month press to procedurally create 50,000 words – 50,000 words of anything, not necessarily guaranteed to make sense.

Carolyn VanEseltine used Markov techniques and a ChoiceScript grammar to make an interactive generated novel, complete with choices, chapters, and stats.

Nick Montfort created a generated poem about consumerist impulses, one that offers us 126 pages of possible purchases such as “a subtle indigo topcoat that is exclusively available here” or “an understated navy thong that is significantly reduced in price”. created a work based on Around the World in 80 Days mashed up with information from Wikipedia, which produces many many paragraphs like this:

Moving on, we arrived at London South Bank University. If I remembered correctly, this was founded in 1892 as the Borough Polytechnic Institute. Passepartout asked me if it was chosen to be clerk to the Governing Body, but I did not know. Passepartout examined the training and demonstrating Centre for Efficient and Renewable Energy in Buildings (CEREB). Passepartout explained how it had been designed to include two Thames barges set above a pentagon surrounded by five other pentagons. We moved on, disappointed by stricter student visa requirements in the United Kingdom.

The full repository of other creations can be found at the NaNoGenMo 2015 site, coordinated by Darius Kazemi.


Exploring the resources associated with NaNoGenMo and ProcJam brought me to this forum on generative text, and from there this video by Kenneth Goldsmith on conceptual writing, which gives an above-average explanation of what’s interesting about procedural writing in its own right.


Not really part of either of those things, Caelyn Sandel and Carolyn VanEseltine have a game idea generator that randomly combines concepts they’ve had for their works into new concepts. And of course Juhana Leinonen’s IF Name Generator is a classic, but it has been newly updated with name lists from IF Comp 2015 to remix those titles.


So. I thought about doing NaNoGenMo or ProcJam or somehow sort of doing both. ProcJam is so open-ended with its “make a thing that makes things” concept that almost anything could probably be construed to be a part of that project. And I’ve also got several procedural text game projects that have been knocking around unfinished for ages. What I ultimately wound up doing was sort of related but in fact none of the above.

Parrigues1The Annals of the Parrigues (warning! PDF!) is a (mostly) procedurally generated guidebook to a fictional pseudo-English kingdom, along with a making-of commentary on the process of generation. There are also some portions of the code (though I’m not releasing the whole source at this point, and indeed it wouldn’t really be meaningful to do so, as you’ll see if you look at the thing). It’s not an interactive piece of fiction at all, though it was built with various tools including Inform. Rather, it’s a story I wrote with the machine. If you want to know where to find the biggest library in the kingdom, what type of meal to avoid at the Fenugreek and Sponge, or why people keep trying to assassinate the Duchess of Inglefunt, this one’s for you.




25 thoughts on “ProcJam Entries, NaNoGenMo, and my Generated Generation Guidebook”

  1. What’s the logic to the footnotes?

    The Adam de Savage thing seems particularly curious; did you have the footnote written as a whole and then attached itself to the “most evil” of the people mentioned in the document?

    1. As it happens, I didn’t put my thumb on the scales there at all. It is the output I got from a template of the form “[first name] [last name] is a [thing that’s bad to be in this town]. [next footnote from list of footnotes about slander].” So it would have attached itself to whoever got written up next, and the fact that anyone was named Adam de Savage was total chance. (The name corpora were also scraped from elsewhere, so it’s not like I put those names into the system by hand, either.)

      1. But there is a specific “footnotes about slander” list? Are those footnotes themselves at all related to the main text? Are they written as a whole, or are the individual elements somehow made at random? (I partly ask because even though that particular footnote is long, I don’t see how it would “break up” into smaller parts.)

      2. So the making of kind of gets into this, but the elements for the engine include

        — a bunch of little-bits corpora (lists of everything from types of decorative stone to dated events from the Anglo-Saxon Chronicles);
        — some specialized systems for producing descriptions of things like beer, cake, social customs, etc;
        — a bunch of standard templatized sentences;
        — some longer chunks that were meant to be used once but in any order as appropriate; so a lot of the province introductions fall into that category, and many of them did have some elements that were still randomized;
        — and then some elements that were handwritten and meant to be used once and in the order defined, in order to provide a narrative development. The footnotes were mostly written whole and in the used once/order defined category.

        If one wanted to diversify the handwritten stuff, I could see running it through a synonymizer and then having a human rubber-stamp the valid outputs and folding them back into the generation corpora, but I wasn’t producing *enough* text here for that to feel worthwhile in this case.

      3. Gotcha. I did read the making-of stuff so I understood about the Anglo-Saxon Chronicle stuff, but I couldn’t figure out how it worked with the footnotes specifically (which, including that particular one, seemed composed whole).

      4. Initially I was planning for those sorts of elements to be the only source of narrative arc in the story, but when I saw some of the interplay of arc content and generated content in the later chapters, I decided to mess with the ending a bit more.

  2. The Annals are enjoyably immersive, and remind me favorably of the writing of Jack Vance in their baroque descriptions of idiosyncratic cultures and locales. I am moved to invest in the purchase of a mohair snood, and look forward to seeing more procedural content in IF!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: