He estado mirando un poco el código de Isla, y lo primero que veo es que tiene un pequeño lio de fuentes, porque parece tener el index.html de una beta bastante antigua, el css modificado (con algunas capas a display:block que deberían ser display:none) y cosas así.
Eso hace que cosas como el inicio , con la "intro" funcione de manera rara, o mejor dicho, de casualidad. Por ejemplo, cambiar a ANYKEYs no es fácil porque si no pones un BLOCK nunca se verá el juego porque, por razones que no entiendo, la capa de bloque está puesta como visible en el css.
He estado haciendo un poco de limpieza y tengo un juego en el que eso funciona, pero por otro lado no funciona bien todo el tema de pulsar una tecla, y eso es porque tu gancho para coger las pulsaciones de teclas tampoco está muy fino

Empezamos por aquí:
Código:
var old_mylibname_writeHook = h_keydown;
var inGetkey = false;
Lo primero, que te recomiendo que la variable old_mylibname_writeHook se llame old_gtalk_h_keydown, más que nada para evitar colisiones con otras librerias, que si hacen lo mismo que tu y ponen el nombre del ejemplo a la variable, colisionarán.
Lo segundo, que ha ido a elegir como variable que comprueba si estamos en espera de una pulsación de un menú, un nombre que ya estaba en uso para el condacto GETKEY. Como consecuencia hay una colisión directa de ambas variables. Yo la llamaría inGTalKey o algo así.
Aparte de eso, hay problemas en la definición del gancho en sí:
Código:
h_keydown = function (e)
{
if (inGetkey==true)
{
setFlag(fKey, e.keyCode);
getkey_return_flag = null;
inGetkey = false;
e.preventDefault();
// Continúa la conversación...
//this.select2 (temp_curquip);
gtalk_CallBack.select2();
//waitKeyCallback();
//enable_prompt();
return;
}
}
Lo primero es que no devuelve ni true ni false en ningún caso, y la definición del gancho indica que debe hacerlo:
Citar:
h_keydown = function (event)
Este hook es llamado cada vez que se pulsa una tecla, por lo que es muy potente y puede permitir a un plugin hacer muchas cosas. Notese que es llamado cada vez que se pulsa una tecla, incluso en el input del jugador. El dato recibido es el típico evento recibido en javascript en un "onkeydown", por ejemplo event.keyCode contendrá el código de la tecla pulsada.
Por defecto este evento devuelve true, y al volver del mismo si devuelve true se ejecutarán las acciones estándar de ngpaws para la pulsación de una tecla (comprobar que es ESC si estamos en transcript, salir del ANYKEY si está activo, del GETKEY, etc.) pero si es false no se procesan. Devolver false puede servir para impedir que tras tratar un resultado en una funcion h_keydown alternativa, se ejecute la acción estándar de dicha pulsación.
Al no devolver "true" expresamente tu gancho, cuando inGetkey (o inGTalkKey) es falso, le estamos diciendo al sistema que ya hemos tratado esa pulsación, por lo que no llega nunca a aplicarla a cualquier ANYKEY, GETKEY, BLOCK, activos. En caso de haber "tratado" la tecla pulsada, devolveríamos false. Es decir, tendría que ser algo así:
Código:
h_keydown = function (e)
{
if (inGetkey==true)
{
setFlag(fKey, e.keyCode);
getkey_return_flag = null;
inGetkey = false;
e.preventDefault();
// Continúa la conversación...
//this.select2 (temp_curquip);
gtalk_CallBack.select2();
//waitKeyCallback();
//enable_prompt();
return false;
} else return true
}
Por otro lado, y por hacer las cosas bien de verdad, deberíamos hacer que la librería llamara al anterior gancho, es decir, si al principio hacemos lo de old_gtalk_h_keydown=h_keydown no es para guardarnoslo y luego no hacer nada, sino para poder llamarlo después así:
Código:
h_keydown = function (e)
{
if (inGetkey==true)
{
setFlag(fKey, e.keyCode);
getkey_return_flag = null;
inGetkey = false;
e.preventDefault();
// Continúa la conversación...
//this.select2 (temp_curquip);
gtalk_CallBack.select2();
//waitKeyCallback();
//enable_prompt();
return false;
} else return old_gtalk_h_keydown(e);
}
Esto se hace así porque nada nos garantiza que nuestra librería sea la única que se enganche al h_keydown, y si nos ponemos en lugar del h_keydown y no llamamos al viejo, es posible que estemos bloqueando el uso de otra librería.
Es decir, bien tal como está con Isla pasa esto:
funcion principal------> h_keydown_gtalk
Pero debería pasar esto:
funcion principal------> h_keydown_gtalk -----> h_keydown_original
En Isla no es muy importante, porque tú sabes lo que hay y sabes que no hay otra librería que se enganche al h_keydown, pero imagina que publicas Gtalk y alguien la usa con otra librería que haga uso del h_keydown, llamemosle LIBX, tal y como está pasaría esto:
funcion principal------> h_keydown_gtalk
cuando debería pasar esto:
funcion principal------> h_keydown_gtalk -----> h_keydown_libx -----> h_keydown_original
Quizá incluso pase esto:
funcion principal -----> h_keydown_libx ------> h_keydown_gtalk
o si la otra librería está igual de mal hecha puede pasar esto:
funcion principal -----> h_keydown_libx
En fin, que aunque para Isla no sea importante, lo suyo es que cuando nos metamos en un gancho, no lo hagamos nuestro, sino que nos pongamos en medio y luego si procede dejemos seguir.