XQF 1.0.6, la résurrection

Posté par  (site web personnel) . Édité par BAud, Benoît Sibaud, palm123, Nÿco et jihele. Modéré par Nÿco. Licence CC By‑SA.
42
2
nov.
2014
Jeu

En juillet 2013, MCMic proposait aux lecteurs de LinuxFr.org d’occuper leur été en contribuant à un jeu libre et proposait une liste de jeux intéressants qui avaient fortement besoin de contribution. J’avais rajouté en commentaire un autre projet qui n’était pas un jeu en lui-même, mais qui était très utile aux joueurs et qui avait grandement besoin de contributions : XQF.

Et voilà, finalement je m’y suis collé ! XQF est un logiciel libre qui liste des serveurs de jeu en ligne pour permettre au joueur de trouver facilement une partie qui lui plaît. XQF est certainement un des plus anciens dans sa catégorie (créé en 1998) et, oui, il est donc toujours actif, incroyable ! (tous les détails dans la suite de la dépêche)

logo XQF

Sommaire

Résumé

8 ans après la publication de la version 1.0.5 et un petit peu plus d’un an après l’invitation de MCMic, voici la version 1.0.6 ressuscitée et remise à jour par votre serviteur ! XQF 1.0.6 a été publié le dimanche 26 octobre 2014 et une mise à jour 1.0.6.2 a été faite ce 2 novembre (il faut dire que fêter une résurrection le jour des défunts, ça a son charme).

De très nombreux jeux ont été ajoutés. Mais pendant tout ce temps, l’un a eu le temps d’être forké 4 ou 5 fois et l’autre de devenir libre, puis à nouveau propriétaire… Le gros défaut d’XQF était de ne plus proposer une liste de jeux pertinente ! Le code a été quelque peu rafraîchi et la traduction française a été complétée, et très soignée !

Il reste encore plein de vieilleries dans le code, mais XQF n’a jamais été aussi stable. Vous trouverez le détail de toutes ces bonnes choses dans la suite de la dépêche. Pour l’occasion le dépôt a migré de subversion vers git avec l’aval de l’équipe originelle, afin de faciliter les contributions (à commencer par les miennes).

À quoi sert XQF ?

XQF, Smokin'Guns, ZEQ2 Lite, Wolrd of Padman, Unvanquished, Turtle Arena

Chaque jeu possède habituellement son propre explorateur de serveurs en ligne, intégré au jeu lui-même, mais cela signifie qu’il faut lancer chaque jeu un par un pour lister toutes les parties jouables de ces différents jeux.

XQF permet à l’utilisateur de lister les jeux multijoueurs qu’il a installés (et proposés par XQF) et, pour chacun de ces jeux, XQF fournit une liste de serveurs maîtres (modifiable). Les serveurs maîtres sont les serveurs qui listent les serveurs qui hébergent des parties jouables. XQF forme alors une liste unifiée de serveurs de jeu avec le nom du serveur, le type de jeu, le nombre de joueurs actuellement présents et la plupart du temps les noms des joueurs connectés. Les jeux (et les serveurs maîtres) sont affichés dans la colonne de gauche et la liste des serveurs disponibles est affichée à droite, en fonction de la sélection de l’utilisateur. Il suffit alors de double-cliquer sur un serveur ou de cliquer sur « Connexion » pour que XQF lance le jeu avec les bons paramètres.

Explorateur de serveur intégré à Unvanquished

Exemple d’explorateur de serveur de jeu intégré, celui d’Unvanquished. À l’heure où cette copie d’écran a été faite, il valait mieux chercher un autre jeu… XQF est là pour ça !

XQF centralise au même endroit les listes de plusieurs jeux, ainsi on peut par exemple décider de jouer à un jeu parce qu’il est fréquenté à ce moment là ou parce qu’un autre joueur particulier est présent et on peut donc savoir sur quel jeu il joue à cet instant.

Jeux ajoutés

De nombreux dérivés des moteurs id Tech ont été ajoutés, mais pas seulement !

  • Xonotic est un fork du jeu Nexuiz dont le développement a été arrêté par son développeur principal (et qui a revendu le nom), la communauté de joueurs a donc migré vers Xonotic. Les joueurs pouvaient configurer XQF pour traiter Xonotic sous le nom de Nexuiz, mais voici une solution plus adaptée.
  • Unvanquished, un fork en développement actif du jeu Tremulous désormais arrêté. La communauté de joueurs de Tremulous est très dispersée, entre ceux qui jouent toujours à l’antique Tremulous 1.1.0, ceux qui jouent à la GamePlayPreview du développement abandonné de Tremulous 2 et ceux qui jouent à ses mods comme TremFusion… Le jeu Tremulous était un des derniers jeux ajoutés avant que le développement d’XQF ne se mette en pause. J’ai donc ajouté Unvanquished, Tremulous GPP et TremFusion afin de permettre aux joueurs de rejoindre facilement un serveur peuplé, quelle que soit la version du jeu.

