Documentation de GBA Graphics

# Bienvenue sur le manuel de GBA Graphics!

Ce programme vous permet de convertir vos graphismes pour les utiliser sur votre Game Boy Advance.
Vous pouvez trouver la dernière version sur mon site ou dans le topic où je l'ai lancé sur le forum de playeradvance

Ce manuel aurait besoin d'être traduit en anglais. Malheureusement, je n'ai pas les connaissances nécessaires pour cela. Si vous voulez vous proposer pour le faire, n'hésitez pas! Vous pouvez m'envoyer un e-mail. Merci d'avance ;-)

# Quoi de neuf?

Cette version (0.99) est une amélioration très importante du logiciel, notamment grâce à une interface entièrement refaite, la possibilité de faire presque tout sans script, la réécriture des parties de l'application qui n'étaient pas optimales, et un nombre important de nouvelles fonctions. Pour avoir une idée des nouveautés de cette version ainsi que des précédentes, vous pouvez jeter un coup d'oeil au fichier quoi de neuf.txt, inclus avec le programme.

# A propos de ce manuel

Le document que vous tenez sous les yeux à cet instant présent est une version réécrite de la documentation de base. Elle couvre les nouvelles fonctionnalités graphiques, mais pas le script ni les commandes qui ont été ajoutées entre deux, car le script n'est plus vraiment essentiel, et les commandes ajoutées sont générées par le programme lui-même; vous n'avez donc pas à vous en occuper. Néanmoins, vous avez toujours accès à la documentation des précédentes versions qui est toujours dans le répertoire distribué (ancienne_doc_0.98.htm).

# Comment débuter

Le programme est constitué d'un simple fichier .exe, et ne requiert donc pas d'installation. Vous pouvez même le distribuer avec vos projets, pour peu que le présent fichier soit inclus. Cependant, GBA Graphics génère des fichiers projet (extension .pgg), qui sont utilisés pour sauvegarder vos projets ainsi que les paramètres du programme. Ces fichiers devraient être associés avec GBA Graphics, de manière à ce que vous puissiez les ouvrir directement. Pour cela, double-cliquez sur l'un d'eux et choisissez "Ouvrir avec", puis "Parcourir...", et sélectionnez l'exécutable (GBA Graphics.exe).
Si vous êtes un utilisateur expérimenté, vous pouvez également ajouter la possibilité d'ouvrir les projets GBA Graphics avec le bloc-notes pour pouvoir les modifier à la main.

## Création d'un nouveau projet

Lorsque vous débutez un projet, il convient de bien réfléchir à la structure des répertoires que vous allez mettre en place, sinon cela deviendra rapidement très difficile à gérer. Voici quelques conseils:

* Ne mélangez pas les fichiers source (.c) avec les fichiers graphiques. Créez de préférence un dossier, par exemple "Res", qui sera la racine de tous vos fichiers graphiques.
* Triez de préférence les types de données, en créant par exemple un dossier "Palettes", un dossier "Maps", etc. C'est un peu fastidieux, mais cela vous permettra de mieux vous y retrouver, et ce sera plus pratique si vous utilisez un même élément à plusieurs endroits différents.

Voici un exemple de structure de répertoires. Mais vous n'êtes pas obligé de faire pareil:

    Projets GBA\
        Mario\
           Res\
                Original\
                    niveau1.png
                Palettes\
                    niveau1.pal.c
                Maps\
                    niveau1.map.c
                Tiles\
                    niveau1.til.c
                Listes\
                    niveau1.lst.c
                aide.htm
                Mario.pgg
            Mario.vhw
            Mario.c
            Makefile
            ...

Pour démarrer un nouveau projet, vous devez créer un fichier .pgg vide, dans un dossier proche de vos graphismes. Pour cela, dans l'explorateur de fichier, cliquez avec le bouton droit, choisissez "Nouveau", puis "Document texte". Renommez le fichier, et donnez-lui l'extension .pgg. Si vous ne voyez pas l'extension ("Nouveau Document Texte.txt"), allez dans le menu "Outils", puis "Options des dossiers". Sur l'onglet "Affichage", désactivez la coche "Masquer les extensions dont le type est connu" et cliquez sur Ok. Vous pouvez à présent modifier l'extension de votre document texte. Acceptez l'éventuel avertissement qui vous demande si vous souhaitez vraiment modifier l'extension.

Dès à présent, vous pouvez double-cliquer sur le fichier projet (vide), ce qui l'ouvrira avec GBA Graphics pour autant que vous ayez respecté la procédure décrite plus haut.

# Utilisation

## L'interface

Ce n'est pas très compliqué à comprendre. Mais voici une petite description; A gauche se trouve votre projet, incluant les jeux de mosaïques, cartes et autres éléments.
Pour ouvrir un menu, cliquez sur le plus situé à sa gauche. Si vous sélectionnez un élément à la racine de votre projet (par exemple Cartes), un formulaire apparaîtra à droite, et vous permettra de paramétrer le nouvel élément à ajouter. Une fois que vous l'avez rempli, cliquez sur Ok ou appuyez sur Entrée pour valider.

## Formats de fichier supportés

Les conversions sont réalisées à partir de fichiers images, dont les types peuvent être les suivants:

-BMP: Les bonnes vieilles bitmaps sont toujours supportées, mais pas recommandées à cause de leur taille très élevée.
-PNG: Ce format est recommandé car il offre un taux de compression très efficace sur les graphismes GBA, tout en n'altérant pas l'image.
-JPG: Ce format est hautement déconseillé, car il entraîne une altération de l'image, et une reproduction imprécise.
-GIF: L'intérêt d'utiliser ce type de fichiers est limité.
-TIF: Dépend des cas, à tester.
Notes importantes:
- La couleur transparente des fichiers bitmap/png n'est pas prise en compte. Quoi qu'il arrive, GBA Graphics utilise toujours la couleur spécifiée dans les options de conversion pour cela.
- Les GIF animés ne sont évidemment pas gérés, et seront rendus comme une seule image.
- Le support pour les fichiers autres que BMP requiert l'installation de la librairie GDI+.

## Conversion de mosaïques

Faites un petit tour des différents types d'élément que vous pouvez créer et utiliser avec ce programme. Après cela, nous allons effectuer notre première conversion: celle d'une image en mosaïques, dûment accompagnées d'une palette et d'une map.
Pour cela, munissez-vous d'une image (d'une petite taille, genre 256x256). Ensuite, ouvrez GBA Graphics et sélectionnez dans l'arbre l'objet Mosaïques à la racine. Sur le côté droit de la fenêtre, vous verrez un formulaire demandant les noms de fichiers et options. Pour commencer, cliquez sur le premier bouton parcourir depuis le haut, et sélectionnez le fichier bitmap à convertir (qui devrait logiquement être le seul à être immédiatement proposé si vous avez suivi la procédure ci-dessus). Les trois autres champs en dessous sont automatiquement remplis. Normalement, vous ne devriez pas avoir besoin de les modifier, sauf pour spécifier un dossier différent. D'une manière générale, la modification d'un élément affecte en conséquence tous ceux qui se trouvent vers le bas, mais pas l'inverse. Faisons maintenant un petit tour des options disponibles:

