# Micro Lua DS

Micro Lua DS est une implémentation aujourd'hui open-source pour la Nintendo DS du langage de programmation Lua de la même manière que celle qui existe pour la PSP avec Lua Player. Elle se base sur la bibliothèque de dessin conçue par Brunni, la µLibrary, dont elle tire par ailleurs son nom.

## Historique
### Développement

Micro Lua est un projet initialement développé par Risike à partir de septembre 2008. Le 9 juillet 2009, celui-ci rend son travail open source, ne souhaitant plus continuer le développement. Micro Lua est alors repris par la communauté.
Il est à noter que le projet de la µLibrary a été abandonné par Brunni au moins à partir de la fin de l'année 2010, c'est pourquoi MicroLua maintient sa propre version.
Courant juin 2013, la gestion du projet est transférée de GoogleCode à SourceForge, amenant une réflexion sur la direction à prendre et posant plus clairement les objectifs du développement de Micro Lua.

### Versions

Seules les versions majeures sont répertoriées ici. Toutes les révisions sont disponibles sur le dépôt SourceForge de Micro Lua.
| 1.0 bêta | Première version |
| 1.0.1 | Correction de bug mineure à propos de la gestion des exceptions |
| 2.0 bêta | Nombreuses améliorations de performance, gestion native des fichiers INI et amélioration de la gestion des exceptions |
| 2.0 bêta 2 | Correction d'un exemple |
| 3.0 pre-release | Cette version destinée aux membres du forum apporte, outre de nombreuses corrections de bugs, le support du Wifi et des fonctionnalités rumble ("vibration") et motion ("mouvement"), et une meilleure implémentation du son. |
| 3.0 finale | Version publique de la 3.0, corrige quelques bugs par rapport à la pre-release |
| 4.0 | Amélioration de la gestion de la mémoire et du Wifi, ajouts aux capacités de dessin (couche alpha), accès aux informations stockées dans la console |
| 4.1 | Modification du système de la transparence alpha, diverses corrections de bugs, changement du logo de l'exécutable DS |
| 4.2 | Changements dans les constantes ; constitue une version finale après les diverses versions bêta de la 4.1 |
| 4.5 | Ajoute les fonctionnalités du Nifi (connexion DS à DS directe), change le shell officiel |
| 4.6 | Donne le contrôle du clignotement de la DEL et améliore le mode de débogage et l'affichage des écrans d'erreur |
| 4.7 | Intégration de l'Embedded File System, correction du bug de l'heure des 3DS, nombreuses améliorations sous-jacentes |

### À venir

Le projet latent des améliorations de MicroLua est de compléter l'éventail des fonctionnalités, notamment par l'ajout du microphone ou la lecture de fichiers audio dans des formats plus courants. D'un point de vue technique, l'idée a été émise de faire évoluer la syntaxe générale vers une orientation objet (à l'exemple de la gestion de Timers ou des Sprites). Il est aussi prévu de migrer l'ensemble du code de l'interpréteur en C (actuellement, une partie des fonctionnalités est codée en Lua).
L'utilisation du middleware LuaJIT est envisagée, afin d'améliorer significativement les performances du langage Lua.

## Syntaxe générale

Micro Lua se basant sur le langage Lua, il ne sera détaillé ici que des exemples d'utilisation de Micro Lua. De plus, ces informations ne sont pas exhaustives; l'API complète peut être trouvée ici.

### Hello world

L'ensemble de la boucle, de la fonction Controls.read et render constitue la structure de base d'un code avec Micro Lua.

### Affichage de formes primaires
#### Lignes

Micro Lua définit un type personnalisé servant à stocker une information de couleur : le type Color.

#### Rectangles

Les coordonnées indiquées sont respectivement celles du coin supérieur gauche et du coin inférieur droit.

### Images

Micro Lua, tout comme la µLibrary, distingue les deux mémoires générales de la Nintendo DS : la mémoire vidéo, désignée par VRAM, et la mémoire principale, qui correspond à RAM. Les images peuvent être chargées indifféremment dans l'une ou l'autre des mémoires, mais l'affichage depuis la VRAM est plus efficace. Micro Lua supporte les types GIF, PNG et JP(E)G.

### Contrôles

La gestion des contrôles se fait via des conditions sur les variables suivantes :
* Pour le stylet :
** Stylus.X et Stylus.Y : coordonnées du Stylet
** Stylus.held : état appuyé sur l'écran du stylet
** Stylus.released : état relâché du stylet
** Stylus.newPress : vaut true si le stylet effectue une nouvelle pression
** Stylus.doubleClick : vaut true si le stylet effectue un double-clic
** Stylus.deltaX et Stylus.deltaY : delta X et Y (accroissement de X et de Y) du mouvement du stylet
* Pour les boutons :
** Trois états pouvant être testés pour chaque bouton : held, released et newPress
** Les boutons sont désignés par A, B, X, Y, L, R, Start, Select, Up, Down, Left, Right
** Les variables sur les boutons sont des compositions à partir des états et des noms des boutons répondant à ce modèle : Keys.<état>.<bouton>

## Fonctionnalités

Outre les dessins et la gestion des contrôles vus ci-dessus, Micro Lua intègre de nombreuses autres fonctionnalités :
* des Timers ("chronomètres")
* un système complet de sprites
* un système complet de maps ("cartes") et son équivalent plus rapide mais moins souple de scrollmaps. Les maps sont des assemblages de tiles ("tuiles") permettant la réalisation d'environnements modifiables comme pour des jeux de rôle
* un système de débogage
* un ensemble complet de fonctions de gestion des fichiers présents sur le linker (via la libfat)
* un système de "canevas", équivalent à l'affichage classique mais plus rapide et performant, bien que moins souple
* le support (pour les linkers compatibles) des fonctionnalités de rumble et de motion
* la gestion du temps et de la date
* la gestion du Wifi
* la gestion du Nifi (Connexion DS à DS)
* le support du son (uniquement par des fichiers MOD ou WAV)
* la gestion des fichiers de configuration INI
* l'accès aux informations stockées sur la console