Game Development: engines, libraries and frameworks
Tags: gamedev
Published: 2021-05-25 18:39:57

---
title: Game Development: engines, libraries and frameworks
published: true
date: 2021-05-25 15:40:16 UTC
tags: gamedev
canonical_url: 
---

I’m willing to write about game development for some time already, and this day has finally arrived! In a series of don’t-known-how-many posts I will introduce some basic concepts of game development and game engines, written in a concise manner.

## Game engine? I’ve heard of

It’s like the “engine” of a vehicle. This is the “core” of a game, with anything necessary for a game to run, like rendering, sound, user input, animations, physics…

Not all game engines have this specific set of features, and some of them do have a bigger list of useful components to make games, like artificial intelligence, networking or scripting, for example.

In essence, game engines are used to develop new games, ease the reuse of code and simplify the deployment on another platforms.

But a game do not need to be developed only using a triple-A game engine. You can make your own game engine, from scratch, using the programming language you’re familiar with, and the help of some libraries and/or frameworks.

## Engines, libraries and frameworks

Here is a list of some game engines, libraries and frameworks. This is far from the entire plethora of options we have, but can be a good start to understand how they work and how to get started on the game development world.

### [Unity](https://unity.com/)

A multiplatform proprietary game engine. Can be used to create 2D, 3D, VR, AR, simulations… Used in other areas, like construction and film (see [The Lion King](https://www.engadget.com/2019-07-29-lion-king-remake-vfx-mpc-interview.html)).

![Unity editor](https://qtrnn.io/posts/images/UWtJdhsu9jpl.jpg)<figcaption>Unity editor</figcaption>

It is written in C++, but uses C# to create games. You do not need to to buy a licence if your earnings are less than 100k USD.

An interesting feature is the concept of [Prefabs](https://docs.unity3d.com/Manual/Prefabs.html), a special type of component where you can save a fully configured [GameObject](https://docs.unity3d.com/Manual/class-GameObject.html)in the project as a reusable asset (and buy/sell them in the [Asset Store](https://assetstore.unity.com/)).

Some games made in Unity: [Among Us](https://innersloth.com/gameAmongUs.php), [Cuphead](http://www.cupheadgame.com/).

### [Unreal Engine](https://www.unrealengine.com)

Multiplatform commercial game engine that can be used to create 2D, 3D, VR, AR and simulations. Its used in other areas, like in the film industry (examples include [The Mandalorian](https://www.polygon.com/tv/2020/2/20/21146152/the-mandalorian-making-of-video-unreal-engine-projection-screen) and [Westworld](https://www.unrealengine.com/en-US/spotlights/hbo-s-westworld-turns-to-unreal-engine-for-in-camera-visual-effects)).

![Unreal Engine editor](https://qtrnn.io/posts/images/wz6A97hEk234.png)<figcaption>Unreal Engine editor</figcaption>

The engine is written in C++, and this is the programming language you will use to develop your games. Has a monthly subscription model (with 5% royalty on gross revenues from any release game), were developers can access the full version of the engine, including the source code.

Besides C++, you can make a game using [Blueprints](https://docs.unrealengine.com/en-US/ProgrammingAndScripting/Blueprints/index.html), a visual scripting language. You can buy and sell assets on the [Unreal Engine Marketplace](https://unrealengine.com/marketplace/).

[![fail](https://qtrnn.io/posts/images/eq562AaYGoxd.png)](https://qtrnn.io/posts/images/eq562AaYGoxd.gif)<figcaption>me trying to use Blueprints for the first time</figcaption>

Some games made in Unreal Engine: [Kingdom Hearts III](https://www.kingdomhearts.com/3/us/home/), [Goat Simulator](https://goat-simulator.com/), [Mortal Kombat X/11](https://www.mortalkombat.com), [Tetris Effect](https://www.tetriseffect.game/).

### [Godot](https://godotengine.org/)

A cross-platform free and [open-source](https://github.com/godotengine/godot) game engine. It’s written in C++, and you can create 2D and 3D games using C++, C# and any other language with [GDNative](https://godotengine.org/article/dlscript-here) bindings, like Rust. The engine also includes its own scripting language, [GDScript](https://docs.godotengine.org/en/3.3/getting_started/scripting/gdscript/gdscript_basics.html), and its own visual programmng language, [VisualScript](https://docs.godotengine.org/en/3.3/getting_started/scripting/visual_script/index.html).

![Godot editor](https://qtrnn.io/posts/images/eFbOgrylfzCf.png)<figcaption>Godot editor</figcaption>

Games made using Godot: [ΔV: Rings of Saturn](https://store.steampowered.com/app/846030/V_Rings_of_Saturn/), [TailQuest: Defense](https://store.steampowered.com/app/824090/TailQuest_Defense/).

### [SFML](https://www.sfml-dev.org/)

Cross-platform software development library written in C++ with bindings for a lot of languages (C, Go, Python, Rust, …). Provides a simple interface to various components, and is composed of five modules: system, window, graphics, audio and network.

[![ShipShift](https://qtrnn.io/posts/images/shipshift.png)](https://github.com/DeadBodyOutline/ShipShift)<figcaption>ShipShift, game made for Ludum Dare 35</figcaption>

Some games made in SFML can be found [here](https://sfmlprojects.org/games) and [here](https://itch.io/games/made-with-sfml).

### [SDL](https://www.libsdl.org/)

Dream of every indie developer: make its own game engine on top of SDL.

Cross-platform software development library written in C, works natively with C++ and there are bindings for a lot of languages (Go, Lua, Python, Rust, …).

[![NightFall](https://qtrnn.io/posts/images/nightfall.png)](https://qtrnn.io/posts/images/nightfall.gif)<figcaption>Making games is fun</figcaption>

Works providing low level access to audio, keyboard, mouse, joystick and graphics hardware. Also provides some more functions through a few separate official libraries, like SDL\_image, SDL\_ttf and SDL\_mixer…).

It is used by video playback software, emulators and games, including some from [Valve](https://www.valvesoftware.com) and [Humble Bundle](https://www.humblebundle.com/).

Some games made with SDL: [Angry Birds](https://www.angrybirds.com/), [0 A.D.](https://play0ad.com/), [Factorio](https://www.factorio.com/), [VVVVVV](https://thelettervsixtim.es/), [FTL: Faster Than Light](https://subsetgames.com/ftl.html), [Unreal Tournament 2004](https://web.archive.org/web/20060826172536/http://www.unrealtournament.com/) (Linux port only).

### [pygame](https://www.pygame.org/)

Cross-platform software development library written in Python, build on top of SDL, abstracting the most common functions, allowing the use of Python to structure the game.

Has some features that are not present on SDL itself, like vector math, collision detection, pixel-array manipulation, and [more](https://www.pygame.org/docs/).

Some games made in pygame: [Frets Of Fire](http://fretsonfire.sourceforge.net/), [Super Potato Bruh](https://dafluffypotato.itch.io/super-potato-bruh).

### other

You can make your games using virtually any programming language, library or framework. There are so many - specific and general purpose - game engines than the ones I’ve listed here. Below is a list of some of them I personally think that are interesting:

- [openFrameWorks](https://openframeworks.cc/)
- [GameMaker Studio](https://www.yoyogames.com/en/gamemaker)
- [cocos2d](http://www.cocos2d.org/) (cocos2d-x)
- [RPG Maker](https://www.rpgmakerweb.com/downloads)
- [löve](https://love2d.org/)
- [Twine](https://twinery.org/)
- [bacon2d](https://bacon2d.github.io/) (hah!)
- [OGRE](https://www.ogre3d.org/)
- [Havok](https://www.havok.com/)

## So… that’s it?

Now you know something about game engines and what is used to create games, I will show you in the next articles some basic concepts of a game, including some code in [pygame](https://github.com/pygame/pygame) (maybe something in [SDL](https://github.com/libsdl-org/SDL) as well). Here is a list of what I’m planning to talk about:

- game loop and user input
- scenes, layers and parallax
- sprites
- physics
- sound
- something else?

Stay tuned!

If you have a comment, correction or suggestion about this article, feel free to leave a word ;)