SporeFall is a third person co-op wave defense game, with a playful theme. Players control robots that fight against fungal invaders as they escort payloads that will ultimately stop said invaders.
The game’s core mechanic combines fast-paced shooting action with tactical defense building, requiring players to carefully balance offense and defense as they progress through increasingly challenging waves of enemies.
Our goal is to create a seamless blend of third-person action shooting and the strategic depth of a wave defense game — all set in a fun, lighthearted atmosphere. We aim to deliver fast-paced gameplay that rewards both quick reflexes and thoughtful planning.
The game fully supports both keyboard/mouse and gamepad controls, allowing players to choose their preferred setup for maximum comfort and accessibility.
Use WASD to move your character
Your Mouse to aim.
Press Left Click to shoot
B to enter Build Mode.
Move using the left stick
Aim with the right stick.
Use the right trigger to shoot
Press the circle/B button to build, depending on your controller.
With the number of systems in place, we also created an in-game tutorial to guide new players through the mechanics and help them get comfortable quickly.
I created a custom character controller that allows the player to walk, aim, and shoot in a responsive and fluid manner.
I implemented local co-op functionality, allowing a second player to seamlessly join the action with the press of a button — doubling the fun and teamwork.
I implemented our artist’s animations into the character, integrating them seamlessly with the movement and combat systems to ensure smooth and immersive gameplay.
All enemy types are built on a shared base class, allowing for flexible behavior through value adjustments and subclassing. This setup makes it easy to expand enemy variety while keeping the codebase maintainable.
Enemies react differently depending on their target, adding depth and unpredictability to encounters.
Each enemy features its own unique attack, complete with a matching animation.
With a lot of moving parts proper optimization quickly became a necessity. So I created and object pooling system for all our spawnables.
Objects are enabled and disabled as needed, they are initially loaded at the start.
Enemies, VFX, Projectiles, buildables are all a part of the pooling system.
I integrated occlusion culling to improve runtime performance by ensuring that only visible objects are rendered, reducing unnecessary processing and boosting frame rates.
When creating my scripts and systems, I prioritized usability so that non-programmers on our team could work with them easily.
Enemy attacks were built using ScriptableObjects, allowing designers to adjust values and mix different behaviors without writing code — making the system both flexible and designer-friendly.