Interview with Creator of Space Hulk Map Gen
Map Gen Interview Creator Interview Futuristic Tools

Interview with Creator of Space Hulk Map Gen

Duncan Thomson
I think for me it's the insight that noise isn't bad. Previously I worked a lot in signal processing where we always tried to remove noise. While creating the generator, I had that eureka moment where I recognized that it's basically a noise generator.

Learning more about making of the Space Hulk Map Gen with David, its creator.

Q&A With Creator of Space Hulk Map Gen

What inspired the Space Hulk map gen?

Wrath & Glory (W&G) and Python - I really enjoy playing with both. In my day job as a software engineer, we had little Python expertise in the team and so I started "home projects" to ramp up my Python skills.

My first program aimed to find the best skill point distribution for W&G by minimizing the spent XP. This was more of a math problem, to get back on track with linear programming. I ended up recognizing that this is neither linear nor an easy problem. But I found a solution as a mixed-integer non-linear programming problem and solving it with the amazing GEKKO lib. Ultimately the use in the game was limited, but it was a fun math problem to solve and told me the basics about hypermodern DevOps in Python on the fly.

When Cubicle 7 released Redacted Records with the random tables for space hulks, it was a no-brainer to pick it as the next project. I started coding the bare generator, but I didn't go for "just" some random events from a table. I wanted to create a high resolution layout of the space hulk that could be used by game masters (GMs) to navigate their players. The problem was, that there are very nice map generators (like Donjon's work, or more scientific stuff like Marahel), but these only create random Bitmaps where it's not possible to specify the number & size of the rooms in advance.

However this was the main aspect of my project! I had a list of rooms with relative sizes (e.g. vast hanger vs. med bay). In addition, I expect most space hulks to have a very regular layout, so hallways should be fairly straight and rooms fairly rectangular - both not properties that bitmap generators easily create. So I was looking for a solution to place rooms and specify connections.

Of course, being an nerdy computer scientist, the obvious solution was: Graphs!

At the time I worked quite a lot with Mermaid which is amazing for architecture-as-code but its routing isn't very flexible. Dot/Graphviz on the other hand is quite bulky and non-descriptive, but has an absolutely amazing set of layout routines. The spring-force model avoids overlap of the nodes (aka rooms) and their size is easily specified. Edges (hallways) can be routed rectangularly and the graph can be stored as a dot string or rendered in several vector formats. There was even a lean Python library!

So there I was with a dot-string generator based on a Scottish company's book - and the world didn't have access to it!

What was the experience like of building the tool in Streamlit?

So I needed a web app to share the generator with the eagerly waiting remainder of the internet.

Since I don't have my own server, I initially thought, I could ask Brother Lucius from Doctors-of-Doom to host it. However, they use JavaScript and interfacing with the page would require additional glue code. My motivation to start JavaScript just for the frontend was non-existing and their time was limited. So I looked around for easy ways of creating and hosting web apps in Python.

And there it was: Streamlit - easy to use, well documented, polished, with Graphviz support. Perfect!

Wait...

That graph doesn't look like my rendered PDF?!

I can't specify the layout engine?

Why is the window much too large for the column width?

After the first peak of inflated expectation, I fell hard into the trough of disillusionment. But I became enlightened and realized that Steamlit was still the way to go as its ease-of-use and the possibility to host the app online directly from GitHub for free. These advantages greatly outweighed the limited support for Graphviz. So I rewrote some part of the script to directly render PDFs.

Overall, I really like Streamlit now. It's limited functionality is actually a feature of a well defined scope.

Have you created any other rpg tools?

Yes, see above - but the optimizer isn't really well polished for public use. Maybe in the future I'll add it to the Streamlit app (This is probably not that easy, as Git submodules aren't currently supported in Streamlit).

What is the most fun thing about creating generators?

Since my sample size for creating a generator is actually 1, I can only answer that very limited and maybe a little stupid.

I think for me it's the insight that noise isn't bad. Previously I worked a lot in signal processing where we always tried to remove noise. While creating the generator, I had that eureka moment where I recognized that it's basically a noise generator.

Moreover, I discovered the whole community over at r/rpg_generators & r/proceduralgeneration and I'm already planning to look into other map generation methods.

Overall, the fun probably is in learning new stuff.

What are the biggest challenges of creating generators?

I think the really hard part in making a good generator is event correlation (or conditional probability if you want). With the C7 tables you already see that. There are some event combinations that do not make much sense, like an Ork vessel occupied by Eldar that want to infect the players. That needs a quite skilled GM to make sense of.

But this is general problem with table-based generators. They just create events on their own but do not take other events from other tables into account. These correlations, however, are important as most often not all combinations are valid.

Unfortunately, they are also very time consuming to create as this is a combinatorial problem. I think GANs (and other generative models) could be one way to tackle that in the future (for example this one). But of course this is a trade-off between control over the output of the generator and consistency of the result.

How do you use random generators yourself?

Mainly for maps or ideas when I'm GM (which I'm not so often ;-) ).

What is the most interesting generator or tool you've seen?

There is really amazing work at r/proceduralgeneration.

Of course donjon's page is epic and the community & collections in r/rpg_generators are also pretty helpful.

Tool-wise I really admire Wave Function Collapse (WFC) due to its power and simplicity. Also, to not only generate maps but also play on them, the HB Token Builder is pretty handy.

What are your next big projects (generators or otherwise) that you can talk about?

As said, WFC is something I find interesting and I want to learn more about. This is definitely on my list for the next projects.

Where can people find you on social media?

Not easily ;-) I'm mainly available over at GitHub      or Reddit.

Is there anything else you would like to talk about?

Song for today: Nine Inch Nails - The Great Below

More Interviews

There are more Creator Interviews.