Développer un homebrew sur PSP

Le LUA

Présentation du langage

LUA

Le LUA est un langage de script qui a été créé en 1993, et a déjà été utilisé dans de nombreux jeux commerciaux comme par exemple dans Far Cry de Crytek. Je vais rapidement présenter quelques points importants sur le fonctionnement du langage.

Ce langage a l'avantage de pouvoir utiliser indifféremment des scripts en mode texte ou des scripts compilés. Les scripts compilés en Lua ne sont plus lisibles par l'utilisateur, et permettent un temps de chargement plus rapide, mais, par contre, l'exécution n'est pas plus rapide étant donné que c'est le même moteur de scripts qui tourne par derrière. En fait, la compilation des scripts ne fait que créer la structure du programme directement pour que Lua puisse l'utiliser, et sauvegarde le résultat dans un fichier. Ainsi, lors du chargement du script compilé, Lua n'a plus à faire l'analyse et peut donc immédiatement l'utiliser, ce qui accélère les temps de chargements.

De nombreux moteurs de jeux utilisent un langage de scripts à plusieurs niveaux du déroulement du programme. On peut se demander quels sont les avantages à utiliser un langage de scripts au lieu de tout programmer directement en C dans son moteur de jeu. Ces avantages sont multiples, en voici quelques uns.

Un problème apparaît quand un projet commence à prendre de l'ampleur : les temps de compilations peuvent devenir de plus en plus importants, allant de plusieurs minutes lorsqu'on ne recompile qu'une partie du projet à plusieurs dizaines de minutes, voire même plusieurs heures pour les très gros projets, lorsqu'on doit recompiler tout le projet. Ces temps de compilation font perdre un temps précieux, surtout lorsqu'on est en phase de mise au point et que le changement d'une variable fait perdre dix minutes... Sur ce point, les langages de scripts on l'avantage d'être évalué à l'exécution, il n'y a donc pas de temps de compilation, et on gagne donc du temps pour tous les problèmes de mise au point.

Un autre problème est que les développeurs de jeux vidéo ne sont pas tous des programmeurs. Il y a des graphistes, des level designers et autres qui peuvent être appelés à devoir changer le comportement du jeu pour mieux correspondre aux objectifs visés. N'ayant pas forcément de notions avancées de la programmation, il faut pouvoir leur donner la possibilité d'effectuer ces changements sans pour autant savoir ce qu'est un pointeur, une allocation mémoire ou autre. Les langages de scripts ont donc généralement une syntaxe simple et se limitent à des paradigmes de programmation connus, permettant ainsi une programmation plus simple à appréhender. De plus, ces langages gèrent généralement la mémoire eux même avec, par exemple, un ramasse-miettes (garbage collector en anglais) pour le LUA.

Un autre point qui peut pousser à l'utilisation de langages de scripts vient des mods. En effet, on peut vouloir proposer à l'utilisateur de faire ses propres modifications du jeu sans pour autant lui donner tout le code source. Pour cela, on peut mettre en place des systèmes basés sur l'utilisation de bibliothèques dynamiques comme dans les derniers moteurs d'ID software, mais on peut aussi réaliser un système ou le moteur du jeu est dirigé par des scripts facilement modifiables par l'utilisateur. L'avantage des scripts par rapport aux DLL est qu'il n'y a pas besoin d'avoir un compilateur sous la main pour pouvoir réaliser son mod. Ceci permet une plus grande ouverture aux utilisateurs.

Malgré ces avantages, l'utilisation de scripts a aussi des inconvénients. Les scripts sont plus lents que du code compilé, ce qui oblige à bien choisir quelles parties du programme seront réalisées en code natif et quelles seront celles réalisées dans le langage de scripts. Ainsi, on réalisera certainement les algorithmes de recherches de chemins en C, mais on donnera la possibilité à l'utilisateur d'exploiter les résultats dans les scripts.

Un autre problème est que les scripts sont généralement stockés en mode texte directement lisible par l'utilisateur. Si ceci permet une modification plus facile, ça permet aussi aux petits malins de changer le comportement du jeu pour réaliser des exploits ou prendre l'avantage durant une partie réseau. Néanmoins, certains langages de scripts permettent de pré- compiler les scripts, comme c'est le cas de celui que nous allons utiliser.