top of page
Desktop 2026-01-10 12-57-16 PM-334_edited.jpg

Project Mr. Static!

Role: Solo Developer

DurationAugust 2025 - December 2025

Genre: Action-Adventure

Engine/Tools:

  • Unity3D/C#

  • Behavior Designer (Behavior Trees)

About:

What started as a solo project to practice AI and boss design evolved into a 5-month project, where I brought in two of my best friends to collaborate and turn it into a narrative-driven boss encounter.

 

My goal was to understand the elements of boss design to create a balance of tension, escalation, and engagement for players. Technically, I wanted to explore using AI architectures such as Behavior Trees & State Machines with enemies and the boss as well.

 

As 2025 came to a close, I wanted to complete an AI design project in Unity before shifting my focus to learning Unreal Engine.

Highlights:

  • Implemented responsive player movement, camera, and combat systems.

  • Designed the initial boss AI using Behavior Trees and five custom combat action tasks.

  • Rebuilt the boss AI as a Finite State Machine for greater control and readability, implementing eight distinct states with tailored logic.

  • Developed five enemy bot classes with unique attacks using Behavior Trees.

  • Built feedback systems (hit reactions, barks, combat signals) to improve clarity and player understanding during the boss encounter.

Pre-Production and Prototyping Stage

Design Pillars:

Right off the bat, when I began working on this project, I did tons of research into different types of boss fights and what I wanted to accomplish for this boss encounter. Going into this project, I kept three core design pillars in mind:

  • Clear Structured Encounter

    • The boss needs a clear, concise strategy at all times to leverage the arena and apply constant pressure to the player in each phase.​

  • Readability and Anticaption

    • Players should understand the signals that indicate when a boss is about to strike and learn to study anticipation and execution at any point.​

  • Player-Driven Customized Difficulty*

    • With the three types of attacks for the boss, players will be able to turn off any or all attacks during bot encounters to create the kind of challenge they want overall.

These pillars were tied to the goal of delivering a boss fight that offers a unique player experience in how they choose to engage Mr. Static. I didn't aim to design something completely new, which is why I mainly looked to 3D platformers for reference on the simplest yet most challenging boss fights in a 3D space.

Ideal Iteration Stage

Player Movement, Camera & Combat​​

To start off strong, I implemented a player controller focused on responsiveness and simplicity. I started with that clear goal, so the code would be scalable if I wanted to add more abilities for the player later.

The controller handles all movement, camera control, animations, and input. For combat, I aimed for a straightforward "left-right" punch, drawing on 3D third-person platformers such as Astro Bot and Ratchet & Clank. With this choice, I was able to control the scope I wanted to maintain, although I did get a little ambitious at times, given the extra player abilities I prototyped that were ultimately cut, as I felt it was bad to introduce too many mechanics with little time in a demo for players to learn.

 

The trade-off was a Hit Interactable System that triggers a reaction (sound, animation, or VFX) when the player hits an object. The next challenge was to design the boss and enemies to support this.

Basic Movement and Combat for Player alongside Hit Interactable Objects

View Scrapped Player Abilities

Drop-down-arrow-icon-rounded.png
Drop-down-arrow-icon-rounded.png

Pick Up and Throw​​

At the earliest, I experimented with players being able to pick up and throw crates (and explosives) as well. My intention in the original iteration was to identify opportunities for players to counter Mr. Static's Ship while it was airborne. Throwing things seems like a good solution.

Why was it cut?

Due to the change of iteration from the ideal prototype, this feature was deemed pointless if Mr. Static was always grounded.

Suction Blaster​​

Replaying the latest Ratchet & Clank sparked the idea of implementing a weapon to counter Mr. Static's ship bullet projectiles while airborne, featuring an aim sight and trajectory visual. I intended to identify ways players could counter MR. Static in his ship at the time, which led me quickly to develop this concept. 

Why was it cut?

With the camera systems in place for the boss fight, the blaster and aim UI interfered with base movement and inputs. For time and scope, I removed it to continue improving base movement and combat.

First Iteration of Mr. Static Boss Fight

During the first prototyping stage, I first imagined that it would be more of a "small player vs flying boss". Given how Mr. Static was initially designed as an enemy in spaceship at the time.

1st Iteration of the Boss Battle

I designed this encounter as if it were part of a story mission. It featured several systems to help deliver a proper introduction to the boss, including:

  • The checkpoint system at the start of the game.

  • Opening cutscene created via Unity's Timeline. 

  • Static Towers to power Mr. Static's ship

  • Camera system to help keep the player and Mr. Static in view at all times during ground and off-ground sets.

 

The first iteration focused on a pattern in which players had to take down "Static Towers" to disrupt Mr. Static's ship, after which he would leave himself vulnerable for players to strike.  He did come with a barrage of attacks he could unleash randomly. He had two states that helped detect whether he was on or above the ground.

To manage all those behaviors and attacks, I used a plugin called Behavior Designer, which is essentially Behavior Trees for Unity. I used it only to execute attacks, but based on either phase or its ground check.

Iterations of Mr. Static's Behavior Tree during 1st Iteration of the Battle

It was cool to finally be able to put together a behavior and even write custom tasks & conditions to support the boss's behaviors, but the drawback was that it took multiple iterations to assemble correctly, and it was buggy at times when transitioning between current ground or phase conditions.

 

Eventually, I was able to assemble a functional tree for the Boss AI in the 4th iteration of assembling the behavior tree.

CODE SNIPPETS

Player State Controller

Drop-down-arrow-icon-rounded.png
Drop-down-arrow-icon-rounded.png

Code below contains functionality for player controller 

Hit Interactable

Drop-down-arrow-icon-rounded.png
Drop-down-arrow-icon-rounded.png

Code below contains functionality for GameObjects that are hit by the player

Feedback from Ideal Iteration

Problems from Feedback:

  • Player (Bot-man)'s abilities felt overloaded.

    • Since throwing and shooting were implemented in this iteration, I realized that forcing players to learn too many abilities in a short time didn't benefit them during fights, as both throwing and shooting were rarely used.​

  • Nothing stops the player from hitting the "Static Towers."

    • Players felt unchallenged, and the boss spent more time in the air traveling along the nav mesh rather than attacking the player. They would focus on the enemy bots chasing them until the camera system reinforces their memory that the boss still exists.

  • Lack of readability and telegraphs from the boss

    • Aside from a few attacks, players reported being unable to read the enemy or phases, which led to their deaths early on. Someone told me they couldn't tell if they could even hit the boss due to no indication of the ship being hittable until I told them.​

  • Design-wise, this DIDN'T feel like a boss; it felt more like a special enemy.

    • With no change in escalation, slow attack speeds, and no visuals showing the boss's current state, it all felt like a special enemy next to an actual boss.

Why I went back to the drawing board after this iteration:

Given that I'd been working on this boss fight for three months and had playtested it once, I considered not only the design feedback but also the technical side and realized how much code couldn't scale to incorporate it. I could easily see I was reaching out-of-scope territory there. I took a turn and decided to change direction for the design of this fight. One that focuses more on story and impact than innovative mechanics. Here are a couple of changes I made to make this possible, both technical and design-wise:

  • More grounded boss encounter

    • To reduce the scope, I focus on making this a more grounded fight, where players can physically see the boss moving around.

  • Revamp Mr. Static's combat completely and reduce player abilities

    • To ensure players are not being overwhelmed with a tutorial-less demo and a horde of attacks from the boss when the fight starts.​

  • Finite State Machines​ >>>>> Behavior Trees

    • This change to the AI architecture for the boss helped me account for transitions between states, each of which holds logic for specific behaviors to execute. No more struggling with executing behaviors based on state changes.

  • Reduced the arena size

    • With the boss no longer having a "ship", there was no need for players to wander around a large empty arena.​

I spent time actually writing documentation and paper concepts for what I wanted in this new iteration. This led to a design document that outlined the entire flow and phases for this iteration of the Mr. Static boss battle. By the time November 2025 ended, I was able to execute this brand new prototype:

Second Iteration of Boss Fight

Finalized Stage

From Behavior Trees to State Machines:

Working with behavior trees during the first iteration was helpful for learning how they worked, but that doesn't mean it was the right solution for this particular boss fight.

 