-Choisissez le type de map (texte, rotation ou étendu). Le plus souvent, vous utiliserez le type texte (16 bits). Le type rotation code chacun des blocs de la map sur 8 bits, et le type étendu sur 32 bits (ce qui est en général inutile sur GBA).
-Vous pouvez choisir d'ajouter le résultat à une palette et un tileset existant, ou d'en créer de nouveaux.
-Vous pouvez choisir si vous voulez générer un map ou non (pour l'exemple, choisissez oui)
-Choisir entre le mode de couleur 4 bits (16 couleurs), 8 bits (256 couleurs) ou 15 bits (32768 couleurs). Le mode 15 bits ne génère aucune palette.
-Choisir le nombre de couleurs maximal à utiliser pour la conversion (surtout utile si vous fusionnez plusieurs palette à l'aide de l'option Palette existante ci-dessus)
-Choisir si vous voulez optimiser le tileset en groupant les mosaïques identiques. Le groupage sera effectué en fonction du format de mosaïques défini à droite (8x8, 16x16, 32x32, personnalisé).

Une fois vos choix effectués, cliquez sur Ok ou appuyez sur la touche Enter. Des éventuels avertissements quant à la conversion des couleurs ou la taille pourront apparaître. Vous pouvez à ce moment annuler la conversion en cliquant sur Annuler ou continuer en cliquant sur Ok (ici, n'annulez pas).
Lorsque la conversion sera terminée, trois éléments se seront ajoutés à votre projet: un jeu de mosaïques, une palette et une map.

## Visualisation du projet

Vous pouvez visualiser tous les éléments de votre projet classés dans l'arbre situé sur la gauche de la fenêtre du programme. Simplement, cliquez sur le + à la gauche de chacun des dossiers pour voir ce qu'il contient. Si vous ne voyez pas de +, cela signifie que le dossier est vide. Vous pouvez ensuite sélectionner les éléments un à un et les visualiser.

## Menu contextuel

Si vous cliquez avec le bouton droit sur un élément du projet, un menu s'ouvrira. Il vous permet d'effectuer les opérations suivantes:

- Voir le code: Permet d'afficher le contenu du fichier.
- Editer: Pour une map, l'ouvre directement dans l'éditeur afin de la modifier.
- Fichier base: Ouvre le fichier de base associé à l'élément. Par défaut ce fichier est simplement la bitmap source (qui a été utilisée pour la conversion).
- Dupliquer: Copie l'élément. Vous devez choisir un nouveau nom et appuyer sur Enter pour confirmer et Escape pour annuler. Lorsqu'un élément est dupliqué, le fichier est également copié et son nouveau nom est celui que vous aurez choisi pour l'élément dupliqué. Il aura la même extension, et sera dans le même dossier que celui de base.
- Renommer: Permet de renommer l'élément. Cela ne modifie pas le nom du fichier de base.
- Supprimer: Permet de supprimer le fichier. Si vous choisissez de supprimer définitivement le fichier, il sera tout de même placé dans la corbeille, histoire d'éviter la perte de données.
- Propriétés: Affiche et permet de modifier les propriétés de l'objet. Voir plus bas.

## Propriétés d'un élément

La boîte "Propriétés d'un élément" permet d'afficher et de modifier toutes les informations relatives à un élément du projet. Veuillez noter que ces éléments sont toujours virtuels; ils n'existent pas réellement sur le disque, mais désignent les fichiers avec lesquels ils sont associés. Ils peuvent donc être modifiés sans affecter le fichier réel.

- Nom de fichier: Ceci est le nom de fichier désigné par l'élément. Cliquez sur le bouton ... à sa droite pour parcourir les dossiers. Si vous choisissez un autre fichier, le programme utilisera celui-là, et vous demandera si vous voulez effacer le fichier anciennement associé (pour peu évidemment qu'il existe et qu'il ne soit pas utilisé par un autre élément du projet). Si vous choisissez un nouveau nom de fichier (qui n'existe pas encore), le fichier sera renommé. Mais s'il est utilisé par un autre élément, il sera copié vers le nouveau nom, et l'autre restera intact.
- Fichier de base: Vous pouvez assigner n'importe quel fichier. Celui-ci sera ouvert lorsque vous choisirez "Fichier base" dans le menu contextuel de l'élément.
- Nom court: Le nom à l'intérieur du projet. Limité à 30 caractères.
- Dossier: Vous permet de choisir un autre dossier où placer l'élément. Une alternative au glisser-déposer de l'élément dans le nouveau dossier.
- Type d'élément: Vous permet de redéfinir le type de fichier, au cas où le logiciel se serait trompé.

## Barre de menu standard

Cette barre de menus vous permet d'effectuer les opérations communes à la plupart des programmes.

*** Fichier ***
- Nouveau: Crée un nouveau projet vide.
- Ouvrir: Permet d'ouvrir un projet.
- Enregistrer: Enregistre le projet.
- Enregistrer sous: Propose d'enregistrer le projet sous un autre nom.
- Formats de fichier: Ouvre une boîte de dialogue permettant de choisir le format de fichiers personnalisé actif. Voir le chapitre correspondant.
- Ajouter dossier: Permet d'ajouter un dossier virtuel au projet. Voir le chapitre correspondant
- Quitter sans sauver: Par défaut, le programme sauve les modifications (si vous cliquez sur la croix ou appuyez sur Alt+F4 pour le fermer). Ceci vous permet d'annuler les modifications effectuées au projet. Toutefois, les modifications apportées aux fichiers physiques du projet (maps par exemple) sont définitives.
*** Edition ***
- Copier l'aperçu: Si vous sélectionnez un élément, il sera affiché sur la zone d'aperçu. Vous pouvez copier cet aperçu dans le presse-papiers. Notez que pour que cela réussisse, vous devez avoir paramétré l'affichage en 24 bits minimum, sinon vous risquez de perdre des informations, dont surtout la couleur transparente, qui se doit d'être très précise.
- Exporter (image): Permet d'enregistrer l'image de l'aperçu dans un fichier BMP/PNG/TIF, etc.
*** Affichage ***
- Actualiser l'arbre: Met à jour l'arbre du projet.
*** Outils ***
- Invite de script: Affiche une fenêtre vous permettant d'exécuter rapidement une ou plusieurs lignes de script (appuyez sur Ctrl+Enter pour effectuer un retour chariot).
- Options...: Affiche le menu des options générales.
*** Procédures ***
Ce menu affiche les procédures que vous avez définies dans le fichier de script, afin de pouvoir rapidement exécuter des tâches automatisées.
*** Aide ***
- Documentation: Affiche le contenu du fichier Aide.htm.
- Aide perso: Affiche un fichier d'aide personnel. Par défaut, il se nomme lisezmoi.htm, mais il est possible de le redéfinir en modifiant la ligne AidePerso = "lisezmoi.htm" dans le fichier projet.
- A propos de...: Affiche les informations générales sur le programme.

# Options générales du programmes

Le menu d'options affiche, triés par onglets, une série de paramètres que vous pouvez redéfinir. Ces paramètres étaient autrefois réglés en utilisant du script. Ce n'est désormais plus nécessaire, à part pour certaines commandes complètement inutiles aujourd'hui. Pour l'ouvrir, cliquez sur Outils, puis Options...

Onglet général

- Nbre. élém. max. liste: Permet de définir le nombre maximal d'éléments par liste d'objets. Voir le chapitre Listes d'objets.
- Sauver les paramètres des maps: Par défaut, lorsque vous enregistrez les maps ouvertes avec l'éditeur, un fichier contenant tous les paramètres de l'éditeur à ce moment-là est créé. Décochez-la pour éviter la création de ce fichier. Cela n'empêchera toutefois pas le chargement du fichier s'il existe. Pour le supprimer, cliquez sur le bouton "Réinitialiser" après avoir sélectionné une map.
- Sauvegarde automatique: Définit si la sauvegarde est réalisée dans tous les cas, ou seulement lors d'une sauvegarde du fichier.
- Modèle par déafut: Permet de choisir le modèle par défaut qui sera proposé à la création d'une liste. Veuillez vous reporter à la section Listes d'objets pour plus d'informations.
- Timer éditeur: Permet de régler l'intervalle de rafraîchissement de l'éditeur en millisecondes. Plus ce temps est bas, plus l'affichage sera fluide (dans la mesure où votre processeur arrive à suivre, bien entendu), mais plus la charge processeur sera élevée. Cela peut poser problème sur certains PC portables particulièrement mal équipés, à cause de la chaleur qui peut le faire planter. La valeur limite de l'usabilité du logiciel est d'environ 200.
- Mémoire max. aperçus: Permet de limiter la mémoire utilisée pour le rendu d'un aperçu, car si vous affichez par exemple une très grosses map, cela peut être beaucoup trop lent.
- Déterminer le format de fichier automatiquement: Il s'agit d'une nouvelle fonctionnalité qui détecte automatiquement le format d'un fichier en fonction de son extension. Voir Définition de formats personnalisés.

Onglet conversion

Cet onglet permet de configurer toutes sortes d'options qui seront utiles à la conversion des images. Vous pouvez notemment choisir la couleur transparente et modifier la luminosité, ce qui est un point non négligeable, surtout sur GBA! ;-)

A la base, cette fonction était prévue pour être utilisée à partir du script, et si vous vous y mettez, vous verrez qu'il y a encore plus de possibilités! Toutes ces options ont donc leur équivalent en script comme sera décrit plus bas.

-Couleur transparente: Vous permet de choisir la couleur qui sera traitée comme transparente dans l'image que vous convertissez. Par défaut, il s'agit d'un rose violacé qui n'est pour ainsi dire jamais utilisé dans les images: RGB(255,0,254). Il suffit de cliquer sur le carré coloré et choisir ensuite une couleur dans la liste (vous pouvez également y entrer les composantes de rouge/vert/bleu vous-même).
-Correction gamma: Permet de corriger la courbe de luminosité (qui n'est pas linéaire à la base, ce qui explique pourquoi il est si dur d'avoir un écran dont la luminosité est sans défaut). C'est une méthode très efficace pour augmenter la luminosité.
-Addition (de blanc): Ajoute la valeur suivante à chaque couleur. Le résultat est généralement inférieur à celui donné par la correction gamma, en revanche il donne un bel effet sur GBA SP.
Note: N'oubliez pas qu'additionner une couleur négative revient à la soustraire, et donc à la rendre plus foncée. Les couleurs sont plafonnées en haut et en bas lors de ces opérations.
-Vers le blanc: Effectue une moyenne entre la couleur en question et le blanc (avec un coefficient différent pour les deux couleurs: x et 255-x). Les couleurs sont donc ramenées linéairement vers le blanc. Contrairement à ce que l'on pourrait penser, cet effet n'est pas très efficace lorsqu'il s'agit d'augmenter la luminosité, en revanche, il est très bon pour la diminuer, et en choisissant des coefficients différents pour les canaux de rouge/vert/bleu, vous pouvez créer d'excellents effets de couleurs. Mais pour cela, il faut utiliser le script.
Note: Si vous mettez des valeurs négatives, GBA Graphics effectuera une moyenne avec le noir et non le blanc.
-Nuances de couleurs: Permet de choisir le nombre de nuances qui seront utilisées pour chacun des canaux de rouge/vert/bleu. Sur GBA, on a 32 nuances pour chaque canal, soit 32^3 = 32768 couleurs. Vous pouvez diminuer cette valeur pour arrondir les couleurs ou pour en économiser. C'est utile si vous utilisez par exemple des graphismes de NES (4 tons), de Mega Drive (8 tons) mais ça n'a clairement aucun sens si vous créez vos propres graphismes.
-Méthode de conversion: Vu la médiocrité de mon algorithme de réduction de couleurs, j'ai tenté d'en implémenter un autre en suivant des docs cette fois :-) Et j'ai également fourni un dithering fait automatiquement par Windows en mode "halftone". Voyons les caractéristiques des différentes méthodes:
--Standard: C'est ma méthode, elle permet en plus des autres d'ajouter les couleurs à une palette tout en conservant les couleurs déjà existantes et en les utilisant si besoin est.
--Tramé: Méthode rendue par Windows (= peut ne pas marcher si votre version de Windows n'est pas suffisemment récente). La palette utilisée est standard à Windows, et vous ne pouvez pas ajouter à une palette déjà existante. La taille de la palette créée est toujours 256 couleurs.
--Optimal: Deuxième implémentation de ma réduction de couleurs, beaucoup plus efficace et rapide, mais qui dispose d'une fonctionnalité en moins; si vous mettez "palette existante", il ajoutera bien à la palette, mais ne pourra pas se servir des couleurs déjà existantes (car il serait censé pouvoir les modifier mais en fait là ce n'est pas possible). C'est pourquoi cette méthode n'est pas proposée par défaut.

Je ne sais pas si cela vous sera utile, mais la formule utilisée pour calculer la valeur de chacune des composantes de chaque pixel est la suivante (chacun des facteurs alpha/gamma/addition ont trois canaux: rouge/vert/bleu):
couleur= (int)max(min(((int)(((min(Alpha,0))+(255-ABS(Alpha))*((255.0*pow((valeur/255.0),Gamma))+Addition)/255+0.5)/(256.0/(nuances+1))))*(31.0/nuances),31),0)

Comme je l'ai précisé plus haut, vous pouvez effectuer la même chose (et même mieux) avec le script si vous êtes un utilisateur expérimenté. Pour cela, ouvrez l'invite de script (menu outils) et entrez la commande désirée. Voici quelques exemples de commandes réglant les effets de luminosité:

Effets gamma=1.6 add=RGB(20,0,40)
Effets alpha=-10
Effets gamma=RGB(1.0, 1.1, 1.2) add=RGB(20,40,60) alpha=RGB(50%,30%,80%)

Cela permet de définir des valeurs différentes pour chacun des canaux Rouge Vert Bleu (RGB).
Attention: Ceci n'est qu'un exemple, ne le copiez pas tel quel ou vos prochaines conversions seront vraiment horribles! Vous pouvez réinitialiser les paramètres depuis le menu outils, options.

Si vous cliquez sur le bouton "Avancé >>", de nouvelles fonctions vont s'afficher.

