Jump to content
Sign in to follow this  
manu-rid

tile mapping sous sgdk

Recommended Posts

bonjour, j'aimerais savoir comment faire du tile mapping sous SGDK, 

après avoir cherché, je pense qu'il faut utiliser les outils qui sont dans vdp_tile (dans les includes)

<

#define TILE_ATTR_FULL (pal,prio,flipv,fliph,index)

void VDP_fillTileMapRectInc(u16plan, u16basetile, u16x, u16y, u16w, u16h);

void VDP_setTileMapRectExByIndex(u16plan,const u16*data, u16baseindex, u16baseflags, u16ind, u16num);

>

je ne vois pas comment est créé l'index (je suppose que l'index correspond au tableau de l'emplacement des tiles) c'est sous la forme d'un fichier texte ? (j'ai vu ça dans un tuto de prog en C) ou faut-il directement faire ce tableau dans un  ".C" sous la forme "char*table[]={ } " ?

 

le tileset (je sais pas si c'est bien le nom, je parle du .bmp correspondant à nos tiles), on l'enregistre dans le fichier data ?

 

je veux bien un coup de pouce pour m'orienter un peu 

 

 

Share this post


Link to post
Share on other sites

Bonsoir,

Que souhaite tu faire exactement ?

SI tu veut générer le Tileset+ map d'une image au format MD friendly Genitile le permet avec la syntaxe suivante :

genitile -tileset -pal -map Logo_15.bmp
ren Logo15_map?.asm Logo15_map?.s

ça va te générer trois fichier qui correspondent respectivement à la map , à la palette et au tileset.

Le problème c'est que ça va te sortir des fichiers binaires prévu pour être utiliser en ASM.

En C c'est nettement plus chiant à manipuler.

 

Ce que je te conseil donc c'est d'utiliser Rescomp qui est inclu à la dernière version de SGDK c'est un gestionnaire de ressources qui permet de gérer les ressources basiques ( image , son , map , sprite) très facilement.

Tu trouveras une explication de ces syntaxes dans le dossier tools/rescomp.

 

La démo sample/sprite est également un très bon exemple.

 

Si après ça tu butte toujours revient poster ici ;)

Share this post


Link to post
Share on other sites

Pour les fichier générés par genitile, il faut remplacer tous les $ par 0x (facile à faire sous notepad, CTRL+H, remplacer tous)

 

Ensuite, tu peux les inclure dans ton projet et les utiliser tels quels.

Pour aller lire un tile en fonction de sa position, voila ma technique:

stage01_map[n+m*z]

Le n c'est la coordonnée en abscisse de ton tile.

Le m c'est la coordonnée en ordonnée.

Le z c'est la largeur de ta map en tiles (si ta map fait 1024pxl de large, ton z sera égal à 1024/8 soit 128)

 

Par exemple, pour afficher un screen, je fais

for (i=1; i<=40; i++)
    {
        for(j=1; j<=30; j++)
        {
            VDP_setTileMapXY(BPLAN, TILE_ATTR(0,0,0,0)+(stage01_map[i+j*99]), i, j);
        }
    }

Evidemment, si ta map fait plus que la taille de l'écran (320*240px ou en tiles 40*30), il faut que tu gères les coordonnées des tiles que tu affiches en fonction de leur position dans la map.

 

Par défaut, les plans sont définis en 64*64 tiles. Tu peux les agrandir (128*128) mais pour afficher une map plus grande, tu devrais trouver un système pour le gérer

 

Exemple: tu affiches tes tiles jusqu'au 63eme, pas de problème, la coordonnée en abscisse du 63eme est 63.

Par contre, pour afficher le suivant, ce sera le 64eme dans ta map, mais comme tu arrives au bout de ton plan, tu devras lui attribuer la coordonnée 0, parce que les plans se répètent à l'infini. Pour le 65eme de ta map, il aura la coordonnée 1, etc...

 

Je ne sais pas si je suis très clair, mais perso j'ai trouvé tout ça à force de faire des tests et voir comment ça réagissait.

 

Une dernière chose, pour mettre à jour ton écran, ne réécris pas tout l'écran. Si tu bouges à droite, fais ton scrolling et ne dessines que la série de tiles qui apparait à droite. sinon tu va pomper trop de ressources.

Je dis peut être des trucs évidents, je sais que tu programmes déjà un peu, mais bon, j'ai galéré pas mal parfois alors si ça peut t'aider ;)

 

GOOD LUCK!

Share this post


Link to post
Share on other sites

Avec la nouvelle version de SGDK tu peut récupérer l'index du tiles donc après il suffit de le tester pour savoir si tu est en fin d'écran et agir en conséquent.

D'ailleurs la 0,96 est sortit ya 2h et il a fait des modifs sur le sprite engine :)

Share this post


Link to post
Share on other sites

Avec la nouvelle version de SGDK tu peut récupérer l'index du tiles donc après il suffit de le tester pour savoir si tu est en fin d'écran et agir en conséquent.

 

 

C'est pour les lopettes ça  :mrgreen:

Share this post


Link to post
Share on other sites

c'est bon j'ai reussi, j'ai utilisé l'exemple sample\sprite pour comprendre, faut que je creuse un peu pour bien utiliser rescomp.

 

@oof-will

je vais essayer ta technique avec genitile un peu plus tard

 

merci les gars !!

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...