e-t172

e-t172

This user hasn't shared any profile information

Home page: http://www.e-t172.net/

Posts by e-t172

Stargate TC Solo, ou comment devenir artisan

Stargate TC Solo est sorti il y a quelques jours. Je vais annoncer tout de suite le ton du billet : le système de gestion de ce mod est tellement merdique qu’on pourrait presque en rigoler. Explications.

Premièrement, on a des instructions d’installation plutôt confuses :

Installation SGM:

Ne pas changer le repertoire d'SGM à l'installation si vous
installez SGM sous WON.
Veuillez à l'installer sur le bon disque dur (si partitionné),
et dans le repertoire « sierra ».
ex: si Half life est dans D:\sierra\half-life...
Laissez le chemin d'installation qui sera D:\sierra

Lorsque que l'installation vous demandera un Half-life.gcf,
cliquez sur « annuler » et terminez l'installation.

----------------------

Ensuite pour Steam, vous pourrez installer SGM où vous voulez...
[ndlr : Sans dans le répertoire de Steam...]

Lorsque l'installation vous demandera un fichier Half-life.gcf,
vous le trouverez dans le repertoire Valve/Steam/STEAMAPPS/Half-life.gcf
=> exclusivement pour les personnes jouant avec STEAM.

Et enfin, pour lancer SGM, allez dans votre repertoire
sierra/Half-life/sgm/mm2

et double clickez sur mm2.exe
Le manager de mission se lancera et vous pourrez jouer.

Deux remarques : l’emplacement de Half-life.gcf peut être déterminé automatiquement, et ils pourraient faire un raccourci pour le mm2.exe. Mais attendez, ceci n’est qu’un détail comparé à ce qui va suivre, accrochez vous bien à votre chaise.

Je lance donc la fameuse installation. Utilisant Steam, j’installe le mod dans C:\sgm. J’attends que la rituelle barre de progression se remplisse, et je me retrouve en face de ça :

Configuration en cours... et fenêtre DOS

Woah, une fenêtre DOS, quand j’ai vu ça je me suis dit que la suite pourrait avoir quelques points communs avec le parcours du combattant. Force est de constater que c’était le cas.

Après une (très) longue attente (pendant laquelle j’ai fini par me demander si mon ordi n’était pas planté), je vois apparaître la fenêtre mentionnée dans les instructions d’installation :

Fenêtre classique de séléction de fichier

Je me suis donc mis en quête de mon Half-Life.gcf (se trouvant dans mon répertoire SteamApps). Tout en cherchant, je me suis demandé pourquoi la navigation dans les dossiers était si lente. J’ai ouvert mon gestionnaire de processus et je me suis rendu compte que le programme de « configuration » bouffait tout simplement toutes les ressources système disponibles. Impressionnant pour un programme qui ne fait rien en attendant que je lui donne son fichier.

Après avoir validé, j’attends encore très longtemps et j’arrive à la fin de l’installation avec un message très professionnel :

Installation créée par Clickteam installer

Avant de lancer le fameux mm2.exe, je prend le temps de regarder ce qu’il a foutu dans mon c:\sgm. Et là, tenez vous bien : SGM a installé une veille version de Half-Life sous WON dans le répertoire ! Nous voici donc revenus deux ans en arrière, avec une vieille interface graphique et une vieille version du jeu. Moi qui pensais ne plus jamais réinstaller WON, on l’a fait à mon insu. Ben tiens.

Mais entrons dans le vif du sujet. Je vais dans C:, puis sgm, puis sgm, puis mm2, et enfin mm2.exe (là encore, très pratique l’absence de raccourci). Je me retrouve en face de ça :

Le Mission Manager

C’est donc le fameux Mission Manager codé par fag. On remarque tout de suite les très jolis noms de missions à gauche (j’ai toujours aimé les underscores) ainsi que le fait que déplacer une fenêtre par dessus ce programme redessine la fenêtre d’une manière tellement sale que ça bouffe tout le CPU.

Jouons donc. Je clique sur jouer et qu’est ce qui s’affiche ?

UHARC

