Data Driven storytelling framework for games
Summary
This is a framework for Unreal Engine that can be used to create small games that are narrative driven. The framework supports a variety of game modes, for example first person (shooter), top down shooter, strategy/management, point and click. It even supports hot swapping between game modes at any given time.
Technologies used
- Unreal Engine 5
- C++
Inspiration
It was originally intended to be a game by itself but later, during development, it turned out to be a great framework that can be used to drive any narrative game.
So I went back to the drawing board to rethink it with data driven design in mind.
Features
Interaction system: the interaction system is using an interface. This way any object can implement their own response to an interaction. It’s especially important here since there’s no way to tell what kind of interactions will be necessary in a future game.
Inventory: a very simple inventory based on a list. Every item that the framework uses need to be compatible with any game mode. The use of items can be also restricted to specific game modes.
Physics-based grab: this type of interaction is best known from the Penumbra and Amnesia series by Frictional Games. In this framework I implemented a simpler version which allows the player to pick up objects, assign a weight to each of them, grab and open doors and rotate them around its hinges and grab and pull drawers.
Object inspection: interacting with objects that implement the inspection interface will center that object on the screen. While in inspection mode, performing the action defined in the current game mode will rotate the object. Optional text and audio can also be set for each object.
Dialogue: the dialogue and all of its components are completely data driven. A dialogue can be assigned to every interaction and event. Every line within a dialogue can be either a statement or a question. Questions can branch off into a different dialogue. Every game mode can define its own ways to answer these questions.
Moreover it’s possible to define characters and assign them to each line to differentiate the subtitles.