E Skill learns new skills by being subject to those skills in battle. So it's a matter of fighting the proper enemies, not enough battles. It's also impossible until the end of the game, due to one being in the last dungeon. There are 3 "problem" E Skills, as it were, that cause some frustration. 2 because they can be lost forever and one that's fairly luck based.
- Chocobuckle, granted by level 16 Chocobos near the Chocobo Ranch. They'll only use the attack when low in health, and the only way to get them to it without them running away immediately is to use another Enemy Skill, Lv. 4 Suicide. Level 16 ones are the only ones that can be hit by the skill, anyway. However, it's never quite guaranteed that they'll use it, so it may take some time.
- Trine, used by the bosses Materia Keeper and Godo, as well as Stilva, an enemy in a dungeon that can only be visitted once. So once you have beaten both bosses and gotten past that dungeon, it becomes impossible to learn the skill. So make sure that when you fight the bosses, you wait long enough for the skill to be used.
- Pandora's Box, used by the Zombie Dragon enemy in the final dungeon. This one is interesting because in any save game, the skill can only be used once. So you need to make sure you have every Enemy Skill materia equipped at this point, because if you run into a Zombie Dragon and it uses Pandora's Box and you don't have it, you've just lost it forever.
Past those, the rest tend to be a simple matter of fighting the right enemies and waiting for the right attacks. There are some buff spells which will need you to use the Manipulate materia on the enemy, such as Dragon Force, Angel Whisper, and White Wind. If you see an enemy using one of these skills, then use Manipulate and force it on yourself if it's available. Past that, the rest is all a matter of getting your face beaten in.
General strategy is simple - always keep that Materia on at all times! Then you will not miss the one-times and you'll always catch it when the attack happens in normal scenarios, rather than having to hunt the skill down amidst all the rest of the late-game stuff you need to do.
There's nothing specific against cheat codes that should make the Sephiroth battle impossible. However, depending on your cheat choices, you may make the battle more difficult. I'm assuming the one that would destroy you is Safer Sephiroth, the one-winged angel form. In addition to all of its special abilities, it also has the following two bonuses that you probably triggered in your cheat methods compared to your non-cheating methods.
- Each character at Level 99 (except Aeris) adds 30,000 max HP, 2 Attack, 20 Def, 5 Magic, and 16 MDef.
- Casting Knights of the Round on Jenova∙SYNTHESIS (who you fight just before Sephiroth) adds another 80,000 max HP.
Numbers were pulled from the Final Fantasy Wiki. The previous form of Sephiroth also gains increased HP from level 99 characters and using KotR on Jenova, but not nearly as much.
The total boost he can reach for HP alone is a factor of 5: from his normal 80,000 to 400,000. His other stats, of course, are also improved, notedly with a strong emphasis on defense. This is what makes an under-level party (and one who failed to acquire Knights of the Round) actually easier to face off against Sephiroth. I know I managed to defeat him on my first playthrough at subpar levels (Cloud only know his Meteor limit, Vincent his second, and I had Cait Sith with Dice... I don't even know what I was playing at that time).
The only other factor you may have run into is that in using cheat codes you might've slouched in better party upkeep, such as by forgetting to equip proper status defense (he has a lot of those) and buff the party consistently. Past these things, though, using cheat codes shouldn't have any direct effect.
A note should be made that the faux final battle that ensues afterwards is cited to have some interesting effects when using cheat codes, none of which cause Game Over though. It does reinforce that cheat codes themselves shouldn't have affected the previous fight.
Best Answer
Sephiroth attacks Cloud, but doesn't kill him. Cloud automatically counters, and Sephiroth dies.
What's actually happening is that Sephiroth's AI script has him target cloud with an attack that deals 31/32 Current HP damage to Cloud, and then directly commandeers Cloud to use a simple attack (AI scripts can actually directly control other battle actors - this is how Ruby weapon's tentacles work). This will always kill Sephiroth (as Sephiroth has 1 HP), but even if not, the AI script will run an attack called 'done in' on Sephiroth that makes the camera zoom in on the target and makes our villain double over.
Interestingly, 'done in' is set as an automatic counter on any type of attack, so using a GameShark to give Cloud the 'sense' command means you can kill Sephiroth just by scanning his stats (which read Level 50, HP 1/1).
Another piece of trivia: the model of Cloud Strife used for this battle is actually more detailed than the typical battle model - it has more polygons.