data/claims/celeste-classic.yamlCeleste Classic (C# port in NoelFB/Celeste, Source/PICO-8/Classic.cs)
Game: Celeste classic.
Celeste Classic's grace counter resets to 6 on the ground and drops by 1 before each airborne jump check, so jumps work for 5 updates after leaving a ledge. celeste-classic/grace-frames
About: Celeste classic Coyote time
Value: 6 updates
T3 code-verifiedCeleste: released class files (NoelFB/Celeste) ·Source/PICO-8/Classic.cs#L233-L243if (on_ground)
{
grace = 6;
…
else if (grace > 0)
grace--;Celeste: released class files (NoelFB/Celeste) · Source/PICO-8/Classic.cs#L297-L304if (jbuffer > 0)
{
if (grace > 0)
{
// normal jump
…
grace = 0;Checked by claude, 2026-10-20 — read player.update in Classic.cs at the pinned commitThe port's readme says it "tries to be as close to 1-1 with the original LUA code as it can"; the atlas hasn't read the original PICO-8 cart for this claim.
Cited by: Coyote time
Inside Celeste, the Celeste Classic port skips every second frame to run at 30 Hz, so its 5 grace updates last about 0.17 s. celeste-classic/update-rate
About: Celeste classic Coyote time
Value: 30 Hz
T2 primary statementCeleste: released class files (NoelFB/Celeste) ·Source/PICO-8/Emulator.cs#L268-L273// this is a pretty dumb hack but because Celeste is locked to 60fps
// and PICO-8 runs at 30 ... we just skip every 2nd frame
…
skipFrame = !skipFrame;
if (skipFrame)
return;Checked by claude, 2026-10-20 — read Emulator.Update at the pinned commitCited by: Coyote time
Celeste Classic sets its jump buffer, jbuffer, to 4 on a new press and otherwise counts it down by 1 each update. celeste-classic/jump-buffer
About: Celeste classic Jump buffering
Value: 4 updates
T3 code-verifiedCeleste: released class files (NoelFB/Celeste) ·Source/PICO-8/Classic.cs#L223-L228var jump = E.btn(G.k_jump) && !p_jump;
p_jump = E.btn(G.k_jump);
if (jump)
jbuffer = 4;
else if (jbuffer > 0)
jbuffer--;Celeste: released class files (NoelFB/Celeste) · Source/PICO-8/Classic.cs#L297if (jbuffer > 0)Checked by claude, 2026-10-20 — read player.update (L223-L228 and the jump check at L297) in Classic.cs at the pinned commitThe jump check accepts any jbuffer above 0, so a press counts on its own update and the next 3. A jump sets jbuffer back to 0.
Cited by: Coyote time