Inspiration

A rescue signal is not safe just because you heard it. It is safe only when it reaches home.

Signal Bastion began with a question: what if a tower-defense game's objective and its defenses were the same network?

The player is the operator of a damaged relay station. Three survivor groups are transmitting their coordinates, but every tower placed to reach them also extends the exposed signal mesh. Those links carry power to weapons, route amber coordinate packets back to the Core, and give hostile machines another system to disrupt.

That made placement more than a range puzzle. A tower can be a gun, a relay, and a liability at the same time. Disconnecting a branch may save the Core but strand data already travelling through it. Listening longer rescues more people, but raises the Attention that brings enemies to the map.

What it does

Signal Bastion is a portrait-first 3D tower-defense rescue game about holding a signal network together long enough to send help.

The run has two connected phases. First, players receive coordinates from three locations across the map. Then, after all three are secured, they send the final broadcast and defend the Core through eight waves.

  • Build a live mesh — Gun, Cannon, Arc, and Flak towers form links back to the Core. A tower without power cannot fire, and a broken route can isolate coordinate data.
  • Receive calls on the map — Call labels sit above their locations. Players tap a caller, open the receiver, and keep the route alive while amber packets travel to the Core.
  • Choose three run traits — Each secured location pauses the game for a seeded choice of three traits. Traits support tactics such as offline battery fire, stronger marked-target damage, longer packet survival, or EMP energy refunds. They last only for that run.
  • Pick tower specializations — Every tower chooses one branch at level 2 and reinforces it at level 3. Gun becomes Sniper or Burst; Cannon becomes Siege or Shrapnel; Arc becomes Disruptor or Sky Bridge; Flak becomes Interceptor or Airburst.
  • Fight on two layers — Ground units follow routes and can be redirected by Barrier and Mud. Scout Drones and Bombers fly directly to the Core, forcing players to cover the sky with Gun, Sky Bridge Arc, or Flak.
  • Interrupt dangerous moments — Breakers and Jammers visibly charge before cutting or jamming a link. Bombers and Colossus also telegraph attacks near the Core. EMP cancels a windup, releases that enemy's interference, and creates a deliberate reaction window.
  • Mark a priority target — Tapping an enemy makes it the preferred target for every compatible tower in range. This turns kill order into an explicit decision without stopping automatic defense.
  • Hold the final broadcast — Eight warning-led waves arrive across a 400-second defense. Waves pay Scrap and Energy between bursts, so rebuilding, upgrading, and choosing when to spend EMP remain part of the pressure.

The central tension is not simply surviving enemies. It is deciding which parts of the network are worth protecting when every line is carrying both firepower and people.

How we built it

Signal Bastion was built with vanilla JavaScript, Three.js, HTML, CSS, and the Web Audio API. The finished submission is an offline package: it includes local Three.js files, fonts, artwork, music, and sound effects, with no backend, account, or runtime network request.

The project is built around a few shared systems:

  • One graph for power and rescue data — The same signal-link graph determines whether towers are powered and whether packets can route home. Enemy interference changes both results, so network damage is immediately visible in combat and rescue progress.
  • Unified interruptible enemy skills — Breaker, Jammer, Bomber, and Colossus use a common moving → windup → active → cooldown lifecycle. The same state drives telegraphs, EMP interruption, warning copy, link recovery, and audio feedback.
  • One targeting rule for all combat — Ground/air compatibility, priority marking, splash, and Arc chaining read the same target checks. A Cannon cannot waste its explosion on a drone; a marked enemy outside range does not make a tower idle.
  • A contextual mobile interface — Calls, build choices, target cards, and upgrade branches live around map objects. The upgrade fan expands from the selected tower, while its readable detail card reserves space beneath the HUD instead of covering its own controls.
  • Deterministic run choices — Trait offers use a stored seed, avoid repeats, and can be reproduced for balance testing. There are no permanent upgrades or grind currency.
  • Local sound presentation — The project packages a CC0 ambient music loop and CC0 sci-fi UI/combat samples locally. They use the same mute and pause states as procedural fallback cues.

Challenges we ran into

The biggest challenge was making network disruption feel tactical rather than random. Earlier interference could repeatedly extend itself, which made a Jammer feel like a permanent bug instead of an enemy action. We rebuilt it around fixed windup, active, cooldown, recovery, and immunity states. EMP, death, selling a tower, route changes, and overlapping enemies now resolve against the same ownership model.

Adding air enemies exposed another problem: visually different enemies are not enough if every tower can answer them. We split the target layers, gave Gun baseline air coverage, made Flak a clear anti-air specialist, restricted Cannon splash to ground targets, and gave Arc an explicit Sky Bridge branch. The result is a build decision players can see before the first drone arrives.

Portrait UI was a continuing constraint. The map needs room for calls, threats, the Core, tower menus, and readable touch targets. A branch detail tooltip originally sat under its icon and could collide with the selected tower or the top dialog. We separated the fan from its information card and make the fan reserve room for that card whenever it opens.

Finally, sound needed to ship with the game instead of relying on a network source or a thin procedural loop. We selected CC0 assets that can be bundled with the submission, retained Web Audio state handling, and made the music and effects respond to mute, pause, warnings, and player interaction.

Accomplishments that we're proud of

We are proud that the rescue premise reaches every layer of play. Building a tower extends the network. The network powers the tower. The same route brings a survivor's data home. An enemy cutting one link changes all three at once.

We are also proud of the combat choices that are visible before they become numbers. Flying enemies have a readable flight layer and shadow; Flak has a distinct anti-air role; enemy windups reveal exactly when EMP matters; and each tower branch changes its in-world silhouette as well as its stats.

The run build is intentionally temporary. Three trait drafts, eight tower branches, target marking, and EMP timing create different approaches without permanent power or an online progression system.

Finally, the game is deliverable as a compact offline browser build. Its audio, 3D presentation, rules, content, and validation tools all ship locally.

What we learned

  • Make the shared system visible. A graph that controls both data and power creates strong decisions only when players can see the links, packet routes, and consequences of a cut.
  • Telegraphs make disruption fair. A fixed charge window turns EMP from a panic button into a skill test.
  • Distinct layers need distinct counters. Air enemies mattered only after target rules, tower roles, and visual language all agreed.
  • Mobile UI needs reserved space, not smaller text. Moving the branch information into a dedicated safe band was clearer than shrinking its tooltip.
  • A temporary build can still support replayability. Seeded trait offers and irreversible branches create experimentation without a grind economy.
  • Offline assets need an ownership story. Bundled CC0 audio and local runtime assets make the game portable and predictable.

What's next for Signal Bastion

  • Run fresh-player and real-device tests at 360×640, 390×844, and 412×915 to tune touch targets, readability, and difficulty.
  • Capture a complete set of current gameplay media for the Project Media gallery.
  • Balance health, damage, prices, and wave composition after human playtests while preserving the ground/air and interruption roles.
  • Add more enemy approaches and encounter variety without weakening the network-rescue premise.
  • Expand accessibility work, including more reduced-motion coverage and clearer non-color indicators for interference and target priority.

Built With

Share this project:

Updates

Submission history