Created for Swinburne GAM20003 - Digital Game Prototyping Lab.
"Hive Havoc: Ants on Wheels" is a couch co-op 2-player game with asymmetrical roles, where 1 plays a third-person driver and the other a first-person rail-shooter. A high level of communication and coordination is vital to the gameplay, as both roles are intertwined inseparably and must depend on each other to achieve the shared goal. Fast-paced action, simple but chaotic mechanics, stylized art direction, an oversaturated colour palette and cheerful theme makes it the ideal party game for casual players.
With a dynamic split-screen camera reacting organically to on-screen events, "Hive Havoc: Ant on Wheels" sets itself apart from the rest.
Building on top of Unity's new input system, this implementation allows specialized support for asymmetrical-role local co-op with affinity-driven input mapping.
Hardware is decoupled from any particular role, allowing the players freedom to pick their preferred controller.
In case of hardware failure, the system supports dynamic remap; simply reconnect a new device with the matching "type" (e.g. a Switch can substitute for an Xbox on account of both being "gamepads").
Depending on each player's role and current predicament, as the players progress through the level the perspective divider will dynamically adjust. This helps better indicate area of focus to improve playability and provides a more cinematic overall aesthetic, resulting in a more immersive play experience.
The current implementation supports split in 4 cardinal directions (left/right/top/bottom). Before switching orientation (horizontal <-> vertical), the shooter's viewport will be collapsed. Due to this constraint, the driver's viewport will always be anchored bottom/left in a split.
A workaround solution to allow freedom of movement for a first-person shooter controls without IK animation rigging. Inspired by a telescope's Alt-Az mount, this mount is concerned with separating the Euler Yaw and Pitch rotation axis, each with individual constraints.
This makes it easier to handle conversion to and from Quaternion, allowing rotations to apply correctly in code, while still exposing designer-friendly boundary values in Euler degrees for rapid iterating.
To reload, the shooter needs to run over flowers, whose released pollen will be consumed to power the pollen turret.
At the start of the level, a brief cutscene previews the level layout and introduces the end destination/time pressure, thematically a closing gate. This incentivizes both players to coordinate for a smooth run in order to achieve the shared goal.
A destructible & organic environment gives the player immediate feedbacks to their actions. Almost every element in the world is interactable & responds to their influence.
Each platform simulates buoyancy behaviour by defining "float points", empty colliders distributed to mesh vertices. A float point calculates the buoyancy force applied to the master rigidbody at that point proportionate to the object's weight, which is distributed evenly across all children float points. A more complex mesh shape can be made up of smaller floating components, each of which defines their own float points.
If they are caught in a blast radius, each floating component will react to the explosion by delegating it to the master rigidbody.
Explosives come in 3 variations, each with varying blast radius and explosion force. One variation floats on honey.
Red tiles are trapped, and will activate when stepped on. A slow-motion sequence will play, where the shooter's viewport expand to make emphasis, and the shooter needs to take down the enemy unit before it can throw a projectile at the explosives, detonating it and destroying their path.
Green tiles are checkpoint, and when stepped on will reset all registered dynamic objects in the directly following sequence.
Each dynamic object will register itself with a centralized manager at start, who will maintain a mapping to the currently active entity in scene. Objects who require a live reference to the current version of the respawnable can subscribe to its OnRespawn
event, upon which it can update its reference correspondingly.
The project is built with Unity 2022.3.3f1. To run the project, an equal or higher version of Unity is recommended.
- Buoyancy physics doesn't scale well for larger volume mesh, due to simplifications of force-weight distribution.
- Buoyancy force calculation can be a good fit for the Job system.
- Unity 2022.3.3f1 - The version of Unity used
- Thien An Ly - Producer, lead programmer, technical artist, designer - Aly
- Hoang Phuc Huynh - Programmer, technical artist, designer - Quearktum
- Lachlan Haines - 3D artist - Lachlan
- Meng Yu Lim - 2D artist - Powort
- Minh Hang Le - Environment artist - Avie
- Flaticon - Vector Icons and Stickers - Flaticon
- Gabriel Aguiar Prod - Projectile VFX - Unique Projectiles Volume 1
- Effectcore - Explosion VFX - Stylized Explosion Pack 1
- Dusker Studios - Dust VFX - Simple Dust Particle System
- Gamemaster Audio - Gate SFX - WARFARE SOUNDS
- BushxMonkey98 - Gun SFX - Gun Reloading Sound Effect 2 [HD]
- PK9 Sound Effect - Projectile SFX - Bazooka M9a1 sang legenda
- SoundBites Central - Projectile SFX - Bubble Pop / Sound Effects
- AudioKid - Projectile SFX - Bubbles Popping Sound Effect
- MrSoundtabel - Enemy SFX - Thunder Sound effect
- Sound Effects SoundCuration - Projectile SFX - Magic Missile Sound Effect / Magic
- AudioFX - Vehicle SFX - Car Braking - Sound Effect [HQ]
- NMTVE - Checkpoint SFX - Checkpoint Sound Effect
- AngryUdder - Voiceover - AngryUdder
- Marbles Studio - Stylized plants - Stylized Plant Pack
- NinjaNinJosh - Honeycomb material - Honeycomb Material
- iamsosha - Hexagon - Hexagon
- MOJackal - Stylized gate - Castle Portcullis
- Pasha4713 - Barrel TNT - TNT Barrel Low Poly
- FinnyInTheBinny - Floating TNT - TNT Crate
- Sannah Kavacup - Small TNT - Caja TNT
- Jayanam - Import pipeline/workflow - Blender Animation To Unity Tutorial
- BitGem - Liquid shader - URP Stylized Water Shader - Proto Series
- Tom Weiland - Buoyancy physics - Ship Buoyancy Tutorial
- Maxi Barmetler - Procedural road - Road System
- Benmcinnes - Reference - benmcinnes/ArcadeVehiclePhysics
- Adrenal - Reference - adrenak/tork
- SergeyMakeev - Reference - SergeyMakeev/ArcadeCarPhysics
- Unity-car-tutorials - Reference - unity-car-tutorials/SimpleRaycastVehicle-Unity
- Haim96 - Reference - haim96/SimpleRaycastVehicle-Unity
- KenneyNL - Reference - Tweet