Page Under Construction
“DeltaBlade 2700 Re:Create is an action-packed 2D competitive local multiplayer cyberpunk-themed platformer with fast-paced robot ninja sword combat and jetpacks, focusing on gameplay variety and user-created content.”
DeltaBlade 2700
The original DeltaBlade 2700 was created in C Processing by team Handshake Firm during their first year at the DigiPen Institute of Technology. The team consisted of 5 programmers in the beginning and brought on additional members during the Summer to polish the game and release on Steam, free to play. It was even featured at Pax West 2019!
DeltaBlade 2700 Re:Create
For our fourth year at DigiPen, we decided to re-form Handshake Firm with some new members, bringing the team size to 11. We all had a love of DeltaBlade 2700 and we wanted to expand our programming skills and have a chance to experiment, so we decided to recreate DeltaBlade in an entirely custom engine of our own making.
DeltaBlade 2700 Re:Create is powered by a custom engine written in C++ and rendered with Vulkan. The engine is built with CMake and the project is maintained with GitLab. The game runs on Windows, Mac, Linux, and the Nintendo Switch.
As part of the original plan for the project, we wanted to release the game on the Nintendo Switch. In order to accomplish this we had members of the team including me take the Intro to Portable Game System class at DigiPen. This class taught us how to work with Nintendo Switch development kits and we were given the green light to attempt to port our game to the Nintendo Switch hardware for the class’s final project. Thanks to our forward thinking in how we built the project during the first half of the semester, we succeeded in porting the game and even added in additional features that took advantage of the hardware.
Unfortunately due to circumstances out of our control, while we were encouraged to continue development on the hardware, we would not be able to publish the game for the hardware. Given this news, we decided to discontinue development on the Switch so that team members could focus on other opportunities. Some members including myself decided to continue working on the PC build of the game so that we could enhance the game with new features and gameplay.
Overview
A quick rundown of some of the work I accomplished on DeltaBlade 2700 Re:Create.
-
I integrated two performance profilers into our engine under a common API. Optick was integrated for profiling on Windows machines, while the profiler from the Nintendo SDK was integrated for the Nintendo Switch version of the game.
-
I created the UI system for our engine which would be used to create all of the game’s menu scenes as well as the new Level Editor. The UI system is integrated with the rest of the gameplay systems as ECS components. The 2 ECS components that make up the UI system are the UISelectable and UIContext components.
-
One of the new additions to DeltaBlade 2700 Re:Create is the in-game level editor accessible from the main menu. I created this editor to be controller friendly and to allow players to create levels quickly and test them with the new game modes that have been added.
UI System (SECTION WORK IN PROGRESS)
Designing the UI System
For our project we didn’t need anything particularly comprehensive for our custom engine’s UI system. The primary goal was to create a system that would allow us to re-create the UI scenes from the original game, but I had a secondary goal in mind as well. I started this project with a dream of adding a new level editor to the game and I had a particular user interface in mind for this editor. I decided that if I wanted to eventually create this level editor how I imagined, the best course of action would be to design a UI system that accomplished both of these goals at the same time.
I started the process of designing this UI system by going back to the original game and drawing out how each UI scene operated. I wanted to build a understanding of all the different input and behaviors each scene needs.
Once the UI screens we needed to recreate had been analyzed, I could sum up the features the UI system needs to support so far:
Input:
Navigate Up/Down
Navigate Left/Right
Execute on Left/Right
Select
In addition to input, the UI system needed to support certain behaviors:
The options screen made evident that in certain circumstances we wanted to be able to choose between navigating Left/Right and executing on Left/Right. Executing meaning that we call some sort of function for example.
The pause screen shows that selectables need to be able to be “grouped” together in some way.
When we enter/exit these groups, we want to have the option of executing some sort of functionality. Ex) Hiding/Showing certain buttons.
This was a good start; now it was time to take a look at what I needed from my future level editor.
The editor interface I wanted to design for DeltaBlade 2700 Re:Create was inspired by the interface in Super Mario Maker 2. I didn’t know the specifics of how it would look yet, but I knew what behaviors I wanted to support.
At this point the details of how our UI system would work were starting to form in my head. Now is a good time to start explaining some of the labeling that has been showing up in my drawings. I mentioned in the Overview section that the UI system was comprised of 2 ECS components: UISelectable and UIContext. Objects in my drawings marked with (S#) indicate that those objects are UISelectables or “Selectables.” Regions marked with (C#) refer to UIContexts or “Contexts.” As a high level overview of what selectables and contexts are:
Selectables: These are objects such as buttons. They can be navigated to, unhovered, hovered, and selected. Relationships can be defined between selectables so that you can navigate from one selectable to another.
Contexts: These are objects that in a way group together selectables. Certain behavior can be executed when we jump around between selectables in different contexts.
We will go into more details about these components later.
Looking at what I wanted my level editor to roughly look and behave like, it seemed like there weren’t any more inputs or behaviors I needed to add beyond what was analyzed with the original game screens. It was almost time to start designing what these selectable and context components would look like in code. However there was one more important aspect to think about that would bring together all of these desired behaviors of the UI system. We needed to take into account how input was polled in our engine and how that input would be distributed into this system.