Back to portfolio

Cubey's Adventure

Live a full lifetime in two hours — start as a baby, reach your prime, grow old, and return as a ghost. Every life leaves a legacy. I built the State Tree enemy AI, networked player identity replication, and the dynamic player list.

Unreal EngineState TreesRep NotifyMultiplayerAI PerceptionUMG Widgets

⚠️ Work in progress — all features and visuals are subject to change.

Screenshots

Gameplay screenshots

Island level — baby Cubey Enemy dogs patrolling Three-player color replication Cubey character Username replication in-world Username replication in-world

Contributions

Features I built

Feature 01 State Tree Enemy AI

❌ The problem

Without reactive enemies, players move through the world with little risk — reducing tension and making exploration and combat feel predictable over time.

✅ The solution

This State Tree gives enemies clear combat behaviors and real-time branch transitions. Enemies shift between patrol, chase, and attack based on what the player does, keeping encounters dynamic and engaging.

📹 Feature demonstration
Blueprint — AI Perception update
Feature 02 Replicated Player Usernames

❌ The problem

Without proper synchronization, clients can display different usernames for the same player — causing confusion and breaking the multiplayer experience.

✅ The solution

Rep Notify replication pushes the player's name to all clients automatically. When a player joins, the username replicates instantly and OnRep fires on every client to update the UI in real time.

📹 Feature demonstration
Blueprint — OnRep_CustomPlayerName callback
Blueprint — BeginPlay & OnRep_CustomPlayerName
Feature 03 Replicated Player Colors

❌ The problem

Without color replication, each client can show different character colors — breaking visual identity and making it hard to distinguish players across the network.

✅ The solution

Player colors are stored in a Rep Notify variable. When the value changes, a callback fires on all clients to update the character's dynamic material instance — keeping colors consistent everywhere.

📹 Feature demonstration
Blueprint — OnRep_CustomPlayerColor
Blueprint — Set dynamic material color
Feature 04 Dynamic Player List

❌ The problem

Without a dynamic roster, join and leave events are not reflected reliably — causing confusion about who is active. Polling-based approaches add complexity and scale poorly.

✅ The solution

The player list auto-updates whenever the replicated player-state array changes. Every client calls UpdateWidget on the event — the roster stays synchronized without any polling logic.

📹 Feature demonstration
Blueprint — OnRep_AllPlayerStates
Blueprint — UpdateWidget