Les forums de JeuxVideo.com
-
zack-62
- Posté le
1er novembre 2009 à 15:34:46

-
... dans la programmation psp
I) introduction
Vous faites peut-être partie de ces personnes qui, depuis un certain temps, observent l'évolution de la scène PSP. Vous avez sans doute remarqué le nombre croissant de jeux développés non-professionnellement, par des amateurs, qu'on appelle les homebrews.
Peut être même qu'un jour, vous avez eu l'envie de participer activement à l'évolution de la scène underground de la PSP. Et à ce moment là, beaucoup de questions vous sont venues à l'esprit, toutes plus intéressantes les unes que les autres.
Voici donc, en détail, l'étalage de toutes les orientations que vous pourrez prendre en choisissant de participer à la scène PSP.
II)le langage LUA
1) Pour quelqu'un qui n'a jamais touché à la programmation, il est nécessaire de suivre une certaine démarche d'apprentissage, pour ne pas être démotivé devant une difficulté certaine que l'on rencontre tous un jour en développant, et d'acquérir de l'expérience et de la pratique petit à petit.
Ainsi, le premier langage qui s'offre à vous est le Langage Lua. Ce langage, simple dans sa syntaxe (comparé à d'autres), permet déjà aux débutants de réaliser bien plus de choses qu'ils n'imaginent:
•Un jeu en 2D ou en 3D (hors ligne ou en ligne, via les modes Ad-Hoc et Infrastructure); ceux que l'on nomme habituellement homebrews
•Des programmes riches et variés tels des lecteurs MP3, lecteurs et éditeurs de texte
•Un shell (un menu proposant diverses fonctions), on en trouve beaucoup dans la scène PSP comme vous l'aurez remarqué
•Un utilitaire, qui peut aller du simple programme pour créer les dossiers sur la Memory Stick, à celui qui gère au grand complet le flash0, voire le nand complet de la PSP
•Tout ce qui pourrait vous passer par la tête !
Toutefois, on note quelques restrictions dans ce langage. En effet, le Lua en dépit de sa simplicité, est limité. Son plus grand défaut (qui reste tout de même un grand avantage du Lua) est le fait que ce langage est interprèté. Il est donc vraiment lent à exécuter, et vous ne pourrez programmer que des homebrews relativement basiques. Vous ne pourrez donc pas réaliser des programmes comme :
•Un Custom Firmware
•Un émulateur, comme par exemple gpSP, Masterboy, Snes9xTYL, Daedalus et bien d'autres
•Un lecteur vidéo
•D'autres logiciels poussés de ce type
Il vous faudra donc commencer de préférence par le Lua, qui vous donnera un nombre conséquent de bases très solides, tout en utilisant des commandes simple et logiques.
Vous apprendrez, par exemple...
•L'affichage de texte
•L'affichage d'images
•Les variables
•Les opérations mathématiques
•Les commandes de la console
•Les conditions
•Les boucles
•Les fonctions
•La gestion des fichiers
•Les tableaux
•Les notions de collision
•Les co-routines, et timers
•...
Si vous ne comprenez pas la plupart de ces termes, ne vous inquiétez pas, ils ne vous resteront pas longtemps inconnus quand vous vous serez lancés dans le Lua.
2) C'est bien beau, mais comment je commence?
Le Lua est un langage interprété, c'est-à-dire qu'il n'a pas besoin d'être compilé. Vous n'avez donc qu'à créer un fichier texte (format TXT), puis y taper votre code. Pour cela, voici quelques uns des éditeurs de texte les plus connus sur PC:
•Notepad++, un must, avec coloration syntaxique (télécharger Notepad++ sur 01net)
•Le bloc-notes de Windows
•Gedit ou Vim pour les utilisateurs de Linux
•Smultron, similaire à Notepad++, mais pour les utilisateurs de Mac
Il vous faudra ensuite changer le nom du fichier en "script.lua" et le tour est joué. Pour lire votre programme sur PSP, il faut faire exécuter le code via un interpréteur:
•Luaplayer HM 7, le plus connu et le plus utilisé en général.
•Luaplayer HM v2, plus avancé que son prédécesseur, mais les instructions ont bien changé, il faudra vous aider de la documentation fournie avec.
•LuaPlayer Euphoria, fraîchement débarqué, mais qui fonctionne à merveille (télécharger LuaPlayer Euphoria v3 sur psp gen). Son intérêt réside dans le fait qu'il est beaucoup plus rapide que les autres interpréteurs Lua.
Sachez que tous ces interpréteurs sont basés sur LuaPlayer 0.20, qui commence à se faire vieux, mais qui a lancé le Lua sur PSP.
Sachez que Luaplayer 0.20 n'est pas compatible en Custom Firmware 5.02 GEN, dû à un prx trop ancien maintenant. Il l'est cependant toujours en 5.00 M33.
Une fois que vous aurez appris, et pris une bonne expérience en Lua (en ayant réalisé des petits programmes, bouts de code), vous voudrez sûrement agrandir vos compétences en programmation.
Et rien de plus efficace après avoir étudié et maîtrisé le Lua, que de se lancer dans les Langages C/C++.
Ceux-ci seront un peu plus compliqués à apprendre, mais l'avantage certain est que ces langages vous permettront de réaliser tout et n'importe quoi. Oui, c'est avec du C et du C++ que vous aurez la possibilité de vous lancer enfin dans un projet conséquent tel qu'un début de Custom Firmware, un émulateur, et la création de plugins au format PRX.
- Lien permanent
-
zack-62
- Posté le
1er novembre 2009 à 15:39:00

