My Epic MegaJam experience

Ok, so… The jam has concluded. I was able to finish an entire game on time, with no outside help. As simple as the end product is, I am very happy and proud of the challenges I took on and was able to overcome.

Some Lessons

Coming up with an idea, and keeping the scope from running wild and becoming unachievable in a week was definitely one of the hardest things. I spent the entire first day trying to figure this out. And still, the original idea varied WILDLY from the end product. There was a process of discovering what the game was all about.

The theme of the jam was as above, so beyond. Immediately, a few ideas came up. Went to the “Unreal Slackers” discord to check out what the community was talking about: All of my first ideas were also the ideas most people were having. Hmmm. So I had to really think a bit more about it.

I ended up going with a design where the idea was to have a character “glued” to a mirror version of himself below the floor. This was easily done. I coded a third person character, adjusted the spring component to be able to rotate along with the player and created a 90 degree turn for the player controller using RInterpTo in C++. This character would spawn the mirror character at the “BeginPlay” stage right below him, and update the location of the lower counterpart as needed. I added the option for both characters to “unlatch” temporarely using a timer, as this flexibility would be cool to have in order to solve the puzzle/maze I intended to create.

The final thing to figure out in the characters was collision detection. The collisions of one character needed to inform the other, so as to make sure that top guy couldn’t move if bottom guy was hitting a wall and vice versa. This was achieved by taking the hit normal from a collision detection on bottom guy, it would inform the inverse of a vector of the direction of travel that was unavailable. Simple enough. Made it into a component for future use, this type of collision detection might be useful down the road for some other game.

And at this point the game was meant to be a side scroller in 3D. The idea was that the player was going to be able to turn the view 90 degrees to discover new perspectives to the 3D map, and then in the same style as the PSP game “Crush” be able to collapse and expand the perspective between 2D and 3D (by way of changing the camera projection between orthogonal and perspective) and navigate the outline of that perspective.

That goal proved to be quite hard. Not because of the camera projection, that was done on day 2. The problem was that once the camera went to orthogonal projection, I needed to find a way to make the player navigate the outline of that perspective. There were several options to make this work, but none that were scalable, dynamic, and doable before the jam’s deadline. The ideal way would have meant having a custom actor that would scale up to the entire width of the level in the direction of the orthogonal camera projection, and then, at the time of expanding the view back to 3D, making sure both characters were standing on top of whatever was below them in the 2D view, likely using boxes and collision detection.

I can think of a few ways to do all of that, but again, time was of the essence and I had budgeted a single day for prototyping before having to move forward. Family and weekend activities prevented me from doing a lot of work during the weekend, it was already Monday and I had barely a prototype of the game mechanics with no game in sight. So I scrapped that part of the game. The idea is still exciting, though, and I have half of the methods worked out.

The game ended up having a third person character with simple latch/unlatch mechanic. I focused on level design, which was a lot of fun, and then on figuring out what the player needed in order to make the game enjoyable. Having a character upside down is no fun, so the pitch of the camera needed to go over the standard 90 to -90 degree. BUT, the controls become reversed once over that threshold. So that had to be resolved as well, although it was pretty easy. Also, switching character focus was important, too. If you unlatched both characters and moved too far, there was no way to know what you were doing with the mirror version of the dude. Once I was able to get those two things going, the game felt playable.

I also gave the game to my wife to play, who is not a gamer, and I discovered that it was quite hard. Pretty, pretty, prettyyyyyyyyyyy. Pretty hard.

So anyway, I added a way to show the solution using Niagara and particles, which ended up looking quite great if I may say so.

After all of this it was time to finetune and add details. I gave the game a whole “Severance” vibe with some office and town assets from Synty Studios, and some post process volumes that made it feel like two different worlds one on top of the other. Then fine tuned the controls and added menus and even a menu cinematic, which I am also very happy with. I ended up using just about every part of Unreal I had knowledge about, and some others I didn’t. So I’m stocked of all of the new tools I was able to pick up and put to practice.

Here are some pics of the game:

This was a lot of fun. It’s back to music now for the next few weeks but I’m definitely pumped to get some more games out there. I already have a few more ideas for other games that I am looking to get done as well, although in more than a week…

Thanks for reading!