Game Off 2024 Journey
Making games is hard, but making a game in a month is insane 🤯 I participated in Game Off 2024 and here you will find all my experiences, challenges and pain with a bonus of my first time experience using Unreal Engine 5.
## What is Game Off
Game Off is a annual game jam hosted by Lee Reilly and Github. At the start of November you were given a theme and use this as base to make a game. The event allow using any kind of tech, game engines or libraries. What is important is finish the game and stick to the jam's theme.
## A game developer planning
One objective I give myself this year, was to create a nice game like I did last year in this same jam. Last time I started from zero and learned about Godot, I liked but there were some limitations I faced, most likely godot developers more experienced would have knew how to handle the situation, but I as a new developer got frustrated those times, and lost a lot of time trying to understand the Godot insights.
Because of that, and also a new feeling of creating something in 3D, I decided to use something else than Godot, most between Unreal and Unity. Deciding to go for Unreal, because Unity despite being very good, I would need to learn another programming language, what is not the case with Unreal, because I already now a little bit of C++ and most important, the blueprints seems a lot easier than a whole new programming language like C#.
In my free time, I started to learn more about Unreal, making a simple game to learn the basics. And there we are, November is here with the new edition of Game Off 2024.
## My first thoughts
In 2024, the theme was secret, could be anything related to this, even the acronyms SECRETS (For example Synchronized Events and Cryptic Riddles for Enigmatic Triggered Solutions), so the imagination go wild. But before the jam, I already had a crude base of what I want to do.
I think everyone knows about Minecraft, this game was part of my life, and specially I liked to play with mods from the community, mods like IndustrialCraft, BuildCraft, ThermalExpansion, Botanica, and many others. But specially, my favorite mod by far was Thaumcraft, a magical-industrial mod that added new items, features, biomes and automation. Everything I wanted in a Minecraft mod, specially because the assets were very detailed and beautiful. But you see, in this mod there was a mechanic where you extract aspects from items, like a dirt would have aspect of Terra, or a clay would have aspect of Aqua and Terra. Those aspects could been stored in jar, where could be used to craft more advanced items. I wanted to get a similar idea for my game, probably with a Overcooked like system.
The game would have a magical theme where you would extract essences from random items that would pass in a conveyor belt and then a client NPC would request a potion made by those essences. I love this idea and I will make something like this in the future, but the jam has the theme SECRETS, and how to adapt this idea for this theme?
## The creation of the core mechanic
The first day of November I was trying develop some idea to fit the theme in my game, but I was not satisfied, and even using ChatGPT to get more ideas, looked like I was not getting somewhere. But suddenly I remember seeing my brother playing a game called Paper's Please. I already knew how the game worked, and I do not know why, but I got a really great idea. What if the client NPC instead of telling in your face which potion it need, use a kind of riddle in the request? Yes, there is the theme SECRETS in action, was perfect. The only problem I already was in the 3th day and at first I wanted to make the graphics like Overcooked, I have already been doing some 3D work in Blender, but you see, I was alone with the project, making a full game, with music, modeling, assets, material, code, level design and everything in my free time was very unlikely to happen, so I need to simplify the scale.
## From 3D to 2D
At this point I already had knew a lot in Unreal, and was very confident about my skills, but the fear of not being able to finish the game in time made me want to change my plans, and I remember a very great game called Cookie Clicker, which have, in my opinion, a great interface for a game if that many content, why not make something similar? I do not wanted a clicker game, but I wanted the interface look of Cookie Clicker, for this reason I started to draw some raw blocking design but I wouldn't even imagine that this would have nothing to do with the final project.
<Img
src="/raw-draw-mystic-cauldron"
name="Raw draw of the interface"
alt="Raw draw of the interface"
/>
## The feature eater
At day 5, I already had realized that the scope of the game was too big for just me to handle in a month. For that reason, I started to remove some features like the conveyor belt and sticking more with the core mechanic- Player would have to guess what potion the client NPC wanted by it's hints. If you do not realized from the raw draw, I had a lot of unnecessary widgets that could be cut from the project.
In the end I got a very minimalistic style that could be done easily in a month, and if left some time, I could improve by adding features like upgrades.
## The game
Finally I had something. The core concept still remains- Players would guess what type of potion a NPC client want. I decided to go with 5 essences (Earth, Water, Fire, Disorder and Magic), and making a potion by adding two essences and one flavour(refreshing, sweet and spicy), the order would not matter, so Earth + Water, would get the same result as Water + Earth. This gives me a total of 10 different potions and more 5 because I wanted a double potion like Earth + Earth, total of 15 essences, so I would need to create at least 15 dialog, which seems too much, but is not, specially with the help of ChatGPT.
The roadmap stay like that- NPC came and asks for a potion, you as a player, need to select the right essences and then craft a potion. It will take some seconds to craft, and then you can verify with the NPC if is the correct one, if not, you can store for the next NPC or delete. After a successful request, you earn some money to spend in upgrades and after delivering all the potions from that level, you go to the next, where new potions will be asked.
<Img
src="/monster-button-3d"
name=""
alt="A very big wall populated with buttons"
/>
## Work in progress
I started coding the project in the 8th day, which could be alarming, but I felt everything organized and ready to go. In the first days, I wanted to know, if with those features simplified, I could do a 3D game, so I sacrifice 2 days by making like a button monster and configuring the camera, but in the second day, I realized I was losing too much time in unnecessary things like the camera, so I went for my original plan of doing a 2D game. Unreal have a great system of interfaces called widgets or UMG, soon after, I already had learned will be way quicker than a 3D game, but I also realized that the assets would be made very soon or I would need to get from internet.
In the mean time, I was doing the code with mocked images, like white squares and colored circles and I had made my first part of the game- Essence selector and I was ready for the next step, the crafting station, or so I thought 😰.
<Img
src="/first-essence-selector"
name="Essence Selector"
alt="Square full of button circles that represents the essences"
/>
## My new nightmare- timers
The crafting station would need to have the crafting part and the balcony part. I first made the crafting and was very easy to add the essences from the essence selector, but I never could image how hard would be to make the crafting part. If you do not remember, I had a plan of making the crafting some seconds long, so player would not spam potions, but for some reason I could not make the timer work properly and for worst I could not even debug that, because sometimes would work and sometimes not. I remember losing a LOT of time in this feature, I tried a lot of strategies, even recursion. But I always end in the same problem. Today I feel like I would suffered a lot less if I had read the full documentation. So if you are new to programming or want to get better, read the documentation, specially if is in a great organization and had lot of content, like the Unreal. But at this point I did not have time to read the full documentation and the page of timer was confusing to me.
I decided to leave the bug and start to do something else, maybe in the future I could solve this.
## From hell to heaven- Data Tables
While I could not solve the bug, I started to make some changes in the main structures- You see, before, I had a enumeration for the essences and then when crafting, they need to look of each recipe to see what is right. I know the game has a small scale, but I wanted to learn the right way now, start my studies in what is called Data Tables, some beautiful and shiny solutions for my problem. You can think in it as a collection of structures, or objects in other programming languages. With that in my, I know if I want to add more potions or essences in the future, would be very easy.
I want to take a few lines to explain how I did the logic of ids. First, every essence has a id, 1-Water, 2-Fire, 3-Earth, 4-Magic, 5-Disorder, but the potions has an id of a string of the ids that made that potion, for example, Pure water potion has an id of 1_1, the Water-Fire is 1_2, always registering the potion with the smaller essence id first than the greater one. With this, when searching for the specific potion, the code will always knew the right id, for example if I give essence magic and earth, the output will be 3_4, so just look for this id and nothing more.
When researching about this, I also came along a very good strategy for a game with many crafts, like Minecraft. And is using a table for the items, and a separated table for the recipes, this makes code for organized and will be easier later if need to add more recipes for the same item. I know my game will not have more recipes in the future, so this is not a problem.
Before going to the next point, I also want to say that I dropped the idea of flavours, I thought the game was good enough without them.
## Thanks free assets
The journey was tough, but would be even tougher without free assets. The majority was modified by me, but they gave me easy and a fast way of creating the perfect feeling I was looking for my game. Thank you for all people who did it. I would never did the game in a month without them.
Assets list:
- [Free 39 Portraits Pixel Art Game Assets](https://free-game-assets.itch.io/free-39-portraits-pixel-art-game-assets)
- [[Valley Friends] Potions](https://pixerelia.itch.io/vf-potions)
- [Cursor Pack](https://kenney.nl/assets/cursor-pack)
- [Modern Interiors](https://limezu.itch.io/moderninteriors)
- [Sunset Tavern in the woods](https://www.fab.com/listings/550baecc-f4cb-4071-91f5-0af0391481c6)
- [RPG Essentials SFX Free](https://leohpaz.itch.io/rpg-essentials-sfx-free)
## Last bug corrections
In the end of the month, there were a lot to fix and make the game "playable", so I focused on this, specially the timer problem. I take a lot of time to learn how properly use the timer's functions in Unreal. I think they are a bit of confusing, and as I did not have so much time to deep learning, bring me a lot of trouble. Other bug that gave me headaches was the cursor which came in the center of the screen for no reason and in a randomly way, this I could not solve it 😞.
Well there was minimum corrections, but in the end I posted the game on December first.
## What I think
This was a short but also intense month, which game me a lot of experience in developing games in Unreal, and also put in practice a more complex idea than previous projects. I really liked and in 2025 expect me participating more and more in game jams out there. Thank you so much for reading this article. If you wanna see and play the game for yourself [take a look](https://drafonf.itch.io/mystic-cauldron) and as always, see you in the next article 😉 Bye!