Kevin Patel

Technical Game Designer


Cubey's Adventure

Live a full lifetime in just two hours. Start as a baby, grow into your prime, grow old, and return as a ghost. Improve your skills through use, shape the world for future generations, and choose your next life. Every life matters. Every choice leaves a legacy.

Disclaimer: This project is still a work in progress, and all showcased features, visuals, and systems are subject to change

State Tree Enemy AI

The Problem

Without reactive enemies, players can move through the world with little risk, which reduces tension and excitement. Encounters start to feel predictable instead of engaging. Over time, that makes exploration and combat less rewarding.

The Solution

This State Tree setup gives enemies clear combat behaviors and transitions, so they respond to the player in real time and maintain gameplay pressure. Enemies can shift between states like patrol, chase, and attack based on what the player does. This keeps encounters dynamic and makes moment-to-moment gameplay more engaging.

Demonstrations (Work In Progress)

+

    Dog AI Behavior Showcase

    This video shows the enemy AI switching between patrol and aggressive behavior. Once the player is detected, the dog locks onto the target, chases, and changes attack behavior based on distance.

Enemy AI Snippet (Work In Progress)

+

    When AI perception updates, the system checks whether the player was successfully sensed and stores that player as the current target. It then measures the distance between the AI and the target, and sets the attack state tag to Charged at close range or Basic at longer range.

    This State Tree has two main branches: Patrol and Aggressive. In Patrol, the AI random-roams by moving forward, delaying, and rotating before looping. When the AI.State.Attack tag is active, it switches to Aggressive, chases TargetActor, and rotates to face the player, then returns to reevaluate state transitions.

    Cubey dog AI Blueprint

Replicated Player Usernames and Colors

The Problem

In multiplayer games, players need to identify each other quickly and clearly. Without proper synchronization, clients can display different usernames and colors for the same player, causing confusion, communication errors, and a less immersive experience.

The Solution

This system uses Unreal Engine's Rep Notify replication system to synchronize player identities and customizations across the network. When a player joins, their username and color are automatically sent to all clients, triggering a callback event that updates the UI in real-time. This ensures every player sees consistent identities and personalized colors throughout the entire match.

Demonstrations

+

    Player Replicated Usernames

    Player usernames sync in real time across every connected client. As each player joins, their name appears above their character for everyone in the session.

    Player Replicated Colors

    Each player's character color is replicated across all clients, allowing players to visually distinguish between different participants in the game world.

Player Username Code Snippet

+

    On BeginPlay, the system retrieves the player's name and stores it in the "Custom Player Name" variable (marked as Rep Notify). This variable automatically replicates to all connected clients.

    The "On Rep Custom Player Name" callback fires whenever the variable changes on any client. It retrieves the Player Username Tag Widget, validates it, and updates the text to display the replicated name in real-time.

Player Color Code Snippet

+

    Similar to the username system, player colors are stored in a Rep Notify replicated variable. When the variable changes, a callback event triggers on all clients to update the character's material color in real-time, ensuring visual consistency across the network.

Dynamic Player List

The Problem

Multiplayer games require players to know who is currently in a match. Without a dynamic player list, join and leave events are not reflected reliably, which creates confusion about active players. Relying on manual refreshes or polling-based updates also adds unnecessary complexity and can become inefficient as sessions scale.

The Solution

The Dynamic Player List displays all current participants in real time and automatically updates whenever players join or leave, giving everyone a reliable live roster throughout the match.

Demonstrations

+

    These videos demonstrate the player list functionality in action during competitive matches, showing how the scoreboard updates as the game progresses.

Dynamic Player List Code Snippet

+

    The UpdateWidget function reads the Game State, clears the Player List Scroll Box, iterates through the Player Array, creates a list-item widget for each player, and repopulates the scroll box.

    The On Rep All Player States event runs when the replicated player-state data changes. It finds all active player-list widgets and calls UpdateWidget on each one so every client sees a refreshed, synchronized roster.