$npx -y skills add thedivergentai/GD-Agentic-Skills --skill godot-genre-platformerExpert blueprint for platformer games including precision movement (coyote time, jump buffering, variable jump height), game feel polish (squash/stretch, particle trails, camera shake), level design principles (difficulty curves, checkpoint placement), collectible systems (progre
| 1 | # Genre: Platformer |
| 2 | |
| 3 | Expert blueprint for platformers emphasizing movement feel, level design, and player satisfaction. |
| 4 | |
| 5 | ## NEVER Do (Expert Anti-Patterns) |
| 6 | |
| 7 | ### Physics & Movement Feel |
| 8 | - NEVER multiply velocity by `delta` before `move_and_slide()`; the method internalizes the timestep. |
| 9 | - NEVER skip **Coyote Time** (approx 0.1s); without this grace period, jumps will feel unresponsive when walking off ledges. |
| 10 | - NEVER ignore **Jump Buffering** (approx 0.15s); players expect to jump the instant they touch the ground if they pressed the button early. |
| 11 | - NEVER use a fixed jump height; strictly implement **Variable Jump Height** (cut velocity on release) for player expression. |
| 12 | - NEVER forget to scale gravity by `delta` before adding to velocity; gravity is an acceleration and must be frame-rate independent. |
| 13 | - NEVER rely on discrete collision for high-speed movement; strictly use `CCD_MODE_CAST_RAY` to prevent tunneling through geometry. |
| 14 | - NEVER use `move_and_collide()` for standard traversal; it lacks the slope/stair handling of `move_and_slide()`. |
| 15 | - NEVER check coyote or buffer timers using exact equality (== 0.0); strictly use `is_equal_approx()` or `>= 0.0`. |
| 16 | |
| 17 | ### Polish & Level Design |
| 18 | - NEVER use linear camera snapping; strictly use **Camera Smoothing** or `lerp()` to prevent motion sickness. |
| 19 | - NEVER skip **Squash and Stretch** on jump/land; movement feels weightless without these subtle visual "juice" cues. |
| 20 | - NEVER create **Blind Jumps**; strictly use camera look-ahead or zoom triggers to reveal landing zones. |
| 21 | - NEVER use individual `Sprite2D` nodes for level geometry; strictly use **TileMapLayer** for optimized collision and rendering. |
| 22 | - NEVER use complex/concave `CollisionShape2D` for the player; strictly favor primitive shapes (Capsule/Rectangle) for stability. |
| 23 | |
| 24 | ### Architecture & Performance |
| 25 | - NEVER use `CharacterBody2D` for simple moving platforms; strictly use **AnimatableBody2D** and enable `sync_to_physics`. |
| 26 | - NEVER ignore `platform_on_leave` for descending platforms; use `PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITY` to preserve jump impulse. |
| 27 | - NEVER disable `recovery_as_collision` on the player character; it is required for correct floor snapping reports. |
| 28 | - NEVER use the `!` (NOT) operator in AnimationTree expressions; strictly use `is_walking == false`. |
| 29 | - NEVER use standard Strings for high-frequency state checks; strictly use `StringName` (e.g., `&"jumping"`). |
| 30 | - NEVER load heavy level chunks synchronously; strictly use `ResourceLoader.load_threaded_request()` to prevent frame stutters. |
| 31 | |
| 32 | --- |
| 33 | |
| 34 | ## Godot 4.7: Platformer |
| 35 | |
| 36 | - One-way collision **direction** is shape-relative — tune `CollisionShape2D` direction for angled platforms. |
| 37 | |
| 38 | ## 🛠 Expert Components (scripts/) |
| 39 | |
| 40 | ### Original Expert Patterns |
| 41 | - [advanced_platformer_controller.gd](scripts/advanced_platformer_controller.gd) - Professional-grade `CharacterBody2D` controller with Coyote Time, Jump Buffering, and variable height. |
| 42 | |
| 43 | ### Modular Components |
| 44 | - [coyote_timer.gd](scripts/coyote_timer.gd) - Grace period logic for jumps after leaving a floor's edge. |
| 45 | - [jump_buffer.gd](scripts/jump_buffer.gd) - Input queuing system for ultra-responsive landing jumps. |
| 46 | - [player_ground_controller.gd](scripts/player_ground_controller.gd) - Advanced movement with floor constant speed and slope-aware snapping. |
| 47 | - [variable_jump.gd](scripts/variable_jump.gd) - Scalable jump height using velocity cutoff on button release. |
| 48 | - [wall_slide_sensor.gd](scripts/wall_slide_sensor.gd) - Nodeless wall detection using high-performance physics raycasts. |
| 49 | - [ledge_grab_sensor.gd](scripts/ledge_grab_sensor.gd) - PhysicsShapeQuery-based ledge detection without Area2D nodes. |
| 50 | - [custom_collision_slider.gd](scripts/custom_collision_slider.gd) - Manual sliding response for high-speed inter-frame precision. |
| 51 | - [synchronized_platform.gd](scripts/synchronized_platform.gd) - `AnimatableBody2D` config for physics-synced movement. |
| 52 | - [fast_projectile_ccd.gd](scripts/fast_projectile_ccd.gd) - Continuous Collision Detection setup to prevent tunneling. |
| 53 | - [platformer_animation_sync.gd](scripts/platformer_animation_sync.gd) - Boolean-safe sync between physics states and AnimationTree. |
| 54 | - [platformer_camera.gd](scripts/platformer_camera.gd) - Camera smoothing and look-ahead logic for platforming focus. |
| 55 | |
| 56 | --- |
| 57 | |
| 58 | ## Core Loop |
| 59 | |
| 60 | `Jump → Navigate Obstacles → Reach Goal → Next Level` |
| 61 | |
| 62 | ## Skill Chain |
| 63 | |
| 64 | `godot-project-foundations`, `godot-characterbody-2d`, `godot-input-handlin |