The first Game Jam of the year is around the theme it's spreading from pirates software game jam. For this particular game jam, I teamed up with Rachel. This workbook shows the work I did for the project. For this game jam, we had 2 weeks to produce a game around the theme it's spreading.
The Idea
First, we brainstormed different ideas for this theme. The idea we ended up going with its spreading light to light up the world. The game's premise is that the player must find the touches to relight them up, bringing light back to the world while trying to run away from the enemies. The main reason we chose light is that for the capstone bioluminescent, lighting is critical to the project, so we wanted to experience lighting for the game.
For this game, Jam is planning to try out Unreal Engine to test if Unreal Engine would be a good program to use for the project. This is the first time using Unreal to make a game. I have only used Unreal once before this for the spatial assessment.
What do I want to learn?
•Learning the game engine unity requires only a basic understanding. From doing the spatial assignment in year 2. However, only explored how to create levels. Not actuall coding in unreal which mainly uses blueprints a visual form of coding. This will be my first time learning and exploring this side of the unreal.
•For this game jam, planning to learn how to use a blueprint and other elements within unreal used for the game.
•For this game, I will be learning how to create enemy AI coding, e.g. health and damage system, enemy swamper, and Enemy behaviour.
•Planning also to explore the lighting with unreal, as capstone lighting is one of the critical elements.
Character Design
Once we had the idea for me, the next step was character designing and modelling. For the character's theme, we went with an ocean theme for enemies. For the main player, the main inspiration was the element of light itself. Once I have the themes for the characters, I move onto the silhouette process to help figure out the base silhouette and shapes for the characters. Because we are on such a short time frame, I made sure to create a simple design that will be easy and quick to model but still have interesting sites. First, I created a few silhouettes of the player's characters. For this, the main idea was light and fluidity.
At firest the character design i had in mind were ocean creatures as they would be simple to model compared to humnaoid chatcetrs. However, we realised that for the animation side, we would need to rig and animate them by hand, and due to the time limit, it would be too difficult to do rigging by hand, so instead, we pivoted to a humanoid character design so we can use Mixamo for the animations instead saving time.
Here are the original silhouette and character designs before switching
Here are the new silhouettes.
Once the player charcter was done i moved onto the eneiemy charcters. For the design, I wanted to create creepy and menacing-looking characters. As a resulkt i reasted different types of sea creatrures i could potienly used as an inspration. As a result, I design an enemy around an anglerfish for its sharp shapes and edges. The second enemy was inspired by a jellyfish.
Here are the silhouettes for the enemy characters
Once happy with the design, I chose the final three character designs and moved on to the modelling stage due to the time limit. Here are the three final designs.
Modelling
Next stage is the modeling stage, for this stage i set myself the goal/channgel for the modeling as the type of modeling i have done sar is mainky meduin to high poly modles. As a result for this game jam i set myself to only model low poly modles and only allow myselt 3-4 hours per character to model. This was an interesting experience as only having 3-4 hours to model it took away the element of overthinking and analysing how certain details can be created. Instaed I only model the basic shapes for the characters and then textured the details on instaed. For the modelling, I used Maya. This was a really fun challenge. I set myself as modelling normally takes a long time as I focus on the small details. However, focusing on speeding up the process creates an interesting outcome. Overall, I am pretty happy with how the models turned out, considering they were quick models. I only used the knowledge I have learnt over the years through modelling for projects at university.
The main character took 3 hours to Model and UV unwrap
Angler enemy took the longest with 4 hours
Jellyfish enemy took 2-3 hours
Here are screenshots of the work in progress for the modelling in Maya:
Texturing
I moved on to the texturing part once all the models were modelled and UV unwrapped. For this, I went with simple texturing, adding gradient colours for depth and then adding shadow and highlights. For the main character, I wanted to make them bright colours with emissive to stand out in the dark. For the enemies, I wanted a contrasting colour scheme from the player. As a result, I went with black and red and only made the red emissive. Here are the textures for the characters. I used substance paint to texture the characters.
Blueprint Unreal Enigue
This was my first time doing coding within Unreal Engine. The only code experience I had before this game jam was Unity.
Behaviour Tree for enemy AI
The first coding I did for the game jam was the behavioural tree and the enemy AI. This was the most complex blueprint within the game jam I created, as it combines two functions. The first function is the behavioural tree, which is used to play the event you want the AI to achieve, for example, for the enemy to chase the player once the player gets into the enemy range, to attack the player when they are close enough. And continue to chase the player when they are out of the enemy range. This was my first time hearing about the behavioural tree function, and I was intrigued to see how it works.
The second function required for this to work is the blueprint code itself. Where the behaviour tree is used to play events, and the blueprint code is used to say what happens in said events. As a result, I had to make a blueprint for each action. This meant I had to create a chase blueprint, an attack blueprint and a wait function. There are different formats of behaviour trees to use, but I used a sequence behaviour tree for our game jam. We have a sequence behaviour tree that plays the event in order and repeats the order over and over again. Where the sequence for each event will not go until the first sequence requirements have been met. This continues for the next sequence, and then so on and so on. Here are photos of the work in progress of creating the behaviour tree and the blueprints for the enemy AI. This was quite complex for me as this was my first time doing blueprints. If I were to do this again, I would do this near the end once I had a better understanding of Unreal blueprints, but unfortunately, the enemy AI needed to be blueprint encoded before I could do any of the other coding. I watched a lot of tutorials to understand this function within Unreal
Lights Trigger Mechanics
The main mechanic and the game jam is the player turning on lights to relight the world. Where it was my task to create the turn-on light mechanic. The first step for this process was to research and watch tutorial videos on different ways to create light switch coding within Unreal. I ended up choosing to create a simple blueprint code that works when the player gets into the range of the light and presses the chosen button. For example, in P, the visibility of the light will turn on, and with how I did the blueprint code, the light will stay on until the player dies. This was one of the more simple blueprint codes I did for this game jam. Here is the photo of the blueprint for the light switch mechanic.
Enemy spawner
The next blueprint coding I worked on was the enemy spawner code. Once again, I researched different ways you can code enemy spawners within Unreal. There were different types of spawners. For example, there was a spawner type, which spawns a large group of enemies at once; a spawner, which spawns an enemy every certain amount of time; a spawner which spawns enemies into certain spots; and then there was a random spawner that spawns enemies at random locations. For our project, we decided to go with the random spawner blueprint to add a bit more difficulty to the gameplay. For this code, I created an event begin play node, and then I set a timer for the said event using an object to be classed as the active spawner. From there, I create a get location node and connect the node to get a random radius node. Combining these nodes together creates a random event of enemies spawning at random times and locations. The code was fairly simple once understanding the logic behind which nodes to choose and which ones to connect to what. Here are some images of the blueprint and creating the blueprint.
UI
This was my first time using UI within Unreal Engine it was an interesting learning experience. As for Unreal, they use widgets for the UI. For the project, I created the main menu and the pause button. To learn about how UI works, I watched and researched a lot of videos on the topic. Through learning and experimenting with the UI in Unreal, I found it a lot easier to work with Unreal widgets compared to Unity's Canvas with the widgets; you can clearly automatically see how it will look on the screen compared to Unity's Canvas, which is larger than the camera so it the only way to see the proper scale is through playing the game. This can sometimes break the flow of work for me in particular; however, with Unreal, you get to automatically see what it will look like in the game. Like Unity, you also need to code the menus to work, where you need to link the two scenes or levels for Unreal together for them to work. Buttons work similarly in both Unity and Unreal, so that was an easy transition.
Overall, it was very interesting to see the differences in how UI is done in Unreal compared to Unity. Here are some photos showing the work in progress in creating both the UIs and the coding blueprints for the pause menu. The pause menu was a bit more complex to code compared to the main menu. The main menu was just linking to the next scene compared to the pause button, which requires coding to stop the game and then reload the game once the player presses the continue button. Here is the work in the process of creating and coding the UI and menus.
Play Through Video
Reflection
Reflecting on the two-week game jam, learning a brand new program within the two weeks was a challenge, but I am happy with how much I was able to accomplish within the time. The biggest thing I learned from this game jam was how to code within Unreal Engine through the blueprint node base. It was interesting for me to change from C# coding to visual coding. Personally, I found the visual nodes easier to understand than C# coding. One of the other things I learned from this game jam was just how big Unreal is as a program. There are many resources available for this program, and it was easy to find tutorials for what we needed for the project. The UI in Unreal Engine was interesting to learn and yo experiment with as it was easier to pick up how to do UI as the UI canvas. It was in a separate window from the game, unlike Unity, which uses a canvas on top of the camera.
After seeing how much we can get done within Unreal Engine within the two weeks, we are unsure if we want to use this program for our capstone since it's new. As a result, it will take us longer to create things as we'll be learning a new workflow compared to our normal one, Unity. This is a lot to consider when deciding on what game engine we want to use for the capstone project, as we only have a limited amount of time. One of the things I enjoyed the most from this game jam was giving myself the modelling challenge of only having two to four hours to model a character, as normally I do medium to high polys. This challenge gave me restrictions to my normal modelling flow, which made it fun to experiment with the knowledge I gained through study and implement it into the low Poly models.
In the future, I will definitely want to explore the Unreal Engine a lot more as there are a lot of good features within this program, and we have only had the tip of the iceberg of what the program can do within the time frame of this game jam, and it was interesting to learn at different game engines workflow. If I were to do this project again, I would look more into the tree behaviour tree as this was an interesting feature for enemy AI. However, I was unable to fully dive into the function and tool due to the time frame I was only able to learn the basics of what this function can do. Unity doesn't have this type of function, so it would be intriguing to look more into their behaviour tree within Unreal.
Overall, I really enjoyed pushing myself in this game jam to look into Unreal Engine from a gaming perspective, as before this game jam, I've only experimented with Unreal for level design and environment design. So, it was interesting to see how the game development side of this engine works. I didn't realize just how big of a program it is and how many tools and functions this program offers.
Comments