TECHNICAL BRIEF

PROJECT INTRODUCTION

HamJam - Endless Runner challenges players to run as far as possible down a procedurally generated track. The core loop revolves around lane-switching, jumping, and sliding to dodge static and flying obstacles, collecting coins to purchase custom skins/map themes, and managing sprint meters. A chasing bear stays close behind, accelerating to catch the player if they crash, exhaust their energy, or make mistakes.

ENGAGEMENT MODEL4 Months
GAME ENGINEUnity 3D (URP)
GENREStylized 3D Endless Runner / Arcade
ART STYLEStylized 3D, Cartoon, Vibrant Colors
TARGET PLATFORMSAndroid, iOS
ENGINEERING ROADBLOCKS

TECHNICAL CHALLENGES

The project was commissioned to create a highly addictive mobile endless runner utilizing cloud-based user data retention and custom rendering profiles for low-end devices.

CHALLENGE LOG #1
HamJam: Endless Runner Challenge 1
Click to Expand
CHALLENGE LOG #2
HamJam: Endless Runner Challenge 2
Click to Expand
1

Dynamic Chaser Speed Mismatch

As the player runs further, their speed dynamically scales up (up to 50f). In early builds, the chasing bear's catch speed was hardcoded at 15f. This caused a game-breaking bug where the bear could never catch up to catch the player during a game-over or exhaustion sequence.

2

Cross-Platform Haptic Permission Failures

Implementing clean mobile haptics without adding heavy external asset-store packages. Furthermore, Unity builds often excluded the VIBRATE permission in the compiled Android manifest because haptics were called through native Java reflections (AndroidJavaObject) instead of standard APIs.

3

Stale Material Instances on Equipped Skins

When players equipped a custom skin, Unity cloned the material instance on the renderer. The player movement script cached the material reference too early on scene initialization, meaning that speed boost transparency and emission visual effects were applied to a hidden, stale material instance.

CUBESTAX ARCHITECTURE

ENGINEERED SOLUTIONS

1

Architecture

Dynamic Catch Math: Rewrote the chasing bear's final catch logic (FinishMove) to dynamically calculate speed as PlayerSpeed + CatchBaseSpeed rather than using a static float. This ensures the bear successfully catches and defeats the player at any running speed.

2

Gameplay

Zero-Plugin Haptic Wrapper & Permission Hook: Developed a lightweight, pure C# VibrationManager wrapping Android's VibrationEffect and iOS's AudioServicesPlaySystemSound. Added a compiler-friendly reference to Handheld.Vibrate() to force Unity's post-processor to auto-inject the VIBRATE permission into the Android Manifest without manual XML edits.

3

Optimization

Dynamic Material Resolver Hook: Replaced static material caching with a dynamic GetCurrentPlayerMaterial() getter in PlayerMovement.cs that queries the renderer's active material clone at the exact moment a power-up triggers. This corrected the reference mismatch so visual effects apply to the newly equipped skin.

4

Art Pipeline

Lightweight Stylized Rigging: Modeled and animated a vibrant 3D cartoon world using custom vertex-lit shader passes for maximum rendering speed across old smartphones.

VERIFIED SOLUTION #1
HamJam: Endless Runner Solution 1
Click to Expand
VERIFIED SOLUTION #2
HamJam: Endless Runner Solution 2
Click to Expand
EXECUTION TIMELINE

DEVELOPMENT PIPELINE

Structured milestone sprints from core game loop validation to production-ready multi-platform release.

Discovery & Prototyping (Phase 1)

Developed the procedural infinite platform spawner, lane-switching controls, and basic jump/slide character physics.

Cosmetics & Backend Integration (Phase 2)

Integrated PlayFab display name registration, secure cloud leaderboard statistics, and the coin-based unlock economies.

Polish & Mobile Optimization (Phase 3)

Added dynamic haptics, UI animations (pulse, bounce, wobble), delayed panel transitions, and resolved material instantiation bugs.

MEASURABLE METRICS

RESULTS & DELIVERY IMPACT

60 FPS Performance

+50% Stability

Memory Leak Status

100% Leak Resolved

State Sync Errors

100% Reliable Sync

KNOWLEDGE BASE

FREQUENTLY ASKED QUESTIONS

01How does the game ensure the chasing bear always catches the player at extreme speeds?
02How does the game handle display name collisions on the leaderboard?
Request a Quote Is your game AI ready?