Skip to content
← Back to Projects

Paint Mechanics System

My RoleSole Programmer
Software & Languages UsedC++, Unreal Engine 5, Unreal Blueprints, JetBrains Rider

Overview

Context

This project was a solo developed university assignment, across 8 weeks to create a Testing Environment for a Series of mechanics in C++, while also making it designer friendly & scalable

Bouncy green paint effect on player

A first-person t training course traversed via paint, (paint gun) , the player is not able to use mechanics manually only through the paint. Due to time constraints, I focused on the core systems, making them designer friendly & efficient.

This Testing Environment features a series of systems

  • Paint Ability System ( Green,blue,Red,Orange,Purple) , modifying player movment and interact with special surfaces ( jump,speed boost, phasing, destructable,manual jump).
  • Projectile + Collider management systems, using design patterns such as object pooling and spatial partioning
  • Data-driven content (Type Object / Data Assets), pickups / collectibles, input actions, paint gun. Making it easy to change specific values or switch out meshes and even change the entire ability setup. Just by switching out the data assets in the blueprints there is no integration issues.
  • UI systems handled through UMG, via a general HUD class, allowing for easy additions to be made to the players main UI
  • Traversal & interaction Systems (dash and turret button press)
  • A project-wide focus on C++ decoupling and modularity, making extensive use of interfaces, Delegates, actor component, and BlueprintImplementableEvents for easy extension and customisation in blueprints

Highlights

General

Lessons Learned

This project reinforced how important it is to balance scope vs. polish. The core mechanics (paint effects, object pooling, modular components, UI feedback) came together quickly, but I learned that traversal/puzzle gameplay lives or dies on iteration - clear visual communication, consistent rules, and repeated playtesting + tuning often take longer than implementing the mechanics themselves.

My biggest technical takeaway was the value of building for extension early. By structuring paint behaviour as data-driven effects + reusable components (rather than hardcoding per-actor logic), I ended up with systems that are easy to scale: new paint types, surface rules, interactables, or reactions can be added by creating a new class/data asset and wiring it up, without rewriting the existing gameplay loop.