XQF, mods de Tremulous et Unvanquished
N’hésitez plus entre Unvanquished et Tremulous, jouez au jeu auquel d’autres jouent en même temps que vous.

  • Smokin'Guns, un jeu de tir à l’âge du Western américain, façon Le bon, la brute et le truand.
  • Urban Terror, un jeu qui exploite un scénario désormais très classique dans le genre : « forces spéciales contre terroristes ». Ce jeu avait été en fait ajouté dans la version 1.0.5.2, jamais annoncée et très peu distribuée en dehors du dépôt svn… À l’époque le jeu était basé sur ioquake3 et s’appelait ioUrbanTerror, désormais le moteur de jeu n’est plus libre et est basé sur le SDK d’id Software et une migration sur le nouvel Unreal Engine 4 est en cours… Autant dire que sans la publication de cette nouvelle version d’XQF, ce jeu aurait été ajouté pour rien !
  • OpenArena, un projet qui ambitionne d’être un clone libre de Quake Ⅲ Arena et donc de fournir des cartes libres en remplacement de celles de Quake 3. Il n’est peut-être pas aussi soigné, mais il est tout à fait jouable et on trouve beaucoup de serveurs disponibles.
  • World of Padman, un FPS très coloré.
  • ZEQ2 Lite qui emmène le joueur dans l’univers de Dragon Ball Z.
  • Alien Arena, un FPS se déroulant dans un univers de science fiction façon années 50 et avec des extra terrestres à la manière de Mars Attack, et basé sur le moteur CRX (un fork d’id Tech 2).
  • Quelques autres mods plus anecdotiques comme Reaction, Turtle Arena ou Q3 Rally.
  • Jedi Knight 2: Outcast, XQF proposait déjà la prise en charge de Jedi Knight 3: Academy et un contributeur avait proposé en 2008 un patch pour l’épisode précédent. Il aura fallu du temps pour qu’une personne y jette un œil, mais voilà, patch accepté !

XQF, Jedi Outcast

  • OpenTTD, est une réécriture libre du jeu original Transport Tycoon Deluxe, un « jeu de gestion et planification urbanistique ». Attention, pour interroger les serveurs de ce jeu une mise à jour de QStat est nécessaire. Cette mise à jour est déjà très ancienne mais beaucoup de distributions ne distribuent que des versions préhistoriques de QStat.
  • Enemy Territory: Quake Wars, un jeu dans la lignée de Wolfenstein:Enemy Teritory mais se passant dans l’univers de Quake.
  • Enemy Territory: Legacy, l’initiative qui maintient et améliore le code libre du jeu Wolfenstein: Enemy Territory.

Mises à jour et nouveautés

  • L’icône d’XQF a été redessinée en SVG, afin d’être rendue proprement sur nos bureaux modernes qui ont tendance à afficher de très grandes icônes !

icône du shell

  • XQF respecte désormais la spécification XDG pour les répertoires de base, en particulier les chemins des fichiers de configuration. Le dossier de configuration, anciennement nommé ~/.qf/, se trouve désormais dans $XDG_CONFIG_HOME/xqf/ (généralement ~/.config/xqf/). XQF 1.0.6 détecte automatiquement lorsqu’un ancien dossier de configuration existe et le déplace vers son nouveau chemin.

  • Unvanquished, Wolfenstein: Ennemy-Territory et Savage utilisent des codes couleurs étendus et XQF ne filtrait que les codes couleurs de Quake 3, ce qui avait pour conséquence de laisser apparaître les balises étendues dans les noms de serveurs ou de joueurs. C’est corrigé !

  • La liste des serveurs maîtres a été mise à jour (par exemple, le maître ioquake3 remplace celui d’id Sofware) et de nombreux jeux ont vu leur numéro de version de protocole actualisé (notamment War§ow qui change cela souvent…).

  • XQF ne plante plus lorsqu’un serveur envoie un caractère spécial. En fait, le bug est ancré très profondément : XQF lit la sortie de Qstat en mode raw et Qstat utilise le codage ISO-8859-1 en sortie raw. Or, XQF est localisé en UTF-8, et g_io_channel_read_chars retourne une erreur lorsqu’il reçoit un caractère non UTF-8. La solution élégante serait de réécrire toute cette partie en utilisant la sortie XML de Qstat qui peut être demandée en UTF-8, mais dans l’immédiat, un contournement simple et efficace a été trouvé : le flux brut de Qstat est lu en mode binaire (g_io_read_chars laisse alors tout passer) et les caractères non ASCII sont ensuite filtrés. Les serveurs qui retournent des caractères spéciaux sont rares et, en attendant une éventuelle prise en charge de la sortie XML de Qstat, on évite au moins de planter XQF parce qu’il y a un serveur allemand parmi mille sur cette planète qui envoie un caractère ß. Begrüßen !