-
III) programmer en lua : les fondamentaux
1) Ce langage a été développé par Roberto Ierusalimschy, Waldemar Celes et Luiz Henrique de Figueiredo de l'Université de Rio de Janeiro, au Brésil. Signifiant "Lune" en Portugais, Lua est interprété : on ne compile pas le code source, on le fait lire par un interpréteur, qui va alors exécuter les opérations et les algorithmes. Pensez à la programmation HTML, par exemple ; on décrit l'allure d'une page web, on modifie les couleurs et les polices… pour laisser un interpréteur (le navigateur de l'utilisateur !) afficher le résultat. Dès son origine, le format a tout de suite été adopté par l'industrie du jeu vidéo. Baldur's Gate, entre autres, en a fait une utilisation massive pour développer des scripts un peu particuliers, concernant le comportement de PNJ (Personnages non-joueurs) notamment. Mais Grand Theft Auto : Liberty City Stories en exploite également quelques-uns à partir de son UMD.
2) Sur PlayStation Portable, une version du Lua Player est maintenue par Frank Buss (Shine) et Joachim Benqtsson (Nevyn). Les possesseurs du firmware 2.60 doivent s'en tenir pour l'instant à la version 0.16 de l'interpréteur. Pour tester vos propres applications, sachez qu'il existe également une version Windows, à travers laquelle vous pourrez facilement débugger votre code source. Toujours au niveau des outils, sachez que Tristan Rybak a développé LuaIDE, une interface de développement adaptée au Lua. La coloration syntaxique est au rendez-vous, ainsi qu'un débuggeur. Ceci dit, vous pouvez tout à fait rédiger vos codes sources dans le bloc-notes, et les tester dans la version Windows de Lua avant de les transférer vers votre PSP.
3) LuaIDE, sa coloration syntaxique et son débugger
Pour bien débuter, nous allons parcourir les fonctions essentielles de Lua et mettre en place plusieurs exemples. L'objectif final de ce premier chapitre consacré à la programmation en Lua consiste à développer un petit logiciel de création graphique. Nous verrons par la suite comment créer un véritable jeu vidéo, en ajoutant des images, du son et de l'animation. Lua est un excellent moyen de se familiariser avec l'algorithmie et de comprendre les rouages essentiels d'un langage de programmation. Mais ne sous-estimez pas la complexité de la programmation, au sens général : nous bifurquerons par la suite vers le C/C++, pour réaliser des homebrews plus élaborés, compilés.
Et on commence quand ?
Avant de débuter, assurez-vous de savoir lancer des scripts Lua sur votre PSP. Téléchargez pour cela la version du Lua Player correspondant à votre firmware.
• Décompressez l'archive et transférez-la sur votre PSP, via un câble USB ou en utilisant PSP-FTPD par exemple.
• Lancez l'eLoader comme vous en avez l'habitude, et exécutez Lua Player.
• La liste des scripts et des applications s'affiche alors. Choisissez un des projets d'exemple et appuyez sur le Cercle : le programme devrait alors se lancer.
Nous allons travailler directement avec le bloc-notes. Nous allons créer un répertoire /PSPNGO dans lequel nous allons ranger notre fichier source, script.lua. Il est intéressant d'isoler d'emblée votre script dans son propre répertoire : lorsque vous ajouterez des images, de la musique, et que votre application reposera sur plusieurs bibliothèques, vous aurez réuni tous les fichiers nécessaires à son exécution.
Pour exécuter un programme Lua sous Windows, décompressez le Lua Player adapté au système d'exploitation de Microsoft, et lancez l'invite de commandes (Démarrer / Exécuter, puis saisissez "cmd" ou déroulez le menu Démarrer / Accessoires / Invite de commandes). Rendez-vous dans le répertoire où vous avez décompressé Lua Player et saisissez "luaplayer.exe script.lua".
Exécutez vos programmes avec Lua Player pour Windows !
5) Vous êtes fin prêt ? Alors, on commence !
Dans les pages qui suivent, nous allons aborder certains thèmes essentiels de la programmation. Vous n'avez pas besoin de connaissances particulières pour suivre nos exemples et les exécuter sur votre console. Dans la mesure du possible, nous détaillerons les actions exécutées et nous tâcherons de rester clair ! Ceci dit, vous aurez probablement besoin d'un glossaire informatique pour comprendre tous les rouages de la programmation.
Songez à tout ce qui peut apparaître à l'écran : des images, du texte, des valeurs numériques… Toutes ces données sont contenues dans des variables. On en fait une utilisation permanente : si vous désirez afficher un texte en vert, vous devrez tout d'abord définir cette couleur dans une première variable, avant d'appeler la fonction qui affiche du texte. Commençons d'ailleurs par ce premier exemple :
vert = Color.new(0, 255, 0)
Avec cette instruction, vous créez une nouvelle couleur, que vous stockez sous la variable "vert". Color est un type d'objet : avec le mot-clé "new", on en crée une nouvelle instance. Pensez à un fabricant de figurines ; pour réaliser des modèles, il commence par concevoir un moule. Chaque figurine usinée sera alors une nouvelle instance de ce moule d'origine. Entre parenthèses, on précise trois valeurs : elles correspondent respectivement à la quantité de rouge, de vert et de bleu. A partir de ces trois couleurs fondamentales, on peut définir tout le spectre colorimétrique. Ouvrez Paint et double-cliquez sur une couleur : sur le volet droit de la fenêtre qui s'ouvre, chaque teinte est exprimée selon sa "quantité" de rouge, de vert et de bleu, exprimée de 0 à 255. Dans notre exemple précédent, nous avons donc défini une couleur dépourvue de rouge et de bleu, mais avec du vert à 100%.
Le nom de la variable vous incombe. Par commodité, nous l'avons appelée "vert", mais vous auriez très bien pu saisir "gazon" ou "couleur". Nous y reviendrons.
Affichons maintenant du texte à l'écran. Pour cela, ajoutez la ligne suivante :
screen:print(90, 15, "Mon premier programme Lua", vert)
La fonction "screen:print" va afficher le texte passé en paramètre à l'écran. Les deux premiers nombres correspondent à l'emplacement du texte en lui-même. La PSP dispose d'un écran à la résolution de 480x272 pixels. Le premier chiffre indique la position sur l'axe des abscisses par rapport au bord gauche de l'écran. Le second chiffre correspond au décalage sur l'axe des ordonnées par rapport au haut de l'écran (reportez-vous à la figure ci-dessous). Ainsi, notre instruction va afficher le texte "Mon premier programme Lua" à 90 pixels du bord gauche et à 15 pixels du haut de l'écran. En dernier lieu, nous précisons la couleur utilisée pour afficher le texte : on reprend pour cela le nom de la variable définie précédemment (vert).
Représentez-vous l'écran de la PSP.
Mais si vous exécutez le programme, rien ne s'affiche à l'écran pour l'instant. C'est tout à fait normal : Lua dispose de deux tampons ("buffers") pour afficher des éléments à l'écran. On commence d'abord par définir un tampon hors de l'écran ("offscreen buffer"), avant de l'afficher sur le tampon présenté à l'écran ("onscreen buffer"). Cette technique est appelée le double-buffering : en préchargeant une image dans la mémoire de la console pendant qu'on en affiche une autre à l'écran, on peut intervertir l'état des deux tampons. On parvient ainsi à recréer une animation, sans avoir le moindre effet de scintillement. Nous allons donc intervertir les deux tampons :
screen.flip()
Si vous exécutez maintenant le programme, celui-ci va se clore immédiatement. Le texte sera bien affiché à l'écran, mais son apparition sera si brève que vous n'aurez pas le temps de le lire. Pour y remédier, nous devons introduire une boucle conditionnelle. Il s'agit d'une boucle while … do … end : tant qu'une condition sera remplie, on effectuera une tâche bien précise.
-- ma boucle conditionnelle
while true do
screen.waitVblankStart()
end
Nous souhaitons afficher le texte en permanence à l'écran : l'instruction while true est toujours vraie (le "littéral true" est toujours vérifié, nous n'avons pas réellement défini une condition mais plutôt un état). Ensuite, il faut considérer l'affichage sur l'écran comme un ancien tube cathodique : un rayon balaie l'écran, de haut en bas, pour afficher tous les pixels de l'image. Lorsqu'il touche le bas de l'écran, le rayon doit se repositionner en haut : il est alors désactivé le temps de l'opération et on parle de Vblank (pour Vertical Blank). Grâce à cette boucle conditionnelle, on affiche donc en permanence notre texte. Nous verrons par la suite qu'il faut profiter de ce temps d'attente pour "alterner" les deux tampons d'affichage : on crée ainsi une animation, sans le moindre scintillement. Par ailleurs, notez la première ligne des instructions suivantes : il s'agit d'un commentaire, précédé de deux traits d'union ("--"). Vous pouvez les multiplier au sein de votre code source pour clarifier votre traitement, et pour remettre les mains dans le cambouis ultérieurement.
Lua permet aussi d'inclure des blocs de commentaires, avec la syntaxe :
--[[ mon commentaire --]]
Dans ce cas, vous pouvez enchaîner des commentaires sur plusieurs lignes : le programme ne reprend la main qu'après la fermeture du "--]]".
Exécutez le programme : la phrase "Mon premier programme Lua" s'affiche en vert, en haut de l'écran.
Nous allons maintenant définir quelques variables. Lua bénéficie d'un typage dynamique : il n'est pas nécessaire de préciser le type de données que contient chaque variable. Nous allons définir les variables suivantes :
rouge = Color.new(255, 0, 0)
chiffre1 = "4"
chiffre2 = "2"
introduction = "Un petit peu de calcul"
Qu'il s'agisse de texte ou de valeurs numériques, il n'y a pas de différences au niveau de la définition des variables en Lua. Le langage va reconnaître automatiquement le type de données concernées, pour effectuer éventuellement des opérations. Après avoir défini ces quelques variables, nous allons réaliser un calcul :
-- Addition des deux chiffres
total = chiffre1 + chiffre2
-- Affichage des opérations à l'écran
screen:print(90, 15, "Mon premier programme Lua", vert)
screen:print(90, 30, introduction, rouge)
screen:print(120, 40, "Le resultat du calcul est :", vert)
screen:print(240, 50, total, rouge)
screen.flip()
while true do
screen.waitVblankStart()
end
On peut réaliser directement des opérations arithmétiques sur des valeurs numériques, à l'aide des opérateurs +, -, * ou /. Ainsi, on va additionner le contenu des deux variables chiffre1 et chiffre2. Notez qu'on a défini du texte dans la variable introduction : on l'affiche alors directement, en appelant cette variable dans la fonction screen:print.
A présent, intéressons-nous aux tableaux. Essentiels dans tous les langages de programmation, ils permettent de stocker une quantité considérable de données au sein d'un même élément, que vous pourrez parcourir librement.
monTableau = { }
monTableau = {1, 2, 3, 5, 7 }
Grâce à ces deux instructions, nous avons tout d'abord créé un tableau vide, puis nous lui avons assigné cinq valeurs. On parle aussi de cinq membres : on peut appeler n'importe quel membre en précisant sa position. Ainsi, monTableau[2] va renvoyer le deuxième membre du tableau, soit le chiffre 2. Vous pouvez d'ores et déjà imaginer le parcours de toutes les valeurs d'un tableau grâce à une boucle conditionnelle. Nous y reviendrons.
A l'inverse, sachez qu'il est possible de définir directement le membre d'un tableau. Ainsi :
monTableau = { }
monTableau[2] = "3"
On crée un nouveau tableau vierge et on place le chiffre 3 dans le second membre. Par ailleurs, contrairement à d'autres langages de programmation, les tableaux en Lua commencent à 1 : monTableau[1] révèle le premier membre (pour les autres langages, il s'agit généralement de monTableau[0]).
Mais il est également possible de définir un tableau dans un tableau :
ville = { }
ville[1] = { nom = "Nantes", habitants = "280000" }
ville[2] = { nom = "Strasbourg", habitants = "273000" }
ville[3] = { nom = "Dijon", habitants = "150000" }
Nous avons créé un tableau vide, puis nous avons rempli ses trois premiers membres avec d'autres tableaux. Nous pouvons ainsi accéder à plusieurs propriétés : ville[1].nom va renvoyer "Nantes", tandis que ville[2].habitants va renvoyer "273000".
Affichons le contenu de notre tableau à l'aide d'une boucle conditionnelle :
decalage = 15
positionY = 30
for a=1, 3 do
ordonnee = positionY+decalage
screen:print(90, ordonnee, ville[a].nom .. " " .. ville[a].habitants .. " habitants", rouge)
positionY = ordonnee
end
Ces quelques lignes méritent une explication. La boucle for … do … end permet de parcourir le tableau dans son ensemble. for a=1, 3 va faire prendre alternativement la valeur 1, 2 et 3 à la variable a. On parcourt ainsi trois fois d'affilée la boucle avant d'en sortir. A chaque fois, nous allons afficher la valeur de ville[a].nom et de ville[a].habitants : nous allons donc bien parcourir les trois valeurs définies précédemment dans le tableau. Le signe ".." sert à concaténer des chaînes en Lua, c'est-à-dire à les afficher à la suite les unes des autres. Comme nous l'avons déjà vu, nous devons préciser la position de chaque ligne de texte. Pour éviter qu'elles ne superposent, nous allons les afficher les unes en-dessous des autres. Si la position horizontale reste la même (à 90 pixels du bord gauche de l'écran), l'ordonnée doit varier. Nous avons alors défini une variable decalage en-dehors de la boucle for, ainsi que la position de départ (positionY). Chaque donnée du tableau va donc s'afficher à 15 pixels en-dessous de la précédente. Dans la fonction screen:print, les expressions entre guillemets sont à afficher telles quelles – on les utilise ici pour afficher un espace entre les variables (et pour inscrire le terme "habitants" en bout de ligne).
En guise d'exercice, essayez de calculer le nombre total d'habitants de ces trois villes réunies, pour l'afficher en bas à droite de la fenêtre.
Résumons-nous à propos des boucles conditionnelles. Jusqu'à présent, nous avons vu : La boucle while ... do ... end, qui répète une action tant qu'une condition est remplie. La boucle for ... do ... end, qui va exécuter une action pour une série de valeurs, en les incrémentant au fur et à mesure.
- Lien permanent
-
zack-62
- Posté le
1er novembre 2009 à 15:41:06

