If stuff like cut, rock climb, fly, and dive weren't all crap they'd be okay.
Cut and Strength go on too many pokemon to be heavily editable without some problems, but:
Cut: Same as previous games, (maybe 50 damage now) and a 20% flinch chance. Strength: 30% Chance of Raising ATK. Fly: High Crit Chance. (Lower to 60 power maybe) this could help deal with buffed enemies. Rock Climb: Better accuracy, don't really see how it'd confuse them but i guess it works. Dive: Can we please make this a tm. Waterfall is better in essentially every way. And we have too many water hms as it is. But if you had to keep it, at least make it stronger than waterfall with lower accuracy. Rock Smash: 50 Base Power, and give it very early on.
Whirlpool, and Defog shouldn't be HMs. Way too niche.
>Implying I don't actually know 3DS FC: 3308 4781 6052
I've posted this before on many different forums but I'll post it again anyway. HMs should be based on Pokémon's physical characteristics first, and stats second. In other words, there should be no need for any moves to have out-of-battle functions; simply the following:
1 - Cut: does the Pokémon have claws/blades/other sharp appendages? Then it can cut down obstacles. No move required. 2 - Fly: does the Pokémon have wings/some other method of flight, and is it large enough to carry a human? Then it can fly the trainer from town to town. No move required. 3 - Surf: can the Pokémon swim, and is it large enough to carry a human? Then it can be surfed upon. No move required. 4 - Strength: is the Pokémon large and strong? Then it can shift boulders. Potentially based on Attack stat. No move required. 5 - Flash: does the Pokémon have some means of creating light (flame/glow bulb/sparks)? Then it can light up dark caves. No move required.
...and so on. The key part being bolded. I'd like to think the game could be designed in such a way that you wouldn't have to be barred from progressing until you obtain an HM, but that would still be doable with this system, with an explanation along the lines of badges being licences (like real-life driving licences) that act as qualifications to allow your Pokémon to perform dangerous tasks (felling trees, flying, surfing) outside of battle.
The key point remains that we wouldn't need to waste a precious moveslot on a useless move. All the moves could remain as TMs, but their out-of-battle function would be changed to a more intuitive system where the physical characteristics of your Pokémon actually mean something.
On a side note, I'd also like to see them implement riding Pokémon in a similar way - is the Pokémon large enough to ride? Then you can ride it, and its speed is based on its Speed stat.
Note: I do realise that this doesn't necessarily circumvent the issue of the game "forcing" you to have certain team members - i.e. a Flyer, a Surfer etc. - and therefore some people would prefer the HMs to be "Key Items" instead, as per the OP. However I prefer the idea of the Pokémon doing these things for the trainer, especially as I can't get my head around needing to teach a bird to Fly or a fish to swim.
...and further to my above post (sorry can't edit), my method would make the HM functions available to a wider range of Pokémon, as it would be based on the common sense approach of "could this Pokémon physically perform this action?". For example Yanmega could Fly you around the map (without needing to worry about altering movepools etc.).