Built around your vision.

Sort to Live

Sort To Live is a casual mobile game designed to educate players on proper recycling practices through interactive gameplay. Players clear levels by catching falling waste items using touch controls and placing them into the appropriate recycling bins.

Download on the App Store
Sort to Live - a mobile game built in Unreal Engine

The project began as a simplified web-based prototype aimed at promoting recycling awareness.

Following initial development, I made the decision to transition to a mobile platform to better leverage touch-based interaction. Development was subsequently moved to Unreal Engine, allowing for the creation of progressive level structures and enhanced gameplay mechanics.

The game features two distinct victory conditions that vary by level type:

  • Score-based levels: Players must sort correctly a specified number of times
  • Time-based levels: Players must maintain gameplay for a predetermined duration

The game features two distinct victory conditions that vary by level type:

  • Score-based levels: Players must sort correctly a specified number of times
  • Time-based levels: Players must maintain gameplay for a predetermined duration

Life system

Progressively losing life until game is over

Player's "life" is visualized through an Earth icon positioned in the upper-left corner of the screen. The life meter decreases when items fall to the ground unsorted or are placed in incorrect bins, with this deterioration shown visually as portions of the Earth becoming barren. Players can restore life by correctly sorting items.

This mechanic creates strategic depth, particularly in time-based levels where maintaining perfect accuracy becomes increasingly challenging. Players must balance speed with precision, as the life regeneration system allows for continued play despite occasional errors, provided overall sorting accuracy remains sufficiently high.

Gameplay progression

The game map, inspired by downtown Vancouver

Difficulty increases as the game progresses Players advance through a map featuring 30 levels of ascending difficulty. Progress unlocks additional trash categories and introduces new item types throughout the experience. The game includes:

  • 23 hand-drawn waste items
  • 8 distinct level environments
  • 4 recycling categories

Each level incorporates dynamic difficulty scaling that responds to player performance:

  • In score-based levels, difficulty increases as players achieve more correct sorts
  • Time-based levels feature escalating difficulty as gameplay continues.

This progressive approach provides players with an initial warm-up period, which proves particularly beneficial when tackling more challenging levels.

Tutorials

Sort To Live incorporates an intuitive tutorial framework designed to support new players.

The system employs context-sensitive learning, automatically pausing gameplay when players encounter new mechanics.

Tutorial tooltips provide clear guidance at these moments, ensuring players can quickly understand new concepts without disrupting the overall game flow.

Context-sensitive tutorial tooltips

The artwork

All game items and user interface elements were created through hand-drawn artwork using Apple Pencil and Adobe Photoshop, ensuring a cohesive artistic style throughout the game experience. Some items that you encounter in the game are:

Some of the items in Sort to Live

Level backgrounds were created initially using DreamUp, a generative AI tool by DeviantArt, followed by manual post-processing in Photoshop to maintain visual consistency across all environments.

Backgrounds and items in the game

The interactive city map draws inspiration from downtown Vancouver and was constructed manually using licensed isometric city asset packs, creating an engaging navigational interface for level progression.

Music and sound effects were sourced from royalty-free libraries and enhanced through post-processing in GarageBand to achieve a consistent style that fits the game.

Technical implementation

Player can send their feedback directly from the game Sort To Live is developed using Unreal Engine 5, leveraging primarily Paper2D for 2D graphics rendering and UMG (Unreal Motion Graphics) for user interface components. The system includes a PHP backend for anonymous player analytics collection and integrated feedback functionality.

A number of design patterns and system architecture decisions were applied within the Unreal Engine codebase:

  • Map and Level Structure: The game employs a dual-map architecture where the menu and a level exist as separate Unreal Maps. Level backgrounds are dynamically loaded based on the selected level, optimizing memory usage and load times.
  • GameMode Implementation: Score-based and time-based level types utilize distinct GameModes and GameStates, which are dynamically assigned to the level map according to the specific level requirements.
  • Component Communication: The class architecture maintains loose coupling through strategic communication patterns:
    • Public functions facilitate parent-to-child component communication
    • Event delegates enable child-to-parent component messaging
    • Interfaces provide communication pathways between unrelated components
  • Animation System: Animations utilize a hybrid C++/Blueprint approach following the Template Method pattern. C++ handles sprite and UI component control while calling BlueprintImplementable methods for specific animation execution. Animation completion triggers private method callbacks to resume game logic processing in C++.
  • Data Persistence: Game settings and player progression utilize Unreal's USaveGame subclasses for local device storage. These instances are globally accessible as UProperties of a custom GameInstance, implementing a singleton pattern to ensure single-source data integrity and universal accessibility.
  • Singleton Audio Management: A comprehensive audio system pre-loads all sounds and music at game initialization. A singleton SoundLibrary provides global access to audio assets, while a singleton SoundManager handles playback through ENUM-based identification. This architecture abstracts raw sound assets from consuming classes, providing flexibility for future asset modifications while maintaining stable API interfaces.