跳到主要内容
知仓学习社ZHICANG

godot-genre-tower-defense

Expert blueprint for tower defense games (Bloons TD, Kingdom Rush, Fieldrunners) covering wave management, tower targeting logic, path algorithms, e…

不碰外部(只输出文字)无严重或高危命中thedivergentai/GD-Agentic-Skills

它会碰到什么

扫了多少7 个文本文件,25 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Core Loop

  1. Prepare: Build/upgrade towers with available currency
  2. Wave: Enemies spawn and traverse path toward goal
  3. Defend: Towers auto-target and damage enemies
  4. Reward: Kills grant currency
  5. Escalate: Waves increase in difficulty/complexity

NEVER Do (Expert Anti-Patterns)

Design & Strategy

  • NEVER make all towers have the same niche; strictly ensure distinct specialties: Aura Slow, Armor Piercing, Anti-Air, Burst Sniper, and Splash Damage.
  • NEVER allow a "Death Spiral" with no exit; strictly provide small comeback bonuses or interest on saved gold to prevent early inevitable failure.
  • NEVER make early waves feel like busywork; strictly provide an "Early Call" bonus to skip wait times and accelerate engagement.
  • NEVER trust client-side economy updates; strictly require the authoritative server to validate currency addition and tower purchases in co-op.

Pathing & Placement

  • NEVER allow the player to "Seal" the exit in mazing games; strictly validate path existence with NavigationServer2D.map_get_path() before finalizing tower placement.
  • NEVER use synchronous bake_navigation_polygon() for mazing; strictly offload to a worker thread to prevent 100ms+ frame hitches during placement.
  • NEVER use global coordinates for grid logic; strictly convert to Vector2i/Vector3i to ensure pixel-perfect tower alignment.

Performance & Systems

  • NEVER call get_overlapping_bodies() every frame; strictly use signals (body_entered/body_exited) to maintain a local target cache.
  • NEVER use _process() for projectile movement if count > 500; strictly use the PhysicsServer2D/3D directly for high-performance bullet-hell tiers.
  • NEVER spawn hundreds of projectiles as full Nodes; strictly use Object Pooling to reuse resources and avoid garbage collection stutters.
  • NEVER use standard Strings for priorities; strictly use StringName (&"first", &"strongest") for O(1) hash comparisons in targeting loops.
  • NEVER ignore the progress property on PathFollow nodes; strictly use it as the O(1) way to identify the target closest to exit.
  • NEVER process tower search logic every frame; strictly throttle ACQUIRE searches (e.g., every 5-10 frames) to save significant CPU cycles.
  • NEVER scale Tower CollisionShape non-uniformly; strictly adjust the radius property of the Shape resource to preserve collision math.
  • NEVER delete enemies immediately on death; strictly use set_deferred("disabled", true) and wait one frame to prevent physics server crashes.
  • NEVER hardcode waves in huge switch statements; strictly use Custom Resources (.tres) for clean balancing and sequence editing.

🛠 Expert Components (scripts/)

Original Expert Patterns

  • [wave_manager.gd](scripts/wave_manager.gd) - Professional wave orchestrator with Resource-based enemy composition and cleanup.
  • [tower.gd](scripts/tower.gd) - Base turret class with FSM state management and firing logic.
  • [tower_targeting_system.gd](scripts/tower_targeting_system.gd) - Autonomous priority logic (First/Last/Strongest/Weakest) for efficient targeting.

Modular Components

  • [tower_defense_patterns.gd](scripts/tower_defense_patterns.gd) - Collection of patterns for furthest-target logic and PhysicsServer projectile optimization.

Decision Trees (MANDATORY script reads)

Path style

| Style | Approach | Scripts / APIs |

|-------|----------|----------------|

| Fixed lanes | Path2D / PathFollow2D progress | [wave_manager.gd](scripts/wave_manager.gd), [wave_resource_spawner.gd](scripts/wave_resource_spawner.gd) |

| Mazing | Seal-check before place | NavigationServer2D.map_get_path / AStarGrid2D (NEVER) |

| Organic curves | Bezier PathFollow progress | Prefer PathFollow over per-frame seek |

Targeting priority

| Priority | Sort key | MANDATORY |

|----------|----------|---------------|

| FIRST | Highest progress (closest to exit) | [tower_targeting_system.gd](scripts/tower_targeting_system.gd) |

| LAST | Lowest progress | same — LAST implemented |

| STRONGEST / WEAKEST | health desc / asc | same — WEAKEST implemented |

Use signal-cached range Area enter/exit + frame-sliced acquire (acquire_interval_frames). Never get_overlapping_bodies() every frame.

Economy

| Concern | Rule | Script |

|---------|------|--------|

| Wave composition | Resource .tres waves | [wave_manager.gd](scripts/wave_manager.gd) |

| Co-op purchases | Server validates gold | [tower_defense_patterns.gd](scripts/tower_defense_patterns.gd) |

| Comeback | Interest / early-call bonus | Design-level — not tower FSM |

PhysicsServer Projectile Golden Path

When count > ~500:

  1. MANDATORY [tower_defense_patterns.gd](scripts/tower_defense_patterns.gd) spawn_fast_bullet (PhysicsServer3D kinematic RIDs).
  2. Pool RIDs; AoE via intersect_shape; defer collision disable on death.
  3. Modest counts: [homing_projectile_3d.gd](scripts/homing_projectile_3d.gd) / pooled Nodes OK.

Tower FSM

MANDATORY: [tower.gd](scripts/tower.gd) for idle → acquire → windup → fire. Targeting stays in [tower_targeting_system.gd](scripts/tower_targeting_system.gd).

Deep recipes (on demand)

| Topic | Reference / script |

|-------|-------------------|

| Waves / towers / paths | [architecture-overview.md](references/architecture-overview.md) |

| Projectile lead & targeting | [key-mechanics.md](references/key-mechanics.md) |

| Maze validation & burst search | [elite-technical-patterns.md](references/elite-technical-patterns.md) + [grid_path_validator.gd](scripts/grid_path_validator.gd) |

Reference

> Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.

Official Documentation

  • Navigation introduction (2D) — NavigationRegion2D baking and map queries for mazing TD path validity.
  • Using NavigationAgents — agent path following and avoidance when towers reshape walkable space.
  • NavigationServer2Dmap_get_path seal checks before committing tower placement.
  • AStarGrid2D — integer-grid path probes that simulate build cells without a full nav bake.
  • PathFollow2Dprogress / progress_ratio for fixed-lane enemies and First/Last targeting.
  • PathFollow3D — 3D track followers used by wave spawners and homing aim references.
  • Using Area2D — signal-driven range caches (body_entered / body_exited) instead of per-frame overlap polls.
  • Physics introduction — layers/masks so tower ranges hit enemies, not other towers or walls.
  • Using servers — PhysicsServer bodies for high-count projectiles without Node overhead.
  • Resources — WaveDefinition .tres data instead of hard-coded spawn switches.
  • Using multiple threads — WorkerThreadPool / Thread patterns for async navigation rebakes during placement.
  • Using TileMaps — TileMapLayer grids for build cells, paths, and placement snapping.

Related Skills

Prerequisites

Complements

Downstream / consumers

  • godot-genre-rts — base defense and unit-placement loops that reuse path validation and economy pressure.
  • godot-multiplayer-networking — authoritative purchase validation and unreliable minion sync for co-op TD.

Master

  • godot-master — library router and mirrored module entry for cross-skill discovery.

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。