No le deis vueltas. La forma correcta de hacerlo es con un script de nivel de tipo 01 (setmaptile). Creas dos puertas y una de ellas la configuras en el editor de bloques como puerta y la otra no. Pones en el mapa la puerta que funciona (de la otra manera da errores en ciertas circunstancias). Y si quieres, por ejemplo, que dependa de la flag 0x200, pones el script de la siguiente manera:
@org @inicio
checkflag 0x200 'comprueba el estado de la flag 0x200
if 0x0 goto @smt 'Si está desactivada va a @smt
end
#org @smt
setmaptile (puerta que no funciona)
special 0x8E 'Recarga el mapa para que funcione el setmaptile
end