It wasn't just because I copy-pasted them... they all are similar in that they should probably derive from a "combatants" class or whatever. They should dump into a common struct during battle for common use in algorithms.
Speaking of which, we need to decide how many combatants (max) a battle would contain. Since each combatant may have several parallel variables to keep track of, it would probably be helpful to have fixed indexes for each monster and character. It could be done dynamically, but then you'd need each algorithm to know the cutoff (index dividing characters and monsters) which would suddenly be moving, ergo held in a battle variable.
One thing to consider in that is the multi-targeting attacks. We probably want to have a bit per target for those--so some even power like 16 or 32 seems appropriate (8 is too low, IMO).