Now that you mention teams, I realize I've forgotten to include HM slaves into my team planning. All I knew was that I was going to use a Jynx hatched from an egg sent from Platinum. (Born with Ice Beam + Shadow Ball + Grass Knot + Water Pulse, Modest with 31 Special Attack and 31 Speed.) For double-teams, I'll probably want to boost the level of the starter.
Anyway, back to the HM slave deal... I queries my pokemon program to find potential HM slaves for HGSS, leaving out Smeargle (who has to sketch all of them) and legendaries (since you can't breed them)...
/Users/ekraft/pokemon > pokesearch -i standard -c "hms:hms_hgss * moveset" -c "valid:(size(hms)>3 && ~legendary && name!=smeargle)" valid "size(match)>0" -d match -c "match:{x:pokemon}{value(x, &valid) && size(value(x, &hms) + hms) == 8}"
id | name | match
-------------------------------------------------------
6 | Charizard | swampert+empoleon
149 | Dragonite | swampert+empoleon
260 | Swampert | dragonite+charizard+salamence+tropius
357 | Tropius | swampert+empoleon
373 | Salamence | swampert+empoleon
395 | Empoleon | salamence+charizard+dragonite+tropius
I don't think I can set any of those up in short time, so I'm probably going to choose two Mews or something. (I need a quick solution ; my copies could arrive any day now.)
On the other hand, I should see if I can quickly update my program to include other pokemon that can learn Whirlpool. Since Whirlpool was neither a TM nor an HM, the amount of potential candidates could be bigger...
EDIT:
Naturally, even though I haven't updated my program's internal database, I can always use its flexibility to hack it. Copy+Pasta the Serebii Whirlpool attackdex page (just the section on who learns Whirlpool via HM), some simple regex to parse it into something I can use with my program, and creating a function to conditionally add Whirlpool as an HM...
/Users/ekraft/pokemon > pokesearch -i standard -c "hms:hms_hgss * moveset + whirl" -c "valid:(size(hms)>3 && ~legendary && {smeargle, dragonite} != name)" valid "size(match)>0" -c "match:{x:pokemon}{value(x, &valid) && size(value(x, &hms) + hms) == 8}" -c "whirl:({Squirtle, Wartortle, Blastoise, Nidoqueen, Nidoking, Psyduck, Golduck, Poliwag, Poliwhirl, Poliwrath, Tentacool, Tentacruel, Slowpoke, Slowbro, Seel, Dewgong, Shellder, Cloyster, Krabby, Kingler, Lickitung, Rhydon, Kangaskhan, Horsea, Seadra, Goldeen, Seaking, Staryu, Starmie, Tauros, Gyarados, Lapras, Vaporeon, Omanyte, Omastar, Kabuto, Kabutops, Snorlax, Dratini, Dragonair, Dragonite, Mew, Totodile, Croconaw, Feraligatr, Sentret, Furret, Chinchou, Lanturn, Marill, Azumarill, Politoed, Wooper, Quagsire, Slowking, Qwilfish, Sneasel, Corsola, Remoraid, Octillery, Mantine, Kingdra, Miltank, Suicune, Tyranitar, Lugia, Mudkip, Marshtomp, Swampert, Zigzagoon, Linoone, Lotad, Lombre, Ludicolo, Pelipper, Exploud, Makuhita, Hariyama, Azurill, Aggron, Carvanha, Sharpedo, Wailmer, Wailord, Barboach, Whiscash, Corphish, Crawdaunt, Feebas, Milotic, Spheal, Sealeo, Walrein, Clamperl, Huntail, Gorebyss, Relicanth, Luvdisc, Latias, Latios, Kyogre, Rayquaza, Piplup, Prinplup, Empoleon, Bibarel, Rampardos, Buizel, Floatzel, Shellos, Gastrodon, Garchomp, Munchlax, Finneon, Lumineon, Mantyke, Weavile, Lickilicky, Rhyperior, Palkia, Phione, Manaphy, Arceus} == name)?{whirlpool}:{}" -d match
id | name | match
-------------------------------------------------------------------------------------------------------------
6 | Charizard | omastar+bibarel+ludicolo+blastoise+feraligatr+poliwrath+kabutops+golduck+empoleon+swampert
9 | Blastoise | salamence+charizard+tropius
55 | Golduck | charizard+tropius+salamence
62 | Poliwrath | tropius+charizard+salamence
139 | Omastar | charizard+tropius+salamence
141 | Kabutops | charizard+salamence+tropius
160 | Feraligatr | salamence+tropius+charizard
260 | Swampert | salamence+charizard+tropius
272 | Ludicolo | tropius+salamence+charizard
357 | Tropius | feraligatr+golduck+blastoise+swampert+ludicolo+empoleon+omastar+kabutops+poliwrath+bibarel
373 | Salamence | feraligatr+swampert+empoleon+blastoise+kabutops+ludicolo+golduck+omastar+poliwrath+bibarel
395 | Empoleon | salamence+charizard+tropius
400 | Bibarel | tropius+charizard+salamence
Each of those pokemon can learn these HMs:
id | name | hms
------------------------------------------------------------------------------
6 | Charizard | cut+fly+rock smash+strength
9 | Blastoise | rock climb+rock smash+strength+surf+waterfall+whirlpool
55 | Golduck | rock climb+rock smash+strength+surf+waterfall+whirlpool
62 | Poliwrath | rock climb+rock smash+strength+surf+waterfall+whirlpool
139 | Omastar | rock climb+rock smash+surf+waterfall+whirlpool
141 | Kabutops | cut+rock climb+rock smash+surf+waterfall+whirlpool
160 | Feraligatr | cut+rock climb+rock smash+strength+surf+waterfall+whirlpool
260 | Swampert | rock climb+rock smash+strength+surf+waterfall+whirlpool
272 | Ludicolo | rock climb+rock smash+strength+surf+waterfall+whirlpool
357 | Tropius | cut+fly+rock smash+strength
373 | Salamence | cut+fly+rock smash+strength
395 | Empoleon | cut+rock climb+rock smash+strength+surf+waterfall+whirlpool
400 | Bibarel | cut+rock climb+rock smash+strength+surf+waterfall+whirlpool
This means I can use my normal Bibarel + Tropius combination. I'll try that.
So, Jynx + Starter + Tropius + Bibarel.
(For the starter, I'm leaning towards... Cyndaquil, but if I choose Totodile then rival will use Chikorita (which won't like Jynx's Ice Beam, not one bit.) But Grass Knot and Water Pulse will probably work just fine.