|
CodeFR Recherche
Mégaphone
hixcod, 12:10, Jan 09, 2010:
Happy New year !
MooZ, 09:41, Jan 05, 2010:
Bonne année! (erm...)
MooZ, 13:51, Jan 05, 2009:
Bonne année!
MooZ, 07:19, Jan 04, 2008:
Diantre! Je me suis fait doublé moi aussi.
Bonne année quand même (et il faut que je trouve une pinup).
Axioplase, 15:39, Jan 03, 2008:
Merde, Froggy m'a devancé sur 2008 !
Froggy, 22:21, Jan 01, 2008:
Super mega cool
MooZ, 12:34, Oct 27, 2007:
Yeah! Seven!
Seven, 16:41, Oct 18, 2007:
Prout !
MooZ, 09:47, Mars 05, 2007:
Feed the wiki comme dirait l'autre!
hixcod, 19:26, Mars 04, 2007:
et moi donc
|
Sur une idée de MooZ
20 décembre 2003 Postmortem de Bombermaaan par furyPour les incultes, Bomberman est un jeu arcade où vous contrôlez un personnage posant des bombes dans une arène. Etant très fan du mode multijoueur (une pure merveille), j'ai voulu commencer un clône de ce jeu. J'ai pris pour modèle les jeux Bomberman originaux, ceux de Hudson Soft, notamment : - Bomberman '93 sur PC Engine - Bomberman '94 sur PC Engine - Super Bomberman 1, 2, 3, 4 et surtout le 5 sur SNES. ![]() L'auteur en pleine réflexion... Le projet a été commencé pour le fun, en juillet 2000, puis le temps passant je m'en suis servi comme démo pour me faire embaucher dans un studio de jeux vidéo. Début 2001, j'ai fait un site dédié à ce projet : http://fury94.free.fr/ (cache). Seul sur le projet, voilà ce qui s'est bien passé et mal passé. Ce qui s'est bien passé1. Le projet ressemble à un produit fini. De nombreux projets amateurs sont abandonnés avant d'être finis, presque toujours pour les mêmes raisons : pas le temps ou plus autant de motivation qu'au départ. Comme je suis passé par là aussi, le but était de terminer le projet. C'est d'ailleurs ce qui m'a poussé à faire un petit jeu plutôt qu'un projet plus ambitieux que je n'aurais pas fini. Contrairement à ce que je pensais au début, faire un petit jeu demande beaucoup de temps. Quand on a une idée de jeu en tête, on ne pense pas à toutes les difficultés qu'on pourra rencontrer. ![]() Le jeu final Avec de la volonté, j'ai pu à mon avis éliminer beaucoup de petits défauts, et rajouter beaucoup de petits plus qui différencient un jeu fait à la va-vite et un jeu paufiné : - plus aucun bug connu - bonne reproduction de l'ambiance du jeu original - menus travaillés et agréables - intelligence artificielle sympa - sauvegarde de préférences - édition de niveaux - support de joysticks 2. Indépendance totale. Ce qui me faisait peur entre autres, c'était les données. Je ne suis pas graphiste, et l'idée de demander les services d'un vrai graphiste ne me plaisait pas. Avoir un vrai graphiste avec soi permet d'avoir des sprites de qualité à la demande, et le jeu peut avoir son propre style. Par contre si sa motivation baisse (après tout il travaille gratuitement), retrouver un autre graphiste avec le même style sera très dur, et si ma motivation baisse, je vais moins travailler dessus par moments et sa motivation à lui va baisser. C'est pour cela que j'ai décidé de m'occuper de tout, quitte à ripper les sprites et les sons des jeux originaux au maximum. Le plus gros travail a été au niveau des sprites. J'ai choisi de reprendre principalement les graphismes de Bomberman '93. Le seul émulateur PC Engine que j'avais était une démo de Magic Engine, qui permettait de jouer pendant 5 minutes à une rom. Sur SNES, j'utilisais SNES9X. Les séances de rip consistaient à se fixer sur une animation précise, à l'exécuter et à prendre des screenshots le plus fréquemment possible, puis vérifier qu'on a bien tout pris. Enfin il fallait insérer tous les sprites obtenus dans un bitmap contenant un tableau de sprites de même taille. C'était très pénible et encore, le pire était d'avoir à faire un cinquième bomber de couleur verte dans l'arène, tandis que Bomberman '93 n'en comptait que 4. Il a fallu coloriser le bomber différemment au pixel près car je n'utilisais pas de mode palettisé (au final je pense que ca m'aurait plus freiné). Lorsqu'il a fallu ajouter des features que Bomberman '93 n'avait pas, comme le lancer de bombes, j'ai dû créer moi même mes propres sprites à partir de sprites existants !! Difficile d'exprimer une animation dans des sprites aussi petits (un bomber qui marche fait 21x22 pixels). Exemple de tableau de sprites Au niveau du son et de la musique, je me suis penché sur un moyen de ripper les sons avec un logiciel de capture peu connu, Total Recorder. La version de démonstration permet d'enregistrer 40 secondes du wave sortant par la carte son au moment voulu. Les sons de Super Bomberman 5 me plaisaient le plus, et heureusement ce jeu inclut un "sound test" dans les options ce qui m'a permis de gagner du temps. Après le rip, il restait quelques ajustements que j'ai pu faire avec Cool Edit 2000. La musique m'a posé problème, car je voulais que mon jeu ne prenne pas plusieurs mégas en téléchargement. J'ai parcouru les chiptunes (MOD, XM, S3M...) de http://www.chiptune.com/ (cache) pour enfin trouver 3 musiques sympas pour les menus et le ingame. Globalement, même si c'était fastidieux, tout s'est bien passé et c'était vraiment une belle expérience de développer un jeu en passant régulièrement du code aux sprites ou des sprites aux sons. Cela variait beaucoup les tâches et renforcait ma motivation pour continuer. 3. Code propre et documenté. Tout au long du développement je me suis forcé à changer ma facon de coder pour obtenir des sources propres et convenablement documentées. Tout cela, je le faisais surtout par principe, sans vraiment croire que cela me servirait. Et en fait, je ne le regrette pas, ca m'a fait gagner du temps. Le projet s'est étalé sur 2 bonnes années avec des périodes très creuses, et quand je me retrouvais à débugger une partie de code assez complexe, j'étais bien content de retrouver mes commentaires qui m'ont vraiment économisé des heures de debug. Egalement, les commentaires omniprésents dans le code des fonctions m'était très utile ; par exemple, à chaque if, je mettais une ligne en commentaire au dessus qui décrivait en anglais la condition testée, ce qui me permettait vraiment de lire mon code comme un algorithme ! Beaucoup de comfort dans la relecture du code source donc, ce qui était important car cela facilite ma tâche et aide à éviter les moments de découragements. 4. Intelligence artificielle. Pour compléter le jeu, il fallait bien sur des bots à combattre dans l'arène. Gros challenge, à part une IA de fantôme de pacman, mes connaissances étaient nulles. J'ai commencé à me documenter, pour me rendre compte qu'il y avait surtout des articles d'algorithmes évolués comme la sélection génétique ou les réseaux de neurones. Bien que tout cela soit alléchant, je pensais que j'allais me compliquer la vie avec tout ca, je voulais quelque chose de simple car après tout, l'IA sur Super Bomberman 5 n'est pas si bête et pourtant tournait parfaitement sur une SNES. L'article qui m'a en fait le plus aidé est "Building Brains into Your Games" (http://www.gamasutra.com/features/19970601/build_brains_into_games.htm (cache)). Il donne des explications sur la facon la plus simple de faire une IA : les machines à états. C'est ce que j'ai utilisé. L'IA d'un bomber comporte 5 états : - penser : décision, planification d'une action, puis passage à l'état correspondant - item : aller chercher un item - attaquer : chercher à tuer un bomber ennemi - défendre : chercher à se mettre en sécurité - balade : se déplacer librement afin de trouver quelque chose qui mérite l'attention Les bugs sont vite arrivés et c'est là que j'ai pu apprécier ce qu'était programmer une IA. Simple dans la théorie, difficile à coder et à débugger dans la pratique. Il faut toujours chercher des solutions simples sous peine de perdre beaucoup de temps voire de chercher une meilleure solution. Les bugs sont souvent difficiles à reproduire car il faut remettre le bot dans la même situation qu'il a mal gérée. Et quand on parvient à reproduire le bug, il faut pouvoir comprendre ce qui fait que le bot réagit ainsi. Pour cela, il faut pouvoir à tout moment connaitre l'état dans lequel est le bot, ce qui est difficile en temps réel. La meilleure méthode a été de créer une fenêtre console DOS à part et d'y faire des printf de debug, les breakpoints étant souvent inutiles. Après avoir ajouté des touches de debug permettant de rendre le jeu de 2 à 10 fois plus lent, j'ai pu débugger bien plus facilement les bots. Malgré le nombre impressionnant de bugs d'IA que j'ai eu à corriger (il suffit de voir l'historique sur la page web), les bots sont très efficaces et vivants, et même un très bon joueur doit faire attention lors de combats à 5 dans l'arène. J'en suis très content car elle consomme peu de ressources CPU. Dommage qu'elle ne sache pas de servir de nouveaux items que j'ai rajouté par la suite (lancer/kick de bombes...). La partie IA du jeu reste celle qui m'a le plus amusé :) 5. Feedback. Quand le jeu est devenu assez fourni, j'ai voulu savoir ce que les autres joueurs pensaient du jeu, je l'ai alors posté sur nombreux sites de jeux freeware, tels que http://www.gamehippo.com/ (cache). Le jeu a remporté un bon petit succès au départ, et j'ai recu à ce jour plus de 200 mails de feedback, ce qui est très motivant. Les mails de feedback concernaient surtout des demandes de nouvelles features. Le temps passait et j'ai pu satisfaire la demande de quelques utilisateurs, notamment l'édition de niveaux, qui d'ailleurs a été tellement appréciée par celui qui l'a demandé qu'il m'a développé à ma grande surprise un super éditeur de niveaux en MFC que j'ai ajouté au zip à downloader. Le feedback était très motivant mais les demandes étaient tellement différentes (certains veulent des skins, d'autres des graphismes plus grands, d'autres le mode réseau, d'autres veulent pouvoir baisser la musique, etc, etc) que je ne savais parfois plus par quoi commencer. Ce qui s'est mal passé1. Blocage au niveau du code. Au début du développement, bien que je sois très motivé, j'avais parfois de gros "blocages" qui m'empêchaient complètement d'avancer. La raison était toujours la même : je devais ajouter une feature et la facon pour l'implémenter ne me semblait pas "propre". Je pense que tout cela est dû au fait que je lisais énormément de docs de programmation orientée objet pendant cette période, et je me fixais sur le code design à tel point que je ne voyais pas que le code n'avancait pas ! Cette période a duré environ 3 mois jusqu'à ce que j'en ai marre de ne plus faire évoluer le projet. Après être passé par des tas de façons de penser comment il est bon ou mal de coder, aujourd'hui je pense qu'il faut avant tout penser simple, faire marcher son bon sens et savoir remarquer rapidement qu'on cherche à faire trop compliqué. A mon goût trop de personnes pensent au C++ comme un but et non pas comme un moyen, et finissent par se toucher en utilisant des dynamic_cast, de la STL ou des templates à tout va (bien que je pense que les templates peuvent vraiment servir, certaines personnes abusent). Si vous voulez m'insulter à ce propos, je suis disponible le soir sur #codefr :) 2. Le projet n'a pas pu satisfaire tout le monde. Alors que certaines personnes ont été d'après elles comblées par ce jeu, certaines m'ont demandé des features que je n'ai pas développé. Notamment le mode réseau, que beaucoup m'ont supplié d'ajouter. Heureusement pour moi mais malheureusement pour le projet, j'ai été embauché comme programmeur de jeux à Babylon Software (http://www.babylonsoft.com/ (cache)), grâce à ce projet qui m'a permis d'être remarqué. Pendant mes études d'informatique à l'IUT je ne programmais à l'école qu'environ 6 heures par semaine, ce qui me laissait toute la motivation nécessaire pour faire ce bomberman le soir, et c'est d'ailleurs pendant cette période que ce projet a le plus évolué. A partir du moment où j'ai dû travailler 8h par jour à Babylon pour environ 6 heures par jour (j'imagine que ca donne à peu près ca vu les temps de compilation et de link monstrueux), le manque de courage pour retourner au Bomberman le soir s'est fait ressentir. Comme je voulais surtout avoir un projet bien paufiné, je me suis forcé à coder pour corriger les derniers bugs et de temps en temps j'ai codé dans le train pour rajouter une petite feature par ci par là. Une fois que tout me semblait en ordre, j'ai décidé d'arrêter officiellement ce projet plutôt que de faire espérer certains. Je réfléchis à la possibilité de le mettre open-source pour qu'il puisse évoluer sans moi, mais je n'y crois pas de trop, on voit tellement de projets de jeux sur sourceforge qui ont une activité nulle... 3. Feedback Une chose qui m'a consterné, c'est que beaucoup d'utilisateurs sont VRAIMENT cons. J'ai recu une cinquantaine de mails débiles qui demandaient pourquoi le jeu demandait FMOD.DLL (solution : il faut extraire le zip dans un répertoire et non pas double-cliquer comme un taré sur l'exe), ou bien pourquoi le jeu demandait DDRAW.DLL (solution : installer directx), ou encore (c'est le pire) qui me disait que mon jeu était formidable et très marrant à jouer, mais qu'il aimerait beaucoup y jouer et que je lui envoie par mail. Et sans oublier que la plupart de ces mails n'étaient ni en francais, ni en anglais. J'ai eu droit à de l'espagnol et de l'allemand surtout. Bien sûr je recevais aussi des mails intelligents mais il y avait une bonne proportion de mails comme ceux ci, alors qu'un fichier READMEFIRST.TXT expliquait tous ces problèmes. Et en fait j'ai trouvé la solution ultime anti-con. J'ai retiré mon adresse mail de mon site web, elle ne se trouve plus QUE dans le READMEFIRST.TXT. Depuis, je n'ai plus jamais recu de mail débile. Génial, non ? ConclusionMon but était de faire un clône sympa du battle mode de Bomberman, et je suis très satisfait du gameplay et des features que j'ai pu développer. Ma fierté est d'avoir pu obtenir un produit fini et non pas un semblant de jeu avec des bugs qui traînent comme tout ce que j'avais codé avant. Grâce à cette démo C++ j'ai pu me faire remarquer parmi les autres candidatures de Babylon et je ne regrette pas d'avoir mené ce projet jusqu'au bout. ![]() Bombermaaan Editeur : Aucun Développeur à temps partiel : 1 Budget : Environ 5 litres de sueur Durée de développement : 2 ans et demi Plateformes : Windows 95/98/2000/ME/XP Matériel utilisé : P3 500Mhz avec 128 Mo de RAM, disque dur 4 Go, 20 feuilles de papier, 3 crayons Logiciels utilisés : Microsoft Visual C++ 6.0 SP5, Paint Shop Pro 5.0, Cool Edit 2000, SNES9X, Magic Engine, Total Recorder Bibliothèques utilisées : FMOD, Win32, un poil de STL Taille du projet : Environ 25000 lignes de C++ Créé par: fury dernière modification: Dimanche 21 of Décembre, 2003 [01:07:50 UTC] par fury |
Connexion Utilisateurs connectés
Il y a 13 utilisateurs connectés
LinuxFR news
MAKE Hack a Day GameDev Clubic news |