2D platformer with tuned physics, juice, and progressive level design
Goes beyond 'make a platformer' — specifies the exact physics values that make jumps feel great (coyote time, input buffering, variable gravity), the juice layer (screen shake, squash-stretch, particles), and the level design methodology that teaches mechanics through play.
Build a 2D platformer in [Godot / Unity / Phaser] that feels as tight as Celeste or Hollow Knight. PHASE 1 — CHARACTER CONTROLLER (get this perfect before anything else): Physics values to implement as exposed/tunable constants (not hardcoded): - Gravity: use a higher gravity multiplier (2–3× default engine gravity). Platformers need fast, snappy falls — default physics feels floaty. - Jump: variable height — while jump is held, apply upward force; on release, immediately increase gravity multiplier to 2× for a fast fall. This gives the player precise control. - Jump apex hang time: at the peak of the jump (when vertical velocity is near zero), reduce gravity by 40% for ~0.1s. This creates the satisfying "float" at the top that makes precision jumping feel forgiving. - Coyote time: 6–8 frames (100–130ms) after walking off a ledge, the player can still jump. Store a coyote timer that starts when grounded becomes false. - Input buffering: if the player presses jump within 6 frames of landing, execute the jump on landing. Store a jump buffer timer that starts on jump press. - Acceleration: don\'t set velocity directly — use acceleration (ground: ~50, air: ~30) and deceleration (ground: ~60, air: ~20) so movement has subtle momentum without feeling slippery. - Max fall speed: cap it (e.g. 400 units/s) so long falls feel controlled. - Wall slide (optional): reduce fall speed to 30% when pressing into a wall. Wall jump launches at a 45° angle away from the wall. These values should all be adjustable from one config/resource file so I can tune during playtesting. PHASE 2 — THE JUICE LAYER (what makes it FEEL good): - Squash and stretch: compress the sprite 15% on landing, stretch 10% on jump. Tween back to normal over 0.1s. - Screen shake: 2–4px for 0.1s on landing from a height, on enemy hit, on taking damage. Use decreasing intensity (not random jitter). - Particle trails: small dust particles on run (every 4th frame), a puff on jump, a burst on land. - Landing dust: 3–5 particles spread horizontally on ground impact. - Hit pause: freeze the game for 2–3 frames on dealing/taking damage. This tiny pause makes impacts feel powerful. - Camera: smooth follow with slight lookahead in the movement direction. Don\'t center the player — offset the camera so more of the upcoming level is visible. PHASE 3 — LEVEL DESIGN (build 3–5 levels using this methodology): Each new mechanic follows this 4-step teaching pattern: 1. INTRODUCE: show the mechanic in a safe, zero-risk environment (e.g., spikes over a pit the player must jump — but the pit is shallow and non-lethal the first time). 2. TEST: a challenge that requires the mechanic but has a clear solution. 3. COMBINE: pair the new mechanic with a previously learned one (e.g., wall jump + moving platform). 4. CHALLENGE: a difficult version that requires mastery. Level 1: just movement + jump + collectibles (coins). No enemies. Teaches the controls. Level 2: introduce hazards (spikes, pits). Tests jump precision. Level 3: introduce enemies with simple patrol AI (walk left-right, turn at ledges). Tests combat timing. Level 4: moving platforms + timed hazards. Combines jump precision + timing. Level 5: vertical level with wall mechanics. Tests everything. PHASE 4 — SYSTEMS: - Health: 3 hits, with 1s invincibility frames (sprite flashes). No instant death (except bottomless pits). - Checkpoints: flag system, respawn at last checkpoint with current collectibles retained. - HUD: health (hearts), collectible count, minimal and non-intrusive. - Menus: title screen, pause, death screen with quick restart. - Tile-based levels: use tilemaps for easy level creation. Deliver the project structure, implement Phase 1 first, and after each phase give me a playtest checklist of what to feel for. Tip: the difference between a "good" platformer and a great one is 100% in the invisible systems — coyote time, input buffering, and variable jump height. Players can\'t name these features, but they instantly feel when they\'re missing. Spend 80% of your tuning time on Phase 1 before moving on.
- Source
- promptfork seed
- License
- CC-BY-4.0
- Published
- 6/22/2026