-Appliquer l'effet nuances avant les autres: Contrôle si les effets de nuances sont appliqués avant ou après les autres (gamma et cie). Cela définit donc si les couleurs seront arrondies avant ou après être traitées. Sur PC, la valeur max est 255, sur GBA 31. En divisant par huit (si 32 nuances sélectionnées), on trouve 31 mais on perd de la précision puisque 31*8=248 et non 255 (c'est le cas extrême). Mais c'est utile si vous avez par exemple des graphismes de Mega drive provenant de plusieurs sources; si les couleurs ne sont pas exactement les mêmes, le résultat risque d'être erroné si vous modifiez le gamma (qui rapproche ou éloigne les couleurs).
Exemple: 2 teintes, 128 (venant d'un prog) et 132 (venant de l'ému) sont supposées identiques car 128/8 = 132/8 = 16. Mais en augmentant le gamma (1.6), cela donne 165 et 168. 165/8 = 20 et 168/8 = 21. Deux couleurs seront créées au lieu d'une, des optimisations de tileset disparaitront, ainsi tous les blocs de maps seront décalés -> problème. En appliquant d'abord l'effet nuances, 128 et 132 sont vraiment identiques, quel que soit le gamma. Mais décochez cette case si vous n'utilisez que vos propres graphismes.
-Tronquer les valeurs à l'entier: Effectue une perte de précision. 1.6 par exemple, serait arrondi à 2 normalement. Si cette option est activée, 1.6 serait arrondi à 1.
-Toujours remplir les palettes: Par exemple, si la conversion ne produit que 10 couleurs, et que vous en avez demandé 16, les 6 autres seront automatiquement complétées afin de remplir les 16.
-Précision maximale: Paramètre propre au mode de conversion standard. Si vous n'arrivez pas à convertir votre image car elle contient trop de couleurs différentes, vous pouvez augmenter cette valeur, mais le temps de conversion sera beaucoup plus long.

Onglet modèles

Cet onglet permet de configurer les modèles de listes d'objets. Voir le chapitre Listes d'objets, plus bas dans ce document.

# L'éditeur de maps

GBA Graphics inclut un éditeur de cartes assez complet et puissant, à utiliser comme éditeur de niveaux universel à défaut de pouvoir en faire un vous-même pour votre jeu.

Tout d'abord, créez une image dont les mosaïques de la taille voulue seront placées à la verticale. Par exemple une image qui contient 5 mosaïques de 16x16 fera 16 pixels de largeur et 80 pixels de hauteur. Mais vous pouvez également les placer à l'horizontale et faire plusieurs lignes (par exemple 8 mosaïques par ligne et 4 lignes -> 32 mosaïques).
Convertissez-la ensuite en utilisant la procédure de conversion de mosaïques décrite ci-dessus.
Juste à côté de la case "Optimiser le tileset", choisissez la taille de chacune de vos mosaïques dans l'image (par exemple 16x16), ou 8x8 pour un plan standard, etc.
Si vous utilisez des mosaïques plus grandes, il vous faudra les assembler avant de pouvoir les afficher sur GBA. Une mosaïque de 16x16 est composée de 4 mosaïques de 8x8, placées comme suit:

    0 1
    2 3

Réglez également si vous voulez générer votre tileset en 16 couleurs et le nombre de couleurs maximal disponibles.
Finalement, cliquez sur Ok. Les éléments seront ajoutés au projet. Maintenant sélectionnez Cartes dans votre projet. Entrez le nom du fichier map que vous allez utiliser, par exemple Niveau01.map.c.

Sélectionnez le tileset, la palette et la taille des blocs à utiliser. Vous pouvez déjà spécifier une taille à votre tableau (elle sera modifiable par après). Cliquez sur Ok, la nouvelle map sera ajoutée au projet.
Ouvrez le menu Cartes et choisissez-la (ici elle s'appellerait niveau01).
Pour ouvrir la carte une fois celle-ci sélectionnée: -Cliquez sur Éditer dans la zone de droite
-Appuyez sur Entrée
Et si elle n'est pas encore sélectionnée:
-Cliquez dessus le nom de la carte avec le bouton droit et choisissez Editer. Cette méthode ouvrira la map plus rapidement si votre ordi n'est pas très puissant.
-Double-cliquez tout simplement sur le nom de la carte.
L'éditeur s'ouvrira ensuite.

## Utilisation

Ici, cliquez avec la souris sur l'une des mosaïques à votre droite pour l' utiliser. Elle se mettra à clignoter lorsque vous passerez la souris au-dessus de la map. Là, cliquez avec le bouton gauche pour la placer. Vous pouvez déplacer la souris en maintenant le bouton appuyé pour remplir toute une zone de cette mosaïque.
Vous pouvez également sélectionner des blocs dans une zone quelconque en cliquant sur votre map avec le bouton droit. Un rectangle bleu clignotant apparaîtra au-dessus de la zone sélectionnée. Une fois que vous relâcherez le bouton droit, la zone sera copiée. Ensuite, le curseur clignotant prendra la forme de la première mosaïque (coin haut-gauche) copiée. Vous pouvez cliquer avec le bouton gauche et glisser la souris sur une zone importante pour placer la zone copiée, qui sera éventuellement répétée dans le rectangle. Si tout fonctionne bien, vous verrez votre zone qui clignotera tant que le bouton gauche de la souris sera enfoncé. Pour placer la zone, relâchez-le.
Note: Appuyez sur les deux boutons de la souris en même temps pour annuler toute sélection active.

Vous pouvez également utiliser la roulette de la souris pour sélectionner les motifs les uns après les autres. Si un bloc est copié, alors celui-ci sera remplacé par le motif qui était sélectionné avant la copie.

Vous pouvez faire défiler les grandes maps rapidement en cliquant avec le bouton du milieu (molette) et en déplaçant la souris. De plus, si une sélection est active, la map défilera automatiquement lorsque vous serez au bord de celle-ci. Vous pouvez à ce moment appuyer sur Shift pour accélérer le défilement.

Si vous cliquez sur la barre qui sépare le tileset et la map, vous pouvez déplacer facilement l'intersection entre les deux. Cependant, ce paramètre n'est pas sauvegardé. La barre reviendra toujours à sa position initiale lorsque vous fermez et réouvrez l'éditeur.

## Les touches

Il y a quelques raccourcis afin d'offrir un accès plus rapide aux fonctions les plus utilisées. Ce sont les suivants:

-Ctrl+Z: Annuler la dernière opération
-Ctrl+Y: Annuler l'annulation (refaire)
-Ctrl+S: Sauvegarder la map active. Un message OnSave accompagné du nom de la map est alors envoyé au script.
-Ctrl+H: Passer/Sortir du mode hexa.
-Ctrl+1-5: Passer rapidement entre les maps ouvertes.
-Touches directionnelles: Faire défiler la map
-Ctrl+V: Si vous avez copié une zone d'écran, permet de la coller au même endroit que celui où vous l'avez copiée.
-Ctrl+molette: Zoomer
-Clic de la molette+direction: Faire défiler la map
-Ctrl+espace: Afficher les options

# Le menu de l'éditeur

Vous pouvez ouvrir le menu de l'éditeur en cliquant sur le bouton Menu, ou en cliquant avec le bouton droit à n'importe quel endroit de la fenêtre. Ce propose des options qui peuvent être liées à l'éditeur lui-même (tous les fonds), ou seulement au fond actif. La plupart de ces paramètres sont sauvegardés lorsque l'éditeur est quitté (pour peu que vous ayez activé la case à cocher "Sauver les paramètres des maps" dans les options générales de GBA Graphics). De plus, de nouvelles options apparaîtront dans certaines circonstances.

## Mode hexa

Cette option vous permet d'éditer votre map non pas graphiquement, mais à l'aide des nombres en hexadécimal. Une fois cette option sélectionnée, elle sera remplacée par un sous-menu vous permettant de régler trois options:

-Annuler: Vous permet de retourner au mode graphique.
-Combler avec des 0: Comble les blocs de zéros (essayez pour vous en rendre compte).
-Map graphique en fond: Affiche la map graphique en transparence en-dessous de la map texte.
Conseil: Pour cela, utilisez de préférence des maps de 16x16.

Le mode hexa était surtout utile au début, mais maintenant le mode graphique a bien assez de fonctionnalités pour pouvoir s'en passer quasiment complètement.

## Fonds

Ce menu propose toutes les options relatives aux fonds actifs. Vous verrez plus tard qu'il est possible d'ouvrir plusieurs maps simultanément, de les lier ensemble et d'effectuer toutes sortes d'opérations.

Actif...: Ce menu permet de choisir quel fond est actif, si plusieurs sont actuellement ouverts. Vous pouvez également utiliser les touches Ctrl + 1 à 5 pour naviguer plus rapidement entre les fonds.

Propriétés...: Choisissez un fond dans ce menu, et les propriétés de celui-ci s'afficheront. Voir le chapitre Propriétés des fonds.

Ajouter un fond...: Ceci vous permet d'ajouter un fond à l'éditeur. Notez que les paramètres des fonds ouverts sont également sauvegardés et restorés lorsque l'éditeur est fermé. Choisissez simplement le nom du nouveau fond (cela peut également être une liste d'objets) et il sera ajouté à l'éditeur.

Lier: Lorsque plusieurs fonds sont ouverts, vous pouvez les lier entre eux. Voir le chapitre Liaison de maps.

Une palette par fond: Si vous ouvrez plusieurs fonds, permet d'attribuer une palette différente à chacun des fonds, sinon la même sera utilisée. Utile pour vérifier le rendu que le tout aura sur GBA, car il n'y a qu'une seule palette.

Fonds transparents: Les fonds seront translucides et laisseront apparaître ce qu'il y a derrière eux. Vous pouvez définir les niveaux de transparence dans les options de l'éditeur.

## Outils

Grille des bits: Affiche la grille des bits. Voir le chapitre Grille des bits.

Map spécimen: Affiche la map spécimen. Voir le chapitre Map spécimen.

## Autres

Options...: Affiche les options de l'éditeur.

Opérations sur sélection: Si une sélection est active, permet d'effectuer des opérations spéciales sur celle-ci.

Déplacements: N'utilisez plus cette fonctionnalité. Elle est là pour ceux qui l'utilisaient avant, mais elle a très mal vieilli et est inutile à présent.

# Options de l'éditeur

Cette boîte de dialogue affiche les options qui sont globales à tous les fonds. La nouvelle navigation par onglets est plus simple et rapide.