Corrections et nettoyage

Le code obsolète est en cours de nettoyage ; il reste encore plein de choses à nettoyer, mais j’ai priorisé le nettoyage de code obsolète qui était devenu cassé à cause de changements dans des bibliothèques tierces (Glib je pense à toi). Ce qui marche en mode compatibilité est laissé en l’état pour cette version et sera corrigé à partir de cette publication. En effet, à défaut d’avoir pu faire du release early, release often, au moins je veux faire du oui, mais pas trop tard.

Mais surtout, en corrigeant plusieurs problèmes, je me suis rendu compte qu’au moins trois d’entre eux étaient présents dès le premier commit sur le tout premier dépôt CVS en l’an 2000…

Lorsque XQF filtrait les balises couleurs dans les noms de serveurs, il lisait parfois un caractère en dehors des limites d’une chaîne de caractères, ce qui provoquait plus tard une erreur de malloc à un moment toujours inattendu…

En portant le mécanisme de lecture de descripteur de fichier vars GIOchannel, j’ai corrigé un bug qui était dû à un Gobject nettoyé plusieurs fois (plus exactement le descripteur de fichier où XQF lisait la sortie de Qstat), ce qui signifie qu’avec un peu de malchance on essaie de libérer un zone déjà réutilisée et hop le segfault.

Plus anecdotique, il manquait une virgule dans une liste de paramètres de jeu de Quake 2, ce qui concaténait deux paramètres en un…

De nombreux patchs qui étaient maintenus par Debian en marge du projet ont été importés, afin de simplifier le travail de paquetage par les distributions. Avec le temps cette pile de patchs était devenue la seule version d’XQF compilable, désormais cette branche a été fusionnée avec le tronc commun. Un grand merci à Jordi Mallach de chez Debian pour avoir maintenu XQF pendant toutes ces années de vaches maigres !

Ce qui est abandonné

La prise en charge de GTK+1 est définitivement enterrée et seule la version GTK+2 est prise en charge. Le nettoyage du code a commencé, mais pour le moment, c’est plus une décision politique qu’une réalisation technique : il s’agit de se libérer d’une contrainte et de pouvoir continuer le développement la tête libre, sans se soucier des vieilleries. Ainsi, il devient plus facile de remplacer les appels de fonctions obsolètes.

Et oui il serait peut-être temps, on ne va pas attendre GTK+4 pour acter la migration vers GTK+2 !

Bugs connus

Pour le moment, XQF n’indique plus la progression de l’actualisation d’une liste de serveurs (mais XQF indique lorsqu’il a terminé de le faire). Cette régression est due à une réécriture de l'analyseur de liste de serveurs obtenue par les serveurs maîtres et de l'analyseur de description de chacun de ces serveurs. Ces analyseurs étaient cassés suite à l’obsolescence de plusieurs composants utilisés et le comportement était erratique. Le retour visuel de l’actualisation est encore manquant, mais l’urgence était de faire en sorte que XQF n’arrête pas cette actualisation en cours de route quand quelque chose lui déplaît…

Lorsque l’on met à jour une liste de serveurs et que l’option d’actualisation des information de ces mêmes serveurs est activée, l’actualisation se fait correctement sauf pour la liste des joueurs connectés. Une actualisation normale met à jour cette liste.

Ces bugs ne portent pas atteinte à la stabilité de XQF.

Télécharger XQF 1.0.6

Les sources d’XQF peuvent être téléchargées sur la page dédiées aux archives de version.

XQF 1.0.6 est déjà en cours d’intégration dans Debian et Ubuntu, les plus bidouilleurs pourront donc essayer d’installer les versions 1.0.6 déjà empaquetées par Debian ou par Ubuntu mais non encore officiellement distribuées.

