Cela fait un moment que le site n'a pas été mise à jour. En effet, j'ai été absent tous l'été, et maintenant que je suis rentré en Math sup, je n'ai plus beaucoup de temps à consacrer au developpement DS et au mise à jour. Je m'en excuse. Bon jeu sur votre DS en tout cas!
par ali banana
publié dans :
News
Ce tutorial a été réalisé par Mollusk pour www.playeradvance.org
Salut tout le monde !
Je vous offre ce soir un petit tuto en fait super long sur le dev DS, peut-etre plus adapté aux developpeurs Gba, mais sait-on jamais... Pour commencer, il vous faudra par contre installer et mettre en place l'environnement, et donc je vous invite à suivre pour cela le tuto suivant : http://www.playeradvance.org/index.php?showtopic=11160 de Beersleep... (à ce sujet, on pourrait le renommer jour 1 ?)
On va utiliser, pour faire simple, la petite lib PA_lib, qui se greffe en fait sur ndslib, mais ca on s'en fout, vous verrez bien...
Dans ce tuto, vous trouverez comment amorcer la lib, charger des sprites sur chaque écran, les déplacer en utilisant les touches et l'écran tactile, ainsi que l'affichage de texte, de fonds, et déplacer ces fonds !!! Beaucoup de choses en somme...
Vous allez pouvoir télécharger un fichier contenant tout ce qu'il faut (avec la lib, les images et tout) ici : http://membres.lycos.fr/existepas/PA en prenant le fichier PA.zip (contient le template plus le tuto dedans)
Il faut ensuite dezipper le tout dans le dossier projects/PA dans ndsdev... Et ouvre VC++ en cliquant sur dsdemo.vcproj... Là, on a la petite fenetre de gauche dans laquelle on 'expand' dsdemo, puis ARM9, puis Source files, et on ouvre main.cpp pour afficher tout le code. C'est commenté à mort et donc je vais pas plus le commenter ici, mais juste l'afficher...
Pour convertir les images, j'ai utilisé gfx2gba frontend, que je vous invite à récupérer ici :
http://membres.lycos.fr/existepas/gfx2gba/
Pour convertir les sprites, on ouvre gfx2gba frontend, puis on fait ouvrir l'image du sprite (dans arm9/gfx), et on coche les options suivantes :

Le plus important est de bien cocher 'disable map output', pour signifier que c'est un sprite et non un fond...
On clique sur Process jusqu'à ce qu'il daigne afficher le texte... Puis on le ferme et on recommence pour le fond, avec ca :

On coche les 3 options d'optimisation des tiles, et c'est parti !
Les sprites et fonds sont déjà convertis de base, mais je vous montre comment faire quand meme, je suis sympa !
On va maintenant pouvoir s'attaquer au code à proprement parlé :
Salut tout le monde !
Je vous offre ce soir un petit tuto en fait super long sur le dev DS, peut-etre plus adapté aux developpeurs Gba, mais sait-on jamais... Pour commencer, il vous faudra par contre installer et mettre en place l'environnement, et donc je vous invite à suivre pour cela le tuto suivant : http://www.playeradvance.org/index.php?showtopic=11160 de Beersleep... (à ce sujet, on pourrait le renommer jour 1 ?)
On va utiliser, pour faire simple, la petite lib PA_lib, qui se greffe en fait sur ndslib, mais ca on s'en fout, vous verrez bien...
Dans ce tuto, vous trouverez comment amorcer la lib, charger des sprites sur chaque écran, les déplacer en utilisant les touches et l'écran tactile, ainsi que l'affichage de texte, de fonds, et déplacer ces fonds !!! Beaucoup de choses en somme...
Vous allez pouvoir télécharger un fichier contenant tout ce qu'il faut (avec la lib, les images et tout) ici : http://membres.lycos.fr/existepas/PA en prenant le fichier PA.zip (contient le template plus le tuto dedans)
Il faut ensuite dezipper le tout dans le dossier projects/PA dans ndsdev... Et ouvre VC++ en cliquant sur dsdemo.vcproj... Là, on a la petite fenetre de gauche dans laquelle on 'expand' dsdemo, puis ARM9, puis Source files, et on ouvre main.cpp pour afficher tout le code. C'est commenté à mort et donc je vais pas plus le commenter ici, mais juste l'afficher...
Pour convertir les images, j'ai utilisé gfx2gba frontend, que je vous invite à récupérer ici :
http://membres.lycos.fr/existepas/gfx2gba/
Pour convertir les sprites, on ouvre gfx2gba frontend, puis on fait ouvrir l'image du sprite (dans arm9/gfx), et on coche les options suivantes :
Le plus important est de bien cocher 'disable map output', pour signifier que c'est un sprite et non un fond...
On clique sur Process jusqu'à ce qu'il daigne afficher le texte... Puis on le ferme et on recommence pour le fond, avec ca :

