top of page

Attention:
      Critical failure detected during loop jump activation sequence. Immediate caution advised. Initiating diagnostic procedures()

...


Proceed with caution. Engaging emergency protocols. Evaluating system integrity to mitigate risk.

Welcome to Project The Loop

For quite some time I have fantasized, researched and planned the game I myself would really want to play.
This project will be the culmination of ideas I’ve kept close for the past years. A passion project of mine and a way to showcase my technical and design abilities while giving myself the experience of producing a complete game from pre-production to release.

I've come to a stage in my life when I know it's possible for me to create what I've visioned for so long. 

 

My biggest inspirations for this project are FPS Sci-Fi titles with atmospheric universes and responsive movement like Halo and Destiny combined with the mystery and storytelling of Outer Wilds mixed with a little bit of roguelike elements. 

Here you can follow my process of trying to mix my favourite kinds of gameplay and genres, while alos learning as well as sharing insights along the way.

Game design document

During my time abroad I worked on this quite extensive GDD to plan my work going forward.
I'm in the process of refining it while updating it continuously.
You can find the most up to date version here.

Feel free to click on the PDF icon to the right and have a look.
I will post snippets from it below during my process.​

Week one

Testing out procedural animations
and prototype for movement functionality

The majority of the animations for the player movement are procedural. Variables controlling different alphas are being set it the Player blueprint which control Bone Modify Transforms in the animation blueprint.

Each default movement functionality is in placed and a first pass of tuning has been done. I've set up a Metrics Gym to test out the movement and tweak it thereafter. 

Setting up character inheritance
and adding the Gameplay Ability System

I created a Character C++ class and included the Gameplay Ability System framework to the class so all child characters could inherent the component.

The Player Character derives from the project C++ Character and inherents GAS from it. I added all relevenat Inputs, Mapping Context and movement functionality to the BP_Player.

Character inheritance.png

Camera design and object specific FOV

 

To prevent the weapons and/or FP arms to clip into geometry I created a material function adjusting the World Position Offset by rendering the object on top of existing geometry. This basically scales the objects vertices towards the camera without the player noticing from her point of view and always renders the same no matter the choosen FOV.

This is a very well working solution to the weapon clipping issue. One of the most used solution would be to have a seperate camera rendering the arms and weapons on top of the viewport, though this is quite complicated to achieve in Unreal Engine with a decent result.

Week two

Creating a Health Component and testing different shield mechanics

After trying to piece together using GAS to fire weapons and dealing damage I decided against it for the non ability mechanics. I felt that it became slightly too complex for just a few weapons. 

I made a Health Component in C++ instead and added a regenerating shield through blueprints. After some testing I decided that if the shield would fully be depleted, it would not start regenerating again. This is subject to change after further playtesting, but works great for the time being.

Establishing the upgrade loop

One of the main goals for this project is to limit the amount of 2D menus. I want to keep the game as diagetic as possible.

Upgrading the suit and is done by adding aquired modules to it by hand. For now, while working on the procedural animations, I've split the player logic into two characters. One used in non combat zones and the other one (while using the suit) in combat/missions.

UpgradeLoop.png

Prototyping the upgrade modules and suit workbench

 

It took a few days of research and testing to see if I could utilize GAS by having actors holding the ability classes. When attached to the upgrade bench, they'll grant the correct ability to the combat player character, while storing the given abilities in the GameInstance to be accessed across all levels. When a module is removed, so is the ability.  I think this could be a really cool and modular way of customizing your suit to cater to each players playstyle.

Week three

Cleaning up the movement

When setting up a couple of more traversal examples in the metrics gym I realized that the function handling the capsule collisions half height didn't translate as well as I first thought from crouching to sliding. 

The issue in hand became quite complicated to pin point.

I could track the float in runtime but there is no out-of-the-box feature in Unreal to change viewport in runtime while still maintain control over your character. So I made a debug camera tool which allowed me to change between viewports in runtime and automatically execute console commands to show the necessary collisions. With the help of the tool it became much easier to time the capsule half height changes.

Documenting design guidelines

I had to take a little step back from prototyping and focus a bit on the GDD this week to remind myself of a few useful guidelines to not become too overwhelmed with the long list of tasks.

With the help of notes from my educations, a bunch of GDC talks and other useful sources of information I wrote down important things for me to keep in mind during the production. I focused on analyzing design, vision, evoking emotions, approaches to fixing issues and control mastery.

Feel free to have a read, either by clicking the selected pages to the right or by going through the GDD above.

Collision filtering

At the end of this week I focused on setting up a prototype for interactions. I planned an easily scalable systems that could be applied to all actors, including enemies (which exluded utilizing a parent blueprint for interactables).


I created a component used for tracing the interactables and a custom shape actor with customizable volumes which can be attached to any object och character. To prevent inconsistencies by using custom collisions I added and defined a new collision preset, dedicated for interactables, only responding to the trace channel used by the InteractionComponent. This preset overlaps all other traces used for example physics objects and weapons.

CollisionFiltering.png
bottom of page