Gnein ? Visiblement, lorsqu’on lance une mission, le Mission Manager décompresse les fichiers de la map avant de la lancer. Au départ je me suis dit « mais quel intérêt ? » et j’ai fini par comprendre. Décodage.

Il y a deux informations clés sur cette photo d’écran : le fait qu’il décompresse depuis une archive s’appellant zo_idle1.wav (une archive dans un fichier .wav ???) et le fait qu’il utilise un mot de passe pour décomprimer (Using password). Le fichier zo_idle1.wav se trouve dans sgm\sound\zombie\zombie_old. J’ai fini par me rendre compte que tout ce dispositif très lourd, lent, chiant et artisanal n’avait que pour seul but d’empêcher le joueur de jouer une mission sans avoir terminé les précédentes.

Oui, vous avez bien lu. Fag a compressé dans le format le plus obscur qu’on aie pu trouver (afin de donner le plus de mal à un cracker de mot de passe pour l’archive) dans un fichier avec une fausse extension et un nom anodin lui même mélangé aux fichiers du jeu et protégé par mot de passe. Et tout ça pour quoi ? Pour éviter que l’on triche sur un mod SOLO ! C’est à se pisser dessus de rire. Mais attendez, c’est même pas fini.

A la fin de la décompression, on me demande ça :

On me demande ma clé CD

Ce message m’est familier et il est tout à fait normal qu’il s’affiche vu qu’il a installé Half-Life WON sans entrer la clé dans le registre. En revanche, quelqu’un de moins expérimenté se demandera probablement depuis quand SGM est vendu en boîte.

Je vais chercher ma boîte d’Half-Life, j’entre ma clé et je presse OK. Je vois le « chargement » caractéristique de Half-Life WON (ça me rappelle de vieux souvenirs) et je me détends, soulagé et étonné que tout cet artisanat arrive à fonctionner. Mais là, c’est le drame :

On me demande ma clé CD

Forcément, avec une daube pareille, ça ne pouvait marcher correctement. C’est comme réparer une voiture avec du Scotch : ça marche, mais ça tient jamais bien longtemps.

J’ai regardé ce qui n’allait pas et j’ai constaté que le répertoire Valve, censé contenir les fichiers de base à tout mod, était quasiment vide. J’en ai déduit que le dispositif à l’installation censé extraire les fichiers d’Half-Life à partir du GCF de Steam a échoué. J’ai testé en réinstallant après avoir fermé Steam, même résultat.

J’ai donc utilisé GCFScape pour extraire manuellement ces fichiers. (quelqu’un de moins experimenté n’aurait donc pas pu jouer) Après cela, le mod a enfin daigné fonctionner correctement. La première image que j’ai vue était un Daniel Jackson qui avait la même voix que les scientifiques de Half-Life et qui se comportait exactement pareil. Trop c’est trop, j’ai quitté le jeu et supprimé cette merde.

L'artisanat. Première entreprise de France.

Mais ce n’est toujours pas fini !

Eh oui, après avoir désinstallé le jeu, vous vous demandez bien ce qui a pu encore m’arriver. Mais malheureusement, force est de constater que ce programme agit comme Tchernobyl : ça pète, ça pue et ça laisse des traces. Voici pourquoi.

Afin de me changer les idées et de jouer à un VRAI mod, je lance HLSW et je choisis un serveur Natural Selection. Pendant le chargement, il se met à télécharger… ns_eclipse. ns_eclipse ? C’est une map officielle déjà incluse dans le jeu ! Intrigué, je me rends dans mon répertoire de maps NS et là, horreur et stupéfaction :

Plus de maps !

Mais où sont donc passés tous les .bsp ?? Après vérification, j’ai vu ce qu’on pourra désormais baptiser le summum de la merde. Tenez vous bien, l’installation de SGM a supprimé toutes mes maps NS qui n’ont rien à voir avec Stargate ! Comment fag a-t-il fait pour réussir cette prouesse technique, je n’en sais rien, mais son Mission Manager se rapprocherait plus d’un virus que d’une interface de jeu.

Et voilà comment un mod prometteur se transforme en véritable merdier.

