← Back to project summary

Detonation

A closer look at the app, the systems I owned, and the features behind it.

What the game is

  • Pick a mission from a briefing screen that shows difficulty, the enemy roster, and your best time on that level.
  • Choose your bomb count on a slider. More bombs means more fuse time, so the risk and the clock are the same dial.
  • Sneak past guards, plant sticky bombs on them, and get clear before the fuse runs out.
  • Three weapons on a single cycle key: bare hands for stealth, a glue gun that freezes a guard in place, and a pistol that is loud enough to bring guards running.

The detonation sequence

  • When the timer hits zero the camera disables its follow behavior and pans out to a wide shot of the level center.
  • Time scale drops to 0.05, roughly a twentieth of normal, but the camera animation runs on unscaled time so the pan itself stays smooth.
  • After a deliberate pause on the wide shot, every planted bomb fires at once from a single global detonation event.
  • The game then counts the surviving guards. Zero left is a win; anything else is a failed mission.

Guard AI

  • Guards are built from the player character prefab with the input reader disabled and synthetic input injected each frame, so they move with exactly the same controller the player uses.
  • Four states: patrol between points, alert after hearing or losing you, chase on line of sight, and frozen when glued.
  • Vision is a real cone with a configurable half-angle and a layer mask, so walls actually block sight.
  • Hearing is a broadcast noise event with a radius, so a pistol shot into a wall pulls nearby guards toward the sound rather than toward you.
  • Guards are immune to ordinary damage by design and die only through the explosion path, which keeps the stealth rule honest: bombs are the only way to finish a level.

How it reuses the arena codebase

  • The same EntityStats, PlayerController, AbilityController, and WeaponHandler run here with no networking at all.
  • Offline mode is automatic rather than a setting: with no NetworkManager in the scene, stats and weapons detect it and run their local paths.
  • A small scene bootstrapper replaces the multiplayer GameManager, doing only the three things a single-player scene actually needs.
  • Missions, loadouts, and the mission catalog are all ScriptableObjects, so a new level is data plus a scene rather than new code.