benja32

Membres
  • Compteur de contenus

    80
  • Inscription

  • Dernière visite

Tout ce qui a été posté par benja32

  1. benja32

    Mix The Cube !

    Salut, Merci beaucoup pour ton superbe homebrew, il est vraiment très bien réalisé Il va avoir sa petite place sur ma psp maintenant Merci de l'avoir posté sur gx-mod sans quoi je ne l'aurais jamais découvert bonne continuation pour les prochains release benja32
  2. benja32

    Coup De Gueule Sur Le Chan Irc

    Alors : 1- C'est pas un modo mais UNE modo qui t'as kické. 2 - On voit bien sur le log qu'elle a eu raison. 3 - A force d'ecrire en SMS tu va finir par faire despost surle forum avec seulement un smileys, genre j'ai rien a dire mais je le dit quand meme.... CQFD
  3. benja32

    [projet-pc] Lids

    Salut, Super programma, bravo il trouver sa place sur xtreamlua
  4. benja32

    Le Makefile Qui Rend Fou

    Ben heu c'est Brunni il est connu pour sont oslib, je parlais avec lui sur msn et jlui est montrer le topic c'est pour ca qu'il est venu discuter
  5. benja32

    Le Makefile Qui Rend Fou

    Puis en plus, brunni sais de quoi il parle puisque c'est lui le créateur de l'oslib
  6. Roomain moi aussi il dit compilation reussis mais il ne génère pas de .bin ny de prx :s
  7. j'ai déjà mis le code pour swapper home et note plus haut donc comme ça il te suffira de le copier coller
  8. hi, je me suis renseigner et notre amis Ac_K ma dit que le makefile etait prévu pour linux, perso je ne tourne pas sous linux donc si roomain y est il pourra le compiler très facilement..
  9. benja32

    Cryptage Lua

    comme la dit ouasse le code prend beaucoup moin de place et le code est beaucoup plus rapide et biensur sa permet de cacher sont code source avant le release final ce qui permet de ne pas voir des version modifier de sont programme avant la fin de celui ci sinon tu vois quoi comme désavantage? moi j'en vois pas... a++
  10. benja32

    Cryptage Lua

    oui, telecharge le luaplayer .20
  11. benja32

    Cryptage Lua

    il faut que tu utilises la version 0.20 du luaplayer
  12. Et il n'y a pas de eboot dans le dossier après la compilation. Quand tu as créé ton nouveau projet , tu as bien sélectionné makefile et ajouté tout ce qu'il faut comme dans le tuto ?
  13. 1) les cordonnées de l'écran tactiles sont les mêmes que l'écran du dessus 2) DSLUA ne lis pas les mp3 donc c'est mort.
  14. salut, pspide est très instable, utilise ce tuto, il y a cygwin et visual c++ pour compiler très facilement a++
  15. non moi non plus j'attend un pote qui est absent pour le moment, peu êtrer qu'il pourra m'aider car il est plus doué que moi.
  16. salut, je vais faire mes testes de mon coté mais je te promet rien edit: j'ai modifier le code pour "swaper" la touche note et home, voici le code source: #include <pspctrl.h>int _start(int *pad_data, int count, int mode, int ret_data, int *Buff, int FindExAddrByNid){ unsigned int (* FindExAddrByNid_k)(const char *ModName, const char *library, unsigned int nid); unsigned int (* sceIoOpen_k)(const char *file, int flags, unsigned int mode); int (* sceIoWrite_k)(unsigned int fd, void *data, unsigned int size); int (* sceIoClose_k)(unsigned int fd); if (pad_data[1] & PSP_CTRL_LTRIGGER) { Buff[0x04] = 0x49656373; //'sceI' Buff[0x05] = 0x6c69464f; //'OFil' Buff[0x06] = 0x6e614d65; //'eMan' Buff[0x07] = 0x72656761; //'ager' Buff[0x08] = 0x00000000; Buff[0x09] = 0x69466F49; //'IoFi' Buff[0x0A] = 0x674D656C; //'leMg' Buff[0x0B] = 0x726F4672; //'rFor' Buff[0x0C] = 0x6E72654B; //'Kern' Buff[0x0D] = 0x00006C65; //'el..' Buff[0x0E] = 0x3A30736D; //'ms0:' Buff[0x0F] = 0x622E6B2F; //'/k.b' Buff[0x10] = 0x00006E69; //'in..' FindExAddrByNid_k = (void *)FindExAddrByNid; sceIoOpen_k = (void *)FindExAddrByNid_k((Buff+0x04), (Buff+0x09), 0x109F50BC); sceIoWrite_k = (void *)FindExAddrByNid_k((Buff+0x04), (Buff+0x09), 0x42EC03AC); sceIoClose_k = (void *)FindExAddrByNid_k((Buff+0x04), (Buff+0x09), 0x810C4BC3); int fd = sceIoOpen_k((Buff+0x0E), 0x602, 0777); sceIoWrite_k(fd, (void *)0x88000000 , 0x00400000); sceIoClose_k(fd); } unsigned int Buttons = pad_data[1] & 0xFFFF9FFF; // Buttons Mask if (pad_data[1] & PSP_CTRL_HOME) { Buttons = Buttons | PSP_CTRL_NOTE; } if (pad_data[1] & PSP_CTRL_NOTE) { Buttons = Buttons | PSP_CTRL_HOME; } pad_data[1] = Buttons; return ret_data;} mais lors de la compilation il met dit qu'elle a reussis mais j'obtient aucun fichier à l'arriver, c'est due à une erreur dans le makefile: PSPDEV=/usr/local/pspdev/binINCLUDES=-I $(PSPDEV)/../psp/sdk/includeall: main.binmain.bin: $(PSPDEV)/psp-gcc $(INCLUDES) -W -Wall -G0 -fno-pic -mno-abicalls -w -S main.c -o main.s =======> ligne qui pose problème. $(PSPDEV)/psp-as main.s -o main.o $(PSPDEV)/psp-ld -T psp20bin.x main.o -o main.elf $(PSPDEV)/psp-objcopy -O binary main.elf CtrlP0okm.bin et voici le build: ------ Build started: Project: decrypter_xtreamlua, Configuration: Debug Win32 ------Performing Makefile project actionsMakefile (9) : *** missing separator. Stop.Build log was saved at "file://c:\Documents and Settings\pc\Mes documents\Visual Studio 2005\Projects\decrypter_xtreamlua\decrypter_xtreamlua\Debug\BuildLog.htm"decrypter_xtreamlua - 0 error(s), 0 warning(s)========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== Je vais me renseigner pourquoi il met met "Makefile (9) : *** missing separator. Stop." si j'ai des news je te préviendrai a++
  17. benja32

    Le Makefile Qui Rend Fou

    l'oslib ne sert pas qu'a afficher des images... elle permet beaucoup de chose
  18. Tu parles de l'emu N64 ? Demande A stanX ca risque de lui faire plaisir Je pense pas que Romanof ni StanX se soient amusés à ca... C'est pas tres malin de dire ca, surtout qu'ils ont l'air de bien bosser dur. Tu n'a qu'a leur proposer ton aide tu verras tout de suite si c'est un fake ou pas... mouai... pour un dév capable de faire un émulateur il nous donne pas beaucoup de détail etc etc comme le fon tout les devs. puis le coup de "la video est courte car j'ai plus de pile"..... m'enfin j'espère que j'ai tord car sa montrerai encore une fois les capacités de la nds. sinon tu peu nous faire une video de mario kart 64 ? car si il emule mario il doit émuler encore mieux mario kart car ils sont créé sur le même system. strmnnrmn l'avait très bien expliqué
  19. Cours n°1: Compiler avec Cygwin et Visual Studio c++ Bonjour à tous Tout d'abord je tiens a remercier playeradvance.org et bien entendu Yodajr pour sa merveilleuse installation qui sans elle ce tuto n'aurait pas vu le jour. Bon, commençons par le début : Télécharger l'installation qui est en deux parties, Partie 1 Partie 2 Une fois téléchargé faites clique droit sur une des parties et extraire ici. Maintenant, lancez le programme d'installation, vous devriez tomber sur ceci : Cliquez sur suivant comme pour tous les programmes d'installation, ensuite vous devriez tomber sur ça : D'origine l'installation est sur le lecteur C, dans un dossier nommé Cygwin. Je vous conseille fortement de le laisser comme ça à part si votre lecteur est à la lettre D, mais je parlais du dossier Cygwin a la racine du disque dur . Cliquez sur suivant Maintenant l'installation devrait commencer, mais ne vous inquiétez pas ça ne durera pas longtemps, 10 minutes au grand maximum. Bon une fois installé, un fichier bloc note va s'ouvrir avec une explication. Je vais la réexpliquer pour être sur (je vous gâte hein ) enfaite il y a une deuxième fenêtre bloc note qui s'est ouverte, celle-ci devra subir ou non une modification selon votre ordinateur. La deuxième ligne tout a la fin, la lettre K est la lettre du lecteur amovible quand vous brancher votre psp sur votre ordinateur! Moi par exemple la lettre est F donc j'ai modifié la lettre K par un F. Une fois la modification faite fermez sans oublier d'enregistrer. Et là un troisième document s'ouvre tout seul Quelques modifications son à apporté encore une fois, changer la lettre K si besoin est et renommez le 'xxx' par le nom que votre homebrew portera puis fermez en enregistrant le tout. Si vous avez remarqué il y a une fenêtre ms-dos surtout ne la fermer pas tant que des données ne sont pas apparues comme ceci Revenons maintenant au programme d'installation qui n'est pas fermé, normalement une case "Installer visual studio c++" devrai être cochée si c'est pas le cas cochez la, enfin cliquez sur terminer. Votre navigateur internet devrai ce lancer et arriver sur la page de téléchargement de visual studio c++, cliquez sur download et télécharger le programme d'installation. Maintenant décompresser l'archive et lancez l'installation, vous devriez tomber sur un écran semblable à celui-ci Cliquez sur next et laissez tout par défaut, l'installation n'est pas compliquée, vous verrez. Je rappelle que ce programme est totalement gratuit, mais une fois la licence de 30 jours terminée vous devrez vous inscrire sur le site de Microsoft pour avoir une clé de licence qui est, comme je l'ai dit, gratuite. Bon, maintenant rendez-vous dans le dossier Cygwin puis lancez cygwin.bat. Ensuite nous avons deux ligne de code a taper mais rien de compliquer d'abord " mkpasswd -l > /etc/passwd " puis appuyer sur entrer et ensuite " mkgroup -l > /etc/group " et appuyer encore une fois sur entrer. Vous devriez obtenir quelque chose de semblable a l'image ci-dessous sauf bien sûr le pseudo qui change : Félicitation votre environnement de développaient est enfin près Maiantenant lancez visual c++, et créer un nouveau projet : Séléctionnez general a gauche et Makefile project a droite. Comme nom de projet vous pouvez l'appeler comme vous voulez, moi je l'avais appelé décrypter_xtreamlua, car je m'étais amusé a modifié le décrypter du firmware 3.0 Enfin faite " OK " Vous devriez tomber sur une nouvelle fenêtre, compléter là comme l'image ci-dessous puis appuyer sur finish : Ensuite rendez-vous dans mes documents>Visual Studio 2005>Projects>votre projet>votre projet, et mettez les sources de votre programme dedans ainsi que le fichier copy2psp.bat qui se trouve dans le dossier Cygwin Pour que le main.c et le Makefile soient visibles sur l'IDE, fait comme sur l'image ci-dessous : Ensuite prenez le main.c, le Makefile ne sera pas visible pour corriger cela en bas de la fenêtre sélectionneur all files. Maintenant cliquez sur main.c pour voir le code dans la fenêtre de droite sur visual studio c++. Passons ensuite a la compilation notre but premier pour cela vous n'avez qu'une chose a faire, laquelle me direz-vous ? et bien appuyer sur F7 ! une série de code défilera en bas de l'écran. si la compilation a réussi vous devriez avoir quelque chose comme ça: Parfois il est marqué failled alors que la compilation a réussis, je ne sais pas pourquoi, regarder l'image ci-dessous la compilation a marché alors que le TEXT me dit le contraire Dans le dossier de votre projet, plusieurs fichiers ont été créer, le plus important est l'eboot.pbp qui est le résultat de votre compilation, bien sûr vous pouvez brancher votre psp a votre PC avant d'appuyer sur F7 et il sera automatiquement mis dans le dossier game de votre psp. Voilà j'espère que ce tutoriel vous aura bien aidé, si vous avez des questions n'hésiter pas a les posters sur le forum dans la section approprier Sur ce joyeux Noël et bonne fête de fin d'année a tous Cours n°2: Hello Wolrd, Afficher du text à l'écran. Bien, après avoir lu le cours n°1 vous avez un environnement de développement qui fonctionne et où vous créerez vos programmes. Quoi ensuite? Bien, c'est la partie que vous attendiez avec impatience, votre premier programme pour la PSP. Ce tuto va expliquer les bases du langage de programmation C et construire les fondations sur lesquels vous allez construire votre roya--- euh programmes '. Nous allons créer une hiérarchie de dossier pour organiser nos projets. Ouvrez un bash shell CYGWIN et tapez « mkdir projects » puis pressez entrer. Cette commande(« mkdir ») signifie « make directory »(créer dossier) et va créer un dossier dans le dossier d'opération actuel(dossier ou se trouve CYGWIN). Donc nous avons maintenant un nouveau dossier pour tous nos projet, naviguez à l'intérieur en tapant « cd projects » et pressez entrer. Maintenant nous allons créer un autre dossier pour ce projet spécifique. Tapez « mkdir helloworld » en pressez entrer. Rendez vous maintenant dans ce dossier en tapant « cd helloworld ». Le prochain pas est d'ouvrir un éditeur de texte. C'est pas important quel programme c'est, ça peut être le Bloc-notes, Wordpad, tout ce que vous voulez. Personnellement je préfère utiliser un éditezr dédier à l'édition de sources C/C++ à cause de la coloriation de la syntaxe qui sont intégrés, mais honnêtement, ça ne change absolument rien (du moment que vous savez vous en servir). Maintenant créez un nouveau fichier et nommez le « main.c » dans notre dossier « helloworld ». Ce fichier va contenir le code source de notre programme. Pour ceux d'entre vous qui ne savent pas ce qu'est le code source(et je sais qu'il y en aura beaucoup), le code source est ce que nous écrivons pour créer un programme. C'est écrit de manière à ce qu'un humain puisse le comprendre. Dans la pluspart des langages de programmation, la source doit être convertie en un format compréhensible par l'ordinateur(dans notre cas, la PSP). Ce sont des langages appelés des langages compilés et le C et le C++ tombent dans cette catégorie(la conversion est faite par un compilateur que nous avons initialisé dans la lesson 1). Il y a d'autres langages dit interpétés qui sont lus par des interpréteur qui renvoit le résultat de l'exécution du code. Un exemple de langage interpété est le LUA. Bon, nous avons donc un nouveau fichier qui va contenir notre code source. Maintenant nous devons commencer de le rédiger. La première partie du programme devrait contenir des commentaires pour dire à toute personne qui lit notre code par la suite quel est le but du programme, quand il a été écrit et qui est l'auteur. Les commentaires sont des lignes de code qui sont omises(ignorés) lors de la compilation (ou sautés par l'interpréteur dans les langages interprétés). Les commentaires sont une partie très importante de votre code parce que quand vous(ou quelqu'un d'autre) revenez sur votre code source plus tard vous ne vous souviendrez pas de tous les détails du programme. Donc vous pouvez vous laisser des notes personnelles sous forme de commentaires. Les commentaire sont représentés par des « // » et « /* ... */ ». Chaque fois que vous verrez « // » ça signifie que toute la ligne est en commentaire. Chaque fois que vous verrez « /* » cela signifie que le commentaire s'étend jusqu'au prochain « */ » et que tout ce qui se trouve entre ces deux balises sera ignoré par le compilateur ou l'interpréteur. Les commentaires signalés par « /* » peuvent englober plusieurs lignes mais les commentaires signalés par « // » n'englobent que le reste de cette ligne. Bon, commençons notre programme, nous commençons par laisser un commentaire en haut du document pour dire ce qu'il fait, quand il a été créer et qui l'a fait par : // Hello World – Mon premier programme pour la PSP/* Ce programme a été créé par (Votre nom ici) le (la date ici)C'est une simple application Hello World*/ La prochaine portion de code est la partie ou on dit au compilateur quel fichier d'entête et que fichier d'inclusion nous allons utiliser dans notre programme. Ce que la directive « #include » fait est tout simplement copier du code depuis le fichier que vous avez spécifier. Ceci vous permet de garder votre programme simple, tout en utilisant du code avancé qui est déjà écrit pour vous. La directive d'inclusion peut inclure des fichiers fournis par l'environnement de développement ou des fichiers que vous avez créer vous même en rapport avec le projet. La manière dont vous déclarez quel fichier sera inclus est avec des « <> » pour spécifier le nom du fichier ou vous pouvez aussi utiliser des guillemets double. Les « <> » incluent un fichier du dossier « include » du compilateur et les guillemets double incluent des fichiers qui se trouvent dans le même dossier que le fichier qui les inclu. Nous allons inclure deux fichiers dans notre programme. Le premier est « pspkernel.h ». C'est le fichier qui sera inclus dans chaque programme que vous écrirez pour la PSP. Si vous n'incluez pas ce fichier votre programme ne tournera pas. Le second fichier que nous allons inclure est « pspdebug.h ». Ce fichier contient un grand nombre de fonctions utils pour le débuggage de vos programmes, mais il contient surtout les fonctions que nous allons utiliser pour afficher du texte à l'écran. Donc ajoutons ce code à votre programme : Maintenant nous allons nous allons dire un peu à la PSP ce que va faire le programme. C'est pas vraiment important vu que le compilateur va l'ignorer mais c'est toujours une bonne idée de garder le but du programme quelque part dans le code source(même si c'est juste pour une compatibilité future). Le premier attribut est le nom du programme mais c'est pas réellement le nom du programme qui apparaitra(nous changerons ça plus tard). Les autres valeurs sont d'autres attributs qui apparaitront (laissez tomber ça pour le moment), il s'agit de la version majeur et de la version miineure. Nous allons donc laisser de côter à part les pour les valeurs par défaut. Alors ajoutez cette ligne à votre programme : PSP_MODULE_INFO(''Hello World'', 0, 1, 1); Maintenant nous allons déclarer la fonction qui va nous permettre d'écrir à l'écran. Ce pas est optionnel mais il rend la programmation de programmes en mode texte beaucoup plus facil. La base derrière cette ligne est de modifier la fonction qui est incluse dans la PSP, appelée « pspDebugScreenPrintf » en une syntaxe plus facile à écrir. Cette fonction est utilisée pour écrire à l'écran(que vous verrez plus tard). Ce que nous allons faire c'est renommer « pspDebugScreenPrintf » en « printf ». Comme ça chaque fois que vous écrirez « printf » le compilateur va le traiter comme si vous aviez écrit « pspDebugScreenPrintf ». Et voici comment nous allons procéder : on va définir « printf » en tant que « pspDebugScreenPrintf » comme ceci : #define printf pspDebugScreenPrintf Voilà. J'ai maintenant une bonne et une mauvaise nouvelle. La mauvaise nouvelle est que le prochain bloque de code est assez compliqué. La bonne nouvelle est que vous n'avez pas à le comprendre. Voici une brève explication de ce que ça fait( nous allons laisser la syntaxe ci-présente et l'explication ligne par ligne pour plus tard). Ce que ce bloque de code contient est une fonction qui sera appelée dans notre programme. Cette fonction va préparer votre programme afin qu'il puisse tourner sur la PSP et vous permettre de ne pas vous inquiété pour les éventuels freeze et l'arrêt du programme quand vous ne le voulez pas. Ajoutez ce bloque à votre programme : /* Exit callback */int exit_callback(int arg1, int arg2, void *common) {sceKernelExitGame();return 0;}/* Callback thread */int CallbackThread(SceSize args, void *argp) {int cbid;cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);sceKernelRegisterExitCallback(cbid);sceKernelSleepThreadCB();return 0;}/* Sets up the callback thread and returns its thread id */int SetupCallbacks(void) {int thid = 0;thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);if(thid >= 0) {sceKernelStartThread(thid, 0, 0);}return thid;} Ensuite nous allons définir la fonction principale(« main »). Chaque programmes et C et C++ a besoin de la fonction principale main. C'est depuis là que le code est exécuté. Le code C et C++ est compilé par la dans une suite logique dans la fonction main (paradigme). Il y a donc une suite linéaire. Par exemple, si vous avec ce code(à ne pas ajotuer dans le code) : int myFunction() {//affiche'A'return 0;}int main() {//affiche 'B'myFunction();//P affiche 'C'return 0;} Supposons que les commentaires font ce qu'ils racontes, cela signifierais que d'abord il serait afficher B, ensuite A et ensuite C parce que le compilateur commence à la fonction principale(main). Il affiche donc B, ensuite il voit qu'il doit appeler la fonction « myFunction » définie plus haut qui va afficher A, continue ensuite au point ou il se trouvait avant et affiche C. Tous nos programmes (jusqu'à ce que nous atteignons le C++ avancé) vont suivre cette structure linéaire. Donc la fonction « main » est vitale à l'exécution de notre programme. Pour définir une fonction, vous utilisez la structure suivante : « [type de donnée en retour] [nom de la fonction]([arguments]) {[.code] } ». Le type de donnée en retour que la fonction va retourner(renvoyer) au programme. Pour « main » cela devrait toujours être « int » (pour integer, entier). Le nom de la fonction principal(main) mais biensur être « main ». Donc définissez votre fonction principale en ajoutant ceci à votre code : int main() { Maintenant nous devons ajouter deux lignes pour préparer l'écran et pour pouvoir utiliser ces deux fonctions que nous avons ajouter auparavant(dont vous ne deviez pas connaître le fonctionnement). Même si vous ne devez pas connaître le fonctionnement de ces fonctions, c'est important de comprendre le concepte de comment appeler des fonctions. C'est effectivement très simple. Vous ajoutez juste le nom avec les parenthèse à la fin( et si la fonction prend des paramètre vous les mettez dans ces parenthèses, mais nous allons nous occuper de ça plus tard). Chaque ligne de votre programme va avoir besoin d'un « ; » à la fin. La raison pour laquelle nous devons mettre des « ; » est que le compilateur ne reconnaît pas les espaces. Entre deux lignes vous pouvez avoir 100 lignes vides et le compilateur ne s'en préoccuperait pas. C'est très pratique parce que ça vous permet de formater votre code afin d'avoir une meilleur lisibilité pour vous. Vous pouvez grouper des lignes ou les espacer comme vous voulez, mais pour finir une ligne vous avez besoin d'un « ; ». Donc ajoutez ces deux lignes dans le programme pour le préparer : pspDebugScreenInit();SetupCallbacks(); Maintenant écrivons du code dont nous pourront voir des résultats. Vous rappelez vous quand nous avons définis « pspDebugScreenPrintf » en tant que « printf »? Bien, maintenant il est tant de s'en servir. La manière dont nous allons afficher du texte à l'écran est en appelant « printf » avec un paramètre (je vous avais dit que nous verrions ça plus loin). Un paramètre est une variable que vous pouvez passer à la fonction pour qu'elle s'en serve. Ceci viendra facilement plus tard quand vous écrirez vos propres fonctions. Bon, pour que « printf » affiche du texte nous devons lui passer une chaine de caractère. « printf » est une fonction puissante parce que nous pouvons aussi l'utiliser pour afficher des variables à l'écran. Nous les passerions dans d'autres paramètre, mais tout viendra en temps voulu.Maintenant nous allons juste écrire « Hello World » à l'écran, comme ça : printf(''Hello World''); Et voilà, noud avons dit à « printf » d'écrir à l'écran. Maintenant nous devons finir encore nous occuper de quelques détails et notre code source sera près à la construction. Nous devons mettre le prorgamme en pause pour que nous puissions voir l'affichage. Si nous ne le fesions pas le programme se bloquerais juste ou retournerais au menu PSP. Et vous ne pourriez jamais voir cette belle phrase à l'écran parce qu'elle serait effacée si vite. Ajoutez donc cette ligne pour que le programme s'arrête jusqu'à ce que le bouton « Home » soit pressé et que l'utilisateur soit renvoyé à l'OS de la PSP : sceKernelSleepThread(); Maintenant nous devons donner à notre fonction une valeur de retour, comme quand nous l'avons définie (« int main() »), nous disions au compilateur que la valeur de retour sera un entier. Donc retournons juste un 0 (c'est bien un zéro et non un o majuscule) en ajoutant ça : return 0; Et finalement, finissez la fonction en ajoutant une accolade de fermeture : } Et voilà, c'est tout pour le programme! Maintenant nous devons juste dire au compilateur comment nous voulons que le projet soit compilé en créant un Makefile. Créez donc un nouveau fichier appelé « Makefile » sans extension (par ex : pas de .txt). Une fois que c'est fait ouvrez le fichier avec votre editeur de texte. Ajoutez ça à votre Makefile : TARGET = helloOBJS = main.oCFLAGS = -O2 -G0 -WallCXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rttiASFLAGS = $(CFLAGS)EXTRA_TARGETS = EBOOT.PBPPSP_EBOOT_TITLE = Hello WorldPSPSDK=$(shell psp-config --pspsdk-path)include $(PSPSDK)/lib/build.mak Vous pouvez utiliser ce Makefile comme base pour vos projets simples. Parfois vous devez ajouter des librairies ou je ne sais quoi à ce fichier, mais pour le moment c'est vraiment simple. Principalement ce fichier dit au compilateur de prendre « main.c » et le construire avec PSPDSK dans un fichier .pbp que votre PSP peut lire. Ce que vous devrez changer si vous utilisez ce Makefile pour d'autres projets c'est ou ça dit « PSP_EBOOT_TITLE=Hello World ». Vous pouvez changer le « Hello World » et mettre le nom de votre programme, c'est le nom qui va apparaître à l'écran de la PSP quand vous sélectionnez le fichier. Maintenant ouvrez un bash shell CYGWIN et « cd » dans votre dossier de projet « projects/helloworld ». Tapez « make » et le shell devrait vous retourner quelques infos. Il va vous dire si votre code source contient des erreurs qui le rendrait incompatible. Généralement il vous donne bon nombre d'avertissements mais ce n'est pas très important. Ce sont les erreurs auxquels vous devriez vous intéresser, les avertissements sont juste des points ou il y aurait potentiellement des bugs. Note : si vous avez la version du Firmware 1.50, vous pouvez automatiquement générer vos deux dossiers en tapant « make kxploit » à la place de « make ». Si vous n'avez aucune erreur, félicitations! Vous avez créé avec succès votre première application pour PSP! Je parie que vous êtes avide de l'essayer. Alors mettez « C:/cygwin/home/VotreNomd'utilisateur/projects/helloworld/EBOOT.PBP » sur votre PSP comme vous le feriez avec n'importe quel autre Homebrew et essayer le! Télécharger le code source ici Voilà c'est ici que s'achève la première partie d'autre viendrons s'ajouter par la suite, n'hésité pas à poser des questions si vous en avez a++ benja32
  20. benja32

    Le Makefile Qui Rend Fou

    tu peux la télécharger ici et pour t'aider en plus de la doc, il y a des samples làbas
  21. aie ! ca fait limite quand meme (meme si, la encore la ram est certainement tres differente de la N64) esperons qu'ils pourront optimiser cet emulateur pour arriver à quasi voire zero lag. EDIT : Le plus bizarre c'est que la N64 est plus puissante que la ps1; alors trouverons nous (un jour peut etre) un emulateur ps1 pour DS ??? Ca m'etonnerait fort, mais si la ds est capable de faire tourner des jeux n64, il n'y a aucune raison qu'elle ne puisse pas le faire avec des jeux ps1 l'émulation ps1 ne vera jamais le jour sur la nintendo ds car l'architecture est trop differente. sinon je suis pratiquement sur que c'est un beau fake :-/
  22. benja32

    Le Makefile Qui Rend Fou

    derien si tu veu faire des petit jeu en 2D en C, utilise l'oslib, tu verra c'est très facile http://xtreamlua.com/oslib/ a++
  23. sorry j'etais tellement pris par le tuto que j'en ai oublier les formules de politesses
  24. Cours n°1: Introduction à la programmation. Bonjour les gueux L'univers de la DS commence a grandir c'est pourquoi beaucoup de personne vont vouloir contribuer à cette grande communauté. DS Lua vous permet de créer (en codant) vos jeux sans trop de connaissances en la matière c'est pourquoi j'ai décidé de faire un tutorial pour vous permettre de le comprendre très facilement. Je ferais sûrement une série de tutoriaux en fonctions de l'évolution des versions. J'ai beaucoup de connaissances dans la programmation, cela est donc facile pour moi, mais je vais vous l'expliquer simplement de manière à ce que même les personnes qui n'ont jamais fait de programmation ne soient pas perdus. De plus je vous conseille de connaître les bases de la programmation car je ne vais pas en parler en détails. Pour commencer vous aurez besoin de quelques logiciels pour pouvoir utiliser DS Lua. Vous aurez bien sûr besoin d'une nintendo DS et d'un kit flash. Le Lua est un langage interpreté donc il n'a pas besoin d'être compilé mais dans le cas de la DS vous devez le packeter dans un fichier ROM pour que ça marche. Je vous expliquerais ça plus tard. Logiciel dont vous avez besoin: -DS Lua Player (dernière version 0.5 au moment où je suis en train d'écrire), trouvable ici. -Je vous conseil fortement de vous procurer un émulateur. Dualis est le meilleur dans la matière, téléchargez la dernière version ici. Il supporte le son, le style,le double screen, impressionnant hein ? – un environnement de développement: Crimson Editor, téléchargez le ici. Bon nous avons donc tous nos programmes de base pour nous permettre de créer notre première application: "hello world". Une multitude de possibilités s'offrent devant nous, C'est parti !! Comment lancer votre script.lua avec l'émulateur et la nintendo ds: Pour lancer votre code lua sans compacter en une ROM utiliser la version cf avec l'émulateur dualis, pour cela allez dans file et cliquez sur load and exécute, une fenêtre apparaît. Sélectionner le dossier release-cf de dslua et lancer DSLua.nds. Quand cela est fait une interface apparaît sur la partie basse de l'écran de l'émulateur, avec les flèches directionnelles sélection cf puis appuyer sur X pour rentrer dedans, ensuite cliquer sur scripts et lancer votre script.lua que vous aurez préalablement mis dans ce dossier. Voilà vous savez maintenant comment utiliser le DSlua version CF qui est le plus utilisée selon vos linker, mais ia c'est vous qui devez savoir lequel est compatible Maintenant je vais vous montrer comment utiliser la version GBSF. Tout d'abord, placez votre script.lua dans le dossier scripts (dans le dossier du luaplayer GBFS bien sûr) ensuite cliquez sur PACK.bat. Une fois fais, lancez dualis cliquez sur load and execute et lancer DSLUA-PACK.nds qui se trouve dans le dossier bundle (c'est ce fichier qui a été créer quand vous avez lancé PACK.bat. Il contient votre script.lua), nous le compactons dans un .nds car certain linker ne peut lancer seulement les fichiers compacter dans une rom. L'étape suivante est optionnelle et n’est utile que si vous utilisez le Crimson Editor. Donc, si vous utilisez Crimson Editor, vous pouvez configurer un macro pour compresser automatiquement votre rom et la lancer en tant que test. Evitez d'avoir d'autre tâche de fond dans windows pendant que vous programmer. Maintenant fait ce qui suit : 1. Ouvrez Crimson Editor 2. Cliquez sur "Tools" puis "Preferences" 3. Selectionnez "User Tools" 4. Dans le menu text , saisissez "DS Lua Run", dans Command, cliquez sur le boutton browser (...) et selectionnez votre fichier PACK.BAT (le répertoire initial est le répertoire où se trouve votre PACK.BAT . Enfin, cliquez sur "Hot Key" et appuyez sur le bouton que vous voulez lui associer. D'habitude j'utilise F5 ou F9. Enlevez (décocher) "Close on Exit" et vérifiez bien que "Save before execute" est coché. Et enfin cliquez sur OK. Quand vous souhaiterez tester votre jeu, vous pourrai le faire en appuyant sur la touche associé à "hotkey", donc, si vous aviez choisi F9 par exemple, en appuyant sur F9 cela sauvera le fichier et lancera le fichier PACK.BAT. Voilà maintenant rendez-vous au cour n°2 pour commencer a programmer Cours n°2: Hello World. Dans ce cour, nous allons apprendre à créer notre propre programme. Votre premier programme sera un "Hello World", qui sera affichée sur l'écran du haut en jaune. Commençons par créer un nouveau fichier dans lle dossier script appelé "helloworld.lua". Ensuite ouvrez le avec votre éditeur de texte ou de code que vous utilisez. Nous avons besoin de taper le code pour pouvoir mettre le code sur l'écran du haut: SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText ) Nous avons posé une variable SCREEN_TOP en haut du programme cela est plus pratique. Maintenant que l'écran est en gros "installé/monté" il est temps de taper un peu de texte. Cela peut être réalisé en utilisant une simple fonction appelée PrintXY().Cette fonction vous permettra de faire apparaître du texte sur n'importe quel écran et dans n'importe quel endroit. Vous pouvez le faire en utilisant ce code: BGBotText:PrintXY( 1, 1, "Hello World!" )BGTopText:PrintXY( 1, 1, "Hello World!" ) La ligne du haut sert à afficher Hello World sur l'écran( nous allons donc l'utiliser) et la deuxième à l'afficher en bas. Mais auparavant pour l'afficher en bas il faut taper les codes d'installation de l'écran, mais pour le bas non pour l haut comme nous l'avons fait précédemment. Vous devrez donc obtenir ceci: SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )BGTopText:PrintXY( 1, 1, "Hello World!" ) Vous vous demandez sûrement à quoi correspondent les 1 et pourtant je suis sûr que vous en connaissez la provenance et dès que je vais vous le dire vous aller faire un grand AHH! et vous dire que c'est très logique. Les 1 correspondent en fait aux coordonnées du texte ( vous avez vu ça au lycée et même au collège avec les repères des droites, etc).Et bien ici c'est la même chose qu'un repère l'écran de la DS est comme ceci avec un repère à l'envers: J'espère que vous avez compris le fonctionnement . Maintenant lancez le programme même s'il n'est pas fini est bien sur il ne marche pas réellement.Il ramène directement au menu principale sans que vous ayez le temps de voir le texte.Nous avons donc besoin de trouver un moyen pour mettre le programme en pause afin de voir le texte s'afficher.Nous allons donc mettre un systeme qui attendra que vous pressiez un bouton pour revenir au menu principal. Le code est le suivant: SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )BGTopText:PrintXY( 10, 12, "Hello World!" )DSLua.WaitForAnyKey() Voici le résultat sur la nintendo ds: Bien! Maintenant lancez le et vous devriez voir Hello World au centre de l'écran du haut. Remarquez bien que j'ai changé les chiffres dans cet exemple pour que le texte soit centré. Ah oui maintenant je suppose que vous voulez rajouter un peu de couleur pour donner un aspect plus vivant à votre texte et bah voila le code ya rien de plus simple: BGTopText:SetColor( 4 )BGTopText:PrintXY( 1, 1, "Votre texte" ) Le nombre dans BGTopText:SetColor() dit à DSLua quelles couleurs il doit utiliser.Je suis généreux je vous donne donc le code des couleurs: # Couleur0 Noir1 Rouge2 Vert3 Bleu4 Magenta5 Cyan6 Jaune7 Gris clair8 Gros foncé Les nombres que vous mettrez dans la fonction énoncée précédemment correspondront à la couleur en face de celui-ci (tableau). Je vous rappelle que notre but était de faire apparaître Hello World en jaune, centré sur l'écran du haut de votre DS et qui revient au menu principal quand vous pressez n'importe quel bouton voici donc le code final: SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )BGTopText:SetColor( 6 )BGTopText:PrintXY( 10, 12, "Hello World!" )DSLua.WaitForAnyKey() Voila vous avez réalisé votre premier programme sur votre DS !! Félicitation !! Je vais vous maintenant vous montrer comment on fait la même chose, mais avec les deux écrans à la fois.Je vous donne juste le code avec les explications après les -- qui ne sont pas lues par DSLua. Ceci permet au programmeur de mieux se retrouver dans ses codes et au lecteur de mieux comprendre a quoi le code sert. Je suppose qu’étant très forts vous avez déjà compris le fonctionnement de ces fonctions. Place au code !! Voici le résultat sur la nintendo ds: -- "installer" les deux écrans pour afficher le texteSCREEN_TOP = 1SCREEN_BOTTOM = 0BGTopText = Screen.LoadTextBG()BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )Screen.Initialize( SCREEN_BOTTOM, BGBotText )-- Programmez des variables pour le texte de l'écran du hauttextcolor = 6text = "Hello World!"x = 10y = 12BGTopText:SetColor( textcolor )BGTopText:PrintXY( x, y, text )BGBotText:SetColor( 6 ) -- 6 correspond au jaune (voir tableau)BGBotText:PrintXY( 10, 12, "Hello World!" ) -- 10, 12 devrait centrer le texte.DSLua.WaitForAnyKey() -- attendez que le texte s'affiche puis pressez une touche pour quitter. Cour n°3: Les conditions. Les instructions "If" sont des bout de code qui sont executé que si une certaine condition est remplie. Exemple de condition : if name == "bob", if a < 4, if answer == "correct".... Voici comment vous devez écrire une intruction : SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )language = DSLua.Language()if language == 1 thenBGBotText:PrintXY( 1, 1, "Hello!" )endif language == 2 thenBGBotText:PrintXY( 1, 1, "Bonjour!" )endDSLua.WaitForAnyKey() On peut traduire les lignes de code ci dessus par : Afficher "Hello!" si la DS est en anglais, ou "Bonjour!" si elle est en francais. Vous devriez comprendre comment faire une simple instruction avec "if" maintenant. Rapelez vous, que lorsque vous assimilez 2 variables, ou nombre il faut utiliser ==. Et quand vous assignez une valeur à une variable il faudra utiliser, =. Ne les mélanger pas! Mais le == vérifie juste que les deux valeurs sont égal, alors qu'en est-il si l'on veut vérifier qu' une valeur est plus grande que l'autre ou si deux valeur sont inégale? Voici la liste des opérations de compraison qui peuvent être utilisé dans des instruction de condition (comme if) : Operation Exemple Explication == if a == 1 then Si A est égal à 1 alors lancé le bout de code suivant.~= if a ~= 1 then Si A n'est pas égal à 1 alors lancé le bout de code suivant.< if a < 1 then Si A est plus petit que 1 alors lancé le bout de code suivant.> if a > 1 then Si A est plus grand 1 alors lancé le bout de code suivant.<= if a <= 1 then Si A est plus petit ou égal à 1 alors lancé le bout de code suivant.>= if a >= 1 then Si A est plus grand ou égal à 1 alors lancé le bout de code suivant.. Il y a quelque partie optionel de l'instruction de if. Il y a else, elseif, and, et or. "Else" executera le bloc de code selon else seulement si l'instruction "if" renvoie comme valeur false [faux] (ce qui signifie que le bloc de code de l'instruction if ne sera pas exécuté.) "Elseif" est juste une instruction if qui s'executera seulement si l'instruction if qui lui appartiens renvoie false [faux], comme else. Testons maintenant de multiples conditions, donc toutes les conditions que nous allons utiliser devront renvoyer true [vrai] au bloc de code pour s'executer. "Or" est utilisé un peu comme "adn", mais si n'importe laquel des conditions utiliser avec "or" renvoie true [vrai], l'instruction if s'executera même si une des autres conditions n'est pas trouvée. Voici un exemple de toutes ces instructions if: SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )hour = DSLua.Hour()if hour > 0 and hour < 4 thenBGBotText:PrintXY( 1, 1, "Tu es presque en retard!" )elseif hour > 4 and hour < 12 thenBGBotText:PrintXY( 1, 1, "Bonjour!" )elseif hour > 11 and hour < 16 thenBGBotText:PrintXY( 1, 1, "Bonne après-midi!" )elseBGBotText:PrintXY( 1, 1, "Bonsoir!" )endDSLua.WaitForAnyKey() Boucles Les boucles sont des blocs de code qui repète un certain nombre de fois. Il y a deux types de boucles différentes en DSLua : La "boucle for" et "boucle while". La "boucle for" repète un nombre de fois définit par vous ou une variable. La "boucle while" est une boucle conditionel. La boucle, comme son nom l'indique se repète en boucle jusqu'a ce qu'une condition soit touvée. While ressemble beaucoup à une instruction if. Cette boucle execute un bloc de code si une certaine condition est trouvé. La différence est que cette boucle while repète le bloc de code encore et encore jusqu'a ce qu'une condition soit trouvée. Voici un exemple. Cette "boucle while" attend que l'utilisateur touche l'ecran tactil de la DS avant de continuer le programme : SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )BGBotText:PrintXY( 1, 1, "toucher l'écran tactil pour quitter!" )x = 1while x == 1 doif Stylus.Down() thenx = 0endend J'ai fixé x égal à 1 au départ et la boucle while vérifie si x est bien égal à 1 à chaque fois que la boucle se relance. Elle vérifie aussi si le stylet touche l'écran tactil à chaque boucle. Si c'est le cas, il fixe x égal à 0. Si la boucle conditionel trouve que x n'est pas égal à un, il stop la boucle et le programme reprend normalement. Pour les boucles ayant un compteur intégré à une variable, ils se veront incrémenter (ajouter) 1 à chaque fois que la boucle se relance. On fixe le nombre que l'on veux pour prevoir le départ, et le nombre pour la fin de la boucle que le compteur devra atteindre pour s'arreter. Facultativement, vous pouvez fixer le nombre qui se vera incrementé/désincrementé à votre compteur. (Comme si par exemple vous vouliez créer un compte à rebour "countdown" [10 9 8 7 6 5 4 3 2 1] , utiliser le compte à rebour comme ceci : countdown=10,1,-1 ce qui aura pour effet de diminuer le compte à rebours d'un à chaque fois.) Voici un exemple concrait : SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )for x=0,7 doBGBotText:SetColor( x )BGBotText:PrintXY( 1, x+1, x )endDSLua.WaitForAnyKey() Comme vous pouvez le voir, la variable X est beaucoup utilisée. Au début de la boucle, je fixe x egal à 0. Donc X est maintenant déclaré comme le compte à rebour, auquel cas il se lance jusqu'a 7 et ensuite retour à 0. Dans la boucle, d'abord il place le texte inférieur sur l'écran au code de couleur X. Ensuite, il imprime X à l'écran, aux coordonnées 1,x+1. Cour n°4: Reconnaissance des touches et de l'écran. Jusqu'à présent nous avons vu comment affiché des chose à l'écran et les laisser se déplacer aux hasard (le programme prend des décision aux hasards). Mais cela n'est pas vraiment utile lorsque l'on veut réaliser un jeu dans lequel est fait pour une nintendo DS. Vous allez avoir besoin de "user-input" ( = donné d'utilisateur) pour faire un jeu. La DS a les différentes sorte de donnée d'utilisateur suivante: touch screen (le touche écran), buttons (boutons), et microphone (microphone). Vous allez en apprendre un peu plus à propos des deux premier dans ce tutoriel. Pour les boutons c'est facile. Il y a fonction spécial pour chaque boutons qui, s'il n'est pas pressé (si on appuie pas dessus) nous donne le résultat false (faux) et true (vrai) si le bouton est pressé (un peu confus ? c'est normal). Ces fonctions ne peuvent pas se trouver dans le fichiers readme.txt qui est avec le DSLua, mais je vais le lister ici: Pads.A()Pads.B()Pads.X()Pads.Y()Pads.L()Pads.R()Pads.Up()Pads.Down()Pads.Left()Pads.Right()Pads.Select()Pads.Start()Pads.AnyKey() Trés trés facile. Ils commencent tous avec Pads. et ensuite le nom du bouton, suivi de (). Pads.AnyKey() signifie que le résultat est true si une des touches est pressée. SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )x = 16y = 12while Pads.Start() == false do -- Quitte quand START est appuyéif Pads.Up() theny = y - 1endif Pads.Down() theny = y + 1endif Pads.Left() thenx = x - 1endif Pads.Right() thenx = x + 1endBGTopText:PrintXY( x, y, "0" )for delay=1,5000 doendend Le touche écran est un peu plus dur à capter, mais reste tout de meme compréhensible. Il y a 3 fonctions: Stylus.Down() Donne le résultat true si le stylus est entrain de toucher l'écran.Stylus.X() Donne la position de x du stylus s'il touche l'écran.Stylus.Y() Donne la position de y du stylus s'il touche l'écran. Par exemple, si l'on veut que l'utilisateur touche l'écran pour qu'un jeu commence, comme beaucoup de vrai jeu DS, vous pouvez utiliser le code suivant: while Stylus.Down() == false doend Mais pour afficher "Vous pressez un bouton" à l'écran et pour vérifier que l'utilisateur est entrain de taper sur l'écran est en peu difficile . Vous aurez besoin d'utiliser ce code, que vous pourrez comprendre aprés l'avoir regardé plusieurs fois: if Stylus.X() >= 50 and Stylus.X() <= 70 and Stylus.Y() <= 150 and Stylus.Y() >= 100 thenBGBotText:PrintXY( 1, 1, "Vous pressez le bouton!" )end Bien sur vous aurez besoin de vérifier continuellement s'ils sont préssés en utilisant une boucle principal (loop). De toute facon, le code d'au dessus vérifie s'ils ont tapé cela : Ma fonction permet de detecter si le stylus est appuyé dans un rectangle de valeur 50 , 100 , 70 ,150. Ca marche comme cela : if stylusInBox( 50, 100, 70, 150 ) thenBGBotText:PrintXY( 1, 1, "vous avez préssé le bouton!" )end La premiere coordonnée (50, 100) précise où se situe le coin supérieur gauche de la box (boite), et la seconde (70, 150) précise où se situe le coin inférieur droit de la box. A partir de cela, la fonction nous informe si le stylus est dans la (return true). Cour n°5: Sons et musiques La plupart des bons jeux sont dotés de musiques et d'effets sonores, ou au moins l'un des deux. Le DSLua supporte seulement deux formats : Les effets sonores en .RAW et les musiques en .MOD. Vous pouvez trouver des musiques au format .MOD sur Mod Archive ou en cherchant sous Google. Les effets sonores en .RAW peuvent être converti à partir d'un format .WAV ou .MP3 avec un logiciel adhécuate (à chercher sous google ). J'utilise Smart Audio Converter qui est en téléchargement libre mais il y en a surement de bien meilleur. Note : Il semblerai que Dualis ne jouerait pas correctement les fichiers .MOD et .RAW. Les fichiers .MOD sont ralentis et les .RAW le sont encore plus. Tout d'abord, vous apprendrez comment lancer une musique. Ne vous inquiétez pas, c'est très simple. La première chose à faire est de charger le fichier MOD. Si votre fichier MOD s'appel, par exemple "music.mod", vous devez faire ça : ModSongname = Music.LoadMod( "music.mod" ) Ensuite, pour le lancer, nous utilisons ModSongname:Play(). Pour le stopper, nous utilisons ModSongname:Stop(). Et pour le mettre en pause : ModSongname:Pause(). A la fin de votre programme, ou quand vous en avez finit avec le fichier MOD, utilisez ModSongname:Free() pour le liberer de la mémoire. Voici un programme de démonstration de toutes ces fonctions. A lancera la musique. B stoppera la musique. L mettra en pause la musique. Et Start stoppera le programme : -- Charge la musiqueModMusic = Music.LoadMod( "music.mod" )while Pads.Start() == false doif Pads.A() thenModMusic:Play()endif Pads.B() thenModMusic:Stop()endif Pads.L() thenModMusic:Pause()endendModMusic:Free() Pour les effets sonores, c'est exactement la même chose, exepté que vous ne pouvez pas l'arreter ou le mettre en pause. Maintenant que vous savez tout au sujet du lancement des fichiers musique, vous devriez facilement pouvoir savoir lancer des effets sonores en regardant ce code : -- Charge les effets sonoresSndGun = Sound.LoadRaw( "gun.raw" )SndVoice = Sound.LoadRaw( "voice.raw" )while Pads.Start() == false doif Pads.A() thenSndGun:Play()endif Pads.B() thenSndVoice:Play()endendSndGun:Free()SndVoice:Free() Voilà c'est ici que s'achève la première raclée de cours d'autre viendrons s'ajouter par la suite, n'hésité pas à poser des questions si vous en avez a++ benja32