Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: KeiDash on November 21, 2017, 09:26:33 AM

Title: Mapeo de Controles según plataforma
Post by: KeiDash on November 21, 2017, 09:26:33 AM
Buenos días a todos,

Sigo desarrollando mi juego yme ha surgido una duda con respecto al teclado y al mapeo de los botones de pads de plataformas compatibles, me explico.

BennuGD te representa los controles (_LEFT, _A, _F, _RIGHT, _ESC, etc.) de un teclado de PC. He estado buscando en la documentación, cómo mapeo el soporte de teclas del teclado con el pad de una determinada consola a la que BennuGD da soporte, en este caso, Dreamcast.

De mi juego (lo poco que tengo) he creado una iso y la he puesto en el emulador y en la consola original. El juego funciona pero sólo consigo que funcione las teclas direccionales (_LEFT, _RIGHT, _UP, _DOWN) y el boton de Start (_ENTER), los botónes no se como encajan, es decir, que CONSTANTE de BennuGD hace referencia a los botones A, B, X, Y, L y R de Dreamcast? O de otras posibles consolas.. ¿Dónde se encuentra esa documentación? Si es que existe.

Muchas gracias por la posible ayuda.
Title: Re:Mapeo de Controles según plataforma
Post by: panreyes on November 21, 2017, 09:35:16 PM
Desconozco cómo funciona el port de Dreamcast exactamente, pero la última vez que leí algo sobre él creo que mapeaba los botones a las teclas QWEASD (me suena, no lo sé con seguridad). De todas formas, puedes averiguarlo con este código:
write_int(0,0,0,0,&scan_code)
loop
frame;
end

Aparte de las teclas, también existe el módulo de joysticks para leer los gamepads correctamente (http://wiki.bennugd.org/index.php?title=Mod_joy)
Title: Re:Mapeo de Controles según plataforma
Post by: KeiDash on November 22, 2017, 08:01:25 AM
Quote from: panreyes on November 21, 2017, 09:35:16 PM
Desconozco cómo funciona el port de Dreamcast exactamente, pero la última vez que leí algo sobre él creo que mapeaba los botones a las teclas QWEASD (me suena, no lo sé con seguridad). De todas formas, puedes averiguarlo con este código:
write_int(0,0,0,0,&scan_code)
loop
frame;
end

Aparte de las teclas, también existe el módulo de joysticks para leer los gamepads correctamente (http://wiki.bennugd.org/index.php?title=Mod_joy)

Aps!! Pues no conocía esa funcionalidad para averiguar el botón pulsado, muchas gracias @panreyes.

Con respecto al módulo de joystick, voy a re-leerlo por que no termino de entender muy bien como funciona exactamente y qué es lo que hace.
Title: Re:Mapeo de Controles según plataforma
Post by: Drumpi on November 23, 2017, 12:17:33 AM
Cada plataforma usa unos botones diferentes para remapear los controles, y por eso es importante leerse el "leeme" que acompaña cada distribución, suele ser ahí donde se especifican los contoles, la resolución y otros detalles como los formatos sonoros soportados, etc.
La mod_joy, donde la he ido probando ha funcionado muy bien. Básicamente es que en lugar de usar KEY, usas constantes JOY, y aparte, puedes usar joysticks analógicos, que no son más que variables con rangos de valores por cada eje: un joy analógico suele tener 2 (3 si es de un simulador de vuelo), y si la usas con mandos de Wii, los giroscopios se mapean también como ejes.

Como consejo aparte, nunca uses directamente en el código IF (KEY(_UP)) ni cosas así. Yo siempre recomiendo tener un array con dos posiciones por cada tecla que necesites usar: una para guardar la constante de la tecla para esa acción, y otra que se incremente si está pulsada o que valga cero si no.
Yo suelo crear un array que llamo TECLAS(8)(2) (con corchetes), y guardo en TECLAS(x)(0) los valores _UP, _DOWN, _LEFT, _RIGHT, _Z, _X (salto y disparo, por ejemplo), _ENTER y _ESC.
Luego creo unas variables o unas constantes que llamo _TECLA_ARRIBA, _TECLA_ABAJO... y cuando quiero saber si alguna tecla está pulsada hago
IF (TECLAS(_TECLA_ARRIBA)(1) > 0)

Todo esto se ejecuta en un proceso, con muy alta prioridad, durante todo el programa, en bucle infinito.
De esta forma, si mañana decido cambiar los botones, o en lugar de KEY quiero usar JOY, o botones en una pantalla táctil, o quiero usar cualquier otro tipo de control, sólo tengo que modificar UN PROCESO, y no ir buscando en el código todas las llamadas a KEY, o a _UP.
Parece complicado pero a la larga salva vidas, especialmente si hay que portar a otras plataformas
Title: Re:Mapeo de Controles según plataforma
Post by: Ryo Suzuki on November 29, 2017, 11:34:57 AM
Se me había pasado esto, aunque ya lo habrás solventado supongo...

Te pongo las keys para la Dreamcast:

START es _RETURN);

Botón A es la _s
Botón B es la _d
Botón Y es la _a
Botón X es la _w

Digital izquierda, derecha, arriba y abajo son _LEFT _RIGHT _UP y _DOWN

Gatillo Derecho _ESCAPE);
Gatillo izquierdo _SPACE);

Lo que no recuerdo ahora es el analógico. Sé que lo detecta como mouse también, pero no sé bien si se podía detectar como JOY o de alguna otra forma.

Un saludo.

P.D: Todos los botones se podía detectar también como JOY. Pero yo uso siempr keys, no recuerdo el motivo...
Title: Re:Mapeo de Controles según plataforma
Post by: Drumpi on December 02, 2017, 01:02:42 AM
Porque es más fácil de recordar y mapear :D
Los joys tienen la pega de que tienes que detectar si está enchufado, cuántos hay, y cuántos ejes lo componen (los gatillos, al ser analógicos, si no se han puesto como dos ejes más, podrían haberlo sido). Es un poco más complicado y pierdes "compatibilidad" con PC, que necesitas conectar un mando equivalente para jugar y probar. Por eso el método de usar un array intermedio.
Title: Re:Mapeo de Controles según plataforma
Post by: KeiDash on December 09, 2017, 08:51:45 PM
Muy buena información que me has dado Ryo, muchas gracias, aunque me quedo con la duda de como mapear el analógico. De momento estoy haciendo pruebas en PC con un pad de playstation y los detecto, pero no consigo ejecutarlo en la Dreamcast para que funcione (más que nada por que no consigo grabar homebrew que funcione en la DC, no me lee los discos)

Una cosa, a que te refieres con el _RETURN? Esa tecla no está mapeada http://wiki.bennugd.org/index.php?title=Scancodes