samedi 27 août 2011

Free in the Dark : Reprise du moteur libre d'Alone in the Dark

Je vais vous présenter le projet sur lequel je travail actuellement, c'est un moteur de jeu permettant de rejouer à Alone in the Dark sur des ordinateurs récents et sans passer par un émulateur. Il vous faut simplement les fichiers du jeu original (ou prochainement de la démo) et l'exécutable Free in the Dark. Le moteur fonctionne sous Windows, Linux (32 et 64 bit) et Mac Os X. Historiquement ce projet Open Source fut lancé en 2003 par Vincent Hamm et Nicolas Noble, la dernière activité date de 2009 et depuis les sources ne sont plus publiquement disponibles sur Sourceforge, on peut les retrouver avec un peut de difficulté en cherchant vraiment très dur sur google. Dans un premier temps je vais vous présenter rapidement la série des Alone in the Dark, puis je vous parlerais du projet Free in the Dark, de là je vous donnerais mon point de vue sur l'état actuel du moteur et ce que je pense pouvoir faire avec.

Avant de commencer je vous invite à consulter ma petite collection , ce n'est certes pas énorme mais je suis très content de mon édition limitée collector des 3 premiers épisodes :) et du pack collector d'Alone in the Dark 5.

La série Alone in the Dark

Alone in the Dark est un jeu développé par la société Française Infogrames (aujourd'hui Atari) sortie en 1992, c'est le premier jeu de type "Survival Horror". Le concept du jeu est simple, vous êtes dans un manoir hanté par des fantômes et des forces démoniaques qui vous dépassent largement et votre but sera de sortir vivant de cet enfer. La musique a une grande place dans le jeu car elle va conditionner le joueur dans son périple. Afin d'arriver à sortir du manoir le joueur devra d'une part combattre des monstres avec tout un tas d'armes allant du couteau à l'arme à feu, et d'autre part étudier son environnement en lisant des vieux livres de magie par exemple pour trouver les failles d'un monstre, ou de vielles notices pour comprendre le fonctionnement d'un objet. L'ambiance est largement inspiré des nouvelles de H.P. Lovecraft, un écrivain américain connu pour ses histoires d'horreur et le fameux Cthulhu. Alone in the Dark peut être caractérisé par plusieurs points mais on notera surtout son système de caméra fixe qui participe au mythe du titre.

AITD3 : Dans chaque épisode il y a ce passage où on vous observe par la fenêtre, Jack c'est toi ?
Par la suite d'autres éditeurs ont créé des jeux de ce type en plus évolués, on citera par exemple Resident Evil de Capcom ou Silent Hill de Konami.

Alone in the Dark 1 - Emily Hartwood
La série Alone in the Dark aura connu 5 épisodes et un mini épisode intitulé Jack in the Dark. On notera aussi 2 adaptations en film, si le premier film est assez agréable à regarder (avec une bande son signée Nightwish !) le deuxième est quant à lui très difficile à regarder.

Alone in the Dark premier du nom sort en 1992 et vous propose deux personnages jouables, Edward Carnby (que l'on retrouvera dans les autres opus) et Emily Hartwood (que l'on devra sauver dans le 3éme épisode). A l'époque le jeu fait fureur car c'est un tout nouveau genre qui vient de naître (et pour une fois c'est Français).

Jaquette d'Alone in the Dark
Le jeu sera adapté sur plusieurs supports, on pourra citer par exemple la 3DO (la première console à CD de Panasonic) ou les ordinateurs Mac.

C'est en 1993 qu'Alone in the Dark 2 sort en version disquette et en 1994 en version cd-rom. Le jeu se déroule 1 an après le premier épisode et vous devrez résoudre une affaire d'enlèvement d'une petite fille par un pirate du nom de One Eye Jack. L'histoire se déroule dans un vieux manoir nommé hell's kitchen et vous finirez par vous retrouver sur le bateau pirate de One Eye Jack. Techniquement c'est une amélioration du moteur du premier mais il n'y a rien d'exceptionnel. Le jeu est assez bogué et très difficile. Deux personnages sont jouables dans le même scénario (un peut comme dans certains Resident Evil), Edward Carnby le détective de l'étrange et Grace Saunders la petite fille qui a été kidnapée.

Jaquette d'Alone in the Dark 2
Il sera adapté sur Saturn et Playstation sous le nom Jack is Back, tous les personnages du jeu seront re-modélisés avec une 3D plus fine et plus détaillé.

Alone in the dark 2 : Le labyrinthe
 Alone in the Dark 3 est sortie en 1995 et utilise le même moteur que Alone in the Dark 2 il n'y avait donc pas de révolution graphique et c'est bien dommage. Le jeu innove cependant car cette fois ci vous n'êtes pas prisonnier d'un manoir mais d'une ville fantôme du Far West ! Suite à la sortie de cet épisode une bande déssiné a été éditée par les éditions Vent D'ouest, elle se nomme Alone in the Dark et reprend grosso modo la progression du troisième épisode.

Jaquette d'Alone in the Dark 3
Dans cet épisode vous ne pouvez contrôler que Edward Carnby cependant votre apparence changera au fil du jeu, une fois vous serez transformé en couguar (ce passage est assez cours et limité mais très fun) et enfin vers là fin vous fusionnerez avec l'ex shérif de Slaughter Gulch (qui vous ressemble comme deux goutes d'eau mais en mort..) ce qui changera légèrement votre apparence (nouvelle veste, chapeau de cowboy et étoile de shérif). Les musiques sont géniales et mettent vraiment le joueur dans l'ambiance du Western :)
    Le saloon !
    Carnby en cowboy
    Alone in the Dark 4 sort en 2001 et cette fois ci il est développé par le studio Darkwork. Il sort sur pas mal de support différent (Pc, Ps2, Psx, Dreamcast, Gameboy Color) il est assez bon et reprend un Game Play très proche de Resident Evil en y ajoutant une dimension supplémentaire avec des jeux de lumières (certains monstres n'aiment pas la lumière, d'autres c'est le noir alors il faut jouer avec sa lampe torche) ce qui le rend beaucoup plus accessible que les 3 premiers épisodes.

    Jaquette d'Alone in the Dark : The new Nightmare

    Cette fois c'est l'ile de Shadow Island qui aura besoin de vous, pour cela vous pourrez incarner au choix Edward Carnby ou Aline Cedrac et suivant ce choix un scénario et un type de Game Play différent vous sera proposé. Aline favorisera la recherche alors que Carnby lui sera toujours égal à lui même avec son flingue bien chargé ;) Les deux scénarios se déroulent en même temps et c'est donc le jeu vue par les yeux des deux personnages qui vous sont proposés.
    Jouer avec la lumière est vital


    Entre 2001 et 2008 plus un signe de la franchise avant qu'Atari annonce Alone in the Dark : Near Investigation (aka Alone in the Dark 5 ou Alone in the Dark 2008). Cette fois ci ce sont les Lyonnais de Eden Studio qui s'y collent et c'est Olivier Derivière qui s'occupe de la bande son.

    Jaquette d'Alone in the Dark : Near Investigation

    Cet épisode était vraiment très attendu car les démonstrations vidéo étaient vraiment hallucinantes, il y avait une interaction avec l'environnement complétement folle ! et des musiques réellement splendides ! 

    Je vous invite à regarder cette vidéo qui vous fera très certainement comprendre l'euphorie de 2008 (et avant lors de son annonce).

    Les graphismes sont superbes sur un bon PC et sur les consoles next-gen
    Cet épisode se déroule après le tout premier de 1992 et met en scène un Edward Carnby amnésique. Graphiquement le jeu est assez réussi mais la richesse qu'offre le Game Play est très difficile à prendre main. L'originalité à souligner est que le jeu propose chaque partie du scénario sous forme de mini épisode et lorsque vous reprenez votre ancienne partie, une petite scène vous rappelle les événements passés (avec une voix "Précédemment dans Alone in the Dark").

    Le jeu est très porté sur l'utilisation du feu !


    Vous devrez créer vos armes en combinant des objets comme le fait Mac Guyver

    Vous pouvez vous procurer Alone in the Dark 1, 2 et 3 sur le site Good Old Game pour 5.99 dollars soit un tout petit plus de 4 € ou passer par des ventes d'occasion sur des sites bien connus, là ça sera moins chère et généralement en boite. Les autres épisodes se trouvent encore en neuf dans les magasin ou en occasion. Alone in the Dark 5 par exemple se trouve actuellement à 4.99 € en neuf dans un grand magasin commençant par la lettre E et se terminant par la lettre C :)

    Free in the Dark

    C'est en 2003 que sort Free in the Dark 0.1 un moteur codé en C et permettant de jouer à Alone in the Dark avec les fichiers du jeu. Le moteur a été développé par Vincent Hamm (aka yaz0r) déjà auteur d'autres moteur de jeu et Nicolas Noble (aka Pixel). Le moteur était disponible sur sourceforge, mais depuis 2009 (date de la dernière activité publique de l'auteur sur ce projet) les sources ont été supprimée et le moteur n'est plus disponible. Si vous faites une recherche sur google avec fitd-0.1.tar.gz vous devriez néanmoins pouvoir trouver les sources.

    J'ai contacté l'auteur début Aout pour savoir si il serait possible d'avoir les sources comme celles ci ne sont plus disponible, Vincent m'a répondu par mail que c'était possible mais qu'elles étaient en "mauvaise état", après cela je n'ai pas eu de réponse de sa part, ni de sources alors j'ai commencé de travailler sur celles que j'avais trouvé via mes longues heures de recherche sur google.

    J'ai d'abord compiler fitd (Free in the Dark) sous Linux et je n'ai pas rencontré de problèmes, les dépendances sont minimes (libsdl-dev, sdl_mixer-dev, glu-dev, zlib-dev et bien sur openGL). J'ai ensuite tenté de compiler les sources avec Visual Studio et là j'ai recontré quelques problèmes, je suis alors passé à MinGW et j'ai pu compiler fitd pour Windows. Le résultat pour la version 0.1 n'est pas magique mais :


    • Alone in the Dark 1 version disquette peut être lancé et on peut y jouer (par contre il faut passer la cinématique d'intro, pas dés le début car le moteur plante) ;
    • Alone in the Dark 2 version disquette peut aussi être lancé mais il est assez bogué (les menus par exemple et pas de scène d'intro) ;
    • Jack in the Dark fonctionne assez bien, je n'ai pas tenté de finir le jeu (il n'est pas très long à finir je vous rappel que c'est un mini épisode) mais mise à part quelques problèmes d'affichage le reste à l'air de tourner correctement (le menu est un peut rapide par contre).
    Les démos d'Alone in the Dark 1 et 2 ne fonctionnent pas et Alone in the Dark 3 ne se lance pas à cause de la protection du jeu.


    jack in the Dark fonctionnant avec Free in the Dark 

    Alone in the Dark 1 et 2 lancé via Free in the Dark sous Linux !

    Les deux jeux "in game" sous Linux :)

    Comment ça marche ?

    Alone in the Dark est composé de 4 types de fichiers
    • Les fichiers .PAK (ressources du jeu)
    • Les fichiers .ITD (ressources et sauvegardes)
    • Les fichiers .COM (c'est un exécutable pour le 1 et le 2)
    • Les fichiers .EXE (c'est l'exécutable du jeu)
    Le moteur Free in the dark se présente sous la forme d'un exécutable fitd.exe sous Windows fitd sous Linux et Mac Os X et il le copier dans le dossier de votre jeu. Ensuite un double clique dessus et le jeu se lance :) En gros fitd va remplacer l'exécutable par défaut.

    En fait le moteur va lire les fichiers .PAK et .ITD (les autres ne sont pas nécessaires) et les extraires pour y récupérer les informations dont il a besoin pour afficher le jeu, donc récupérer les coordonnées des caméras, les différents objets et personnages du jeu (ce sont des collection de points ou de coordonnées pas des modèles directement exploitables), etc.. A partir de là le moteur remplace totalement l'ancien et utilise les ressources d'origine (les scripts, les cinématiques, etc...).

    Et moi dans tout ça je fais quoi ?

    Comme je vous l'ai indiqué au début j'ai déjà commencé de travailler sur les sources et je vois plusieurs choses qui peuvent être faites à court terme (du moins important au plus important) :

    Moins important
    • Ajouter un lanceur permettant de choisir son jeu ce qui évitera de devoir copier l'exécutable du moteur dans le dossier de chaque jeu ;
    • Ajouter des options de configuration (affichage, contrôle clavier, contrôle manette, activation de hacks...)
    Moyennement important
    • Pouvoir utiliser les démos des jeux ce qui permettrait de distribuer le moteur avec une ou plusieurs démos ;
    • Permettre de lancer AITD 3 en contournant la protection.
    Plus important
    • Corriger le bug en fin d'intro dans AITD 1 ;
    • Corriger le plantage de AITD 1 quand on saute la scène d'intro ;
    • Afficher le menu de AITD 2 correctement ;
    • Éviter au maximum les plantages avec des solutions "Try/Catch Like" ;
    • Déboguer un maximum les jeux d'origine terminer certaines implémentations dans le code.
    Démo anglaise de AITD1 (Attract) via Free in the Dark 0.2-dev

    J'ai déjà obtenu des résultats encouragent après quelques heures d'analyse et de deboguage du moteur mais je suis face a des difficultés qui ne sont pas à prendre à la légère :
    1. Je travail à plein temps et le soir il n'est pas toujours évident de se mettre dans le code surtout que je suis développeur dans la vrai vie donc du code j'en vois tout le temps :)
    2. J'avais de bonnes compétences en C++ (avant que je ne fasse presque que du web) et je suis assez bon en programmation objet (je ne jure que par l'objet) mais là le moteur est écrit en C et c'est de la programmation procédurale. Depuis que je pense objet j'ai beaucoup de mal avec le paradigme procédurale.
    3. Le moteur possède une partie pour le rendu 3D et qui dit 3D dit mathématiques. Les lecteurs de ce blog depuis son commencement (y'en a t'il parmis vous ?) savent que je ne suis pas un as des maths, ils savent par contre que j'ai travaillé très dur à mes examens pour réussir en math. Ce que je veux dire c'est que je ne maitrise pas certains concepts mathématiques qu'on utilise en 3D.
    4. Les moteur est énorme (83 fichiers sources ! avec un fichier main.c qui fait presque 6000 lignes), il est très peut commenté et c'est assez dur de reprendre le travail dans ces conditions (je parle du manque de commentaires et de documentations). Les fonctions ont généralement des noms explicites (of course) mais ce n'est quand même pas évident de comprendre comment fonctionne tout ce grand monde et ce qu'a voulu faire l'auteur.

    Je ne m'avoue pas vaincu pour autant, vous le savez il m'en faut bien plus :) En 2008 j'avais commencé un remake d'Alone in the Dark 2 avec mon frère (avec comme nom de code original "Project InDark") qui s'occupait des ressources graphiques (modèles 3D, etc...) et moi j'étais au commandes du moteur. Pour ce projet j'avais choisis Irrlich un moteur 3D en C++ assez pratique et facile à prendre en main. Les études ont eux raison de se projet par la suite mais je peux vous assurez que je parlais toujours de Project InDark qui était devenu "Project In The Dark" à mon frère il y a quelques mois (ce projet n'est donc pas mort, il est simplement suspendu et ajouté à la pile de projets que j'aimerais réaliser). J'ai un peut honte de vous montrer ce screen mais voilà à quoi ressemblait le jeu, vous pourrez tentez d'y trouver une ressemblance avec l'entrée de Hell's Kitchen et de son labyrinthe, le personnage n'était pas prêt à l'époque c'est donc un modèle que j'ai récupéré sur le net pour faire les tests. La caméra était fixe comme sur les autres épisodes de la série.

    Project InDark... un projet tombé In The Dark pour le moment




    Pour en revenir à Free in the Dark, j'ai implémenté pour l'instant une nouvelle méthode détection des jeux ce qui me permet de lancer désormais les version démos. Après quelques heures de hacking sur le moteur j'ai réussi à avoir la démo américaine de AITD 1 "In Game" mais après quelques modification j'ai mis en l'air mon hack et je suis bloqué au menu. La démo d'AITD2 quand à elle montre une image (la palette n'est pas la bonne) et c'est tout. J'ai aussi commencé d'implémenter un système qui permettra d'utiliser un exécutable pour tout les jeux, ce qui va être assez pratique pour moi pour essayer le moteur sur toutes les versions du jeu que j'ai (entre les version démo, démo-attract, disquettes, cd-rom, mac... vous comprendrez que coller un .exe avec 6 dll dans chaque dossiers ça me gonfle ^^').

    Et pour le futur

    Je compte faire deux choses

    1. Maintenir la version C du jeu au maximum et peut être monter une équipe pour ça. Le jeu se nommera toujours Free in the Dark et sera distribué dans les mêmes conditions que le premier. 
    2. Forker certaines parties du moteur et le réécrire entièrement avec une architecture objet dans un autre langage
    Pour le point numéro 2 j'hésite beaucoup entre C++ et C#
    •  C++ a ses avantages (Poo, template, STL) mais aussi ses inconvénient (complexité, exception pas super pratique à mettre en place, encore beaucoup de monde dans le code .c et .h). Un bon port en C++ permettrait d'avoir un jeu fonctionnel à peut prêt sur tout les PC et sur les consoles (Wii, Psp, Dreamcast, Ps2, etc.. comme le fait ScummVM, mais la difficulté est vraiment ENORME) ;
    • C# via .Net/Mono permettrait d'avoir un moteur certes pas aussi performant qu'en C ou en C++, mais on gagnerais en souplesse, en facilité de débogage, en portabilité si on utilise les bonnes APIs et les bons Frameworks (on va me resortir la même chose pour C++ je le sais). Le gros avantage du C# est que je peux cibler tout les PC récents (qui exécute au moins .Net 2.0 avec une carte graphique DX8 et/ou OpenGL 1.5) sous Windows, Linux et Mac Os X ainsi que les terminaux Android (via ExEn ou OpenTk), iOS (ExEn ou MonoGame), Xbox 360 et Windows Phone 7 (je doute que Microsoft me laisse proposer ça sur le store Market Place, mais techniquement c'est possible).
    Le choix entre ces deux langages n'est pas simple et demande réflexion car je ne veux pas perdre de temps inutilement. Rester sur les sources C va être compliqué sur le long terme donc je dois faire un choix.

    Si vous êtes programmeur que ce soit amateur et/ou professionnel et que le développement d'un moteur de jeu vous intéresse alors n'hésitez pas à me contacter :) Je lancerais un recrutement sur divers sites lorsque j'aurais publié ma version 0.2 de Free in the Dark sur une forge (Github ou Google Code).

    5 commentaires:

    1. C'est énorme, je suis fan absolu de ce jeu qui m'a traumatisé dans mon enfance. J'ai moi aussi l'édition collector des trois premiers et du quatrième.

      Super boulot que tu es en train de faire, je laguis tellement de pouvoir rejouer à ces jeux exceptionnels!!!

      Je te proposerais bien mon aide si j'avais de quelconques connaissances en programmation, mais malheureusement ce n'est pas le cas. Je n'ai que mon soutien moral à apporter au projet, courage ^

      RépondreSupprimer
    2. Salut,

      Merci pour ton soutien car le travail sur la reprise du moteur n'est vraiment pas simple. Actuellement on peut rejouer facilement à AITD avec Dosbox mais Free in the Dark proposera des fonctionnalités supérieurs comme le filtrage, la taille de la fenêtre, etc.. et ça fonctionnera sous Linux et Windows.

      J'ai commencé en parallèle un port du moteur en C# ça me permet de vraiment me mettre dans le code et de comprendre un peu plus comment il fonctionne, mais comme je l'ai dit les sources sont très complexes.

      Dans tout les cas, j'écrirais un autre billet pour parler des avancés ;)

      RépondreSupprimer
    3. Salut, je n'ai pas d'édition collector, mais j'ai les 3 boites originales en carton, AITD est mon jeu préféré de l'époque, je n'ai d'ailleurs jamais joué aux deux derniers (new nightmare et l'autre) car je trouvais que le jeu n'était plus trop dans l'esprit d'origine (bon le 2 et le 3 non plus tu va me dire), mais il faudrait quand même que je les testes un de ces jours.

      Je me souviens être tombé par hasard sur free in the dark, mais devant l'apparent abandon du projet j'ai préféré en rester à dosbox, finalement le jeu tourne plutôt bien sur ma machine, par contre la plus haute résolution des modèles 3D de free in the dark est bien jolie ! Et il faut bien avouer qu'il y a quelques trucs très dérangeant sur le jeu sous dosbox du fait d'être obligé de le faire tourner "trop vite" pour avoir un jeu fluide. Du coup ça devient difficile de se mettre en mode course, et lancer un objet relève du défi !

      Ayant récemment joué à Amnesia je me suis mis en tête de recréer AITD 1 vu que le jeu propose des éditeurs et permet de créer jusqu'au plus compliqué des scripts, je trouve que le moteur de ce jeu permettrait un magnifique AITD en vue subjective, en altérant bien sûr quelque peu les règles du jeu histoire de coller au fonctionnement d'Amnesia. Les plus grand défis vont être je pense le modelage et l'animation des monstres

      RépondreSupprimer
    4. Bonjour, je cherchais il y'a peu une eventuelle release du moteur FITD original, mais malheureusement sans grand succès...
      Quelle fût donc ma surprise quand je tomba sur ce blog ??!! (merci google)
      C'est donc avec le plus grand intérêt que je suivrai ce blog en espérant voir de fréquentes mise à jour :)
      bon courage en tout cas !!
      Julien (fan des 3 premiers opus, surtout du 1 !!)

      RépondreSupprimer
    5. Salut à tous,

      J'ai été pas mal pris du coup je ne répond que maintenant désolé :/ Alors déjà pour vous rassurer je vous invite à aller ici http://code.google.com/p/fitd-reloaded/ vous pourrez y trouver les sources en libre accès, les télécharger et les compiler. Si vous êtes sous Linux c'est super facile, sous Windows c'est plus chaotique mais ça se fait.

      Je vais prochainement passer ces sources sur github pour pouvoir travailler correctement car les sources actuelles sont celles publiées par Vincent Hamm et il n'y a pas mes patches pour faire fonctionner la démo et corriger certains trucs..

      Je vous tiendrais au courant, à bientôt :)

      RépondreSupprimer