Skip to content
Development
Skill

/tower-defense

Designs tower defense games in any engine: lane and maze pathing, wave pacing, targeting priorities, armoured and flying counters, and the gold economy, with a wave-curve checker. Use for a Bloons- or Kingdom Rush-like, or late waves that are impossible or trivial or a dominant

From plugin
awesome-gamedev-agent-skills
8.6k79 skills

Claude Code

$ npx -y skills add gamedev-skills/awesome-gamedev-agent-skills --skill tower-defense --agent claude-code

SKILL.md

tower-defense.SKILL.md
name: tower-defense
description: >
  Designs tower defense games in any engine: lane and maze pathing, wave pacing, targeting
  priorities, armoured and flying counters, and the gold economy, with a wave-curve checker. Use
  for a Bloons- or Kingdom Rush-like, or late waves that are impossible or trivial or a dominant
  tower. Not for pathfinding (`game-ai`) or survival base building (`survival-crafting`).

Tower defense

Owns the TD loop: paths, waves, towers, targeting and the economy that links them. The core balance question is whether the DPS the player can afford keeps pace with the HP each wave sends, so design both curves together and check them with the script before playtesting.

When to use

  • Towers attack waves on their own, the player spends earned currency to build, upgrade and

sell, and leaks cost lives. Includes lane defense, mazing TD and TD-action hybrids.

  • Balancing waves and economy, choosing targeting modes, adding enemy types, fixing pathing.

**When not to use:** the player shoots directly (`fps-shooter`); free-form base building with needs (`survival-crafting`); the A* or flow-field code itself (`game-ai`).

Workflow

1. **Pick the map model:** fixed lanes (most TDs; full control of pacing), maze (towers shape the path; needs placement validation) or open field with flow fields (large crowds). 2. **Write towers, enemies and waves as data.** Each tower has a role (single-target DPS, splash, slow, anti-air, armour pierce, support) and each enemy type exists to counter one lazy build: fast (beats slow single-target), armoured (beats rapid low-damage), flying (skips ground-only), swarm (beats single-target), boss (HP spike), regenerating or shielded (punish slow DPS). 3. **Set the curves:** enemy HP per wave grows geometrically (start near 1.12-1.18x per wave) and income grows from bounty growth plus enemy count. The two compound against each other, so small changes matter: in the script's example, HP growth 1.15 holds for 30 waves while 1.25 walls by wave 2. 4. **Run the curve check** (path relative to this skill folder): `python3 scripts/td_curve_check.py waves.json`. It buys a reference tower with all gold before each wave and prints each wave's pressure (needed DPS / owned DPS x efficiency). Errors are walls (pressure above 1.0); warnings are runs of trivial waves. Aim for 0.6-0.95 with breathers between spikes. `--help` shows the spec format; `--json` for tooling. 5. **Pace the session:** a short build phase between waves, a next-wave preview, an early-call bonus for confident players and a 2-3x fast-forward toggle. 6. **Check it.** Run the curve check and these tests, then report the numbers:

  • a fast enemy (speed x 10) on a path with sharp corners keeps its total travel time within

one tick of `path_length / speed` (refs §1);

  • maze maps: every placement that would cut the spawn or any walking enemy off from the goal

is refused (refs §1);

  • targeting "first" picks the enemy with the most path progress even when another is

closer to the tower.

Economy rules

| Lever | Start here | Why | |-------|-----------|-----| | Wave 1 | beatable with starting gold at pressure about 0.5-0.7 | the first wave teaches, it does not test | | Kill bounty | most income early; wave-clear bonus grows later | late income should reward survival, not farming | | Leaks | cost lives and the bounty | otherwise leaking can be optimal | | Sell refund | 50-80% of money spent | repositioning possible, never free | | Interest | optional, capped | rewards saving but snowballs | | Upgrades | competitive gold-per-DPS with new towers, with diminishing tiers | "tall" and "wide" both viable | | Early call | gold bonus scaled by time skipped | speeds the game for experts | | Targeting | per tower: first (default), last, strongest, weakest, closest | changes play more than raw stats |

Pattern 1: wave data

# A wave is data: groups spawn in order, each with its own spacing.
WAVES = [
    {"groups": [{"type": "grunt", "count": 10, "spacing": 0.6},
                {"type": "runner", "count": 6, "spacing": 0.3}], "clear_bonus": 30},
    {"groups": [{"type": "armored", "count": 4, "spacing": 1.2}], "clear_bonus": 35,
     "preview": "armored"},                     # shown one wave ahead in the UI
]

Telegraph every new enemy type a wave ahead, and introduce it alone before mixing it with others, so the counter feels learnable rather than random.

Gotchas

  • **Late game impossible or trivial** → HP growth and income growth set separately. Tune them

together with the curve check; geometric HP needs geometric income or upgrade efficiency.

  • **One tower wins everything** → no enemy counters it. Add the counter type (step 2) and

diminishing upgrade returns.

  • **Enemies stuck, or the goal unreachable** → a maze placement severed the path. Validate with

one search from the goal before committing (refs §1).

  • **Fast enemies slow down at corners or overshoot** → movement stops at each waypoint. Carry

the leftover distance (refs §1).

  • **Towers ignore the enemy about to leak** → "closest" used as the default. Default to

"first" by path progress.

  • **Wave timers drift on slow machines** → spawn spacing counted in frames. Use the game clock;

fast-forward multiplies the clock, not the frame rate.

  • **Specials feel unfair** → no preview. Show the next wave's composition.
  • **Monotonic ramp exhausts players** → every wave harder than the last. Spike, breather,

spike.

References

  • `references/balancing.md`: read when choosing path representations and writing waypoint or

maze validation code, targeting mode code, DPS and "can this lane hold" math, HP scaling, economy details, lives and wave pacing.

  • `scripts/td_curve_check.py --help`: spec format and the pressure model's limits.

Related: `game-ai` (A*, flow fields), `level-design` (map layouts), `godot-tilemap` or `unity-tilemap-2d` (grid maps

Read more
@gamedev-skills
Ships withawesome-gamedev-agent-skills

<img src="docs/assets/awesome-gamedev-agent-skills-banner.png" width="820" alt="awesome-gamedev-agent-skills — game-dev skills for AI coding agents.

Stars on GitHub

Momentum

stars in total
8.6k
Star history of gamedev-skills/awesome-gamedev-agent-skills on GitHub, a chart by star-history.com

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills13d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react4d252k
@facebook@facebookInstall Skill

Questions about tower-defense.

Which coding agents can use tower-defense?
tower-defense installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.