Expert blueprint for real-time strategy games including unit selection (drag box, shift-add), command systems (move, attack, gather), pathfinding (NavigationAgent2D with RVO avoidance), fog of war (SubViewport mask shader), resource economy (gather/build loop), and AI opponents (behavior trees, utility AI). Use for base-building RTS or tactical combat games. Trigger keywords: RTS, unit_selection, command_system, fog_of_war, pathfinding_RVO, resource_economy, command_queue.
npx skills add https://github.com/thedivergentai/GD-Agentic-Skills --skill godot-genre-rts
Expert blueprint for RTS games balancing strategy, micromanagement, and performance.
NavigationObstacle._process() on hundreds of individual units; strictly use a central UnitManager or _physics_process only when required.WorkerThreadPool and stagger path updates.Array[Command] and implement a "Force Move/Attack" bypass.is_equal_approx() for deterministic triggers.RefCounted or Resource objects for deterministic serialization and netcode.Dictionary or JSON states for save-game and multiplayer playback.MeshInstance3D nodes; strictly use MultiMeshInstance with INSTANCE_CUSTOM data to drive unique GPU-side state animations (walking/attacking/color).WorkerThreadPool to push buffers to RenderingServer.multimesh_set_buffer().CSGShape3D for building placement ghosts; strictly use optimized static ArrayMesh geometry.> MANDATORY: Read the script for the workflow you are implementing — do not re-inline selection/fog recipes in the agent body.
duplicate_deep() isolation for unit Resources.| Phase | Skills | Purpose |
|-------|--------|---------|
| 1. Controls | godot-input-handling, godot-camera-systems | Selection box, camera pan/zoom/edge-scroll |
| 2. Units | godot-navigation-pathfinding, godot-state-machine-advanced | Pathfinding, RVO avoidance, Idle/Move/Attack |
| 3. Systems | godot-shaders-basics, godot-tilemap-mastery, godot-economy-system | Fog masks / TileMap fog, gather-spend ledger |
| 4. AI | godot-ai-navigation, godot-autoload-architecture | Enemy commander routing + army/economy Autoloads |
| 5. Polish | godot-ui-containers, godot-particles | Strategic UI chrome, battle feedback |
| 6. Balance | godot-monte-carlo-balancer | Build-order policies vs extracted AI orders |
| Active units (order of magnitude) | Simulation / pathing | Rendering | Load |
|-----------------------------------|----------------------|-----------|------|
| < ~80 | Per-unit NavigationAgent2D/3D + RVO; set_velocity → velocity_computed | MeshInstance / Sprite nodes OK | MANDATORY rts_unit.gd, crowd_navigation_unit.gd |
| ~80–400 | Stagger path queries; RVO only while moving; static → NavigationObstacle; central commander | Still node visuals; pool path queries | + rts_path_query_pool.gd, rts_army_manager.gd, Batch 09 COM formation |
| > ~400 / thousands | Server sim: logical transforms on WorkerThreadPool; few NavigationServer map queries (COM / squads), not one agent per soldier | MultiMeshInstance + INSTANCE_CUSTOM; push buffers off main thread | rts_army_manager.gd + MultiMesh path in Batch 09; Do NOT Load per-unit _process agents |
Rule: Keep NavigationAgent+RVO while units need individual collision avoidance and micromanage feel. Switch to MultiMesh + server-side transforms when draw-call/node cost dominates — path as squads, not as thousands of agents.
MANDATORY: selection_manager_marquee_2d.gd (2D) or selection_manager_raycast_3d.gd (3D). Maintain a typed selection set (not SceneTree-only) for netcode/save. Overlay: rts_selection_overlay.gd.
MANDATORY: rts_unit.gd for Idle/Move/Attack/Hold + NavigationAgent. Deep state graphs → godot-state-machine-advanced. Always duplicate_deep() shared stat Resources (rts_unit_stat_duplicator.gd).
Avoid clumping on one click target: compute center of mass, apply relative offsets, issue per-unit destinations. For hundreds of units, use one NavigationServer path for the COM (Batch 09) plus rts_group_commander.gd / rts_path_query_pool.gd.
MANDATORY for tile/grid fog: fog_of_war_tile_mask.gd. SubViewport mask + shader overlay is valid for soft vision — implement via docs (Using Viewports) + godot-shaders-basics; Do NOT paste long fog shaders into this skill body when the tile-mask script covers the grid path.
Shift-click chains: store Array of serializable commands; pop on finish; draw queued path lines. Pair with selection scripts' issue-command hooks.
ResourceNode → work timer → DropoffPoint → bank update. Wire bank through global_economy_manager.gd / godot-economy-system.
set_velocity + move on velocity_computed; stagger group path queries._process.NavigationAgent* RVO requires set_velocity() + velocity_computed for the actual move.UnitManager / rts_army_manager.gd for 100+ units.Units, Buildings, Resources for selection filters.For large selections, one NavigationServer path from COM → target, then offset each unit (see decision tree). Keep the algorithm in project code or formation helpers; pair with rts_path_query_pool.gd so path objects are pooled.
# Sketch only — prefer pooled queries from rts_path_query_pool.gd
static func move_group_to_target(units: Array, target: Vector3, map_rid: RID) -> void:
if units.is_empty():
return
var com := Vector3.ZERO
for u in units:
com += u.global_position
com /= units.size()
var path: PackedVector3Array = NavigationServer3D.map_get_path(map_rid, com, target, true)
if path.is_empty():
return
var dest: Vector3 = path[path.size() - 1]
for u in units:
u.set_movement_target(dest + (u.global_position - com))
Pre-allocate instance_count, drive visible_instance_count, push transforms (optionally via WorkerThreadPool → RenderingServer.multimesh_set_buffer). No per-soldier MeshInstance3D. See Official Documentation → Using MultiMesh.
Prefer fog_of_war_tile_mask.gd. SubViewport vision masks: docs + godot-shaders-basics (do not duplicate long shader bodies here).
> MANDATORY for depth beyond decision trees and script catalog: rts-mass-army-deep.md. Do NOT Load on first-pass wiring — use bundled scripts/ first.
> Progressive disclosure: open Official Documentation links only when researching a specific API;
> load Related Skills when routing work to a peer domain — do not preload the whole lattice.
set_velocity / velocity_computed RVO loop that stops crowd jitter and stuck IDLE timeouts.NavigationPathQueryParameters* patterns for mass move orders without heap churn.MeshInstance per soldier.WorkerThreadPool contracts for army AI batches off the main thread.duplicate(true) so health/armor never mutate a shared template.A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take thedivergentai/godot-genre-rts from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.