On coche les 3 options d'optimisation des tiles, et c'est parti !
Les sprites et fonds sont déjà convertis de base, mais je vous montre comment faire quand meme, je suis sympa !
On va maintenant pouvoir s'attaquer au code à proprement parlé :
| CODE |
#include "PA.h" // On signale que l'on veut inclure la lib de chez PA... #include "gfx/cruiser1.raw.c" // Fichiers d'image... Contient les données à afficher. C'est un sprite de 16 couleurs // Palette à charger en mémoire pour le sprite #include "gfx/sprite.pal.c" // Fond à charger qui sert à rien... Juste à faire joli quoi... #include "gfx/fond.raw.c" // Fichier qui contient en fait les informations sur les tiles (carrés de 8x8) #include "gfx/fond.map.c" // Fichier qui contient les infos sur comment arranger ces tiles en mémoire (on met le premier carré en haut à gauche, le deuxième à la suite, etc... Si un carré est en double, ca permet de ne pas charger 40 fois les memes images en mémoire, on économise donc beaucoup de place. C'est une carte... #include "gfx/bg.pal.c" // Fichier qui contient la palette pour les fonds. ////////////////////////////////////////////////////////////////////// s16 x = 0; // On va se faire 2 varialbes de position x et y histoire de... s16 y = 0; s16 bgx = 0; // On va meme voir comment déplacer un fond avec ca... s16 bgy = 0; // On fait la fonction principale indispensable à tout programme... int main(int argc, char ** argv) { PA_Init(); // Initialise la lib. Ce doit etre le premier truc à mettre (sans faute). Si on veut tout remettre à 0 (sprites, fonds, etc..., on peut utiliser PA_Init n'importe ou) PA_InitVBL(); // Initialise le VBL, ce qui en fait permet de copier en mémoire toutes les infos sur les sprites, met à jour les touches et reprend la position du stylet à chaque cycle, chaque frame, chaque image quoi... C'est pratique quand on débute (et meme après. PA_LoadSplash(); // Comme on est sympa, on fait de la pub pour notre forum favori ! // Là c'est important, on charge les palettes pour les sprites... Si on ne charge pas les palettes, tout restera noir, donc faut le faire... PA_LoadPal(PAL_SPRITE0, sprite_Palette); //PAL_SPRITE0 c'est pour dire de mettre sur la palette pour l'écran du bas (0) et pour les sprites PA_LoadPal(PAL_SPRITE1, sprite_Palette); // PAL_SPRITE1 c'est pareil mais pour l'écran du haut. On charge la meme palette histoire de pas se faire chier, mais on pourrait avoir des sprites différents et des palettes différentes // On charges pareil, pour les les fonds cette fois-ci... PA_LoadPal(PAL_BG0, bg_Palette); PA_LoadPal(PAL_BG1, bg_Palette); // Histoire de pouvoir écrire à l'écran, on va initialiser aussi des fonctions de texte. On le met sur les 2 écrans (d'où le 1 de la première fonction et le 0 de la deuxième). Dans les 2 cas, on va le mettre sur le premier fond dispo, comme ils sont numérotés de 0 à 3, on va prendre le 0... PA_InitText(1, 0); // Texte pour l'écran du haut PA_InitText(0, 0); // Texte pour l'écran du bas // Comme le fond est blanc, on va mettre le texte en noir : PA_SetTextCol(0, 0, 0, 0); // 0 pour l'écran du bas, et les autres 0 pour les composantes R, G, B... PA_SetTextCol(1, 0, 0, 0); // On va maintenant créer notre premier sprite ! Je vais donc détailler chaque numéro pour savoir à quoi ca sert... PA_CreateSprite(0, // Ecran sur lequel l'afficher. 0 pour l'écran du bas. On en mettra un en haut aussi après 0, // Numéro du sprite que l'on veut, de 0 à 127 pour chaque écran. On va prendre le premier... A savoir : Sur DS, les sprites de petit numéro sont affichés au-dessus. Donc le 0 est au-dessus de tout sprite, puis le 1, etc... le 127 est tout au fond. (void*)cruiser1_Bitmap, // Le nom des graphismes dans le fichier cruiser1.raw.c que l'on a converti. Il faut mettre (void*) devant pour pas avoir d'erreur de compilation, faut pas y faire attention;) OBJ_SIZE_32X32, // Taille du sprite. Il faut toujours utiliser les macros OBJ_SIZE_8X8 par exemple, etc... Ca ne prend que les puissances de 2 à partir de 8 (8, 16, 32, et 64) 1, // Mode 16 ou 256 couleurs. 1 pour 256 (1 > 0) Si on se trompe là, ca fait une image bizarre... 0, // Si en mode 16 couleurs, on choisis la palette à utiliser (de 0 à 15). Dans notre cas, ca change rien 0, // Position X de base (0-511) 0); // Position Y de base (0-255) // Et puis on va charger le meme mais sur l'écran du haut, et au milieu de l'écran. PA_CreateSprite(1, 0, (void*)cruiser1_Bitmap, OBJ_SIZE_32X32, 1, 0, 112, 80); x = 112; y = 80; // On va mémoriser ces coordonnées... // Puis on charge un fond sur chaque écran. Attention, on a initialisé le texte sur le fond 0, donc on ne peut pas l'utiliser (sinon ca vire le texte). Donc on va utiliser le fond 3, le plus profond... PA_LoadSimpleBg(0, // Ecran... là c'est celui du bas 3, // Numéro du fond. On a dit qu'on prendrait le 3, donc on le fait ! fond_Tiles, // Nom des tiles (contenu dans fond.raw.c) fond_Map, // Nom de la carte (contenu dans fond.map.c) BG_256X256, // Taille du fond (on a 256X256, 256X512, 512X256, ou 512X512. 1, // Ca c'est WRAPAROUND, on s'en tape, ca ne sert QUE si on fait des fonds qui tourne, on verra ca un autre jour... 1); // Mode 16 ou 256 couleurs, comme pour les sprites... Nous c'est 256... // Et puis on va charger le meme, mais pour l'écran du haut... PA_LoadSimpleBg(1, 3, fond_Tiles, fond_Map, BG_256X256, 1, 1); // On va afficher un texte tout simple (SimpleText) sur l'écran du haut... PA_OutputSimpleText(1, // Ecran du haut 0, // Position X en tile (donc en multiple de 8). Si on met 1, ca affiche au 8ème pixel, etc 0, // Position Y, pareil... " Hello World !!!"); // Et le texte à afficher // On va voir qu'on peut aussi faire un texte plus complexe en affichant des variables et tout un peu plus loin... while (1) { // Ca s'est ce qu'on appelle la boucle principale, c'est là qu'on met l'ensemble des trucs à faire à chaque frame... bgx += Pad.Held.Right - Pad.Held.Left; // Ici on indique de faire varier bgx en fonction de comment on appuye sur les touches. Pad.Held signifie pressée (on a Newpress pour nouvelle pression et Released pour relaché), et Right et Left pour... gauche et droite ! Donc si on appuye à droite, ca fait +1, à gauche -1... bgy += Pad.Held.Down - Pad.Held.Up; // Pareil mais avec haut et bas... // A noter : les touches sont Up, Down, Left, Right, A, B, L, R, et X et Y quand ca sera supporté par les emulateurs ou que j'aurai un passme... PA_BGScrollXY(1, // On va déplacer le fond de l'écran du haut... 3, // C'est le fond du fond que l'on prend, celui chargé tout à l'heure bgx, // Nouvelle position X que l'on veut, que l'on a changée avec les touches bgy); // Nouvelle position Y... // On va maintenant déplacer le sprite du haut pareil que le fond... x += Pad.Held.Right - Pad.Held.Left; y += Pad.Held.Down - Pad.Held.Up; PA_SetSpriteXY(1, // Ecran du haut 0, // Numéro du sprite, soit le 0 x, // Nouvelle position x y); // Nouvelle position y // Pour le sprite du bas, on ne va pas se géner, on va utiliser les fonctions de la DS : l'écran tactile ! PA_SetSpriteXY(0, 0, Stylus.X, Stylus.Y); // On récupère les coordonnées avec Stylus.X et Stylus.Y... On peut aussi savoir si on fait une nouvelle pression avec Stylus.Newpress, si on est appuyé avec Held, et relaché avec Released... // Maintenant qu'on a tout bougé, on n'a plus qu'à attendre la fin du cycle pour recommencer. Pour synchroniser le tout avec l'écran, on utiliser la fonction suiavnte : PA_WaitForVBL(); // Et c'est tout ! } return 0; } ////////////////////////////////////////////////////////////////////// |
Voilà !! Maintenant, il ne reste plus qu'à faire Build-> Clean pour tout nettoyer bien comme il faut, puis F7 pour compiler...
Ensuite, on peut lancer la demo en allant dans le répertoire ARM9 et en chargeant arm9.bin dans Dualis ! C'est magique...
Ce message a été modifié par Mollusk le mercredi 25 mai 2005 à 20:31
par ali banana
publié dans :
Tutoriaux
Ce tutorial à été réalisé par Beersleep pour www.playeradvance.org
Bienvenue pour ce premier tuto sur le developpement de la Nintendo DS
. On va commencer par le commencement: l'installation.
1.Téléchargez Nds Dev Env
Lien vers la page de téléchargement
Installation Online
Installation Offline
2.Une fois téléchargé, installez le logiciel.

