Corner Correction
Clip a platform's corner by a few pixels and the game quietly nudges you past it — the bonk that never happens.
Examples
Captured from this page's own interactive demo below.
Overview
Jump up next to a ledge and catch its corner by three pixels: honest collision says you bonk your head, lose all upward velocity, and fall. The player, meanwhile, is certain they were clear. Corner correction sides with the player — if the overlap is small enough, the game slides the character sideways just enough to pop past the corner and the jump continues as if nothing happened.
The implementation is a second chance for a failed move: when an upward collision is detected, test a handful of horizontally offset positions (a few pixels left and right, up to the correction budget). If one of them is clear, teleport there and keep the velocity. The nudge happens in one frame and is entirely invisible — players don't see it, they just stop dying to geometry they'd already beaten.
The budget is the design decision: Celeste corrects up to about 4 pixels on upward motion, and applies the same forgiveness sideways when dashing past corners. Too little and heads still clang; too much and the character visibly teleports around blocks the player aimed at deliberately. Start around an eighth of the character's width and tune with real playtest footage of near-miss jumps.
Interactive Demo
Use Cases
Best Practices
Do
- ✓Test offset positions BEFORE zeroing velocity — correction must run in the same frame as the collision.
- ✓Keep the budget proportional to the character (an eighth of their width is a good start) and tune with playtest footage.
- ✓Apply the same idea to all fast movement — upward jumps, dashes, even shots grazing cover.
Don't
- ✕Don't correct when the player is standing still or moving slowly — the nudge is cover for momentum, not a magnet.
- ✕Don't slide the character INTO hazards; validate the corrected spot against spikes and enemies, not just solid tiles.
- ✕Don't stack correction with a huge collision box 'for safety' — shrink the box first, correct the leftovers.
Common Mistakes
- ⚠Correcting after velocity is already zeroed, so the character pops sideways but the jump still dies.
- ⚠A budget tuned on the biggest character and reused on the smallest, letting them warp through gaps half their size.
- ⚠Only correcting to the right because the offset loop was never mirrored — a bug players report as 'left jumps feel worse'.
Implementation
Paste this into your AI assistant (Cursor, Copilot, Claude) to add the effect to your project.
Add the "Corner Correction" game-feel effect to my project: Clip a platform's corner by a few pixels and the game quietly nudges you past it — the bonk that never happens.
How it works: Jump up next to a ledge and catch its corner by three pixels: honest collision says you bonk your head, lose all upward velocity, and fall. The player, meanwhile, is certain they were clear. Corner correction sides with the player — if the overlap is small enough, the game slides the character sideways just enough to pop past the corner and the jump continues as if nothing happened.
Guidelines:
- Test offset positions BEFORE zeroing velocity — correction must run in the same frame as the collision.
- Keep the budget proportional to the character (an eighth of their width is a good start) and tune with playtest footage.
- Apply the same idea to all fast movement — upward jumps, dashes, even shots grazing cover.
Avoid:
- Don't correct when the player is standing still or moving slowly — the nudge is cover for momentum, not a magnet.
- Don't slide the character INTO hazards; validate the corrected spot against spikes and enemies, not just solid tiles.
- Don't stack correction with a huge collision box 'for safety' — shrink the box first, correct the leftovers.
Implement the effect in whatever engine/stack the project already uses and follow its existing code style. Wire it up where it makes sense.References
Related Effects
Coyote Time
Letting the player still jump for a few frames after walking off a ledge.
Input Buffering
Remembering a slightly-early input and executing it the moment it becomes possible.
Jump Feel
Heavier gravity on the way down and a soft hang at the apex — the asymmetric arc every good jump hides.
Comments
…