Is probably better if it's hosted, but since you're using phyton, it's going to come out as an app anyway. Just do what's easier for you :P It's easier if you're going to update if you host it on a web. But then again we can always re-download :) How's it coming along haha :)

You can't reverse a mersenne twister, so observation of animation won't get you anywhere. I tracked (with Lua scripts) the mersenne twister for my TAS of White for 3 hours of play, and was able to manipulate the "terrible" trainers who randomly pick a move. For the tough ones (do most damage/work), they have to be danced around and only pick a random move if it will KO (Drapion usually goes for STAB, but to finish off it still Thunder Fang'd ~ swapped to get it to paralyze).

AI is only as good as it is programmed :)

==

Mersenne returns random values every visual frame for each pokemon, low ones make the sprite blink, other values do other stuff.

For non-difficult battles, crappy trainers act like wild Pokemon. rand(#moves) low-high chooses moves 1-#. I've written more on this here.