Affichage des articles dont le libellé est WTN. Afficher tous les articles
Affichage des articles dont le libellé est WTN. Afficher tous les articles

dimanche 4 janvier 2009

Dev - Second projet - WTN : compte-rendu n°1

Bonjour à tous, 

Après plus d'un mois sans poster, il me semble qu'il fallait faire un petit article pour combler le vide
pour ne pas faire de trop grande avancées sans garder de trace (voila, ça sonne quand même mieux comme ça). Voici donc les différentes avancées de mon projet effectuées pendant tout ce temps : 

-Ajout d'un nouveau type de sol : le sol accélérant. Sur ce sol, le joueur ne peux pas décider d'avancer dans la direction qu'il veut, il est comme poussé vers la droite de l'écran, avec une vitesse de déplacement supérieure à la vitesse à laquelle il avance normalement. Le joueur garde néanmoins la possibilité de sauter.

-Ajout d'un nouveau type de tile (dans la map de collision) : le joueur perdra instantanément une vie si il touche ces éléments (pour les connaisseurs, ces tiles sont presque identiques aux pics, ou spikes,  que l'on peut trouver dans les Megaman)

-Ajout du premier boss (enfin!) : le design reste un peu brouillon (je suis pas graphiste, m*rd*!), mais l'essentiel est là. Le boss est contitué de 4 objets : 

-Le premier, sa tête, constitue la partie à viser. 
-Les deuxième et troisième objets, les yeux, dont l'un est l'exact symétrique de l'autre.
-Le quatrième, la bouche, qui servira probablement pour une attaque.

Il ne possède pour l'instant qu'une seule façon d'attaquer, mais je prevois l'ajout d'au moins 2 autres attaques. Il est pour l'instant impossible de l'attaquer de quelque façon que ce soit.

Son unique attaque (mais très originale, vous verrez...) consiste simplement en... un tir dirigé vers le joueur. Oui je sais, c'est connu, mais ça marche toujours, et en plus, c'est facile à ajouter, alors voila.

-Ajout d'une fonction de tir : Prévue à l'origine pour le premier boss (cité ci-dessus), j'ai finalement fait une fonciton plus générale, qui prends en argumentl'objet qui tire le missile, les coordonnées horizontales et verticales de la cible, et le type de missile qui doit être lancé. Ainisi, il sera possible d'utiliser cette fonction pour que le joueur puisse utiliser des tirs.

Remarque : Pour ces tirs, il a fallut créer une IA qui leur permet de se déplacer, et une méthode de collision, qui change selon le tireur et le type de missile.

Bien, je crois avoir fais le tour des ajouts. Passons maintenant à une petite check list, qui me permet de marquer les étapes importantes avant la premières release : 

-Ajout d'un menu de pause convenable : pour l'instant inexistant, j'ai déjà fait quelque chose de rudimentaire dans mon premier projet; il faut que je vois si je peux m'en servir comme base pour ce jeu.

-Création d'au moins 3 niveaux convenables : je n'ai pour l'instant que des niveaux qui conviennent à mes tests, donc sans aucun défi.

-Ajout d'un nouveau type d'ennemi : sans doute un ennemi volant, j'attends d'avoir réfléchi un peu plus la dessus pour en dire plus.

-Ajout d'un autre objet absorbable par le héros : surement un de ceux que j'ai déjà dessiné, mais je reste encore indécis.

-Ajout d'un véritable écran titre : pour l'instant, une image fixe, dessinée avec des carrés par mes soins. A améliorer...

Par contre, pour les sons, il faudra attendre encore un petit peu : non pas que je ne sache pas les utiliser, mais je n'en ai pas encore...

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...