A Curiosity for Video Games
As a millennial, I was a kid growing up in what was arguably the golden age of console gaming. I was fortunate to experience the release of the first Xbox, Playstation, Gameboy, Sega Genesis, and the like. As the systems grew, so did I. At the push of a button, I was transported to another place entirely.
I distinctly remember the day this paradigm shifted for me, though. The day that games became more than interactive images on a CD/cartridge.
It was the day I learned to burn games onto blank CD’s.
See, getting these CDs to work was no simple process. And it’s not a process I was able to learn on my own but rather one that was taught to me by my mom’s friend from work.
I was still in 3rd grade; my imagination and curiosity were still the primary drivers behind my actions. So implementing this process was never a passive experience where I understood the reasoning behind every step but rather an utterly conscious adventure where I was creating worlds to explore.
In essence, I was creating my games.
A lot of time had passed, consoles had new iterations, and my decision making no longer used imagination as a primary driver.
The curiosity remained though, and the question on my mind was,
“What was happening on these CDs, how does it all work?”
In this article, I hope to:
- List roles programmers play in the game development process.
- List tools (game engines) programmers use to fill those roles.
- Describe some attributes of languages popular amongst game programmers.
[1] Roles Programmers play in the game development process:
Artificial Intelligence (AI)
Players expect to be engaged by a certain level of difficulty and challenge. Often, problems will start easy but then build in scale and intensity.
Also, the player will often be able to choose a difficulty at the start of the game for all that scaling described above to exist within.
With this simple description, we’ve already highlighted multiple models for which the developer, the AI programmer, is responsible. The AI programmer is responsible for designing and implementing the game’s intelligence.
AI development is a field all on its own, and developing it within this context of a video game is a unique challenge that is often the primary driver behind a player’s engagement with the game.
Graphics
Video games are defined by the worlds they contain. The player is left to explore and interact with these worlds.
While those worlds have teams of artists drawing up, writers describing, and designers modeling them, it is up to the programmer to implement the player’s interactions with that world.
“Press ‘x’ to open door.” What happens when you press ‘x’? Well, you have to program that.
Physics
These worlds that the player is exploring and interacting with also need to be believable in another way.
We interact with the natural world every day, and so we as people, know what it should feel like to walk, run, jump, fall, etc. These describe the physics of our world, and so to create a realistic (or unrealistic) experience in a game, these expectations must be met.
It is the responsibility of the developer to define those physics to describe that experience the player expects to have in this virtual space.
Networking
Behind the scenes (in the backend), interactions are occurring between your game and the outside world through the internet. It could be a multiplayer game, and you need to be in a queue of other players to play with, maybe you’re trying to download the next level to your game, or perhaps someone somewhere in the world found a bug in the game. You’re responsible for designing and implementing a patch. The implementation and packaging of all these things are the responsibility of the network programmer.
User Interface (UI)
You just reached the end of the dungeon, and you see a treasure chest flowing with gold coins and glowing weapons. The purpose of your journey is finally at a close, or so you think. As you head over to the chest to collect your bounty, you’re ambushed by a giant ogre. It completely catches you off guard, and right as you begin to come to your senses, your mom starts calling you. What should you do? Well, pause the game, of course!
Whose responsible for that pause menu on the screen? And all the settings?
That’s all the responsibility of the UI developer. They implement all the menu’s, settings, and loading screens.
So there a lot of game development teams working on one project. That seems like quite the undertaking. If only there were a tool, they could all use to implement all those tasks.
Good news, there is. A game engine.
[2] A game engine is a software framework for game development. It ties together the development responsibilities and programming tasks so that most of the tools and standards are in one package. A typical game engine will often contain things such as templates for general game logic, AI, animations, a physics engine, and even ways to incorporate sound logic into your game. Using a game engine is the most efficient way for a development team to create games. Sometimes, studios will even go so far as to build their proprietary game engines at the start of a new project and reuse those engines for sequels.
Here are some game engines that are currently used and the programming languages associated with them:
- [3] Unreal Engine — C++
- [4] Unity — C#
- [5] Panda3D Engine — C++/Python
- [6] Godot — C++
- [7] Appgamekit — Java/C#/Python
- [8] Cryengine — C++/C#/Lua
- [9] Uniengine — C++/C#
- [10] Marmalade SDK — C#/C++
- [11] LIBGDX — Java
- [12] URHO3D — C++
So now that we know about the responsibilities of a game programmer, how can you get started?
Game engines contain a majority of the resources that you would need to create a game. Each of the engines above has its associated languages listed next to them, so, in theory, you could pick your preferred game engine, programming language, and be off to the races!
Before I conclude this article though I want to draw attention to C++, the programming language. I noticed that a majority of game engines utilize this language, and I wanted to know why.
What makes a functional programming language for game development?
A big selling point for video games often is the ability to push the limits of whatever platform they are on or even to have the ability to be included on multiple platforms.
That requires a considerable degree of flexibility and freedom of design not often found in high-level languages (that tend to abstract these abilities).
[13] In C++, you have complete control of how you want to design your code, where tasks get implemented, and how they get implemented. Being able to control precisely how much computing power each piece of your system uses.
The language not only offers complete control from a memory perspective but also allows for flexibility.
In other words, C++, in design, allows your team to develop with the freedom to accommodate all the above selling points as the language stands.
I hope you found this article informative, check out the resources I used in my research to learn more:
[1] (What role does programming play in the creation of a game? AI, Physics, Graphics, Network Programming, UI)
[2] (How does programming get incorporated into a game? Game Engines. Five components of a game engine.)
https://interestingengineering.com/how-game-engines-work
[3] (Unreal Game Engine)
https://www.unrealengine.com/en-US/features
[4] (Unity Game Engine)
https://docs.unity3d.com/Manual/JobSystem.html
[5] (Panda 3D Game Engine)
https://docs.panda3d.org/1.10/python/programming/using-cpp/index
[6] (Godot Game Engine)
https://godotengine.org/features
[7] (App Game Kit Game Engine)
https://www.appgamekit.com/technology
[8] (Cryengine Game Engine)
https://docs.cryengine.com/display/CEPROG/CRYENGINE+Programming
[9] (Unigine Game Engine)
[10] (Marmalade Game Engine)
https://www.marmaladegamestudio.com/careers/programmer/
[11] (LIBGDX Game Engine)
https://libgdx.badlogicgames.com/documentation/gettingstarted/Setting%20Up.html
[12] (Urho 3D Game Engine)
https://urho3d.github.io/documentation/1.7.1/index.html
[13] (Simon, Stack Overflow, Why is C++ a popular in game development)