mcpField
T
tower-defense

tower-defense

github.com/gamedev-skills開発5.4k6.6k 回インストール今日更新
リポジトリ

tower-defense について

タワーディフェンスの設計者向けの組み合わせ型スキルです。敵の経路探索、ウェーブ生成、タワーの標的選択、経済を連携させ、ダメージ・敵の体力・収入のバランスとウェーブのテンポを扱います。

主な機能

  1. 01敵の経路とウェーブ生成の設計
  2. 02タワーの射程・ダメージ・連射速度の設定
  3. 03標的優先順位の設定
  4. 04撃破報酬と強化経済の計画
  5. 05体力・ダメージ・収入のバランス調整
  6. 06ウェーブ予告とテンポの設計

活用シーン

  1. 01経路を進む敵ウェーブの設計
  2. 02タワーの標的選択と配置方針の調整
  3. 03敵の強さとプレイヤー収入の均衡
  4. 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 で次の脅威に対処できるか、そしてその対策を購入できるかが問われます。

必須システム

  1. 敵の経路 — ウェイポイント式のレーン、または迷路型 TD 用のグリッド+経路探索(参考資料)。
  2. ウェーブ生成 — ウェーブごとにスケーリングする、敵の種類ごとの時間指定・スクリプト化された出現シーケンス。
  3. タワー — 射程、連射速度、ダメージ、弾丸/ヒットスキャン、範囲攻撃、設置可能な場所の判定。
  4. ターゲット選択 — タワーごとの優先順位(先頭/最後尾/最も近い/最も強い/最も弱い)(参考資料)。
  5. 経済システム — 敵の撃破とウェーブボーナスによるゴールド、タワー/アップグレードのコスト、売却時の返金。
  6. ライフ/敵の通過 — 敵がゴールに到達するとライフが減り、0 になるとゲームオーバーです。
  7. ウェーブ/準備 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 をお読みください。

コメント