21 jui
2008
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 :
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 :
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;et
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;
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
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



4 commentaire(s)
21/07/2008 à 23:21:38 Dernière modif. : 23/07/2008 à 14:59:37