Au passage, visiblement l’équipe solo Stargate TC s’est rendue compte de l’énorme bourde qu’ils avaient faite et est en train de sortir une version du mod sans Mission Manager. Qu’ils fassent vite.

AOL sur la voie de la raison ?

Vous connaissez probablement la superbe réputation que AOL détient depuis des lustres, grâce aux conversations croustillantes sur les serveurs de jeu :

Joueur 1 : Eeeh, mais qu’est ce qui m’arrive ? C’est quoi ce ping de 600 ?

Joueur 2 : T’es chez AOL ?

Joueur 1 : Ouais.

Joueur 2 : Le pauvre.

Eh bien il paraîtrait que ce dernier soit sur la voie de l’amélioration. Ils ont commencé par retirer leurs protocoles propriétaires à 2 francs (monnaie de l’époque), qui obligeait notamment à conserver en permanence le navigateur AOL (daubique au passage) ouvert pour conserver la connexion (avec la RAM que possédaient les ordis à l’époque, imaginez faire une partie de HL à côté), probablement parce qu’ils ont fini par se rendre compte qu’ils étaient vraiment ridicules à côté de tous les autres FAI qui utilisent les couches TCP/IP les plus standards qui soient.

Puis, ils ont fini par fournir un accès ADSL correct, sans les fameuses montées de ping à 600. Ils ont réussi à nous faire marrer avec la fameuse pub télé « tu sais pas cliquer sur la souris ». Ils ont arrêté de bombarder tout le monde avec leurs fichus CD de 50 heures d’essai gratuites (je connais quelqu’un qui les accroche aux arbres dans son jardin). Et il n’y a pas si longtemps que ça, ils étaient même franchement intéressants avec leur dégroupage.

Aujourd’hui, AOL redresse la barre et devient de plus en plus intéressant, grâce au départ de David Gang (alias Der Likidator), qui mérite bien son nom de délinquant car d’après ce que le billet nous apprend, il a tout simplement bloqué toutes les avancées Netscape chez AOL (si il était pas là, on aurait peut-être eu Gecko à la place de MSIE comme moteur dans le navigateur AOL). Le billet n’y va pas de main morte à son égard (His name is hated by hundreds of former iPlaneters and Netscapers), ce qui laisse présager un certain soulagement chez AOL. Bon débarras.

Affaire à suivre…

Un bot IRC

Ca faisait longtemps, non ? Me revoilà !

Depuis quelques jours, je m’intéresse à la programmation de bots IRC. Vous pensez probablement que j’ai dû apprendre le langage de script de mIRC pour pouvoir m’amuser avec. Ben non. Je n’ai pas programmé mon bot avec mIRC mais en PHP.

Je vois d’ici certains visages ébahis. Il faut se rappeller certaines caractéristiques de PHP :

  • PHP peut ouvrir des sockets, c’est à dire des connexions TCP ou UDP sur un hôte.
  • Les scripts PHP peuvent être éxécutés sur une page web OU de façon autonome en utilisant l’éxécutable php. Cette caractéristique permet de programmer n’importe quelle application autonome. Elle s’éxécutera alors en mode texte (dans un shell sous Linux, dans une invite de commandes sous Windows), mais on peut aussi créer de véritables applications graphiques grâce à PHP-GTK, une extension permettant d’utiliser la librairie d’interface graphique GTK de Gnome dans PHP.

J’ai tout d’abord regardé la RFC IRC et j’ai été découragé par le nombre colossal de situations que le client doit gérer (je commence à comprendre pourquoi il y a si peu de clients IRC disponibles). J’ai donc cherché une librairie « toute faite ». J’ai vu l’extension IRCG de PHP mais celle-ci ne m’inspirait rien (on a l’impression qu’elle est laissée à l’abandon, elle n’est pas très puissante, et elle n’est pas libre).

Et je suis tombé sur LA merveille : SmartIRC. Il s’agit d’un ensemble de classes entièrement codées en PHP et qui permettent de faire absolument tout ce que l’on peut faire sur un serveur IRC. J’ai regardé le code source et j’ai été réellement impressionné par la beauté et la propreté du code, découpé de façon quasi-parfaite, sans aucune fiorture. A côté, mon architecture MVC ressemble à une veille baraque branlante.

