Hiya! Our blog posts have so far mostly focused on the art and the universe of Outer Wonders, but turning all of this into a video game also requires technology. Today's blog post is all about this!
How does a video game work?
As you already know, video games are computer programs that load assets (levels, images, sounds), take your input (e.g. "player #1 pressed the A button"), performs a bunch of calculations, and outputs a sequence of frames alongside with sound, and possibly saves data (e.g. saved games, high scores).
The way your gaming device works can therefore be summarized by the following diagram.
This means video game technology has to make all of these components collaborate together in order to create an unique experience.
Which can be tricky to get right, because all of these components speak a different language, and not all computers, mobile devices and game consoles embed the exact same components!
In other words, even if a game works correctly on your PC, it might not work on your mobile phone, your game console, or possibly even on other computers.
Enter game engines
Back in the early and mid-1990s, the situation described above was much of a problem, because designing technology to work on all PCs meant supporting wildly varying components (as an example, gamers from the 1990s might remember browsing a Settings menu where they had to pick their sound card model – any memories of Sound Blaster and Ultrasound anyone?).
Therefore, video game technology had to know the language of each component it might have to talk to.
Besides, asset management (i.e. how to load maps, textures, and sounds from files) was quite an involved and time-consuming process.
This is why the concept of a game engine started becoming popular among game developers.
Game engines are technology designed to solve these problems and make development easier.
Tailoring our own tech to our needs
Since the first game engines were created, the majority of components have become easier to work with, as standard technologies referred to as APIs (Application Programming Interfaces) emerged, making cross-platform game development significantly easier without the use of a game engine.
Therefore, game engines are being designed more and more as productivity tools to create and release games in a shorter time frame.
However, in pursuit of these goals, the teams behind modern game engines have to tackle a major challenge: how to design a game engine that is suitable for making games of different genres? As an example, adventure games differ significantly from racing games, so designing technology fulfilling the needs of both genres requires compromises.
This is why today's game engines have become rather complex.
Because of this complexity, we went for a different approach with Outer Wonders.
Instead of using an existing game engine, we decided to design our own engine based on SDL2, a lightweight, yet proven technology for making cross-platform games, enabling us to deal with graphics, sound and input efficiently in a cross-platform fashion, while providing the freedom necessary to tailor our engine to the specific needs of Outer Wonders.
While game engines are often designed using the C and C++ programming languages, we also made the decision to use the Rust programming language, which is mostly compatible with C and C++, while providing comparable efficiency and superior stability.
When it comes to the graphics, we currently support OpenGL 3.3, Direct3D 11 and Vulkan. This means we can build Outer Wonders for Windows and Linux today without significant effort for each of these platforms and support most computers up to 10 years old. Actually, our technology has been successfully tested on Windows-powered computers embedding video cards from all major vendors, as well as a few Linux-powered computers.
And all of this technology fits in only a few MB!
On a final note, we also have a nice in-house level editor. Take a look at what we can build with it!
And there's more! But we'll keep that for a future blog post.
See you soon!