Ash and the gang are headed for Slateport City in a motorboat so that May can try her hand at a Pokémon Contest. Team Rocket is on board, disguised as sailors, and after a failed attempt at capturing Pikachu, they exit the scene in their normal fashion. Unfortunately, now the boat won't start up. Ash and company are drifting at sea when they discover a large, seemingly abandoned ship. They notice that a small boat is along side the ship, so at least one other person must be on board.
They soon meet up with Tommy, who explains that he lost his Marshtomp on the ship a long time ago. He offers to give them a lift back to shore after he's done searching. Later on, Torchic suddenly disappears, and Team Rocket, who also arrived on the ship, find they are missing Meowth. Shortly afterwards, Max, James, May, Jessie, and Wobbuffet are also captured. They end up all tied up and hanging upside down thanks to some handy work by a Spinarak and a Swampert.
Ash, Brock, Pikachu, and the boy are still looking for everyone when Swampert emerges and Tommy recognizes it as his Marshtomp. The Swampert runs away and they follow it, find the others and free them. The boy apologizes for losing Swampert and boy and Pokémon are happily reunited. Team Rocket makes another futile attempt at catching Pikachu and is sent blasting off again. The gang leaves in Tommy's boat, headed towards Slateport City.
As Ash and his friends are sailing the ocean on a motorboat, Brock and Max are discussing their next stop in Slateport City and then Mauville City, where the next Gym is. May reminds them about the Pokémon Contest in Slateport where she plans on making her debut. As May's friends give her words of encouragement, they remain unaware that the drivers of the boat are none other than Team Rocket, with another wicked scheme in mind. The boat stops and Jessie, still in disguise, gives them drinks, which they express thanks for. Then Jessie offers a treat to Pikachu, which he happily accepts. But as Pikachu takes its first bite of the treat, James brings down a rubber bag on it, making Ash, May, Max and Brock gasp. Team Rocket reveal themselves and recite the motto, with Meowth coming up in their Magikarp submarine to finish the motto for them to make their getaway. Ash stops them by sending out his Corphish, which slices the rubber bag open, setting Pikachu free. Jessie reacts by sending out her Seviper to use Poison Tail. Corphish dodges Seviper's attack and uses Crabhammer, knocking the Fang Snake Pokémon out cold. May then sends out her Beautifly to use Gust, blowing Jessie, James and Seviper into their submarine, Ash ends the situation by throwing Pikachu into the air and Pikachu using Thunderbolt, sending Team Rocket blasting off as they complain about the money they wasted on the boat and the snacks.
But Ash and his friends are faced with more problems: the boat is out of gas and they have no radio. As a fog descends, they are drifted to what appears to be a creepy Abandoned Ship stuck among some large rocks. As they go aboard, May starts doing a make-believe news show as they explore the deck, only to realize they're not alone as they see another boat anchored near the starboard bow. The owner of the boat appears almost as if on cue and introduces himself as Tommy. Brock explains their boat ran out of gas and they drifted to the ship. Tommy explains he came to investigate the ship, saying it is now called the "Forsaken Ship" because after it crashed and the passengers made it off safely, the coastguard just left it there. So Tommy came to see if it could be moved, with May expressing sympathy for the ship. Tommy then reveals he was a passenger on the ship when it crashed and during the rescue, he lost his Marshtomp, which he is hoping he might find if he explore the ship. Ash checks Marshtomp on his Pokédex and learns that it's the evolved form of Mudkip, and Tommy promises to give the friends a ride to the nearest port after he's through exploring the ship. As the friends wait,they enjoy some drinks and snacks provided by Tommy and enjoy the sun as the fog descends. But as Pikachu and May's Torchic eat some Pokémon food, Torchic notices a door edge open and something move in the darkness. Curious, Torchic approaches and vanishes. Tommy shows up and learns what's happened, and then suggests they split up to find Torchic.
Meanwhile, below deck in the stern of the ship, Team Rocket, who coincidentally landed in the ship, wake up groaning and start looking for a way out. Meowth wanders into a room by himself and vanishes. At the same time, Ash, May, Max, Brock, and Tommy are looking for Torchic below deck. Max has his back to a flooded hole in the floor and screams as he vanishes, with his sister and the others taking notice. Max wakes up to find himself suspended off the floor next to Torchic and Meowth, both also prisoners and Max notices how high they're suspended. At the same time, May, Ash, Brock and Tommy are looking through a hall and notice a door open at the end of the hall only to see that it is a Marill and a couple Azurill, who bounce past them casually. Brock realizes that the ship must be their home. Max then suggests Meowth to use Fury Swipes to get loose. Meowth complains that he can't move, but Max answers the problem by telling him to use his foot claws. He promises to cut Meowth down if he cuts him down first. Meowth agrees and swings, slashing Max's bondage and getting him down. Max then proceeds to get Torchic down, much to Meowth's chagrin, but is thwarted by a Spinarak, which uses String Shot to retie Max up and hang him from the ceiling, Meowth laughing at him, and smacks into Torchic, who smacks into Max, then Max smacking into Torchic who smacks into Meowth, much to the annoyance of all three of them.
Jessie and James search the halls for Meowth but a Golduck leaps out of a crate, scaring them before walking past them. Jessie yells at it and they go on but James is grabbed from behind and his muffled screams for help are unheard by Jessie who keeps going. James is then held alongside Max, Meowth and Torchic. Meowth then tries to cut James down, ignoring Max's plea to be cut down, but Max swings into them, ruining the escape-attempt as they all scream. At the same time, May is also taken as she's pulled into the water by an unseen assailant. Brock sends his Mudkip to find her but Mudkip reports back that May has vanished and Tommy thinks that someone doesn't appreciate them being on the ship by one bit with Brock figuring out that they're being picked off one by one. May is hung with the other prisoners and explains how she got caught. Max makes light of the situation by saying they still have three buddies out there while Meowth and James only have Jessie, but both scoff and have no doubts Jessie will successfully come to their rescue. At the moment, Jessie is looking for her friends, a little scared of being alone and is scared by a Wooper, which she yells at. But the assailant captures her as well. Jessie is put with the prisoners, much to the disappointment of Meowth and James. Jessie, in no mood for a joke, angrily slams into them, also slamming into Torchic, James and Meowth. The force of the slam gives Meowth unwanted momentum and he slams into the others, making Jessie angrier as she slams into them all continuously as Wobbuffet pops out of his ball but ends up being hung up as well and Jessie calls it, useless.
Ash, Brock, Tommy and Pikachu are still looking for their friends as a blue flipper-like hand reaches out from the water to grab Pikachu. Pikachu notices and attacks the hand with electricity, alerting Ash, Brock and Tommy. The assailant burst from the water, revealing itself to be a Swampert. Ash looks it up on the Pokédex and Tommy gasps as he thinks the Swampert as well as his missing Marshtomp might be one in the same. The angry Swampert flees with them in pursuit as Swampert tries to lose them by diving into the water but they follow it anyway. When they surface, they notice, open a door and enter to find themselves between Swampert and their friends along with Team Rocket. Brock tells Mudkip to cut the threads with Water Gun but is thwarted by Swampert using Mud Shot. Ash sends out Corphish to battle Swampert. Corphish employs Crabhammer but Swampert easily dodges and uses Iron Tail, much to the surprise of Tommy. Ash recalls Corphish and is about to have Pikachu battle but Tommy stops them, saying he's sure that Swampert evolved from his Marshtomp, reasoning that he raised it since it was a little baby.
Tommy approaches Swampert and tries to say hello but Swampert just uses Mud Shot at him, but Tommy isn't harmed or afraid. Then, Tommy openly realizes that Swampert feels that way because when he abandoned it as a Marshtomp, it has grown to hate humans and it is fighting so hard because it doesn't want them to break into its home. Swampert's threatening growls seem to support this theory. Tommy then tell Swampert to remember the day the ship ran aground and in the panic, they were separated. Tommy had thought Swampert, as a Marshtomp back then, had been safe in its Poké Ball and had left but that he never meant to abandon it. Swampert doesn't seem to believe him, but Tommy tells it to try and remember how they were always together when Tommy was a little kid and Swampert was a baby Mudkip. Swampert has a flashback of when they were training around that time, shooting Water Gun at empty soda cans, and evolved into a Marshtomp, they were so happy at that time. Then Tommy brings up the Iron Tail that Swampert had used and all the hard work they did to perfect it. Another flashback shows Marshtomp trying to use Iron Tail on a rock. The attempt fails but Tommy encourages it to try again and this time it's successful as Marshtomp pulverizes the rock. Happy about their success, they hugged.
Tommy, with rejoiced eyes, says he came back to the ship to get Swampert. Swampert, having calmed down and remembered, goes over and Tommy hugs it again and apologizes for leaving it and asks if they can be a team again. Swampert happily agrees. Everyone is released as Max compliments Tommy's Swampert and Swampert apologizes for the trouble it caused. Team Rocket then attempts to steal Swampert with Jessie sending out Seviper, but Tommy and Swampert, now a team again, easily knock it down and sending them blasting off with a Hydro Pump. Up on deck as the sun sets, Tommy announces that since the ship has become a home for a lot of Water-type Pokémon and is like a rest stop for migrating Pokémon, he and Swampert are going to fix up. And the next day, Tommy and Swampert give the friends the ride to Slateport City that he promised, with Ash getting ready for his next Gym battle.