fps-controller

Implements a first-person character controller in GDScript with coyote time, jump buffering, and air control.

66|4|Updated Feb 26, 2026
One-click install
npx skills add https://github.com/SummerEngine/summer --skill fps-controller-summerengine
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: fps-controller
Source: https://github.com/SummerEngine/summer/tree/main/library/skills/fps-controller
Command: npx skills add https://github.com/SummerEngine/summer --skill fps-controller-summerengine

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Building a first-person controller that feels right requires handling subtle movement details — coyote time, jump buffering, asymmetric gravity, and external forces like knockback — that naive implementations get wrong, producing stiff or unfair-feeling movement. ## Core Features & Use Cases - Complete movement model: WASD movement, mouse look with yaw/pitch split, sprint, jump, separate ground/air acceleration and friction, and asymmetric gravity. - Game-feel timers: Coyote time and jump buffering windows so jumps near ledges and just-before-landing presses register correctly. - External velocity accumulator: A public add_external_velocity API for knockback, explosions, jump pads, and conveyor belts that decays smoothly without fighting player input. - Use Case: Scaffold a playable FPS prototype in Summer Engine by adding a CharacterBody3D player with capsule collision, head-mounted camera, InputMap bindings, and the controller script via MCP tools. ## Quick Start Ask your agent to add a first-person player controller with WASD movement, mouse look, and jumping to the current scene using the fps-controller skill.

Frequently Asked Questions about fps-controller

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add a first-person controller to a Godot scene?▼

Add a CharacterBody3D with a CapsuleShape3D collision, a Head Node3D holding the Camera3D, bind WASD/jump/sprint InputMap actions, and attach a GDScript controller handling movement in _physics_process. This skill walks through each step via MCP tools.

What is coyote time and jump buffering in platformers and FPS games?▼

Coyote time is a short grace window (~0.1s) after walking off a ledge where jumping still works; jump buffering queues a jump pressed just before landing. Both fix the 'unfair death' and 'eaten input' complaints players report.

How much air control should an FPS controller have?▼

The shipping FPS standard is roughly 25-30% of ground acceleration. Zero air control feels like ice, while full air control makes momentum meaningless. Tune the air_accel export to adjust without changing code.

Why does knockback keep accumulating on my character controller?▼

External velocity compounds when the previous frame's contribution is not subtracted before applying new physics. Subtract the last applied external velocity at the start of _physics_process, then apply and decay the new impulse.

Does this controller support multiplayer networking?▼

Yes, the skeleton supports server-authoritative patterns by gating physics per peer and syncing position and velocity. The external-velocity accumulator lets the host RPC knockback impulses to clients without fighting local input.

Why does my FPS camera tilt or roll when looking around?▼

Camera tilt happens when pitch is applied to the body instead of a separate head node. Apply yaw only on the Player root and pitch only on the Head node, clamped to roughly ±80 degrees, and never combine rotations on one node.