Ayuda con Joystick USB externo en Caanoo

Started by FreeYourMind, August 25, 2011, 10:38:23 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Hola.
Hace tiempo habia probado el joystick externo en la Caanoo y funcionaba, lo hize con la ultima
version del Deadly Eye que Noivern estaba avanzando, pero ya no se donde para, queria mirar el codigo
a ver como lo hacia funcionar (Noivern si te pasas por aqui vuelvemelo a pasar que ya no se donde para,
si no ya te hablaré en el Face).

Bueno, vamos al tema:


Resulta que uso el joy de Playstation 2 con adaptador USB, lo he mapeado y en PC funciona bien, pero en la Caanoo
este no responde nada de nada (y lo tengo claramente conectado).


Los mappers para quien le interese son estos:

// Playstation 2: Button Mappers
// -----------------------------
// Left: joy_getaxis(0, 0) <= -32768
// Up: joy_getaxis(0, 1) <= -32768
// Right: joy_getaxis(0, 0) >= 32767
// Down: joy_getaxis(0, 1) >= 32767
// Triangulo: Button B on Wiz --> joy_getbutton(0, 0)
// O: Button Y on Wiz --> joy_getbutton(0, 1)
// X: Button X on Wiz --> joy_getbutton(0, 2)
// Quadrado: Button A on Wiz --> joy_getbutton(0, 3)
// Select: joy_getbutton(0, 8)
// Start: joy_getbutton(0, 9)
// L1: joy_getbutton(0, 6)
// L2: joy_getbutton(0, 4)
// L3: joy_getbutton(0, 10)
// R1: joy_getbutton(0, 7)
// R2: joy_getbutton(0, 5)
// R3: joy_getbutton(0, 11)


La forma como los uso son:

// Izquierda:

IF (key(_left) OR joy_getaxis(0, 0) <= -32768) // Esto funciona con el analogico (cuando llega al limite) y tambien con el cursor
   ...
END


Boton Triangulo (B):

IF (key(_b) OR (joy_getbutton(0, 0) AND joy_getbutton(0, 0) != -1))
    ...
END



1 - Que puede estar mal ? Porque en Caanoo no funcionan ?


2 - He encontrado un problema en PC, hay pantallas donde no uso el joystick (no lo mapeo), pero algunos botones responden
    y tocan opciones del jugador 1.
    Pues resulta que el pad es sólo para el jugador 2 en la consola, o sea,
    lo que ocurre es que en pantallas donde no lo utilizo este tiene 4 botones que si estan respondiendo.
   
    Me imagino que entra en conflicto con ID's del mapeo de las consolas Wiz/Caanoo (porque uso un OR, ejemplo: "IF (key(_left) OR Wiz_Izquierda)...".
    Lo que quiero es que el jugador 1 solo pueda usar botones de la consola, y el jugador 2 solo el joystick externo.
    Pero si el joystick externo esta controlando cosas del jugador 1 sin pedirle que lo haga, logicamente no pueden jugar uno contra el otro...


Los botones que entran en conflicto son estos:


// L1: joy_getbutton(0, 6) --> Esta ejecutando un 'Cursor Right'
// L2: joy_getbutton(0, 4) --> Esta ejecutando un 'Cursor Down'

// Triangulo: Button B --> joy_getbutton(0, 0) --> Esta ejecutando un 'Cursor Up'
// X: Button X --> joy_getbutton(0, 2) --> Esta ejecutando un 'Cursor Left'

Queria saber porque ocurre y como evitarlo, ya que el mapeo en la consola para el jugador 1
tiene que estar al mismo tiempo que el mapeo del joy externo para el jugador 2


Agradezco alguna ayuda :)









Drumpi

Da tiempo para que respondamos, que yo ayer estuve desaparecido (no, en serio ¿alguien sabe dónde estuve? :D).

El problema, creo, lo tienes en que presupones que el joystick es el número cero (primer parámetro).
Tanto WIZ como CAANOO usan el joy 0 como los botones de la consola. Es más, en Caanoo hay 3 predefinidos. ¿Has comprobado cuantos mandos hay conectados? ¿Has comprobado cual de ellos es REALMENTE tu mando de PS2? ¿Y has comprobado si ese funciona bien?

Los mandos externos he comprobado que son un serio problema, no sólo por saber cuantos hay o en qué posición está cada uno, sino tambien porque los hay que mapean la cruceta como botones, otros como un "hat", otros que tienen un joy analógico, otros que tienen dos ¡otros hasta 6 incluyendo detección de movimiento y demás!

Necesitas tener un programa aparte que te ayude a comprobar todo esto, y después pasarlo a código.
La solución final es tener un proceso aparte que controle qué botones se pulsan o no de los mandos y guarden la información en arrays o estructuras globales, que consulten el resto de procesos (por lo que el proceso de control requiere una prioridad que haga que se ejecute el primero de todos). De esta forma, si hay cambios en la forma de controlar el juego, sólo tendrías que cambiar un proceso, y no todo el código como vas a tener que hacer ahora.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

KeoH

Quote from: Drumpi on August 27, 2011, 04:03:47 PM
Da tiempo para que respondamos, que yo ayer estuve desaparecido (no, en serio ¿alguien sabe dónde estuve? :D).

Yo te ví por la calle Sierpes tirao en el suelo, borracho perdido y en manos de una mujer q parecia Carmen de Mairena xDDDDD

FreeYourMind

Desconfio que es el id 1, me preocupa tb el tema de los 4 botones

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2