DOF2DMD est un petit utilitaire pour les bornes d'arcade permettant d'afficher des banières de jeu, des scores et des animations sur un appareil DMD réel ou émulé.
Il couvre les cas d'utilisation suivants :
- Lancement du jeu : affichage de la banière du jeu
- Score : affichage du score pour 1 à 4 joueurs avec des dispositions différentes selon le nombre de joueurs
- Événements : affichage d'images, de vidéos ou d'animations gif en fonction des événements du jeu (par exemple, abattre un avion dans 1942 déclenchera une explosion)
- Texte : affichage de texte avec différentes polices, tailles et animations en fonction des événements
DOF2DMD offre une simple API HTTP (voir API) pour afficher des images, des animations et des scores.
Un cas d'utilisation majeur est d'interface DOFLinx et sa version modifiée de MAME de DDH69 pour faire en sorte que le DMD affiche des animations pendant que vous jouez à MAME.
Voici à quoi cela ressemble avec un DMD émulé (en utilisant les extensions Freezy DMD) :
DOF2DMD s'appuie sur FlexDMD, qui utilise lui-même les extensions Freezy DMD
-
Téléchargez et installez .NET 8 "Runtime desktop" de Microsoft : https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-8.0.6-windows-x64-installer
-
Téléchargez DOF2DMD depuis la section Realease, créez un dossier et extrayez le contenu de l'archive dans ce dossier
-
Ajustez
settings.inisi nécessaire :; Paramètres pour DOF2DMD ; L'URL de base que DOF2DMD écoutera. Par défaut http://127.0.0.1:8080 ; NE PAS COMMENTER, car DOFLinx lit settings.ini pour déterminer où envoyer les requêtes url_prefix=http://127.0.0.1:8080 ; Affiche le score pendant x secondes, puis revient à la banière. Par défaut 5 secondes. ;display_score_duration_s=5 ; Sortie détaillée dans le fichier debug.log si debug=true. Par défaut false. ;debug=false ; Chemin vers les images (relatif à DOF2DMD ou absolu). Par défaut "artwork" ;artwork_path=artwork ; Largeur en pixels pour le DMD. Par défaut 128 ;dmd_width=128 ; Hauteur en pixels pour le DMD. Par défaut 32 ;dmd_height=32 ; Image à afficher au démarrage de DOF2DMD. Par défaut DOF2DMD (c'est-à-dire artwork/DOF2DMD.png ou DOF2DMD.gif) ;start_picture=DOF2DMD ;Activez l'affichage automatique du tableau de bord ou de la banière après avoir utilisé un appel ;score_dmd=1 ;marquee_dmd=1 ; Non implémenté --- ;scene_default=marquee ;number_of_dmd=1 ;animation_dmd=1
-
Lancez DOF2DMD
-
Vous devriez voir le logo DOF2DMD, soit sur un DMD virtuel, soit sur un DMD réel si vous avez configuré
DmdDevice.ini -
Si vous utilisez DOFLinx pour MAME :
- Installez DOFLinx - voir Configuration DOFLinx pour DOF2DMD
- Obtenez la version modifiée de MAME
- Lancez DOFLinx (cela devrait être au démarrage si vous êtes sur une borne d'arcade).
- Lancez votre jeu MAME. La version modifiée de MAME communiquera avec DOFLinx, qui à son tour déclenchera des appels API vers DOF2DMD.
-
Profitez-en !
Les images et animations doivent se trouver dans le dossier artwork (par défaut dans le chemin DOF2DMD sous le dossier artwork).
Note
Je fournis un ensemble d'images, afin que vous puissiez tester et commencer à éditer les fichiers .MAME de DOFLINX.
Vous aurez probablement besoin de png/gif. J'ai créé un outil qui peut aider - ARTWORK4DMD.
Pour plus de png/gif, il existe un pack que vous pouvez télécharger, et d'autres que vous pouvez acheter sur
Neo-Arcadia. Si vous
possédez un PixelCade, vous avez droit à une énorme
bibliothèque d'art DMD en pixel perfect. Pour créer vos propres visuels, vous pouvez utiliser un
outil de Pixel Art ou un éditeur de Gif, comme aseprite.
Il existe des fichiers aseprite d'exemple dans le dossier ingame.src.
DOF2DMD est un serveur écoutant des requêtes HTTP simples. Une fois démarré, vous pouvez utiliser les éléments suivants :
[url_prefix]/v1/display/picture?path=<chemin de l'image ou de la vidéo>&animation=<fade|ScrollRight|ScrollLeft|ScrollUp|ScrollDown|None>&duration=<secondes>
Affiche une image, une animation GIF ou une vidéo.- path: Le chemin du fichier de l'image ou de la vidéo à afficher
- duration: Si la durée est de 0 pour une animation/vidéo, elle sera limitée à la durée de la vidéo ou de l'animation. Si le temps est de -1, elle sera permanente
- animation: L'animation appliquée à la scène fade|ScrollRight|ScrollLeft|ScrollUp|ScrollDown|None
[url_prefix]/v1/display/score?players=<Nombre de joueurs>&player=<joueur actif>&score=<score>&cleanbg=<true|false>
Affiche un tableau de scores avancé avec une disposition de 1 à 4 joueurs et des crédits- players: le nombre de joueurs pour la disposition des scores. Optionnel, par défaut 1
- player: le joueur mis en avant
- score: La valeur du score à afficher pour le joueur actif
- cleanbg: Nettoie l'écran actif (si non nettoyé, le score sera affiché par-dessus l'image/l'animation actuelle)
- credits: Crédits insérés dans le jeu. Optionnel
[url_prefix]/v1/display/scorebackground?path=<chemin de l'image ou de la vidéo>
Ajoute une image, une animation GIF ou une vidéo en tant que fond sur le tableau de scores.- path: Le chemin du fichier de l'image ou de la vidéo à afficher/ajouter au tableau de scores
[url_prefix]/v1/blankCet endpoint efface ou vide l'affichage[url_prefix]/v1/exitCet endpoint quitte ou ferme l'application[url_prefix]/v1/versionCet endpoint renvoie les informations de version de l'application[url_prefix]/v1/display/text?text=<texte>?size=XS|S|M|L|XL&color=<couleur hexadécimale>&font=<police>&bordercolor=<couleur hexadécimale>&bordersize=<0|1>&cleanbg=<true|false>&animation=<ScrollRight|ScrollLeft|ScrollUp|ScrollDown|None>&duration=<secondes>
Affiche du texte avec ou sans animation- text: Le texte à afficher (le texte peut être divisé en plusieurs lignes en utilisant | comme séparateur)
- size: La taille du texte (Extra Small (XS), Small (S), Medium (M), Large (L) ou Extra Large (XL))
- color: La couleur du texte en format hexadécimal (par exemple : color=FFFFFF)
- font: La famille de police à utiliser pour le texte (fichier de police bitmap, il y a quelques exemples dans le dossier des ressources, il suffit d'utiliser le nom de la police avant le symbole _ . Par exemple : Matrix ou BTTF)
- bordercolor: La couleur de la bordure du texte en format hexadécimal (par exemple : color=FFAAFF)
- bordersize: La taille de la bordure du texte (0 ou 1)
- cleanbg: Nettoie l'écran actif (si non nettoyé, le texte sera affiché par-dessus l'image/l'animation actuelle)
- animation: Animation du texte. ScrollRight|ScrollLeft|ScrollUp|ScrollDown|None
- duration: temps pour afficher le texte sur le DMD (Si une animation est sélectionnée, l'écran restera noir une fois l'animation terminée si le temps est supérieur à l'animation elle-même. Si le temps est de -1 dans une animation de texte None, il sera permanent, utiliser -1 dans une autre animation présente un écran noir)
[url_prefix]/v1/display/advanced?path=<chemin de l'image ou de la vidéo>&text=<texte>?size=XS|S|M|L|XL&color=<couleur hexadécimale>&font=<police>&bordercolor=<couleur hexadécimale>&bordersize=<0|1>&cleanbg=<true|false>&animationin=<FadeIn|FadeOut|ScrollOffRight|ScrollOffLeft|ScrollOnLeft|ScrollOnRight|ScrollOffUp|ScrollOffDown|ScrollOnUp|ScrollOnDown|FillFadeIn|FillFadeOut|None>&animationout=<FadeIn|FadeOut|ScrollOffRight|ScrollOffLeft|ScrollOnLeft|ScrollOnRight|ScrollOffUp|ScrollOffDown|ScrollOnUp|ScrollOnDown|FillFadeIn|FillFadeOut|None>&duration=<secondes>
Affichage avancé avec animations. Le texte avec ou sans image/vidéo/fond gif animé ou image/vidéo/gif animé peut être utilisé- text: Le texte à afficher (le texte peut être divisé en plusieurs lignes en utilisant | comme séparateur)
- path: Le chemin du fichier de l'image ou de la vidéo à afficher
- size: La taille du texte (Extra Small (XS), Small (S), Medium (M), Large (L) ou Extra Large (XL))
- color: La couleur du texte en format hexadécimal (par exemple : color=FFFFFF)
- font: La famille de police à utiliser pour le texte (fichier de police bitmap, il y a quelques exemples dans le dossier des ressources, il suffit d'utiliser le nom de la police avant le symbole _ . Par exemple : Matrix ou BTTF)
- bordercolor: La couleur de la bordure du texte en format hexadécimal (par exemple : color=FFAAFF)
- bordersize: La taille de la bordure du texte (0 ou 1)
- cleanbg: Nettoie l'écran actif (si non nettoyé, le texte sera affiché par-dessus l'image/l'animation actuelle)
- animationin: Animation d'affichage :
FadeIn|FadeOut|ScrollOffRight|ScrollOffLeft|ScrollOnLeft|ScrollOnRight|ScrollOffUp|ScrollOffDown|ScrollOnUp|ScrollOnDown|FillFadeIn|FillFadeOut|None - animationout: Animation d'affichage :
FadeIn|FadeOut|ScrollOffRight|ScrollOffLeft|ScrollOnLeft|ScrollOnRight|ScrollOffUp|ScrollOffDown|ScrollOnUp|ScrollOnDown|FillFadeIn|FillFadeOut|None - duration: temps pour afficher la scène sur le DMD (Si une animation est sélectionnée, l'écran restera noir une fois l'animation terminée si le temps est supérieur à l'animation elle-même. Si le temps est de -1, il sera permanent)
Pour générer des effets, DOFLinx utilise des fichiers .MAME situés dans le dossier MAME de DOFLinx.
DOFLinx peut communiquer avec DOF2DMD, en utilisant la commande FF_DMD de DOFLinx.
La commande FF_DMD peut appeler n'importe quelle API de DOF2DMD.
Voici un fichier DOFLinx.ini minimal qui fonctionnera avec DOF2DMD :
# emplacement de vos fichiers et systèmes
COLOUR_FILE=<chemin DOFLinx>\config\colours.ini
DIRECTOUTPUTGLOBAL=<chemin DOFLinx>\config\GlobalConfig_b2sserver.xml
PATH_MAME=<chemin DOFLinx>\MAME\
MAME_FOLDER=<chemin de l'exécutable MAME (note : il doit s'agir de la version modifiée de MAME par DOFLinx)>
# Quand activer, et plus précisément quel est le processus MAME pour démarrer les choses
PROCESSES=Mame64
MAME_PROCESS=Mame64
# DOF2DMD
PATH_DOF2DMD=<emplacement de l'exécutable DOF2DMD et du fichier settings.ini>Note :
PATH_DOF2DMD: l'emplacement de l'exécutable DOF2DMD et du fichier settings.iniMAME_FOLDER: chemin d'accès à l'exécutable MAME qui doit être la version modifiée de MAME par DOFLinx
DOFLinx générera automatiquement les commandes suivantes :
- Lors du démarrage de DOFLinx :
http://<hôte:port>/v1/version- pour vérifier que DOF2DMD est en marche. DOFLinx essaiera de le démarrer sinon.http://<hôte:port>/v1/display/picture?path=mame/DOFLinx- pour afficher l'image d'accueil DOFLinx
- Lors du lancement d'un jeu :
http://<hôte:port>/v1/display/picture?path=mame/<nom-rom>&duration=<durée>&animation=<animation>- pour afficher un PNG pour la bannière
- Lors de la partie :
http://<hôte:port>/v1/display/score?player=<joueur actif>&score=<score>&cleanbg=<true|false>- pour afficher le score du joueur donnéhttp://<hôte:port>/v1/display/score?players=<nombre de joueurs>&player=<joueur actif>&score=<score>&cleanbg=<true|false>&credits=<crédits>- pour afficher le score du joueur donné en indiquant la disposition du tableau de scores en fonction du nombre de joueurs
- Lors de la fermeture de DOFLinx :
http://<hôte:port>/v1/display/score?player=1&score=0- réinitialiser le score à 0http://<hôte:port>/v1/blank- pour effacer le DMD (écran noir)http://<hôte:port>/v1/exit- pour demander à DOF2DMD de se fermer proprement
Pour ajouter des effets comme l'affichage d'animations ou de texte pendant le jeu, vous devez insérer la commande FF_DMD dans le fichier <rom>.MAME qui correspond au jeu.
FF_DMD,U,<APPEL API DOF2DMD sans hôte ni préfixe /v1/>
FF_DMDest la commandeUest pour une commande utilisateur (spécifique à DOFLinx)- Ensuite, l'URI pour appeler DOF2DMD sans l'hôte ni le préfixe /v1/
Exemples :
- Afficher l'animation de bonus en jeu
artwork/ingame/bonus.gif:FF_DMD,U,display/picture?path=ingame/bonus&duration=0&animation=none - Afficher une image statique
artwork/mame/pacman.png:FF_DMD,U,display/picture?path=mame/pacman&duration=-1 - Afficher un Gif animé s'il existe ou revenir au png :
artwork/mame/pacman.gif:FF_DMD,U,display/picture?path=mame/pacman&duration=-1
Consultez les fichiers .MAME inclus dans DOFLinx, qui contiennent déjà des commandes FF_DMD.
Une fois DOF2DMD démarré, vous pouvez utiliser votre navigateur pour le tester :
- Afficher la version http://127.0.0.1:8080/v1/version
- Afficher une image dans le dossier artwork, sous-dossier
mame, imagegalaga: http://127.0.0.1:8080/v1/display/picture?path=mame/galaga&duration=-1&animation=fade - Définir le score du joueur 1 (par défaut) à 1000 en utilisant la disposition par défaut pour 4 joueurs et en nettoyant la scène actuelle : http://127.0.0.1:8080/v1/display/score?score=1000
- Définir le score du joueur 2 à 3998, crédits à 5 en utilisant la disposition pour 2 joueurs sur la scène actuelle : http://127.0.0.1:8080/v1/display/score?players=2&player=2&score=3998&cleanbg=false&credits=5
- Définir le joueur actif sur le joueur 2 et définir le score à 2000 en utilisant la disposition pour 2 joueurs et en nettoyant la scène actuelle : http://127.0.0.1:8080/v1/display/score?players=2&activeplayer=2&score=2000
- Afficher du texte en utilisant la taille M avec la police Back To the Future, couleur de police orange, couleur de bordure rouge, et une animation de défilement vers la droite pendant 10 secondes : http://127.0.0.1:8080/v1/display/text?text=HELLO|friends&font=BTTF&size=M&color=FFA500&bordersize=1&bordercolor=FF0000&cleanbg=true&animation=scrollright&duration=10
- Afficher du texte avec une image de fond en utilisant la police White Rabbit en blanc et bordure bleue avec une animation de fondu en entrée et un défilement vers la droite en sortie et en attendant 10 secondes entre les animations : http://127.0.0.1:8080/v1/display/advanced?path=mame/DOFLinx&text=Hello%20Friends!!&font=WhiteRabbit&size=M&color=0000ff&bordersize=1&bordercolor=ffffFF&cleanbg=true&animationin=FadeIn&animationout=ScrollOffRight&duration=10
- Effacer le DMD http://127.0.0.1:8080/v1/blank
- Quitter DOF2DMD http://127.0.0.1:8080/v1/exit
ou utilisez les scripts PowerShell demo.ps1 et demo2.ps1.
Voici ce que je prévois d'implémenter :
- Des appels d'API qui ne sont pas encore implémentés
- Tout ce qui manque dans le fichier
settings.ini - Un plugin pour Launch box / big box qui s'interface avec DOF2DMD pour afficher les systèmes et les bannières des jeux lors de la navigation (partiellement implémenté)
- Un plugin pour Attract-Mode qui s'interface avec DOF2DMD pour afficher les systèmes et les bannières des jeux lors de la navigation
Je compte sur la communauté Pinball et Arcade pour s'entraider via les discussions GitHub. Je serai également présent.
Merci à
- @ojacques pour avoir créé la première version de ce projet
- DDH69 pour DOFLinx, MAME pour DOFLinx, et son soutien dans ce projet. Pensez à 💲faire un don à DDH69 pour soutenir son travail.
- L'équipe Pixelcade qui m'a inspiré à implémenter quelque chose pour mon ZeDMD, y compris le support d'autres DMD. Veuillez les vérifier, on m'a dit que leurs DMDs sont de premier ordre, de multiples tailles, et si vous en possédez un, il y a une tonne d'œuvres disponibles.
- Le créateur de ZeDMD - Zedrummer, qui est un DMD sympa et bon marché. Vous pouvez acheter ZeDMD dans plusieurs endroits.
- Tous ceux de Monte Ton Cab (FR) - quelle communauté accueillante !


