Superhot bullet time
-
Developed With: Unreal Engine 4 and C++
-
Date Developed: June-September 2021
-
Status: Released
-
Platform: Windows
-
Play Here: https://gamesbysaul.itch.io/superhot-mechanictest
Main Features
-
Time only moves when you move - Bullet Time
-
Melee and Shooting combat
-
AI to fight with
-
Ability to throw weapons
-
Enemy spawners - [Can allow for wave game modes]
Engine and Creation
What is the main mechanic?
The main mechanic was inspired by SuperHot (SuperHot Team, 2016) and their mechanic of 'Time Only Moves When You Move' a rather simple mechanic to recreate but one that takes a lot of polish to make it feel good.
I decided to re-create this mechanic to help improve my C++ skills, something I am actively trying to learn and improve at.
Bullet Time
Bullet Time is a rather simple mechanic to create but fine tuning it can require a lot of time going into it
The code below outlines how the Bullet Time works. Whenever the player is not moving, the TimeDilation is set to the Minimum value, in my case about 0.04, and when they start moving it goes back to 1.
When researching this project, something interesting I found out which made a lot of sense was that when you perform an action in Superhot time jumps up briefly, so I added in that functionality as well, which you can see with 'bIsDoingAction' I created a function which most action events call when performing an action.
if (!bIsDoingAction && bCanStartBulletTime) {
if ((MovementY || MovementX) != 0) // They don't equal zero so therfore moving
{
TimeDilation = MaxTimeDilation;
}
else
{
TimeDilation = MinTimeDilation;
}
UGameplayStatics::SetGlobalTimeDilation(GetWorld(), FMath::Clamp(FMath::Lerp(UGameplayStatics::GetGlobalTimeDilation(GetWorld()), TimeDilation, DeltaTime * TimeMultipler), MinTimeDilation, MaxTimeDilation));
CurrentTimeDilation(UGameplayStatics::GetGlobalTimeDilation(GetWorld()));
}
What else was made with this project?
Great question! So as mentioned, the main mechanic is rather simple to create, so I thought I would add some more SuperHot features to the game to make the project more fun. So I added different weapon types, such as SMGs, Shotguns, Katanas and Shurikens. And with weapons I added enemies for you to fight against and destroy.
Whilst designing this I focused on balancing the different weapon types to make sure no weapon was more powerful than another weapon without a drawback or some limitation to balance it out.
Superhot has a very satisfying smash effect when you destroy and enemy so using Unreal's Apex destruction I added something similar.
What did I learn?
This was one of my first solo projects and games using C++, so it was an interesting experience to learn about setting up different character types, weapons, the input system and registering multiple events to one input, such as different sprint variations or automatic shooting.
I also learnt more about combining Blueprint with C++, for example when using Timelines which I used to do colour fading for the AI.