Unreal Engine·Programming·Game Design

I created a Steam Game in 60 hours using Blueprint. Here is what I learned.

I created a steam game in 60 hours using Blueprints and Unreal Engine 5.

Hi, I love game jams.

So during the holidays I decided to try to do a little project.

The goal was to create a shippable game in as little time as possible and to also not use much C++ and do the bulk of it in Blueprint using Unreal Engine 5. ( The project ended up having 2 main C++ lines and that’s it )

The objective of using BP as much as possible was to showcase that a game can be created and released using Blueprint, even if the game requires procedural instancing of levels or other complex topics.

So I decided to create a Horror Game inspired by PT, The Exit 8 and I’m on Observation duty type of games. A “spot the differences” horror game.

This is the game if you are curious:

https://store.steampowered.com/app/2760600/Escape_Floor_Zero/

Main technical challenges:

  1. Level geometry that changes depending on your choices, so a little bit of procedural level instancing is required
  2. Random anomalies that can modify the level and are very varied
  3. Very constrained time resource, so everything needs to be iterated fast
  4. Solo Developer so I had to do everything

What went well

Blueprint

Blueprint is incredibly powerful and I would not have been able to finish the game if I had the iteration time of C++ and needing to compile every time. Being able to try things fast and throw what did not work away allowed for ultra fast prototyping of both the core gameplay as well as each of the game anomalies.

Level Instancing

Using Unreal Level Instances I have been able to create the pieces of the map once, and then start instancing them with the transforms as needed. The only thing here is that getting which actor was in which level instance required those two lines of C++ as that functionality was not exposed to Blueprint. At the same time, due to shadowmap setup, when a level instance is spawned there is a performance hitch, so I still have to work on that.

Steam Publishing

Publishing and integrating with steam has been pretty painless and specially integrating achievements with steam and unreal can be done in literally 30mins. Once you have the setup then you can connect as many achievements as you need.

Using Lyra as a starting point

This would not have been required at all, but has been helpful specially for the settings menu. That being said I should re-skin the settings menu to better fit the game, but right now have not had time to do so.

Learnings

The Noodle Bowl

The game being full blueprint, if you do not prepare well, things can get out of hand quickly.

In my case prototyping and production were one and the same, so a lot of code ended up being placed in the Game Mode and now it’s a big spaghetti plate that is difficult to maintain.

If I were to do things again I would separate things more or even create a specific actor/subsystem to manage the level stitching.

Do Builds Early

Fortunately I did builds quite early from the start and this allowed me to test out controller support, performance, steam integration, etc.

But if you don’t build early and often you might find out too late problems that will take much more of your time than if you have found them out earlier.

Initial Design Is Important as a Solo Dev

Had I chosen to go with a more character oriented game like a third person hack an slash ( which I’m working on in the future ) this project would not have been finished in this timeframe. The amount of work that having animated characters requires and the kind of interactions they have is incredibly big.

Asset Creation

For this game I chose to do a first person game that required as few characters as possible.

For the assets I used Quixel Bridge which is integrated in unreal and some marketplace assets that Epic has been giving out free each month.

As a solo dev you have to move fast, so what I did was take the assets and modify them to my needs. ( change color, combine pieces, etc ). For instance, one of the monsters is a scaled up chicken combined with a scaled out wolf + some cables instanced multiple times and rotated. Of course this will not work with all genres of games, so that is why the previous point is also important.

Stick to the Vision

When you are developing a game with no constraints it can be easy to let your imagination go and start adding features that no longer meet the initial vision of the game. It is fine to prototype, but once you have a clear vision, stick to that and finish it. If not it will be difficult to be able to finish the project and instead you’ll probably end up with tons of cool features but no game. ( That being said I could not resist adding some secrets for the players to discover )

All in all this was a great experience, and a good look at how much you can get done in a small amount of time.

Recap

  • Blueprint carried the whole game, and the fast iteration is the reason it got finished at all. Only two lines of C++ were needed, to read which actor lived in which level instance, since that wasn’t exposed to Blueprint.
  • Level Instances made the modular level building work, but spawning one causes a performance hitch from the shadowmap setup, so budget for that.
  • Building early paid off. It surfaced controller support, performance, and Steam integration problems while there was still time to fix them.
  • Scope followed the vision. A first-person game with almost no characters is what made 60 hours realistic. A character-driven game wouldn’t have fit.

What this doesn’t cover

The build is the easy part. Getting the game in front of players is a different skill, and marketing and wishlists are where I’m not experienced yet and still have a lot to research. So take the development side here as experience talking, and the “getting people to play it” side as a work in progress.

Keep reading

GiveAbilityAndActivateOnce: One-Shot Abilities Without the Cleanup

GiveAbilityAndActivateOnce: One-Shot Abilities Without the Cleanup

Grant an ability, activate it once, and let GAS remove the spec by itself.
How to Create Procedural Levels with Level Instances in UE5

How to Create Procedural Levels with Level Instances in UE5

Create the Procedural World of your Dreams
Learning about Ability Instancing Policy in GAS

Learning about Ability Instancing Policy in GAS

So many instancing types!