DATAFLOW



Gameplay (full trailer with sound here)


Description

Data flow is a rock-paper-scissor tower defense game where you fight off enemies on a sci-fi cityscape rooftop.

Responsibilities

Engine programming

  • Project set-up, clean structure with SolutionProperties and discrepancy between the Game and Engine by making use of static and dynamic libraries.
  • IO Filesystem.
  • Font and Icon rendering (in-game user interface).
  • FMOD audio system implementation.
  • Porting engine to Nintendo Switch.

Tools Programming

  • Bug Reporter tool which sends reports to the Jira scrum board.
  • ImGui interface with Entity list and component viewer/editor.
  • Build versioning system based off source-control changelist.

Codebase

https://github.com/Dannyfaction/CodeExamples

Details

Start date: 02-2021. Duration: 4 months

Custom Engine, C++


Programmers

Danny Kruiswijk
Dion van der Wateren
Olivier Candel
Niels van der Marel
Tom Lemmers
Antreas Christodoulou
Levi de Koning

Visual Artists

Niels Voskens


itch.io

https://buas.itch.io/dataflow


Over the months that I worked on this project, I had a diverse set of responsibilities and contributions. From Engine programming to Tools programming, to balancing the game, designing the audio and finally porting the entire engine to the Nintendo Switch.

Engine
We had a lot of roadblocks related to our design of the engine and choice of libraries. We initially started with Flecs as our Entity Component System, but due to a lot of problems such as missing functionality and bugs we encountered in the codebase, we decided halfway throughout the project to change to a much more reliable ECS, EnTT.

For most of the data types of the engine, we decided to stick with the C++ Standard Library and Windows SDK for underlying OS-specific features.

Porting the entire engine to the Nintendo Switch meant that I had to learn how to use the Nintendo SDK and transform the OS-specific behavior in a short time period which I learned a lot from! This also included profiling and optimizing the overal performance for the Switch build.

BugReporter
We noticed while in the production phase that we were reluctant to report bugs that we encountered during development as you had to manually find the Jira Board, create an item, categorize it, give it details, upload the logs etc etc. Thats why we decided to make reporting bugs an in-game feature that handles the cumbersome steps.

I had to figure out a way to communicate with the Jira board, where we have an overview of all our Bugs, from within the engine and I did not have experience with making API calls from within C++. After doing some research I figured out that CURL is a lightwieght, cross-platform solution to this problem which can make HTTP requests to communicate with URL-based API's.

As we were already using ImGui for our graphical user interface of our game engine, it made no sense to include another GUI library which would complicate things more, so we rather stuck with ImGui for the graphical user interface of the BugReporter. The only problem was that we wanted to automatically open the BugReporter once the engine crashed via an assert, which wouldn't be possible from within our single-threaded game engine as the engine completely halts. This is why I decided to make the BugReporter a standalone application which would simply launch outside of the engine which removes the dependency.


BugReporter Tool



FracEngine in-engine Tools