Ce site web utilise des cookies afin d'assurer le confort d'utilisation de celui-ci.
En poursuivant votre navigation sur ce site, vous acceptez le dépôt et l'utilisation de cookies sur votre ordinateur/téléphone.

Mise à jour du launcher - page d'options

Bonjour

Ca fait quelques mois que je n'ai pas donné de nouvelles du launcher, mais j'ai enfin fini ce sur quoi je travaille depuis ces quelques mois : la page d'options. Vous pouvez télécharger la nouvelle version du launcher, avec cette nouvelle page d'options, ici : Cliquer ici

Aperçu du launcher de T-O

Le changement le plus évident est l'ajout d'un 3ème onglet appelé "Options", avec plein de texte et de boutons quand on clique dessus. Mais le plus important est ce que ces boutons permettent de faire.

Faisons les dans l'ordre.
Au début, un choix de langues qui, pour l'instant, est sauvegardé mais ne fait rien. J'en parlerai plus tard. Puis, une petite option pour choisir si un jeu se lance automatiquement ou pas une fois téléchargé (au début, ça le faisait tout le temps, mais je me suis rendu compte que ça pouvait être énervant). Pour l'instant, juste un détail.

Ensuite, il est maintenant possible de choisir la taille du launcher. C'était peut être la partie la plus intéressante pour vous, mais la plus difficile de mon côté. C'est beaucoup plus compliqué que ça en a l'air, car il y a beaucoup de choses à gérer à chaque fois qu'on déplace le moindre élément. Mais bon, maintenant, vous devriez pouvoir utiliser le launcher agréablement quelque soit la résolution de vos écrans.

Ensuite, il est possible de choisir le dossier des jeux, ou d'un jeu en particulier (mais je reviendrai plus tard sur ce point). Ca peut être utile pour ceux qui voudraient par exemple avoir le launcher sur le bureau, et les jeux dans program files ou sur un autre disque. Mais ça sera surtout utile pour une fonctionnalité que j'implémenterai plus tard : la recherche des jeux sur le disque.
Tant qu'à proposer une fonctionnalité comme ça, je me suis occupé à bien la faire : quand vous changez le dossier, le launcher vous proposera de déplacer ou copier les jeux avec. Mais, lors d'un déplacement vers une clé USB, faudra voir comment je gère les sauvegardes situées dans AppData.

Puis, il y a 3 cases à cocher, permettant de choisir si l'icône de notifications s'affiche, et quand le launcher se réduit dans la zone de notifications.
Pour l'instant, pour sortir le launcher de la zone de notifications, il faut faire un clic gauche sur l'icône. Il y aura quelque chose de plus propre plus tard, quand on aura décidé ce que fait cette icône.

 

Et enfin, il y a un bouton valider. Ce bouton permet évidemment de sauvegarder les paramètres. Mais j'en parle car c'est beaucoup moins simple qu'il n'y parait. Ce bouton est tellement compliqué qu'il justifie un point technique à lui tout seul.

Donc, pour la plupart des programmes, les options sont stockées dans un fichier de configuration : à côté du binaire, ou dans un dossier de l'utilisateur (généralement C:\Users\nom_d_utilisateur\AppData ou mes documents). Mais aucune des 2 solutions ne me convient : je ne veut pas le mettre à côté du binaire, car si ce dernier est sur le bureau, ça va y rajouter un fichier que l'utilisateur ne veut pas voir. Et je ne veut surtout pas le mettre dans un autre dossier, car ça va détruire la portabilité que je m'efforce de conserver.
Les options sont dont stockées en ressources : les ressources sont des fichiers inclus directement dans le .exe. C'est par exemple le cas de l'icône pour n'importe quel programme. Pour mon launcher, toutes les images sont stockées en ressources.
Problème : il est impossible de modifier un programme lors de son lancement (pour des raisons très techniques : lorsque Windows lance un programme, il crée en mémoire une copie du .exe via une technique appelée file mapping. Cette technique copie certaines parties du fichier en mémoire. Si le fichier est modifié et que sa taille change, un contenu chargé plus tard pourra être faux et provoquer énormément d'erreurs, ce qui dans le cas d'un programme, le ferait crasher instantanément). Un programme ne peut donc pas lui-même modifier une de ses ressources. Pour pouvoir le faire, il faut donc bidouiller.

La seule modification permise sur un programme en cours d'exécution est le renommage (et le déplacement sur le même disque, mais du point de vue de l'OS, ça revient au même). Pour modifier mon programme, je choisis d'en modifier une copie : je renomme celui en train de s'exécuter en [name].tmp (par exemple, si le programme s'appelle TO_launcher.exe, je le renomme en TO_launcher.exe.tmp), je le passe en fichier caché, puis je le copie vers [name] (par exemple TO_launcher.exe). Le programme en train de s'exécuter est alors TO_launcher.exe.tmp, et TO_launcher.exe n'est pas en cours d'exécution. Je change alors les options dans le nouveau TO_launcher.exe, donc quand l'utilisateur lancera TO_launcher.exe pour la prochaine fois, ses nouvelles options seront chargées (et pour l'instance courante, la question ne se pose pas, car je peut modifier directement les options en mémoire).

Il reste ici 2 problèmes : d'abord, l'utilisateur peut lancer le TO_launcher.exe avant d'avoir quitté le TO_launcher.exe.tmp. Le TO_launcher.exe.tmp ne pourra alors plus sauvegarder ses options puisque TO_launcher.exe est en cours d'exécution. J'ai donc fait en sorte que l'utilisateur ne puisse pas lancer plusieurs instances du launcher. Comme ça concerne le changement d'une fonctionnalité, j'en parlerai plus après ce point technique.
Et le 2ème problème, moins important, est que le TO_launcher.exe.tmp existe encore à la fin : il ne peut pas se modifier lui-même, mais il ne peut pas non plus se supprimer lui-même.
Ma solution ici est de créer un petit programme que je vais placer dans %TMP% (souvent C:\Users\nom_d_utilisateur\AppData\Local\Temp ). Ce petit programme va attendre que TO_launcher.exe.tmp se ferme, puis le supprimer. Enfin, au prochain démarrage, TO_launcher.exe supprimera ce petit programme.

