Rapport de projet Metal Slug
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Université de Montpellier Faculté des Sciences Rapport de projet Metal Slug Thomas BONNIN Jules GIRARD Gilles SILOTIA Pascal WAGNER 25 avril 2015 Sous la direction de M. Mickael Montassier.
Sommaire 1 Problématique 3 2 Cahier des charges 4 2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Spécications fonctionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.1 Spécications fonctionnelles globales . . . . . . . . . . . . . . . . . . . . 5 2.2.2 Spécications fonctionnelles du gameplay . . . . . . . . . . . . . . . . . . 5 2.3 Storyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 Spécications non-fonctionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.5 Spécications bonus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Gestion de projet 9 3.1 Étapes du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Dicultés rencontrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4 Analyse technique 11 4.1 Animations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.1 Modèlisation des animations . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.2 Chargement des animations . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.3 Lecture des animations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.4 Les diérents modes de lecture des animations . . . . . . . . . . . . . . . 12 4.2 Gestion des collisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.1 En quoi consiste la gestion des collisions ? . . . . . . . . . . . . . . . . . 13 4.2.2 Cas simple : collision de bords . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.3 Cas complexe : collision de coins . . . . . . . . . . . . . . . . . . . . . . . 13 5 Rapport de bogues 14 6 Conclusion 15 1
Table des gures 2.1 Cas d'utilisation général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Cas d'utilisation lié au gameplay . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.1 Sauvegarde des animations en XML . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Diagramme de classe concernant les animations . . . . . . . . . . . . . . . . . . 12 4.3 Deux résultats de collisions du même coin. . . . . . . . . . . . . . . . . . . . . . 13 1 Diagramme de Gantt : Étape 0 et brainstorming . . . . . . . . . . . . . . . . . . 16 2 Diagramme de Gantt : Développement et correction des bugs . . . . . . . . . . . 16 3 Diagramme de Gantt : Écriture du rapport . . . . . . . . . . . . . . . . . . . . . 17 4 Diagramme de Gantt : Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . 18 2
Chapitre 1 Problématique Au l des années, le jeu vidéo a évolué grâce à l'émergence de nouvelles gestions des graphismes, de nouveaux types de jeu et de nouvelles technologies. Vers la n des années 80, le jeu vidéo voit apparaître le shoot'em up avec le mythique Space Invaders. En 1996 voit le jour Metal Slug, shoot'em up édité et développé par SNK, premier d'une longue série. Metal Slug est un jeu en side-scrolling 1 qui a construit sa notoriété de par un gameplay nerveux, un humour parodique et des graphismes riches et soignés pour l'époque grâce à l'utilisation du délement parallaxe 2 et à des sprites détaillés. À une époque où tant le matériel que la programmation étaient des contraintes, SNK réus- sira tout de même à proposer un jeu très réussi à tout point de vue pour l'époque, disponible originellement sur la borne d'arcade Neo-Geo MVS (microprocesseur cadencé à 12 mégahertz, 64 kilo-octets de mémoire vive, programmation en ASM 68K 3 ). Ecacité est l'un des maîtres mots dans la programmation des jeux vidéos d'époque, bien souvent au détriment de la con- ception. Ainsi, les premiers épisodes de la série ne présentaient pas les spécications et normes requises aujourd'hui à savoir la maintenabilité et la lisibilité obtenus grâce aux langages de programmation de plus haut niveau et à la programmation objet. Notre projet, proposé par M. Montassier dans le cadre de notre cursus de Licence Informa- tique à la Faculté des Sciences de Montpellier, a pour but de concevoir et programmer un jeu vidéo inspiré de la licence Metal Slug à l'aide des technologies actuelles. Après avoir mis au point dans le cahier des charges l'ensemble des besoins fonctionnels et des spécications techniques, nous analyserons comment nous avons pu gérer ce projet au niveau temporel et humain. Ensuite nous aborderons un point technique clé de notre programme. Enn, nous conclurons après avoir évoqué les dicultés rencontrées lors du projet. 1. Jeu à délement horizontal où le joueur se déplace de gauche à droite de manière générale. 2. Simulation d'un eet de profondeur en appliquant une vitesse de délement diérente aux diérents plans. 3. Assembleur dédié au microprocesseur. 3
Chapitre 2 Cahier des charges 2.1 Description Ce programme sera un jeu de type action qui s'inspirera de la série Metal Slug, en reprenant le concept de base, tout en y ajoutant une touche personnelle. Il s'agira donc d'un beat'em all 1 à délement horizontal en deux dimensions. Le joueur sera plongé dans un univers plein d'actions et dynamique dans lequel il incarnera un héros qui se déplacera dans un niveau, composé de trois phases dont une éventuelle en véhicule, se concluant par l'arontement d'un boss puissant et massif. De par sa nervosité, le gameplay fera appel aux reexes du joueur qui devra tirer sans cesse sur les ennemis ainsi qu'esquiver les tirs ennemis. Au l du jeu, il pourra compter sur des armes de plus en plus puissantes et destructrices grâces à des items, laissés par des ennemis, qu'il pourra récupérer. D'un point de vue graphique, le jeu s'appuiera sur des sprites du jeu original orant ainsi des eets visuels dynamiques et détaillés, style dessin animé d'époque. L'utilisation de l'eet parallaxe permettra une impression de profondeur lors du déroulement du décor. L'interface de jeu sera soignée, et dans le même ton que les jeux d'arcade des années 90 et 2000. Le clavier sera le système de contrôle principal et donnera au joueur la possibilité d'exécuter des actions semblables à Metal Slug. Le contrôle via un gamepad (contrôleur Microsoft) sera envisagé si le temps le permet. Cette série est aussi connue pour son humour parodique et ses nombreux easter eggs 2 le jeu en sera par conséquent pourvu. 1. Type de jeu englobant le shoot'em up où le personnage doit combattre un grand nombre d'ennemis en combat à mains nues ou à l'aide d'armes traversant ainsi les sections du niveau jusqu'au boss. 2. Fonction cachée, clin d'oeil ou référence à un jeu vidéo ou à un lm. 4
CHAPITRE 2. CAHIER DES CHARGES 5 2.2 Spécications fonctionnelles 2.2.1 Spécications fonctionnelles globales D'un point de vue globale, voici les fonctionnalités proposées au joueur présentes dans le diagramme ci-dessous (gure 2.1). Figure 2.1 Cas d'utilisation général Les fonctionnalités globales de l'application sont basiques comme les jeux d'arcade d'époque. En eet l'utilisateur pourra lancer une partie en solo où il pourra jouer seul à Metal Slug. À la n de cette partie si son score est susamment élevé il sera alors ajouté aux meilleurs qui seront consultables et réinitialisables à partir du menu principal . Une autre fonctionnalité prendra la forme d'un menu disponible à tout moment an de régler divers paramètres comme le son, la vidéo ou les commandes. Enn comme on peut le voir sur la gure 2.1, il est prévu, selon le temps restant, l'implémentation d'un mode multi-joueur jouable sur une même machine et la possibilité de choisir son personnage. 2.2.2 Spécications fonctionnelles du gameplay Dans cette partie, nous listerons les fonctionnalités oertes au joueur concernant les mouve- ments et actions possibles de son personnage en nous appuyant sur la gure 2.2.
CHAPITRE 2. CAHIER DES CHARGES 6 Figure 2.2 Cas d'utilisation lié au gameplay Le joueur pourra déplacer son personnage dans le niveau en cours grâce aux deux dé- placements principaux droite et gauche. Pour mener à bien les missions, il aura la possibilité d'esquiver les attaques en sautant ou en s'accroupissant. Il est bien sur possible de se déplacer en sautant. Pour se défendre, on pourra compter sur diérentes attaques comme le tir basique avec l'arme courante ou encore le tir spécial où le personnage lance une grenade lors des phases à pieds. Le personnage conserve toute les armes récupérées et le changement d'arme manuel sera possible. Un point important de Metal Slug, la destruction d'éléments accompagnée de belles anima- tions et d'eets visuels dynamiques d'explosions en tout genre. On pourra donc détruire tout un tas d'éléments du décor et les ennemis. Enn la destruction d'éléments ou d'ennemis causera de manière aléatoire la génération d'items. Voici un récapitulatif des diérents éléments en relation avec le gameplay : Actions Armes Items Ennemis Déplacer droite Couteau Vie Soldat simple Déplacer gauche Grenade Munitions Soucoupe volante Sauter Pistolet Arme Bowser S'accroupir Fusil à pompe Tir Lance-ammes Tir spécial Changer d'arme Mettre en pause
CHAPITRE 2. CAHIER DES CHARGES 7 2.3 Storyboard Le joueur sera plongé dans une aventure extravagante. Le premier niveau sera présent. Des niveaux supplémentaires seront réalisés si le temps le permet. Niveau 1 : Base militaire de l'armée régulière Phase 1 En véhicule (avion), scrolling horizontal vers la droite. Nombreux ennemis volants, véhicules anti-aérien, missiles à éviter. L'avion est détruit, et le héros est parachuté au sol. Phase 2 À pied ; fait face à de nombreux ennemis au sol, se bat au début avec un magnum et doit récupérer de meilleures armes et munitions sur les ennemis. Se conclut avec un mini-boss, le gardien de la base militaire. Phase 3 À pied, jusqu'au bureau du commandant, qui envoit un boss le défendre : un T-Rex robot qui tire des lasers par les yeux. Le commandant s'enfuit en fusée spatial, mais le héros arrive à le suivre. 2.4 Spécications non-fonctionnelles Dans le but de mettre en application l'apprentissage de la programmation objet eectuée lors de notre cursus et d'avoir une programme évolutif et maintenable nous utiliserons le concept de programmation orientée objet. Ainsi, le code source sera écrit en C++, avec une architecture MVC, et utilisera la biblio- thèque SFML. La SFML(Simple and Fast Multimedia Library) permet la conception d'application multi- media en 2D. Plus précisèment, elle permet de communiquer avec les diérents périphériques d'une machine, comme l'écran, les hauts-parleurs ou la carte réseau. L'utilisation de cette bib- liothèque est un très bon choix, celle-ci étant d'une grande simplicité d'apprentissage. De plus, elle est sous licence zlib/png (open source). Le développement se fera sous Linux, mais l'utilisation de Cmake permettra une compilation cross-plateform. 2.5 Spécications bonus Parmi les fonctionnalités non-essentielles au jeu, mais tout de même retenues, nous pourrions proposer : • Gestion du multijoueur sur le même ordinateur, via des périphériques diérents (clavier et manette). • Ajout de nouveaux types d'ennemis.
CHAPITRE 2. CAHIER DES CHARGES 8 • Possibilité de choisir le personnage à incarner. • Ajout de nouvelles armes. • Ajout de véhicules (avions, tanks, etc...) • Ajout de nouveaux niveaux. • Ajout d'eets spéciaux. • Portage du jeu sur d'autres systèmes (Windows, OSX). • Continuer plus loin dans le scénario (il fût question de voyage spatial et temporel à un moment).
Chapitre 3 Gestion de projet 3.1 Étapes du projet An d'assurer le bon déroulement du projet, nous avons mis en place un diagramme de Gantt(Annexe : Figure 4) possédant cinq grandes étapes : l'étape initiale, le brainstorming, le codage du jeu, la correction des bugs et le rapport. Chaque étape fut très importante pour le maintien d'une bonne gestion et d'une bonne organisation du dévelopement du jeu. Étape initiale : Étape essentielle et non négligeable qui a permis la prise de conscience du potentiel du sujet ainsi que la découverte du jeu Metal Slug pour les membres du groupe ne le connaissant pas. Nous avons de plus mis en place les diérents outils nécessaires au travail en groupe (Google Drive, Git). Brainstorming et Conception : Cette importante étape fut l'une des plus longues. Elle fut composée de plusieurs sessions de brainstorming, permettant la mise en commun des idées pour la rédaction du cahier des charges, suivies d'une phase de conception durant laquelle l'architecture du jeu fut dénie (diagrammes de classe, diagrammes de cas d'utilisation, etc...). Cette étape a également été consacrée à la prise en main de la SFML. Programmation : La programmation a durée environ 6 semaines. L'utilisation d'un dépôt Git 1 nous a aidée à organiser la partie développement en centralisant le code en un seul endroit. Test et correction : Une fois le codage achevé, nous avons eectué une phase de test an de corriger les bugs éventuels, connaître l'avis sur le rendu nal et ajouter des éventuels manques de notre part. Rapport : Cette étape se déroule sur toute la durée du projet. En eet, le rapport a été régulièrement complété. Il a toutefois été majoritairement rédigé après la phase de développe- ment. 1. Adresse du dépôt du projet : https ://github.com/DocThomus/TER-MetalSlug 9
CHAPITRE 3. GESTION DE PROJET 10 3.2 Dicultés rencontrées Durant l'élaboration de ce projet, nous avons connu quelques dicultés. La principale fût la dénition du cahier des charges : le sujet de notre projet étant partic- ulièrement libre, nous avons eu du mal à nous limiter en terme de faisabilité et de temporalité. Ceci explique que plusieurs des objectifs du cahier des charges n'ont pas pu être remplis dans le temps imparti : notre niveau ne comporte par exemple qu'une seule phase au lieu des trois prévues. Pour la même raison, certains éléments de l'architecture n'ont pas été parfaitement réal- isés : premièrement, chaque ennemi aurait dû posséder sa classe propre, héritant d'une classe abstraite représentant un ennemi. Or, nous n'avons développé qu'une seule classe pour tous les ennemis du jeu. Deuxièmemement, la gestion des IA des ennemis devrait être gérée en suivant un diagramme d'états simple propre à chaque ennemi ; or nous avons programmé celle-ci au niveau de la classe gérant les collisions entre les diérents objets du niveau (le contrôleur). Enn, nous n'avons pas eu le temps de développer une interface de jeu (santé du joueur, mu- nitions...). Un seconde diculté est survenue lors de la phase de développement. Les niveaux en C++ des diérents membres du groupe étant assez disparates, la participation à cette phase fût assez hétérogène.
Chapitre 4 Analyse technique 4.1 Animations 4.1.1 Modèlisation des animations Ce projet étant notre première application achant des animations 2D, nous nous sommes rapidement demandés comment gérer celles-ci. Nous avions à notre disposition diérentes feuilles de sprites 1 récupérées sur diérents sites. Deux informations sont nécessaires pour "trouver" une frame dans une feuille de sprite : sa position (par convention la position du coin supérieur gauche) et sa taille. Nous avons décidé de référencer les animations d'une image dans un chier XML (voir la gure 4.1.). Figure 4.1 Sauvegarde des animations en XML L'attribut speed indique la vitesse de l'animation en frames par milliseconde. La position d'une frame est représentée par les attributs x et y. La taille d'une frame est représentée par les attributs w et h. 1. Image contenant les frames d'une ou plusieurs animations. 11
CHAPITRE 4. ANALYSE TECHNIQUE 12 4.1.2 Chargement des animations C'est ensuite le programme qui, lors du chargement des diérentes ressources d'un niveau, charge les textures et les animations correspondantes (donc les chiers XML). Pour parcourir les documents XML, nous avons utilisé la librairie C++ rapidXML. Lors du chargement du chier XML, des objets Frame et Animation sont crées. Ces deux objets sont assez simples à décrire : Frame contient la position et la taille d'une frame, tandis qu'Animation contient une ensemble de frames ordonnés. Les objets Animations et les textures sont ensuite attribués à un objet Drawable 2 . Tout ceci est présenté dans la gure 4.2. Figure 4.2 Diagramme de classe concernant les animations 4.1.3 Lecture des animations La lecture des animations se fait ainsi simplement. À chaque mise à jour de l'objet, celui-ci mesure le temps écoulé depuis le dernier changement d'image : • Si celui-ci est inférieur à la vitesse de l'animation, il n'y a rien a faire. • Sinon, il faut passer à la frame suivante de l'animation. Il faut appeler la procédure setNextFrame() qui va indiquer à l'animation courante qu'elle doit changer de frame. Pour acher la frame courante, accessible via la méthode getFrame(), il sut de modier le rectangle de selection de la texture pour selectionner la frame voulue. 4.1.4 Les diérents modes de lecture des animations Il est possible de lire une animation dans plusieurs modes de lecture diérents, en fonction des paramètres passés à la méthode permettant de modier l'animation courante (changeAnimation()). Lecture répétée : C'est le mode par défaut. L'animation est lue en boucle jusqu'au prochain changement d'animation. 2. les objets Drawable sont les objets qui s'achent à l'écran
CHAPITRE 4. ANALYSE TECHNIQUE 13 Lecture simple : L'animation est lue une seule fois. Lorsqu'elle se termine, elle reste bloquée sur la dernière frame. Lecture enchaînée : L'animation est lue une seule fois, puis la lecture est enchaînée sur une autre animation en lecture répétée. 4.2 Gestion des collisions 4.2.1 En quoi consiste la gestion des collisions ? La gestion des collisions est l'une des parties générant le plus de calcul dans ce projet ; nous considerons donc pour les collisions tous nos objets comme des carrés. A chaque tour de boucle de jeu, nous vérions donc toutes les collisions possibles : personnages contre plateformes, projectiles contre personnages, projectiles contre plateformes, bonus contre joueur, etc... Dans le cas d'une collision entre personnage (joueur ou ennemi) et une plateforme, le personnage est décalé pour ne pas superposer ou traverser cette plateforme. Dans les cas comme la collision entre projectile et personnage ou entre bonus et joueur, le bonus ou la balle est détruit, et entraine un changement d'état chez le personnage ou le joueur (dégâts, changement d'arme, etc...). 4.2.2 Cas simple : collision de bords La collision entre le bord d'un personnage et d'une plateforme est le plus fréquent. Illustrons ceci par un exemple : les pieds du joueur sont en collision avec la base d'une plateforme, il est donc placé sur celle-ci ; inversement, si la tête du joueur est en collision avec le plafond d'une plateforme, il est placé sous celle-ci et tombe. De même pour les collisions gauche et droite. 4.2.3 Cas complexe : collision de coins La collision entre l'angle de deux objets soulève une ambiguité : il faut choisir si le personnage doit être poussé horizontalement ou verticalement. Le choix se fait de la façon suivante : il sut de comparer la "taille" de la collision projetée sur l'axe horizontal à celle projetée sur l'axe vertical. La gure (4.3) illustre cet exemple : pour le premier cas l'objet sera poussé vers le haut ; pour la second cas il sera poussé vers la gauche. Figure 4.3 Deux résultats de collisions du même coin.
Chapitre 5 Rapport de bogues Certains bugs n'ont pas pu être corrigés : • Les ammes du lance-ammes traversent les murs. • L'image "tremble" quand le joueur marche contre un mur. • Pas d'animation pour le joueur lançant une grenade. • Le joueur peut se tenir debout sur le coin des murs, permettant de remonter les empillages de caisses. 14
Chapitre 6 Conclusion Etant donné les problèmes rencontrés au niveau de la programmation de la classe Enemy et de la gestion de leur intelligence articielle, il serait préférable de corriger quelques points de l'architecture si la perspective d'une reprise du projet était envisagée. Des problèmes sont également survenus au niveau de la gestion du projet et résultent d'un manque d'expérience : nous avons eu du mal à nous projeter dans le temps pour évaluer la faisabilité du projet. Ceci explique que certaines fonctionnalités évoquées dans le cahier des charges n'ont pas pu être développées dans les temps. Cependant, la reprise du projet est tout à fait possible ; seules quelques modications de l'existant sont nécessaires, et seul le temps manque à l'ajout de nouveau niveaux, ennemis, armes, et nouvelles fonctionnalités. 15
Annexe Diagramme de Gantt Annexe 1 Diagramme de Gantt : Étape 0 et brainstorming Annexe 2 Diagramme de Gantt : Développement et correction des bugs 16
CHAPITRE 6. CONCLUSION 17 Annexe 3 Diagramme de Gantt : Écriture du rapport
CHAPITRE 6. CONCLUSION 18 Annexe 4 Diagramme de Gantt : Vue d'ensemble
Vous pouvez aussi lire