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 !

vendredi 13 mars 2020

DCS - Ravitaillement en vol

Cela fait plus d'une semaine que je passe une partie de mes soirées à tenter de faire un ravitaillement en vol en Mirage-2000 dans DCS. Quelle plaie !

C'est vraiment difficile : l'approche vers l'avion ravitailleur se passe plutôt bien, j'arrive à être à peu près stable à quelques mètres du panier, mais alors, pour finaliser, il n'y a plus personne. La difficulté est que chaque action sur les commandes modifie plusieurs paramètres : l'on approche par exemple un poil bas du panier, alors on tire sur le manche, mais cela ralentit. On donne un poil de gaz, et pouf, on se retrouve au dessus et devant l'avion. Non seulement ça se joue au pouillème, mais en plus il faut apprendre a coordonner le manche, la manette et le palonnier d'une manière plutôt contre-intuitive pour aller viser dans le panier à 10 centimètres près.

Ça me rend complètement fou.

vendredi 21 février 2020

Tacview, DCS World et Linux

Il ne m'a pas fallu beaucoup de temps à faire du combat air/air dans DCS World pour comprendre l'intérêt de l'outil Tacview. En effet, lorsque l'on commence à comprendre les tactiques d'approche et d'évitement, on aimerait bien comprendre comment on a pu se faire dégommer par ce missile venu de nulle part. L'approche de Tacview est de fournir un petit plugin à DCS World (et X-Plane, et de nombreux autres softs de simu aérienne) qui enregistre les paramètres du vol, et qui permet de les rejouer dans leur interface, et donc d'observer manœuvres, départ (et arrivée !) de missiles, et ainsi de suite.

Maintenant, Tacview, c'est Windows-only. Mais de nos jours, Windows-only, c'est tout relatif. Alors, je n'avais pas spécialement envie de me lancer dans une complexe configuration de Wine, mais heureusement, Tacview est disponible directement dans Steam, et on peut donc laisser Steamplay faire sa magie (qui consiste, comme nous le verrons plus tard, à créer pour chaque application une espèce de chroot Windows minimal avec ses dépendances).

Tacview ayant démarré comme un grand, reste encore à enregistrer ses vols DCS World. Normalement, l'installeur trouve DCS World et copie les scripts au bon endroit, mais là, il est dans sa petite chroot Windows. Il faut donc copier manuellement les scripts. C'est expliqué sur le site Tacview, il faut donc l'adapter à ProtonDB. Il suffit de faire ceci, depuis la racine de son répertoire home (en supposant que c'est là qu'est le répertoire .steam qui contient les jeux) :