SmartIRC fonctionne selon un principe simple : on se connecte au serveur, on s’identifie, on joint un ou ou plusieurs channels, et on le met en mode « listen ». Ce mode, comme son nom l’indique, « écoute » ce que le serveur lui envoit. Ce n’est que dans ce mode que les commandes précédentes sont réellement éxécutées. On ne peut rien faire dans le programme quand SmartIRC écoute, mais c’est une limitation technique de PHP, langage procédural qui n’a pas vraiment été conçu pour ça. Avant d’écouter, on précise à SmartIRC sur quel « évenement » il doit s’arrêter (par exemple quand quelqu’un dit quelque chose sur un channel, quand quelqu’un sort, quand quelqu’un rentre, etc.), et on lui précise un callback (pointeur vers une fonction ou une méthode de classe) qu’il appellera quand l’évenement se produira. La fonction appellée par le callback peut alors réagir en conséquence, et demander au client d’effectuer des actions précises telles que parler, faire un query, un whois, oper quelqu’un, voicer, et tout ce que peut faire un client sur un serveur IRC.

Il en résulte une différence fondamentale avec un script PHP normal : alors qu’un script pour le Web fonctionne de manière procédurale (le programme éxécute une série d’actions puis envoie le résultat et se ferme), un bot IRC fonctionne de manière évenementielle (le programme attend qu’il se passe quelque chose et réagit en conséquence). Vous vous doutez probablement que l’architecture de programmation ne peut évidemment pas être la même. Une architecture MVC est procédurale par nature et n’est donc vraiment, mais alors vraiment pas du tout adaptée pour un modèle aussi évenementiel que celui d’un bot IRC. J’ai donc créé ma propre architecture pour mon premier bot. Celle-ci est pour l’instant bien moins complexe que mon architecture pour le Web (ce qui est normal vu qu’il s’agit de mon premier bot), mais elle reste quand même très fonctionnelle. L’élément principale de cette nouvelle architecture est le Handler dont le but est de recevoir les événements et d’appeller les méthodes adaptées.

La grande polyvalence de PHP combinée à IRC permet de faire des choses jamais vues pour un bot. Non seulement la programmation de bots est bien plus facile et rapide (SmartIRC, bien que déroutant au début pour le programmeur PHP adapté au modèle procédural, reste assez simple à utiliser), mais surtout cela permet d’établir des passerelles entre IRC et d’autres technologies : mon premier bot, très simpliste et doté d’une seule commande, lisait le flux RSS de StargateTC.com, donnait les 5 dernières news sur le channel sur simple demande avec la commande !news, et prévenait automatiquement quand une nouvelle news arrivait ! RSS > XML > HTTP > DOM > IRC. Imaginez faire ça avec un bot mIRC classique ! L’éventail des possibilités est quasiment infini. Imaginez un bot d’administration de channel (qui ope automatiquement par exemple) qui tire ses informations d’une base de données MySQL et doté d’une interface d’administration Web ! Grâce à PHP et SmartIRC, c’est possible, et ça ne présente même aucune difficulté majeure.

Bien sûr, tout n’est pas aussi joli. Premièrement, un bot d’administration requiert que vous possédiez une machine connectée au Net 24h/24. Deuxièmement, SmartIRC n’est que dans une version Beta, et bien que je n’aie remarqué aucun bug et qu’elle soit entièrement stable, il est possible qu’il y ait des problèmes. Enfin, SmartIRC dans sa version « normale » (version 0.5.5) n’est pas compatible PHP 5. Mais fort heureusement, on peut télécharger les fichiers du CVS, qui, eux, sont compatibles.