I stumbled upon a GDC Talk titled "AI Arborist: Proper Cultivation and Care for Your Behavior Trees." During this presentation, Bobby Anguelov (Programmer @ Valve) mentioned to "Stop building large monolithic trees with multiple responsibilities." (37:16) He then recommended State Machines for Boss Battles, as making one in Behavior Trees would be a "nightmare" due to the weakness of bad transitioning.  Well, I've known well-crafted boss fights using BTs, but in this case, given how true his statement was for me at that moment, I didn't hesitate to move away from Behavior Trees. 

StateMachineFlow_edited.jpg

State Machine Flowchart

I had already coded Finite State Machines in past projects, so I immediately began defining their behaviors and states. I aimed to ensure that all behavior logic was set within its own state.

Boss AI Combat: 

 I updated the boss fight to ensure Mr. Static's combat in a way that kinda mimics a boss fight from Jak 3, where Jak faces off against Errol

In this fight, Errol travels through three distinct stop zones to strike the Jak (Player) with bombs and enemies. The design here, with the boss, is straightforward and introduces tension (via additional wave bombs) and pressure (via platforms that fall after each phase) as it drops. 

For Mr. Static, I followed the same formula, except with an even level ground with unique attacks for each stop zone, or in this case, "weapon station". I implemented the following, and how they evolve throughout the phases:

Previewofnearfinishedfight-Turret-ezgif.com-video-to-gif-converter.gif

Weapon Station: Turret 

Mr. Static fires rounds inside his turret and deals low damage to the player.

  • Phase 1

    • 5-round interval burst

    • Timing: 5 bursts → mini cooldown (0.5f)

  • Phase 2

    • 5-round interval burst

    • Timing: 5 bursts → mini cooldown (0.2f)

  • Phase 3

    • 5-round interval burst (w/ shotgun round possibility)

    • Timing: 5 bursts → mini cooldown (0.5f)

Weapon Station: Cannon Wave Bomb

Mr. Static throws bombs at the Players' pinpointed exact location. Deals medium-high damage to the player.

  • Phase 1

    • 10 throws

    • Timing: 1 throw → bomb lands via animation curve timing

  • Phase 2

    • 10 throws (possibility with static wave on land)

    • Timing: 1 throw → bomb lands via animation curve timing

  • Phase 3

    • 10 throws (possibility with static wave on land)

    • Timing: 1 throw → bomb lands via animation curve timing

Previewofnearfinishedfight-BombThrow-ezgif.com-video-to-gif-converter.gif
Previewofnearfinishedfight-Lighting-ezgif.com-video-to-gif-converter.gif

Weapon Station: Lighting Strike 

Mr. Static summons lightning strikes around the Player's radius. Deals serious damage to the player.

  • Phase 1

    • Five strikes

    • Timing: 1 strike → cooldown (2.0f)

  • Phase 2

    • Five strikes

    • Timing: 1 strike → cooldown (2.0f)

  • Phase 3

    • Five strikes

    • Timing: 5 strikes → cooldown (2.0f)

Enemy Bot Classes:

For the enemy classes, I wanted to create several that the Player would encounter, each with different combat methods. To create a more systemic feel to the game, I implement an Explosive Stimulus to signal that bots (or any object with it) can explode and harm the player.

Player attacking earlier verison of the Explosive Bot

I also implemented the following enemy classes and the spawn rates that appears throughout the boss battle:

Screenshot 2025-12-13 212208.png
  • Explosive Bot

    • Spawn Chance: 50%

    • Combat: has to reach a proximity distance to the player to self-destruct

    • Weakness: can be destroyed with one punch​

Screenshot 2025-12-13 212236.png
  • Laser Bot

    • Spawn Chance: 20%

    • Combat: fires lasers in 4 directions when the player is within range, while traveling in random directions

    • Weakness: can be destroyed with three punches

Screenshot 2025-12-13 212259.png
  • Static Wave Bot

    • Spawn Chance: 5%

    • Combat: charges up a wave bomb once it turns fully yellow

    • Weakness: can be destroyed with five hits to the battery (located in the back of the bot)

Screenshot 2025-12-13 212325.png
  • Turret Bot

    • Spawn Chance: 25%

    • Combat: fires projectiles if the player comes within the distance range during

    • Weakness: can be destroyed with one punch​

