NSA - Non Solo Amiga
SOFTWARE => Linguaggi di programmazione e scripting => Topic aperto da: Allanon - 26 ſettembre 2011, 19:38:18
-
Sono consapevole che in questo periodo sto chiedendo come un forsennato, ma i forum servono ad ampliare/condividere le conoscenze giusto? :lol:
Il mio quesito riguarda i codici di input delle SDL; come sapete sto scrivendo Emula (http://http://www.nonsoloamiga.com/forum/viewtopic.php?f=13&t=703&hilit=emula) e dal momento che una delle feature è avere uno schema di input comune a tutti gli emulatori sto scrivendo una parte del programma che modifica i vari file di configurazione degli emulatori per rispecchiare le preferenze di input dell'utente.
Mi sono imbattuto nella definizione dei tasti di VisualboyAdvance che recita:
# Keys values are in the format YXXX where Y is the device number. 0 means
# keyborad and XXX is the SDL define for the desired key (read SDL_keysym.h).
#
# If Y is greater than 0, it means joystick number Y-1 and it uses the
# following format for XXX:
#
# - if XXX < 20, XXX is the axis number multiplied by 2. An even number means
# movement to the negative side (on the X axis, it means left). An odd
# number means movement to the positive side (on the X axis, it mean
# right). For the Y axis, negative means up and positive means down.
# X axis is usally axis number 0 and Y is axis number 1.
# - if 20 >= XXX > 30, then XXX is the HAT number multiplied by 4 plus the
# direction: 0 for up, 1 for down, 2 for right and 3 for left. Example:
# 0021 is HAT 0 down, 0026 is HAT 1 right.
# - if 80 >= XXX > 100, XXX is the joystick button number (XXX-080).
#
# Default key configuration is (value in parenthesis):
#
# Left Left Arrow (0114)
# Right Right Arrow (0113)
# Up Up Arrow (0111)
# Down Down Arrow (0112)
# A Z (007a)
# B X (0078)
# L A (0061)
# R S (0073)
# Start ENTER (000d)
# Select BACKSPACE (0008)
# Speed up SPACE (0020)
# Capture F12 (0125)
#
Joy0_Left=0114
Joy0_Right=0113
Joy0_Up=0111
Joy0_Down=0112
Joy0_A=007a
Joy0_B=0078
Joy0_L=0061
Joy0_R=0073
Joy0_Start=000d
Joy0_Select=0008
Joy0_Speed=0020
Joy0_Capture=0125
Io sinceramente non c'ho capito molto... c'è qualche anima pia che possa chiarirmi il concetto?
I codici dei pulsanti standard sono i codici ASCII, ma se dovessi mappare un Pad?
-
Io sinceramente non c'ho capito molto... c'è qualche anima pia che possa chiarirmi il concetto?
I codici dei pulsanti standard sono i codici ASCII, ma se dovessi mappare un Pad?
In effetti spiegato come hai trovato tu è un bordello.
Allora, le SDL danno un numero ad ogni pad connesso al pc.
Solo che ad esempio (ma qua anche con poseidon) se hai un pad con una croce direzionale e 2 analogici, per le SDL hai 3 pad connessi al pc.
Detto questo vba pare usare una maschera esadecimale per definire i pad ed i bottoni.
Quando trovi in modo generico assi x ed y si riferiscono al pad digitale, mentre gli "hat" sono i "pomelli" degli analogici.
Tu hai quindi 4 bit che identificano (in VBA) il "pad in generale" : Y X X X
Se Y < 1 stai definendo la tastiera
Se Y è > 0 vuol dire che stai definendo un pad, ed il numero del pad nelle strutture sdl è y-1.
Perciò se trovi ad esempio 0222, il bit y è < 1 quindi xxx vuol dire un tasto della tastiera
Se trovi 1222 il bit y è > 0 e quindi stai usando il pad in questo caso il pad che ha come id y-1 ovvero 0 (il primo pad)
Se stai usando il pad se il resto dei bit xxx è minore di 20, xxx è il numero dell'asse del pad moltiplicato per 2 + la direzione (0 è in genere l'asse x, 1 è l'asse y) se il numero è dispari= sinistra, pari=destra, per l'asse x e per l'asse y se il numero è dispari= su , pari=giù
Presumo che se xxx in decimale == 3, l'asse sarà la y e la direzione è su.
Se invece il resto dei bit xxx è >= 20 ma minore di 30, singifica che stai usando lo stick analogico in questo caso XXX significa che l'id del joy analogico è (xxx-direzione)/4 con idjoy*4+0 = giù ,id*4+1=su etc.
A naso direi che se hai 27 come XXX in decimale id=parte intera di 27/4= joy n°6, direzione= parte decimale di (27/4) * 4 =3=sinistra
mentre 80>=xxx>100 indicano i bottoni premuti, facendo bottone= XXX-080.
E' una scelta macchinosissima però.
Se vedi ad esempio il define # Left Left Arrow (0114)
0 vuol dire keyboard
114 in decimale è 276 guardando il SDL_keysym.h salta fuori che è SDLK_LEFT= 276
Spero di non essere stato troppo contorto nella spiegazione, ma pare che sia questo quello che fa il vba :D
-
Mamma mia che casino...
grazie della spiegazione, credo di avere le idee un po' più chiare adesso.
Però una domandina al volo:
metti che ho un pad simile a quello della playstation, SDL "vede" tre pad? E i pulsanti?
:think:
Domattina a mente fresca provo a fare qualche esperimento :D
-
Mamma mia che casino...
grazie della spiegazione, credo di avere le idee un po' più chiare adesso.
Però una domandina al volo:
metti che ho un pad simile a quello della playstation, SDL "vede" tre pad? E i pulsanti?
:think:
Domattina a mente fresca provo a fare qualche esperimento :D
vede anche quelli, sul vba mentre 80>=xxx>100 indicano i bottoni premuti, facendo bottone= XXX-080.
metti che ho un pad simile a quello della playstation, SDL "vede" tre pad?
Hai ragione scusa, mi ricordavo un espediente che avevo usato per far funzionare un joy dual-analog su morphos , in realtà più che 3 pad distinti SDL vede 6 "assi" diversi , 2 per ogni joy.
Ad esempio questo è il codice SDL di un mio mezzo port di grid wars 2:
SDL_JoystickGetAxis(gJoystick, 0) <----- asse x primo joy analogico
SDL_JoystickGetAxis(gJoystick, 1) <----- assse y primo joy analogico
SDL_JoystickGetAxis(gJoystick, 3) <----- asse x secondo joy analogico
SDL_JoystickGetAxis(gJoystick, 2) <----- assse y secondo joy analogico
Al di là delle SDL, purtroppo ti tocca codificare i vari valori nelle preferenze di vba.
l'unica è smanettare un po' e vedere :D :D , perchè in effetti è un bel bordello configurarlo :P
Edit :
qua c'è una configurazione anche del joypad http://http://mandrivausers.org/index.php?/topic/8836-configuring-visual-boy-advance/page__view__findpost__p__71924
questo invece è un programmino in c++ sul sito di vba per configurare il joy http://http://vba.ngemu.com/downloads/SDL-Test.cpp