*** Onglet Raccourcis ***
Propriétés du fond actif: Affiche la boîte permettant de modifier les propriétés du fond actif. Raccourcis vers le menu Fonds, Propriétés, <fond actif>.
Formats des blocs: Permet de modifier le format des blocs (tiles) du fond actif. C'est plutôt déconseillé.

*** Onglet Fonds ***
Afficher la grille: Affiche une grille, dont la taille est définie individuellement pour chaque fond. Par défaut, elle correspond à la taille des tiles.
Couleur: Définit la couleur de la grille.
Opacité: Définit l'opacité de la grille, 1 étant presque invisible et 255 complètement visible.
Transparence: Définit les niveaux de transparence, si l'option "Fonds transparents" est activée. Ici, les niveaux utilisent la même échelle que pour la grille.

*** Onglet Affichage ***
Zoom écran: Définit le zoom de l'écran. 1 représente la valeur initiale.
Zoom bilinéaire: Applique - si possible - un filtre bilinéaire au rendu zoomé. Le résultat peut être plus beau, mais plus lent.

*** Onglet Spécimen ***
Ceci permet de créer facilement une map spécimen, composée d'un ou plusieurs fonds actifs. Voir le chapitre Maps spécimen.

# Options des fonds

Cette boîte de dialogue d'options affiche les propriétés individuelles d'un fond ouvert. Vous pouvez y accéder en cliquant sur Menu, Fonds..., Propriétés, <le fond à éditer>. Elle est également organisée par onglets pour une navigation plus rapide.

*** Onglet Général ***
Afficher le fond: Affiche ou non le fond. Un fond invisible est tout de même accessible, et sera de toutes façons affiché s'il est le fond actif.
Ne pas ouvrir la prochaine fois: Ne supprime pas directement le fond, mais lorsque vous fermerez l'éditeur, le fond ne sera pas réouvert.
Scrolling parallaxe: Vous permet de régler la vitesse du plan en question, en pourcent. Par défaut, elle est de 100%.
Grille d'accrochage: Vous permet de régler la taille de la grille d'accrochage. Sur un fond standard, cela n'affecte que la taille de la grille (si elle est affichée), mais en ce qui concerne les listes d'objets, cela règle également la grille crampon (la grille à laquelle les objets crocheront par défaut, pour un design plus facile de la map). Par défaut, cette grille est de la taille des tiles pour chaque fond.

*** Onglet Propriétés ***
Cet onglet contient les propriétés standard, les seules qui étaient déjà disponibles dans les dernières versions.
Largeur / hauteur en blocs: Permet simplement de redimensionner la map. La taille est exprimée en blocs de map, c'est-à-dire que la taille totale en pixels sera multipliée par la taille des tiles.
Mosaïque de référence: Par défaut, la mosaïque (tile) n° 0 constitue le premier bloc de la map. Cette option vous permet de redéfinir cette valeur. Cette fonction est plus ou moins inutile aujourd'hui, l'utilisation de conditions est beaucoup plus souple et puissante.
Masque d'affichage: Applique un masque aux valeurs affichées. C'est pratique si, par exemple, vous n'utilisez que les 10 premiers bits pour le numéro de tile, et les 6 autres pour des options diverses. Dans ce cas-là, vous définiriez un masque de 1023, et une valeur de 1027, soit 10000000011 en binaire, serait affichée comme 3, le dernier bit n'ayant pas d'importance à l'affichage puisqu'il correspond à une option particulière de votre moteur. Dans cette nouvelle version, le masque n'est appliqué que si aucune condition n'a été trouvée pour le numéro de tile en question. Cela vous permet d'activer un masque global et de faire des exceptions sur certaines zones grâce aux conditions.

*** Onglet Conditions ***
Cet onglet vous permet de paramétrer de façon très simple les conditions à appliquer aux tiles. Veuillez noter que des conditions différentes peuvent être appliquées pour chaque fond. Voir le chapitre Conditions sur les tiles

*** Onglet Bits ***
Cet onglet vous permet de paramétrer la grille des bits. Voir le chapitre Grille des bits.

# Niveaux multi-couches

Depuis la version 0.9, vous pouvez éditer plusieurs maps en même temps. Pour cela, ouvrez le menu de l'éditeur, Fonds, Ajouter un fond... puis choisissez dans la liste le fond que vous voulez voir ou éditer. Avec les anciennes versions, vous pouviez déjà ajouter des fonds histoire de voir plusieurs maps en même temps (utile pour éditer la map de collision par-dessus la map graphique), mais vous ne pouviez pas les éditer simultanément. A présent, c'est possible. Et si vous étiez déjà familiarisé avec l'éditeur, vous verrez que rien n'a changé: seul un menu supplémentaire vous permettra de choisir quel est le fond actif (celui que vous éditez) et vous pourrez ensuite les enregistrer tous en même temps à la fermeture du programme ou individuellement en appuyant sur Ctrl+S lorsque la map que vous voulez sauver est active.
Il y a également une meilleure gestion des Annuler/Refaire et de la sauvegarde, et quelques fonctions en plus.

# Liaison des maps

La liaison de maps est très utile lorsque vous travaillez sur plusieurs maps en même temps. Par exemple, si vous éditez simultanément votre map de collision et votre map graphique, si vous liez celles-ci, les opérations de sauvegarde, copier/coller, annuler/refaire, etc. seront communes aux deux maps.
Imaginez donc que vous voulez copier une partie de votre map et la coller ailleurs -> pas besoin de le faire une fois pour la map graphique et pour celle des collisions, tout est fait d'un coup.

Vous pouvez créer librement des groupes sur les maps ouvertes. Tout d'abord, allez sous "Ajouter un fond..." dans le menu principal. Ce fond apparaîtra au-dessous (éventuellement en transparence). Vous pouvez l'éditer individuellement en appuyant sur Ctrl+2. Revenez maintenant à la première avec Ctrl+1.
Maintenant, allez dans le menu "Fonds..." puis choisissez "Lier...". Une fenêtre apparaîtra, vous indiquant la liste des fonds liés. Par défaut, seule la map courante y sera (la 1 dans notre cas). Ouvrez la liste déroulante et choisissez la deuxième map ("2 = nom_de_la_map"). Elle sera ajoutée à la liste. Notez que les maps sont identifiées par leur numéro et séparées par des virgules.
Note: Les maps ne sont pas liées en cascade. Par exemple, si vous liez la map 1 avec la 2, et la 2 avec la 3, ne croyez pas que la 1 sera également liée à la 3 par l'intermédiaire de la 2. Si c'est ce que vous désirez, mettez 1,2,3 comme liens pour la première map.

Pour ne copier que les données du plan actif lorsque vous avez lié des maps, appuyez sur la touche Ctrl en même temps que vous relâchez le bouton de la souris. Lorsqu'une sélection (copie) n'a été effectuée que sur un seul plan, le collage le sera également (sans que vous ayiez besoin d'appuyer sur la touche Ctrl).

# Grille des bits

La grille des bits est un outil qui vous permet d'éditer visuellement et simplement la sélection courante de manière binaire. Il s'agit d'une nouvelle fonctionnalité, introduite dans la version 0.95. Vous pouvez y accéder par le biais du sous-menu "Outils..." du menu principal de l'éditeur.

Il y a huit cases à cocher, représentant les bits de 8 à 15. Lorsque vous sélectionnez une zone dans la map, l'état du bloc se trouvant le coin gauche de la sélection est inscrit sur la grille des bits. Il suffit alors de cliquer sur la case à cocher représentant le bit à changer, sans oublier de coller la sélection pour valider le changement.

Bien entendu, cela ne s'arrête pas là. Vous pouvez également renommer chacune des étiquettes associées aux différentes cases à cocher, et choisir si vous voulez activer la case ou non (lequel cas elle sera grisée).

Pour paramétrer cet utilitaire, rendez-vous au menu des paramètres du fond pour lequel vous voulez effectuer cette configuration, dans l'onglet "Grille des bits".

Vous y verrez une liste proposant les bits à reparamétrer. Sélectionnez-en un, et il apparaîtra dans la zone en-dessous. Vous pouvez changer son texte et le désactiver. Cliquez simplement sur Mettre à jour pour valider vos changements. N'oubliez pas que vous devez cliquer sur Ok dans la boîte de dialogue pour conserver les changements effectués!

Si la grille des bits n'est pas apparue, allez dans le menu, sous Outils, choisissez Grille des bits.

# Maps spécimen

Vous pouvez créer des maps "spécimen" (ce sont des maps utilisées comme modèles) auxquelles vous pourrez accéder simplement lors de l'édition de vos maps basées sur le même jeux de mosaïques que celui de la map spécimen. Cela se présente par une petite fenêtre dans laquelle vous irez sélectionner les blocs "tout faits" qui vous intéressent et que vous irez coller dans la map que vous éditer.
Les maps spécimen peuvent bien entendu se trouver sur plusieurs couches (graphiques + collisions par exemple).

La map spécimen utilise un ou plusieurs fonds ouverts. Ces fonds devraient suivre exactement le même schéma que les fonds principaux. Par exemple, si vous éditez deux plans liés, vous devriez utiliser deux plans également liés (dans le même ordre) pour le spécimen.

Pour créer une fenêtre spécimen, c'est très simple; il vous suffit d'ajouter les fonds à utiliser (Menu, Fonds, Ajouter un fond), d'effectuer au préalable les liaisons nécessaires s'il y a plusieurs fonds. Puis, vous ouvrez le menu Options, spécimen, et choisissez un des fonds à ajouter dans la liste déroulante, puis cliquez sur "Ajouter". Répétez l'opération pour tous les fonds qui apparaîtront comme spécimen.

Prenons un exemple concret. Vous avez deux maps, une map Niveau_1_gfx (graphique), utilisant le tilset Niveau_1_til, et une map Niveau_1_col (collisions) utilisant le tileset Collisions_til. Vous pouvez ensuite dupliquer Niveau_1_gfx et Niveau_1_col et les nommer respectivement Niveau_1_specimen_gfx et Niveau_1_specimen_col. Editez ces maps pour qu'elles constituent un modèle pour votre niveau 1. Ensuite, ouvrez Niveau_1_gfx, ajoutez Niveau_1_col (pour pouvoir travailler avec), liez-les (Ctrl+1, Menu, Fonds, Lier, "1,2"). Ajoutez ensuite (dans l'ordre), Niveau_1_specimen_gfx et Niveau_1_specimen_col. Ces maps prendront les numéros 3 et 4. Liez-les (Ctrl+3, Menu, Fonds, Lier, "3,4"). Ouvrez la boîte spécimen (Menu, Options, onglet Spécimen), dans la zone de liste déroulante, choisissez 3: Niveau_1_specimen_gfx, cliquez sur Ajouter, puis faites pareil pour 4: Niveau_1_specimen_col. La configuration est terminée, la boîte Spécimen devrait automatiquement apparaître. Si ce n'est pas le cas, ouvrez le menu Outils, Spécimen. N'oubliez pas de sauver la map afin que les paramètres soient gardés, sinon vous aurez à effectuer la procédure à chaque fois que vous ouvrez votre map!

