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

Submission #6951: eliilek's GBA Pokémon Pinball: Ruby & Sapphire "Sapphire Field, defeat Rayquaza" in 08:41.69

Console: Game Boy Advance
Game name: Pokémon Pinball: Ruby & Sapphire
Game version: USA
ROM filename: Pokemon Pinball - Ruby & Sapphire (USA).gba
Branch: Sapphire Field, defeat Rayquaza
Emulator: BizHawk-2.3.3
Movie length: 08:41.69
FrameCount: 31159
Re-record count: 18803
Author's real name: Eli Klein
Author's nickname: eliilek
Submitter: eliilek
Submitted at: 2020-12-01 00:11:37
Text last edited at: 2020-12-20 13:12:06
Text last edited by: Memory
Download: Download (3519 bytes)
Status: judging underway
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
Author's comments and explanations:
This is my submission for a TAS of Pokemon Pinball - Ruby & Sapphire. The goal of this category is to defeat Rayquaza as quickly as possible. There are no major glitches used to achieve this, just precise pinballing and physics manipulation.

Game objectives

  • Emulator used: BizHawk version 2.3.3
  • Defeat Rayquaza as quickly as possible


The general route for this speedrun is to earn and complete 5 bonus rooms, the 5th containing Rayquaza. We earn a bonus room by catching and evolving 1 pokemon. We also make frequent use of the slot mechanic - the second slot lets you enter catch mode, the fourth lets you enter evolve mode, and the 5th gives you a free bonus room outright. The first and third slots contain nothing relevant to the speedrun, so they are ended as quickly as possible. After you complete the first 2 bonus rooms, you have to do them again. After you beat the second bonus room for the second time, you catch Kyogre and are allowed to progress to bonus room 3, where you defeat Rayquaza and complete the speedrun.

Stage by stage comments

Catch Mode

While in catch mode, your goal is to hit the bumpers at the top of the table 3 times, causing the silhouette of the pokemon to fill in and gain collision. If you hit 3 bumpers all in one go, it plays a cutscene where the pokemon is immediately created, but this is considerably slower so instead we get 2 hits, drop the ball back down, then send it up for the 3rd. There is some dead time while the silhouette is filling in, which we use to set up a slot without wasting time. Once the pokemon gains collision, you have to hit it 3 times. If the ball is inside the collision box when it spawns, you can get all 3 hits immediately as it tries and fails to eject the ball. There is minor RNG manipulation during the 2nd catch to avoid a pokemon that has no evolution, which would break our route.

Evolve Mode

The goal of this mode is to collect the 3 golden "EX" gems that spawn around the table, one at a time. Once you collect the 3rd, you can enter the hole to evolve the pokemon. The RNG is purely based on the current in-game timer, and the location of all 3 EX gems is determined when you select the pokemon to evolve, so we can achieve a different pattern by waiting 1 additional frame before the selection. This lets us avoid the gems spawning in slow places, and set up to get multiple gems in one go or collect the last gem and immediately enter the hole. This is made harder by the fact that the gems don't get collision until the animation has completely finished, which lasts quite a bit longer than it appears.

Bonus Room 1 - Duskull/Dusklops

In this room, 2 Duskulls spawn on the screen at once and you must keep hitting them until you've defeated 20. Then after a short animation, a dusklops will enter the arena and require 5 hits to defeat. The location of the next Duskull depends on the frame the previous duskull was hit, allowing for some manipulation for favorable spawns and stringing multiple hits together. The dusklops is tricky to defeat because if the ball enters the area directly in front of it, it will catch the ball and throw it back which is very slow. We take advantage of the fact that if the ball is inside of it's collision box the game can be confused about how to eject it, so we can get 3 or 4 hits at once by dropping it through the dusklops earning a hit as soon as it regains collision.

Bonus Room 2 - Kyogre

In this room you must hit Kyogre 15 times in order to defeat it, or 18 times to catch it on the second visit to the room. Kyogre will attempt to freeze your ball in place or catch it in a whirlpool, both of which force you to stop for a while. Fortunately the corner at the back end of the Kyogre has interesting collision boundaries, and you can wedge the ball in there such that it isn't ejected after hitting the Kyogre. This allows you to get 5 hits in a single go, so we can complete the room for the first time in only 3 swings which saves quite a bit of time. You can also prevent the move that freezes your ball by hitting the Kyogre at the right time.

Bonus Room 3 - Rayquaza

Finally, you must defeat Rayquaza by hitting it 15 times. This room involves the least exciting TAS tricks because Rayquaza bobs up and down, and can only be hit while at the bottom of it's movement. This prevents you from getting multiple hits at once (except when it stops to do the lightning attack), so the focus is on getting a hit and returning the ball as quickly as possible, but not so quickly that when you go for your next hit it goes right under the Rayquaza. Additionally, about 8 frames after we achieve the last hit the Rayquaza will fly up offscreen and then do a flyby that spawns 2 tornadoes which can catch your ball and throw it up in the air, to say nothing of being unable to hit the Rayquaza for 5 seconds until it comes back. This thing is deeply annoying.

Other comments

Much credit to DaJaWi, whose youtube video inspired me to create this and let me know what is possible in several sections. I've linked their side-by-side comparison run of the Ruby table and the Sapphire table below. Credit also to roseasromeo for helping me pick apart the physics engine and analyze the relationship between the X and Y velocity, and where the ball ends up going (it's less straightforward than you'd think). We actually went way deeper into that analysis than we really needed to, if anyone else is interested in running this game I'd love to share what I learned about it.

I'm struck by how solidly put together this game is for being from 2003, I think it's fun to play and entertaining to watch. The easiest and hardest thing about putting this run together was the limited search space. On any frame you can flip either flipper, and you can bump the table left right or up every 27 frames. This means the input search space is relatively small, but it also means that you can discover that the only way to get the ball where you want it to go is to change the hit you did 100 frames ago so it has a better exit vector. Not sure what else to say here, it's my first time so please be gentle with me but I'm SO looking forward to getting feedback on the run/submission and joining this community!

(Link to video)

ThunderAxe31: File replaced for removing 1127 blank frames at the end of the movie. Note that we don't use RTA timing (more here)

Samsara: I feel a precedent-defining judgement coming... But I don't think it should come from me. Resetting to new.

Memory: Judging

Similar submissions (by title and categories where applicable):