1) Well the variable check I meant was the variable you set when you obtain your starter Pokemon. I meant when you got your Pokemon, you set a variable unique to that pokemon (so you're assigning a variable that number). Think of it like this, the variable is a pot and the number you're assigning it is the pebbles inside. When you give a variable a number, you're putting pebbles into your pot. As for the "compare 0x800D 0x1" thing, when you press yes or no the game assigns either 0 or 1 pebbles to the pot and what you're doing there is comparing whether or not the game has given "0x1" pebbles to the "0x800D" pot.
2) You're gonna want to place the setflag at the end of the script. If you did it right where you placed the setflag currently, you could still loop for infinite mega stones as the setflag command is only triggered once you say no to the initial question. You're gonna want to place a setflag at the end of the scripts where you give the mega stone to the player, one each for the bulbasaur, charmander, and squirtle.
3) Nono, I meant that the line: "msgbox @enjoy_bulba" was missing an 0x6 after it, like a normal textbox thing. You're also missing one for the same ones in the charmander and squirtle lines.
4) This is regarding your new post. Just to make sure, the "checkflag 0xFFFF" isn't actually 0xFFFF but a real flag, right? Could you post your current script pre-inserted?