WHAT IS BOLT FRAMEWORK?
Bolt Framework is a collection of tools designed to aid the development of rollback networked action games in Unreal Engine.
Determinism, to be understood as the quality of a system of repeatedly producing the same results given the same set of inputs, is one of the key aspects to take into account in the early stages of developing a rollback powered videogame. During online matches, rollback networking needs to be able to constantly rewind the game back to previous states and simulate it again with either the same or a new set of inputs, while all clients are remotely kept in synchronization with almost just the input as the only network data being broadcast. Oversights in the saving/loading of states, RNG and inconsistency of hardware floating point arithmetic or time sources across different platforms among other factors, introduce lots of hard-to-debug desync issues.
This creates a significant challenge in the planning stage of games, not to say in adapting already existing ones to this netcode technique. Regardless, we at ArcForged think that rollback networking has lots of potential yet to be unleashed and that the effort is worth it for the benefit of extremely consistent gameplay and a responsive online experience.
Bolt Framework was born as an attempt to simplify and automate the hardest tasks involved in the design and development of a rollback networked game, but sooner rather than later, it turned into a fantastic asset for action game development overall.
It is presented in the form of an Unreal Engine 4-compatible plugin and it’s composed of 3 modules:
BoltFramework: The core of the package. Includes a native C++ interface that provides any UObject derivatives with 100% deterministic fixed-point 3D transform and overridable behavior of its conversion to final render transform. It also contains a subsystem object class that manages the allocation, registration, mutation of gamestate and pooling of objects inheriting the interface both in offline and online play. All this bonded together with a set of utilities such as collision shapes implemented in fixed-point math with libraries for collision detection and arithmetic, as well as Blueprint exposed object classes pre-implementing the interface and libraries.
FrameData: Powered by Sequencer technology, it allows to compose sets of animations with not only skeletal capabilities, but to also possess and spawn objects as well as manipulate and key their UPROPERTY members, including the fixed-point transform provided by the aforementioned interface. All this in compliance with the deterministic philosophy.
MoveNetwork: It’s an input layer that aims to simplify the task of defining complex sets of input and parsing them from physical input devices. Its core tool is an asset type that allows to associate these input expressions to gameplay actions and to establish relationships between them within complex state machines that would otherwise be overwhelming to express in gameplay code.