ADK (Ayax Development Kit)

GitHub

“Hey, good luck on your engine.” - Noel Berry Aug 14, 2020 at a bouldering gym

Purpose

Ayax Development Kit is a collection of tools and resources that one would want in order to create a 2D video game. In essence, ADK is an easy-to-use C++ game engine for building modern 2D games, but it includes several useful game systems such as character controllers, cameras, and common game objects such as trigger boxes. ADK also includes a demo platformer game to study. Whether you take one of the example/demo games and expand upon it or decide to create a new game using the integrated editor, ADK provides the features you need.

I started this little project because I wanted two things: I wanted my own custom C++ game engine to make games with and I wanted a monolithic repository where I can collect all of my little games and game-related programming projects. Instead of having a ton of small projects and repositories, I wanted to compile them all into a single project. Not only do these projects offer references to learn from when creating my next game, having them included with ADK allows me to share code between the projects. The idea is to create systems and game features that are reusable across projects, so that, for example, if I program an A* pathfinding system in one game I will have it available to use in another game.

If I was going to create my own custom C++ game engine, I needed it to be better than the other engines available. The goal was to make an engine that was more flexible than Unreal engine and better than Game Maker.

Features Overview Trailer

Features

  • Prefabs
    • Prefab system allows you to create, configure, and store an object complete with all its property values, animations, and collisions as a reusable Asset. The Prefab Asset acts as a template from which you can create new Prefab instances in the Scene.
  • Sophisticated Integrated Editor
    • Save and Load Levels
    • Integrated editor allows for working very close to the final product compared to using an external editor
    • Directly placing entities (which is possible because the editor is integrated) means levels aren’t confined to a grid
    • Configure sprites, collisions, and animations all within the editor
  • Code Reflection / Metaprogramming
    • Expose class fields to the editor. This is very useful in level creation; for example you can change the speed of certain enemies from within the editor. This means different instances of the same enemy class can have varying speeds. Reflection is very powerful.
  • Animation System
    • Easy to configure multiple animations from a single spritesheet
  • Collisions
    • Included code examples demonstrate how to easily implement pixel-perfect collision using the provided collision system
  • Timers
    • Timers allow you to set a timer for a callback function/delegate. For example, when the player dies, you could set a 2 second timer for a function that restarts the level. Very useful.
  • Entity Layers
    • Entities can have variable depth, allowing for parallax effects and other cool tricks
  • Reference Counted Resource Management
    • Automatic reference counting ensures resources are acquired when needed and freed when they are not
  • Tags
    • Tags help you identify game objects during runtime. Without knowing the type of the object, we can simply check the object’s tags and know whether or not that object can or cannot do certain things or has or doesn’t have certain properties. A Tag is a reference word which you can assign to one or more game objects.