Pour des raisons administratives, la version 1.0.6 correspond à la révision qui a été utilisée pour se faufiler in extremis avant le gel de Debian Jessie. La version 1.0.6.1 correspond à l’incorporation dans la branche principale d’un patch qui a été écrit pour permettre à Debian (et certainement d’autres distributions) d’empaqueter proprement XQF. La version 1.0.6.2 correspond à quelques corrections de langue française en vue de la présente dépêche.

Vous pouvez donc dès maintenant télécharger XQF 1.0.6.2 « édition spéciale LinuxFr.org » en cliquant sur le lien suivant :

Lien suivant. ;-)

Contribuer

Le dépôt a migré depuis un vieillissant dépôt subversion hébergé par SourceForge vers un tout nouveau dépôt git hébergé par GitHub.

Cette version n’ambitionne pas d’être parfaite, elle ambitionne seulement de remettre XQF sur les rails. Si de nouveaux jeux ont été ajoutés, il est possible que certains autres soient moins bien pris en charge maintenant qu’avant par la seule force du temps et de l’obsolescence. De nombreuses choses sont à améliorer et à réécrire dans le code.

Cette publication est donc aussi faite dans le but de soumettre XQF à quelques paires d’yeux supplémentaires. N’hésitez pas à vous servir d’XQF, et je vous invite fortement à rapporter des bugs (ici), et si vous trouvez une solution, n’hésitez pas à forker puis proposer vos corrections !

