Revenir au plan du site

Éviter les conflits de clavier, touches fantômes ou forcées...


Je ne sais pas si certains d'entre vous ont des souvenirs de jeux à plusieurs sur CPC (Target Renegade, IK+, Panza Kick Boxing) mais il arrivait parfois que notre personnage se bloque et le copain voyant ça (alors qu'il était en train de perdre), faisait exprès d'appuyer sur le plus de touches possibles pour nous faire suer.

Et bien ce qu'il faut savoir, c'est que si trois touches enfoncées forment le début d'un rectangle, la quatrième touche manquante est considérée comme enfoncée. On va s'écrire un petit programme qui met ça en évidence avec un vrai CPC et certains émulateurs (dans ACE ça s'active ou se désactive via F12 / Keyboard / Keyboard clashes). Si vous êtes sur émulateur, vous aurez en plus à batailler avec votre propre clavier de PC qui n'est peut-être pas capable d'envoyer toutes les touches simultanément, il vous faudra un clavier dit "gaming" avec une technologie anti-ghosting ou n-key rollover.

La technologie anti-ghosting [Extrait de Max E-Sport]

La technologie anti-ghosting repose donc logiquement sur le fait que les claviers gamer ne peuvent pas se verrouiller ou créer des actions non demandées même en appuyant sur plusieurs touche en simultanés. Même si de nombreux claviers gamer sont dotés de cette technologie tu devras lors de ton choix tout de même te référer à la mention « Key Rollover » qui t’indiquera le nombre de touches pouvant être activé en simultanément comme par exemple 10KRO ou 5KRO.

Nous te conseillons grandement d’opter pour un clavier « N-Key Rollover » (NKRO) qui signifie tout simplement qu’il n’y a pas de limites de touches et qu’il ne souffre en aucun cas du phénomène de ghosting. C’est le type de clavier le mieux optimisé pour du gaming ! (ndlr : Et l'émulation bien sûr!)

Et le petit programme qui affiche l'état de chaque touche du clavier sur CPC/Plus
buildsna
bankset 0

org #100
run #100
ld bc,#7F80+%1101 : out (c),c ; mode 1
LaBoucle
call lectureMatriceClavier
ld hl,#C000
ld de,matriceClavier
ld b,10
afficheLigne
  push hl
  ld c,8
  ld a,(de) : inc de ; lire la ligne dans le buffer clavier
  afficheBit
    add a
    ld (hl),%1111 : jr c,Non : ld (hl),%11110000 : Non
    inc hl : inc hl
    dec c
    jr nz,afficheBit
  pop hl
  ld a,l : add 80 : ld l,a : ld a,h : adc 0 : ld h,a ; plus loin dessous
  djnz afficheLigne
WaitVBL
ld b,#F5
.noVBL in a,(c) : rra : jr c,.noVBL
.VBL in a,(c) : rra : jr nc,.VBL
jp laBoucle

lectureMatriceClavier
ld hl,matriceClavier
ld bc,#f782
out (c),c
ld bc,#f40e
ld e,b
out (c),c
ld bc,#f6c0
ld d,b
out (c),c
out (c),0
ld bc,#f792
out (c),c
ld a,#40
ld c,d
.loop ld b,d
out (c),a ; sélectionner la ligne
ld b,e
ini ; lire et stocker dans notre tableau
inc a
inc c
jr nz,.loop
ld bc,#f782
out (c),c
ret
matriceClavier defs 10,#FF

En visuel (zoom sur l'écran, recadré), vous avez la matrice clavier, allant de la ligne 0 à la ligne 9 (en bas), les bits forts sont à gauche


Si vous appuyez sur les trois touches D, I, K et que vous n'avez pas activé les conflits de touche, vous aurez ceci à l'écran


Avec un véritable CPC ou un émulateur qui gère le keyclash, vous aurez ceci à l'écran


Et si votre clavier de PC est un mauvais clavier, il vous sera impossible d'activer autant de touches en même temps



Ceci étant dit, regardez bien la matrice, le curseur est concentré sur les bits 0,1 et 2 mais trois des quatre directions du joystick aussi!

Si vous devez concevoir un jeu qui se joue à plusieurs, préférez QAGH+espace par exemple pour bien distinguer ces touches de l'attribution joystick (ou du curseur!)

Vous pouvez aussi faire un curseur sur le pavé numérique avec F1,F2,F3,F5 et F0 pour le feu.

Bref, je vous remets la matrice ci-dessous et laisse libre cours à votre imagination pour proposer quelque chose de sympa à vos futurs joueurs ;)

Matrice Amstrad du clavier AZERTY Français de France mais pas de Navarre

Bit:
Ligne
7 6 5 4 3 2 1 0
#40 F Dot Entrée F3 F6 F9 Curseur Bas Curseur Droite Curseur Haut
#41 F0 F2 F1 F5 F8 F7 Copie Curseur Gauche
#42 Contrôle $ @\ Shift F4 # > Retourne * < CLR
#43  : / = + M ù % P ^ ¦ ) [ - _
#44  ; . , ? K L I O ç 9 à 0
#45 Espace N J H Y U è 7  ! 8
#46 V B (Joy2 fire3) F (Joy2 fire2) G (Joy2 fire1) T (Joy2 right) R (Joy2 left) ( 5 (Joy2 down) ] 6 (Joy2 up)
#47 X C D S Z E " 3 ' 4
#48 W CAPS-LOCK Q TAB A Échappe é 2 & 1
#49 DEL Joy1 fire3 Joy1 fire2 Joy1 fire1 Joy1 right Joy1 left Joy1 down Joy1 up