News

Speedrunners complete impossible run with Canadian-developed ‘Celeste’

Speedrun robot TASBot utilized game mechanics to blaze through levels

Screenshot of Celeste for the Nintendo Switch

Celeste,Ā a game from Vancouver-based developer Matt Thorson, had a mind-blowing impossible speedrun.

The run wasn’t humanly possible. Instead, a robot programmed to play the game completed it perfectly.

The speedrun was completed at Summer Games Done Quick. Games Done Quick is a biannual event charity gaming event where speedrunners gather to put on a show.

CelesteĀ was one of the standouts at this year’s SGDQ. Thorson initially developed the game with Noel Berry for the PICO-8, a fantasy console centred around making and sharing tiny games. Later, the duo expanded the game and released it in March 2017.

The gameplay is centered on one main mechanic. Madeline, the protagonist, has a unique dash ability that’s simple to use but incredibly difficult to master.

Accordingly,Ā CelesteĀ is a speedrunner’s dream. The precise and deliberate mechanics enable players to do some crazy stunts.

Bots doing games quick

However, some speedrunners like to take that to another level. The craziestĀ CelesteĀ speedrun was an ‘Any%’ tool-assisted speedrun (TAS). For those who don’t know, an Any% run means a speedrunner must complete the game. Unlike a 100% run, which requires a full completion, Any% participants can complete as much or little of the game, as long as the game is finished.

In the end, the TASBot completed theĀ CelesteĀ run. Created by Twitch streamer dwangoAC in 2013, TASBot is a R.O.B. robot outfitted with a custom circuit board that mimics the behaviour of a video game controller. This means it can play games with superhuman ability, which often leads to game-breaking glitches.

Speedrunners DevilSquirrel, KDT and Kilaye programmed TASBot over the course of two to three months.

While many might question the validity of a speedrun completed by a robot, the TAS runs have a special place. These runs showcase how well game mechanics hold up. Furthermore, there’s something special about seeing a perfect playthrough of a game, especially in the case ofĀ Celeste, a game built around speedrunning.

Mechanics on display

The speedrun puts some of Celeste’s core mechanics on display. The full video can be watched here, but some highlights are included below.

One of those mechanics is spike jumping. In many games, landing on spikes is bad. However. inĀ Celeste,Ā spikes don’t hurt you if you’re moving away from them.

TASBot uses spike jumps to its advantages. One of the most impressive happens at 16:20 in the video. Others proclaim the 17:09 jump to be the best in the game.

Another game mechanic utilized effectively by TASBot is corner and wall boosting. A common speedrunning tactic, corner boosting allows players to move incredibly fast by combining different dashes on corners.

Finally, TASBot makes great use of momentum overall. The game allows players to build momentum off of moving blocks. Combined with corner boosting techniques, players can absolutely fly through levels.

The most impressive display of this was at 20:54. Don’t blink or you’ll miss it.

CelesteĀ is available on PC, Xbox One, PlayStation 4 and Nintendo Switch.

Source: IGN

MobileSyrup may earn a commission from purchases made via our links, which helps fund the journalism we provide free on our website. These links do not influence our editorial content. Support us here.

Related Articles

Fatal error: Uncaught Aws\S3\Exception\PermanentRedirectException: Encountered a permanent redirect while requesting https://ms-staging-baselayer-static-assets.s3.ca-central-1.amazonaws.com/?list-type=2&delimiter=%2F&prefix=uploads%2Fwpcf7_uploads%2F. Are you sure you are using the correct region for this bucket? in /var/www/html/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php:49 Stack trace: #0 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(209): Aws\S3\PermanentRedirectMiddleware->Aws\S3\{closure}(Object(Aws\Result)) #1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, Object(Aws\Result), NULL) #2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #3 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(163): GuzzleHttp\Promise\TaskQueue->run() #4 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(189): GuzzleHttp\Handler\CurlMultiHandler->tick() #5 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Handler\CurlMultiHandler->execute(true) #6 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn() #7 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending() #8 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList() #9 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending() #10 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList() #11 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending() #12 /var/www/html/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(58): GuzzleHttp\Promise\Promise->wait() #13 /var/www/html/vendor/aws/aws-sdk-php/src/ResultPaginator.php(151): Aws\AwsClient->execute(Object(Aws\Command)) #14 /var/www/html/vendor/aws/aws-sdk-php/src/functions.php(52): Aws\ResultPaginator->valid() #15 /var/www/html/vendor/aws/aws-sdk-php/src/functions.php(69): Aws\map(Object(Aws\ResultPaginator), Object(Closure)) #16 [internal function]: Aws\flatmap(Object(Aws\ResultPaginator), Object(Closure)) #17 /var/www/html/wp-content/plugins/s3-uploads/inc/class-stream-wrapper.php(695): Generator->valid() #18 [internal function]: S3_Uploads\Stream_Wrapper->dir_readdir() #19 /var/www/html/wp-content/plugins/contact-form-7/includes/file.php(362): readdir(Resource id #734) #20 /var/www/html/wp-includes/class-wp-hook.php(322): wpcf7_cleanup_upload_files() #21 /var/www/html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #22 /var/www/html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #23 /var/www/html/wp-includes/load.php(1280): do_action('shutdown') #24 [internal function]: shutdown_action_hook() #25 {main} thrown in /var/www/html/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php on line 49