# Opérations sur la sélection

C'est une fonctionnalité bien sympathique (et toute nouvelle) qui permet d'appliquer des opérations arithmétiques en fonction de conditions définies sur la sélection active.
Vous devez d'abord sélectionner quelques blocs. Pour cela, cliquez avec le bouton droit de la souris et glissez le rectangle bleu jusqu'où vous désirez inclure la sélection. Relâchez le bouton gauche pour copier les blocs. Vous pouvez ensuite les coller sur une zone donnée en cliquant avec le bouton gauche et en glissant pour étendre la sélection.
Note 1: Appuyez sur les deux boutons de la souris en même temps pour annuler toute sélection active.
Note 2: Si la sélection avec le bouton gauche est plus grande que le motif copié, il sera répété dans sa largeur ou sa hauteur.

Ensuite, choisissez Opération sur sélection dans le menu (l'élément ne sera plus grisé si vous avez bien copié un bloc). Vous verrez alors deux champs: un champ opération et un champ condition.
Dans cet exemple, je veux appliquer le bit de profondeur sur un arbre (le 11ème, soit faire un OR 1024 sur mes blocs). Seulement, comme ma sélection est "carrée", elle contient aussi du vide (0), et de l'herbe (2) en-dessous. Je ne veux pas appliquer de bit sur ces blocs-là.
Je remplis donc le champ opération avec |0x400, | étant l'opérateur OU (voir ci-dessous) et 0x400 étant le bit 11 seul (j'aurais pu le mettre en binaire 0b10000000000 ou en décimal 1024).
Ensuite, je remplis le champ condition comme suit: !=0 et !=2, ce qui n'appliquera donc l'opération qu'aux blocs qui ne valent pas 0 et ne valent pas 2 (le != étant l'opérateur d'inégalité, voir ci-dessous).

Voici une table des opérateurs arithmétiques et logiques disponibles, ainsi que les opérateurs de condition:

Opérateur | Effet
+ | Addition
- | Soustraction
* | Multiplication
/ | Division
% | Modulo
= | Assignement
| | OU logique bit à bit
& | ET logique bit à bit
^ | OU exclusif bit à bit
= | Est égal
< | Strictement inférieur
<= | Inférieur ou égal
>= | Supérieur ou égal
> | Strictement supérieur
!= | N'est pas égal
~ | ET inversé bit à bit

Si vous utilisez le & dans le cadre d'une condition, celle-ci sera considérée comme vraie si le résultat d'un ET bit à bit entre la valeur présente et celle spécifiée est non nul. Par exemple &0b10 n'effectuera l'opération que si le deuxième bit vaut 1. Pour tester si le bit est zéro, utilisez ~0b10.
Vous pouvez également spécifier plusieurs conditions en les séparant d'un et ou d'un ou. Exemple:

    >=2 et <7 ou >10 et !=16

Les opérations sont toujours effectuées de gauche à droite. Ainsi, ceci revient mathématiquement à faire:

    ((>=2 et <7) ou >10) et !=16

De la même manière, vous pouvez également entrer plusieurs opérateurs à la suite, par exemple:

    +2*3 équivaut à (+2)*3

Une fois l'opération effectuée, vous pouvez coller les blocs n'importe où, ou au même endroit en appuyant sur Ctrl+V.

# Déplacements

L'utilisation de cette fonctionnalité est complètement déconseillée. Vous pouvez néanmoins toujours vous en servir, mais comme je ne vous y encourage pas, je n'écrirai pas de documentation à ce sujet dans cette version. Notez également que cela ne fonctionne pas avec les listes d'objets.

# Conditions sur les tiles

Le nom de ce chapitre n'est pas très explicite. Il s'agit en fait de la possibilité de définir que toutes les tiles entre x et y sont affichées selon les tiles à partir de z. Vous saisissez? Prenons un exemple: mes objets utilisent les tiles de 0x400 à 0x500, et il n'y a rien entre 0x100 et 0x400. Ce serait bête de les remplir de tiles vides pour que la 0x400 contienne la tile voulue. Grâce aux conditions, je peux donc définir que toutes les tiles entre 0x400 et 0x500 sont affichées en utilisant les tiles à partir de 0x100. La tile 0x403 sera alors affichée 0x103.

Et cela fonctionne dans les deux sens: si vous sélectionnez ensuite la tile 0x103 dans votre tileset et la collez sur votre map, GBA Graphics inscrira automatiquement 0x403 à la place! Vous pouvez donc vous faire un tileset très varié et compact, contenant tous les graphismes et objets dont vous avez besoin, même si ceux-ci ont des valeurs très éloignées.

Les conditions sont écrites individuellement pour chaque fond, et vous pouvez en définir 20 au maximum pour chacun d'eux. Pour ce faire, ouvrez la boîte des propriétés du fond pour lequel vous voulez définir les conditions. Sous l'onglet conditions, vous verrez une liste, avec à sa droite trois boutons (Ajouter, Modifier, Supprimer), et au-dessous, trois zones de texte et une case à cocher.

Création d'une nouvelle condition
Entrez dans les deux premières cases la plage de valeurs qui doit être modifiée. En reprenant l'exemple ci-dessus, cette plage est 0x400 à 0x500. Entrez ces deux valeurs respectivement dans les deux cases. Ensuite, entrez la nouvelle valeur à prendre (dans notre exemple: 0x100). Ensuite, vous pouvez cocher la case "Ne pas incrémenter" de manière à ce que toutes les valeurs de la plage donnée (0x400 à 0x500) soient fixées à la nouvelle valeur (0x100). Si vous ne cochez pas cette case, les valeurs seront incrémentées et 0x400 sera transformé en 0x100, 0x401 en 0x101, etc.
Cliquez finalement sur le bouton "Ajouter", et la condition sera ajoutée. N'oubliez pas de faire "Ok" dans la boîte de dialogue, sinon les modifications seront perdues.

Modification d'une condition
Vous pouvez modifier une condition aussi simplement que vous l'avez créée; une fois les conditions ajoutées, elles apparaîtront sous forme de liste dans la partie supérieure de la fenêtre. Cliquez sur celle que vous voulez modifier puis sur le bouton Modifier pour la mettre à jour, Supprimer pour l'effacer, ou Nouveau pour l'ajouter simplement.

# Listes d'objets

## Création d'un modèle de paramètres

Lorsque vous voulez placer vos objets par-dessus la map du niveau, plusieurs possibilités s'offrent à vous. Vous pouvez placer vos objets sur la map elle-même (en utilisant des valeurs spéciales) ou sur la map de collisions, par exemple. Mais vous pouvez aussi créer une liste d'objets, aidé par ce logiciel. Cela consiste à stocker pour chaque objet une information du style: "Il y a une pièce jaune aux positions 10,38". Si votre niveau est grand, mais qu'il ne comporte qu'un faible nombre d'objets, cette méthode s'avère largement plus économique, car elle vous évite d'avoir à réserver un plan entier (de la taille du niveau) pour stocker vos objets. De plus, vous pouvez déplacer les objets précisément (au pixel près), au lieu d'être limité à la taille d'un bloc de map, ou en placer une série à côté. Finalement, il devient possible de stocker des paramètres individuels pour chaque objet (au lieu d'utiliser par exemple les cases d'à côté pour stocker ces informations).

L'utilisation des listes d'objets requiert un peu plus d'expérience que pour manipuler des maps. Tout d'abord, vous devez définir un modèle de liste d'objets. Un modèle stocke les paramètres que chaque objet peut prendre. Vous pourriez par exemple attribuer deux paramètres numériques, dont l'utilité dépendrait de l'objet lui-même, un paramètre de type chaîne qui contiendrait, dans le cas d'un panneau ou d'un personnage par exemple, ce qu'il peut dire. Vous pouvez même lui attribuer un nom de variable représentant par exemple le sprite à utiliser.

