samedi 7 juillet 2012

baldur's gate for ever !!!

Arf, total délire sur ce coup là !

Bah quoi, c'est pas vieux comme jeu, le 1 date de 1999, et le 2 de 2000, ça ne fait que 12 ans ! ;-)
Bon, alors j'ai vu passer un pack pour ce jeu dernièrement réunissant les 2 jeux et leurs extensions. Ca m'a fait discuter des mods incontournables qu'ils devraient mettre avec, et après c'était parti, j'ai eu envie de retester une partie de mon côté. J'avais sauvegardé en 2009 une installation complète de bgt, un truc qui permet d'enchaîner tous les jeux sans interruption, et le tout en utilisant le moteur de bg2 parce que ça prend des plombes à installer donc c'était mieux de faire une sauvegarde. Donc je suis reparti de là.

Au début l'idée c'était juste de jouer. Mais comment on fait pour jouer à bg2 dans de bonnes conditions en 2012 ? Le 1er problème c'est les écrans plats. Le jeu est fait pour tourner en 640x480 ou 800x600, il supporte des résolutions + grandes mais après les sprites deviennent vraiment trop petits à l'écran et on perd les détails, ça devient beaucoup moins intéressant. Et moi mon écran quand je le passe en 800x600 sous linux avec le cable de sortie numérique normal, il me sort "surbalayage, passez en 1680x1050" au milieu de l'écran et si j'ignore le message il finit par se mettre en veille. C'est malin !
Donc je me suis d'abord aperçu qu'en branchant le cable analogique au lieu du numérique, ça passe, donc j'ai commencé par ça.
Après je me suis dit 800x600 c'est bien, mais sur un écran 16:10, ça fait une image aplatie, ça serait bien de trouver un mode 16:10 équivalent du 800x600. Et bin 800x600 en 16:10 ça fait 960x600, pas vraiment standard comme résolution, mais avec les merveilles de linux et xorg, on peut créer n'importe quel mode vidéo en s'aidant d'un site comme ça : http://xtiming.sourceforge.net/cgi-bin/xtiming.pl
Après je me suis aperçu qu'en analogique, l'affichage a tendance à être imparfait (euphémisme !) pour certains de ces modes, d'ailleurs le moniteur ne détecte même pas correctement la résolution, l'image est généralement coupée ou alors certaines colonnes de pixel disparaissent ce qui gêne la lisibilité. Et là je me suis aperçu que quand on rebranche le cable numérique pour un mode créé avec les bonnes fréquences sur ce site, ça marche merveilleusement bien, l'image est stable, très nette, et correctement détectée par le moniteur. Avec ça je peux même corriger le 800x600 pour éviter le message débile au passage.
Et franchement, bg2 en 960x600, ça frime un max !

J'aurais pu m'arrêter là, oui mais voilà avec ce genre de jeu, le gros intérêt c'est quand même les mods (ça et le fait qu'il faudrait quand même que j'arrive à terminer les parties du jeu que j'ai pas terminées un de ces jour, les 2 extensions en fait). Et alors là on s'aperçoit que les gros mods peuvent mettre des plombes à s'installer sous linux (vraiment !), et que ça ralentit énormément les temps de chargement des sauvegardes jusqu'à devenir complètement insupportable.
J'ai commencé par aller voir rapidement comment ça marche sous windows : pas de 960x600 là, c'est bien triste, mais j'y vais pas pour jouer, juste pour tester. Et je me suis aperçu que l'installation des super gros mods peut aussi prendre pas mal de temps avec windows 7, c'est parce que ça se lance par leur interprêteur de commandes, et les entrées sorties de fichiers sont beaucoup + lentes quand on fait comme ça. Par contre les temps de chargement des sauvegardes sont beaucoup + rapides, et ça, ça m'a déprimé !
Donc je suis retourné sous linux et j'ai été me renseigner pour voir si ils avaient progressé sur ce front là dans wine. Je me suis aperçu qu'ils ont même fait une jolie page sur le sujet pour dire que c'est super compliqué, là : http://wiki.winehq.org/CaseInsensitiveFilenames
Et donc en gros ça dit que ça vient du fait que les systèmes de fichiers sous linux font la différence entre les minuscules et les majuscules, pas sous windows, et c'est ça qui rend les temps d'accès beaucoup + lents sur certains programmes, et que quelques personnes ont commencé à bosser là-dessus mais c'est compliqué et c'est pas fini.
Ouais. Pourtant il y a une méthode évidente pour accélérer les accès dans ces cas là : tout passer en minuscules ou en majuscules, ne pus autoriser de noms avec les 2. Et je me dis que ça doit quand même pas être trop compliqué à faire, vu que wine est sous git, je peux regarder ça assez facilement avec vim et voir ce que je trouve... Et c'était parti ! Et bin en effet, j'ai trouvé assez vite. On peut vérifier l'existence du fichier en minuscules quand on ne le trouve pas et renvoyer non trouvé si ça marche pas au lieu de faire un opendir. 1er patch hier donc. Avec ça, les installations et désinstallations de mods deviennent monstrueusement rapides, + encore que sous windows 7 (10x + rapide environ !). Bon je me suis fait peur au passage avec des bugs dans mon patch qui m'ont obligé à désinstaller plein de trucs pour les réinstaller + tard, mais finalement ça a été, j'ai rien perdu. Mais bon malheureusement les temps de chargement des sauvegardes sont juste un peu + courts, ça reste quand même nettement + long que sous windows. Donc il y a encore autre chose.
Comme je suis tétu, aujourd'hui j'ai essayé de voir avec strace ce que ce crétin peut bien faire pour perdre tout son temps quand il charge une sauvegarde. Et je me suis aperçu qu'il utilise getdents, pour ouvrir un répertoire juste pour vérifier l'existence d'un fichier. Et moi qui croyais avoir éradiqué toutes ces saloperies... En fait certains programmes comme bg2 ont l'air d'utiliser findfirst juste pour vérifier l'existence d'un fichier et récupérer des infos dessus. Sous linux c'est hyper inefficace. Donc j'ai encore rajouté un raccourci dans un 2ème patch aujourd'hui pour renvoyer l'info directement par stat quand l'argument est un nom de fichier. Et là miracle : les temps de chargement sont devenus super rapides !!! :)
Génial, ça fait des années qu'on est plombés par ces ralentissements sous wine, ça fait plaisir quand même !
Bon, il me reste à voir si ça corrige en même temps certains ralentissements qu'on avait des fois, pendant la partie, mais ça c'est pas sûr.

C'est ça qui est marrant quand on joue comme ça, ce n'est pas que du jeu, c'est aussi de la prog pour améliorer ! Bon maintenant je suppose que ça serait bien que je poste mes patches quelque part... Ca va encore être chiant ça, et l'équipe de wine n'est jamais pressée d'intégrer un patch, j'en traîne un depuis 6 mois déjà que j'ai récupéré dans bugzilla est qui est super utile pour certains jeux qui lisent le clavier en "brut" (raw). Bon enfin je suppose que je peux aller les poster sur bugzilla aussi, et on verra bien ce qu'ils en feront. En attendant j'ai plus qu'à retourner tester... enfin jouer quoi ! :)