Hi UE Dev community, decided to dissect and write about mine game for this years Epic Games Mega Jam 2022. was thinking maybe people can find something relating and interesting in my project.
So before I begin little disclaimer:
All game from Idea to Build was created by me (music, 3d assets, code, animations, rigs etc…), the decision was to try to make game from begging to end, in time I have for this game jam. Basically to make a video game you can start and finish.
I spend around 78-84 hours working on this game. I didn’t have whole Game Jam time period to make due my day job. I totally miscalculated then the Game Jam begins and only started work on mid day of Friday (26th.) also decided to pull off two all nighter’s… so here we go…
So the main Idea of the game was a little 3rd person puzzle platformer game with ability switch the world upside down, which kinda would fit this years Epic Games Mega Jam theme… The upper and the under world should be have same map layout except that the under world had to have some sort of theme in it. Like in first level it’s Living room, and second level it’s grand Library.
But due to time restriction I had to skip this idea, because it just took too much time to design puzzles to work in between both ‘worlds’.
After doing some of the test of main functionality, I had to decide how much time I can spend on each part of game (modeling, programing, audio etc…). so all the things went like this: 40% to code (Blueprints Only) and 60% of time to asset creation, sound design, animations…
The initial test of main mechanics…
The second iteration of game mechanics, now with few more assets and more functionality.
Little bit about basic game Mechanics. (lets call it Base Mechanics):
Main event is how world flips over, light cube carrying around interacting with world.
Base Mechanics main event was driven by one switch in the middle of the map it contained all the code to check which map player is and does all conditions allows player to flip over world.
using lever allows player to flip world around.
Other mechanics include simple puzzle events, to press or carry thing to do achieve solution in puzzle nothing over complicated. (do this: then it opens doors and similar)
Another main game mechanics is bench, player can sit down and rest on the bench. It triggers fast forward of day/night cycle event and restores players stamina.
Other one kinda unnecessary thing was added was stamina system. I added it just to make game bit more miserable for player due to short play time of game.
Lets talk level design and level building approach.
Due to lack of time to work on this little game I didn’t looked for optimized or most performed level building work-flow. So the game lack of any optimization. Decided just to stay at 3 levels maximum, so I could spend time on making assets and make levels bit more interesting. First and second level contains 2 or more puzzles, but the last level contains just one puzzle.
Each map contains light setup, cinematic camera (for camera dolly then player triggers world rotation), BP’s of map and some other map elements. The level is build from two main Blueprints upper world and lower world. Each main BP contained all the map assets, interaction of puzzles and so on… So basically levels there like Blueprint sandwiches. Top World BP then in middle non movable part with bench and switch and under it lover world BP (just rotated in X axis by 180 degrees). I chose to build everything inside Blueprint due needed that all of the objects would rotate on specified axis and keep specified world location. It possessed a lot of issues like BP Viewport become overcrowded and started to slow down. (I couldn’t move static meshes around fast). One of the benefits of doing everything in one BP that I could focus on one part of map and keep everything in one place.
this what the levels contained.
And here is what the main level BP’s contained inside.
Here is whole blueprint of top world of the map.
Lvl_02 lower part of world BP
And here all of it’s code in graph editor.
Level cinematic camera animation is run through level BP, it is simple level Sequence. Every level have the same cinematic camera animation to keep the same style.
The 3d assets… ogh boy this is fun one. I chose to go with Voxel art style. I am using MagicaVoxel software to create all the 3d assets and Blender to finish them. Basically it goes like this: create models in MagicaVoxel import to Blender fix pivot points and scale and use Unreal Blender tools to export to UE5. Using this workflow it saved me time on creating assets. All the assets use one texture and one master material including skeletal meshes.
I would spend few hours on assets for each part of level, then move them to UE5 build level fix any issues with assets, and go work on the other part of map. I created around 80+ 3d assets for all the levels (including character model).
All the assets in MagicaVoxel
3D assets there non optimized, due I used UE5.03 I used them as Nanite meshes, in that point I didn’t needed to optimize meshes too much. Poly count stayed from 400 to 14k polygons.
The largest piece contained 13,410 polygons.
Using all world 3d assets with Nanite allowed me to have fast iteration times. I avoided UV unwraping. And texturing process was simple due using just one texture (color palette).
Material instances and one texture map.
Main player character was build to in MagicaVoxel and imported to Blender then created skeleton and export as FBX to use in UE5. All the weight painting is also done in Blender, just because I did in Voxel style that process was extremely simple.
Main character was parted to different body parts. (yes it had female character, but due to weird issues with rig and re-targeting had to skip on it.
Character rig was built with Unreal Engines Control Rig, that allowed me to create animations inside Unreal Engine and avoid exporting animations from Blender to UE. Rig was built extremely simple, for such simple project I didn’t needed anything fancy.
Rig was built simple, IKTwoBone nodes to drive arms and legs, spine is driven by FKChain node, head just copies from assigned control nothing too special.
Character animations was created in the map and then baked to Animation sequence’s.
All the animations I created for character, 15 different animations.
Character animation Blueprint was really simple, noting fancy up there too. From character BP I was getting all the variables I needed to set up in animGraph and for stamina system I just used Get Velocity to Vector Length Squared to set the speed.
AnimGraph was using Blend Poses nodes to drive between State Machines.
Character animation BP Eventgrapth.
And Character animation BP animGraph.
All the code was built in Blueprints, as I am an Artist and not a programmer (have some basic knowledge of programing).
Sooo… the main thing which drives all game was main World_rotate_switch. It’s blueprint did the checks on maps, actors (upper and bottom worlds), and other condition to allow rotate the map upside down.
The spaghetti, it could look nice if a lot of code would be putted in functions/macros
Bench (which allowed player to sit down and regenerate stamina) Blueprint contained functionality to allow character to sit down (getting it’s location, setting player location etc…) then calling function in Player BP to play sit down animations.
Top and Bottom parts of the map BP’s contained all the functionality of interactions and moving parts of the map. The level BP’s contained only functionality to drive day/night cycle and cinematic camera dolly animation. I used Blueprint Interface to trigger and run code between Blueprints. It contained only two functions, Activate_world (it runs flip upside down world) and Interact.
Character Blueprint have a lot of functionality, from running animations/animMontages to movement and stamina system. Stamina system is running on Event Tick with Left Shift to drain stamina to custom events to regenerate stamina while sitting on bench. It also contained functionality to attach or remove LIght Cube to carry around.
Movement was really basic and simple. main function to rotate camera using Q/E was abandoned, because it felt really weird. Character BP contained menu opening with Escape key.
Interface, VFX, Sound…
Interface was build as simple as possible with widget not overworking my self, it was one of the last things I implemented. I used a lot of text render place holders for functionality.
Main Menu used one main widget which contained buttons to Play/Resume/Exit and the one which contained controls.
The EventGraph of main menu widget, nothing complicated, just nodes to load levels, exit game.
For the popup text I used a lot of widgets depending on what player is doing, looking back I could use 90% less of them and build better functionality.
All the widgets I used in project.
VFX where created in Niagara particle systems, simple particle effects so I would have more time to work around and adjust. Usually I created one effect and then iterated on it in Niagara system. I created 5 main Niagara Emitters and then worked around them for each situation for gameplay. Majority Niagara system where spawned using Spawn System at Location, some of them where as Niagara particle system component inside BP’s.
5 main emitters and 9 Niagara systems. Also not all of them where used in the game.
Sound, agh yes the sound…
For sound I used MetaSounds in UE5. Main thing I wanted procedural generated sound track, it worked very weird so it just crappy system with few sine generators, trigger ocunters and random numbers… it looks maybe complicated but it was kinda easy to create. I created one ‘track’ (like a random beat and them just cloned it and adjusted frequency of them… but came in some issues that sound track stops playing at some time…
All other sound there created using Chiptone, it took me a bit to create right effects, but it was really good experience. All sound effects there running in MetaSound, using wave player and called from Blueprints. Note: player foot sounds are added in walk and run animation as notifiers to play sound.
All the sounds I used in the Game.
I think that’s all I wanted to put out about mine Epic Games Mega Jam entry. There is lot of stuff going in blueprints and other stuff. But due I don’t want to over extend my self here this all just a overview.
Conclusion of all this… it’ unbelievable what kinda of tools Epic Games gives with Unreal Engine 5 and now that artist’s can create fully fledged games. Without tools as Lumen or Nanite and Blueprints visual programing, it would be hard to achieve such things as one person. Such tools allows people for fast iterations and prototyping.
If anyone will be more interested in some of the topics I would gladly expand on them.