+ The game uses randomness to create genuinely distinct player and enemy characters.
+ Enemies create different threats in different combinations
- Calculating every possibility is optimal play.
Attacks' setup positions are vastly more important than their finisher positions. Also, one time my dude learned two copies of the same move.
I'm especially impressed that you managed to make different enemy types unique independent of their health and attack values. Most developers have a hard time doing that with static content.