3.Une fois installé, téléchargez Visual C++ beta 2005
telechargez là
Puis vous devez l'installer, ça prendra un certain car ça installe depuis le web
. Comptez 15min pour du haut débit 2048.
4.Cette partie a été supprimé car dans le nouvelel version il n'y a plus ce menu.
5.Maitenant ouvrez le dossier projects dans le dossier ndsdev, et ouvrez le dossier template.
Cliquez sur le ficher dsdemo de type project. Et convertissez le fichier pour visual studio 8: next>next>finish
Ouvrez le fichier ARM9/main.cpp

Puis cliquez sur build>build solution
Normalement le programme devrait se compiler et obtenir ça:
Maintenant vous pouvez programmer votre
Bienvenue pour ce premier tuto sur le developpement de la Nintendo DS
1.Téléchargez Nds Dev Env
Lien vers la page de téléchargement
Installation Online
Installation Offline
2.Une fois téléchargé, installez le logiciel.

3.Une fois installé, téléchargez Visual C++ beta 2005
telechargez là
Puis vous devez l'installer, ça prendra un certain car ça installe depuis le web
4.Cette partie a été supprimé car dans le nouvelel version il n'y a plus ce menu.
5.Maitenant ouvrez le dossier projects dans le dossier ndsdev, et ouvrez le dossier template.
Cliquez sur le ficher dsdemo de type project. Et convertissez le fichier pour visual studio 8: next>next>finish
Ouvrez le fichier ARM9/main.cpp

