Gamoover

[move]Vous aimez le couscous-boulettes, le chorizo, la Force 4, et la mimolette ? Alors soyez les bienvenus sur Gamoover ! [/move]

Mame progammation : gestion de credits C++

Démarré par Dr_Lagaffe, Mercredi 21 Septembre 2011, 09:50:15 AM

Dr_Lagaffe

Est ce que quelqu'un a deja essayer de programmer un soft (C++ de preference ou python) pour envoyer des combinaisons de touches a mame.
Projet : faire un programme de gestion de credit ( compteur de credit virtuel) 8) oui oui je sais ca sert a rien mais je serais content ;D.

En gros : Avoir un soft qui ecoute les touches claviers et quand le monnayeur envoie une impulsion au IPac, le soft le detecte et execute une sequence d action ( ajouter un credit au compteur ) et multiplier le nombre de credit par piece ( 5 credits pour 100 yen par exemple)

Realisation :  J'ai un petit keylogger qui ecoute les touches et detecte l insertion d un credit.
Par contre je n arrive pas a executer de commande type sendkey sendinput pour les passer sur mame. Y compris apres avoir compile mame avec l option direct input !

Autre Option : Je peux utiliser Autohotkey pour envoyer une combinaison de touche et augmenter le nombre de credits mais je perds le compteur virtuel et toute autre possibilite d evolution du programme !!

Avez vous deja reussi a envoyer des sendkey a mame ? Des idees/suggestions?

Merci

Je sers la science et c'est ma joie

wikee

#1
Alors pour envoyer des "keys" a mame c'est un peu galère (si mes souvenirs sont bons il y à une histoire comme quoi mame accepte que les "raw" inputs au niveau du système (pour eviter le moindre lag) et donc si tu envoie un caractere via un soft ca ne les reconnait pas.


De mémoire il faut modifier la source et le recompiler (du moins c'est ce que j'avais du faire avec les versions datant un peu (il y a un ou deux ans))

edit: oui c'est ca il faut le recompiler en modifiant dans la source src\osd\windows\input.c
#define FORCE_DIRECTINPUT       1


Dans le genre, sur ma mamecab j'ai fait une petite appli en ahk qui tourne en tache de fond qui incrémente une valeur dans la base de registre chaque fois qu'un crédit est inséré dans la machine, ca me permet juste de savoir combien de crédits ont été inséré dans ma borne chaque année/mois.


New Astro City & Jeutel

Dr_Lagaffe

Merci wikee,

Citation de: wikee le Mercredi 21 Septembre 2011, 13:56:36 PM
Aune petite appli en ahk qui tourne en tache de fond qui incrémente une valeur dans la base de registre chaque fois qu'un crédit est inséré dans la machine, ca me permet juste de savoir combien de crédits ont été inséré dans ma borne chaque année/mois.

Merci pour l'idee, je n'y avais pas pense. J ai bien recompile mame avec direct input et je peux utiliser le ahk sans souci... Mais pour une raison obscure le sendkey c++ passe pas  ::) Peut etre que c'est juste un probleme dans mon code (plausible).
En tous cas je savais pas qu'on pouvait manipuler le registre avec les scripts ahk (j'avais pense a un fichier texte).

Donc ahk ca marche mais c++/sendkey non... Toujours en quete de debbugage du coup a titre 'educatif'
Je sers la science et c'est ma joie

Iro

Tu peux le faire directement dans les jeux. Mais je suppose que tu veux que ce soit globale.
Sinon tu récupéres une carte de crédit d'une borne, c'est exactement sont rôles.
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

Sir Kayne