cp ~/.steam/steam/steamapps/common/Tacview/DCS/* ~/steam/steamapps/compatdata/223750/pfx/drive_c/users/steamuser/Saved\ Games/DCS/

Alors, qu'est ce que ça fait ? Ça copie le plugin DCS dans la chroot Windows (certains parlent de préfixe) de DCS World, le numéro magique, 223750, étant l'ID de l'application DCS World. Et là, en démarrant DCS World, on voit bien le plugin dans les options spéciales. Tout va bien !

Après un petit vol, on peut vérifier l'existence d'un fichier .acmi dans le répertoire "~/.steam/steam/steamapps/compatdata/223750/pfx/drive_c/users/steamuser/My Documents/Tacview", qui est donc dans le "My documents" du préfixe de DCS World. Sauf que forcément, depuis Tacview, on ne voit rien (puisque lui est dans son propre préfixe. Faut suive !). Une solution simple consiste simplement à faire un lien symbolique Tacview. Par exemple:

cd "~/.steam/steam/steamapps/compatdata/1174860/pfx/drive_c/users/steamuser/My Documents/Tacview"

ln -n "~/.steam/steam/steamapps/compatdata/223750/pfx/drive_c/users/steamuser/My Documents/Tacview" DCS

Et là, depuis Tacview, l'on peut charger un fichier, aller dans "My documents", puis dans le répertoire Tacview, puis dans le répertoire DCS, et hop, les vols sont là !

mercredi 29 janvier 2020

Plaque low-cost pour Warthog Hotas - Partie 2

Voilà, voilà, c'est fait, et c'est moins pire que je ne pensais ! Il a fallu se battre un peu avec la lamination à froid, qui n'adhère que d'un côté, mais je m'en suis sorti, et c'est plutôt utilisable.

lundi 20 janvier 2020

Plaque low-cost pour Warthog Hotas

Le souci, lorsque l'on a autant de boutons sur ses manettes, c'est de ne plus savoir ce qu'ils contrôlent. Alors afin de s'en souvenir (et aussi de faire joli !), de grands cinglés créent leurs propres plaques à poser par dessus leur manette des gaz, et cela donne des choses vraiment jolies. Pour des jeux plus grand public, comme Elite Dangerous, c'est carrément un business !

Ces plaques là, très pro, sont faites avec des plaques acryliques ou encore métalliques. Mais est-ce qu'on peut faire quelque chose à bas coût avec du matériel un peu plus standard ? C'est ce que j'essaie de découvrir.

Mon plan : imprimer sur papier simple ou légèrement cartonné, à partir des patrons de Arrowdynamixx fournis sur le forum X-Plane, mes propres plaques adaptées à chacun de mes avions favoris. Les laminer ensuite à froid, et basta, on devrait avoir quelque chose de raisonnablement solide et joli sans avoir besoin d'outillage spécialisé.

Ma première étape fut d'imprimer un patron représentant juste les contours, puis de le découper pour vérifier que la taille est correcte, et enfin choisir les fonctions de chaque bouton pour les rajouter au crayon à papier. Voici donc mon patron pour le Cirrus SF-50, le petit mono-réacteur fourni de base sur X-Plane.

Malheureusement, le papier trop fin laisse passer l'affichage luminescent. Il faudra donc soit utiliser un papier plus épais (à voir comment mon imprimante va le prendre), ou trouver comment éteindre les LED de la manette sous Linux (apparemment, il y a une astuce).

Prochaine étape, faire la plaque au propre avec Inkscape, puis faire l'impression et le laminage. Si cela fonctionne comme attendu, il ne me restera plus alors qu'à créer les plaques pour mes autres avions favoris : A320, A350, Diamond DA62, peut-être le Boeing 737, et peut-être bien également le Mirage 2000 de DCS World.

samedi 4 janvier 2020

Warthog HOTAS

C'est l'événement de ce début d'année, le Père Noël ayant été généreux, je suis maintenant l'heureux possesseur d'un Warthog HOTAS (pour "hands on throttle and stick", c'est à dire un joystick et une manette des gaz) et d'un palonnier TFRP. Et ça change la vie, aussi bien dans X-Plane que dans DCS World (et aussi dans Kerbal Space Program, mais on y reviendra).

Le HOTAS est de toute beauté, bien lourd, avec tout plein de boutons partout pour tout configurer comme on a envie. La manette des gaz vient avec deux poignées pour les gaz, un axe supplémentaire bien pratique pour les volets, et tout un tas de boutons que j'ai configuré dans X-Plane pour les trains d'atterrissage, le frein de parc, l'ouverture de la verrière (fun !), ou encore l'inversion de poussée des réacteurs et l'armement des aérofreins.

Le joystick, lui, monté sur une énorme plaque de métal, ne bougera pas. Muni d'un nombre impressionnant de boutons et de chapeaux, réplique du véritable A-10 oblige, on le sent bien dans la main et c'est un plaisir de faire les atterrissages manuels de gros porteurs.

Le palonnier, lui, est nettement moins impressionnant (mais nettement moins cher aussi). J'ai longuement hésité entre cet entrée de gamme et d'autres beaucoup plus sérieux, comme le MFG Crosswind, ou encore le Slaw Device, mais mon choix se confirme comme étant le bon: à moins de faire de l'hélico, là où la précision des pédales est fondamentale, ou beaucoup de GA (general aviation, c'est à dire pas de l'avion de ligne), c'est vraiment overkill. Pour gérer quelques virages avant et après la phase en pilote automatique, et pour le roulage, c'est amplement suffisant, surtout si l'on contrôle la roulette de nez avec la molette située sur la manette des gaz (qui manque cependant de précision, probablement le seul point noir de la manette).

Reste qu'il faut passer du temps à configurer tout ça. En particulier, il est à noter que les boutons métalliques à deux ou trois états ont généralement un état de moins: c'est à dire que l'enclencher correspond à une pression de bouton, et le dés-enclencher correspond au relâchement du bouton. Ce qui veut dire que si vous mettez, par exemple, la montée du train d'atterrissage sur la position haute, vous n'avez par défaut pas de position basse dans l'interface X-plane, par exemple, pour y configurer la descente du train d'atterrissage.

La solution officielle est d'utiliser le logiciel de configuration fourni par Thrustmaster, qui ne fonctionne que sous Windows. Heureusement pour nous autres Linuxiens, X-Plane comme DCS World proposent des fichiers de configuration supplémentaires pour créer des boutons virtuels correspondant aux positions relâchées de tous les boutons (voir les explications ici). Dans X-Plane version 1.41, le fichier pour Linux (HOTAS Warthog Throttle - Linux.joy) est incomplet, et il faut le compléter avec le fichier pour Windows (Joystick - HOTAS Warthog - Windows.joy). J'ai donc gardé l'en tête du premier, puis le corps du deuxième, et tout marche impeccable (à part un échange des axes gaz et volets, mais c'est bénin).

J'ai maintenant hâte de continuer à configurer mon HOTAS aux petits oignons pour X-Plane, et de commencer sérieusement à l'utiliser avec DCS World. Quant à Kerbal Space Program, les problèmes de contrôleurs sous Linux semblant avoir été résolus, ce sera l'occasion de tester en profondeur.

vendredi 3 janvier 2020

Bonne année !

Je vous souhaite à toutes et à tous une excellente année 2020, pleine de bonnes choses !

Petite année pour le blog, avec un minimum historique de 17 messages. J'étais bien parti, et puis la fin de l'année ayant apporté pas mal de changements, j'ai complètement oublié de venir vous causer. Je n'ai plus qu'à prendre une nouvelle fois la résolution d'être un peu plus loquace. Restez branché !