Sorry 'bout the double post, but I wanted this info to be contained in its own post. I think I have a list of the conditions which will provide a cover:
In this order:
1. Attack must be able to do damage. Status inflicting attacks like Confu or Sleepel will not trigger this.
2. The actor being checked must not be the target (duh, covering oneself seems counter-productive).
3. The attack must have only one target. Can't be in two places at once or cover another if coverer is going to be attacked.
4. The attack must be physical.
5. The attack must not alter the frog status. Why? Who knows. Probably because frog doesn't have a defending animation.
6. If the command is 20h (an enemy attack), it must not have an
action effect on it (must be FFh).
If those conditions are all met then it loops through the characters and makes more checks in this order:
If the considered coverer's 0x9A8B39 AND 8h flag is off (I have no idea what this means)
If the considered coverer is a valid cover target (in the case of side-attacks, the lone character can't jump across sides and cover an ally)
If the considered coverer HAS a coverage rating (wearing a cover materia)
If the considered coverer isn't the target (that was checked up above, but this is a different loop).
If the target is in the considered coverer's "acceptable coverage" mask. Different from above, not sure how.
If the coverer doesn't have the following statuses: Death, Sleep, Confu, Stop, Frog, Small, Petrify, Berserk, Paralysis, Darkness, Imprisoned
If the cover chance is greater than [0..100]
then add the considered coverer to the "potential coverer" variable.
Then a random coverer is chosen from the potential candidates (although there are only two)
Furthermore, it seems like the coverer's BattleVar 40B8 gets set to the covered char's BattleVar 4060. Not sure what effect that has. Maybe something to do with coordinates on the battle field?
Either way, there you go. That's a ~90% accurate account of how coverages are calculated and determined.