Duda sobre los pads

Started by Mr Matsusaka, April 06, 2010, 10:52:29 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Vale, me refiero a los de la consola (todos los perifericos no oficiales de la consola que sea tienen que tener conectores identicos a los originales, ya que son sistemas fijos).

Sobre los de PC, pues logicamente aunque fisicamente existan clonicos que parezcan iguales a los de una ps por ejemplo, internamente pueden ser muy distintos, por eso existen programas de configuración del joy con casi todos los juegos, incluso vienen con la mayoria de los joysticks.

auqnue si haces un juego que sólo utilize hasta 2 botones, puedes asegurarte de que va funcionar en más del 90% de los joysticks que existen para PC, ya que es uno de los padrones más viejuno de todos.

SplinterGU

no se si me respondes a mi, pero yo me refiero a los originales dualshock 2, de ps2.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Mr Matsusaka

El caso es que los dualshock te miden la intensidad de la pulsacion. Si pulsas un poco Snake anda un poco y si pulsas mucho corre XD No se como lo haran pero midiendo el tiempo de pulsacion imposible.

Splinter, estoy probando y buscando alguna funcion que me lea cuantas setas analogicas tiene el mando. Hay alguna funcion que me valga para tal cosa? Los axis por lo que veo son los gatillos superiores del mando. Los hats tal vez? Los estoy probando pero me devuelve valor 0...

FreeYourMind

No, lo bueno del foro es que te avisa que han posteado mientras escribes, y justo ahora ha vuelto a ocurrir :)

FreeYourMind

Quote from: Mr Matsusaka on April 07, 2010, 04:24:37 PM
El caso es que los dualshock te miden la intensidad de la pulsacion. Si pulsas un poco Snake anda un poco y si pulsas mucho corre XD No se como lo haran pero midiendo el tiempo de pulsacion imposible.

Splinter, estoy probando y buscando alguna funcion que me lea cuantas setas analogicas tiene el mando. Hay alguna funcion que me valga para tal cosa? Los axis por lo que veo son los gatillos superiores del mando. Los hats tal vez? Los estoy probando pero me devuelve valor 0...

Lo que hace el dualshock con los analogicos es recorrer un intervalo de valores, cuanto más deprisa le des, más rápido los recorre, eso lo vi con el programa de test, y es muy dificil que se queden en un valor estable aunque no toques en ellos.

SplinterGU

Quote from: FreeYourMind on April 07, 2010, 04:25:41 PM
No, lo bueno del foro es que te avisa que han posteado mientras escribes, y justo ahora ha vuelto a ocurrir :)

a mi no me aviso, se ve que postee antes, a vos si?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Mr Matsusaka

Quote from: FreeYourMind on April 07, 2010, 04:28:11 PM
Quote from: Mr Matsusaka on April 07, 2010, 04:24:37 PM
El caso es que los dualshock te miden la intensidad de la pulsacion. Si pulsas un poco Snake anda un poco y si pulsas mucho corre XD No se como lo haran pero midiendo el tiempo de pulsacion imposible.

Splinter, estoy probando y buscando alguna funcion que me lea cuantas setas analogicas tiene el mando. Hay alguna funcion que me valga para tal cosa? Los axis por lo que veo son los gatillos superiores del mando. Los hats tal vez? Los estoy probando pero me devuelve valor 0...

Lo que hace el dualshock con los analogicos es recorrer un intervalo de valores, cuanto más deprisa le des, más rápido los recorre, eso lo vi con el programa de test, y es muy dificil que se queden en un valor estable aunque no toques en ellos.

Ya ya, si lo digo mas que nada porque Splinter decia que en realidad no son analogicos. Yo solo decia que aunque realmente no lo sean, se portan como tales.

BoMbErLiNk

#22
Quote from: SplinterGU on April 07, 2010, 04:08:04 PM
bueno, eso de que los botones del joys de la ps2 son analogicos y tienen sensibilidad es un mito... con desarmar el control te das cuenta que no hay pulsadores analogicos son pulsadores esos de goma con pintura conductora... por ende no pueden ser analogicos... quizas mide cuanto tiempo esta pulsando el boton y en base al tiempo va devolviendo valores analogicos... pero la verdad no me consta que los botones devuelvan valores analogicos...

