Weaving Worlds
I've been tinkering around with procedural generation for a while. I have always liked the idea of modelling worlds to create emergent content. It's a staple of a lot in video games, to create variety (or the illusion of variety). It's obviously a descendant of random tables in TTRPGs in a lot of ways but I don't often see good procedural gen in TTRPGs. I'm not sure if I've done it well mind you, but Loom is my attempt.
Loom is a suite of procedural content generators. "Random generators" but not random exactly, they follow defined rules. Right now Loom only generates names and planets (quite the spectrum) but I intend to expand generation to include alien species, settlements, space ships, characters, groups and more. The underlying rules and the resulting output is tuned to the Novos SciFi setting. I want this both for myself and to create a suite of tools for storytellers who want to make Novos content.
Why?
A few reasons. The biggest is because I often get hung up on key steps in the creative process. Naming is a good example because I want the names of my characters and locations to make sense in the context of the setting. Yeah, I could just randomly generate a name but names aren't random. The name of a character should reflect their culture, their species, their background. To contradict the bard, a rose by any other name is the wrong name. Rose comes with connotations as do all names.
And on the opposite end of the scale, when I need a planet for my SciFi setting, I cannot afford to spend days or weeks humming and hawing over the science of it. I slip down rabbit holes every time and, inevitably, lose all momentum. Being able to generate a planet within a set of complex but not overwhelming rules lets me stay on task and also lets me add more depth to my setting without losing weeks to the calculus of exoplanets.
The other reason to do it is because my brain tends to work in rules and structure and permutation so procedural generation let's me work at that level. It's somewhere between useful and a distraction from making actual content. Win some lose some.
Why not just use something existing?
Yeah I could use random tables or excel or build in Perchance or other tools but creating my own seemed like an interesting challenge and I had a lot of ideas that didn't fit neatly into an existing tool. Creating my own lets me embed my logic deeper in the design. I know some people use LLMs for this sort of stuff but I have found that they are surprisingly terrible at being actually random. You can see this if you ever try to get a list of names or generate an NPC; the same names show up over and over along with tropes and other stale ideas. Even if I cared to devise a prompt to mitigate this and provide the substantial amount of context needed to convey the rules and traits of my setting to an LLM, I want something I have more control and insight into. I think LLMs might be useful later in the process but procedural generation is better expressed in traditional code.
What does it do?
Loom is a suite of tools for generating content that embeds a variety of setting-specific rules for managing output.
Procedural Generators:
- Planet: This tool generates a detailed exoplanet profile using a complex 20 step process behind the scenes that takes into account stellar conditions, physical features, orbital characteristics, material composition, atmosphere, temperature, climate, moons/rings, biosphere, resources, habitability, features and more. There's about 10k lines of code between the configuration and validators and it's not done yet. The goal is to create plausible and interesting planets without trying to simulate planetary formation and evolution directly. Not every world will make sense but the goal is to make most of them at least scientifically plausible. Oh and it generates images too! Stylized assets for my galaxy map, or some future version of it. Also because it's neat! The visualization logic uses to use the traits of the planet to inform the visualization. It's not always right but I'm also working on giving users more direct control over visualizations as well. I might wait on that until I'm more satisfied with the render process.
- Moon: Like the planet generator but this one lets you set parent properties and takes into account moon-specific processes like distance from parent and the effect on tidal heating. It also automatically filters sizes. Work in progress so likely has issues.
- Species: This tool generates detailed fictional species. The intention is to give the user control but help them create full creature profiles that are based in some sort of inherent logic without constraining all creatures to terran norms. It has a slider for setting how 'alien' you want the output to be and I have significant plans for a more advanced mode that lets the user select what they want then have the tool 'fill in the blanks'. Also a Work in Progress.
- Name: Novos is a future setting with its own cultural composition and several novel species so a tool to generate names that make cultural and contextual sense seemed appropriate. Lets you select the species, subspecies, faction, subfaction,
- Character: A tool for creating characters that fit the setting, using the Praxis TTRPG system as an underlying structure to inform context aware narrative descriptions. Covers everything from teh high level Aspects and Skills, down to Traits, Gear, and Narrative descriptions. Work in progress but in a pretty good state.
For each of these the tool provides the info in UI form but also as YAML, JSON, or in the case of visualizations .PNG. The output stage is the one I've put the least time into though so it likely has bugs. Currently Loom is embedded in Syneti.ca but I've built it so that I can spin it out into a downloadable desktop tool at some point as well, if there is any interest and once it's closer to complete.
I have lots of other plans for it as well. Colonies, space stations, ships, more visual elements, etc... the big one is a system generation mode which would generate a full Novos star system with planets, moons, stations, characters, but that sort of relies on everything else being built.
You can check it all out here: Loom