Hey and welcome to this new devlog where we will go on a secret mission to sneak into the map generator and see how it works.
In Aethermancer we use procedually generated maps for our overworld, that are based on different biomes. If you want to learn more about what our maps in general look like before we get started, feel free to check out this tour of Terastae we did earlier this year. I will keep this non-programmer-friendly since we'll mostly be talking about the logic and system behind all of our maps - so let's get going!
Depending on how you want to generate the map, there are multiple routes you can go. In general there are two types I would distinguish: You can use noise as the base (Minecraft does this) or you can use rooms (most roguelike/roguelites use this). Since we need quite a bit of control over what we generate and how much space we need, we're using a room-based system. However room-based does not mean that you will be trapped in one section of the map, its more used as a base for the generation and will still allow you to roam around the map and explore.
So the first thing we need is a general layout for our map that is based on rooms. Depending on what exactly you want those can look quite different. Below is what one of our maps would look like, which we will use as an example for now. All of our areas have four points at which they can connect: North, East, South, West. Depending on which points are connected, we end up with different shapes for our areas: O-area (1 connection), I-area (2 connections, which are counterparts), L-area (2 connections, which are not counterparts), T-area (3 connections) and X-area (4 connections).
Okay, now we have the basic structure for our maps but if you run across that map, the shapes are a bit ... meh. So instead of using the basic shape of each room, we use something called area prefabs. These contain predefined shapes (and a bunch of other things) which we use to define which part of our room is accessible and inaccessible. We are using a mix of these area prefabs that are then procedurally filled as well as completely hand-crafted, premade areas. For the sake of this devlog we are ignoring premade areas.
But there's one thing about these prefabs that is restricting them. If we have a room that connects North & South we can't use a prefab that connects East & West right? So we would need two different ones. If we now look at O-, L- and T-areas, we would also need 4 different ones just to cover every direction once. That seems like a lot of work so why don't we use a trick and do some sneaky magic to get rid of our problem? The solution we're looking for is rotation. By turning our area prefab we can make it fit for all rooms of the according type. Now we (in theory) only need one are prefab per room type, but if we use more than that it adds even more variety to our map. We use quite a few currently and there's always the option to add more.
Now we have a map that has a defined accessible area. Which is cool but ... we actually need to decide what goes where and how we want to fill the whole map? If we just filled it with tiles depending on if it's accessible/inaccessible that would be really boring ... and we don't do boring at this company so let's make this map pretty! For that we're using subbiomes which define how a room gets filled in terms of terrain and props. So depending on what subbiome and what area prefab we use, we end up with different rooms, which is pretty neat. Now that the accessible part looks cool, let's get to work on the inaccessible part!
So the first thing we'll need to do is determine how much of the inaccessible part of the map we actually need. There's little use in generating a bunch of things on the other side of the map if no one is ever going to see it, because they can't get there. So we're simply going to extend our current outer border depending on how much space you can usually see on the camera.
Let's figure out what cool stuff to place and where we want to put it. We could come up with a general structure of what we want the inaccessible area to look like and place that everywhere but again ... that's kinda lame. So let's divide the outer area into chunks, we're using the lazy flood fill for that. The nerds that want to learn more about how it's done can check out this video, for everyone else: We now simply have multiple smaller areas we can work with instead of one large one.
Previously I mentioned that the subbiomes have more information stored in them, among other things they also store what type of inaccessible subbiome can be placed next to them. This enables us to place inaccessible subbiomes with more intent so that things feel well placed instead of misplaced. Each biome can have its own type of border (e.g. water or fences) as well as a collection of different props that get placed in the area.
Okay now our map look quite nice and like a charming place to fight monsters. Now that's all, right? Well you know, it's a pretty good map but ... isn't it ... kind of ... boring ... in some places? Don't burn me just yet because we have more exciting stuff to add to the map! What if we wanted to aim higher and ... add heights?
For that we'll use a simplified version of the Wave Function Collapse. You can use Wave Function Collapse for a bunch of things but we will mostly use it to determine what kind of height we need where, which is a lot simpler than other cases where you can use it.
In our case we have the following basic rules:
- Each area has four sides (North, East, South, West)
- Each side can either be connected or not connected to another area
- Each side can either be a height or not a height
- If two areas are connected, the connecting sides have the same properties (since they are kind of one thing)
Okay so now we know which side is what but ... what now? Well, the good thing is each of our area prefabs also has a height prefab for each combination, so we can use them to determine what positions end up being heights (aka what the actual heights look like). This system makes sure that all combinations make sense and while also giving us a lot of freedom of how we want each height to look like. As long as the sides connect with the right heights, we can do all sorts of weird and cool stuff with heights without risking the map being unuseable (in most cases, there are still some restrictions as there are with almost everything).
I hope this devlog gave you a glimpse of what is going on behind the map generation of Aethermancer! We do have a bunch of other things that are going on in the map generation, but this devlog is already quite full with information so we'll keep that for another time.
Aethermancer
moi rai games
moi rai games
1970-01-01
Action Indie Strategy Casual RPG Adventure Simulation F2P Sports MMO Racing Singleplayer Multiplayer Coop EA
Game News Posts 17
🎹🖱️Keyboard + Mouse
🕹️ Partial Controller Support
🎮 Full Controller Support
No user reviews
(0 reviews)
https://store.steampowered.com/app/2288470 
Encounter the Monsters of Terastae that defied the virtues of this world and are trapped in a cycle of death and rebirth. You as an Aethermancer have the ability to bond with these Monsters and help them achieve Worthiness to escape this cycle. Guide a party of three Monsters through dangerous environments and utilize their actions and skills in combat. As they advance, make decisions in a smart skill selection system. What skills you can choose from is based on the Monster’s types and elements, the skill choices you made before and the other Monsters in your party - making every Monster truly unique!
Fight ferocious Monsters and divine bosses in turn-based battles where every action has consequences. Adapt your strategy to each combat, consider your synergies, and plan the actions of your Monsters wisely. Harness and manage the four elements of Aether in order to unleash powerful spells. But whatever you do, make sure you watch the HP of your Monsters...
When your Monsters die in combat, you will lose them. Permanently. But you have the power to defy death by using their souls for rebirth. Their skills will be lost in the process, but they may live again as the same Monsters. Never lose hope! Your Monsters will grow stronger from their previous lives as they gain Worthiness with your help.
Impact combat as the Aethermancer. Unlock player classes that allow you to take on different roles. Each player class has distinguishing features that change how you play the game, allowing you to experience the game in your own way.
Stop the encroaching danger of the Void. Use your Aethermancer abilities and explore, sneak, and fight your way through procedurally generated levels with multiple pathways. Keep going until you lose your Monsters.
Regather in the Pilgrim’s Rest and advance through the Aether and Prestige you collected.
And then… try again!
Special thanks to Path of Pixels (logo), HeavyMetalHanzo (key artwork) and Steven Melin (soundtrack)!
- OS: Ubuntu 14.04
- Processor: Dual-Core. 2.0 GHzMemory: 2 GB RAM
- Memory: 2 GB RAM
- Graphics: GeForce 8800 GT 512 MB. Radeon HD 4870 512 MB
- Storage: 1 GB available space
[ 5951 ]
[ 1903 ]