Fin du point technique.

 

J'en parlais dans le point technique : il n'est plus possible de lancer 2 instances du launcher en même temps. Lorsque le launcher se lance, il va vérifier si une autre instance est déjà lancée. Si c'est le cas, la nouvelle instance va mettre la fenêtre de l'ancienne au premier plan, puis se fermer. A première vue, ça peut sembler être une fonctionnalité en moins, mais 3 éléments ont justifié ce choix :

  • D'abord, j'en parlais dans mon point technique, sauvegarder les options puis lancer une instance du launcher empêchera les 2 instances de sauvegarder les options jusqu'à ce qu'une des 2 ne se ferme.
  • Ensuite, il y a une règle très importante en programmation : "Never trust user input". Ne jamais faire confiance à ce qu'entre l'utilisateur. Le fait d'autoriser plusieurs instances multiplie le nombre d'erreurs que peut faire l'utilisateur. Par exemple, si l'utilisateur lance 2 instances du launcher, change le dossier des jeux avec la 1ère en déplaçant les jeux, puis lance un jeu avec la 2ème, le jeu sera introuvable car l'ancienne instance le cherchera encore dans l'ancien dossier. Aussi, je veut pas savoir ce qui peut se passer si 2 instances essayent en même temps de télécharger le même jeu, mais ça sera probablement pas joli. Et, plus simple, si quelqu'un lance le même jeu avec les 2 instances, la 2ème affichera peut-être un message d'erreur en japonais.
  • Enfin, ce n'est peut être pas nécessairement une mauvaise chose. Je ne crois pas avoir déjà vu un launcher autorisant plusieurs instances simultanées. Et un cas d'utilisation pratique (qui m'est déjà arrivé) : si vous oubliez qu'il est ouvert et que vous le relancez, il ressortira l'instance existante. Ca peut facilement arriver si vous le laissez dans la zone de notifications pendant un téléchargement, par exemple.

Revenons aux options : j'ai ajouté des options spécifiques à chaque jeu. Pour y accéder, cliquez sur le bouton "Options" à côté du jeu correspondant (le config.exe est toujours accessible via un bouton "Options du jeu", mais je pense déplacer ce bouton dans le menu "Options" de chaque jeu) (le bouton peut souvent être sous le nom du jeu, et il est mal placé après un redimensionnement, mais vu que je pense bientôt changer ça (voir parenthèse précédente), je m'en occuperai plus tard).
Quand vous cliquez sur ce bouton, une popup s'affiche, avec une ou plusieurs options disponibles. D'abord, il y a une option pour choisir le dossier du jeu. Elle permet de mettre un jeu dans un autre dossier que les autres. Vous pouvez par exemple avoir une partie de vos jeux dans program files, et quelques uns sur un autre disque (s'ils sont trop lourds, par exemple) ou sur une clé USB. Cette option vous permet aussi d'avoir vos jeux éparpillés un peu partout. De plus, elle sera utilisée lors de la recherche automatique des jeux, quand je l'implémenterai. Enfin, elle vous permet d'ajouter au launcher un jeu qui ne s'y trouve pas encore.
Mais cette popup permet aussi de régler des paramètres spécifiques à certains jeux. Par exemple, si vous cliquez sur le bouton "Options" de Touhou 12.3, vous aurez une option permettant de lancer automatiquement le Voice Mod en même temps que le jeu. Je prévois de faire pas mal d'options du genre.

Enfin, une amélioration mineure : j'ai revu mes fonctions pour télécharger des fichiers. Maintenant, un jeu peut lancer le téléchargement de n'importe quel fichier (et non uniquement de son propre .zip). Ca permettra en premier temps de télécharger automatiquement le Voice Mod. Cette fonctionnalité sera peut-être utile pour le support de thpatch, aussi.

 

Je crois en avoir enfin fini avec les améliorations de la nouvelle version. Maintenant, parlons de ce que je prévois de faire.
D'abord, thpatch. Mon launcher offrira nécessairement une surcouche de thpatch un jour, qui permettra de lancer les jeux supportés sans que l'utilisateur n'ait à faire quoi que ce soit. Mais une version 2.0 de thpatch est prévue plus ou moins prochainement, et cette nouvelle version apportera probablement des changements au niveau de ses fichiers de configuration (j'ai entre autres entendu parler d'une résolution automatique des dépendances). Je vais donc peut-être attendre la sortie de cette version 2.0 avant de faire cette surcouche. Rien ne presse.

Ensuite, plus généralement, j'ai fait une liste de tâches assez récemment (cette liste devrait prochainement être disponible sur le devblog, en attendant elle est ici : Accéder au sujet concerné sur le forum) En faisant cette liste, j'ai vu pas mal de tâches plutôt courtes, et qui semblent plutôt simples à réaliser (les options spécifiques aux jeux que je prévois de faire en font partie). J'ai rien d'"urgent" de prévu (par urgent, j'entends que j'aimerais implémenter rapidement), à part thpatch (mais j'en ai déjà parlé plus haut), et la recherche automatique des jeux (mais je verrai ça plus tard), donc je pense m'occuper petit à petit de toutes ces petites tâches.

 

Vous pouvez laisser des commentaires, questions etc ici : Cliquer sur ce lien pour accéder au sujet