Personnellement, j’ai déjà codé deux bots : le premier est le bot de passerelle RSS dont je vous ai parlé, mais il est assez mal codé (vu qu’il s’agit de mon premier et que c’était plus un test qu’autre chose), et un deuxième bot plus gros permettant d’organiser une partie de Morpion entre deux personnes sur un channel IRC. Le plateau est symbolisé par des caractères ASCII et le bot gère les tours, les victoires, les matchs nuls, les mouvements, etc. Dans sa dernière version (1.5), je l’ai même doté d’un mode « Manager » qui s’active dès que le Bot est opé et qui lui permet de gérer automatiquement les « voicés » du Channel durant une partie afin d’éviter les perturbateurs. Pour information, grâce à la grande simplicité de PHP, j’ai pu sortir une première version en seulement 3 heures. Je ne connais pas le langage de script de mIRC, mais je suis persuadé que ça aurait pris beaucoup plus de temps avec ce langage. Si vous désirez le voir en action, rejoignez-moi sur #SGTC-Games.irc on Quakenet, channel créé spécialement pour l’occasion, et queryez moi pour que j’amène le bot sur le channel.

Bon, et qu’est ce que je fais maintenant ? Je suis en train de réfléchir à une nouvelle idée de bot ;)

Natural Selection : guide du débutant

Après quelques semaines d’écriture, j’ai terminé mon guide Natural Selection pour débutants.

Pour rappel, Natural Selection est un mod Half-Life mêlant FPS et STR.

Natural Selection : guide du débutant

Le document est très long et se veut exhaustif. Si vous avez repéré une erreur, un oubli, une incohérence ou autre, ou que vous désirez simplement critiquer, les commentaires sont à vous.

Découverte de ECMAScript

Depuis peu, je m’intéresse à ECMAScript (qui est en fait une sorte de « noyau normalisé » de Javascript) en conjonction avec DOM.

Quand mes sites sont passés aux normes, mon conformisme me faisait penser, comme pas mal de gens d’ailleurs, que « le javascript c’est pas bien ». J’ai visité la section consacrée d’OpenWeb et je suis tombé sur cette page : elle explique clairement que le Javascript n’a que des avantages dès qu’il est utilisé de manière à séparer la structure des scripts (exactement comme la séparation structure/présentation en CSS) et de manière non obstructive (à savoir qu’il n’empêche pas l’utilisation de certaines fonctions du site lorsqu’il est désactivé).

Pour cela, il ne faut plus écrire en dur les évenements dans le XHTML (onmouseover, onmouseout, etc), mais définir ces évenements lors de l’éxécution du code Javascript.

J’ai donc continué ma découverte et flâné sur divers sites. Malheureusement j’ai été déçu par le fait qu’il est impossible de savoir si ces sites concernent le noyau normalisé ECMA ou si j’utilisais des propriétés non valides sans le savoir. De plus la seule référence réellement exploitable est la spécification ECMAScript mais celle-ci est particulièrement indigeste et peu pratique (en PDF…). Il existe la référence en français de ToutJavascript – particulièrement succinte – mais là encore je suis sûr d’y trouver des propriétés non conformes sans pouvoir faire la différence…

Néanmoins, le language étant étonnament facile à prendre en main, je suis arrivé en à peine 30 minutes à faire un premier programme. Celui-ci était assez simple et appliquait un effet de fondu vers le rouge lorsqu’on plaçait la souris sur un <div>. J’ai creusé la voie en implémentant la possibilité de pouvoir gérer plusieurs fondus à la fois sur plusieurs éléments et la possibilité de choisir la couleur de départ et la couleur de fin ainsi que la vitesse. Ca a donné ce magnifique script. Celui-ci se trouve en action sous vos yeux : déplacez votre souris sur la liste des catégories en haut pour vous en rendre compte.

En conformité avec les principes de séparation et d’accessibilité, le balisage XHTML n’a pas été modifié au niveau du menu pour permettre cet effet, et lorsque le Javascript est désactivé on a l’effet de hover simple habituel.

Notons également que grâce à l’utilisation de l’attribut « defer » lors de la déclaration du script, le navigateur affiche la page avant de l’éxécuter, ce qui évite au script de ralentir l’affichage de la page.

Ah, dernière chose : si vous êtes intéressés par mon script et que vous souhaiteriez le copier-coller, rien ne vous en empêche, mais vous serez gentils de mentionner « Made by e-t172″ quelque part en commentaire dans le code. Merci.

e-t172's RSS Feed
Go to Top