90-Minute AI Boss Fight Challenge - Build Reactive Encounters

A good boss fight feels reactive: the boss changes behavior when health drops, telegraphs big attacks, and gives the player a clear way to win. You can get a minimal but satisfying version of that in about 90 minutes if you focus on one boss, a simple state machine, and clear feedback.

This challenge is for developers who want to practice AI behavior, phasing, and telegraphing without building a full game. Use any engine you like (Unity, Godot, Unreal, or a framework); the ideas transfer.

The Goal

By the end of 90 minutes you should have:

  • One boss character that the player can damage.
  • At least two distinct phases (e.g. above 50% health vs below 50%) with different attack patterns or aggression.
  • At least one telegraphed attack (wind-up, then strike) so the encounter feels readable.
  • A clear win condition (boss defeated) and a simple loss condition (player defeated or timeout).

No need for fancy art or audio. Placeholder shapes and one or two SFX are enough.

Before You Start (5 minutes)

Decide:

  • Engine – Unity, Godot, Unreal, or something else. Stick to what you know so the timer goes into design and code, not setup.
  • Scope – 2D or 3D, top-down or side view. Simpler is better.
  • Boss idea – One sentence: e.g. "Floating orb that shoots in patterns and gets faster under 50% health."

If you already have a small project with a player that can move and maybe shoot, use it. Otherwise, a box that moves and a "damage" trigger is enough.

Phase 1 - Boss Entity and Health (15–20 minutes)

Create the boss object and give it health.

  1. Spawn the boss in the scene (sprite or 3D model, or a placeholder).
  2. Add a health value (e.g. 100). Expose it so the player’s attacks can reduce it (e.g. TakeDamage(amount)).
  3. React to death – When health reaches 0, stop behavior, play a simple effect or animation, and trigger a win state (e.g. "Boss defeated" text or scene change).

Pro Tip: Use a simple event or delegate (e.g. OnBossDeath) so the rest of the game (UI, camera, music) can react without the boss script needing to know about them.

Phase 2 - State Machine and Two Phases (25–30 minutes)

Give the boss a minimal state machine so it can switch behavior based on health.

  1. Define two phases – e.g. Phase A (health > 50%), Phase B (health <= 50%). You can use an enum or string: PhaseA, PhaseB.
  2. Check health each frame or when hit – When current health crosses the threshold, set the current phase and switch behavior.
  3. Phase-specific behavior – In Phase A the boss might move slowly and use one attack; in Phase B it moves faster and adds a second attack or different pattern.

You do not need a full generic state machine. A variable like currentPhase and an if/else or switch that chooses attack and movement is enough.

Common mistake: Forgetting to actually change behavior in Phase B. Make sure the player can see and feel the difference (e.g. faster movement, new projectile pattern, or more frequent attacks).

Phase 3 - One Telegraphed Attack (20–25 minutes)

Add at least one attack that is clearly telegraphed so the encounter feels fair.

  1. Telegraph – Before the attack, show a warning (e.g. charge-up animation, red zone on the ground, or a short "about to strike" state). Last about 0.5–1.5 seconds so the player can react.
  2. Strike – After the telegraph, perform the attack (damage area, projectile, or dash). Keep the hitbox active only for a short time.
  3. Recovery – Optional short recovery state so the boss is not immediately attacking again; the player gets a moment to breathe.

If you have time, add a second telegraphed attack (e.g. a long-range shot vs a melee slam) so the boss feels less repetitive.

Phase 4 - Polish and Win/Lose (15–20 minutes)

Tie the encounter together.

  1. Win condition – When boss health reaches 0, trigger your win state. Disable boss logic and show clear feedback (e.g. "Victory" or transition to next scene).
  2. Lose condition – If the player has health, reduce it when hit by the boss; at 0, show "Defeat" or restart. If you have no player health, a simple timeout or "hit 3 times = lose" works.
  3. Feedback – Damage numbers, screen shake, or a brief flash when the boss or player is hit. One or two cues are enough.
  4. Loop – Make sure the player can retry (restart scene or reset boss and player) so the challenge is replayable.

Pro Tip: Expose boss phase and health (or a "phase changed" event) so you can hook up UI (e.g. phase name or health bar) or music changes later without refactoring.

What Counts as Success

  • Boss has health and can be defeated.
  • Boss has at least two phases with noticeably different behavior.
  • At least one attack is telegraphed before it hits.
  • Win and lose conditions are clear and testable in under 90 minutes.

Stretch goals if you have extra time: a simple health bar, a second telegraphed attack, or a brief invulnerability window after the player is hit so they are not stunlocked.

Why This Challenge Helps

  • State machines – You practice switching behavior on a condition (health threshold), which scales to more phases and more complex bosses.
  • Telegraphing – You separate "warning" from "hit," which is the core of readable, fair difficulty.
  • Scoping – 90 minutes forces you to cut scope and ship one clear idea instead of a half-finished full game.

You can repeat the challenge with a different boss idea, add phases (e.g. three phases at 66% and 33%), or integrate the boss into a larger project once the core loop feels good.

Frequently Asked Questions

Do I have to use AI or machine learning?

No. "AI" here means game AI (behavior, state machines, phases). No ML or neural networks are required. You are building classic game logic that feels smart and reactive.

Can I do this in 2D and in 3D?

Yes. The same structure applies: health, phases, telegraph then strike. In 3D you might add simple nav or rotation toward the player; in 2D you might use predefined movement or patterns.

What if I go over 90 minutes?

The timer is to keep scope small. If you run over, finish the current phase and stop. You can always add more attacks or polish in a follow-up session. The goal is to have one working, readable boss encounter.

How do I make the boss feel harder without more phases?

You can increase speed, reduce telegraph time, add more projectiles in the same pattern, or shorten recovery between attacks. Prefer clear telegraphs and readable patterns over random or instant hits.

Where do I share my result?

Use the hashtag or community channel your team or community uses (e.g. a game dev Discord or a challenge hashtag). Sharing a short clip of the telegraphed attack and phase change is a great way to show what you built.


If you complete the challenge, bookmark this page and try it again with a different boss archetype (e.g. melee rush vs long-range pattern) or add a second boss with a different state layout. Building small, focused encounters is one of the fastest ways to level up your game AI and feel design.