Pour définir un modèle d'objet, rendez-vous au menu Outils, Options, onglet Modèles. Vous voyez une liste, indiquant les paramètres actuels (il ne devrait y en avoir aucun). Pour en définir un, vous devez lui donner un nom. Ce nom n'a pas beaucoup d'importance, il apparaîtra lorsque vous double-cliquerez sur un objet pour en éditer les propriétés. Utilisez-le à titre indicatif, donc.
Choisissez un type dans la liste. Pour l'instant, il n'y en a que deux; entier et brut. Un entier stocke les informations sous forme entière (évidemment) et le type brut sous type chaîne de caractères. Choisissez la longueur du champ (pour un entier, il s'agit toujours de 4 octets soit 32 bits signé).
Vous pouvez assigner une valeur par défaut au paramètre. Cette valeur sera proposée par défaut pour chaque nouvel objet créé (ou si le paramètre n'existait pas dans la liste, car son modèle a été modifié).

Lors de l'utilisation du type brut, le paramètre nom peut prendre un format spécial, indiquant par quels caractères précéder et succéder la valeur. Par exemple, si vous souhaitez que le paramètre contienne directement des chaînes, entourées par des guillemets, vous pouvez lui donner le nom "<Paramètre>" où Paramètre est le nom que vous lui auriez donné normalement. La syntaxe est donc simple: ce qui vient après le > est inséré à la fin et ce qui vient avant le < est inséré avant, en l'occurence un guillemet avant et après.

Finalement, cliquez sur Ajouter et répéter l'opération pour tous les paramètres supplémentaires. Si vous voulez modifier un paramètre dans la liste, cliquez sur celui-ci, les informations seront copiées dans les zones de texte, que vous pourrez librement modifier. Cliquez sur Mettre à jour pour appliquer les modifications au paramètre. Vous pouvez également le supprimer en le sélectionnant puis cliquant sur Supprimer.

Une fois que tous vos paramètres sont définis, il vous reste à enregistrer cela dans un modèle. Vous pouvez modifier le modèle par défaut (nommé Default) ou créer votre propre nouveau modèle. La liste de modèles est affichée sur le bas de la fenêtre, juste au-dessus de trois boutons (Sauver, Charger, Supprimer).
- Pour enregistrer sous un modèle existant, choisissez-le dans la liste et cliquez sur Sauvegarder. Vous pouvez également le recharger en cliquant sur Charger, ou encore le supprimer.
- Pour enregistrer sous un nouveau nom de modèle, entrez celui-ci dans la zone de texte et cliquez sur Sauver. Si le nom de modèle existait déjà, son contenu sera remplacé.

## Création d'une nouvelle liste

Cette opération n'est pas compliquée. Vous avez pour cela besoin d'un modèle (celui que vous avez créé selon les instructions ci-dessus), et d'un jeu de mosaïques (il représentera les icônes des différents objets que vous pourrez poser sur le plan).

Pour créer une liste, cliquez sur Listes dans l'arbre du projet, choisissez un nom de fichier, un tileset, et indiquez la taille des icônes. Celle-ci dépend en fait de la taille du tileset. Il est recommandé d'utiliser des icônes pas trop grosses (l'idéal sur GBA est quelque chose comme 16x16) car tous les objets partagent le même tileset, et ont donc la même taille.

Cliquez sur Ok, votre liste est créée, mais vous ne pouvez pas directement l'éditer, il faut la charger dans l'éditeur en conjonction avec une map normale. Pour cela, ouvrez une map normale (représentant par exemple le plan graphique), allez sous Menu, Fonds, Ajouter un fond, et sélectionnez le nom de la liste. Elle apparaîtra ensuite comme un fond standard, et vous pourrez l'activer en appuyant sur Ctrl + son numéro.

## Edition de la liste

Comme vu précédemment, les listes d'objets s'ouvrent depuis l'éditeur, où vous pouvez les éditer de manière transparente persque comme si c'était une map (bien que fondamentalement ces deux objets n'aient pas vraiment de rapport, mais vous n'avez pas à vous en soucier).

Lorsque vous activez une liste, choisissez un élément dans le tileset (partie droite de la fenêtre) et cliquez sur le plan pour l'y placer. Le numéro de l'objet correspond en fait au numéro de la tile sélectionnée.
Note: L'objet n°0 (première tile) n'existe pas. La première tile (0) devrait donc être vide. Utilisez-le de manière à annuler la sélection ou la copie d'un objet.

Vous pouvez éditer les attributs de l'objet en double-cliquant dessus. Une boîte de dialogue apparaîtra alors, vous permettant de définir les paramètres de l'objet, tels que vous les avez configurés dans votre modèle. Les nouveaux objets verront leur contenu initialisé aux valeurs par défaut telles que définies dans le modèle.

Il y a quelques touches supplémentaires pour l'édition des listes d'objets:

-+ et - (pavé numérique): Permet de régler les dimensions de la grille crampon à laquelle sont tenus les objets (de façon à aider leur déplacement). Cette grille agit un peu comme en mode tiles (les objets sont alignés aux blocs de map par défaut), mais il est toujours possible de les placer plus librement grâce à la touche SHIFT.
-Shift: Comme dit plus haut, maintenez cette touche enfoncée pour déplacer votre objet librement (au pixel près).

Pour sélectionner une grande zone d'objets, cliquez avec le bouton droit tout en maintenant Ctrl (pour ne sélectionner que sur le plan actif) et entourez les objets que vous voulez sélectionner. Vous pouvez ensuite les déplacer, copier, couper ou supprimer.

La sélection avec le bouton droit est également possible, mais elle sera alignée selon la grille. Dans ce cas, la sélection s'applique à tous les plans actifs, comme d'habitude.

## Intégration de la liste dans votre code

Par défaut, le format de la liste est le suivant (pour chaque élément):
"\n {#type#,#x#,#y##+param:',':''#},"
Si on retire la commande spéciale pour les paramètres qui sont placés après, cela donne:
{type,x,y,param1,param2,...},
Vous devez donc déclarer un nouveau type pour vos objets, de manière à pouvoir les utiliser. En C/C++, ce type ressemblera à cela:

    typedef struct			{
        int type;
        int x, y;
        int param1;
        char *param2;
        ...
    } SPRITE_LISTE;

Prenons maintenant un exemple de fichier liste généré par GBA Graphics (avec le format par défaut):

    //collisions.lst.c
    //Converti avec GBA Graphics par Brünni
    //Liste ("Test\Collisions.til.c", "Test")
    //Taille: 16*16
    //Mémoire: 252 octets

    #include "def.h"

    const unsigned int test_liste_nbEle=2;

    const SPRITE_LISTE test_liste[]=	{
    	{2,48,48,"",323,NULL},
    	{2,48,160,"test",0,NULL},
    };

Vous noterez qu'un fichier est inclus, ce fichier est "def.h". Vous pouvez modifier cela en redéfinissant le user[1] du format que vous utilisez, ou alors en le modifiant directement dans le fichier. Au prochain enregistrement du fichier (depuis l'éditeur), la modification sera tout de même gardée.

Ensuite, une constante entière, représentant le nombre d'éléments contenus dans la liste est créée. Vous pouvez l'utiliser lorsque vous parcourez la liste du début à la fin. Finalement, on trouve la définition de la liste (nom de l'élément suivi de _liste, comme pour les autres types). Il faut donc définir la structure SPRITE_LISTE utilisée dans le fichier "def.h" (ou tout autre fichier que vous avez inclus à la place), sinon le compilateur va générer des erreurs. Pour ma part, le def.h est placé dans le répertoire et contient #include "../../../../[...]/commun.h", qui contient également cette définition. Vous pouvez remplacer la ligne #include par la définition directement, mais c'est mieux d'inclure un fichier, car plus pratique pour modifier si jamais.

Ensuite, dans votre code, vous pouvez déclarer votre liste et l'utiliser facilement:

        const SPRITE_LISTE *sl;
        int nElements;
        int i;

        sl = test_liste;
        nElements = test_liste_nbEle;

        for (i=0; i<nElements; i++)
        {
            CreeUnNouvelObjet (sl[i].x, sl[i].y, sl[i].type, sl[i].param1, ...);
        }

Considérations
- La liste est triée horizontalement puis verticalement, afin de vous permettre de réaliser une recherche efficace et optimisée, particulièrement pour les niveaux plus larges que hauts (c'est-à-dire dans presque tous les jeux).
- Si vous voulez stocker la liste dans une structure (décrivant un niveau), vous pouvez y mettre un pointeur vers la liste, et un pointeur sur le nombre d'éléments. Exemple:

    typedef struct			{
        SPRITE_LISTE *spriteListeDuNiveau;
        int *tailleDeLaSpriteListeDuNiveau;
    } FORMAT_NIVEAU;

    [...]

    FORMAT_NIVEAU mesNiveaux[] =		{
        {niveau1_liste, &niveau1_liste_nbEle},
        {niveau2_liste, &niveau2_liste_nbEle},
        [...]
    };

Il n'y aura alors pas besoin de recompiler le fichier de niveaux à chaque modification d'une des listes d'objets, ce qui est bien pratique pour travailler.

Note: L'exemple est fourni avec un programme "all.exe", qui scanne tous les répertoires depuis celui où il est placé, et crée un fichier "all.h" contenant toutes les définitions qu'il a trouvées dans les fichiers .c. Vous n'avez ensuite qu'à inclure ce fichier, et vous pourrez directement utiliser toutes vos ressources (générées dans des fichiers .c).

# Dossiers virtuels

Vous pouvez créer des dossiers dans le projet GBA Graphics. Ces dossiers ne sont pas réellement créés sur le disque dur, ils sont uniquement définis dans le projet de manière à vous permettre un meilleur rangement des données. Pour créer un dossier, ouvrez le menu Fichier, puis choisissez Ajouter dossier. Choisissez où vous voulez placer votre dossier (par exemple sous Cartes, à la racine, dans un autre dossier existant, etc.) et donnez-lui un nom. Vous pouvez ensuite y déplacer les éléments simplement en cliquant sur ceux-ci et en les glissant-déplacement jusqu'au dossier. Lorsque la souris est au-dessus d'un dossier dans lequel vous pouvez placer l'élément, le nom du dossier apparaîtra en surligné et en gras. Relâchez la souris pour l'y déposer.

Note: Si vous déplacez un élément dans l'un des dossiers de base, il reviendra à sa position initiale. Par exemple, si vous déplacez une carte vers Mosaïques, celle-ci reviendra dans Cartes si elle ne s'y trouvait pas avant. Il n'est pas possible de mixer les types de fichiers au sein des dossiers de base, sinon le projet deviendrait rapidement ingérable. Cependant, si vous avez créé par exemple un dossier "Test" dans Mosaïques, vous pouvez y placer une carte, même si ce n'est pas recommandé.

En cliquant avec le bouton droit sur un dossier créé, vous pouvez définir quel type d'élément ira par défaut dans celui-ci. Tous les nouveaux éléments (générés par conversion, ou par création explicite) du type choisi seront placés dans le dossier en question. Pour annuler la redirection du dossier par défaut, cliquez par exemple sur le dossier Cartes et choisissez Restaurer tous les dossiers, ou restaurer le dossier par défaut pour ne restaurer que ce dossier.
Note: En effectuant répétitivement cette opération, vous pouvez rediriger plusieurs types vers le même dossier.

Même placés dans un autre dossier , les éléments gardent leur même nom, c'est pourquoi il n'est pas possible d'avoir deux fois le même nom d'élément dans des dossiers différents. Si vous souhaitez faire cela, précédez le nom d'un indicateur et d'un slash, par exemple Dossier\Nom. L'élément sera affiché Nom, mais identifié comme Dossier\Nom, et donc différent de Nom tout seul, ou Test\Nom, etc.

Vous pouvez également déplacer les dossiers entre eux. Pour cela, glissez-déposez les comme pour les éléments. Si vous glissez un dossier vers un dossier de base (par exemple Cartes), il s'y placera, mais s'il était déjà dans le dossier en question (par exemple vous le déposez dans Cartes et il était déjà dans Cartes), il sera déplacé à la racine du projet. Evidemment, vous ne pouvez pas déplacer un dossier dans l'un de ses sous-dossiers, ou vous recevrez une erreur.

## Ajout rapide d'éléments au projet

Vous pouvez glisser-déposer des fichiers depuis l'explorateur dans l'application. Veuillez noter que seuls les fichiers ayant une extension reconnue (par GBA Graphics ou l'un de vos formats personnalisés) ne seront ajoutés. Ils seront placés dans leurs dossiers par défaut.

# Format du fichier de sauvegarde

Depuis la version 0.9, le format des fichiers .pgg n'est plus binaire, mais sous forme de texte. Il fonctionne à peu près de la même manière que tous les autres fichiers de configuration (typiquement les .ini sous Windows et les .conf sous Linux), excepté pour la définition des éléments du projet qui est un peu spéciale et pas vraiment souple.
L'ancien format était vraiment mauvais, le nouveau vous fera certainement gagner de la place en mémoire, et la mise à jour depuis l'ancien format ne devrait pas poser de problème. Si toutefois c'était le cas, veuillez me le signaler. ;-)

Pour éditer le fichier (.pgg), utilisez le bloc-notes (notepad).
Le fichier est divisé en sections, ayant chacune une utilité et une syntaxe différente, bien que seule la section fichiers ne soit spéciale. Les sections sont définies par un .section nom_de_la_section en début de ligne, et sont les suivantes:

-Section infos: Cette section comprend les valeurs de certaines des variables internes lorsqu'elles ont été modifiées. Elle est écrite par GBA Graphics et ne devrait pas être éditée car son contenu ne sera pas sauvé (i.e. écrasé lors de la réécriture du fichier).
-Section fichiers: Cette section contient les fichiers, définis comme ci-dessous.
-Section données: Agit de la même manière que la section infos, sauf que vous pouvez y placer vos propres informations (ou commandes de script) sans qu'elles soient écrasées à la réécriture.

Le format de chaque élément dans la section fichier est le suivant:

        Elément: (nom court de l'élément)
        Type: (type, en lettres)
        Fichier: (fichier correspondant)
        Base: (élément de base, toujours une bitmap)
        Dossier: (dossier dans lequel il se trouve)

Il se peut que la ligne Dossier: soit absente, et dans ce cas, l'élément va dans le dossier par défaut suivant son type.

# Le script

Le script est une fonction plutôt complexe, mais que j'ai tenté de simplifier le plus possible. Le but est de personnaliser votre environnement. Cependant, ce n'est pas un véritable langage de script, en ce sens qu'il ne gère pas l'utilisation de variables internes, boucles, et autres, car ça n'est pas vraiment utile. Prenez-le comme un fichier de configuration interactif et dynamique;
Par script, j'entends le fait de changer le comportement de GBA Graphics en exécutant diverses fonctions ou en modifiant certaines variables internes. Enfin vous verrez! :-p

Le fichier de script par défaut est script.spt mais il est modifiable en changeant la ligne Script = "script.spt" dans le fichier de configuration. Créez ensuite un fichier vierge (script.spt dans notre exemple) que vous placez bien sûr dans le répertoire du projet. Utilisez le bloc-notes pour éditer ce fichier, ou un autre éditeur du style.

## Format des instructions

Chaque instruction prend une ligne, qui peut-être précédée d'autant d'espaces qu'on le désire. Elles sont terminées par un "#" ou un ";" (ce qui vient après est du commentaire) ou par un retour à la ligne.
Principalement, on distingue deux types d'instructions (c'est pas beaucoup, enfin bon); les assignements et les appels de fonctions. Comme je l'ai déjà dit, vous ne pouvez pas effectuer de manipulation de variables, boucles ou autres à l'intérieur du script, cependant vous assignez toujours des valeurs aux divers paramètres internes de GBA Graphics. Voici les diverses syntaxe que l'on peut adopter:

    variable=1
    variable=vrai
    Fonction 1,2,3
    Fonction "paramètre"

J'ai également le plus possible regroupé les variables dans des objets, comme en C++ ou en VB. Un objet peut contenir plusieurs variables (propriétés) et plusieurs fonctions (méthodes). Pour accéder à un élément quelconque qui se trouve dans un tableau, il suffit de mettre le nom de l'objet, un point, puis le nom de l'élément. Exemple, si je vous dis d'assigner 32 à la variable alphaGfx (qui se trouve dans l'objet Fonds), cela donnera:

    Fonds.alphaGfx=32

Pour les fonctions, si je vous dis d'ajouter à l'éditeur le fond appelé "map_nv1", vous allez vous tourner vers la fonction Ajoute contenue dans l'objet Fonds et qui demande comme paramètre le nom de la map (entre guillemets), ça donnera donc:

    Fonds.Ajoute "map_nv1"

Je sais, je n'explique pas très bien, mais en regardant des exemples de code concret, vous devriez vous en sortir car ce n'est pas trop compliqué. ;-)

## Procédures et points d'entrée

Les points d'entrée du script sont définis comme les labels dans les autres langage. Néanmoins, il y a lieu de différencier trois types de points d'entrée (ou points de branchement):

-Labels: Les labels sont définis ainsi: "label:" sur une nouvelle ligne.
-Procédures: Ce sont comme les labels, sauf qu'on met un trait de soulignement au début du nom en plus. Exemple: "_procédure:". Le code qui se trouve en-dessous jusqu'à Fin sera donc exécuté lors du branchement à cette procédure.
-Evénements: Les événements sont des procédures automatiquement appelées par GBA Graphics lors de certaines circonstances, et peuvent être suivis d'un paramètre. Exemple: "OnOpen map_nv1:" sera appelé lors de l'ouverture de la map "map_nv1".

Les procédures sont exécutées droit en bas jusqu'à un Fin, Quitte ou un Retour, ayant chacun un effet différent. Voici les événements disponibles (il n'y en a pas beaucoup):

-OnStart: Cet événement est appelé au démarrage du programme.
-OnQuit: Cet événement est appelé lorsque vous quittez le programme.
-OnOpen map: Où map est le nom de la map qui est ouverte est appelée lorsque vous ouvrez l'éditeur de maps. Elle n'est pas appelée pour les maps qui sont ajoutées comme fond.
-OnSave map: Où map est le nom de la map qui est ouverte est appelée lorsque vous enregistrez la map en question.

## Définition de formats personnalisés

Vous pouvez créer des fichiers personnalisés qui pourront être utilisés dans d'autres langages de programmation que le C/C++. Grâce à la définition de format, GBA Graphics pourra écrire et relire les fichiers dans le format que vous désirez. Malheureusement, le grand problème est que GBA Graphics ne reconnaît pas les formats avant de commencer à les lire. Si vous sélectionnez un format personnalisé, il ne sera pas possible de lire tout autre type de fichier. Cela peut créer des problèmes si votre projet a plusieurs formats (C, Dragon basic, etc.).

Pour palier à ce problème, la version 0.99 tente de reconnaître automatiquement (si l'option est activée dans le menu Outils... Options) le format d'un fichier avant de commencer à le lire, ou à l'écrire, grâce à son extension. C'est pour cela que vous devriez définir des extensions par défaut différentes selon le format de fichier, comme par exemple ".monformat.map.c".

Pour définir un nouveau format, vous devez impérativement utiliser le script. Ces définitions doivent être effectuées au démarrage du programme (OnStart:) ou dans la section .données du fichier projet. Voici le squelette d'une définition de format, que vous devrez insérer :

    DefFormat "Nom du format"	{
    	type d'objet à modifier	{
    		declaration="Ce qui est écrit à la déclaration"
    		n_chaque=8
    		chaque_x="Ici ce qui est fait chaque 8 éléments (8 dans n_chaque)"
    		element="Manière d'écrire (format) chaque élément"
    		ligne="Ce qui se fait à la fin d'une ligne"
    		fin="Ce qui est écrit à la fin du fichier"
    		ext=".extension"
    	}
    	prochain type d'objet à modifier	{
    		...
    	}

    	#Complémentaire et facultatif. Définit les types de données:
    	type8="char"
    	type16="short"
    	type32="long"
    }

Vous pouvez obtenir un exemple de format complet défini dans le fichier Format test.txt fourni dans le zip de GBA Graphics. Avant de continuer, il serait bien de le consulter et d'essayer de comprendre. La liste ci-dessous décrit les possibilités et les spécifications de format. Même si les possibilités sont assez libres, vous devez garder en tête que GBA Graphics utilise ces formats lors de l'écriture mais aussi plus tard à la lecture des fichiers qu'il aura générés en les utilisant, ce qui signifie que certaines informations lui seront indispensables pour pouvoir relire...

Partie 1: modifications à opérer
Ces modifications sont indiquées dans la définition de format comme plus haut. Elles doivent être définies pour chaque type de données!
declaration="listing" : Cette chaîne sera entrée à la déclaration, c'est-à-dire au sommet du fichier. Généralement, elle devrait contenir toutes les informations nécessaires au fichier lui-même, car en règle générale, c'est la seule partie qui peut contenir des symboles (%quelquechose%), donc c'est elle qui doit contenir toutes ceux qui sont indispensables. Voir plus bas.
n_chaque=nombre : Nombre d'éléments à écrire avant d'insérer quelque chose de spécial (généralement un retour à la ligne).
chaque_x="chaine" : Texte à insérer chaque n_chaque éléments écoulés.
element="format" : Indique la manière d'écrire chaque élément (en utilisant les spécifications de format de type printf). Décrit plus bas.
element2="format" : Manière alternative d'écrire un élément. C'est le cas pour les tilesets 4 bits qui utilisent element2, et element en mode 8 bits, ainsi que les maps (element pour le mode texte 16 bits, element2 pour le mode rotation 8 bits) .
element3="format" : .
ligne="chaine" : Texte de fin de ligne, écrit à chaque fin de ligne d'une map, d'un tileset ou d'une bitmap. Nécessaire pour insérer par exemple le }, fermant en C...
fin="chaine" : Ecrit à la fin du texte.
ext=".xxx" : Extension par défaut pour ce type d'objet. Par exemple ".til.c" pour les tilesets C.
Ceci s'applique à tous les types d'objets (doit être mis en dehors de tout type d'objet)
type8="texte" : Nom du type 8 bits (en C c'est "char"). Ils sont facultatifs.
type16="texte" : Nom du type 16 bits.
type32="texte" : Nom du type 32 bits.
typesd="texte" : Nom du type de données pour les listes d'objets.
user[x]="texte" : Valeur par défaut des types utilisateur. x peut être entre 1 et 9.

## Formats perso: spécialités

Eh oui, la définition de formats peut sembler compliquée au premier abord (en plus mes explications ne sont vraiment pas bonnes). Comme vous l'avez remarqué ci-dessus, je donne des définitions du style: ligne="chaine". Le type fourni (ici chaine) en dira plus long sur ce que vous pouvez mettre dans votre texte ou non.

"texte" : il s'agit d'un texte simple, figurant entre guillemets. Il peut contenir les caractères standard uniquement (lettres, chiffres, signes).
nombre : les nombres ne sont pas entre guillemets, sont toujours codés en décimal et peuvent aller jusqu'à 2'147'483'646.
"chaine" : les chaînes sont à peu de choses près identiques au texte, excepté qu'elles peuvent contenir la séquence "\b", qui indique de reculer d'un caractère. Imaginez ce cas:
A chaque entrée, on dessine: "%i, ". A la fin d'une ligne de cinq caractères, on se retrouve donc avec: "1, 2, 3, 4, 5, ". Les deux caractères sont superflus car en C le "}," doit être inséré directement après le "5". Il va donc falloir insérer deux fois "\b" puis "},".
De plus, ces chaînes peuvent contenir la séquence "\n", marqueur de fin de ligne qui insère un retour chariot.
"listing" : les listings sont des textes contenant des symboles (%symbole%). Ces symboles doivent révéler tout ce dont GBA Graphics a besoin pour reconstituer un fichier (en plus des données), comme les dimensions des maps, tilesets, bitmaps ou palettes. Ces symboles sont constitués d'un nom d'objet entouré de caractère %. Un exemple est %size%, qui définit le symbole 'size'. Dans le prochain chapitre, nous allons passer ici en revue toutes les possibilités de symboles:

## Symboles

file : Nom du fichier original. Pas réellement obligatoire mais vivement conseillé.
sizex et sizey : Taille (x=horizontale et y=verticale) d'une map ou d'une bitmap.
Indispensable pour: bitmaps (8 et 16 bits), maps (tous types).
size : Taille d'une palette (nombre de couleurs) et taille d'un tileset (nombre de tiles).
Indispensable pour: palettes, tilesets (tous types).
memory : Mémoire demandé par les différents objets. Valable pour tous les types d'objets, mais pas obligatoire.
name : Nom de l'élément, valable pour tous les éléments. Pas strictement indispensable, mais vivement conseillé.
link : Lien externe (nom de fichier, comme %file%). Une map a besoin d'un tileset, et le tileset a besoin d'une palette.
Indispensable pour: maps, tilesets (tous types).
tilex et tiley : Taille des tiles (mosaïques, blocs) d'une map.
Indispensable pour: maps (tous types).
depth : Profondeur (bits par élément) des maps et des tilesets. Pour une map, c'est soit 16 (mode texte), soit 8 (mode rotation), soit 32 (mode étendu). Pour un tileset, c'est soit 4 (16 couleurs), soit 8 (256 couleurs), soit 15 (32768 couleurs).
Pas indispensable, vous pouvez le remplacer par %type% qui contient type8, type16 ou type32 pour les maps. Mais au moins un des deux doit figurer car l'information est indispensable!
type : Voir %depth% plus haut.
bits : Ne plus s'en servir! Utiliser %depth% à la place.
null : Toujours vide. Utilisé pour importer d'anciens fichiers lorsque certaines valeurs (ou un passage variable) n'est pas intéressant. Lors de la lecture, GBA Graphics ne tiendra pas compte du contenu et à l'enregistrement, il n'écrira rien (champ vide).
gfxmask : Masque graphique, normalement indispensable pour les maps.
tilebase : Première mosaïque (de base). Normalement indispensable pour les maps.
model : Modèle de la liste d'objets.

## Définition des paramètres de listes d'objet

Pour les listes d'objets, le paramètre "element" peut prendre un format spécial pour indiquer qu'il faut utiliser un paramètre d'objet. Ces paramètres sont entourés par des dièses, et constituent les paramètres d'un seul objet (cette évaluation est réalisée pour chaque nouvelle ligne ou chaque nouvel objet). Voyons un exemple:

    DefFormat "monformat"		{
        liste		{
            element = "\n	{#type#, #x#, #y#},"
        }
    };

Ceci est un format tout simple. Vous pouvez y ajouter quelques paramètres. Le nom de ceux-ci est identique à celui qui est donné dans le modèle courant:

    DefFormat "monformat"		{
        liste		{
            element = '\n	{#type#, #x#, #y#, #param1#, "#param2#"},'
        }
    };

Param2 est une chaîne, il est entouré de guillemets. Mais bon, cette solution n'est pas idéale, car si vous utilisez plusieurs modèles, elle ne vous permet pas de définir une chaîne différente par modèle, ce qui vous oblige à n'en utiliser qu'un seul. A la place, on peut utiliser une commande de paramètres répétitifs.

    DefFormat "monformat"		{
        liste		{
            element = "\n	{#type#, #x#, #y##+param:', ':''#},"
        }
    };

Le #+param: indique la création d'une liste de paramètres. Ces paramètres seront gérés par le programme, et ce seront automatiquement ceux du modèle choisi pour cette liste. Vous suivez le : du texte qui précède chaque paramètre, entouré de guillemets, ici virgule puis espace, puis vous suivez le prochain point du texte à placer après chaque paramètre (ici rien du tout). Ainsi, après le #y# sera collé un ", " puis le nom du paramètre, puis rien du tout. Cela donnera donc #y#, #paramètre#, ce qui revient au même de faire comme ci-dessus.
Maintenant, petite spécificité, #param2# était entouré de guillemets. Qu'à cela ne tienne, comme vu plus dans le chapitre sur les modèles des Listes d'objets, il suffit de nommer le paramètre "<param2>" - ce qui signifie un guillemet avant et un après, et le tour est joué!

# Conversion en ligne de commande

Voici une nouvelle fonctionnalité qui vous permettra d'automatiser vos conversions. Elle est bien entendu accessible depuis le script GBA Graphics et elle évite la manière fastidieuse de lancer les conversions (en mettant la valeurs des contrôles un à un et lançant la conversion) utilisée dans les précédentes versions.

Globalement, tout se fait à partir de l'instruction "Conv" avec les paramètres nécessaires. Le principe de fonctionnement est le suivant: les paramètres sont insérés à la droite de "Conv", chacun séparé par un espace. Un paramètre consiste en son nom, éventuellement précédé d'un +, - ou !, et éventuellement suivi d'un = ainsi que de la valeur à prendre. Voici une description complète:
+ : Faire précéder le paramètre d'un '+' indique qu'il faut activer quelque chose. Par exemple, "+16c" activera le mode 16 couleurs.
- : Identique au +, mais désactive la chose correspondante. Dans ce cas, "-16c" désactivera le mode 16 couleurs (qui est une case à cocher dans l'interface graphique).
! : Identique à mettre la valeur grisée dans une case à cocher. Utilisée avec "util" et "upal" qui cocheront la case et règleront le texte (tileset ou palette) correspondante.
="valeur" : Certains paramètres ont besoin d'avoir un texte associé. Si vous spécifié un nom par exemple, il faudra indiquer lequel. Par exemple src="bitmap_source".

Vous pouvez spécifier tous les paramètres à la suite, séparés par un espace, et les changements seront appliqués en cascade. Voici un exemple:
Conv -tset bmp="fond" -gmap +16c +opt
Ceci convertira en utilisant la récupération de mosaïque (-tset) le fichier nommé "fond.bmp" (ici .bmp est l'extension par défaut), ne générera pas de map (-gmap), utilisera le mode 16 couleurs (+16c) et l'optimisation du tileset (+opt). Les paramètres non spécifiés prennent la valeur par défaut (mais c'est déconseillé pour les plus courants car ils pourraient changer).

Voici une liste de tous les paramètres possibles, ainsi que la valeur qu'ils peuvent prendre (entre guillemets):
1) Choix du type de conversion
Identique à afficher la page correspondante depuis l'arbre du projet, vous pouvez insérer l'un de ces paramètres pour spécifier quel type de conversion vous allez faire.
-tset : Conversion de type "Mosaïque"
-b8 : Conversion d'une bitmap 8 bits
-b16 : Conversion d'une bitmap 16 bits
2) Source et destination
Lorsque vous modifiez l'un de ces paramètres, les autres sont modifiés en cascade. Dans l'ordre des priorités, on trouve: le nom source, le nom du tileset, le nom de la palette, le nom de la map. Cela signifie que si vous modifiez la palette, cela modifie également la map car elle se trouve en-dessous dans l'ordre des priorités.
Les noms sont toujours indiqués sans extension. Si vous indiquez bmp="fond", les noms utilisés seront par exemple "fond.bmp", "fond.til.c", "fond.pal.c", "fond.map.c".
src="nom" : Permet de choisir le nom du fichier image à convertir. Si vous omettez l'extension, GBA Graphics déterminera lui-même le fichier à utiliser. C'est pratique mais cela requiert que vous n'ayez qu'un seul fichier portant ce nom dans le répertoire en question.
bmp="nom" : Identique à src.
dst="nom" : Nom du fichier destination. Tous les autres éléments prendront ce nom (si vous générez par exemple un tileset, une map et une palette, seules les extensions changeront).
Les suivants permettent de personnaliser le nom de chacun des fichiers de sortie:
til="nom" : Modifie le nom du tileset.
pal="nom" : Modifie le nom de la palette.
map="nom" : Modifie le nom de la carte.
Ceux-ci permettent de changer le nom du symbole (%name%) dans votre fichier.
name="nom" : Modifie le nom pour tous les fichiers.
nametil="nom" : Modifie le nom pour le tileset.
namepal="nom" : Modifie le nom utilisé pour la palette.
nameb8="nom" : Modifie le nom utilisé pour la bitmap 8 bits.
nameb16="nom" : Modifie le nom utilisé pour la bitmap 16 bits.
namemap="nom" : Modifie le nom utilisé pour la map.
Informations générales pour la conversion
col=nombre : Définit le nombre maximal de couleurs utilisables.
+upal="nom", -upal="nom" ou !upal="nom" : L'équivalent de la case à cocher combinée au combo qui permet de réutiliser une palette, avec le ! pour griser la case.
+util="nom", -util="nom" ou !util="nom" : Même chose que upal, mais pour le tileset.
Ces réglages n'ont d'effet qu'en mode récupération de mosaïques
+txt ou -txt : Active (+) ou désactive (-) le mode texte.
+16c ou -16c : Active ou non le mode 16 couleurs.
+gmap ou -gmap : Génère ou non une map.
+opt ou -opt : Optimise ou non le tileset.
mdim="128x128" (exemple) : Définit les dimensions de la map, comme sur l'interface graphique.
tdim="16x16" (exemple) : Définit la taille des tiles. La taille doit être valide.
cmode="15" (exemple) : Définit le mode de couleurs. Cela peut être 4 (16 couleurs), 8 (256 couleurs) ou 15 (32768 couleurs) bits.
mapmode="32" (exemple) : Définit le mode de maps: 8 (rotation), 16 (texte), 32 (étendu) bits.

# License

Vous pouvez utiliser ce programme gratuitement et librement pour une utilisation non-commerciale. Si vous voulez en faire une utilisation commerciale, contactez-moi.
Vous pouvez également le copier et le distribuer sans problème tant qu'il n'est pas modifié (peut-être que je le mettrai en GPL un de ces quatre).
Je ne suis pas responsable de l'utilisation que vous faites de ce logiciel, ni des problèmes qu'il pourrait engendrer! Utilisez-le à vos propres risques!
Egalement, si vous distribuez le programme, incluez ce présent fichier d'aide. Vous pouvez ainsi inclure le programme au dossier de ressources de votre projet et distribuer le tout sans problème.

Pour me contacter: f.bron@isuisse.com