BIGMODE GAME JAM 2023
Dec. 2023
Prismyth on Itch: https://makeitpop-media.itch.io/prismyth-makeitpop
The BIGMODE Game Jam went from Nov. 27th and Dec 16th. This is was an online jam with a limit of 5 members per team. The theme for this jam was "Mode."
Our team wanted to take the jam very seriously and build up a very detailed, mechanically complex game to attempt to stand out from the likely shorter, funnier games, which ended up being the majority. We settled on the idea of colors being the modes of our game, where the colored lens you have equipped changes how you interact with the level design by introducing color specific mechanics. The final product would be considered a puzzle platformer. The engine we used was Unity 3D with HDRP.
While the scope of the game was too ambitious, it did get finished, but could have been far more polished. I learned a lot from this game jam such as:
How to design multistep puzzles in an open environment.
Why puzzle games require so much playtesting and require significant iteration to be understandable.
Better organization of object oriented programming.
A better understanding of version control.
The most valuable thing I've learned from this game is how involved puzzle design is. You prepare and design a puzzle with the best intentions with multiple hints and UX indicators, but it will never work right away. I think the puzzles in this game are good, but we didn't have enough time to properly playtest and iterate on them. There was too much emphasis on quantity rather than quality and it shows. It didn't allows us time to test, optimize, and implement more accessibility features.
PUZZLE DESIGN:
I admire the design of many puzzle games so I made an attempt to fit the principles that made those games work. The primary inspiration for the puzzle design of Prismyth is Cocoon by Geometric Interactive. The main similarity is the idea of different collectable objects determining the mechanics that can be used to progress, but these objects can only be held one at a time. This puzzle design involves mostly logical conundrums about order and connected events.
These were the basic outlines for each puzzle, which did not end up being exactly the same as the final product. The primary principle I wanted to reflect was the idea of introducing a puzzle mechanic before challenging the player with it. Each area starts off with a fairly simple puzzle that introduces a new mechanic that will then be tested later. A lot of the design comes down to what the player knows. In level 3 I don't need to worry about the green puzzles being confusing since the player has had two levels to learn their mechanics.
LEVEL DESIGN:
The level design ties in directly to the puzzles. Where the player can and can't go is extremely important in pacing the puzzle. Often the goal of a puzzle is to raise a bridge to an island you can't physically reach. I tried my best to meet that function but also make the level visually interesting. Each level has a distinct shape and color palette that easily sets them apart.
When it comes to the base environment assets, I modified these free packs:
Free Stylized Nature Asset Pack by Quaternius
Stylized Environment by Baloota
LEVEL ONE:
LEVEL TWO:
LEVEL THREE:
GAMEPLAY PROGRAMMING:
I was the programmer for most of the gameplay mechanics and interactions.
Interaction UI & Button Prompts
Collectables
Green, blue, red, and white shards. Number of shards is tracked for unlocking the end teleporter.
Puzzle Controller:
Script that handles variables needed for each level's puzzles. The puzzles within this game have many objects that need to talk to / activate each other. This script acts as a branch between many of these objects.
Often times, the majority of the programming is not actually from the core function of each object, but the small tangential features that are needed to connect those objects to the level and player experience.
Puzzle Objects:
Every puzzle object has a key mechanic but also has to communicate what it is doing to the player which involves triggering renderers, lights, meshes, audio sources, etc. upon activation.
Lens Pedestal
Switches color grading and reveals colored objects depending on the lens type picked up.
Only one lens can be picked up at a time and lenses can be swapped. Implementing this required saving the current equipped lens as well as what lens is on the pedestal. Interaction text needed to update in order to react to multiple different possibilities.
Levers
Permanent levers are used to activate bridges primarily.
Switchable levers are used to turn on and off detectors.
Detectors
Basically acts like a lever that is only activated when the green lens is equipped. Every time the green lens is dropped, all of the detectors need to be updated, which means everything the detectors are powering also need to be updated.
Blue Orb Spawners / Pressure Pads
This is a mechanic that can only be used with the blue lens. You can spawn a blue orb which can be pushed around. If the orb is lost the spawner will prompt the player to respawn the orb.
Blue Warps
Only exist with the blue lens equipped. Involves teleporting the player to the current blue orb. If no orb exists, the warps are deactivated. Teleporting the player involves not only changing their position on one frame but deactivating conflicting components like the Unity character controller beforehand then reactivating them the next frame.
Green Switch Blocks
The green lens has two sub-states, which are just two groups of platforms that only exist with the green lens equipped.
Jumping onto the switch blocks will switch between these two groups which are necessary for platforming challenges.
Red Phase Blocks
These objects give the illusion of allowing the player to walk through previously solid objects. These red blocks only exist with the red lens equipped.
Trigger colliders are used to turn off the collision of certain assets whenever the player is within the red block. Invisible colliders are placed around the box perimeter to stop the player from clipping through outside geometry.
Teleporter
The teleporter to the next level is activated once multiple parameters are met. All three teleporter levers have be flicked and all of the current unlocked lens need to be placed onto the teleporter pedestals. The many phases of the teleporter activation process required many different text prompts.
Smooth Lerp Transformation
Many platforms in the game need to move in the game and I hesitated to use the Unity animator since I'd have to make a new animation for each type of translation. Instead I opted to make a scripted animation per frame where I can set its time delay, speed, start, and end vectors from the inspector.
Instead of using the flat lerp function provided by unity, I wanted an ease in and out function. I just turned this equation into a return function to call each frame: 0.5f * Mathf.Sin(x - Mathf.PI / 2f) + 0.5f
TECHNICAL DESIGN:
Post Processing: Since HDRP doesn't provide the ability to directly manipulate the renderer output, I used the work around of projecting the player camera onto a render texture that I can then add effects to in the shader graph. This material is then projected onto a screen outside the map and is recorded by the main camera.
The custom effects I experimented with was a dithering texture overlay, custom noise to emulate film grain, posterization, as well as quantization of pixels.
The original post processing was a lot cleaner with depth of field that gave the environment a nice miniature look, but had to be cut due to the player needing to see where to go in the distance. If time permitted, I wanted to adapt the depth of field to the puzzle.
The post processing for the colored lenses are done with the normal post processing method. I also played around with volumetric fog and the simulated sky which changes upon wearing a lens.
Custom Materials: Creating the complex shader graphs for these three crystals materials was one of my favorite things to do on this project. They turned out really well in the final product.