Submission #9102: OceanBagel's Linux Poke Speed Run in 00:08.50

Linux
Poke Speed Run
libTAS v1.4.5
204
24
10
PowerOn
Pokespeedrun.swf
Submitted by OceanBagel on 5/31/2024 4:35 AM
Submission Comments
This is Poke Speed Run, a game created by Gumbino for a month-long speedrun contest. It's a pokemon-themed Flash maze runner with unique movement mechanics. As the speedrun contest this game was created for was judged by IGT, this was the primary timing method optimized for. However, it turns out that an optimal realtime run also achieves optimal IGT, so both realtime and IGT were optimized together.

Game info

In Poke Speed Run, you play as a Squirtle trying to escape Oak's lab. However, Ash is starting a nuzlocke and wants to get you back in the pokeball. If you're caught by Ash, you lose and have to start over. If you evade capture and escape the lab, you win the game.
The intended completion sequence of the game is to run through the various maze-like rooms in the lab to reach the key, which unlocks the front door. However, it was quickly discovered that you're able to jump through the wall to leave without the key. This results in a significantly shorter run.
People have found alternate methods to win the game with strategies to stop the timer early while still managing to escape the lab. The two main methods involve getting captured in a way such that you retain movement, and pressing the restart button on a specific frame to pause the timer without actually restarting the game. However, since all of these strategies stop the timer by meeting the lose condition (getting captured or pressing the button that forefeits the run), they are considered losses even if you do also eventually meet the win condition. Another more practical reason for this not counting is that if it were allowed, you'd simply pause the timer right at the start of the run and then complete the run normally, just without the timer running, resulting in a visually identical run except for the timer stopping early.
The in-game timer ticks up every frame of the game, but it uses an unconventional display format. It expresses the sub-second units in terms of 1/60ths of a second, despite the game itself running at 24fps. It can also show a time of X:60, which is equivalent to X+1:00. Throughout the rest of the submission text, "frames" will refer to game frames, or 1/24th of a second, rather than the IGT units of 1/60th of a second.
This game also has a sprint button (S). The sprint button is always held throughout the entire run.

Setup info

This game runs on Ruffle, specifically ruffle-nightly-2024_01_16-linux-x86_64. I set up Ruffle to run in libTAS per the instructions on https://tasvideos.org/EmulatorResources/Ruffle
The game is distributed in a zip folder download which is freely available here: https://paradoxorpg.com/pokespeedrun/ The game itself is an exe file, so the .swf needs to be extracted in order to be run through Ruffle. I used https://github.com/laenion/dump_projector for this, although there are likely other ways to accomplish this as well. The SHA1 of the resulting .swf should be 2f8a0140841276b51672f5b01040699b4ccb249a.
Once the .swf is extracted, replace Pokespeedrun.exe with Pokespeedrun.swf in the game folder. In libTAS settings, select ruffle's executable for the game executable and the path to Pokespeedrun.swf plus " -g gl" as the command-line options. clock_gettime() monotonic was also enabled in libTAS. The version of libTAS used was the release version v1.4.5.

Run info

This run makes heavy usage of glitches, to the point where some of the strats are hard to follow. I'll go room by room, explaining the relevant strats as I get to them.

First room (Oak's lab room)

There isn't much to the first room. It mainly acts as a free area for the player to learn the controls and the premise of the game. However, there is one strategy used here and throughout the run. By holding Up+Down, Squirtle moves down at a much faster speed than just holding Down. Doing this results in entering the next room with a time of 0:38.

Second room (U-turn)

The next room is the first usage of jumps (D key) to perform out of bounds movement. Squirtle spawns at the top left of the room, behind the door. (There isn't actually a transition to the previous room here.) We immediately jump Up+Right to move through the wall and touch the room transition next to us. Note that movement on the ground can only be done in the four cardinal directions, so diagonal movement must be executed in the air. This allows us to reach the next room at 1:03 on the in-game timer.

Third room (S curve)

This room is by far the hardest room to execute optimally. It involves the first usage of clipping through inbounds wall collision. This can only be done when in the air and traveling sideways or sideways-backwards from your facing direction. Because of this, the best strategy is to start by turning upwards to enable a Down+Right jump, clipping through the walls and reaching the middle hallway.
Up+Down is then pressed to briefly change the facing direction to Down before a Down+Right jump is performed, making sure to release Down while traveling through the wall. Once we're past the wall, we ensure we're aligned with the hallway while in the air, then hold Right once we land and then hold all four arrow keys. Like in the first room, holding all four arrow keys further increases our speed while moving to the right.
We exit the S curve room with a time of 2:24, which also happens to be fast enough to outrun the music that was meant to trigger at this part of the game.

Fourth and fifth rooms (Key room and long hallway)

Both of these rooms are completed trivially by leaving all four arrow keys held.

Sixth rooom (Pool room)

In the sixth and final room for this run, we hold all four arrow keys until it's time to jump, when we jump and hold Down+Right to move down and right for two frames, and we then switch to Down so that we can clip through the wall collision. This results in a final time of 6:20 (and a squished Squirtle due to exiting while in the air).

Comparison to RTA speedruns

This TAS ties my own RTA time and world record of 6:20. This is no coincidence, I actually routed this TAS several weeks ago and have been practicing the inputs in an attempt to replicate them ever since then. This is also why the rerecord count is so low. I explored many different routing options in different ltm files, and created this TAS once I confirmed that there were no further improvements that I could find.
Last Edited by OceanBagel 18 days ago
Page History Latest diff List referrers