Skip to content

An attempt to create a Game Boy Advance game using Modern C++


Notifications You must be signed in to change notification settings


Repository files navigation

WARNING: this is not a library or in a state to be reused right now. This is a toy project that I played with for some years, and most of the code is not in a reusable state. The project is also in a stale state, and will probably be archived.


The objective of this project is to aim to create a Game Boy Advance game using C++17, while employing generators to the assets of the game.


Warning: currently the project does not work in a Windows environment! Use WSL to build it on Windows.

Warning: this repository uses submodules, be sure to initialize them properly by cloning this repo using the --recursive or then using the command git submodule update --init after cloning it!

This project consists in a toolkit written in C++17 to generate assembly files for the resources (tilesets, maps and sprites as of writing), and it also includes the source files of the game, written in C++17. The included Makefile makes sure all the files are properly built. It requires a g++ which supports C++17 (possibly every Linux distribution has one). It also requires the freetype library, and also the unzip package, since it might not be installed by default in some distributions! Once all of those are done, you can properly make the project, and the ROM will be available in the path bin/game.gba.

Screenshots and Videos

Working video | Bitmask test video

Image 1 Image 2 Image 3 Image 4


All contribution is welcome. If you have interesting things to add, please submit a pull request!


All files in this repository with exception of specific libraries and the fonts located in the fonts foder are Copyright (c) 2019 João Baptista de Paula e Silva and are under the MIT license.

Niels Lohmann's "JSON for Modern C++" library can be found here and is also under the MIT license.

The LodePNG files belong to Lode Vandevenne and can be found here also under the zlib license.

The font monogram.ttf belongs to Vinícius Menézio can be found here under the CC0.

The font Sweet16.ttf belongs to Martin Sedlák and can be found here under the Boost Software License.

The library GCE-Math used by generating LUTs belongs to Keith O'Hara and can be found here under the Apache-2 License.

The font Spleen, used on the "Game Pak removed" screen, belongs to Frederic Cambus and can be found here under the BSD-2 license.

Finally, the graphics for the "Game Pak removed" screen belong to Damian Yerrick (aka pinobatch) and are licensed under the CC0.