One of the questions that plagues new game developers is what should they use to create their game? This is a multiple choice question with 3 answers:
- A Framework
- An Engine
- Build it from scratch
Starting with a few upfront questions can help guide your decision, to figure out what is best for you,.
First: What sort of game are you trying to build? Is it something that mechanically has mostly been done before and fits into an existing genre (such as a platformer or role playing game)? Or does it incorporate some mechanic or concept that hasn’t been done before?
Second: What is your ultimate goal? Is it to learn programming via making a game? Is it to gain experience so that you can get a job at a AAA studio in the industry? Is it to make something that will last through the ages? Is it to get something to market more quickly?
Third: How much time do you have to devote to this project? Are you planning on working on it full time or in your spare time?
Depending on your answer to each of these questions will determine what path makes the most sense for you.
Elements of Dreams, was originally inspired by the game Weapon of Choice from the 2021 Global Game Jam (GGJ21), which was developed using Libgdx. As such we gained intimate knowledge into the pros and cons of game frameworks such as Libgdx and Monogame and how they can aid or hinder a project’s goals.
On the pro side game frameworks provide a great resource for those with development experience to get started creating games more quickly, as they provide many of the libraries that will be needed such as physics, sound, graphics, and platform exporting. For someone who knows how to code or is learning how to code they can provide a mechanism to build a game without having to think about every nuance that would go into building a game from scratch. Also since much of a game will be made with code, the skills you pickup along the way won’t atrophy as quickly as say learning to use a game engine which may have its UI change in subsequent updates over the years. Many of the well known frameworks have great communities and tutorials. For Libgdx there are two free courses on Udacity that not only teach you the framework but teach you a lot of game development fundamentals as well. Additionally game frameworks will provide the flexibility to create new or less common game mechanics (such as the voxel system in the game Fez). One other bonus is code re-usability, in that common components you build for one game have the potential to be used in future games you create. Finally many frameworks are open source and so won’t require royalties if your game happens to be a runaway success.
However frameworks aren’t all positive, they also come with downsides. The first of these is not all tools will be included. If you want to do level editing you’ll need to find or build a tool yourself (for Weapon of Choice we used Tiled), and can add to decision fatigue or slow down building the game since you will be taking development time to build tools. This can be demotivating when you’re first starting out since your now spending time building something that isn’t your game. Some tools that may have sounded good in tutorials, will turn out to be abandoned leading to alternatives needing to be found (Overlap2D which is mentioned the Udacity tutorials above was one of these examples). Another downside with a framework is things like collision logic or sprite animation will need to be hand crafted. Finally if your goal is to get a job at a AAA game studio, most do not use game frameworks so this will not be a good path for that.
In summary game frameworks are great for those with some programming experience who are looking to get into game development, increase their programming skills, and don’t mind having to build or find additional tools. I would put them in the medium time commitment category.
- Great for people with some programming experience
- They provide libraries to speed up game development
- They provide flexibility to make games that have new or uncommon mechanics
- Great free learning material for getting started.
- Don’t require royalties.
- Knowledge and skills won’t atrophy as quickly as game engines.
- Code reuse, as components you build in one game can potentially be re-used in future games.
- Additional tools for game development aren’t included so you will spend time looking for or building them yourself.
- Not the best for people wanting to learn to code
- Not a good path to a job at a AAA game company.
- You will need to write additional logic for common things such as collision logic and UI layout (leading to more development time needed).
After the GGJ21 and first attempting Weapon of Choice with Libgdx, I decided to try and re-implement more of the full vision of the game in a game engine. Game engines are more full fledged programs than game frameworks. Some of the more popular ones include Unity, Unreal Engine, and Godot. As a technology they have their own tradeoffs.
On the positive game engines are often batteries included. Along with a lot of the features that are included in game frameworks (including cross platform exporting, physics and graphics libraries), they often come with level editing, sprite editing, and animation built into the software. This can lead to faster development time for your game because you won’t have to go looking for or building additional tools that you would with game frameworks. Additionally many AAA studios use them, so they can become a good path toward getting a job at one of them. Game engines, while they have some programming that can be done in them, also provide a lot of capability for building an entire game without needing any programming knowledge (see Godot’s visual scripting or Unreal Blueprint as examples). Finally popular engines and those supported by companies have a plethora of tutorials and large communities to help you get started and past many problems you run into.
While there are many good things, game engines have some drawbacks as well. The first is that the knowledge you gain from them can atrophy as quickly as the software is updated. So if an engine comes out with a newer version that changes the user interface (UI) and menus you’ll need to relearn portions of the engine just to be able to do something you were able to do before. Another downside is some of the most popular game engines (Unity and Unreal), require you to pay money to the companies that own them after your game makes a certain amount of money (note that this doesn’t apply to all game engines, as Godot is open source and won’t require this). Another downside is that engines will allow you to create known types of games that exist today, but if you’re attempting to create a new game mechanic or genre that hasn’t existed before, then the engine may not have the flexibility to allow you to create what you want. Finally the programming languages that are used for each engine are usually very specific (C# for Unity and C++ for Unreal), so to fully utilize the engine you will need to learn or know these languages eventually.
In summary game engines are great tools for game development, especially for those under shorter time constraints to devote toward development, people starting out in game development without knowledge of programming languages, and those looking to gain skills that could lead to a job at a AAA Studio. That being said there are some downsides in that what you learn today about an engine may expire by the next version, if your game is successful some of that money could go to the game engine company rather than your own pocket, the engine may not provide the flexibility needed for new game genres or mechanics, and finally you may have to learn specific programming languages in order to fully utilize the engine.
- Batteries included so you don’t need to look for additional tools shortening development cycles.
- Good tutorials and documentation for those looking to get started who have little experience.
- Programming knowledge not required to get started.
- Popular in the AAA Game Industry, so gaining skills with them can lead to a job at one of those studios.
- Knowledge about game engines can expire quickly requiring you to relearn things about the engine in order to get something done for a game you previously knew how to do.
- Some of the most popular game engines will require you to pay if your game makes enough money.
- The engine may not have the flexibility needed for new video game concepts or mechanics.
- To fully utilize an engine you will likely need to learn the programming languages that it uses.
Building From Scratch
The final option for creating a game is to build or program it from scratch using the C or C++ language. While this isn’t a path that I pursued for Elements of Dreams it is a viable option for those who have an abundance of time.
Lets start out with the positives of this approach. The C and C++ language have been around for decades, so any skills that you learn from building a game with them will be valuable for a long time after. Those skills that you learn, if they become sharp enough, could provide a path into the AAA Game Industry as a game engine developer (which is one of the most highly paid positions). You will be able to have full control of the game you’re creating allowing for you to create concepts or mechanics that don’t exist in current games. Fixing bugs in the game will be easier as you will have full knowledge of how the game is implemented rather than relying on a framework or engine which may have internal components that you don’t have a clear idea on how they work. C is one of the most portable programming languages so there is a possibility you will be able to port your game more quickly to new systems rather than waiting for a game framework or engine to support that new platform. Finally there is at least one tutorial to get you started with Handmade Hero.
The biggest drawback to this path is the time commitment. Not only will you need to learn the C or C++ language intimately you will need to implement every part of a game yourself including sound, physics, graphics, cross platform exporting, etc. Each of these areas is its own technical specialty and so will take time to become fully capable.
In summary there are some big benefits to creating a game this way including knowledge that won’t expire and that can give you relevant skills to get a job in the game industry. That being said it is a serious time commitment which is better for those who haven’t yet started their career or are just starting it. I wouldn’t recommend it for anyone without an abundance of time.
- Gain knowledge that won’t expire
- Gain skills that could get you a job in the AAA Game Industry
- Have full knowledge into how your game works allowing for you to fix bugs more completely.
- You’ll be able to write components that you can reuse in other games.
- Provide the flexibility for new game types or mechanics that have never existed.
- Be able to port your game to newer systems without waiting on others.
- At least one starter tutorial with Handmade Hero.
- Serious time commitment since not only will you need to learn and become good in the C/C++ language, you will also need to gain knowledge into specific areas of computing (such as sound, graphics, and cross platform exporting)
So as you look into how to create that great game idea you have, hopefully this will guide you into the path that makes the most sense for you.