Third Phase:

Phases during the fight change based on the health status of Mr. Static. I designed the boss's health so that phase changes were obvious, and how the weapon stations were powered.

Phase 3 introduces a backup Generator System that shields all the static towers, adding an extra layer for the player to overcome. Players had to destroy the generator to remove the shields during bot encounters, and Mr. Static's weapon usage was still present.

generator-ezgif.com-optimize.gif

Generator introduced in the third phase of the battle

Feedback from Ideal Iteration

Problems from Feedback:

  • With Cannon Wave Bombs and Static Wave Bot Made together, the boss became difficult.

    • To address this, I updated the Cannon Weapon Station and removed the wave bomb mechanic on bomb launches. I replaced the static ball with explosive crates, which produced a cool, cartoon-like bounce before the crates exploded.​

  • Players thought that respawning the bots was a bug when all the towers were down, and the boss was outside of a weapon station.

    • To address this, I implemented a bark system and bark scriptable objects to convey Mr. Static's states during the fight, keeping the player informed and preventing periods of silence.

  • Bug with Turret Bot and Tracking POV on BT Tree

    • To solve this, I implemented a custom decorator for my BT, where FOV became a part of the tree rather than a condition to watch on a separate script.​

Additional Updates to Iteration:

In the 5th month of this project, and with most mechanics in place. I updated the model and animations for Mr. Static, along with the weapon stations, to move this prototype out of a "testing" phase and into a final look. I brought in my best friend to help deliver VO lines for Mr. Static as he is constantly talking to the player.

By the time December ended, I wrapped up the project, and I was proud to have brought it through despite the design change I made midway through. This is how the final version looked:

Final Verison Gameplay

CODE SNIPPETS

Bark Controller

Drop-down-arrow-icon-rounded.png
Drop-down-arrow-icon-rounded.png

Code below contains functionality for how Mr. Static communicates during the boss battle

Takeaways & Lessons

Looking at this project, my first boss battle-focused project and its timeline, and the design pillars, I can say I am quite proud of what I was able to bring in 5 months. I can reflect on the good and bad in terms of how this project changes my perspective going forward

What went well?

  • Discipline

    • Working on this game for months was ultimately a rewarding and challenging learning experience. Maintaining motivation throughout was instrumental to this result.​

  • Constant Prototyping & Adapting

    • Working on this project taught me new skills, including Cinemachine, Timelines, and the required plugins.

  • Learning Behavior Trees

    • Despite moving away from Behavior Trees for Mr. Static, I was pleased to have learned how to assemble a tree of sequenced behaviors that runs dynamically at runtime. More importantly, conducting research on best practices for their use was beneficial to my learning and future projects.​

  • Adapting to a New Direction

    • In game design, things are always changing, and sometimes there are things that just don't work out. I learned that after testing this project with the 1st iteration of the boss fight and realizing how unfun and unclear it was, it needed a reroute that required extra time and work. I took it on nonetheless and remained driven by the new (and current) iteration of the fight.​

What went wrong?

  • Lack of Respect for Time-frame

    • Working on a personal project for 5 months was never my intention. When I started, I set out for a month of development, but I soon realized how ambitious I was, to the point that I didn't honor the deadlines I had set.

  • Not playtesting soon enough

    • Given how brutal the feedback was for the 1st iteration after 3 months of development, safe to say not playtesting the game early enough cost me months of work, which I discarded in favor of a new prototype to address issues and change direction, ultimately leading to the scrapping of the 1st prototype in favor of this new one.

Going forward, I don't think I will be returning to this project, as I already feel very much accomplished with this one. I plan to transition to Unreal Engine because I have always wanted to learn it alongside C++, as most of my favorite memorable boss battles I've played were created with it. I will apply the fundamentals of boss design I have gained here to that engine to achieve even better results.

Special Thanks to:

  • My 2 Best Friends

    • Jumping on the project to help with narrative, scripting, and voice acting.

  • Game Industry Mentors

    • Pushed me actually to FINISH a side project.

  • Co-workers at Testronic Labs

    • Playtesting the game during their free time.

    • STRONG feedback for the first build of the game.

bottom of page