mercredi 17 novembre 2010

Work in progress

"Sali salut !" comme dirait ce cher Ned Flanders. Alors aujourd'hui je reviens avec une petite avancée dans mon projet de FMR. Jusqu'ici, j'avais développé petit à petit une démonstration de jeu afin de voir comment tournait XNA et afin de tâter un peu la "bête".
Un problème me travaillait depuis un moment : comment faire pour créer une navigation entre les différents états d'un jeu (menus, niveaux, phases de carte, s'il y en a, et autres phases possibles) sans m'arracher les cheveux et sans avoir à reprendre le travail d'autres? (chose particulièrement douloureuse de manière générale...)
Pour résumer l'ensemble des contraintes, il faut savoir qu'avec XNA il y a véritablement trois temps dans un jeu : l'initialisation, la boucle de jeu et l'arrêt du jeu. Ce qui nous intéresse ici, c'est la boucle du jeu qui se divise elle-même en deux phases qui servent respectivement à la synchronisation (mise à jour de toutes les données) et à l'affichage (normalement aucun calcul, juste l'affichage du résultat).
Donc, pour réaliser un début de jeu, c'est extrêmement simple : on détecte les entrées de périphérique (clavier, souris, manette...), on met à jour les informations d'affichage puis on affiche. Mais dans le cas, plus complexe, où on veut commencer à faire un jeu plus complexe, on se heurte au problème des états. Pour répondre à cela, une solution toute simple existe, utiliser des enums. Les utiliser aide à gagner en clarté (ça évite les codes en entiers ou en chaines de caractères) mais ça n'améliore que peu la lisibilité (dans le cas de multiples if ou case). C'est donc pour à la fois améliorer cela et améliorer l'indépendance entre les différentes parties du jeu que j'ai opté pour une restructuration complète du jeu. La nouvelle structure est organisée en couches, voire en arbre.


Cette façon d'organiser le programme ne se suffit pas, il faut en plus que chaque couche mère transmette un socle d'informations communes à ses couches filles. Ce socle d'informations contient tout ce qui est fenêtre, espace d'affichage, périphériques d'entrée (clavier, souris, manette...) ou même le temps d'exécution du programme (pour permettre, par exemple, d'afficher des animations de façon fluide, en fonction du temps écoulé).
Le fonctionnement de cette structure est assez simple : quand on lance le jeu, une variable d'état de "jeu" est par défaut sur "intro". Une fois que l'intro a fini de s'exécuter, elle place elle-même l'état de "jeu" à "menus". Une autre variable qui permet de se repérer dans la couche Menus est elle par défaut sur "Principal". Selon les actions et choix de l'utilisateur, on changera en local la valeur de cette variable ou, si on veut jouer, la valeur de "jeu". On procède ainsi sur tous les niveaux, ce qui permet d'automatiser certaines actions. Par exemple, si dans Jeu-> Partie -> En-Jeu -> Menus on choisit "Quitter la partie", la partie "Menus" ne modifiera que la définition locale qui dira quelle action faire à la couche supérieure, qui elle-même modifiera sa définition locale et ainsi de suite jusqu'à ce qu'on en revienne à l'état Jeu -> Menus -> Principal.
Cette façon de concevoir permet de mettre en place des algorithmes plus courts, plus légers et automatise pas mal de traitements qui autrement pourraient entrainer des erreurs.

Bon bien sûr, cette façon de faire n'est certainement pas la meilleure, mais c'est en tout cas une manière efficace d'arriver au résultat voulu et (je peux en témoigner) d'une façon largement satisfaisante.

Cette avancée m'a permis de refaire à zéro l'ensemble de ce que j'avais déjà fait (afin de coller le plus possible au schéma donné précédemment) et surtout de n'avoir que des petites modifications à chaque ajout. Par exemple, j'ai mis dans mon menu principal une animation de fond plutôt qu'une image : je n'ai eu pour cela que la partie Menus à refaire. Ce principe de couches est réutilisé d'ailleurs dans la gestion des périphériques. En effet, comme mon développement prend en compte le PC et la XBox 360 et que dans le cas du PC on peut avoir soit une manette soit combo clavier / souris, il serait plus que lourd de faire tout mon programme en version double. La solution que j'ai choisie, c'est de faire un objet (une couche) Commande qui regarde quel périphérique utiliser et qui retourne donc la même chose quelque soit le support et quelques soient les périphériques. Du coup, pour reprendre l'idée du schéma donné plus haut, l'organisation serait la suivante :

En fait, on décrit dans Commandes des méthodes comme "Pause" ou "Action" qui sont en fait des informations "abstraites" que l'on veut récupérer et dans lesquelles on va d'abord analyser les informations spécifiques aux périphériques pris en compte pour retourner un état. Cet état a pour intérêt d'être toujours valable et de ne demander aucune information à la classe qui l'utilise.

Donc pour terminer cette petite partie, je vais vous donner quelques images de ce que j'ai réalisé puis j'ajouterai un petit bonus coup de cœur.





Et finalement, voici mon petit bonus coup de cœur, qui n'est pas si récent que cela et qui réveillera quelques souvenirs chez ceux qui connaissent l'original : Zelda 2 (NES).
Mais attention, ce n'est pas vraiment Zelda 2 tel qu'il est sorti il y a quelques décennies déjà, mais une version totalement revue en 3D par un passionné. Si en général 3D rime avec mauvaise nouvelle pour ce genre de classique, ici il faut avouer qu'en plus d'être bien réalisé, cet épisode est plutôt fidèle à l'original (hormis pour les villes).
Vous pourrez le trouver ici, après avoir installé un petit patch pour que votre navigateur puisse afficher le jeu.
Quelques images pour vous faire une idée :





samedi 13 novembre 2010

Gotham Paris Games Week

Ça faisait depuis le mois dernier que je n'avais fait d'article, mais là je reviens avec quelques images du Paris Games Week (le PGW pour les intimes). Qu'est-ce-que le PGW? C'est juste le salon du jeu vidéo le plus important de France, organisé par le SELL et qui regroupe (forcément) tous les plus grands noms du jeu vidéo qui viennent présenter leurs dernières nouveautés.

Pour sa première édition, le salon s'offrait tout simplement le Hall 1 du parc des expositions de Paris (Porte de Versailles) et le week end de la Toussaint habituellement réservé au Micromania Game Show, reléguant ce dernier au rang de simple démonstration privée. Détrôner le Festival du Jeu Vidéo et le Micromania Game Show, le PGW l'a fait et tente de jouer des coudes avec la Gamescom. Pari réussi?


N'ayant pas pu tout essayer (le salon était assurément rempli), je vais vous proposer mon parcours.  Tout d'abord, on pouvait voir en entrée une grande pub Fallout 3 : New Vegas à côté de l'affiche du PGW.



Commençons donc le bal des jeux avec Kinect qui était directement à l'entrée et qu'il m'a donc fallu (ré)essayer. S'il faut admettre que les mouvements sont bien reconnus, il y a un petit décalage sur certains jeux qui, même s'il est très faible, peut s'avérer gênant. Ensuite, nous sommes allé sur le stand Nintendo où étaient présentes de grosses licences : Zelda, Donkey Kong, Golden Sun, Golden Eye...
Je vais passer chacun d'eux en revue :
  • Donkey Kong Country Returns : Façon New Super Mario Bros. il se joue en 2D avec des graphismes 3D, renouant ainsi avec ses racines : et quelle réussite! Magnifique, une jouabilité sans reproche, un mode deux joueurs dans l'esprit de NSMB, c'est simplement l'épisode le plus prometteur depuis Donkey Kong Country 2.

  •  Zelda Skyward Sword : Semi-cellshadé et semi-réaliste, cet épisode propose (en tout cas la démo) des graphismes magnifiques. La maniabilité reste la même que dans l'épisode précédent : Menu d'objets circulaire, répartition sur la manette identique. Une chose est à signaler : la détection de mouvements est simplement parfaite et là le Wii Motion Plus montre sa toute puissance. La détection ne s'arrête pas à l'inclinaison, mais les vecteurs sont aussi parfaitement pris en compte. Une chose est sûre, j'ai ce jeu le jour de sa sortie ;)




  •  Golden Eye : N'ayant pu tester que le mode multijoueur, je dois dire que celui-ci est plutôt honnête. Des graphismes dans la moyenne de ce que j'ai pu voir sur Wii pour le moment, une maniabilité (à la manette dorée) plutôt bonne. A noter que (Ô hérésie) Pierce Brosnan a été remplacé par Daniel Craig dans cet épisode.
Pour les autres jeux, nous y reviendrons plus tard...

Bien que je l'aie déjà, j'ai quand même fait un tour par le stand Fallout 3 : New Vegas. Je pourrai en écrire assez long, mais je préfère laisser l'entièreté du sujet à un article ultérieur, logiquement consacré au jeu.

Voilà, ce sont là les seuls jeux que j'aie essayés, malgré moi puisque, il faut bien l'avouer, les files d'attentes étaient trop longues pour espérer en faire plus. J'ai par contre assisté à la présentation de la résistance anti-nord-coréen dont voici le journal :


Pour ceux qui ne connaissent pas, il s'agit du jeu HomeFront de THQ qui a l'air, d'après la présentation donnée, plutôt impressionnant. Dans une Amérique occupée par la Corée du nord, la résistance s'organise afin de récupérer le contrôle du territoire. Avec un multijoueur allant jusqu'à 32 en même temps, le jeu (au scénario surprenant) est présenté comme élaboré par d'anciens analystes de la CIA. Ce jeu est à suivre de près.

J'avoue que cet article propose plus de photos que de texte, mais un tel événement ne se commente pas tant que ça, il se vit. A mon sens, les images et vidéos apportent plus de renseignements que tout le blabla que j'aurais pu mettre. Pour répondre à ma question d'introduction, je ne saurais dire si ces deux événements sont comparables, mais le PGW a déjà réussi son pari, c'est-à-dire d'être LE rendez-vous du jeu vidéo en France, et avec la concurrence déjà bien installée avant, ce n'est pas rien.
Je n'ai pas de photo du stand Sony, mais quand j'y suis passé, le volume de son était tellement insupportable que je n'ai pas pu y rester plus de quelques minutes. Les deux gros événements de ce stands étaient Gran Tourismo 5 et la WiiMote le Playstation Move. Rien de bien intéressant pour moi, puisque j'ai déjà une WiiMote...


Bon, comme je n'aime pas rester sur une fin aussi rapide, je vous laisse avec ce qu'a pensé ma sœur des jeux qu'elle a essayés et en bonus, quelques images des autres stands.
Avant cela, je tiens à préciser que je n'aurais pu réaliser ce voyage sans l'aide que m'a apporté mon père, ou sans la place offerte par Nintendo.

Morgane :
007 - Golden Eye ( Wii) :
N’étant pas une grande fan de ce type de jeux, mon avis sera donc sans grande importance, mais ayant testé ce jeu, je me devais donc de dire ce que j’en ai pensé.
Tout d’abord, ce que je reproche aux jeux de genre, c’est la maniabilité. Or, je m’y suis très rapidement adaptée et j’ai même réussi à viser des adversaires (si, si!), donc autant dire que ce jeu a été une très bonne surprise. Point de vue graphisme ( je ne m’y connais pas du tout) rien de spécial, le jeu semble sans aucune prétention, faisant passer un bon moment comme son lointain cousin sur N64.


Golden Sun  (DS) :
J’avais déjà joué au tout premier volet de la saga sur GBA, que j’avais fortement apprécié. Ne sachant à quoi m’attendre et ayant peur d‘être déçue, j’ai finalement essayé ce jeu, et je pense honnêtement qu’il pourrait être un de mes prochains achats. Très bonne transition pour apprendre à jouer, des petites énigmes à résoudre dès le début... Ce jeu est vraiment sympa, divertissant. Je ne sais pas ce que des professionnels diraient, mais pour moi qui suis une joueuse occasionnelle, ce jeu pourrait me faire rester des heures sur ma console. Vous l’aurez compris, la démo m’a rendue très enthousiaste.







Pokémon Donjon Mysère ( DS) :
Cela fait à présent 10 ans que je suis fan de la saga Pokémon, et n’ayant jamais joué à un jeu Pokémon autre que les bons vieux RPG, quelle ne fut pas ma déception lorsque j’ai essayé ce jeu! Il m’a semblé extrêmement répétitif, dès le début on est lâché dans l’aventure sans aucune explication, on tourne assez facilement en rond... Cela n’était biensûr qu’une démo, et il est difficile de résumer un jeu entier à partir de ça, mais mes impressions sur ce jeu sont franchement mauvaises. Je vous le déconseille.


Et maintenant, les images promises ;)