My 2D engine, Slate2D, has been a long-term on and off personal project since July 2016. It's primarily just been a fun thing to work on, without any real end goal for shipping a game. It also has served to be one of the biggest sources of learning C++ and understanding the consequences of architectural decisions. Despite its status, it has successfully been used to take two games to completion! Clive Sturridge's Battlement Defense Legacy Collection and Hot Air use this engine, and the experience of using it was surprisingly pretty good!

The engine doesn't really prescribe any big opinions on structure or API, you are given the most basic of update and draw callbacks. How you want to handle game logic is entirely up to you. The biggest API inspirations were probably PICO-8 and TIC-80. Fantasy console APIs are a great sweet spot of what most people need for making 2D games, and I just wanted something that has a similar API, but without any limits on size or execution speed.

Slate2D can be built as a static or dynamic library, exposing a basic C API in a way that can be called into from any language that can use C shared libraries. A built in target containing the QuickJS runtime allows games to be created using modern JavaScript, but with no dependency on the browser environment. Debugging JavaScript through Visual Studio Code is even possible when building from MacOS.

It is made up of several pre-existing libraries:

Slate2D currently runs on Windows, MacOS, Linux, Nintendo Switch, and web via Emscripten. Maybe it'll be useful to someone else, someday!