Unreal Engine 5 · Senior Capstone
Monkey Mondays: The Game
A physics-driven third-person puzzle adventure built around expressive ragdoll movement, environmental interaction, atmospheric spaces, and aggressive banana enemies.
The Goal
Our team set out to create a comedic horror game where unstable physics were not simply a visual effect, but a central part of movement, combat, puzzles, and enemy interactions.
- Make physics-driven movement expressive without making it frustrating.
- Turn collisions, falls, and enemy attacks into memorable gameplay moments.
- Build enemies capable of physically interacting with the player's ragdoll.
- Use lighting and environmental effects to guide players through the facility.
- Maintain playable performance despite heavy physics, AI, VFX, and animation costs.
Active Ragdoll Character Controller
I helped develop the game's physics-driven character controller, using forces and torque to control a simulated body rather than relying entirely on a traditional animated character capsule.
- Calculated movement relative to the player's camera.
- Applied movement forces and target velocity through the character's pelvis.
- Used rotational torque to turn the body toward the intended direction.
- Projected movement across slopes to prevent unnatural uphill and downhill behavior.
- Tuned jumping, vertical velocity, acceleration, and force limits.
- Balanced player responsiveness against the instability that gave the game its personality.
Balancing Control and Chaos
The largest challenge was making a physically simulated character feel responsive. Too much force caused overshooting, sliding, and unstable movement, while too little force made the character feel slow and unresponsive.
- Replaced simple impulse-driven movement with target-velocity control.
- Normalized diagonal input to prevent faster diagonal movement.
- Limited excessive vertical velocity and repeated jump forces.
- Adjusted torque independently from translation for more reliable turning.
- Preserved physical reactions when enemies or environmental objects disrupted the player.
Physics-Aware Enemy AI
I developed the behavior systems for enemies that detect the player, investigate sounds, chase, attack, latch onto the ragdoll, and recover after being repelled.
- Built state-based logic with Unreal Engine Behavior Trees and Blackboard data.
- Created custom tasks, decorators, services, and perception behavior.
- Supported visual detection and sound-based investigation.
- Coordinated enemy attacks with physics constraints and attachment logic.
- Handled interruption, detachment, recovery, and return-to-patrol states.
- Prevented conflicting behaviors such as attacking while already attached.
Sight, Sound, and State Changes
Enemies used player-sighting information and sound locations stored in the Blackboard to choose their next action. When an enemy heard a sound without seeing the player, it could interrupt its patrol, investigate the location, play an alert response, and then return to patrolling if the player was not found.
Attacking and Latching
Enemies did more than damage the player. They could physically leap toward the ragdoll, attach themselves to the body, and interfere with movement. This meant the AI logic had to coordinate with the game's physics constraints and track whether the enemy was attacking, attached, detached, or being repelled.
Custom detach and repel behaviors allowed the enemy to release the player cleanly, recover from the interaction, and transition back into its normal behavior cycle.
Lighting and Player Guidance
I created and refined environment lighting throughout the game, focusing on atmosphere, readability, and guiding the player through otherwise visually similar laboratory spaces.
Lighting was used to separate transitional hallways from important gameplay rooms. Neutral overhead lighting established the facility's cold, clinical foundation, while stronger color, fog, contrast, and directional light identified major destinations and created a sense of unease.
The Pizza Room
The pizza room needed to feel different from the surrounding facility while remaining part of the same environment. I used green lighting, volumetric atmosphere, shadow, and a concentrated overhead focal light to make the room feel contaminated and threatening.
The central lighting composition directs the player toward the table and pizza piles, while the darker edges of the room obscure threats and support the game's horror tone.
VFX and Environmental Detail
I developed Niagara effects and reactive environmental details that helped communicate gameplay events and made the facility feel more dynamic.
- Created Niagara systems triggered by gameplay and physical collisions.
- Passed color, scale, and other parameters into reusable effects.
- Developed collision-driven decals that accumulated across surfaces.
- Integrated effects with gameplay actors instead of treating them as isolated visuals.
- Limited collision checks and accumulated effects to reduce runtime cost.
Optimization
Physics simulation and enemy actors were among the project's largest runtime costs. I used Unreal's profiling tools to identify systems that continued updating even when their owning Actors appeared inactive.
- Profiled physics, Blueprint, animation, AI, and World Tick costs.
- Identified enemy actors as a major source of frame-time instability.
- Disabled ticking at both the Actor and individual component levels.
- Deactivated rendering, animation, collision, and physics for inactive enemies.
- Moved appropriate repeated checks from Tick to timed intervals.
- Reduced unnecessary traces and expensive Niagara collision updates.
- Supported instancing and level-management work for dense environments.
A Key Discovery
Hiding an enemy or disabling its main Actor Tick did not remove all of its runtime cost. Individual skeletal, collision, physics, and other components could continue updating independently.
I investigated the enemy hierarchy component by component and developed a more complete activation system that disabled or restored each expensive system as needed.
- Visibility alone was not enough.
- Actor Tick alone was not enough.
- Component activity had to be managed explicitly.
- Profiling was used to verify improvements instead of relying on assumptions.
What I Learned
Monkey Mondays taught me how closely gameplay programming, technical art, AI, physics, and optimization affect one another in a system-heavy game.
- Unpredictable gameplay still needs carefully designed boundaries.
- Physics interactions must remain readable, even when they are intentionally chaotic.
- AI behavior must account for both logical state and physical state.
- Visual effects and lighting decisions can directly affect gameplay clarity and performance.
- Actor-level settings do not always represent the full runtime cost of their components.
- Profiling early is more reliable than attempting to optimize from intuition.
- Cross-disciplinary communication is essential when one system affects several teams.
The project strengthened my ability to move between player experience, visual presentation, technical implementation, and runtime performance while keeping each decision focused on the final game.