Aller au contenu

Configuration

Deux fichiers .ini pilotent tout, chacun avec un rôle précis :

Fichier Rôle En une phrase
LedManager.ini Le chef d'orchestre Quoi afficher et vers qui l'envoyer
PicoCommandSender.ini L'adaptateur matériel Comment votre carte comprend les ordres

Des outils graphiques arrivent

Un outil de configuration visuel est prévu. En attendant, cette page couvre les réglages qu'un utilisateur modifie réellement — le reste peut rester tel quel.

LedManager.ini — l'orchestrateur

Déclarer vos senders

Chaque panel physique (un par joueur, par exemple) est un sender :

[CommandSenders]
Default=P1
Global=GLOBAL

[CommandSender:P1]
Name=Pico Player 1
Enabled=true
Player=1
Executable=PicoCommandSender.exe
Arguments=daemon --ini "PicoCommandSender.ini" --sender P1
StartupDelayMs=18000

Le réglage à connaître : StartupDelayMs laisse au Pico le temps de s'initialiser au démarrage. Si vos LED s'allument trop tard, ne le réduisez pas trop — un Pico pas prêt ignore les commandes.

Router les joueurs et les cibles

[PlayerRouting]
1=P1
2=P2

[TargetRouting]
MATRIX1=GLOBAL
STRIP1=GLOBAL

Les effets « cabinet » (matrice de score, bandeaux) partent vers le sender GLOBAL, les panels joueurs vers P1/P2.

PicoCommandSender.ini — votre matériel

Le port série

[Serial]
Port=COM3
BaudRate=115200

Port est le premier réglage à vérifier après l'installation : ouvrez le Gestionnaire de périphériques Windows et repérez le port COM attribué à votre Pico.

Votre panel

Les sections [Hardware:P1] et [GPIO:P1] décrivent boutons et branchements — voir Matériel.

La policy couleur

Toutes les LED ne rendent pas toutes les couleurs fidèlement. La [ColorPolicy] permet d'autoriser, refuser ou remplacer des couleurs sans recompiler quoi que ce soit :

[ColorPolicy.Fallbacks]
GOLD=YELLOW
PURPLE=VIOLET
GRAY=WHITE

Ici, si un jeu demande du doré, le panel affichera du jaune. GRAY est le nom canonique du gris ; BLACK signifie éteint.

Adapter à un autre programme LED

LedManager ne connaît pas le protocole final de votre matériel : il remplit des gabarits texte définis dans [CommandTemplates]. Pour piloter un autre programme, on ne change que ces gabarits :

[CommandTemplates]
SetSlot=SLOT {slot} {color}
Flash=FLASH {target} {color} {durationMs}
All=ALL {color}
Clear=CLEAR

Variables disponibles : {slot}, {target}, {color}, {durationMs}, {value}, {text}, {player}, {system}, {rom}… Le détail des méthodes d'intégration est dans Cartes LED externes.

Personnaliser un jeu ou un système : les overrides

Envie de couleurs Rainbow Road pour Super Mario Kart ? Créez un patch épars — seul ce que vous changez y figure, le reste continue de venir d'APIExpose et de ses mises à jour :

overrides\systems\snes.json          → tous les jeux SNES
overrides\games\snes\smk.json        → juste Super Mario Kart (gagne sur le système)
{
  "schema": "ledmanager.panel-override.v1",
  "slots":   { "1": { "color": "GREEN" }, "2:3": { "color": "RED" } },
  "outputs": { "VR1 Lamp": { "slot": 1 } }
}

"1" = slot 1 du joueur 1, "2:3" = slot 3 du joueur 2 ; les clés d'outputs sont les noms de sorties du jeu (lampes arcade). Le fichier overrides\README.txt du plugin contient des exemples complets, et l'application LedManagerSetup générera ces fichiers pour vous.

Pendant une partie

Quelques comportements utiles à connaître (aucun réglage requis) :

  • au lancement d'un jeu, le panel du système est mémorisé (snapshot) ;
  • les effets ingame sont des surcouches ciblées ; un OFF sur un bouton le restaure depuis le snapshot ;
  • après 2 secondes sans activité, le panel du système est restauré ;
  • START et SELECT vivent leur vie indépendamment des boutons B1–B8 ;
  • les lampes MAME gardent leur propre état : une restauration du panel ne rallume pas une lampe éteinte par le jeu.

Les effets ingame : default.mem.effects.json

Les réactions aux moments de jeu (vie perdue, boss touché, pièce ramassée…) sont décrites dans default.mem.effects.json, à la racine du plugin — un catalogue éditable, sans toucher au code :

  • Règles par famille (genericRules) : une règle par famille de moments (resources.lives, scoring.collectibles, combat.enemies…) — elle s'applique à tous les jeux, sans mapping par jeu.
  • Effets : flash_restore, sweep, pulse, sparkle, health_feedback, matrix_score… avec cibles (ALL_BUTTONS, STRIP1, RANDOM_COLUMN, MATRIX1), couleurs, durées et anti-spam (throttleMs).
  • Couleur du jeu : quand l'événement porte sa propre couleur (les deltas de score arcade : l'avion orange de 1944…), elle prime sur la couleur de la règle — l'effet prend la teinte de la cible détruite.
  • Par joueur : les événements qui portent un index joueur sont routés vers le panel du bon joueur (playerField), sinon vers GLOBAL.
  • Couches (effectLayers) : les effets ingame vivent au-dessus du panel du jeu et sous les alertes — chaque source a sa priorité, rien ne s'écrase.

Exemple : flash doré sur chaque trésor

Dans genericRules, la famille inventory.items déclenche sparkle doré sur ALL_BUTTONS + STRIP1 avec restauration automatique : ramassez une clé dans Zelda ou une émeraude dans Sonic, la borne scintille — deux jeux, zéro configuration.