Según tengo entendido tiene una membrana plástica que incorpora una resistencia en cada botón, de ahí la característica que hace que cada botón sea progresivo (analógico) y permita varios niveles de presión, sin esa membrana la apariencia el mando es normal y corriente y solo digital, el mando original de psx no tenia.


(aquí se ve bien la membrana que digo)

También creo haber jugado juegos de carreras pulsando botones normales y notar eso, ahora en el caso del metal gear me has hecho dudar porque hay un delay en la acción de agacharse y ponerse de rodillas ;)

---

Algunos controles más :

Mando original PS2 (12 botones) :
Triangulo = 1
Redonda = 2
X = 3
Cuadrado = 4
L2 = 5
R2 = 6
L1 = 7
L2 = 8
Select = 9
Start = 10
L3 (seta1) = 11
R3 (seta2) = 12

Mando Logitech clonico para pc (12 botones) :
Triangulo = 4
Redonda = 3
X = 2
Cuadrado = 1
L2 = 7
R2 = 8
L1 = 5
L2 = 6

Select = 9
Start = 10
L3 (seta1) = 11
R3 (seta2) = 12

FreeYourMind

Cuando escribes y acaban de postear encuanto escribes, sale un aviso en rojo antes del Subject al darle al post, me ha ocurrido ahora de nuevo :)

Mr Matsusaka

Ahh, lo que decia Splinter no son las setas sino los botones analogicos.

Y bueno, hay alguna funcion para cojer el numero de setas?
joy_numaxes es para los gatillos y joy_numhats no me devuelve nada...

Mr Matsusaka

Bueno, ante tal silencio deduzco que efectivamente no existe manera de averiguar cuantas setas analogicas tiene el mando. Con lo que la pregunta pasa a convertirse en sugerencia: deberia poderse saber el numero de setas analogicas, principalmente para poder detectar el boton de start.

Al margen de eso, mirando la wikipedia he visto que no hay nada acerca de vibracion en los mandos. Seria interesante contar con tal funcion tambien.

BoMbErLiNk

Un segundo, hats te devuelve 0 en el mando de Saturn ??

Creo que lo estabamos enfocando mal, porque usar get_joy_position(0,0) es usar un control analogico, es decir siempre hemos estado usando un control analogico, aunque el mando use cruceta.

Los hats / POV me los suelo encontrar siempre en pads con varios joysticks y de hecho tuve que programarlo así, usando hats porque de otra forma no me iba la cruceta del mando de ps2 :)

FreeYourMind

Aqui tienes el JoyTest.prg

import "mod_video"
import "mod_wm"
import "mod_joy"
import "mod_text"
import "mod_key"

Global
int i,j; // counters

int joy_num; // total number of joysticks present

string name[9]; // names of the joysticks
int numaxes[9]; // number of axes    on each joystick
int numballs[9]; // number of balls   on each joystick
int numbuttons[9]; // number of buttons on each joystick
int numhats[9]; // number of hats    on each joystick

int a[9][9]; // axis-values:   [joysticknr][axisnr]
int t[9][9][1]; // ball-values:   [joysticknr][ballnr][0/1] (0: X-value  1: Y-value)
int b[9][29]; // button-values: [joysticknr][buttonnr]
int h[9][9]; // hat-values:    [joysticknr][hatnr]

int joy_yoffset[9]; // y-offset of each joystick relative to the top
End

Process Main()
Begin

// Get number of joysticks
joy_num = joy_numjoysticks();

// Iterate over all joysticks
for(i=0; i<joy_num; i++)

// Get name and numbers
name[i]       = joy_name(i);
numaxes[i]    = joy_numaxes(i);
numballs[i]   = joy_numballs(i);
numbuttons[i] = joy_numbuttons(i);
numhats[i]    = joy_numhats(i);

