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

14 aoû
2008

La gestion des grands sprites

C'est vraiment hyper frustrant.

Genre là je suis presque arrivé à gérer des caisses de n'importe quelle taille, composée de sprite de 32x32, référencée dans un endroit facile d'accès et construite à partir des maps générées par l'éditeur mais... mais presque quoi.

Comment gérer correctement des grands sprites ? Par grand j'entends de taille infinie, pas 64x64 ou 128x128. Plutôt 256x192 quoi, un truc pas carré qui prend bien tout l'écran.

La solution que j'essaye d'appliquer n'est pas particulièrement très futée puisque j'ai voulu conserver au mieux l'ancien système de gestion de caisses, c'est-à-dire uniquement des caisses 32x32. Ce système présentait l'avantage d'être simple. Mais comment faire une caisse plus grande, genre 96x96 ? Eh bien certaines caisses ont comme sprite un "bout" de caisse, le coin haut droit par exemple. Si elle est à côté d'autres bouts de caisse, ça donne l'illusion d'avoir une énorme boîte monstrueusement féroce devant soi.

Sauf que pour la physique et même les collisions, c'est nul. On ne sait pas jusqu'où la caisse va. Donc si on en détruit une, seule celle-là tombe. Petit exemple :
          _ _ _
         |X X X|
o        |X X X|
k        |X X X|


Personnage et Caisse en ASCII. Le personnage tire devant lui :

          _ _ _                          _ _
         |X X X|                       _ X X|                  
o   -    |X X X|         ->     o     |X X X|
k        |X X X|                k     |X X X|   


Un bout de la caisse s'effondre, le reste n'a même pas conscience qu'il va être pulvérisé. Or nous avons décidé qu'aussi grande soit la caisse, si elle n'a plus de PV c'est sa totalité qui est détruit (comme Half Life premier du nom).

Nous sommes en C++, et comme on est super originaux on a fait une classe "Caisse". Cette classe représente... une caisse ! Avec sa position, son type (bois métal etc), sa vie, ... Et plutôt que de tout repenser, j'ai choisi d'ajouter comme attribut à cette classe un pointeur vers un tableau de Caisse.

Caisse* sous_caisses
Ce tableau contient la liste de toutes les caisses (appelées sous_caisses pour différencier) attachées à la caisse. Oui c'est compliqué, le code est tout aussi fouilli que mon explication qui servira à mon avis plus à Tibo qu'à vous chers lecteurs.

Ainsi, si on reprend la boîte du dessus :
 _ _ _
|M X X|
|X X X|
|X X X|


M est la caisse "principale", et X sont les sous_caisses de M. Tout ça forme un ensemble dont on connaît les propriétés, et c'est bien ce qui nous intéresse.

N'empêche que ça ne marche pas...

A bientôt pour un billet pour dire combien mon système est génial et comment il marche trop bien :p

Aller, je lâche une image du menu (Tibo va me gronder !)  :







Pas très sexy, mais fonctionnel ;)
On se fera un vrai logo à l'occasion.

EDIT : Et voilà, mon algorithme marche... Que d'émotions ! Par contre je demande à voir les temps de chargement sur une grosse map :s y'a au moins 40 boucles for/while !


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