This project is a 2D puzzle platformer built in Unity with C#, centered around a “split-and-merge” mechanic. The player controls a slime that can divide into smaller, weaker slimes or merge into larger, stronger ones to navigate obstacles and solve puzzles. Each slime size has its own health and moisture stats.

Github: Splitshift-Protocol-Repo

How To Play

  • Arrow keys / A & D — Move
  • Space — Jump
  • Tab — Switch between slimes
  • Q — Split your slime into smaller ones
  • E — Merge with a nearby slime
  • R — Use jam to restore health
  • Stay near water to keep your moisture up — slimes take damage when they dry out completely 
  • If a slime dies, you lose it for good. Lose them all and it's game over.

Features

  • Split & Merge System — Slimes can split into smaller units or merge into larger ones. Their size affects their stats, abilities, and what combinations are valid. A Large splits into a Medium + Small; two Smalls merge into a Medium, and so on.
  • Multi-slime Management — Players can control multiple slimes independently and switch between them with Tab. Each has its own health, moisture, and position in the world.
  • Moisture Mechanic — Slimes dehydrate over time when out of water, triggering damage once moisture reaches zero. Finding water sources is just as important as avoiding hazards.
  • Emotion Bubble System — The active slime displays contextual emotion bubbles (hydrating, drying out, idle, warning) so the player always knows what’s happening, even with inactive slimes.
  • Inventory & Consumables — Players can collect and use jam to restore health mid-run.
  • Scene Transitions & Level Flow — Smooth async scene loading with animated transitions and a progress bar, plus checkpoint saving and respawn handling.

What I Learned

  • Multi-entity Player Control — Managing a list of active slimes, switching focus between them, and keeping UI elements (health bars, portraits, emotion bubbles) synced with whichever slime is currently active.
  • Component-driven Architecture — Keeping Player, Slime, PlayerHealth, PlayerMoisture, and PlayerMovement as separate, loosely-coupled components that communicate through references rather than inheritance chains.
  • Singleton Pattern in Practice — GameManager, InventoryManager, LevelManager, and AudioManager persist across scenes using DontDestroyOnLoad, with BindUIReferences() called after each scene load to reconnect UI elements.
  • 2D Physics & Detection — Using OverlapCircleAll for merge range detection and OverlapCircle for ground and water checks, with layer-based collision toggling for invulnerability i-frames.

Leave a comment

Log in with itch.io to leave a comment.