Skyward Tactics is a prototype for an online co-op tactical rogue-lite, which was my Graduation Project at FutureGames Stockholm.
It is developed using UnrealEngine-AngelScript, a modified version of UnrealEngine 5 developed by Hazelight.
The game's player action system is implemented using a command pattern which allows the player to undo any action they've taken during their turn. It uses a server-authoritative action system which affects game state, and a client-side visualization system using a strategy pattern to create visual effects to display actions taken.
Online Multiplayer
I implemented the use of Epic Online Services (EOS) to allow users to log in to the game with their Epic accounts, and to host and join sessions online. I also helped the team set up their Epic Developer Authentication tool and made sure the game supported it to make their work easier.
Summary of major contributions
-
Online Sessions with Epic Online Services
-
Strategy Pattern-style client visualizations of server-authoritative actions
-
Server-authoritative turn order system with accompanying TurnTimer system to replace real-time Timers
-
UObject replication with support for replication of AngelScript-declared properties
The most significant system I implemented was the Action and Ability system. An Action is an object which describes a change to the game state. An Ability is simply a list of Actions. For example, the RocketBoots Ability has a MovementAction and an AreaDamageAction.
All Actions are undoable, using a Command Pattern. They are managed by the server, to which the player can send input through RPC's.
The player activates an item's ability using their UI or a hotkey, as well as selecting a valid target tile.
Once the server receives an RPC with which ability to use and which target to select, it verifies that the player is using the Ability correctly. It then generates instances of the Ability's Actions, and executes them in order.
Any side effects to an Action is also described and handled as an Action, for example the DeathAction.
The game's state is updated by Actions and replicated to clients, as well as the Actions themselves, which are visualized with effects by the ActionVisualizationSystem, see below.
An addition to the Action system above is the ActionVisualizationSystem, which is implemented using a Strategy Pattern.
The system is entirely client-based, and creates ActionVisualization objects with visual effects, to interpret server-replicated Actions.
Each frame the VisualizationSystem ticks the ActionVisualization at the front of it's queue, and when the visualization is done, it is dequeued.
If the Action which caused the Visualization is undone, the Visualization is added to a separate queue in the VisualizationSystem, and ticked in reverse to undo the visual effect.