The Dead Body Moral, World-creation and Vulkan
This week we worked on solving the dead body problem and its moral consequences, world building/streaming and also took some time with Vulkan. A quick summary of the week:
- Dead bodies, Maslow's and The Big Five.
- World streaming and dungeons.
- Building placement system.
- Vulkan rendering.
The fan from the bunker we lived in:
The dead body problem
In games death or killing is usually portrayed as something casual or even rewarding. A stressful act of a cat-and-mouse game. Why is that? Maybe it's as simple as games are lacking in portraying sympathy. It could also have to do with the nature of game-culture and the demography it caters to (who are all these blood thirsty people anyway?).
As you play Lunar Soil you will come in contact with some difficult scenarios. For example, you might stumble upon a body. Is it amoral to search the pockets of the dead? Should you just dehumanize the body because of your own greed. There is no one looking so you can do what you want, right? But what if your crew and party members would react to your actions?
The dead body problem. One simple moral choice.
The character you play and the crew around you will react to what you choose to do in these situations. In order for that to have impact on the game we had to restructure some of our character statistics. A traditional RPG has statistics like strength, dexterity, intelligence and vitality as their way of displaying power, value and progression. We use some of these stats as well, like hunger and stamina. However, as the game is not about becoming a killing machine we detected a need for something else to convey progress, choice, impact and skills.
Firstly, we were inspired by Maslow's hierarchy and used stats like safety. But for the dead body problem above that would just result in a black and white, evil or good scenario where some characters that were fine with the scavenging didn't react and some that did mind, just lost some points in safety.
Ontop of the character points system we have different thresholds to trigger several perks and personality traits that will affect the characters and their gameplay even more so we had to have something better then Maslow's simple needs. That's where the principle of The Big Five comes into play!
The Big Five allows a more meaningful and deeper way to portray different kind of personality traits. (You can take a simple test yourself here for fun). So now we are working out some gameplay kinks allowing different AI characters to have different kinds of personalities and gain or lose points based on your actions and the gameplay experience. We''ll have some more fleshed-out examples in the future when we have sorted out the UI for it.
We finally landed in how we want the outside world to function. Some of the original ideas we had was to just keep it simple and design each area with an exit and entry. However, we're making an outside moon world where it's more exciting to allow free movement. So we looked into how we would split up the different types of areas. We landed and implemented three main structures, outside, dungeons, building and moreover, a couple of different variations of these.
The Outdoors This is the main area on the moon! This is where the main exploration, traveling and building take place. This area streams and loads as you go, meaning no loading screens, just an endless world (or at-least looping).
Dungeons Dungeons (working-name, they will probably not be called dungeons later on) will have more unique level-designs where one can explore places like caves, crashed ships, bunkers and more refined areas. These areas are more complex and will therefor be loaded as you enter them, meaning loading-screens. Dungeons can range from smaller exploration areas to larger structures with more complex narrative and designs. These areas usually require you to bring a crew or specialized members to successfully unlock all of their secrets.
Off-world areas The off-world areas will function just like dungeons but will be reachable by for example space-travel, dimensional gateways or wormholes etc.
Event-based areas Some of your characters will have events tied to them, triggered by emotional states or that could be part of life stories. If triggered (or if part of a character story), these events can take you to some smaller unsuspected areas. These will mostly be smaller zones with some smaller tasks or happenings. We'll talk more about these in the future for sure.
Buildings Mostly, these will be your own placed buildings and structures, helping you on the moon. The smaller ones will have simple interiors that we don't need to load separably. However, later in the game we might allow a few super structures that will have their own "dungeon" or interior levels. Here is an example video of a infinitely looping streaming world. This demo only contains one of our outside areas but one can successfully walk forward forever and ever. As you might notice, we have speeded up the video a bit. To conclude: this is a 3 minutes of in-game walking without problems, yay!
We haven't finished all the details for this system yet as it's greatly dependent on us solving the world streaming and level loading setup first. The building process is what's allowing you to plan and build your own unique moon-base in any build-able area in the outside world! These rather expensive but important buildings and structures are what make your base come to life. We are thinking of just dropping you down alone on the moon with just one simple base module and then let you decide how to acquire and build the modules you might need.
In order for that to work we need to have some basic building placement validation. We want to make sure that, for example the door is not blocked by any terrain or that a stone isn't pointing into the interior of a building.
Building validation steps
- Follow the terrain height.
- Basic collision check with terrain and other buildings.
- Building validators (a door shouldn't be blocked)
- That's it!
This looks like a great spot to start a base.
A new home.
relaxed building validation for more creative base-building
A couple of years ago Vukan was announced, a new cross-platform rendering API for 2D and 3D graphics. It's the next generation Open-GL and we took some time playing around with it; mostly to find out how things work, how we would write this for ourselves and to understand how the modern game engines we use like Unreal and Unity (still experimental stage) behave behind the scenes down there in the lower level layers. This might come to use when making games or just rendering anything from scratch in the future.
With the help of reading the massive API documentation, going through tutorials, demos and finding code snippets to understand the whole process, the SDK was straightforward to install and setup. We used MingW, Make and G++. So together with nothing but SDL and the Vulkan API we finally managed to render our first triangle.
The baseline test for rendering-pipelines - The triangle What's a so big deal with a triangle? Below is the crazy amount of code we had to write to make this happen. This code below is the actual steps needed to create all the little design principles required. So now thanks to that we know why it's called a low-level API :-) And here is the compiled fragment and vertex shader used to render the triangle.