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.

Reprise du projet des installateurs

Le projet de développement d'installateurs pour les jeux Touhou était mort pendant quelques mois, mais je l'ai repris depuis quelques semaines, et maintenant je peux annoncer une avancée dessus.

Pour ceux qui n'étaient pas là, je rappelle vite fait : thcrap est compliqué à installer, il faut passer par une console noire qui fait peur. Il a donc été décidé de réaliser un installateur pour chaque jeu supporté par thcrap, qui installera le jeu et configurera thcrap pour ce jeu, afin de simplifier l'installation.


Maintenant, ce qu'il y a de nouveau :
Le projet des installateurs a été mis en pause il y a quelques mois. Cependant, thcrap, lui, a évolué pendant ces mois. L'installateur a donc une version obsolète de thcrap. Et il n'est pas compatible avec la nouvelle version du configurateur de thcrap : le comportement de ce dernier est beaucoup moins prédictible, donc l'installation est beaucoup moins simple à automatiser.
J'ai donc décidé de ne plus utiliser le configurateur de thcrap. À la place, l'installateur fait lui-même ce que faisait le configurateur de thcrap : il télécharge les patchs, et crée les fichiers de configuration ainsi que les raccourcis. Notons que seuls les fichiers de traduction du jeu installé sont téléchargés, contrairement à lors de l'installation de thcrap. Les autres fichiers de traduction seront toujours téléchargés en même temps que les mises à jour, mais au moins l'installation est beaucoup plus rapide ; le téléchargement des fichiers qui ne nous intéressent pas est fait en arrière plan, silencieusement, lors de l'exécution du jeu.

Aussi, tant qu'à implémenter moi-même le téléchargement des fichiers de traduction, j'ai aussi décidé de faire une barre de progression pour leur téléchargement. C'est beaucoup plus difficile que ça en a l'air, Inno Setup est simple à utiliser tant qu'on fait des choses simples, mais dès qu'on veut faire des choses un peu plus avancées, ça devient très vite beaucoup plus difficile (et surtout très mal documenté). Mais bon, j'ai quand même fini par réussir quelque chose qui me convient.

(Faites pas attention au mot "Téléchargement" qui est bizarre : c'est mon PC qui est bizarre, pas l'installateur.)

J'ai aussi ajouté une détection automatique de DirectX : il ne sera installé que s'il n'est pas encore présent sur l'ordinateur.
Ça, contrairement aux barres de progression, c'était plus facile que ça en a l'air.

Vous pouvez télécharger la nouvelle version ici.
Si vous avez une remarque quelconque, n'hésitez pas à en parler sur le sujet correspondant sur le forum : cliquez ici.

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

Bienvenue sur le Developers' Blog de Touhou-Online

Quel serait le premier post approprié pour un nouveau blog...? Bien... comme toutes les nouvelles choses, bonjour le monde, est souvent un excellent endroit pour commencer. Donc, bienvenue à notre nouveau blog! Notez que ce n'est pas les fameux articles normaux de Touhou-Online, ou vous pouvez consulter les nouvelles à propos de Touhou Project et notre communauté, mais c'est le blog de l'équipe des contributeurs et concepteurs/développeurs qui soutiennent tous les grands projets, travaux fanwork et tout le développement du site de Touhou-Online.
Alors que nous pourrions occasionnellement poster quelque chose sur nos projets, notre but est de poster ici régulièrement les choses cool que nous faisons, sur les projets que Touhou-Online travaille, et de partager avec le monde tout l'avancement, le soutien, les détails et etc...

Remilia Scarlet sur un PC portable

 

Remilia Scarlet devant son PC portable gamer, sur une session de jeu en prenant son thé. Toujours avec charisme, n'est-ce pas?

Pour l'instant, cependant, laisse faire quelques présentations à nous, et nos projets.

L'équipe de contributeurs de Touhou-Online est une petite équipe composée dans le staff. Nous travaillons sur 2 éléments distincts: Améliorer le site et la communauté Touhou, et développer des projets fanmade pour la communauté. L'idée est que tout le monde puisse profiter un maximum de la communauté en l'initiant le mieux possible, tout en pouvant offrir des nouveautés, et même si certaines personnes travaillent toujours sur les mêmes projets, généralement quelqu'un de notre équipe peut contribuer à un autre projet, ce qui signifie que certains membres de l'équipe peuvent travailler sur pleins de projets, le tout en une seule journée! Et bien sûr, tout le monde qui veut participer aux projets et y contribuer est le bienvenue!

Quant à notre site, Touhou-Online, nous avons les projets dédiés au site et à la communauté, et les projets fanmade pour faire plaisir aux fans =). On vous tiendra au courant de tous les projets, dont vous pourrez accéder à la liste en cliquant sur le lien "Projets" du menu principal, et sur "Médias" pour voir un aperçu des projets en cours.

Cela devrait donner une bonne introduction sur ce Devblog, alors restez à l'écoute pour un bon nombre de nouveaux messages, détails passionnants sur nos contributeurs, nos projets et autres friandises fanmade intéressantes!

A bientôt!

 

Copyright © 2011-2017 - Touhou-Online
Version du site: 3.3.1a - Tous droits réservés.

Touhou Project est une licence de la Team Shanghai Alice. Tous droits réservés.