On this page
  1. Related
  2. Mechanics
  3. References
  4. Sources

Maddy Thorson and Noel Berry’s precision platformer for the PICO-8 fantasy console was released in 2015 and later ported to C# and included with the 2018 Celeste. The atlas reads the C# port1. Like the main game, Celeste Classic uses a grace window after leaving a ledge1, but its grace counter counts 6 (5 airborne updates)1 updates. Inside Celeste, the port runs at 30 Hz2 Hz, half the main game’s rate, so its 5 airborne grace updates last about 0.17 s1,2. The game also implements jump-buffering with a buffer that stores presses for 4 updates3 updates3.

Mechanics

MechanicKindHow
Coyote timeGrace timera 6-update grace counter that refills on the ground
Jump bufferingUpdate countera 4-update counter stores presses and counts down until a jump starts
Every claim about this game, by concept (3)

References

  1. ^ abcdCeleste 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.CodeNoelFB/Celeste
    How we know
    233                if (on_ground)
    ⋮
    235                    grace = 6;
    ⋮
    242                else if (grace > 0)
    243                    grace--;
    
    Source/PICO-8/Classic.cs lines 233–243 at 1b0ce45 · upstream ↗
    297                    if (jbuffer > 0)
    ⋮
    299                        if (grace > 0)
    ⋮
    301                            // normal jump
    ⋮
    304                            grace = 0;
    
    Source/PICO-8/Classic.cs lines 297–304 at 1b0ce45 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-20.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

  2. ^ abInside Celeste, the Celeste Classic port skips every second frame to run at 30 Hz.CodeNoelFB/Celesterevised
    How we know
    268            // this is a pretty dumb hack but because Celeste is locked to 60fps
    269            // and PICO-8 runs at 30 ... we just skip every 2nd frame
    ⋮
    271            skipFrame = !skipFrame;
    272            if (skipFrame)
    273                return;
    
    Source/PICO-8/Emulator.cs lines 268–273 at 1b0ce45 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-27.

    Revised after a check by a second AI model, 2026-10-27: Read in code, so T3; the 0.17 s belongs to grace-frames.

    In the claim ledger

  3. ^ abCeleste Classic stores a fresh jump press in jbuffer for 4 updates, counts it down by 1 on later updates, and clears it when a normal or wall jump starts.CodeNoelFB/Celeste
    How we know
    223                var jump = E.btn(G.k_jump) && !p_jump;
    224                p_jump = E.btn(G.k_jump);
    225                if (jump)
    226                    jbuffer = 4;
    227                else if (jbuffer > 0)
    228                    jbuffer--;
    
    Source/PICO-8/Classic.cs lines 223–228 at 1b0ce45 · upstream ↗
    297                    if (jbuffer > 0)
    ⋮
    299                        if (grace > 0)
    ⋮
    301                            // normal jump
    ⋮
    303                            jbuffer = 0;
    ⋮
    308                        else
    ⋮
    310                            // wall jump
    ⋮
    312                            if (wall_dir != 0)
    ⋮
    315                                jbuffer = 0;
    
    Source/PICO-8/Classic.cs lines 297–315 at 1b0ce45 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

    Checked by a second AI model, 2026-10-27.

    In the claim ledger

Sources

Code