mercredi 22 octobre 2008

Dev - Les plateformes

C'est un des premiers ajouts que j'ai fait (après les pièces, les ennemis et la forme de clé). Malheureusement, je n'ai pas pensé à travailler sur les graphismes, alors j'ai fait un gros carré rouge, et je m'en contente pour le moment.
J'ai décidé de gérer les collisions avec la plateforme comme avec le sol : détecter si le héros touche la plateforme, et si elle se trouve sous ses "pieds". Cette méthode a été reprise du wiki de la PAlib :

if (héros après le côté gauche) && (héros avant le côté droit){
if (point tout en bas du héros) && (vitesse>=0){
héros.y-=1<<8;}

Ensuite on recherche une plateforme en dessous :

if (héros après le côté gauche) && (héros avant le côté droit){
if (point tout en bas du héros+1) && (vitesse>=0){
vitesse verticale du héros=0;}

Avec ça, le héros peut marcher sur la plateforme à l'arrêt. Car si on mets la plateforme en mouvement, il se contente de tomber une fois qu'il est dans le vide.

Les plateformes possèdent toutes un variable qui définit le sens dans lequel elles bougent(-1 pour gauche, 1 pour droite), et leur vitesse horizontale est de 2 pixels/frame.

Donc, quand la plateforme est sous le héros, on ajoute à la position du héros la vitesse de la plateforme, multipliée par la variable qui contient la direction. Et on obtiens ceci :

if (héros après le côté gauche) && (héros avant le côté droit){
if (point tout en bas du héros+1) && (vitesse>=0){
vitesse verticale du héros=0;
héros.x+=(vitesse horizontale*variable du sens de déplacement)<<8;
}

On en arrive au dernier point important pour les plateformes, le changement de direction. En effet, si une plateforme continue de bouger sans jamais s'arrêter, elle ne servira pas à grand chose (sauf pour un niveau avec un scorlling horizontal forcé).

Si comme moi, vous utiliser une carte de collision, le reste est très simple : il suffit de détecter la collision de la plateforme avec une tile ,spécifique, uniquement dédiée à cela. Ensuite, il faut simplement multiplier la variable de direction par -1, ce qui à pour effet de changer le sens de cette plateforme.

Et voila, mon premier VRAI article sur le développement. Je ne suis pas spécialement doué pour expliquer mon principe de fonctionnement, mais je n'ai pas vu de tutoriel dédié à la création de plateforme, alors j'ai essayé d'expliquer du mieux que j'ai pu comment je m'y suis pris, en espérant que je puisse aider quelqu'un.

Remarque :


-Comme expliqué sur le wiki de la PAlib, j'utilise les points fixes pour mes variables. C'est de là que viennent les "<<8".
-J'ai remarqué que le héros se déplaçait systématiquement de (vitesse horizontale*variable du sens de déplacement) pixels lorsque la plateforme rentre en collision avec la tile qui lui permet de changer de sens (et qu'il est dessus, bien entendu). J'ai donc un peu bidouillé en rajoutant l'inverse de cette valeur quand le héros est sur la plateforme et que celle-ci se cogne contre un des fameuses tiles. Ça a marché, je me suis donc arrêté là. Si quelqu'un trouve une autre solution, qu'il m'en fasse part dans les commentaires.
-Pas d'images pour ce tuto : une image statique ne sert à rien, et faire un GIF ne m'est pas passé par la tête (en fait si, mais non).
Pas d'exemple non plus, mais vous en aurez un si je release un jour le code source de WTN.



mercredi 8 octobre 2008

Dev - Second projet - WTN

Me voici donc en direct pour vous parler en avant première de mon nouveau projet sur DS!

Encore un projet de débutant (comme mon Pong), voici un court aperçu de ce que sera mon futur homebrew pour la Nintendo DS.

Tout d'abord, je tien à préciser que j'ai tout fait tout seul : j'ai suivi deux tutos sur Internet,
un pour apprendre le C, et un autre pour créer un jeu de plateforme sur le Wiki de la PAlib, que j'utilise (en deux parties, ici et ici).
J'ai entièrement créer le reste du code, en n'utilisant jamais quelque chose que je ne comprenait pas, simplement en le copiant-collant.
J'ai aussi réalisé les "sprites" (si on peut les appeller ainsi...).

Donc voila en gros ce que j'ai fait jusqu'a présent :

-Déplacement du héros, saut.
-Deux types de plateforme, solide et traversable en sautant.
-Création et récupération de pièces.
-Création et déplacement d'un ennemi.
-Gestion des collisions avec les ennemis.
-Création d'un object "clé" : on peut monter dessus, et l'absorber en appuyant sur le bouton B.
-Possibilité d'attaquer sous forme de clé (bouton X).
-Possibilité de recracher la clé(Bas+B).
-Création de plateformes mouvantes horizontales.

Il me reste donc à faire ceci avant d'espérer une première release publique :

-Réparation des sprites lors de la mort du héros (ces derniers s'affichent bizarrement).
-Création d'un ou deux nouveau ennemis (inattaquables sur les côtés ou par le haut).
-Création d'un vide où le héros peut tomber.
-Création des plateformes mouvantes verticales.
-Ajout de la pause.
-Ajout d'un semblant de menu.

Je vous laisserais des screens dès que je pourrais me connecter à mon ftp. Mais n'allez pas imaginez des graphismes de haut-niveau, mon perso c'est juste un rectangle rouge avec un oeil dessus.

[EDIT]J'ai réussi à envoyer les screens. J'espère qu'ils vous donnent envie d'y jouer...




dimanche 5 octobre 2008

Dev - Premier projet - Pong



Pour ce premier article sur le développement de hombrew sur DS, je vais parler de mon premier projet.

A l'époque où j'ai débuté ce projet (décembre 2007 si je me souviens bien), je voulais simplement faire un simple pong : deux raquettes, une balle, un truc qui compte les points et basta. Mais au fil du temps, j'ai décidé de changer les sprites : quelques adapatations plus tard, me voila avec un superbe fond venant de Super Mario Bros., et les deux frères qui grimpent aux poteaux pour se renvoyer un boule de feu.

J'ai donc ensuite voulu changer l'affichage des scores. Après quelques réflexion, j'ai décidé de faire tomber des Goombas sur le château. Ça m'a pris du temps, vu qu'a l'époque, je ne maîtrisais pas les cartes de collisions. Mais j'en suis venu à bout, et le résultat me plaisait assez.



Ne restait donc qu'une IA assez faible pour être vaincu, mais assez forte pour faire durer un peu la partie. J'ai décidé de la faire se déplacer uniquement quand la balle est dans la partie droite de l'écran, ce qui limite son temps de réction. Si la balle ne peut pas être rattrapée, elle s'arrête.


Tout content de la direction que prenait mon "jeu", j'ai inclus un nouveau mode de jeu, qui avait pour thème Kirby. Le but de cette sous-parite était de faire rentrer la pierre dans la bouche du Roi Golem, un des premiers boss de Kirby and the Amazing Mirror. Celui-ci ne l'ouvrant pas tout le temps, il faut attendre le moment propice pour appuyer sur le bouton A, afin que Kirby effectue une charge vers l'avant et propulse le rocher droit devant lui. La barre de vie de l'écran supérieur est celle du Roi Golem.



A ce moment, je me rends compte que j'ai oublié une des choses les plus importantes dans un jeu : la pause. Je mets en place une boucle, dont on se libère en appuyant sur A pour rependre, ou sur B pour quitter. Miracle, enfin quelque chose qui marche du premier coup!

Vient ensuite la dernière partie : le menu principal. La première version permettait de faire son choix entre les deux versions avec le pad, le décor et la photo indiquant la séléction actuelle.J'ai voulu faire un menu tournant. Et c'est là que je me suis planté. Et que j'ai perdu une grande partie de ma motivation pour ce jeu.

De temps en temps, il m'arrive de reprendre le code et de le modifier un peu, pour ajouter des petit plus à un des modes de jeu. Mais ce n'est plus ma préoccupation principale.
Voila comment se termine mon premier historique d'un de mes projets, resté au stade de pré-projet, bien que j'ai releasé certaines versions. D'ailleur, voici le lien pour télécharger la dernière version en date.
Je suis (presque) sur que je continuerais, mais quand?

(Et voila comment ne pas mettre une ligne de code dans une partie consacrée au dev sur DS...)

mercredi 1 octobre 2008

NES - Super Mario Bros.

Premier jeu de ma collection NES, voici Super Mario bros., un grand classique.

Sortie : 1985

Editeur : Nintendo

Nombre de joueur : Deux (chacun son tour)

Autre : Premier opus de la série Super Mario bros., il marque la première apparition d'ennemis désormais récurrents, tels que les Goombas ou les Bloopers. Il s'est vendu à 40.24 millions d'exemplaires, selon vgchartz.com.

Voici les photos de mon exemplaire, en état moyen pour la boîte : 


NES!!

Rien de mieux pour commencer ma collection!
J'ai donc reçu ce jour-ci une NES achetée sur eBay. J'ai eu du mal à trouver de NES en meilleur état pour le même prix. Après, j'ai peut-être loupé quelques affaires, mais bon...

En tout cas, voilà quelques photos de la bête.

Premier message - Introduction

Bonjour à tous!

Alors voilà, ayant récemment décidé de commencer une collection autour de Nintendo et de ses consoles, j'ai décidé de me créer un blog pour faire part de mes découvertes et pour garder une trace de mes activits et acquisitions.

De plus, je suis aussi intéressé par le développement sur Nintendo DS, que j'ai commencé à apprendre et à exercer grâce à la PAlib, de Mollusk (qui est remercié au passage pour cette magnifique lib). Je me servirais donc aussi de ce blog pour vous faire part de mes projets et de leurs avancements.

Bonne visite à tous!