mercredi 15 avril 2020

DCS - Faire fonctionner les interrupteurs du Warthog Hotas - Un exemple avec le P-51D

C'est pas tout d'avoir tout plein de boutons sur la manette, mais encore faut-il pouvoir s'en servir !

La principale difficulté avec la manette du Warthog Hotas est de configurer correctement les interrupteurs à 2 ou 3 positions. En effet, contrairement à un bouton que l'on pousse, et qui envoie une impulsion, les interrupteurs sont soit en position fermée, et alors ils envoient un signal continu, ou en position ouverte, et ils n'envoient pas de signal. Sans configuration spécifique, cela donne de drôles de choses, comme par exemple de devoir pousser et tirer pour activer un système, et de pousser et tirer encore une fois pour le désactiver. Or, ce qu'on veut, c'est activer en poussant, et désactiver en tirant.

Ça tombe bien, parce que DCS World sait faire. Avec le mythique P-51D par exemple, il existe d'excellents bindings, comme celui là par exemple, mais souvent soit ils ne fonctionnent pas sur les versions plus récentes de DCS World, soit ils se basent sur le logiciel de configuration du Warthog TARGET, qui ne tourne pas sous Linux et dont j'aimerais donc me passer.

Heureusement, il existe un (très) long thread qui explique exactement comment faire pour configurer tout ça manuellement. Et pour s'y retrouver, vous n'aurez même pas besoin de tout lire ! En effet, un commentateur a eu la bonne idée de créer un PDF qui explique tout, et qui est disponible sur ce post.

L'approche est vraiment la plus agréable: tout comme certains modules (par exemple le Mirage 2000) fournissent de nombreuses commandes du type "machin ON else OFF" qui réagissent très bien avec les interrupteurs du HOTAS (ou du 3M comme un dit en français), l'idée est d'ajouter nos propres "machin ON else OFF" afin de les retrouver dans le menu de configuration des commandes et de pouvoir y lier des interrupteurs.

Il faut donc aller modifier le fichier "default.lua" situé dans le sous-répertoire Input/.../Joystick de votre module (pour le P51-D, par exemple, il est situé dans Mods/aircraft/P-51D/Input/P-51D/joystick). Dans ce fichier, il faut retrouver les commandes qui nous intéresse, et créer une nouvelle version de ces commandes, avec un nouveau nom (par exemple en rajoutant le ON else OFF) et peut-être bien une nouvelle catégorie (je mets tout dans "Custom" histoire de m'y retrouver ensuite). Voici par exemple les lignes que j'ai rajouté:

{down = device_commands.Button_11, up = device_commands.Button_11, cockpit_device_id  = devices.ENGINE_SYSTEM, value_down = 0.0, value_up = 0.1, name = _('Mixture IDLE CUT OFF else RUN'), category = _('Custom')},
{down = device_commands.Button_11, up = device_commands.Button_11, cockpit_device_id  = devices.ENGINE_SYSTEM, value_down = 0.2, value_up = 0.1, name = _('Mixture EMERGENCY FULL RICH else RUN'), category = _('Custom')},
{down = device_commands.Button_8, up = device_commands.Button_8, cockpit_device_id  = devices.K14_GUNSIGHT, value_down = 1.0, value_up = 0.0,  name = _('Gunsight gyromotor power ON else OFF'), category = _('Custom')},
{down = device_commands.Button_7, up = device_commands.Button_7, cockpit_device_id  = devices.FRONT_SWITCH_BOX, value_down = 1.0, value_up = 0.0, name = _('Gun safety switch GUN CAMERA SIGHT else OFF'), category = _('Custom')},
{down = device_commands.Button_2, up = device_commands.Button_2, cockpit_device_id  = devices.FRONT_SWITCH_BOX, value_down = 0.3, value_up = 0.0,  name = _('Ignition switch BOTH else OFF'), category = _('Custom')},
{down = device_commands.Button_11, up = device_commands.Button_11, cockpit_device_id  = devices.FRONT_SWITCH_BOX, value_down = 0.3, value_up = 0.0, name = _('Bomb-rocket selector switch ROCKETS else SAFE'), category = _('Custom')},
{down = device_commands.Button_11, up = device_commands.Button_11, cockpit_device_id  = devices.FRONT_SWITCH_BOX, value_down = 0.2, value_up = 0.0, name = _('Bomb-rocket selector switch BOTH else SAFE'), category = _('Custom')},
{down = device_commands.Button_7, up = device_commands.Button_7, cockpit_device_id  = devices.WEAPON_CONTROL, value_down = 0.0, value_up = 0.1, name = _('Rockets release control switch OFF else SINGLE'), category = _('Custom')},
{down = device_commands.Button_7, up = device_commands.Button_7, cockpit_device_id  = devices.WEAPON_CONTROL, value_down = 0.2, value_up = 0.1, name = _('Rockets release control switch AUTO else SINGLE'), category = _('Custom')},
{down = device_commands.Button_12, up = device_commands.Button_12, cockpit_device_id = devices.ENGINE_CONTROL_PANEL, value_down = 1.0, value_up = 0.0, name = _('Fuel Booster ON else OFF'), category = _('Custom')},
{down = device_commands.Button_10, up = device_commands.Button_10, cockpit_device_id  = devices.ENGINE_CONTROL_PANEL, value_down = 1.0, value_up = 0.0, name = _('Starter Switch Cover Close else Open'), category = _('Custom')},
{down = device_commands.Button_3, up = device_commands.Button_3, cockpit_device_id  = devices.FUEL_SYSTEM, value_down = 1.0, value_up = 0.0, name = _('Fuel shut-off valve ON else OFF'), category = _('Custom')},

Prenons par exemple le plus simple, le "Gunsight gyromotor". J'ai simplement recopié la ligne du gyromotor, ajouté un up = device_commands.Button_8, un value_up = 0.0 pour indiquer que je veux retourner à la valeur 0.0 (c'est à dire off) lorsque l'interrupteur repasse à zéro, et j'ai changé le nom et la catégorie. Ensuite, au sein du jeu, je peux voir dans la configuration des commandes une nouvelle catégorie ("Custom", ou "Personnalisé" car il semble que j'ai choisi une catégorie pour laquelle il a une traduction), mon nouveau "Gunsight gyromotor power ON else OFF". Je le lie à l'interrupteur qui va bien, et youpie, on a un interrupteur qui fonctionne !

C'est parfois un poil plus compliqué pour d'autres commandes, pour lesquelles il va falloir retrouver la bonne valeur pour le value_down en s'inspirant des autres commandes déjà fournies, mais dans l'ensemble ça se fait très bien.

Je n'ai plus qu'à faire une nouvelle plaque laminée pour le P-51D !

Aucun commentaire: