Te explico para rubí, pero es el mismo cuento salvo que con diferentes "numeros" de variable..
Realmente, una variable es una "caja" donde puedes guardar un contenido de datos.
En el rubí por ejemplo, hay variables 'predefinidas' por nintento, que al darles valor TRUE, dan un efecto u otro en el juego, es decir "se activa" el contenido de la variable. (por ejemplo, la variable 0x800, 0x801. Que activan en el menú, el menú pokemon i la pokedex.) Todas las demás variables, (las que se suelen usar en el setvar), tienen contenido 'vacio', y como el codigo rubikon, no permite modificar dichas variables sin que sea un valor numerico, nos hemos de resignar i asignarle valores numericos. (0,1,2,3,4,5,6,7,8,9,A...etc).
Pero si supieramos ASM, el contenido de una variable lo podriamos modificar, y por ejemplo que activarse la variable 1616, te salga un lugia shiny. (por decir algo..)
Y respecto a lo de variable, antes que nada quiero que sepas que "flag" = variable.
Solo que nombrada de otra forma, ya que no es una variable cualquiera, si no que es una variable tipo booleana. Es decir que solo puede ser VERDAD o MENTIRA. nada más, no es como el caso de las variables [setvar] (que son las que no están predefinidas en el hack, salvo la 8000), que las "rellenamos" nosotros con valores numericos.