  Game engines provide video game developers with a wide range of fundamental
subsystems for creating games, such as 2D/3D graphics rendering, input device
management, and audio playback. Developers often integrate these subsystems
with other applications or extend them via plugins. To integrate or extend
correctly, developers need a broad system architectural understanding. However,
architectural information is not always readily available and is often
overlooked in this kind of system. In this work, we propose an approach for
game engine architecture recovery and explore the architecture of three popular
open-source game engines (Cocos2d-x, Godot, and Urho3D). We perform manual
subsystem detection and use Moose, a platform for software analysis, to
generate architectural models. With these models, we answer the following
questions: Which subsystems are present in game engines? Which subsystems are
more often coupled with one another? Why are these subsystems coupled with each
other? Results show that the platform independence, resource management, world
editor, and core subsystems are frequently included by others and therefore act
as foundations for the game engines. Furthermore, we show that, by applying our
approach, game engine developers can understand whether subsystems are related
and divide responsibilities. They can also assess whether relationships among
subsystems are appropriate for the game engine.
