Help Bob save his friends by cleaning them with the power of friendship!
A cute little precision platformer game made with a custom game engine and physics system.
- Sprites for Bob, enemies, spikes, kelp are by Ruby and Lisa
- Tiles by Cainos
- Background by ansimuz
- GUI by soulofkiran
- Also used as a base for the water and HP bars
- Tutorial images
- Audio
- Font
- Creative components: particle system (20%), advanced integrated assets (20%), game balancing (10%)
- Our user testing feedback throughout the milestones can be found here: User Testing Feedback
- Two types of particle effects can be made currently: dust (can be seen floating around the game in the background and foreground) & trailing particles (used on our attack bubbles)
- All emitter types can randomly generate particles with varying attributes (velocity, scale, color, opacity) within a certain range
- It isn't necessary to allow for variance (can set to 0), but it allows for more dynamic and interesting effects, so I've used the allowed variation in all of our particles
- Particle emission fully accounts for the scenario in which multiple particles need to be emitted per step (eg. need to emit every 50ms, but each step is approx 100ms)
- There are multiple layers of particles: background particles, level particles (above game components except attacks), foreground particles (above everything except UI)
- Background and foreground particles persist on level change/restart but level particles are removed
- Each layer of particles uses instance rendering, providing the position, scale, opacity, and color per instance (1 draw call per layer since there are things that have to go in between)
- Particle safety padding: This is a variable I have for the maximum offset that particles are allowed to travel without being removed
- This allows for particles to be generated just off screen and move onto the screen for better immersion
- We have various cohesive assets that are integrated into the game
- The player, enemies, and other entities (along with their animations) are all self-created pixel art with a consistent style
- The background elements and tiles are edited pixel art assets edited to fit the underwater motif
- Music and sound effects were chosen with a consistent theme in mind
- Game balancing details can be found here: Game Balancing
- Fish + some squids move in bezier curve
- 3 animated cutscenes: intro, first time you see a crab, after you defeat the boss
- You can press 'E' to skip the cutscene, this is meant to be a debug feature only.
- Our sprite shader has a glow effect which uses the formula for screen in graphics processing programs.
- We did use the glow in Milestone 1 to showcase linear interpolation, but we have extended it for this milestone to be able to loop back and forth between two colours
- This glow gets applied in 2 ways on our player sprite:
- When an enemy collides with the player (default: interpolates between two colours then stops glowing)
- When the player's health is low - below 1/3 (looping: loops back and forth between two colours infinitely until removed)
- This can be either due to player input (shooting water lowers the bar) or due to collision with an enemy (will be shown after the collision glow)
- You can also see the health/water bar flashes too when player health is low
- The screen shader has been adjusted to add a vignette so we can nicely fade in and out when player's health is low as well
- We have 3 save slots!
- Press 1 to save into save slot 1, press 2 to save into save slot 2, press 3 to save into save slot 3
- Press 4 to load save slot 1, Press 5 to load save slot 2, Press 6 to load save slot 3,
- This will be supported by a menu later on, but for now it is just a key based system
- The game does not automatically save on exit (in case you want to save scum??? or replay cutscenes)
- Saving will save Bob's current HP, the level he's on, as well as if he's seen any cutscenes or defeated the final crab boss
- Reloading will put Bob back to the save file's HP, re-spawn Bob at the checkpoint of the level he is on
- Note there's no visual cue for where the checkpoint is due to time constraints, but they're marked with 8 in the level json file.
- If Bob has defeated the final boss and saved, going back to the boss arena will not respawn the boss
- Enemies and breakable blocks will be respawned regardless of if you've cleaned them prior to saving for the true roguelike experience^tm
- if there's no related save file then nothing will be loaded and the game proceeds as normal
- save files are under /data/
- The player has a mesh, and we use the mesh to handle collision with enemies
- NOTE: player-tile collision is currently being handled by a rectangle, not the mesh
- Assumptions:
- Convex-only, no concavity as of this milestone
- The bottom of the mesh is completely flat so it is easier to handle player-tile collision with the mesh in the future
- Mesh-based collision is using SAT
Decision tree:
FSM:
© 2025 Ruby, Lisa, Mark, Grace, David, Eric. All rights reserved. This repository and its contents may not be copied, modified, or redistributed without permission.


