May is traveling to Slateport City in style: onboard a giant cruise ship that has the Grand Festival's prize Ribbon Cup on display! Officer Jenny reveals that even though Team Magma and Team Aqua have disbanded, a former Team Magma member—Brodie the Phantom Thief—is onboard and intent on stealing valuables.
When May goes to see the Ribbon Cup, Munchlax bumps the display case, breaking the Cup and revealing that it's a fake. And without the Cup, the Grand Festival will be called off! Brodie must have stolen it, so a "Golden Poké Ball" is put on display as a lure. Disguised as the Captain, Brodie distracts May and her friends and steals the Poké Ball, but Officer Jenny had a tracking device installed in it and they set off in hot pursuit.
They chase Brodie through the ship, finally cornering him on deck. Brodie has now disguised himself as Officer Jenny and the only way to distinguish between the two is with Brock's keen eye for lovely ladies. Once his ruse is rumbled, he escapes and Team Rocket tries for the Ribbon Cup instead. But Officer Jenny and Ash are up to the job, and Team Rocket's plans are thwarted.
Ash and his friends are aboard the S.S. St. Flower, a luxury cruise liner, on their way to Slateport City after May won her fifth Contest Ribbon. The cruise liner even has its own Pokémon Center, where May is able to get her Pokémon some rest and exercise. They soon run into Officer Jenny, who is hot on the trail of a thief named Brodie. Max and the others quickly realize they encountered Brodie at the Weather Institute. Jenny adds that Team Magma and Team Aqua have both been disbanded following the clash between Kyogre and Groudon. Although without a team, Brodie has decided to become a master thief on his own. Nearby, Team Rocket is listening to Officer Jenny's explanation and, upon hearing that Team Magma and Aqua are no more, they decide to take credit for it. Their hope is that their boss, Giovanni, will be extremely pleased by the news and Team Rocket will be able to fill the void in power left in the Hoenn region.
May decides to lead the others to a room where the Ribbon Cup, one of the awards given to the Coordinator who wins the Grand Festival, is being displayed. As the group admires the Ribbon Cup, Munchlax comes running into the room being chased by a guard. With Max's help, May manages to get Munchlax under control after getting it to eat a "May's Pink Surprise" Pokéblock. However, Ash discovers that the Ribbon Cup has a broken handle, possibly caused by Munchlax when it ran into the case. The head judge of Pokémon Contests and Chief of the Pokémon Activities Committee, Raoul Contesta, comes by to inspect the damage, and May takes full responsibility for what happened. Mr. Contesta is happy to accept that it was simply an accident. However, he notes that something is wrong because the Ribbon Cup should have never been able to break so easily. On closer inspection the official seal of the Contest Committee is missing, so Raoul declares that the Ribbon Cup is a fake. A card falls from the bottom of the cup, which turns out to be the signature of Brodie the Phantom Thief. The group alerts Officer Jenny to the situation, Mr. Contesta very begrudgingly decides that the Hoenn Grand Festival must be canceled because there's no Ribbon Cup to be awarded to the winning Coordinator. May pleads for another option, but Mr. Contesta sadly points out that there is no time to make another Cup, so canceling the Grand Festival is his only option. However, Officer Jenny points out that Brodie must still be on board, so hopefully they can recover the Cup before they get to Slateport City. With this hope in mind, everyone gets ready to find Brodie. Team Rocket listens in from an air duct, and set their sights on stealing the Ribbon Cup from Brodie himself.
The group realizes that they will need to find some way to force Brodie out from hiding after even a guard was tricked by his disguise. Officer Jenny has an idea and paints a normal Poké Ball gold. The plan is to put it on display as the extremely valuable second place prize in the Grand Festival. Ash and his friends then begin spreading the word everywhere they can, hoping that Brodie will hear at least one of them and decide to steal the Poké Ball. The group reconvenes back at the same place where the Cup was stolen. They then hear someone coming and hide. Team Rocket, disguised as bell hops, try to steal the Ball, but are caught in the act. They then reveal themselves only for Pikachu to send them blasting off. Ash and the rest of the group are shocked and dismayed that the thieves were not Brodie.
Suddenly, the captain appears and tells Officer Jenny that Brodie is attacking the Pokémon Center and stealing all of the Pokémon there. May realizes that all her Pokémon are at the Center and everyone rushes away. However, in another corridor, the captain encounters them and is very confused, saying that he just came from the Pokémon Center and that all is well. Realizing that the first captain was actually Brodie in disguise, the group immediately turns around and races back to the room with the golden Poké Ball. The fake captain is about to steal the Poké Ball when Jenny orders him to stop and reveal himself. Brodie notes that they are persistent and throws away his disguise. Officer Jenny states he is under arrest. Brodie immediately calls out his Golbat and it uses Haze, temporarily blinding the group with the smoke and allowing him to get away with the golden Poké Ball.
The group knows that they cannot fool Brodie the same way again, but Officer Jenny points out that it is not a problem as she placed a movement tracker inside the Ball. They follow the tracker to the dining room and it leads them to a woman eating alone at a table. She asks if there is something wrong as the tracker is pointed at her. Officer Jenny then states that she is really Brodie in disguise. Brodie affirms his identity before fleeing with Jenny, Ash, and company running after him. As the group turns a corner, Officer Jenny finds a discarded disguise lying in a corridor and guesses that he must have changed again. They all follow the tracker into the kitchen. Brodie's next disguise works at first, but the truth is revealed when the "master chef" leaves the room and then immediately enters in again through another door. Deducing that the first master chef was Brodie, Jenny and the others give chase again. Unfortunately, Brodie figures out how they are tracking him and abandons the Golden Poké Ball. Max then remembers that Brodie has a jet pack, so everyone goes up to the deck to find him.
As the group scour the upper deck, two Officer Jenny come face to face. Both claim that they are the real Jenny and that the other one is an impostor. Everyone is confused, except for Brock, who uses his exceedingly amorous behavior around beautiful women to determine which Jenny is real and which one is Brodie in disguise. On closer examination, Brodie decides that the Ribbon Cup isn't quite as valuable as he thought, so he tosses it back to Officer Jenny. Unfortunately, the Cup is snagged in midair by Team Rocket. Brodie just laughs and takes off in his jet pack before anybody can stop him. However, Officer Jenny does not plan on letting all of the thieves get away and has her Growlithe use Flamethrower on Team Rocket. Jessie sends out Seviper, which dodges the attack and uses Poison Tail. Ash retaliates by having Pikachu use Thunderbolt on Seviper, at which point James joins the fray and sends out his Cacnea. Cacnea uses Needle Arm while Seviper uses Poison Tail again. Growlithe and Pikachu successfully counter with Flamethrower and Thunderbolt, respectively, and Pikachu finishes the battle with Thunder.
With the Ribbon Cup safe again, the Grand Festival is no longer canceled and everybody relaxes as the ship begins to pull into Slateport City.