Voir la version complète : [NDS][Librairie] Librairie PAlib, PAGfx, et Wiki
PAlib
Librairie DS
BETA
Version 0.73b (http://sourceforge.net/project/showfiles.php?group_id=142901)
Présentation :
Alors, la version PAlib 0.73b est sortie hier (me semble). En gros, l'intérêt par rapport aux anciennes versions (postées sur l'ancien PA) sont le support par défaut des palettes étendues pour les sprites et les fonds... Du coup, chaque fond possède se propre palette, ce qui est bien pratique. Kleevah a d'ailleurs eu la gentillesse de concocter une petit frontend ! (le tout en .Net)
Deuxièmement, j'ai lancé en parallèle PAGfx, qui est un convertisseur de Gfx pour DS (marche aussi pour gba), que j'utilise en remplacement de gfx2gba... Il fonctionne avec un fichier ini, peut gérer plusieurs palettes pour les sprites et les fonds, et en conjonction avec PAlib, on peut charger un fond (avec sa palette) en donnant juste l'écran, le numéro de fond, et le nom !! rien de plus simple !
Troisièmement, j'ai démarré un Wiki sur le développement DS en général et utilisant PAlib en particulier. Il est orienté grands débutants, abordant même pas mal de petites notions du C ! Pour l'instant, il est encore basique, mais grandit assez vite. J'espère le faire de façon assez aboutie, afin qu'il puisse servir aux débutants comme aux personnes plus expérimentées... il y aura même une section 'math', avec l'utilisation des sinus et cosinus, des nombres a virgule fixe et gestion de trajectoire, etc... Par contre, désolé, mais tout est en anglais, j'ai ni le temps ni le courage de toute traduire
Autres informations :
Le forum de PAlib : http://www.palib.com
Le wiki : http://www.palib.info/wiki
mastertop101
04/12/2005, 00h01
Salut Mollusk, bravo pour ton convertisseur d'image (et la Lib aussi bien sur). J'ai même compris comment fonctionne le "codage" de l'image. (contrairement
à gfx2gba). Mais y a-t-il un moyen de savoir quelle est la couleur représentée par le numéro ? Exemple :
//Palette created using Mollusk's PAGfxConverter
const unsigned short bgtest_Pal[3] __attribute__ ((aligned (4))) = {
64543, 32768, 32799};
Je crois que 64543 est noir et que 32768 est rouge mais ce n'est qu'une supposition...
Merci !
bah le codage c'est du codage 16 bit classique, donc de tête je pourrais pas trop te dire, mais bon... je crois qu'avec visualham il y avait un truc pour convertir les différentes valeurs de couleurs en valeurs R, G, B
mastertop101
04/12/2005, 03h48
bah le codage c'est du codage 16 bit classique, donc de tête je pourrais pas trop te dire, mais bon... je crois qu'avec il y avait un truc pour convertir les différentes valeurs de couleurs en valeurs R, G, B
"avec" quoi ?
[edit] jai essayé d'afficher le bg avec la derniere version de pa lib.. résultat: http://img218.imageshack.us/img218/6093/compilation6ar.png
ça fonctionne pas !
dailleurs, dans l'exemple que tu as fait, je crois que le nom utilisé ne devrait pas se nommer "bg0" mais plutot "bg0_Map" non ?
mastertop101
05/12/2005, 03h01
je viens d'essayer en installant la lib avec l'installer et c'est encore plus bizarre... (http://img212.imageshack.us/img212/5493/compilation26wn.png)
et la fameuse 12ème ligne :
PA_LoadTiledBg(0, 3, test4);
alors...
Pour les couleurs, je voulais dire en utilisant un des outils de VisualHam, j'ai raté le nom, sorry
Sinon, mastertop, avec quoi as-tu converti ton fond ? PAGfx ? Il faut le convertir avec PAGfx, sans préciser de nom de palette (ou en mettant comme nom de palette le nom du fond). Et non, il ne faut pas mettre _Map (cf l'exemple dans PAlib...), puisque tu donnes juste le nom, et la fonction se chargera de mettre nom_Tiles, nom_Map, et nom_Pal à ta place :p
Les exemples pour les fond compilent bien chez toi ou pas du tout ?
mastertop101
05/12/2005, 15h46
ah en fait, moi ça me crée un image_bitmap et pas image_map (d'où le 2ème problème j'imagine..) pourtant je choisis bien un background de 256 couleurs.. et apparament en faisant une image_map, la syntaxe du code change completement et c'est pas bien pour ce que je veux faire.. (surtout que j'ai passé un bon moment pour comprendre comment transformer une valeur X,Y en valeur image_bitmap(valeur)..)
PS: oui je l'ai converti avec pagfx et je peux pas tester l'exemple présentement (pas sur mon ordi..) mais ça devrait marcher..
bah si ca te créé une image bitmap, c'est que tu as pas donné comme mode TiledBg....
Génial Mollusk, il gère tout ton GfxConverter ^^ enfin il est bien pratique, surtout le all_gfx.c/h ça evite de tous mettre à la main :S
mastertop101
05/12/2005, 22h36
bah si ca te créé une image bitmap, c'est que tu as pas donné comme mode TiledBg....
l'exemple compile bien..
par contre regarde une partir de le .ini :
#Backgrounds :
C:\Documents and Settings\Jerome\Desktop\converter\test4.bmp TiledBg test4
et celle de test4.c :
const unsigned char test4_Bitmap[49152] __attribute__ ((aligned (4))) = {
C'est possible d'utiliser un image_bitmap comme background ???(mais que ca reste possible de mettre un sprite dessus...)
oulah, bizarre bizarre... tout pourrait m'envoyer tout ca par mail ? (molousk chez gmail.com)
et sinon, c'est la 0.6 que tu utilises ? (la derniere de PA)
mastertop101
05/12/2005, 23h29
bah en fait... ça n'avancerait pas mon problème puisque je comprends pas comment sont codés les image_map. C'est possible une petit fonction "PA_LoadBitmapBg" ??
y'en a déjà une...
autre solution : Init8bitBg, et apres tu load un bitmap 8 bit... (en n'oubliant pas de charger la palette).
Je comprends pas ton histoire de pas comprendre comment est codée la map ??
En gros, ca regarde ton image et ca la découpe en morceaux de 8x8 pixels. Si t'as des morceaux identiques, ca les vire, en gros ca optimise pour prendre un minimum de place. C'est c'est bg_Tiles.
La palette, c'est la palette..
Et la map, ca stock dans un tableau de 32x32 (pour 256x256 pixels) quels sont les blocs de 8x8 et à quel endroit... donc les 32 premières valeurs de la map sont pour les 32 premiers blocs, soit les premiers 256x8 pixels. Ca stock non seulement le numéro de tile (de 0 à 1024), mais aussi si cette image est flippée ou non (histoire d'optimiser à 200%, ca vérifie si les tiles sont identiques à d'autres si on les retournes verticalement et/ou horizontalement)
En gros, ca regarde ton image et ca la découpe en morceaux de 8x8 pixels. Si t'as des morceaux identiques, ca les vire, en gros ca optimise pour prendre un minimum de place.
C'est vraiment une bonne idée ça :dblthumb:
Bon, par contre mon pack de petits jeux compile toujours avec la nouvelle version de PALib, mais ne tourne plus ... il faut que je regarde ça de plus près...
En tout cas, merci Mollusk pour cette nouvelle version de PALib :)
Ca vient probablement du changement dans la gestion des palettes (bien que en théorie j'ai fait en sorte que ca soit rétro compatible pourtant)
j'ai reconverti mes images en utilisant PAgfx et j'ai réécris mes portions de code qui s'occupent de les charger (les bg et les sprites).
Le probleme c'est que je n'arrive plus à cliquer sur un sprite (il semble ne rien detecter).
Mais bon, ca doit etre un oubli de ma part quelque part (quoi que je ne vois vraiment pas où...)
tu ne peux plus cliquer sur un sprite... je ne vois vraiment pas pourquoi, puisque le convertisseur ne change strictement rien aux propriétés du sprite...
T'aurais un bout de code ?
Super le wiki mollusk!!!
Par contre si tu pouvais faire une version française pour les anglophobes se serait parfait :)
tu ne peux plus cliquer sur un sprite... je ne vois vraiment pas pourquoi, puisque le convertisseur ne change strictement rien aux propriétés du sprite...
T'aurais un bout de code ?
OK, mais c'est codé en C++. Il y a donc plusieurs fichiers qui sont en cause, mais je te met juste un exemple du main (de toute facon je ne peux pas aller plus loin dans le jeu ^^ ):
//definit les numéros des prites de la page d'accueil du jeu
enum
{
SPR_JEU_DS4 = 0,
SPR_JEU_MINE,
[...]
SPR_JEU_CUSTOM
};
//initialise l'affichage de la page d'accueil
void ShowStart()
{
// Load bg Palettes
PA_LoadBgPal(ECRAN_TOP, 0, BG_TOP_Pal);
PA_LoadBgPal(ECRAN_DOWN, 0, BG_DOWN_Pal);
// Load the sprite palette, for both screens
PA_LoadSpritePal(ECRAN_DOWN,SPR_JEU_DS4,(void*)vig nette_DS4_Pal);
PA_LoadSpritePal(ECRAN_DOWN,SPR_JEU_MINE,(void*)vi gnette_2_Pal);
[...]
PA_LoadTiledBg(ECRAN_TOP, 0, BG_TOP_Bitmap);
PA_LoadTiledBg(ECRAN_DOWN, 0, BG_DOWN_Bitmap);
//PA_LoadSimpleBg(ECRAN_TOP, 3, BG_TOP_Tiles, BG_TOP_Map, BG_256X256, 0, 1); //obsolete
//PA_LoadSimpleBg(ECRAN_DOWN, 3, BG_DOWN_Tiles, BG_DOWN_Map, BG_256X256, 0, 1); //obsolete
PA_CreateSprite(ECRAN_DOWN, SPR_JEU_DS4, (void*)vignette_DS4_Sprite, OBJ_SIZE_64X32, 1,0, 54, 8);
PA_CreateSprite(ECRAN_DOWN, SPR_JEU_MINE, (void*)vignette_2_Sprite, OBJ_SIZE_64X32, 1,0, 104, 8);
[...]
}
// test l'appui sur un sprite et reagit en conséquence (i.e: lance le jeu concerné)
void TestTouche()
{
if (PA_SpriteTouched(SPR_JEU_DS4))
{
[...]
PA_ResetSpriteSys();
m_iEtatDuJeu = EDJ_JEU;
m_cJeuCourant = new CJeuDS4();
}
else if (PA_SpriteTouched(SPR_JEU_MINE))
{
[...]
PA_ResetSpriteSys();
m_iEtatDuJeu = EDJ_JEU;
m_cJeuCourant = new CJeuMine();
}
[...]
}
Voilà.
Ce matin dans la voiture je me suis dit que peut-etre il fallait changer un truc dans le makefile (pas encore eu le temps de vérifié, je le ferai ce midi).
Merci :)
ah, c'est du c++, ca change beaucoup de choses !!
Tu as recomilé PAlib pour le C++ ? En fait j'ai mis un CPPInstall.bat, qui compile pour le C++, sinon, effectivement, le stylet et les touches ne marchaient plus du tout... (et plus tu foutais de trucs dans le projet, plus ca merdait).
Je sais plus si j'ai précisé sur le wiki, d'ailleurs, faudra que je regarde...
Sinon, pour la traduction en francais... ca risque d'etre difficile, d'une part parce que c'est TRES long (je n'aurai jamais le temps de faire un truc un tant soit peu complet si je fais ca en plus en francais, en faisant en anglais je me suis dit que ca profiterai à plus de monde...), et que comme c'est un wiki, ca peut changer un peu partout un peu n'importe quand, donc pour suivre la traduction... pas simple...
Si quelqu'un se sent le courage de traduire, ne serait qu'en partie, je peux mettre un deuxième wiki en francais, mais je ne peux vraiment pas le faire moi-meme, désolé...
A tout hasard, j'ai passé la page dans google translate... c'est assez marrant ! Les mots avec des abréviations ne sont pas traduits, et puis je vous laisse constater une perle :
En anglais : Day 3 - Pad, Stylus, and Text (Simple Text, Box text, Pad, and Stylus covered)
En francais : Jour 3 - Garniture, aiguille, et texte (texte simple des textes, de boîte, garniture, et aiguille couverte)
ou encore Day 6 - Dev-related Math Stuff -> Jour 6 - Substance Réalisateur-connexe De Maths
Non, je n'ai pas fait attention au fait qu'il faille recompiler pour le C++ :-'
Je vais faire un test ou 2
Merci :)
Tembargo
08/12/2005, 17h04
je vous laisse constater une perle :
En anglais : Day 3 - Pad, Stylus, and Text (Simple Text, Box text, Pad, and Stylus covered)
En francais : Jour 3 - Garniture, aiguille, et texte (texte simple des textes, de boîte, garniture, et aiguille couverte)
ou encore Day 6 - Dev-related Math Stuff -> Jour 6 - Substance Réalisateur-connexe De Maths
Ceux qui ne comprennent pas l'anglais vont enfin savoir ce qu'on ressent quand on lit la PAlib.. Ton anglais laisse vraiment à désirer.. arf.. :whst:
Pour info, la première version de mon SudokuDS sera avec aiguille mais sans garniture !
Lol, merci Tembargo...
Pour la garniture, quand tu l'ajouteras, tu pourrais éviter les champignons, j'aime pas trop... merci...
Haaa, Mollusk, c'est génial, ca marche super bien.
Jusque là je ne comprenais pas pourquoi l'IA de mon DS4 (un puissance4) faisait planter le jeu. Je pensais que ca venait de l'émulateur qui ne supportait pas bien tout. Idem pour un autre jeu de mon pack qui plantait sauvagement (des sprites apparaissaient ou disparaissaient sans que je ne comprenne pourquoi).
C'était simplement parce que c'est codé en C++ et qu'il fallait recompiler ta lib.
Un grand merci Mollusk ( :bravo: ), je commençais sèrieusement à me démotiver à cause de tous ces bugs incompréhensibles et irrésolvable.
Maintenant il n'y a plus aucun problème! :dblthumb:
Je vais enfin pouvoir finaliser les jeux en cours et commencer les autres de mon pack. C'est génial!
(Mollusk vient de faire un nouvel homme content ^^ )
Au fait, mastertop, j'ai compris pourquoi ca te faisait des bitmaps... En fait, il faut mettre TileBg et non TiledBg, faudra que je rajoute les 2 possibles
A propos Mollusk, pas besoin de recompiler pour le C++ normelement. Juste un petit :
#ifdef __cplusplus__
extern "C"
{
#endif
/* Ici, le fichier PA.h */
#ifdef __cplusplus__
}
#endif
Ca devrait marcher en mettant ca dans les header.
D'ailleurs Mollusk si tu veux de l'aide pour tout ce qui Makefile/Compilation/Organisation des fichiers, je peux participer ! :)
C'est justement ce que je me disais ce matin.
Mais je n'ai pas jeté un oeil aux sources de PALib. Peut etre y-a-t'il un peu plus à faire... (notamment dans les directives de compilations ou du preprocesseur)
C'est justement ce que je me disais ce matin.
Mais je n'ai pas jeté un oeil aux sources de PALib. Peut etre y-a-t'il un peu plus à faire... (notamment dans les directives de compilations ou du preprocesseur)
Normalement non. Une lib C avec extern "C" dans les headers passe parfaitement en C++ (à part problèmes de mémoire mais alors après ... :hum: )
bah thudov, normalement ca y est, et c'est Gandran qui s'est chargé de faire compiler avec G++ pour que ca marche, on n'a pas trouver comment faire autrement :/
Ok, j'étais resté à une ancienne version de PALib. C'est vrai que dans la nouvelle version les Makefile sont mieux fait et les fichiers beaucoup mieux organisés.
Par contre il reste le problème des fichiers C inclus dans un fichier C. Il faudrait compiler les fichiers séparement et les mettre dans l'archive...
hmm.... ouais mais moi j'aime bien comme ca, parce que je vais rajouter le truc de config selective et que ca sera plus pratique pour moi...
Tembargo
10/12/2005, 17h18
Je sais que je viens après la guerre ^^ Mais c'est vraiment super la PAlib et ton tuto DS. Ca parait presque simple de faire quelque chose de bien :D
J'en avais tellement entendu parler de la PAlib sans savoir ce qu'elle fesait vraiment. Ben bravo Mollusk et tous ceux qui t'ont aidé ;)
Pi je vois que dans le tutorial, y a déjà presque tout(sinon tout) pour faire un ptit SudokuDS et un écran titre avec quelque petits effets sympatoche :wub:
vincent2021
11/12/2005, 17h28
+1
D'ailleurs je vais me mettre à la programation DS (qui connait la porg mais pas la DS contrairement à moi) avec un ami et principalement grace a ton WIKI, il est vraiment très bien fait.
Merci beaucoup :)
Merci à tous les deux !
Pour le wiki, j'ai presque fini la partie sur les sprites, et j'ai entamé la partie bg là...
Hier soir je me suis enfin décidé à tester mon pack de jeux sur la DS et non plus que sur émulateur...
...et bien les 2 écrans restent blancs :(
Mon 1er jeux (Pingwin) passe très bien sur la DS (il était codé en C), mais pas mon GameBoxDS.
Celui ci est codé en C++.
J'ai bien recompilé PALib en utilisant le batch adéquat (CPPinstall, ou un truc comme ça), et ça tourne très bien sur émulateur (c'est d'ailleurs ce que je ne comprend pas, normalement ça devrait plutot être l'inverse...).
Je pense que ca vient du fait qu'il soit codé en C++.
Mollusk, est-ce possible que ce soit dû à certaines fonctions de PALib qui ne passerait pas en C++ sous la DS ?
En tout cas, je commence à le repasser en C. C'est un peu dommage parce que le code était 100% objet et qu'il risque d'être moins beau en C (vu qu'il n'est pas prévu comme ça à la base), mais bon on verra bien si c'était ça qui n'allait pas.
hum... je ne pense pas que ce soit un problème de c++. Les émulateurs s'initialisent "tous seuls" c'est à dire que même si il manque certain truc pour initialiser les vram,... l'émulateur ne le prendra pas en compte mais la DS si (normal ^^).
Je suis d'accord avec birslip...
Déjà, tu testais sur quel émulateur ? En plus, avec les derniers code, tout est en palettes étendues (sprites+fonds), et genre sur ideas il prend quand meme les palettes normales, alors que sur DS il pendra celles étendues... donc si elles sont par chargées correctement, ca peut marcher sur emu et pas sur DS
Tu crois que tu pourrais m'envoyer par mail ton prog (ou un version light qui compile et marche sur emu mais pas sur DS), histoire que je teste pour voir ? A priori le C++ ne pose pas de problème si tu as recompilé la lib avec CPPInstall.Bat...
edit : tu as la derniere version ? (.75a), avec les dernieres de temps en temps certains trucs (genre le texte) passait sur emu et pas sur DS ! (là c''est bon normalement)
Merci pour les explications :)
Mais je ne comprend pas pourquoi ca ne passe pas sur la DS alors que ça passe sur émulateur :S
Je sais que si on ne recompile pas PALib pour le C++, certaines fonctions concernant les sprites ne passent pas.
Je me suis donc dis qu'il était possible de rencontrer des problèmes en compilant le jeu en c++ et en utilisant PALib.
Ca me semble étrange, mais c'est possible...
En tout cas, je réécris mon code en C et je reteste en espérant que ça passe... :rolleyes: (je ne suis pas un grans fan de réécrire mon code plusieurs fois...)
oups excuse moi Mollusk, j'étais en train d'écrire en même temps que toi et je n'ai pas vu ton post ^^
Bien sur je peux t'envoyer une version de mon code (pas la toute dernière parce qu'elle ne tournera pas, elle est encore en dev, mais l'avant dernière).
Par contre, là je suis au boulot et je ne pourrai te l'envoyer que ce soir.
Je teste sous DualiS.
Concernant les palettes de couleurs, c'est exactement la même chose que pour PingWin... et lui passe rès bien :blink:
Je n'utilise pas la toute dernière version de PALib, mais la 0.74x.
En fait, j'ai commencé avec la version 0.6x et j'ai donc continuer en utilisant les fonctions de celle-ci (notamment pour le background et les sprites) histoire de ne pas recommencer ce qui fonctionnait déjà et de continuer le dev (je perd déjà énormément de temps avec les travaux que je fais dans ma maison et j'aimerai vraiment releaser le pack au plus tôt :) ).
Je t'envoies donc le tout ce soir
Petite mise à jour sympathique : .76a
C'est expérimental pour l'instant, mais PAFS marche avec les emulateurs et le WMB si on le rajoute direct dans la ram, j'ai fait un exemple pour montrer les 2-3 trucs à rajouter dans le code, c'est pas compliqué...
Sinon, on peut à présent avoir du texte de différentes couleurs à l'écran, pour une compo de noel on pourra faire du rouge, du vert, et du blanc, par exemple :p
Nouvelle version, .77a, avec pas mal de choses... pleins de bugfixs, les sons qui marchent enfin bien avec PAFS, le texte de plusieurs couleur 100% opérationnel sur DS, etc...
Néal Zheimer
07/01/2006, 22h57
Je viens de me motiver à me lancer dans le codage de jeux (ou autres applis d'ailleurs) et patatra !
Dès le "day 1", j'ai un problème :
Suivant le wiki, j'ai installé devkitPro et PA_lib (dans c:\devkitPro) et je teste une première compilation : HelloWorld
Et là, c'est le drame :
C:\devkitPro\PAlibExamples\Text\HelloWorld>make clean
clean ...HelloWorld
C:\devkitPro\PAlibExamples\Text\HelloWorld>make
main.c
arm-elf-g++ -g -mthumb-interwork -mno-fpu -L/c/devkitPro/PAlib/lib -specs=ds_arm
9.specs main.o -Lc:/devkitPro/PAlib//lib -lpa9 -L/c/devkitPro/libnds/lib -lnds9
-o build.elf
c:\devkitpro\devkitarm\bin\..\lib\gcc\arm-elf\4.0.2\..\..\..\..\arm-elf\bin\ld.e
xe: cannot find -lpa9
make[1]: *** [/c/devkitPro/PAlibExamples/Text/HelloWorld/HelloWorld.elf] Error 1
make: *** [build] Error 2
C:\devkitPro\PAlibExamples\Text\HelloWorld>pause
Appuyez sur une touche pour continuer...
Une idée ?
on dirait un problème au niveau des variables d'environnement... tu as utilisé le .exe pour installer PAlib ? (ca ajoute automatiquement la variable PAPATH...)
et tu es sous quel OS ?
Néal Zheimer
08/01/2006, 00h10
on dirait un problème au niveau des variables d'environnement... tu as utilisé le .exe pour installer PAlib ? (ca ajoute automatiquement la variable PAPATH...)
et tu es sous quel OS ?
J'ai utilisé l'installer/upgrader pour devproKit et l'installer pour PA_lib.
Je tourne sous win XP SP2 et j'ai bien PAPATH définie ainsi que plusieurs variables pour devproKit...
Par contre j'ai pas rebooté mais ça ne me semble pas obligatoire non ?
Edit : j'ai rebooté et comme prévu, ça n'a rien changé...
c:/devkitPro/PAlib//lib
et si dans PAPATH tu vires le '/' à la fin ?
Néal Zheimer
08/01/2006, 01h30
c:/devkitPro/PAlib//lib
et si dans PAPATH tu vires le '/' à la fin ?
Ça ne change rien, j'ai essayé :
c:/devkitPro/PAlib
/c/devkitPro/PAlib
c:\devkitPro\PAlib
c:\\devkitPro\\PAlib
sans succès... :(
c'est pas ça que tu dois tapper ?
c:/devkitPro/PAlib/lib
la modif porte sur le dernier / , t'as tout testé mais pas sur les bons.
Néal Zheimer
08/01/2006, 02h10
c'est pas ça que tu dois tapper ?
c:/devkitPro/PAlib/lib
la modif porte sur le dernier / , t'as tout testé mais pas sur les bons.
Non, le /lib est rajouté dans le Makefile.
Je comprends toujours pas pourquoi ça marche pas...
À tout hazard, j'ai essayé d'enlever l'option -lpa9 du Makefile et j'obtiens ça du coup :
C:\devkitPro\PAlibExamples\Text\HelloWorld>make clean
clean ...HelloWorld
C:\devkitPro\PAlibExamples\Text\HelloWorld>make
main.c
arm-elf-g++ -g -mthumb-interwork -mno-fpu -L/c/devkitPro/PAlib/lib -specs=ds_arm
9.specs main.o -Lc:/devkitPro/PAlib/lib -L/c/devkitPro/libnds/lib -lnds9 -o buil
d.elf
main.o: In function `main':
c:/devkitPro/PAlibExamples/Text/HelloWorld/source/main.c:9: undefined reference
to `PA_Init'
c:/devkitPro/PAlibExamples/Text/HelloWorld/source/main.c:10: undefined reference
to `PA_StartInt'
c:/devkitPro/PAlibExamples/Text/HelloWorld/source/main.c:13: undefined reference
to `PA_InitText'
c:/devkitPro/PAlibExamples/Text/HelloWorld/source/main.c:17: undefined reference
to `PA_OutputSimpleText'
main.o: In function `PA_WaitForVBL':
c:/devkitPro/PAlib/include/NDS/PA9.h:279: undefined reference to `PA_vblFunc'
make[1]: *** [/c/devkitPro/PAlibExamples/Text/HelloWorld/HelloWorld.elf] Error 1
make: *** [build] Error 2
C:\devkitPro\PAlibExamples\Text\HelloWorld>pause
Appuyez sur une touche pour continuer...
Erf j'avais le même problème, mais je ne saurais même plus me rappeler comment je l'avais réglé... :(
Essaye de tout désinstaller (grâce au désinstalleur Windows, puis en supprimant les fichiers restants). Puis de réinstaller, et vois ce que ça peut donner...
Edit: trouvé !!!
ca veut dire que PAlib n'est pas bien compilé... essai de compiler avec PALib/CInstall.bat et voir s'il te donne une erreur ou pas
Néal Zheimer
08/01/2006, 03h22
Erf j'avais le même problème, mais je ne saurais même plus me rappeler comment je l'avais réglé... :(
Essaye de tout désinstaller (grâce au désinstalleur Windows, puis en supprimant les fichiers restants). Puis de réinstaller, et vois ce que ça peut donner...
Edit: trouvé !!!
Merci ! Ça marche !
Trop bien !
Sauf que mon chat a bouffé le câble du chargeur secteur de ma DS et que la batterie est vide... :cry:
Je vais le bouffer ce chat !!:devil:
utilise un emulateur, je sais pas si ça passe bien, mais test :
iDeaS
DSemu
Dualis
...y en a un paquet, bon dev! :)
Lol, merci sto... en envoyant mon post je sentais avoir oublié un truc, j'arrivais pas à voir quoi...
Sinon, pour les emus, j'utilise beaucoup DualiS, mais il parait que le dernier iDeaS est pas mal
Mais y'a pas de quoi, je savais bien que je trouverais ! :w00t:
Salut Mollusk
Tout dabord je tiens a te féliciter pour ton boulot sur la PA_Lib et sur le Wiki. Moi qui ni connais rien en codage j'arrive a faire quelques applis sympas avec ma DS. :wub: C'est vraiment simple avec la PALib. :)
Ensuite j'ai un bug avec la fonction PA_SetScreenLight. Une fois activé impossible de lancer un son. :(
Je comprend pas pourquoi ca fait ca. Même avec un code tout simple comme ci dessous, impossible de lancer le son après avoir éteins un écran.
#include <PA9.h> // Include for PA_Lib
#include "NCBE.h"
// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
PA_InitText(0,0);
PA_InitSound();
// Infinite loop to keep the program running
while (1)
{
if (Pad.Newpress.R) PA_PlaySimpleSound(0,NCBE);
if (Pad.Newpress.A) PA_SetScreenLight(0, 1);// Turn on bottom light
if (Pad.Newpress.B) PA_SetScreenLight(0, 0);
if (Pad.Newpress.X) PA_SetScreenLight(1, 1);// Turn on top light
if (Pad.Newpress.Y) PA_SetScreenLight(1, 0);
PA_WaitForVBL();
}
return 0;
} // End of main()
Une idée? :unsure:
Ah....
j'ai une petite idée d'où ca pourrait venir, je vais regarder et je te dis si je trouve quelque chose :/
Tu pourrais essayer un truc et me dire si ca marche ? (j'ai pas de DS sous le coude pour tester)
Dans PAlib/lib/arm7/main.c, tout en bas, juste apres Sound7.c, tu rajoutes ca :
IPC->aux = touchRead(TSC_MEASURE_AUX); // Re-read the aux mesures
Donc tu devrais avoir ca maintenant :
SndInit7 ();
IPC->aux = touchRead(TSC_MEASURE_AUX); // Re-read the aux mesures
// Keep the ARM7 out of main RAM
while (1) swiWaitForVBlank();
return 0;
}
Tout à la fin de ton main.c de l'arm7...
et là tu recompiles PAlib avec CInstall.bat, et tu me dis si ca marche ou si ca a rien changé...
Je viens d'essayer la manip mais ca fait toujours la même chose. Quand j'appuie sur une touche pour éteindre l'écran j'entend les Hp qui font le même bruit que lorsque j'éteins la DS. J'ai remarqué ca.
Si tu veut faire d' autre test il y a pas de problèmes. ;)
bah non, désolé, faudra que je teste quand je récupère ma DS, soit demain matin, ca va...
Sinon, désolé pour le retard, j'ai pas eu le mail comme quoi j'avais une réponse :/
Attention !!!
Soit PALib, soit devKitPro écrase la variable d'environnement PATH!!! :chaise: (du coup,plus aucune commande évoluée ne fonctionne en ligne de commande... :cry:
Alors un conseil pour ceux qui ne l'ont pas encore installé, allez voir dans Panneau de configuration > Système, onglet Avancé, cliquez sur le bouton variables d'environnement, repérez la variable PATH (ou Path, ou path, etc...) dans une des deux listes, double-cliquez dessus, et copiez l'intégralité de la valeur de la variable (dans le bloc notes par exemple).
Ensuite, installez devKitPro et PALib (surtout le fautif des deux).
Retournez dans la fenêtre des variables d'environnement, retrouvez la variable PATH, double-cliquez dessus, puis collez, au début de la valeur de la variable, ce que vous aviez copié précédemment, suivi d'un point-virgule, et votre variable PATH reste entière !!! :w00t:
Sinon, ben c'est relou pour moi, car je ne sais plus ce que j'avais dans ma variable PATH... :cry:
J'espère avoir été clair. :whst:
oulah, ca me parait pas logique. Je sais que devkitpro ajoute des trucs dans Path, mais j'ai jamais eu de soucis (pourtant j'ai fait pas mal de réinstallations), et PAlib installe que PAPATH, ne touche pas au Path, donc pas de raison qu'il modifie quoi que ce soit :/
quelqu'un d'autre aurait eu ce problème ?
Dr.Vince
11/01/2006, 02h13
jamais eu le moindre problème moi non plus !!
Sinon, complètement HS, mais j'ai vu que PAlib a dépassé les 300 downloads (version .exe + zip) pour la dernière version :p
Néal Zheimer
11/01/2006, 03h14
Et ben, ça fait plaisir !
Comme quoi c'est du bon boulot, merci de l'avoir fait Mollusk ! :notworthy :bravo: :dblthumb:
oulah, ca me parait pas logique. Je sais que devkitpro ajoute des trucs dans Path, mais j'ai jamais eu de soucis (pourtant j'ai fait pas mal de réinstallations), et PAlib installe que PAPATH, ne touche pas au Path, donc pas de raison qu'il modifie quoi que ce soit :/
quelqu'un d'autre aurait eu ce problème ? Pourtant, mon Path ne contient plus que des chemins de Visual Studio (installé après devKitPro + PALib) sur mon PC, et plus rien sur mon portable :cry:
Un exemple: 'ping' n'est plus une commande reconnue en ligne de commande...
(de plus, devKitPro+PALib sont les seules choses que j'ai installées sur mes deux PCs récemment et susceptibles de faire ça...)
tu as essayer de réinstaller l'un et l'autre pour voir ce que ca donnait ? (tu en mets un, tu regardes si ca a touché à Path, puis tu mets l'autre)
Sinon, tu as déjà désintallé devkitpro ? (comme il met des trucs dans Path, c'est ptet ca).
Ma première installation de devKitPro+PALib s'est mal passé, du coup, j'ai désinstallé pour réinstaller, c'est peut-être ça, m'en vais tester tiens!
ah, déjà j'imagine mieux une désinstallation qui virerait path... j'ai jamais tenter de déinstaller devkitpro, je remet par-dessus tout le temps en fait
Néal Zheimer
12/01/2006, 01h14
Tiens Mollusk, j'ai une question.
Est-ce que tu as pensé à faire un système de callback pour une programmation événementielle ?
Exemple de code auquel je pense :
// Includes
#include <PA9.h> // Include for PA_Lib
#include <PA_Events.h>
// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
PA_Event_setStyliusPressedCallback((void*) pressed);
PA_Event_setStyliusMovedCallback((void*) moved);
PA_Event_setStyliusReleasedCallback((void*) released);
PA_Event_startInfiniteLoop();
return 0;
} // End of main()
void pressed(int x, int y) {
// code à exécuter quand on pose le stylet
}
void moved(int x, int y) {
// code à exécuter quand on bouge le stylet
}
void released(int x, int y) {
// code à exécuter quand on lache le stylet
}
En fait, en y réfléchissant, on n'a même pas besoin des sources de PAlib pour faire ça... Je pourrai le faire parce que je résonne beaucoup mieux en événementiel qu'en "boucle infinie"...
D'ailleurs, dans les programmes un peu plus avancés que tu as sûrement fait, tu utilises une sorte de grosse machine à états ?
Genre :// Includes
#include <PA9.h> // Include for PA_Lib
// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
...
int etat = 0;
...
// Infinite loop to keep the program running
while (1)
{
switch(etat) {
case 0: // etat initial
// trucs à faire au début
...
etat = 1;
...
break;
case 1: // ...
...
if(...) {
...
etat = 2;
...
} else {
...
etat = 3;
...
}
...
break;
case 2: // ...
...
break;
case 3: // ...
...
break;
}
PA_WaitForVBL();
}
return 0;
} // End of main()
Pour le système événementiel, si tu veux, je peux mettre la main à la pâte, il faudrait juste qu'on définisse un ensemble d'événements à gérer...
Tu en penses quoi ? (bravo d'avoir lu jusque là ! ;) )
bah moi je fais ca un peu à l'arrache, en utilisant une tonne de boucles while, mais c'est clair que le systeme de switch/case serait mieux :p m'enfin je m'en sors tres bien comme ca...
En gros, ce que tu voudrais faire, c'est des fonctions dans lequel l'utilisateur mettrait les différents éléments de son prog ? (genre un pour le menu, un pour le jeu, un pour le reset, etc...) ??
Néal Zheimer
12/01/2006, 01h34
bah moi je fais ca un peu à l'arrache, en utilisant une tonne de boucles while, mais c'est clair que le systeme de switch/case serait mieux :p m'enfin je m'en sors tres bien comme ca...
En gros, ce que tu voudrais faire, c'est des fonctions dans lequel l'utilisateur mettrait les différents éléments de son prog ? (genre un pour le menu, un pour le jeu, un pour le reset, etc...) ??
Non pour ça, il se débrouille. Ce à quoi que je pensais, c'est que chaque événement utilisateur (stylet, pad, boutons, fermeture/ouverture de la console...) ça déclenche l'appel de la fonction associée.
Du coup, plus besoin de s'embêter avec plein de tests dans la boucle infinie, d'ailleurs, on n'aurai même plus à gérer la boucle... :roll:
Le but des callback, c'est aussi qu'on peut changer de méthode selon l'état du programme.
Par exemple :
...
PA_Event_setButtonPressedCallback((void*) appuiBouton);
PA_Event_setButtonReleasedCallback((void*) relacheBouton);
PA_Event_setPadPressedCallback((void*) appuiPadNormal);
PA_Event_startInfiniteLoop();
void appuiBouton(int bouton) {
if(bouton == PA_EVENT_A_BUTTON) {
PA_Event_setPadPressedCallback((void*) appuiPadAvecA);
}
}
void relacheBouton(int bouton) {
if(bouton == PA_EVENT_A_BUTTON) {
PA_Event_setPadPressedCallback((void*) appuiPadNormal);
}
}
void appuiPadNormal(int direction) {
...
}
void appuiPadAvecA(int direction) {
...
}
Tu vois ce que je veux dire ?
ah, bah tu sais, pour ca, y'a les interrupts, ca marche tres bien et ca se fait tout seul :p
Néal Zheimer
12/01/2006, 01h49
ah, bah tu sais, pour ca, y'a les interrupts, ca marche tres bien et ca se fait tout seul :p
Si c'est bien de ces interrupts (http://www.palib.info/Doc/PAlibDoc%20Eng/group___interrupts.html) là et que j'ai bien compris ce qui y est écrit, je crois que tu ne m'as pas bien compris... :)
Le plus simple c'est que je fasse un vrai exemple pour montrer ce que je veux dire... :P
Bah vas-y, je t'en prie :)
Néal Zheimer
15/01/2006, 01h26
Alors voilà, c'est que le début mais j'ai un petit problème, peut-être que tu pourras m'aider...
J'ai testé avec Dualis, ça marche mais quand je le passe sur la NDS, ça ne fonctionne pas... :(
Une idée ?
Nouvelle version de PAlib 0.77b
nouvelles fonctions pour la video : vous pouvez maintenant facilement utiliser une video en .avi que vous convertissez avec ceci (http://delfare.pizz.biz/viDeoconverterS3.zip) pour obtenir un .h et des .vid que vous copiez avec GBFS(le .h aussi) dans votre homebrew et vous utilisez les fonctions PA_InitGBFS(); puis PA_LoadMultiVidGBFS(s8 file); pour charger la video(nommé multivid car vous chargez les differentes sequences dela video(sequences de 1mo), s8 file est le numero du fichier .h.
un template ici (http://delfare.pizz.biz/vidtemplate.zip)
Néal Zheimer
15/01/2006, 13h36
Alors voilà, c'est que le début mais j'ai un petit problème, peut-être que tu pourras m'aider...
J'ai testé avec Dualis, ça marche mais quand je le passe sur la NDS, ça ne fonctionne pas... :(
Une idée ?
Si quelqu'un pouvait essayer le .nds ou .ds.gba et me dire s'il obtient quelque chose...
Merci ! :)
delfare, tu as changé quels fichiers ? juste video ? (j'ai d'autres mises à jour de mon coté à rajouter)
non, j'ai ajoute vidfile.c et vidfile.h
ok, ca marche
tu pourrais me les envoyer en zip stp (ca m'éviterait d'installer le exe !)
Bon, mise à jour avec ajout de la reconnaissance basique...
Mise à jour avec nouveau systeme d'animation de sprites (on peut définir le nombre de fois à jouer, jouer en 'aller-retour'...)
Quelques corrections de bugs qui trainent encore et toujours ^^
Salut,
j'ai téléchargé la dernière version de PALib 0.998c qui corrige le problème retroéclairge/son mais depuis je l'ai installé mes sons ne marche plus du tout, alors qu'avant ca marchais avec un volume très très faible. :hum:
Ca vient de mon code ou alors de la Lib? :(
ca vient de la lib. Faut que je mette à jour, je pense que je vais le faire tout de suite ^^
Si tu veux corriger ca, c'est simple :
PALib/lib/arm7/main.c
ligne 87 (ou par là) : SndVblIrq(); // DekuTree64's version :) modified by JiaLing
Cette ligne était en commentaire alors que c'est elle qui s'occupe de jouer le son !
Merci pour la réponse rapide ;)
C'était bien ca, maintenant ca marche quasi impec. :p Je m'explique lorsque l'on joue un son ca va mais si on décide d'éteindre/allumer le retroéclairage ca marche plus. :(
quoi ??? je l'avais corrigé ca normalement :'( faudra que je reteste :/
J'ai peut être mal fait la manip (ca m'étonerait quand même).
Avant le son ne marchait pas tu tout avec le retroéclairage, maintenant il marche a condition de ne pas allumer/éteindre le retro. :S
Je vais tester avec la version 0.998d pour voir si j'ai encore le problème ;)
Non mais j'ai du corriger uniquement partiellement le problème alors :/ en fait je t'avouerai que j'ai pas testé pour voir si ca marchait, mais j'ai trouvé une grosse raison pour que ca ne marche pas, je l'ai corrigée, et donc je pensais que irait ^^
cool spot
14/08/2006, 12h35
Bonjour, voulant me lancer dans le dev ds j'ai installé la palib qui me parais fort sympathique ^^
Par contre je rencontre un problème avec PAgfx frontend qui ne marche pas.
J'ai installé le .net frameworks 2.0 mais j'ai toujours ce message d'erreur lorsque je cliques sur save and convert :
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ComponentModel.Win32Exception: Le fichier spécifié est introuvable
at System.Diagnostics.Process.StartWithShellExecuteEx (ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
at PAGC_Frontend.Form1.toolStripButton5_Click(Object sender, EventArgs e)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Obje ct key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(Event Args e)
at System.Windows.Forms.ToolStripItem.HandleClick(Eve ntArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(M ouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventIntera ctive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(Event Args e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEven tArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Mes sage& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
PAGC Frontend
Assembly Version: 0.7.0.0
Win32 Version: 0.7.0.0
CodeBase: file:///C:/devkitPro/PAlib/Tools/PAGfx/PAGC%20Frontend.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Merci de votre aide.
Coucou bon j'ai un chtit problème qui n'est malheureusement pas encore résolu avec la dernière version de Palib :(
Je n'ai pas trop le temps d'étoffer je le ferais plus tard, mais mon problème concerne les background et la commande "PA_16bitDraw"
Bon voilà le problème en image:
http://img503.imageshack.us/img503/1959/bugfg5.png
Lorsque l'on commence à trop remplir l'ecrans, des lignes noires apparaissent et grossissent. :S
Si quelqun à un tuyeau, merci de votre attention. :wub:
CoolSpot, tu pourrais poster ton fichier .ini pour voir que tu lui donnes à manger stp ?
Bap65, tu pourrais poster la rom ou pas ?
Oui voilà ^^
Pour le .nds:
http://www.supercard-fr.info/Projets/Bap65/PaiNDS.nds
Pour les sources:
http://www.supercard-fr.info/Projets/Bap65/sourcepainds.c
Merci :wub:
Bon, je dépoussière un peu ce topic car j'aurai une petite question à poser :
A quoi sert les fichiers .bin créé par PAgfx ? Et qu'est ce qu'ils contiennent ??
@lex du 44
30/10/2009, 19h00
Salut j'essaie de faire de la 3D grâce à Palib sans y arriver. Il faudrait apparemment modifier un fichier de configuration (introuvable) et, autre problème potentiel, installer un fichier du nom de libnds - une librairie - antérieur à la version que je possède, mais lequel ?
Merci d'avance :)
archipel
30/10/2009, 22h14
on ne peut plus faire de 3D avec PAlib, il faut maintenant passer par libnds
edit : mince je repond a coté de la plaque
en fait palib se sert de libnds donc il est forcement installé
vBulletin® v.3.7.2, Copyright ©2000-2010, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org