Aller plus loin

  • # Cool

    Posté par  . Évalué à 2.

    Voilà c’est tout. Je vais l’installer et le garder, ça me permettra sans doute d’improuver ma productiviti ;P

    • [^] # Re: Cool

      Posté par  (site web personnel) . Évalué à 5.

      Si tu installes le paquet Ubuntu ou Debian, la seule différence notable que tu verras par rapport à la 1.0.6.2 sera une horrible faute de français dès la fenêtre principale (en fait un mot anglais non traduit qui est souvent écrit à l’anglaise en français car son orthographe est très proche bien que différente). Le reste des modifs de la 1.0.6.2 sont sous le capot et ne changent rien aux fonctionnalités, seulement la manière de faire.

      N’hésite pas à rapporter les bugs que tu rencontres, il y en a forcément.

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: Cool

        Posté par  . Évalué à 1.

        Je vais sans doute suivre la branche master sur git :P C’est bien plus amusant.

        • [^] # Re: Cool

          Posté par  (site web personnel) . Évalué à 9.

          Je te le déconseille sauf si tu veux participer à l’aventure du développement, dans ce cas là je t’encourage. :)

          Si tu veux aider à débuger XQF en connaissance de cause, bienvenue ! Voici quelques informations à savoir :

          XQF est un projet vieux de 16 ans et qui a stagné entre 6 et 8 ans : les dernières modifications qui ont été faites il y a moins de 8 ans avant la reprise du développement ne touchent rien à la façon dont fonctionne le logiciel (ajoutent seulement des jeux par exemple).

          Beaucoup de code encore utilisé a été écrit pour GTK+1, pour le moment tout ce qui a été fait a été de permettre que ce code compile encore avec GTK+2, mais il n’a pas été complètement réécrit pour GTK+2 ou 3. Le code ne compile qu’avec le switch -DGTK_ENABLE_BROKEN=1, qui veut dire ce que ça veut dire, ce n’est pas -DGTK_ENABLE_DEPRECATED=1 mais BROKEN, XQF utilise du code qui est considéré comme cassé, pas seulement obsolète.

          Certaines parties sont en refonte complète et peuvent casser du jour au lendemain. Lorsque j’ai réécrit certaines parties, j’ai joué au chat et à la souris avec les obsolescences. Par exemple si XQF utilisait la fonction toto, la doc de toto disait « toto est obsolète, il faut utiliser toto_ng », mais la doc de toto_ng disait que cette fonctionnalité était elle-même rendue obsolète par la fonction tata elle-même rendue obsolète par la fonction tata_ng, etc. Et à chaque montée d’API, il faut prévoir des cassures dans les coins !

          Je ne garantie pas la continuité des données en dehors des versions taggées. Il est arrivé par exemple que des versions de développement de XQF enregistre en cache une liste de serveur mal formée (due à des caractères spéciaux mal filtrés), ce qui signifie que même une version stable de XQF pouvait se prendre les pieds dans le tapis après avoir utilisé une version non stable, en relisant les listes. Autre exemple, lors du passage à $XDG_CONFIG_HOME, j’ai utilisé provisoirement un nom de chemin, puis finalement un autre. XQF ne prend en charge que la transition entre les noms de fichiers de configuration utilisés dans les versions stables.

          Cependant, je préviens dans les tickets quand une intervention manuelle est nécessaire après la correction d’un bug qui peut être propagé par des fichiers écrits.

          On vient de mettre en place un système d’intégration continue qui vérifie la compilation avec gcc et clang à chaque commit et qui permettra de faire des tests plus poussés. Mais pour le moment ça ne vérifie que le succès de la compilation, et ça ne garantit pas que le succès du programme lui-même.

          À bientôt peut-être, effectivement ça peut être très amusant, et toucher un vieux code peut être quelque chose de très passionnant. :-)

          ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: Cool

        Posté par  . Évalué à 1.

        D’ailleurs, quand je veux changer le path du binaire qstat, avec --with-qstat /usr/bin/quakestat, on dirait que ça plante sévère. git 4daadd4983d75d998389f6f90433dba57a8647b4

        • [^] # Re: Cool

          Posté par  (site web personnel) . Évalué à 2.

          Hum, tu peux m’en dire plus?

          Au fait, c’est --with-qstat=quakestat avec un “ = ”;-)

          ce commentaire est sous licence cc by 4 et précédentes

  • # XQF pour d'autres types de jeu

    Posté par  . Évalué à 5.

    Salut,

    Est-il possible d'intégrer des jeux comme Minetest à XQF ?
    A priori c'est du côté de qstat qu'il faut voir, et il est plutôt adapté aux FPS/IDTech, mais en terme de type d'infos il me semble qu'on retrouve les mêmes choses: un serveur maître, des joueurs, des "flags" qui explicitent la configuration du serveur…

    Voir: http://servers.minetest.net/ (qui a en plus l'inconvénient d'avoir son code javascript hébergé chez Google).

    D'autant qu'en ce moment sous Debian, y'a ça: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733974 ; la raison c'est une librairie JS qui tarde à être mise à jour dans Debian.

    Est-ce que ça n'intéresserait pas aussi la communauté des joueurs de RTS ? Vu que je ne pense pas qu'il y ait d'équivalent pour ces jeux.

    • [^] # Re: XQF pour d'autres types de jeu

      Posté par  (site web personnel) . Évalué à 2.

      Même question pour d'autre jeu comme CatchChallenger…

      Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

    • [^] # Re: XQF pour d'autres types de jeu

      Posté par  (site web personnel) . Évalué à 5.

      C’est une très bonne idée d’ajouter des jeux comme Minetest.

      XQF gère surtout des FPS parce qu’il repose énormément sur QStat et que ce dernier gère surtout des FPS, mais ce n’est pas une obligation pour XQF.

      Connais-tu un moyen d’interroger un serveur seul?

      Je m’explique, cette liste donne une liste de tous les serveurs avec leur description, mais cela signifie que pour mettre à jour la description d’un seul serveur, il faut tout télécharger. Aussi, si le serveur maître ne répond pas temporairement, il faut pouvoir interroger le status des serveurs déjà connus ou rajoutés manuellement en favoris.

      Je viens de créer un ticket pour ça: https://github.com/XQF/xqf/issues/81

      Je l’ai classé en « long term » et ça veut dire ce que ça veut dire: il faut écrire un parseur spécifique pour ce jeu donc ça peut probablement mettre beaucoup de temps. N’hésite surtout pas à renseigner ce ticket avec toutes les informations que tu trouveras pour ce jeu.

      Il faut découvrir entre autre:

      • comment récupérer une liste de serveur depuis un maître (à priori c’est acquis: http://servers.minetest.net/list ) ?
      • quel format pour le maître (ici du JSON) ?
      • comment interroger un serveur indépendamment du maître ?
      • quel format pour le serveur ?
      • comment lancer le jeu avec les bons paramètres pour rejoindre le bon serveur ?
      • quelles sont les noms de variables utiles pour XQF (nom du serveur, type de jeu, nom des utilisateurs etc.) ?

      Plus tu donneras d’information, et plus la chance de voir XQF gérer Minetest augmente. ;-)

      ce commentaire est sous licence cc by 4 et précédentes

  • # Pas mieux

    Posté par  . Évalué à 3.

    Sympa l'usine à gaz mais les fonctionnalités proposées sont pas du luxe pour les joueurs :
    - filtre de latence, jeux, mods, maps, localisation des serveurs, slots dispo, publics/privé…
    - recherche de joueurs (avec des filtres aussi)
    - beaucoup de jeux supportés
    Et pleins d'autres options pour améliorer l'expérience vidéo ludique, et trouver des "bons" serveurs.

    J'avais cherché une alternative mais je crois pas qu'il y ait plus complet.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.