1. Wayward Terran Frontier: Zero Falls
  2. News
  3. Status of the Frontier

Status of the Frontier

[p]When I released the last update, I got some direct feedback which was honestly the feedback I was already expecting because I have known this was a problem with the game for a long time and wasn't sure how I wanted to resolve it. The game world was designed from the beginning to lean pretty heavily on procedural generation because I always knew we would have a small team, however I had not initially anticipated it would just be me working on this alone, and the game world doesn't feel sufficiently alive.[/p][p]I want the world to have that "alive and busy" feeling of a space full of neat stuff that is going on all around the player. Without that feeling, exploration isn't interesting and players are trapped in a barren desert of fiddling with ship designs and not experiencing an infinite wayward terran frontier. I have always considered a number of different solutions for the problem, but they all were either too small to really solve the problem, or they were too big for a single developer to finish in a human life time.[/p][p]After the last update it was clear this problem had to be solved next.[/p][p]So after much consideration about my life choices I've decided it is either go big, or go home. I chose to go big. I needed to find a way to make an absolutely massive amount of world and story content, with the absolute minimum amount of developer time. I needed to solve some seriously tough engineering problems.[/p][p]I'm pretty sure I'm at least a little autistic, so below you will find a technical explanation of what I've come up with because I like bullet points. However first a summary:[/p][p]I've been grinding away hard at this problem trying to create procedural world generation that will fill an entire galaxy with stuff. I am planning to tack it onto the game as sandbox mode, i.e. open world mode. No main storyline, you aren't the hero or the protagonist, just gonna plop you down as a noobie space captain in a procedurally generated sandbox open world. The goal of all this is to make that world feel alive and interesting and deep, so that exploring the living dynamic open world can be part of the game. So that's the next content update I am working on (sandbox mode), and it is going to be a big one which is why it is taking a while.[/p][p]In the coming weeks I'll try to do another post with more details about the comprehensive list of upcoming changes, because it isn't just procedural world generation.[/p][p]So lets get on to the technical stuff.[/p][h2]Introducing World Engine[/h2][p]What do we do in computer programming when we have a small amount of time to process things, but there are an arbitrary number of them and they need to interact with each other? We build a tree! The solution I came up with is called world engine (Internally. I'm not making it a brand or anything) and it is a layer on top of the procedural galaxy generation in the form of a tree of stories. Lets be more specific.[/p][p]This is what our galaxy looks like right now.[/p][p][/p][p]Every tile in that grid is procedural. An algorithm runs for each grid who's only input is the grid's coordinates. Based on those coordinates the following things are generated by the algorithm[/p]
  • [p]The position of the nearest star (and thus the light info)[/p]
  • [p]the type of that star (and thus some constraints on system generation)[/p]
  • [p]the distance to that star (and thus the temperature)[/p]
  • [p]then some noise samples are taken at the grid's coordinates[/p]
[p] [/p][p]finally with all of that info, terrain such as asteroids and clouds can be placed, the backdrop is chosen, and ideally the content of the system (i.e. the ships and stations and badguys etc) can all be placed. However that last one, the actual content, is the sticking point. What good is it to place a station for the player to interact with if it has no connection to the rest of the world? This would have to be "generic station spawned by random number generation" every single time you find one, and the ships you interact with are no better. It gets worse: I can't begin to use random numbers or noise sampling to build stories here because the entire algorithm runs in a vacuum without any knowledge of what generates in the neighboring systems.[/p][p]In the Zero Falls campaign I initially tried to solve this by just manually placing things at specific grids and coordinates...it was too much, there is too much space to fill...I needed a procedural solution.[/p][p]So the solution is to have another layer on top of procedural terrain generation: the story layer. That's why World Engine primarily takes the form of a tree of stories. Something like this:[/p][p][/p][p]The nodes are represented here in a graph...however in the game each node has a physical location on the map, and a number of grids that it affects. Then each node can have stories added to it. Stories can do things like the following:[/p]
  • [p]place a station[/p]
  • [p]configure the contents of a shop[/p]
  • [p]place agents into a bar[/p]
  • [p]create ships that fly around and do things[/p]
  • [p]generate missions that show up in mission boards[/p]
  • [p]set the prices of trade goods[/p]
[p]However the most important thing that stories (the artificial construct in my code) do, is that they tell their stories (the actual fiction of the game world) by procedurally creating world tree nodes and other stories (code constructs again.) The result is like a book that is trying to write itself by unfolding itself in smaller self-contained subdivisions like chapters, pages, paragraphs, sentences, and then finally words and letters. [/p][p]When you place a star system story, it takes as a parameter how populated the star system is, and what the personalities of its inhabitants might be. Then it places stories one level below it: trade districts, mining operations, populated planets, corporate ventures, military bases warlords, etc. These stories then do the same, with for example a trade district picking vendors from corporations to occupy zones of that district and placing a story for each of their shops. The story for those shops then knows it will spawn a station, and it knows what should be in that station but it continues, creating stories of the jobs that various people need to work at that station, and what types of services are offered etc.[/p][p]A story can be told how many people live in a star system and make procedural decisions about where they might live, and under what circumstances. It places their habitats, and their habitats are stories which then further create the stories of who lives in those habitats. The people who live in those habitats go looking for jobs, and they decide what ship they own, and they set about moving around the system going to work and buying groceries and living their lives inside of a tree of interconnected stories.[/p][p]Hopefully you get the picture. If not, here's what a star system looks like right now:[/p][p][/p][p]Oh and by the way. The entire world generates based off of an sqlite parameters database. Literally everything is in that database (factions, assets, locations, generation rules, recipes etc.) and so my hope is that mod makers will have the option of creating their own parameters database allowing them to define nearly every aspect of the game world for mods. Multiple parameter databases can be loaded for a single world generation so the hope is that you should be able to add and remove mods to configure your world generation the way you want. You can add entire star empires this way.[/p][h2]Development status[/h2][p]So I built this thing in an experimental environment that I've been toying around with for years (more on that later) and started playing around with it. I am proud to say it works great![/p][p]I wanted to make a big blog post bragging about how cool it was, but there was a problem. I immediately began having ideas of new things I wanted to build out of stories. I started playing with them, and I decided a proper announcement would carry more weight if I could show off the things this engine is capable of.[/p][p]Here is a short list of things I have been mucking about with in world engine using stories:[/p]
  • [p]Proper trade skill professions for crafting[/p]
  • [p]data-driven warlords with proper difficulty and loot progression[/p]
  • [p]an entirely new category of loot in the form of a complete rework of artifacts[/p]
  • [p]proper exploration with exp and breadcrumbs and maps[/p]
  • [p]interstellar travel and fuel infrastructure[/p]
  • [p]dynamic faction wars[/p]
  • [p]interstellar economies based on supply chains[/p]
  • [p]living agents that have fully simulated lives[/p]
  • [p]faction reputation tracking and reputation rewards[/p]
  • [p]the entire story of humanity among the stars[/p]
[p]Unfortunately, this post is already disastrously long and each of the above probably warrants an equally long exposition all on its own. That's why I am just going to have to promise to make another post in the future with more information.[/p][p]The reason I have posted this today is because some of these new systems are sufficiently well developed that I am starting internal testing on them. (Internal testing means I'm starting to get some discord people involved)[/p][p]I've got a lot of stories yet to write, and as I write them what I am learning is that this system makes it hilariously easy to come up with a new procedural story that has visible affects across the entire galaxy. I add a few lines to a database table and without further intervention the galaxy is populated with new content. Stations are placed, shops are populated, quests are generated, agents are put into bars. This is exactly the massive force multiplier for content generation that I so desperately needed, and I've been laser focused on building cool stuff in it.[/p][p]Before this can be released onto Zero Falls early access, I need to integrate it properly. That means adding a button to the main menu to start a sandbox mode character, but it also means testing and debugging and tuning stories and making sure it can save and load your progress etc. So if you want an ETA I apologize. I'm 1 guy building a thing that's far too large for 1 guy to be building and the fastest way to build it is to ignore the rabble, avoid arguing with people in forums, keep my head down, slowly kill myself with caffeine, and get the damn thing finished so I can move on with my life.[/p][p]- George[/p]