-
IV) apprendre le LUA
Pour commencer il vous faut telecharger :
- Lua IDE (contenu dans le pack psp gen)
- Lua Player V0.20 (contenu dans le pack psp gen)
- du courage...
Commencons tout de suite :
1°) dézipper Lua IDE et cliquez sur luaide.exe
2°) Pour finir l'installation dézipper LuaPlayer à la racine de votre ms, j'ai pris soin de repackager cette version pour qu'elle atterisse directement dans les bons dossiers.
__________________________________________________
____
Pour que vos applications soient lues avec lua player, vous devez créer un dossier comme "hello" dans le dossier "Applications" mais n'oubliez pas de renommez votre fichier .lua en index.lua
Commencons, nous allons faire une application simple tel que un helloworld .
Revennez sur la fenêtre de LuaIDE et tapez
Code: rouge = Color.new (255,0,0)
Nous venons de créer une référence "rouge". ( Si vous ne comprenez pas restez zen on y arrive ).
N'oubliez pas de mettre la majuscule à Color sinon un joli message d'erreur apparaitra lors de l'éxécution !
Et le code couleur RVB du rouge est 255,0,0 .
Pour faire du vert ou du bleu : 0,255,0 ( vert ) et 0,0,255 pour du bleu.
Pour avoir de nouvelles couleurs, démarrez paint, cliquez sur couleur puis sur modifier les couleurs, vous arrivez à la palette des couleurs, cliquez sur Définir les couleurs personnalisées, choississez une couleur et regardez les chiffres devant les lettres R, V, B .
Exemple pour du jaune :
Une fois cela fait, nous allons définir une nouvelle variable :
Code: text = "Say Hello World ^^"
Et pour finir, tapez :
Code: screen:print (150,100,text,rouge)
Pour l'explication, screen:print est la fonction pour afficher quelquechose sur votre écran, c'est l'équivalent de l'echo sur php ou autre ! 150,100 = X-Y, c'est à dire les coordonées du texte, et text,rouge sont les deux variables citées plus haut. N'oubliez surtout pas : le texte avant la couleur !
Donc sur votre LuaIDE :
Code: -- La couleur :
rouge = Color.new (255,0,0)
-- Le Texte :
text = "Say Hello World ^^"
-- La commande d'affichage
screen:print (150,100,text,rouge)
A ce moment là, si vous testé sur votre PSP, rien ne s'affiche, c'est normal, pour que votre texte s'affiche voici le code complet :
Code:
-- La couleur :
rouge = Color.new (255,0,0)
-- Le Texte :
text = "Say Hello World ^^"
while true do
-- La commande d'affichage
screen:print (150,100,text,rouge)
screen.flip()
screen.waitVblankStart()
end
Pour exécuter du code lua sur votre PC, rien de plus simple, de-zippez l'archive, et enregistrez votre .lua dans le dossier luaplayerwindows, clic droit sur le fichier test.cmd puis modifier.
Vous arrivez sur une fenêtre du bloc-notes, il vous suffit de modifier le nom du fichier à la fin de la ligne pour qu'il corresponde à votre fichier lua !
Et pour finir, placez votre fichier .lua dans le dossier "Applications" sur votre PSP en n'oubliant pas de le renommez en index.lua
- Lien permanent
-
zack-62
- Posté le
1er novembre 2009 à 15:42:48

-
calimero
pourquoi m'a tu donné le lien ?
- Lien permanent
-
zack-62
- Posté le
2 novembre 2009 à 15:40:19

-
genre je sais pas
- Lien permanent
-
zack-62
- Posté le
8 novembre 2009 à 17:00:05

-
un petit
pour un topic qui peu servir (moi grace a ces articles trouvé ici et ailleurs j'ai réalisé mon premier jeu en lua!!! (un doom))
- Lien permanent
Sujet : « [guide] vos premiers pas ... »