TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #6555: EuniverseCat, fishmcmuffins, keylie, dahlukeh & Lanvilla's Linux Celeste "100%" in 1:27:36.12

Console: Linux
Game name: Celeste
Game version: 1.3.1.2
ROM filename: Celeste.bin.x86_64
Branch: 100%
Emulator: libTAS 1.3.5
Movie length: 1:27:36.12
FrameCount: 315367
Re-record count: (unknown)
Author's real name:
Author's nickname: EuniverseCat, fishmcmuffins, keylie, dahlukeh & Lanvilla
Submitter: euni
Submitted at: 2019-12-01 18:01:19
Text last edited at: 2019-12-15 12:16:55
Text last edited by: fsvgm777
Download: Download (103822 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
ALERTS POSSIBLY COMPROMISING MOVIE INTEGRITY:

Version info:

libTAS version: 1.3.5

Annotation info:

Game: Celeste, v1.3.1.2, drm-free version (available at https://mattmakesgames.itch.io/celeste), 64-bit binary.

OS: Debian Buster amd64 with Linux kernel 4.19.0-5-amd64, libTAS v1.3.5. Game executable is `/path/to/game/Celeste.bin.x86_64`.

libTAS must be configurated with `Runtime > Recycle threads` unchecked and `Runtime > Wait timeout > No waits` checked. In `File > Executable options`, library path must be set to `/path/to/game/lib64`.

Like the previous Celeste movie, there is an issue in this game regarding sync and loading times. The movie must be paused for a short amount of time at specific frames to let the game load stages. This is especially true for the game startup which features a lot of thread spawning. To make the movie to sync, the beginning should be run with frame advance until the main menu appear (from frame 1 to 94). On the rest of the game, almost all loadings happen concurrently with thread spawning or terminating. Thanks to that, a good way to ease the playback of the movie is to add a sleep call in the game execution: in "src/library/frame.cpp" at line 262, add "NATIVECALL(usleep(2000000;" after "saveBacktrack = false;", which is executed when the thread set has changed. This does not cover several level loadings, which need to be paused manually at frame: 64001 (5A), 93204 and 98508 (6A), 115295 to 115323, 115358 and 147910 (7A), 156315 (credits), 219700 (7B) and 265365 (9).

It should be noted that because this movie aims for fastest in-game time, and all loadings occur outside levels (where the in-game time is paused), it is not critical to simulate accurate loading times.

For encoding purpose, there are a few settings that can be changed in the game menu before playing back the movie, which does not affect sync. The screen size can be changed. The speedrun clock can be set to "File". Also, we recommend to disable the screen shake and turn on photosensitive mode, it makes the video more pleasant to watch.

Author's comments and explanations:
The Celeste 100% TAS has been an active work in progress for over a year now, and, since the first synced version last December, has been improved by nearly 4 minutes, resulting in an in-game time of 1:16:51.335. No jellyfish were harmed in the making of this TAS.[1]


(Link to video)

A recording of this TAS with some commentary can be found here. Note that a little over a second of improvements have been made between the above encode and this submission.

Game objectives

  • Emulator used: libTAS v1.3.5
  • Aims for fastest in-game time
  • Contains speed/entertainment tradeoffs

Tools used

While this movie plays back in libTAS, the entirely of this TAS, menuing included, was done on Windows. We used CelesteTAS, custom TAS tools created by DevilSquirrel, along with Everest, a mod loader created by 0x0ade, which allowed us to avoid any desyncs caused by threading. The only in-level change between the two was an easily fixed desync in 6A caused by differences in how CelesteTAS and libTAS handle analog input. If you’d like to play back this TAS on your own machine we highly recommend CelesteTAS over libTAS. Instructions can be found here.

Authors

While the majority of this TAS was done by the authors in the title, there are a number of TASers who made smaller contributions who we’d like to thank:
  • Higashi Dong, DevilSquirrel, and KT for their earlier TASes, which we used as a starting point for the current TAS
  • buhbai, RichConnerGMN, Spirialis, Zkad, DemoJameson, Gliperal, and Asra, who have all directly contributed to this TAS
Special thanks to (among many others) buhbai, Marlin, Spirialis, Zkad, and AuroraDash for finding strats.

Goal

We used the same definition of 100% used in unassisted runs, which is admittedly somewhat arbitrary, but collects everything that would not require repeating levels. 100% completion requires:
  • All 175 red berries
  • All 24 crystal hearts
  • Completing all levels
  • The Moon Berry in Farewell (even though this is counted as 176/175 berries by the game)
It does not require:
  • Full clearing each level (While this is mainly to make the category less punishing non-TAS, not requiring this allows more routing options, like restarting the chapter after collecting the 2A heart.)
  • The 26 golden berries (Collected by completing levels deathless, which would be very repetitive.)

In-game time and speed/entertainment tradeoffs

There are two main differences between in-game and real time optimization in Celeste. First is the 3 frame IGT pause caused by dashing, collecting a refill gem, and many other actions. Second, and much more importantly, is out-of-level menuing. As IGT is not counted while in the main menu, it can be useful to return to map or save and quit in order to save IGT. A 100% TAS completely optimized for IGT would return to map 3 times, and save and quit 8 times. That would be stupid and unpleasant to watch.

Entertainment tradeoffs in this case means optimizing for real time instead of IGT in places where optimizing for IGT would look much worse. We kept the 2 return to maps in 1A, as they are important to the route we take and allow a much cooler strat for the berry before the cassette, as well as the return to map in 6A, which is faster in real time. We kept the save and quits in 1A and 7A, which save a significant amount of time, but removed the other 6 (2A, 3A, 4A, 5A heart, 5A cutscene, 5B), which only save fractions of seconds.

We also avoided using a tech which would occasionally allow larger speed boosts out of feathers. By inputting an analogue direction outside the normal circular deadzone, you get a boost corresponding to the magnitude of the direction held. We elected not to use this, as it would not be possible on most controllers, and more importantly, euni didn’t want to rewrite how our TAS tools handle analogue input.

Tech used

The game resource page describes most tech, but some important tech is not covered there, and many new uses of tech have been discovered since the Any% TAS was published here. These will likely be added to the resource page at some point in the future.

Berry Mechanics

  • There are a few deathwarps in the TAS, and as we’ll lose any strawberries when we die, we have to route berry collection.
  • The first strawberry behind you will collect if you are on the ground for 9 consecutive frames.
  • In order to collect any additional berries behind you, you must be on the ground for 9 additional (non-consecutive) frames.
  • This makes collecting two berries in quick succession very difficult and significantly limits our options for berry collection in some places.

Spikes vs. Spinners

  • Spinners refers to the crystal spikes in most chapters, the dust bunnies in resort, the blades in temple, and the stars in Farewell.
  • Spikes refers to, well, spikes.
  • If you hit a spinner you will always die.
  • If you hit spikes, you will die unless you’re moving away from the spikes, so if spikes are pointing left, you will survive as long as you’re moving left.

Spikejumps

  • Non-TAS, spikejumps usually refer to jumping very close to spikes, or jumping off spikes while moving away from them.
  • TAS, spikejumps refer to a variety of situations where Madeline is very clearly touching spikes and really should be dead.
  • Usually done with moving platforms - you can jump off of them with proper positioning, as the game always uses spike/spinner hitboxes from the frame before the one shown.
  • Specific check to prevent getting dash back on spikes, no such check for spinners.
  • Also possible in wind, as hitboxes are checked before the wind moves you - if the wind pushes you into spikes you can jump off them.
  • If you could spikejump but move off the edge of a platform, you can then dashjump or hyper out of coyote time.

Wallboosts

  • Not to be confused with wallbounces.
  • Intended to be a safety mechanic for new players.
  • By grabjumping without holding left or right, then moving away from the wall you jumped off of, the game assumes you meant to jump away from the wall.
  • It restores the stamina you used and gives you speed moving away from the wall.
  • Allows the stamina-less climb on the resource page.
  • Allows faster turnarounds and faster jumps off the edges of platforms.
  • Allows slowing down from high speeds very quickly.
  • Allows preserving a ducking hitbox while moving away from a wall.

Downward speed preservation

  • You get your dash back if you’re one pixel above the ground and not moving upward.
  • However, you only lose downward speed if you hit the ground itself.
  • By landing on the pixel above the ground without contacting the ground, you can move off the edge of a platform while getting your dash back and preserving downward speed.
  • Can be done with down-diag dashes as well.
  • By ducking as you get your dash back, then jumping out of coyote time, you can sometimes jump under a wall.

Delayed ultras

  • While these were known when the any% TAS was published, we didn’t really realize how useful they were until shortly afterward. By dashing diagonally down and cornerboosting, you still get the 1.2x speed boost from the down-diag dash when you land.
  • This allows getting ultra speed in many locations where it would otherwise be impossible.
  • Delayed ultras can also be done out of coyote time from downward speed preservation or by any means of cancelling a dash (e.g. reverse cornerboosting).
  • Doing a reverse hyper, down-diag dash, and reverse cornerboost off a moving platform gives 3 speed boosts from the platform and causes a delayed ultra when you land, resulting in some of the fastest movement seen in the TAS.

Demo-walljumps

  • Uncrouching at the end of a demodash allows Madeline to jump off a wall behind her.

Ceiling pops

  • When you grab a wall, you slide down a little the frame you grab it. With a low subpixel position, this can move you below the wall.
  • You can still jump, which causes you to jump under the wall.

Spikehypers

  • If a spinner is placed in a certain position above a ledge, it can be possible to fit Madeline under the spinner and hyper despite it looking like the spinner would hit her.

Spike crouchjumps

  • It’s possible to fit Madeline’s ducking hitbox through spinners while crouchjumping.
  • This usually requires a lot of speed or the higher spinner to be closer.

5-tile walljumps

  • With precise vertical/horizontal positioning you can jump to a wall 5 tiles away.
  • 1/3rd of a pixel horizontally, 1/8th of a pixel vertically.
  • Used to save a dash or stamina.

Cross-screen cornerboosts

  • By cornerboosting the frame you enter a screen transition, you can preserve speed through the transition, assuming the ledge where you enter the upper screen is short enough.
  • For some reason, if you cornerboost the frame before the transition then neutral into the transition, your cornerboost speed isn’t reset.
  • You can then cornerboost again on the upper screen.
  • This allows faster cross-screen cornerboosts and cornerboosts off of higher ledges.
  • totally wasn’t found on accident
  • seriously though who would look for this, it’s so arbitrary

Stage by stage comments

Mechanics only relevant to specific chapters will be explained here. For reference, 60 speed = 1 pixel/frame, a dash is 240 speed, and a hyper is 325 speed. All referenced times are based off the chapter timer.

Prologue:

Heavy use of double cornerboosts, 19 frames saved off any% publish.

City A:

The first section of City has a lot of berries before a deathwarp, and not a lot of places to collect berries. While in most levels we only collect berries when it would lose 1-2 frames, here we’re willing to lose as much as 7 frames to collect a berry.

0:27: We skip a berry to the left here, and will get it later by re-entering from the checkpoint. This saves about a second of IGT at the cost of 2 seconds real time.

0:40: We enter a code by dashing in specific directions to spawn the heart, then die to skip the heart spawning cutscene. Saving and quitting skips waiting for the heart text to appear and disappear and saves slightly over a second IGT, again at the cost of 2 seconds real time.

1:22: Getting 2 speed boosts off the back of the block then up-left demoing over it breaks exactly even with a much less interesting strat.

1:25: We skip 2 berries and the cassette here, and will again get them separately from the checkpoint. This saves 3 seconds IGT and is roughly even real time.

0:12 (After returning to map): Jumping 3 times off the block, once off the spiked wall then dashing down-right gives us 5 speed boosts and allows us to get back before the block does.

0:17: Returning to map skips part of the cassette cutscene and some backtracking.

Site A:

New mechanics:
  • Dream blocks: We can jump the frame Madeline exits the block, then again after she exits to get more speed. Alternatively, as leaving a dream block puts us in coyote time, we can hyper when exiting a dream block (although this is seen more in chapter 7).
Restarting chapter after collecting the heart saves a second, but means we have to rewatch the intro cutscene.

0:14: Vertical position is maintained across cutscenes, and Madeline’s dash is refreshed inside the dream block.

0:25: We can cornerboost off the cassette blocks as they disappear.

We avoid collecting berries and make the trail as long as we can without losing time.

2:22: The speed here is made possible by chaining an ultra, 2 delayed ultras, and 2 more regular ultras.

Resort A:

0:16: Dashing pauses the game for 3 frames and Madeline for 4 frames. By dashing, we let the 2nd dust bunny move for one more frame before we reach it, and we can get past it with much more speed.

1:09: This cycle is only possible because the game uses hitboxes from the previous frame, Madeline is actually touching the dust bunny hitbox here.

1:37: Doing a grounded ultra then cornerboosting off the key door allows us to maintain ultra momentum.

1:52: There are two similar routes in Huge Mess, one of which does the bottom section (crates) first, and one which does the middle (towels) first. While towels first has somewhat more awkward movement, making crates first preferable non-TAS, it requires much less movement to talk to Oshiro between sections, saving 3 seconds overall.

2:22: Hitting the left side of the heart bounces us to the left. By dashing the frame we hit it, we can break the heart while getting bounced to the left. We also avoid holding down at the start of the dash, as that prevents having a crouched hitbox and allows us to collect the heart lower. We re-enter this room and deathwarp - you’re not expected to re-enter like this, and we respawn at the closest checkpoint, in the upper half of the room. This skips talking to Oshiro once and saves 9 seconds.

3:20: Putting the key in the door then leaving to get the last berry saves about a second over just waiting for the door to open.

4:05: When we enter this screen, the key in it starts to rotate. The key can only unlock the door when it’s facing the door. This means that a portion (1/3rd) of the time saved between entering this room and putting the key in the door will be lost to the door taking longer to open. Duckjumping under the key the first time through the screen gives a much better key cycle and saves .2 sec.

Ridge A:

New mechanics:
  • Bubbles - entering a bubble with a ducking hitbox will move the bubble up 2 pixels. (This tech is informally called Archie after a parakeet belonging to a Celeste runner.)
0:25: If you’re within three pixels of a wall and falling, sideways wind will not affect you. We use this to slow down quickly when turning around to get the berry.

0:37: The strawberry seeds only disappear if you jump or dash off the ground, or stay on the ground for 9 frames, which we can abuse by jumping out of coyote time.

0:44: Cassette blocks are based off the music (so based off real time). Causing IGT lag by repeatedly dashing causes cassette block cycles to take less in-game time.

2:20: We go out of the way to do a delayed ultra here, which gives an additional speed boost into the next screen and allows us to go straight to the middle platform.

2:49: We’re able to collect the berry on the little ledge next to the spikes, skipping having to go back against heavy wind.

3:18: By alternating left and right each frame while jumping, we can move slowly to the right while staying in spike hitboxes, then jump again on the frame we leave the spike hitboxes. We do a spikejump to restore stamina, and finally do a demohyper off the spikes on the next platform as it starts moving.

3:32: The wind pushes us into the spikes on the ground before the second bubble, and we can jump out of coyote time to skip the bubble.

3:35: Doing a grounded ultra into the snowball preserves ultra speed, which we chain with another ultra in the next screen.

Temple A:

New mechanics:
  • Theo - Grabbing Theo cancels a dash but freezes Madeline in place, making it possible to carry a lot of speed into grabbing him, but making the section very difficult to route optimally.
1:07: Doing a spike crouchjump then a delayed ultra just barely gives us enough speed to make it back to the block after getting the berry. Normally you can get a maximum of 270 speed when cornerboosting off a corner with a spinner, any faster and you’d die to the spinner. The block here moves 1-2 pixels each frame, and by moving over it on a frame where it moves 2 pixels, we can get more speed than usual without dying. On the way back, we can get 2 speed boosts off the moving block and maintain it through several rooms.

2:01: The route we take in the first section of depths requires significantly more backtracking than the unassisted route, but saves time by conserving speed from a moving block through 2 screens, saving .1 sec overall.

3:27: Getting this key early is easily the biggest TAS-only skip and has a bunch of simultaneous requirements - Madeline must be crouching, have a somewhat precise x-position and speed, and have a y-position precise to ¼ pixel. This is made more difficult by the corner right before we jump, which limits the potential speed/position combinations we could have. The solution we found was to hit the corner with exactly 45 y-speed and 120-145 x-speed, turn around and grabjump.

3:45: Saving 2 frames on this room would let us dash straight out of the penultimate bubble, skipping a cycle.

6:57: Having Theo hit the right side of the seeker both moves Theo further right and puts the seeker in a better position. After getting the berry we dash into the seeker, which restores our dash and puts us in the right place to do a grounded ultra into Theo. This wasn't actually planned, but the seeker happened to be in the right position.

7:06: The dash-activated moving blocks make you stay on them if you dash while above them. We can work around this by jumping ahead of the block and dashing into Theo. When we pick up Theo, the pickup animation moves Madeline back onto the block, but conserves the momentum we had when we grabbed Theo. Jumping off the block again gives a 4th speed boost, which is enough to clip through the spikes in the next room.

Reflection A:

New mechanics:
  • Feathers - holding diagonal on the dpad/keyboard gives a larger initial speed boost out of the feather than analog does. Otherwise we use analogue to control the feather more precisely.
  • Bumpers - Holding away from a bumper when you hit it gives a 1.2x speed boost (called bumper boosting), and if you hit a bumper close to the edge, you’ll always get the maximum speed boost.
0:47: We do a hyper + bunnyhop off the Kevin, dash up-left, then reverse cornerboost on the other side of the screen transition to get a 4th speed boost. We actually have to slow down in order to avoid clipping through the cassette before it loads.

1:00: Grabbing the wall here while grounded allows us to wallboost without using stamina. However, stamina is still refunded, allowing us to grabjump one additional time.

1:09: The water here allows us to enter all 4 6-dash codes without ever waiting to get our dash restored.

0:05 (after returning to map): Hitting the falling block at the right time sets it up so we can get our dash back on it after hypering off the Kevin. We slow down to avoid the spikes in the next room by hypering.

0:15: Taking the first 2 bottom screens here forces some awkward movement to get back to the top section, but saves 3 seconds overall.

1:04: This bit consists of a delayed ultra, 2 normal ultras, an ultra into a cutscene, and 3 more delayed ultras, making this the longest ultra chain in the TAS.

1:39: We’re able to get 4 speed boosts from the Kevin, but end up going too fast. If we hit the edge of the screen after the cutscene, we’ll lose all our speed. To avoid this, we dash after the cutscene to give the camera an extra frame to catch up.

Summit A:

2:51: There’s a 2 pixel difference between the bottom of Madeline’s hitbox (used for collision with blocks) and hurtbox (used for collision with hazards). If only her hitbox hits the corner of a dream block, we can go through it, even if there are spikes there.

4:04: The cycle here is made possible by doing a delayed ultra into this room, then doing two reverse cornerboosts to get over the block in the center. This cycle also allows us to chain a couple ultras into the gem room, saving even more time.

5:12: Chaining three ultras builds up enough speed to effectively skip the next room.

5:28: Unfortunately, the berry train must come to an end. We have to do a deathwarp in about 3 minutes, and this is among the few places we can collect berries without any timeloss.

6:32: A deathwarp here would save 1.7 sec, but even with the berries we collected back in 2000M, we still can’t collect them fast enough.

8:09: The heart animation takes quite a while to play, during which we can grab the next two checkpoints and get back before the heart spawns. Saving and quitting puts us back at the last checkpoint, saving about 5 seconds. The waits here are specifically timed as to not break the 1up chain.

8:20: Downwind is prone to long chains of spikejumps, thanks to the ease of spikejumping here. This one’s a cornerboost into 3 spikejumps.

8:34: Rather unique combination of tech here - we wallboost to turn around quickly, hit the spiked ground while moving left, then hyper out of coyote time, cornerboost, and do another spikejump.

9:30: Hitting this spring twice gets us enough height to do a wallbounce followed by a demo.

9:41: Skipping Badeline here avoids having to wait to land after the screen transition, and more importantly, skips collecting a berry.

Core A:

New mechanics:
  • In Core, your dash is only refreshed when you hit a refill gem or screen transition. This made Core A and B very difficult to TAS, as we had to figure out the best places to use our limited dashes, and dashless movement is very difficult to optimize.
  • Core blocks - Their hitbox disappears when you jump off, so it’s impossible to jump multiple times off one.
  • Lava blocks - These act as walls, and there’s a one pixel area where you can walljump off lava without dying. With proper vertical positioning, it can also be possible to cornerboost off of lava.
We wait for a quarter-second at the beginning, as we need to skip a cutscene and we can’t open the menu until the intro animation finishes.

0:27: By doing an ultra off the core block and getting 2 speed boosts, we can get the first berry while the level is still in fire mode, skipping most of this checkpoint.

0:46: Skipping the fire/ice switch in this room prevents having to backtrack after hitting a later switch, and saves around 1.5 seconds.

2:34: We’re able to get a bumper boost without slowing down by crouchjumping then hitting the bumper when Madeline unducks.

City B:

0:13: By doing a cross-screen cornerboost, a couple wallboosts, and a 5-tile walljump, we can get up to this block with a dash and minimal stamina use, and proceed to get 3 speed boosts from the block.

0:40: We wallboost off the second block here to get a faster spikejump to the left. We then do a double cornerboost at 137 speed (close to the maximum amount) to get to the next block. We end up running out of stamina, and have to do a 5-tile walljump to even complete the screen.

Site B:

0:19: Madeline stays in dream blocks as long as one pixel of her hitbox is touching a dream block. By making sure we’re always partially in a dream block, it’s possible to clip through this wall.

Resort B:

0:18: If Madeline is below a one-way platform during a dash, she’ll slowly move up to the platform. This makes it possible to be low enough to get the coin but still hit the spring.

Ridge B:

0:13: This rather elaborate autoscroller skip saves 6.5 sec.

1:20: This autoscroller can be optimized by clipping corners with the block so we don’t have to move it sideways quite as much.

Temple B:

2.941 sec / 173 frames saved over any% publish.

0:16: Two jumps off the block, a dash, and a reverse cornerboost give us enough speed to skip most of this screen. Going through the spike tunnel at the end of this room skips getting a key and saves around 21 seconds.

0:25: We have to wait for a cycle, so we stall by repeatedly grabbing under a wall with spikes. This works the same as ceiling pops, just we don’t actually jump.

1:21: Theo tries to move if he’s above spinners, so by having him land on the right side of this spinner, he ends up in the right position to ultra into.

1:41: If you aren’t carrying Theo, you aren’t allowed to exit the room until after he does. By throwing Theo early so he takes longer to exit the room, we can do a higher jump while waiting for him to exit. The additional height allows us to do an extra ultra before grabbing Theo on the next screen.

Reflection B:

5.967 sec / 351 frames saved over any% publish.

1:45: While we could demo straight to the end of the screen here, going out of the way to do a waterboost ends up being slightly faster.

2:55: Bumper boosts out of a horizontal dash like this would usually be impossible, but since this bumper is moving right, it actually moves into Madeline the frame we hit it.

3:29: The bumper boost out of a wallbounce is just barely possible, and makes it possible to reach the next cassette block only 2 frames before it disappears.

Summit B:

0:43: We get enough speed off the moving blocks that it’s worth it to save our dashes for slightly faster movement towards the end of the screen.

1:25: We grab the side of the dream block wall to get as little height as we can from it.

3:00: If a block is moving up faster than Madeline can jump, it’s possible to cornerboost off the bottom and go under it. We follow this up with two dash refreshes off upward moving spinners.

4:10: The demo here is only possible thanks to upwind moving Madeline up after the dash ends. Saving a dash here would save several seconds, as it would allow chaining spikehypers and skipping Badeline, but unfortunately seems to be impossible.

4:40: We do a demodash off the last cloud through the spikes, but since the demo started on a platform, we can get our dash back and hyper after passing through the spikes.

Core B:

0:02: For whatever reason, Madeline automatically jumps for 0 frames at the end of each dash. While this doesn’t do anything on its own, it makes it possible for a jump to carry through a dash. By doing a one frame wallbounce before a dash, it carries through the dash and causes a midair jump.

0:04: This ultra chain is the most precise thing in any maingame TAS of Celeste. Our best option for starting the ultra chain here is to do a reverse hyper into a delayed ultra. Normally when we do a reverse hyper into a delayed ultra, it takes either 12 or 14 frames to land from the ultra. However, if Madeline’s subpixel position before the hyper is in the lowest 30th of a pixel, it will only take 11 frames. It’s not normally possible to manipulate position this precisely. However, we found that doing a 9 frame up-diagonal dash would make this possible.

All of this means we don’t have to slow down in order for the ultra to land, saving half a second over the next few screens.

0:40: When core blocks disappear, they put you into coyote time, which you can hyper out of to gain a bunch of speed.

1:22: The cornerboosts at the start of the room include a double cornerboost at 143 speed, which requires a position precise to 1/40th of a pixel. (aka “just get lucky,” you can’t manipulate position that precisely.)

2:18: We have to push down the last platform far enough that we can demohyper through the last spikes.

City C:

If we could get the right speed off the second block in the first room, we could skip the third block entirely. Unfortunately, the best we could do was slightly too fast, and ended up 1/15th of a pixel away from skipping it. Having the last block push us during a dash up lets us get 3 speed boosts into the next screen.

Reflection C:

0:17: For some reason, if you move over the edge of a Kevin the frame it hits a wall (note that the Kevin has to move 4 pixels the frame it hits the wall for this to work), you’ll move down further than usual that frame. Some weird combination of mechanics we don’t really understand, but it lets us get 4 boosts off the Kevin instead of two.

Spinner collision doesn’t load until they appear on screen, but the behavior on the edges of the screen is less predictable. Each individual spinner only checks if collision should be loaded every three frames, and which frames they check on is determined randomly. (It’s consistent, as the RNG is seeded with the name of the screen.)

We clip through 2 onscreen spinners here, and the clip will only work every 3 frames, as we need the first spinner to take as long as possible to load collision.

Core C:

For all the insanity, the last screen isn’t all that complicated. We get 3 speed boosts off the block, get the speed boost from a delayed ultra when we land, do 2 ultras, and the rest is offscreen, where lava and spinners don’t have collision. The main reason preserving speed is difficult is that as soon as Madeline reappears on-screen, the lava will have collision again. By doing a reverse cornerboost, we can just barely get above the lava before reappearing. We’re able to collect the heart while in lava, as it has offscreen collision. Map of 8c

Farewell:

New mechanics:
  • Moon blocks - If you dash into one of the floating blocks, it moves away from you. Since it’s moving away, you’ll get a speed boost from jumping off it. By jumping off multiple times, then landing while it’s still moving away, we can get up to 5 speed boosts.
  • Jellyfish - Throwing a jellyfish behind you increases your speed by 70. We often hold on to them though since you lose speed slower while holding one. By holding down when we release a jellyfish, we can drop it in place. Jellyfish disappear when they hit the translucent barriers, but we’re able to get through the entire chapter while saving all the jellyfish.[1]

1:27: We build up speed here by doing 4 ultras and throwing 2 jellyfish behind us. The spikes on the next screen do not have collision until the first frame we move.

1:34: The amount of vertical speed you get when grabbing a jellyfish is based off player actions, not speed. Even though we wait for a while to grab this jellyfish, we’ll always get the same boost for so many frames after a wallbounce.

1:48: The skip here skips getting all 5 keys in Power Source. The intended setup is to get a double dash crystal and keep it all the way to the skip, but we can dashjump into the spiked corridor to do the skip with only one dash.

2:08: When falling off a moving object you get a speed boost. By crouching while falling off this cloud, we can use the upward speed boost to slide in between the spinner hitboxes here.

3:03: The game doesn't consider that a jellyfish could be released into a moving platform, allowing for some rather glitchy effects if you do so.

3:36: Using the binoculars here lets us move the spinners to the right of Madeline offscreen. They will not have collision until the camera moves them back onscreen, allowing us to clip through.

4:35: This is probably the closest we’ll ever get to an out-of-bounds trick in Celeste. If we could escape the starting area to the right here, we could reach a Kevin block you’re not supposed to be able to, and take it to the end of the screen, saving up to 8 seconds.

4:53: We’re able to build up enough speed on the moon blocks to clip through spikes during the feather animation. The feather hitbox is smaller and can just get through the two spinner hitboxes here.

6:18: Madeline bounces up after hitting a Kevin, and by hitting the corner of the Kevin we still are able to bounce up.

6:49: Unlike basically everything else in Celeste, this checkpoint is on global cycles. This means we have to wait at the ends of screens a couple times, although we can dash in order to save in-game frames.

7:07: Reverse cornerboosting off the blue block as it appears makes it possible to skip a cycle. We’re very close to saving a cycle entering this room, but there’s not much room for optimization in the previous room so it seems unlikely.

7:44: Demoing into a bird makes the bird launch you 5 pixels higher.

7:50: By jumping high enough before hitting the power block the second time, it’s possible to hyper out of coyote time after hitting it.

10:19: After dashing into the moon block here, we demo hyper out of coyote time into it. This gives us much more speed than we could normally get off a moon block, enough to skip the Kevin in the next room.

11:17: Having the fish here explode puts it in a better position when we backtrack through the room later.

11:26: In this long sequence of jellyfish, we grab the 4th on the first pixel possible and throw it one pixel before it would hit the barrier. Grabbing it with only 1 more speed would make us hit the barrier before we could throw it, with 4 less we couldn't get to the power block without climbing.

11:41: We’re able to use the fish that exploded earlier along with a feather we skipped to skip part of the trip back through the screen.

12:38: We’re barely able to throw the last jellyfish under this platform without losing any time, resulting in a grand total of 0 jellyfish killed in the TAS.[1]

Level Times

City/Reflection A Sides not included due to the routes we take, Site A time does not include the heart.
Level A-Side B-Side C-Side
City -- 1:08.918 16.541
Site 2:42.231 1:17.367 19.839
Resort 5:10.148 1:34.095 16.949
Ridge 4:01.196 2:11.036 25.534
Temple 7:22.748 1:48.205 18.785
Reflection -- 3:34.625 22.865
Summit 10:22.897 5:04.419 36.040
Core 3:16.350 2:21.474 26.282
Farewell 12:42.076

Suggested screenshot

Frame 195964

[1]: While no jellyfish are seen to hit the barriers which destroy them, 10 of the jellyfish we throw end up falling into pits and 4 hit offscreen barriers.


fsvgm777: Replaced movie file with one that's 38 frames faster.

feos: Fantastic execution! It's so monumental that I can't even comment on anything in particular. Great job.

The full completion definition looks solid as well, there's no disagreement regarding how to define it in the most entertaining way that would also be complete: the current definition is both complete and entertaining. Tweaking it either way would feel artificial.

The audience loved the run too, so I'll most likely move the any% run's star to this one after it's published. Accepting to Moons.

fsvgm777: Processing!


Similar submissions (by title and categories where applicable):