// Calculate the yoffset for displaying
if(numbuttons[i]>10)
joy_yoffset[i+1] = 70+(numbuttons[i]-9)/2*10;
else
joy_yoffset[i+1] = 70;
end
joy_yoffset[i+1] += joy_yoffset[i];

// Build display
write( 0 , 0 , joy_yoffset[i]   , 0 , "Joystick"      );

write( 0 , 0  , joy_yoffset[i]+10 , 0 , "Number:"     );
write( 0 , 50 , joy_yoffset[i]+10 , 0 , i             );

write( 0 , 0  , joy_yoffset[i]+20 , 0 , "Axes:"       );
write( 0 , 50 , joy_yoffset[i]+20 , 0 , numaxes[i]    );

write( 0 , 0  , joy_yoffset[i]+30 , 0 , "Balls:"      );
write( 0 , 50 , joy_yoffset[i]+30 , 0 , numballs[i]   );

write( 0 , 0  , joy_yoffset[i]+40 , 0 , "Buttons:"    );
write( 0 , 50 , joy_yoffset[i]+40 , 0 , numbuttons[i] );

write( 0 , 0  , joy_yoffset[i]+50 , 0 , "Hats:"       );
write( 0 , 50 , joy_yoffset[i]+50 , 0 , numhats[i]    );

write( 0 , 140 , joy_yoffset[i] , 0 , "Axes"    );
write( 0 , 190 , joy_yoffset[i] , 0 , "Balls"   );
write( 0 , 240 , joy_yoffset[i] , 0 , "Buttons" );
write( 0 , 290 , joy_yoffset[i] , 0 , "Hats"    );

for( j=0 ; j<numaxes[i] ; j++ )
write_int( 0 , 140 , 10+j*10+joy_yoffset[i] , 0 , &a[i][j] );
end
for( j=0 ; j<numballs[i] ; j++ )
write_int( 0 , 190 , 10+j*10+joy_yoffset[i] , 0 , &t[i][j][0] );
write_int( 0 , 190 , 18+j*10+joy_yoffset[i] , 0 , &t[i][j][1] );
end
for( j=0 ; j<numbuttons[i] ; j++)
write_int( 0 , 240+(j%2)*20 , 10+(j/2)*10+joy_yoffset[i] , 0 , &b[i][j] );
end
for( j=0 ; j<numhats[i] ; j++)
write_int( 0 , 290 , 10+j*10+joy_yoffset[i] , 0 , &h[i][j] );
end

// Found joystick
write(0, 200, 200, 0, "FOUND JOYSTICK: " + name[i]);

end

// Set a resolution big enough for the display
set_fps(30,0);
set_title("Joystick tester");
if(mode_is_ok(320,joy_yoffset[joy_num],0,0))
set_mode(320,joy_yoffset[joy_num]);
elseif(joy_yoffset[joy_num]<=240)
set_mode(320,240);
else
set_mode(640,480);
end

// Update joystick state every frame until ESC or the X button is pressed
Repeat

for(i=0; i<joy_num; i++)
for(j=0; j<numaxes[i]; j++)
a[i][j] = joy_getaxis(i,j);
end
for(j=0; j<numballs[i]; j++)
t[i][j] = joy_getball(i,j,&t[i][j][0],&t[i][j][1]);
end
for(j=0; j<numbuttons[i]; j++)
b[i][j] = joy_getbutton(i,j);
end
for(j=0; j<numhats[i]; j++)
h[i][j] = joy_gethat(i,j);
end
end

frame;
Until(key(_ESC)||exit_status)

End

gecko

capas es una tonteria, pero si al inicio del juego pones " PRESS P1 START" y ahi conseguis el boton Start, y de acuerdo a ese resultado, y a la cantidad de botones y todo lo que estuvieron hablado, conseguis configurar todo el joystick?  :)

jeje, se que no es la idea, pero seguro puede servir...
Torres Baldi Studio
http://torresbaldi.com

FreeYourMind

Hhehehhehe, la cosa no funciona así. Podrias tocar los botones que quisieras, si en el código no llamas el código de un boton o tecla de nada te va servir por más press start's que pongas hheheeheheh  :D