top of page
Killer Karnival

This 11-person project was developed in Unreal Engine 5 over approximately eight months. As the Lead Programmer and a flex Technical/3D Artist, I was responsible for scripting all the player and core game mechanics, scripting most of the unique in-game puzzles, creating several 3D art assets, setting up all the master materials, and contributing to many other aspects of development ranging from VFX to tool creation. 


This project was my first experience with programming. As a result, it provided a valuable learning opportunity that significantly broadened my skillsets and expertise in Unreal Engine.

Player Blueprint

Shown below is the Player Blueprint, which holds functionality for core player mechanics, key UI elements, and specific in-world interactions. I was responsible for scripting the vast majority of it.

Here is a demo showcasing several of the player blueprint's functionalities in action. Specific functionalities I scripted include essential movement mechanics such as walking, sprinting, and crouching, as well as unique player abilities like leaning and squinting. I fully scripted the inventory system and its inspection menu, including all associated VFX, which were created using animated materials in Unreal Engine 5’s material editor. I also implemented the dart aiming and throwing mechanics.

The inventory system is a simple linear/list-based system that stores items in an array. New items are appended at the end of the array, and when an item is removed, all items in the index after the removed item get shifted down one index in the array. I chose this approach for its simplicity and ease of debugging—crucial in a large-scope project where I was the sole programmer. Since our gameplay didn’t require a more complex system, this lightweight solution proved to be both efficient and reliable.

Certain items in the game have a "read" function. 

Bell Contraption Puzzle

The first puzzle I want to show is the 'Bell Contraption'—a sound puzzle I fully designed myself. I was solely responsible for its concept design, scripting, and asset creation. 

 

The puzzle works by collecting music box components scattered throughout the map. Once all pieces are collected, they automatically assemble into a complete music box within the player's inventory.

This worked by running a 'For Each' loop every time the player pressed the interact key. This 'For Each' loop scanned the name of every item in the inventory array. If both items were found in the array, they were deleted, and a new item — the completed music box — was then appended to the inventory array.

The player could then interact with the completed music box to hear a sequence of notes. These notes had to be replicated in the correct order on the Bell Contraption to open a drawer containing the next quest item.

The ‘Bell Contraption’ puzzle assigned each bell an integer from 0–4. Every time the player interacted with the contraption, a variable called ‘Integer Counter’ increased by 1, selecting the next bell in the sequence. The selected bell’s material was swapped with an emissive version to highlight it. Each time the interact key was pressed, all bell materials were reset, and a branch checked the value of ‘Integer Counter’ to determine the next bell to highlight instead.

When a selected bell was struck, several actions were triggered: the swing animation played, a specific note sound was emitted, spark sound and VFX were triggered. Lastly the bell’s integer was appended to a string variable called ‘Input Sequence’.

After each input, ‘Input Sequence’ was compared to a string variable called ‘Correct Sequence’ using an ‘Exactly Equal (String)’ check. If they matched, a custom event called ‘Reveal Key’ was executed. If not, a different event called ‘Incorrect Sequence’ was triggered, which reset ‘Input Sequence’ and handled the failure state.

A simple spark visual effect made in Unreal Engine 5's Niagara system. This effect plays whenever a bell is struck.

Hanging Dolls and Ferris Wheel Puzzle

Like the 'Bell Contraption' puzzle, I was solely responsible for the design and scripting of these puzzles. 

Electrical Boxes Puzzle

The final puzzle in the game, 'The Electrical Boxes' involved a series of electrical boxes that required each dial to be rotated in the correct direction. The puzzle could not be completed unless every electrical box on the map was configured properly. The puzzle relied heavily on a For Each loop to iterate through an array containing all electrical box instances in the map. Each time the player interacted with a box, the loop checked a boolean variable called ‘Configured Correctly?’ for each electrical box instance. If any box returned a false value, the For Each loop would fail and the puzzle would not be completed. When every box returned a true value, the final exit gate would open.

The Electrical Box Blueprint worked in tandem with the Electrical Gate Blueprint. These blueprints communicated with each other frequently to verify that all boxes were configured correctly, allowing the gate to open.

Manhole Cover

A mini-game was created for the manhole cover, requiring the player to rapidly press the interact key to fill a progress bar to pry it open. The system used a float value that quickly decreased over time, increasing slightly with each interact press. Once the required threshold was reached, the manhole cover would open, allowing the player to teleport into the sewer level.

Blueprints for Artists/Designers

In addition to scripting various puzzles, I also created tools that made tasks for designers and artists easier. One such tool was the string light blueprint, which allowed designers to easily adjust curvature, control the quantity of lights, and manage the length, allowing for quick and easy level population of string lights throughout the map.

The lamppost blueprint gave artists and designers control over light color, brightness, attenuation radius, flicker settings (including frequency), and the associated ambient and flicker sounds.

The balloon blueprint included a variety of controls that allowed for adjustments of the balloon size, string length, sway intensity, color, and more.

Models, Materials, and Post-Processing

Here is a gallery of several assets I created, including a few props, a stage, and a total of eight tent variations.

 

The tents were designed to enhance the level's diversity. Since carnival environments often feature many tents, creating multiple sizes and variations was essential to adding nuance to the scene while reducing visual repetition.

I developed a flexible material for the tents, featuring mask-based color controls for easy stripe color adjustments, allowing designers to quickly generate diverse variations. Additionally, the material includes optional grunge-based controls for a realistic, weathered effect.

A simple post-process material was created which enabled quick pixelization and color range adjustments, creating a stylized, distorted retro effect which we thought was well-suited for this project.

Conclusion

Overall, I’m super happy with what I was able to learn through this project. I feel my skill sets as well as my comfort level inside Unreal Engine grew significantly. I started this project with no knowledge of Blueprints to eventually being able to program an entire game almost exclusively on my own. This experience taught me a lot about problem-solving and bug fixing, as I was the only official programmer on this project and had to handle all technical challenges on my own.

Looking back, I would have tried to place more emphasis on adding more game features rather than expanding its scope to improve player enjoyment. For example, if I had scripted one less puzzle and used that time to add fun consumables, a hiding mechanic, or other features, the final game could have been more engaging and fun to play, even if it would have ended up being shorter in duration. I would have also dedicated more time to VFX and lighting to make the game feel more atmospheric and alive. Regardless, I’m proud of what I was able to accomplish and the knowledge I gained throughout this 8-month project.

© 2023 by Sean Genutis. All rights reserved.

  • artstationIcon
  • LinkedIn
bottom of page