tower-defense について
タワーディフェンスの設計者向けの組み合わせ型スキルです。敵の経路探索、ウェーブ生成、タワーの標的選択、経済を連携させ、ダメージ・敵の体力・収入のバランスとウェーブのテンポを扱います。
主な機能
- 01敵の経路とウェーブ生成の設計
- 02タワーの射程・ダメージ・連射速度の設定
- 03標的優先順位の設定
- 04撃破報酬と強化経済の計画
- 05体力・ダメージ・収入のバランス調整
- 06ウェーブ予告とテンポの設計
活用シーン
- 01経路を進む敵ウェーブの設計
- 02タワーの標的選択と配置方針の調整
- 03敵の強さとプレイヤー収入の均衡
- 04次ウェーブの予告と難易度変化の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill tower-defenseインストール後、Claude Code で/tower-defenseを入力して読み込まれたか確認します。
同梱ファイルreferences/balancing.md
詳細
タワーディフェンス
タワーディフェンスのプレイブックです。敵の経路探索、ウェーブの出現、タワーのターゲット選択、そしてそれらを結び付ける経済システムを扱います。これは構成的なスキルです。経路探索、AI、UI を組み合わせて TD のループを構成します。経路探索そのものを再説明するのではなく、TD が緊張感のあるゲームになるか、簡単すぎるゲームになるかを左右するシステムとバランス調整の要素(DPS と HP と収入)を定義します。
使用する場面
- プレイヤーがタワーを配置し、経路に沿って進む敵のウェーブを自動で攻撃し、獲得した通貨で拡張やアップグレードを行い、敵を通しすぎると敗北するゲームを作るときに使用します。
- ウェーブの構成やペース配分、タワーのターゲット選択の優先順位、ゴールドの経済システムを設計するときに使用します。
使用しない場面: プレイヤーがシューターを直接操作する場合 → fps-shooter。ニーズを満たしながら自由に拠点を建設する場合 → survival-crafting。経路探索アルゴリズムそのものには game-ai を使用してください。
コアループ
準備(現在のゴールドでタワーを配置/アップグレード)→ ウェーブを開始 → 敵がゴールに向かって進む間、タワーが自動で攻撃 → 敵を倒してゴールドを獲得 → ウェーブを生き延びる → さらに手強いウェーブに備えて繰り返す。 緊張感を生むのは、計画を立てるパズルです。今の DPS で次の脅威に対処できるか、そしてその対策を購入できるかが問われます。
必須システム
- 敵の経路 — ウェイポイント式のレーン、または迷路型 TD 用のグリッド+経路探索(参考資料)。
- ウェーブ生成 — ウェーブごとにスケーリングする、敵の種類ごとの時間指定・スクリプト化された出現シーケンス。
- タワー — 射程、連射速度、ダメージ、弾丸/ヒットスキャン、範囲攻撃、設置可能な場所の判定。
- ターゲット選択 — タワーごとの優先順位(先頭/最後尾/最も近い/最も強い/最も弱い)(参考資料)。
- 経済システム — 敵の撃破とウェーブボーナスによるゴールド、タワー/アップグレードのコスト、売却時の返金。
- ライフ/敵の通過 — 敵がゴールに到達するとライフが減り、0 になるとゲームオーバーです。
- ウェーブ/準備 UI — ライフ、ゴールド、次のウェーブのプレビュー、次のウェーブを開始する操作。
設計要素
| 要素 | 効果 | 備考 |
|---|---|---|
| ウェーブごとの敵 HP の増加 | アップグレードの必要性 | 幾何級数的に約 1.1~1.2 倍です(参考資料)。 |
| 収入と HP の曲線 | 難易度 | プレイヤーが各ウェーブの直前にようやく必要額を用意できる程度にします。 |
| タワーの DPS/射程/コスト | タワーの個性 | 安価で広範囲か、高価で高威力か。 |
| ターゲット選択の優先順位 | 最適な配置 | 基本ステータス以上にプレイを変化させます。 |
| 敵のバリエーション | 1 種類の構成での勝利を防ぐ | 高速/装甲/飛行/群れ/ボス。 |
| 敵の通過ペナルティ | 緊張感 | ライフと報奨金の両方を失わせます。 |
| アップグレードと建設の経済バランス | 戦略の奥深さ | アップグレードの効果を逓減させます。 |
| ウェーブのペース配分 | 緊張感のカーブ | 単調に難しくするのではなく、急増 → 休息 → 急増とします。 |
パターン
1. ウェーブ生成(時間指定、データ駆動)
# Pseudocode. A wave is data: a list of (enemy_type, count, spacing). Spawn over time.
wave = [ ("grunt", 10, 0.5), ("runner", 5, 0.3), ("tank", 2, 1.0) ]
def run_wave(wave):
for enemy_type, count, spacing in wave:
for _ in range(count):
spawn_enemy(enemy_type, at=path[0]) # enter at the path start
wait(spacing) # seconds between spawns (use a timer/coroutine)
# wave clears when all spawned enemies are dead or have leaked
2. タワーのターゲット選択(射程内に絞り込んでから、優先順位で選択)
# Pseudocode. "First" (furthest along path) is the standard default for stopping leaks.
def acquire_target(tower, enemies, mode="first"):
in_range = [e for e in enemies if distance(tower.pos, e.pos) <= tower.range]
if not in_range: return None
if mode == "first": return max(in_range, key=lambda e: e.progress) # furthest along path (stop leaks)
if mode == "last": return min(in_range, key=lambda e: e.progress) # least progress (guard the entrance)
if mode == "closest": return min(in_range, key=lambda e: distance(tower.pos, e.pos))
if mode == "strongest":return max(in_range, key=lambda e: e.hp) # burn down tanks first
if mode == "weakest": return min(in_range, key=lambda e: e.hp) # secure kills / last-hit bounty
return in_range[0]
3. 「このレーンを守りきれるか?」の健全性チェック(DPS と HP の比較)
# Pseudocode. One tower's damage to one enemy crossing its range.
tower_dps = tower.damage * tower.fire_rate
time_in_range = tower.range_coverage_length / enemy.speed
damage_dealt = tower_dps * time_in_range
# Lane holds if summed damage_dealt from covering towers >= enemy.hp (per enemy). See refs.
落とし穴/失敗例
- 敵の HP の増加がプレイヤーの収入/DPS の増加より遅い → 数ウェーブ後にはゲームが簡単になりすぎます。HP の曲線を収入の曲線に合わせて調整します(参考資料)。
- 突出して強いタワー/戦略がある → 選択の余地がなくなります。構成に対して明確なカウンターとなる敵の種類を追加し(連射型に対する装甲、地上専用に対する飛行)、アップグレードの効果を逓減させます。
- 迷路型 TD でゴールを完全に封鎖できる → 敵が動けなくなり、ソフトロックします。経路を断つ配置を禁止し、タワーが変更されたら経路を再計算します(参考資料)。
- 次のウェーブの予告がない → 特殊な敵が理不尽にランダムに感じられます。次に登場する敵の構成をプレビューします。
- フレームごとの移動速度が
dtでスケーリングされていない → フレームレートによって速度が変わります。操舵処理をdtでスケーリングします。 - 敵の通過でライフしか失わず、ゴールドを失わない → 敵を通すほうが有利になる場合があります。通過した敵の報奨金も失うようにします。
- 難易度が単調に上がり続ける → 疲弊させます。難度の急上昇と休息を織り交ぜます。
構成(これらのスキルから構築します)
- 経路探索: A*/フローフィールド/操舵には
game-aiを使用します。固定レーンの場合は、シンプルなウェイポイント追従を使用します。 - 敵の移動: 経路に沿った移動には
godot-2d-movement(またはエンジンに相当するもの)を使用します。ナビゲーションベースの経路探索にはunity-navmeshを使用します。 - マップ: グリッド/レーンには
godot-tilemap/unity-tilemap-2dを使用し、マップレイアウトにはlevel-designを使用します。 - データ: タワー、敵、ウェーブをアセットとして定義するには
godot-resources/unity-scriptableobjectsを使用します。 - UI: HUD のレイアウト、スケーリング、ビルドメニューには
game-ui-uxを使用します。具体的なウィジェット(ライフ、ゴールド、ウェーブのプレビュー)にはgodot-ui-controlを使用します。 - 仕上げ: 発射音、命中音、敵の通過音には
audio-designを使用します。
参考資料
- 経路の表現(ウェイポイント/A*/フローフィールド)、ターゲットモード、DPS と経済の計算、敵のスケーリング、ウェーブのペース配分については、
references/balancing.mdをお読みください。
コメント
Markdown 対応