Puis cliquez sur build>build solution
Normalement le programme devrait se compiler et obtenir ça:
Maintenant vous pouvez programmer votre
| CODE |
make -C arm9 -I /c/ndsdev/projects/template make[1]: Entering directory `/c/ndsdev/projects/template/arm9' mv: missing file argument Try `mv --help' for more information. make[2]: [all] Error 1 (ignored) main.cpp built ... arm9.bin make[1]: Leaving directory `/c/ndsdev/projects/template/arm9' cp arm9/arm9.bin boot/resources/arm9.bin cp arm7/arm7.bin boot/resources/arm7.bin make -C boot -I /c/ndsdev/projects/template make[1]: Entering directory `/c/ndsdev/projects/template/boot' files: resources/arm7.bin resources/arm9.bin objects: arm7.bin.o arm9.bin.o processing resources/arm7.bin processing resources/arm9.bin main.cpp captureARM9.s built ... boot.gba ROM fixed! make[1]: Leaving directory `/c/ndsdev/projects/template/boot' mv boot/boot.gba template.ds.gba Build log was saved at "file://c:\ndsdev\projects\template\BuildLog.htm" dsdemo - 0 error(s), 0 warning(s) ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== |
Et vous avez compilé votre premier jeu DS
/!\ Pour la Nouvelle Version de Visual C++ beta 2
>Installez cette nouvelle version
>Téléchargez le tuto de Mollusk
>Ajoutez ces lignes de code au tout début du fichier PA.cpp:
| CODE |
_#define VRAM_ARM9 (1) #define VRAMCORE_A 0x06000000 #define VRAM_CORE_B 0x06040000 |
>Compilez et ça devrait marcher
6.Faire marcher son jeu
Pour faire marcher votre jeu vous devez sois avoir un PassMe (regarder dans la faq pour savoir ce que c'est!) sois avoir un émulateur:
L'émulateur le plus fonctionnel aujourd'hui c'est DualiS.
Téléchargez le
Ouvrez le, cochez la case D3D au lieu de openGL. Puis faites file>Load and execute et selectionné votre fichier arm9.bin dans le dossier template puis arm9 et normalement vous devriez obtenir ce-ci en déplassant le stylet dessus:

Et pour le Passme il faut flasher sur votre linker le fichier template.ds.gba
Ce tuto est fini, si vous avez besoin de precision dites-le dans ce topic
par ali banana
publié dans :
Tutoriaux
Il existe deux principaux émulateurs DS : Ideas et Dualis.
Le premier est le meilleur à l'heure actuelle, mais attention car la donne peut vite changer. La dernière version est disponible ici. Une version plus avancé est en préparation, faisant tourner la demo de Metroid prime Hunters. Ideas peut lire les fichiers .bin, ainsi que les fichiers .nds et .pme (fichier .ds.gba renommé).
Le second est pour l'instant moins avancé. La dernière version est disponible ici. Dualis lit les fichiers .bin et .nds.

par ali banana
publié dans :
Tutoriaux
Salut à tous! J'ouvre ce blog aujourd'hui pour répertorier tous les homebrew DS français, en particulier ceux de PlayerAdvance :p. Vous retrouverez également quelques tutoriaux ainsi que des news sur les mises à jours des homebrew. Bonne visite à tous!
par ali banana
publié dans :
News








