| 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. | Source/PICO-8/Classic.cs L233–243Source/PICO-8/Classic.cs L297–304 | T3 |
| 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. | Source/PICO-8/Emulator.cs L268–273 | T2 |
| Celeste Classic sets its jump buffer, jbuffer, to 4 on a new press and otherwise counts it down by 1 each update. | Source/PICO-8/Classic.cs L223–228Source/PICO-8/Classic.cs L297 | T3 |
A normal jump sets Madeline's vertical speed to JumpSpeed, −105 px/s. | Source/Player/Player.cs L49 | T3 |
Jump() sets vertical speed to JumpSpeed plus any platform lift boost, saves it as varJumpSpeed, starts varJumpTimer at VarJumpTime, and zeroes the grace timer. | Source/Player/Player.cs L1660–1673 | T3 |
Celeste's gravity is 900 px/s²; each airborne update moves vertical speed toward the fall limit by Gravity * mult * Engine.DeltaTime. | Source/Player/Player.cs L24Source/Player/Player.cs L2957 | T3 |
HalfGravThreshold is 40 px/s, the vertical speed below which (in either direction) holding jump halves gravity. | Source/Player/Player.cs L25 | T3 |
Gravity halves while |Speed.Y| is under HalfGravThreshold and jump is held (or auto-jump is on), so a held jump hangs at the top. | Source/Player/Player.cs L2952 | T3 |
VarJumpTime, how long holding jump can keep the take-off speed, is 0.2 s. | Source/Player/Player.cs L51 | T3 |
While varJumpTimer runs, holding jump keeps Madeline rising no slower than varJumpSpeed, canceling gravity; releasing zeroes the timer and cuts no speed. | Source/Player/Player.cs L2960–2966 | T3 |
MaxFall, the normal limit on falling speed, is 160 px/s; NormalBegin starts maxFall there and gravity approaches it. | Source/Player/Player.cs L23Source/Player/Player.cs L2760–2763 | T3 |
Holding down while falling at MaxFall or faster raises the limit toward FastMaxFall (240 px/s) at FastMaxAccel (300 px/s²); otherwise it eases back. | Source/Player/Player.cs L27–28Source/Player/Player.cs L2911–2924 | T3 |
JumpGraceTime, Celeste's coyote time, is 0.1 s. | Source/Player/Player.cs L48 | T3 |
Grounded updates refill jumpGraceTimer; airborne ones subtract Engine.DeltaTime before NormalUpdate, which jumps on a press while it is above zero. | Source/Player/Player.cs L713–720Source/Player/Player.cs L2970–2975 | T3 |
In each update, Player.Update ticks both jump timers, the state machine runs NormalUpdate (gravity, hold, and new jump), and then MoveV applies Speed.Y * Engine.DeltaTime. | Source/Player/Player.cs L742–744Source/Player/Player.cs L908Source/Player/Player.cs L934–935Source/Player/Player.cs L322–323 | T3 |
Celeste's actors sit on whole pixels; MoveV adds the float distance to a remainder, moves by its rounded value, and keeps the fraction. | Source/Player/Player.cs L935 | T2 |
| Celeste's developers describe the game as locked to 60 updates per second, so the bundled PICO-8 port skips every second frame. | Source/PICO-8/Emulator.cs L268–270 | T2 |
At normal speed, Celeste's Engine.DeltaTime is most likely (float)0.0166667 s, the XNA and FNA default 166,667-tick step, not an exact 1/60 s. | Source/Player/Readme.md L28 | T1 |
The 0.1 s grace and 0.2 s variable-jump timers end on float rounding; a (float)0.0166667 step gives 5 and 11 updates, and (float)(1/60) gives 6 and 12. | Source/Player/Player.cs L713–720Source/Player/Player.cs L742–744 | T4 |
Simulating the jump code (flat ground, no lift boost, (float)0.0166667 step) gives apexes of 7 px tapped and 27 px held, airtimes 15 and 39 updates; an exact 1/60 s step gives 29 px held in 40. | Source/Player/Player.cs L2952–2966Source/Player/Player.cs L1660–1673 | T4 |
| The developers chose one large file of long methods for the player's behavior, so its tightly ordered logic reads in sequence. | Source/Player/Readme.md L16 | T2 |