Global Game Jam 2018 took place at the end of January. It was hosted locally here in Sacramento at Square One Clubs. I participated as much as I could, but unfortunately I had some family obligations that prevented me from making it down to the site.
For my game, I created a first person puzzler in a 3D world. I used it as an opportunity to get more familiar with Blender and Unreal Engine. With this being a learning experience, I didn’t get as far as I would with tech I was already familiar with. Overall, it felt like a success. I am now much more comfortable making shapes and applying textures in Blender. I also learned what is lost while exporting a blender project into Unreal, such as shaders that are closely tied to the rendering engine.
Alright, so lets take a peek and go over some stuff!
My game takes place in a testing grounds with various platforms and standing orbs. In this first iteration, it takes place in space, but after building out the platforms that idea didn’t seem to pan out so well, for reasons I’ll go into shortly. The skybox texture was created using a premade texture from SpaceScape, a free tool for creating space skyboxes.
Unreal is a very powerful engine with some very useful tools in prototyping a scene. You can create shapes in the scene on the fly. Unfortunately (at least as far as I know) those custom shapes, known as brushes, are their own object type and I couldn’t find an easy way to convert them into components for reuse. I imagine it’s possible, the answer just wasn’t easily at hand. I created the octagon platforms and the orb with stand using brushes.
The prototype was meant to contain a couple puzzle platforms where you had to touch light orbs in the right sequence in order to open the pathway to move forward.
The big lesson I learned in creating this initial level was that too much open space is a bad thing for this type of game. It can be pretty, but it becomes boring quickly because it lacks visual stimulation and removes mystery and discovery. The suspense of not knowing what’s in the next room or around the next corner is non-existent because those elements don’t exist. In addition, the lack of landscape/buildings make the story of the level sparse, which is also unappealing.
For that reason, if I work on this project again, I plan on adding buildings and short corridors that give glimpses of the outside.
At the start of the level there are “rising steps” which consist of several triangular shaped steps that form a bridge. Initially all but one step are hidden from view. When the player steps on the first, the others rise sequentially to form the bridge.
Powering the bridge was done using Blueprint visual scripting. With Blueprint, you script behavior through nodes that perform logic on other nodes (I’ll go more in depth on Blueprint scripting in a another post). The bridge is actually made up of two components; the container component that “activates” children steps once the first step has been touched and the individual step component manages behavior for each step once activated.
The screenshots above are too small to make out details, but they should reflect how noodly chaining can get. Visual Scripting can look messy when used in this way. I would rather code out the logic, however for prototyping it is much much faster and easier to iterate through.
There is a learning curve in getting familiar with the function nodes, but at the end of the day it’s still using common concepts used in programming. It’s just a bit different and requires different thinking. The context filter the editor acts as guard rails to prevent you from adding incompatible nodes, which eases the scripting experience.
The spiraling staircase allows the player descend to higher or lower levels. The length of the staircase was a problem here and with a lack of landscape or objects to interact with, the long descent turned it into a tedious walk that didn’t give much in return. If there was something big awaiting the player at the next platform, it may have worked to emphasis the player was transitioning into something more involved, but it didn’t work for the simple platform I had there.
Another problem with the length, and given the size and shape of the steps, was the camera felt like it was jittering as the player walked down multiple steps. In the future it would be worthwhile to try either angling the steps down or creating an angular collision box over the steps that smoothed out the descent.
On the art and modeling side, the “bridge” steps were shaped and textured in Blender, a free 3D modeling software. Blender is a powerful tool, but has a steep learning curve and many shortcuts to learn. One of the more challenging aspects of Blender that I run into is the different view modes it has. Two in particular are object mode and edit mode. The modes give you different ways to manipulate an object and the UI is contextual, changing for each mode.
Once I got used to some of the basics of Blender (which I did prior to the jam), learning to do things like change the shape, size, and texture of objects was much easier. I even managed to create a little transparent kiosk, shown in some of the screenshots.
The UV map was interesting to work with. Blender has a smart UV mapper that will break up the UV based off of the object. Blender allows you to paint on the texture from within the program, but I ended up creating the actual texture in Gimp. Gimp has a lot of strengths, but it’s UI drives me crazy, so the experience actually motivated me to finally knuckle down and purchase a Photoshop subscription.
In summary, I used the Global Game Jam as an opportunity to get more familiar with Unreal Engine, Blueprint visual scripting, and Blender. I found these tools are powerful and worth adding to my toolkit. The experience was very rewarding and I continued learning even after the jam, dabbling with rigging later on. There are A LOT of tutorials out there.
While Visual scripting and Blender have some downsides, such as visual messiness or a learning curve, they are still very powerful and useful.
Game development is about iterating through idea and learning through trial and error. It’s good to take a step outside of your comfort zone and try new things and see how it fits in your toolkit and overall vision.