A ma connaissance, il existe Coindrop, un petit soft pour gerer ca (mais difficile à trouver).
Sinon, il est toujours plus intéressant de le développer sois même  ^-
Tu pourras y inclure plus tard le pilotage de LED et afficheur de credit peut etre ?
Cherche : pédale d'accélération d'une Outrun Upright, Une Racingcab (outrunner ou Daytona), pcb RaveRacer, PCB Missile Command (he oui), une Spacegun et puis un flipper Raven (je l'aurais un jour...)
"Ne me dite pas que je ne peux pas faire quelque chose!" J.Locke

argonlefou

Citation de: Dr_Lagaffe le Jeudi 22 Septembre 2011, 03:28:08 AM
Merci wikee,

Merci pour l'idee, je n'y avais pas pense. J ai bien recompile mame avec direct input et je peux utiliser le ahk sans souci... Mais pour une raison obscure le sendkey c++ passe pas  ::) Peut etre que c'est juste un probleme dans mon code (plausible).
En tous cas je savais pas qu'on pouvait manipuler le registre avec les scripts ahk (j'avais pense a un fichier texte).

Donc ahk ca marche mais c++/sendkey non... Toujours en quete de debbugage du coup a titre 'educatif'
Salut,
Tu ne pourras pas envoyer des input avec le "sendkey" (~= message windows) alors que MAME récupère ses entrées par DirectInput (~= Directx, utilise Dinput.dll)
Pour faire ce que tu veux, il faut "hooker" la Dll de DirectInput (intercepter la réception de l'entrée DirectInput, analyser et éventuellement modifier la donnée) avec une Dll que tu aura préalablement codée toi-même.
Tu as une explication du pricipe ICI

Après à toi de chercher sur Google (y'a pas mal d'info apparemment) les fonctions à réécrire pour la dll directInput... :-[

Dr_Lagaffe


Citation
Tu peux le faire directement dans les jeux. Mais je suppose que tu veux que ce soit globale.
Sinon tu récupéres une carte de crédit d'une borne, c'est exactement sont rôles.
En effet je voudrais du global. La carte de credit effectivement ca pourrait etre une option.
Mais je trouve ca dommage de remplacer une contrainte software(mame/credits) par du hardware qui me sera inutile pour le reste ( j ai une naomi et le bios permet de regler le nombre de credit par coin )

Citation de: Sir Kayne le Jeudi 22 Septembre 2011, 08:12:42 AM
A ma connaissance, il existe Coindrop, un petit soft pour gerer ca (mais difficile à trouver).
Sinon, il est toujours plus intéressant de le développer sois même  ^-
Tu pourras y inclure plus tard le pilotage de LED et afficheur de credit peut etre ?
Impossible a trouver (pour moi lol) .... Retire de la distribution parceque au dela de multiplier les credits dans mame il recupere les impulsions des coins au niveau du frontend !!Du coup on peut s en servir aisement pour mettre une mamecab en exploitation avec infinite de jeux....
Il semblerait que les developpeurs mame aient demande le retrait du soft....

Citation
Tu ne pourras pas envoyer des input avec le "sendkey" (~= message windows) alors que MAME récupère ses entrées par DirectInput (~= Directx, utilise Dinput.dll)
Pour faire ce que tu veux, il faut "hooker" la Dll de DirectInput (intercepter la réception de l'entrée DirectInput, analyser et éventuellement modifier la donnée)
Super... une piste interessante a creuser!
Ca a l air tendu.... c'est bien se casser la tete alors que ahk marche tres bien... mais j aime me casser la tete...  :D
Encore du temps libre qui va etre engouli...
Je sers la science et c'est ma joie

argonlefou

Citation de: Dr_Lagaffe le Samedi 24 Septembre 2011, 17:25:21 PM
Super... une piste interessante a creuser!
Ca a l air tendu.... c'est bien se casser la tete alors que ahk marche tres bien... mais j aime me casser la tete...  :D
Encore du temps libre qui va etre engouli...
C'est ça qui est bon, utiliser du temps de libre à se casser la tête  =:))
Il y a un article sur le hook directx ICI malheureusement le fichier zip du code source n'existe plus.
On le retrouve ailleurs sur google (DInput-Hook-2005-22-01.zip) mais sur des sites sur lesquelles il faut s'enregistrer pour le telecharger, etc...

A ce que j'ai cru lire,il y peut être moyen de faire ça (un peu plus facilement ? ) en C# avec la librairie DirectX.
Si j'ai le temps de trouver un MAME et de le compiler avec l'option directinput je pourrais peut être tester ce que j'ai trouvé comme infos sur le sujet.

argonlefou

#8
Petit up :
j'ai eu le temps de tester et en effet il est très facile en C# de substituer/envoyer des commandes à un MAME compilé avec le "Force DirectInput"

J'ai fait rapidement un test avec un petit programme de fond, qui se hook au clavier et remplace un appui de la touche '5' (crédit P1) par une séquence de X impulsions de cette même touche.

@Dr_Lagaffe : je peux te filer le code si tu veux. C'est pas du C++ mais vu que ça utilise une fonction d'une dll windows native (user32.dll) tu peux te baser dessus pour gérer ça en C++. Ou, encore plus facile  :), continuer à ta guise en C#  ^-

Dr_Lagaffe

Citation de: argonlefou le Dimanche 25 Septembre 2011, 14:03:40 PM
Petit up :
j'ai eu le temps de tester et en effet il est très facile en C# de substituer/envoyer des commandes à un MAME compilé avec le "Force DirectInput"

J'ai fait rapidement un test avec un petit programme de fond, qui se hook au clavier et remplace un appui de la touche '5' (crédit P1) par une séquence de X impulsions de cette même touche.

@Dr_Lagaffe : je peux te filer le code si tu veux. C'est pas du C++ mais vu que ça utilise une fonction d'une dll windows native (user32.dll) tu peux te baser dessus pour gérer ça en C++. Ou, encore plus facile  :), continuer à ta guise en C#  ^-

Dans la serie : j 'ai teste pour vous argonlefou nous a fait un boulot de 'fou'. Merci super nouvelle. Oui je veux bien le code ( je te PM ) apres selon le temps libre je pousserai peut etre le cassage de tete a l'apprentissage du C# ... :D
En tous cas merci c'est super utile, grace a toi je comprends pourquoi mes keyb_event et autre sendkey restaient sans effet et je vais apprendre a hooker du direct x....
Max TY   ^-^
Je sers la science et c'est ma joie

argonlefou

Sources & Exécutable disponibles ICI

Je t'ai MP pour te donner quelques explications  ;)

Sir Kayne

Je me permet de télécharger le source, pour y jeter un coup d'oeil  :D
Cherche : pédale d'accélération d'une Outrun Upright, Une Racingcab (outrunner ou Daytona), pcb RaveRacer, PCB Missile Command (he oui), une Spacegun et puis un flipper Raven (je l'aurais un jour...)
"Ne me dite pas que je ne peux pas faire quelque chose!" J.Locke

argonlefou


Dr_Lagaffe

Merci pour les infos et pour les sources.
Meme en ne connaissant pas le C# ca reste comprehensible.
C'est quasi du clef en main pour faire ce que je voulais.  ^-
Je sers la science et c'est ma joie

argonlefou

Cool  ^-
Tiens nous au courant si tu as réussi à faire ce que tu voulais  :)

Dr_Lagaffe

Citation de: argonlefou le Lundi 26 Septembre 2011, 18:43:16 PM
Cool  ^-
Tiens nous au courant si tu as réussi à faire ce que tu voulais  :)

Salut Argon,
J'ai une question. Je suis pas loin de reussir a faire ce que je veux :
* Ecrire un fichier log avec historique des credits
* Affichage au demarage du compteur de credits virtuel
* multiplication du nombre de credit par insertion de coins.

Par contre je note un 'bug' ou tout du moins un effet dont je ne trouve pas la source qui est deja present dans le code que tu nous a fourni.
Le hook va identifier la pression de la touche uniquement 11 fois et planter a la 12e !!! curieux n est ce pas ?
Une idee la dessus ?
Je sers la science et c'est ma joie