Script Scheme
De WikiPlee.
Les scripts Scheme sont utilisés dans la création des sprites et des animations, pour simplifier la création de l'image regroupant les sprites (ou les frames). Ils sont utilisés conjointement avec Gimp. Cette page présente les fonctions utilitaires fournies par le fichier data/common.scm des donnés du jeu.
Sommaire |
[modifier] Quelques notions
[modifier] Donner un nom à une valeur
Pour éviter d'avoir à répéter la même valeur plusieurs fois dans un script (l'indice d'un calque par exemple), le plus simple est de lui donner un nom. Un avantage est que si une valeur doit changer, il n'y a qu'un seul endroit à changer. La syntaxe pour donner un nom à une valeur est une commande let suivie de paires (nom valeur) :
(let ( (nom-1 valeur-1) (nom-2 valeur-2) … (nom-n valeur-n) ) ; utiliser ces noms ici ) ; let
Les valeurs nommées sont utilisables entre les parenthèses qui encadrent le let.
Un autre avantage est que cela simplifie la lecture du script en donnant un sens aux valeurs. Par exemple, si le script est
(set-layer-position 0 0 0)
La compréhension du sens des trois zéros demande une réflexion. Par contre, avec quelque chose comme
(let ((indice-layer 0) (x 0) (y 0)) (set-layer-position indice-layer x y) ) ; let
Le lecteur comprend tout de suite le sens des trois paramètres.
[modifier] Lister des valeurs
Il y a deux principales façons de faire une liste en Scheme. Elle sont présentées dans cette section. Ces exemples utilisent la fonction in-list présentée plus bas.
Si la liste ne contient de valeurs nommées, il faut utiliser le mot clé list
(let ( (a 1) (b 5) (c 6) ) (in-list (list a b c) 6) ) ; let
Si elle ne contient que des valeurs directes, l'utilisation de l'apostrophe est de rigueur
(in-list '(1 5 6) 6)
Attention, le code suivant ne fonctionne pas
(let ( (a 1) (b 5) (c 6) ) (in-list '(a b c) 6) ) ; let
[modifier] Exécuter un script
La ligne de commande pour exécuter un script, nommé par exemple script.scm, depuis le dossier du script est
gimp-console -b - < script.scm
Les paramètres -b - disent à Gimp de lire des commandes Scheme sur l'entrée standard et < script.scm écrit le contenu du script sur l'entrée standard de Gimp.
[modifier] common.scm
Le fichier data/common.scm contient quelques fonctions utilitaires visant à faciliter la création d'une image contenant plusieurs sprites. Cette section présente ces fonctions. Les plus utiles sont néanmoins create-layer, create-layer-crop et save-frames-and-exit.
[modifier] in-list
La fonction in-list prend en paramètres une liste puis un élément à chercher dans cette liste. Si l'élément est dans la liste, la fonction retourne la valeur booléenne vrai, sinon elle retourne faux.
[modifier] set-layer-position
La fonction set-layer-position change la position d'un calque. Elle prend une image en paramètre, suivie de l'indice du calque à déplacer, puis l'abscisse et l'ordonnée de la nouvelle position. Le coin en haut à gauche du calque sera placé à cette position.
[modifier] show-layers
La fonction show-layers prend en paramètres une image et une liste d'indice de calques appartenant à l'image. Elle affiche dans l'image tous les calques de la liste et masque les autres.
[modifier] shift-layers
La fonction shift-layers change la position d'un ensemble de calques en bouclant leur contenu. Le résultat est celui du menu Calque/Transformer/Décalage avec l'option Reboucler sélectionnée. Elle prend en paramètres une image, une liste d'indices de calques de cette image, puis l'abscisse et l'ordonnée de la nouvelle position des calques. Le coin en haut à gauche des calques sera placé à cette position.
[modifier] set-layer-mask
La fonction set-layer-mask utilise un calque comme masque pour un autre puis met le résultat dans une autre image. Ses paramètres sont une image source, une liste d'indices de calques de cette image à utiliser comme masque puis une image de destination. Le masque est appliqué au calque actif de l'image de destination.
[modifier] set-layer-opacity
La fonction set-layer-opacity prend en paramètres une image, une liste d'indices de calques dans cette image et un nombre réel entre 0 et 100. Elle donne l'opacité correspondant à cette valeur aux calques de la liste.
[modifier] create-layer
La fonction create-layer crée un calque dans une image à partir d'une copie d'une autre image. Ses paramètres sont, dans l'ordre,
- l'image source, à copier ;
- une liste des calques à afficher dans l'image source avant de faire la copie ;
- l'abscisse de la copie dans l'image de destination ;
- l'ordonnée de la copie dans l'image de destination ;
- la largeur de la copie dans l'image de destination ;
- la hauteur de la copie dans l'image de destination ;
- l'image de destination.
[modifier] create-layer-crop
La fonction create-layer-crop crée un calque dans une image à partir d'une copie d'une autre image, d'une façon similaire à create-layer, sauf qu'elle permet de ne prendre qu'une partie de l'image source et de lui appliquer un masque. Ses paramètres sont, dans l'ordre,
- l'image source, à copier ;
- une liste des calques à afficher dans l'image source avant de faire la copie ;
- l'abscisse de la partie à copier dans l'image source ;
- l'ordonnée de la partie à copier dans l'image source ;
- la largeur de la partie à copier dans l'image source ;
- la hauteur de la partie à copier dans l'image source ;
- l'abscisse de la copie dans l'image de destination ;
- l'ordonnée de la copie dans l'image de destination ;
- la largeur de la copie dans l'image de destination ;
- la hauteur de la copie dans l'image de destination ;
- l'image de destination ;
- une liste de calques dans l'image source à utiliser comme masque.
[modifier] save-frames
La fonction save-frames sauvegarde une image. Ses paramètres sont le nom du fichier et l'image à enregistrer.
[modifier] save-frames-and-exit
La fonction save-frames-and-exit enregistre une image, comme save-frames, puis ferme le programme. Elle est à appeler en dernier dans le script. Si il n'y a pas d'image à sauvegarder, la commande suivante fermera le programme :
(gimp-quit 1)

