Adagio Game Engine

August 2024 — Present
C++, DirectX11, FMOD, WWise, imgui

Adagio is a custom game engine for 2D and 3D games written in C++ for Windows.

Audio Systems

A demonstration of the music synchronization and audio spatialization of the Wwise audio system.

Adagio supports both FMOD Core and Wwise audio systems. Both engines support sample-accurate music playback, panning, playback speed manipulation, looping, and muting.

The FMOD Core engine provides additional support for low-level audio. It can be used to load audio data from a file into raw PCMData, manipulate that data, and then play the modified PCMData. It additionally supports FMOD Core’s Channel Groups, which act as buses to manipulate groups of sound.

The Wwise system on the other hand uniquely supports music beat callbacks, which is useful for creating music-synchronized visuals and rhythms games. It relies on banks created ahead of time by a composer or sound designer rather than directly pulling audio files. I originally implemented the Wwise API for my remake of A Dance of Fire and Ice, Orbit.

Rendering

Adagio supports 2D and 3D rendering using DirectX11. This also includes support for textures, shaders, constant buffers, index buffers, vertex buffers, and mipmapping. Additionally, the engine can handle fullscreen or windowed modes, including toggling fullscreen state and resizing the window at runtime. There is also a debug renderer that supports on-screen text, world text, and several world objects such as spheres and arrows.

Math and Physics

Adagio has several functions, structs, and classes for representing and simulating 2D and 3D objects. This includes raycasts against and collisions between primitive objects such as discs, capsules, axis-aligned and oriented bounding boxes, spheres, planes, convex hulls, and more.

Loading .obj files at runtime; the engine remembers previously loaded models internally and can load them again near instantly without having to parse the original .obj file.

Additional Features

  • XML Parsing for data driven systems

  • File I/O and tools for writing and parsing custom binary file formats

  • ImGui support for quick but powerful user interfaces

  • Input System supporting keyboard, mouse, and up to four XBox controllers

  • OBJ Model loading

  • Multithreaded job system, developer console, and event system