connect
 

Description:
Carton Slug Project


By Tibo (aka Lapinou Fou)
& Dam (aka Valryon)

Homebrew pour Nintendo DS, reprenant l'univers de Metal Slug (©SNK) et quelques idées d'autres jeux.

Carton Slug est un jeu d'action/réflexion se jouant sur plusieurs niveaux à travers deux modes de jeu.



Outils : Notepad++, PAlib, DevkitPro, une bonne dose de motivation, une autre de patience !

On utilise aussi Visual C# 2008 Express, et le Framework .NET de Microsoft pour l'éditeur de Maps.
Thématiques:

Projet
Blog
Map
Physique
Editeur
Scénario
Dev
Release

Abonnement aux flux
Flux rss
DevBlog de Carton Slug

23 jui
2008

Chargement et affichage d'une map

Générer des maps facilement, c'est bien.
Pouvoir les utiliser dans le jeu, c'est mieux !

Comme expliquer précédemment, un des fichiers générés est un header C++ (.h) qui peut être inclus directement au code source. On peut utiliser ce qu'il contient directement là où a été inclus le header. Dans ce fichier, on fait une méthode qui prend comme paramètre un numéro, et on associe celui-ci au niveau grâce à un bon gros switch.



Un truc du genre :
switch(numéro passé en paramètre)
{
 case 1:
  charger le niveau 1 avec tels paramètres
break;

etc
}
C'est d'ailleurs pourquoi pour l'instant il n'est pas possible de créer une map et de l'ajouter dans le jeu sans recompiler : le jeu ne cherche pas sur la carte mémoire la map, elle est directement dans son code source et il faut l'ajouter à la main. Question de vitesse à l'exécution, et de simplicité pour nous à coder.



Le chargement de la map consiste à lire le contenu du header et de générer ce qui nous intéresse en fait : une liste des caisses à afficher et à traiter. Beaucoup de boucles "for", un algorithme bête et méchant.

Une fois qu'on a ce tableau (qui est un attribut de la classe où est chargée la map), il faut afficher ce qu'il contient en fonction du contexte.
Ici le contexte, c'est le Parallax. Ce dernier utilise une variable pour le scrolling, qui représente la position où il est arrivé.
A chaque frame, on va donc examiner toutes les  caisses et déterminer si elles sont sur l'écran (cad si leur position horizontale - le scrolling est entre 0 et 256, taille de l'écran). Si elles le sont, on les affiche !

Et ça marche pas mal. Sauf que quand je supprime une caisse (PA_DeleteSprite), le personnage disparaît... Et qu'il va falloir trouver une solution pour limiter le nombre de caisses en mémoire sprite, et ne pas mettre 50 sprites de caisses en vue quand seulement 10 sont utilisés...

Une bonne avancée, on approche du but...

Release fin août ! Le temps passe vite !




21 jui
2008

L'Editeur de Cartes

Pour gérer plus facilement la création de niveaux, nous avons eu l'idée de créer une interface pour les créer et les exporter de telle manière qu'ils puissent être utilisés dans le jeu.

Le langage C# avec Visual C# est très pratique pour ce genre de tâche. L'interface se crée tout à la souris (ou presque), il "suffit" ensuite de coder les fonctionnalités derrière les jolis boutons.

Voici à quoi ressemble l'éditeur dans sa version actuelle :


Oui, ce n'est ni très joli ni très ergonomique. Mais cet éditeur n'est destiné qu'à nous, puisque les maps sont à inclure dans le code source à la compilation...

Revenons un peu sur le fonctionnement des maps que l'on a adopté. Une map de Carton Slug (au niveau du jeu, sur la NDS) est un grand tableau qui contient des entités "Caisses" possédant des propriétés évidentes comme : position x, y, points de vies, etc.

Pour rendre le jeu plus intéressant, il y a différents types de caisses : métal, explosive, donneuse de bonus... Une autre donnée à gérer par l'éditeur.

Il fallait que l'éditeur soit un minimum visuel. Or ce n'est pas facile de programmer un truc où il est possible de faire glisser les éléments pour placer où on veut... Du coup pour le moment, la map est découpée en case de taille et position fixe et en quatre lignes horizontales. On place donc les caisses comme on veut sur ces cases.

L'astuce est qu'une case ne correspond pas forcément à une caisse, sinon on serait limité à des petits caisses de 32x32. Or nous voulons pouvoir faire une grande caisse qui prend tout l'écran si cela nous chante ! C'est pourquoi une case peut contenir un "bout" de caisse, qui est en fait un sprite qui représente seulement une partie de la caisse (le coin supérieur gauche par exemple).
A programmer, c'était répétitif car il a fallu ajouter tous les types (6), et toutes les parties possibles pour chaque type (au moins 6 à chaque fois)...

Une fois la map créée, on la sauvegarde. Cette action a pour but de créer deux fichiers : un ".carton" qui contient des données simples pouvant être chargées dans l'éditeur, et un ".h" qui doit être inclus dans le jeu.

Ainsi on a par exemple :

a.carton
The_lol_map;
Map de test, avec un LOL en caisses en bois;
0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0;
0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0;
0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0;
0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0;

et
a.h
#include <string>
#ifndef the_lol_map_H
#define the_lol_map_H
const std::string the_lol_map_titre = " The_lol_map " ;
const std::string the_lol_map_commentaire = " Map de test, avec un LOL en caisses en bois  " ;
const u8 the_lol_map_ligne1[28] = { 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0};
const u8 the_lol_map_ligne1_max = 28;
const u8 the_lol_map_ligne2[28] = { 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0};
const u8 the_lol_map_ligne2_max = 28;
const u8 the_lol_map_ligne3[28] = { 0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0};
const u8 the_lol_map_ligne3_max = 28;
const u8 the_lol_map_ligne4[28] = { 0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0};
const u8 the_lol_map_ligne4_max = 28;
#endif

Ce dernier fichier reprend la syntaxe C++ de tableaux à une dimension. Une méthode permet ensuite de traiter toutes ces données pour construire le niveau comme il faut.

Enfin en théorie, c'est précisément où est arrivé le développement pour l'instant du côté de la gestion des niveaux :P

A bientôt pour de nouvelles aventures !

Dam, Carton Slug developper

<< | 0 | 1 | >>
lache tes com dev fr scrutator irc bot
created by Jerome Wax based on LT version 0.3.2 - dev-fr.org 0.4 install