Aller au contenu

Travailler dans l'App

L'App a trois onglets : Projets, Assets graphiques et Cartes. Les mots qu'ils emploient, projet, bundle, attache, groupe, release, sont définis dans Projets, bundles, releases.

Projets

La liste de mes projets ; pour le projet choisi : ses fichiers (créer, envoyer, supprimer, jamais main.lua), ses bundles attachés (voir, éditer, ce qui ouvre l'onglet Assets graphiques, délier, lier), publier, télécharger, supprimer. Un troisième panneau montre le contenu du bundle choisi, en lecture seule.

Assets graphiques

La bibliothèque RAW (charger, voir, supprimer) et les bundles : en créer un, y ajouter et retirer des assets avec leurs réglages (alpha en additif / translucide / tramé / seuil, « derrière le fond »), Calculer la palette, qui produit la palette, l'atlas et les pages indexées ; en éditer un (rouvrir la recette, recalculer) ; en supprimer un s'il n'est attaché nulle part. Puis les variantes et les fonds.

La bibliothèque ne reçoit que des sprites : un animé, c'est une ligne d'animation par chargement. Les fonds et les tilesets viennent de l'onglet Cartes, qui en est le seul producteur. Le flux « image continue, puis regroupement » passe par le calcul du bundle uniquement.

Importer une planche. Une planche disposée en grille N×M est détectée automatiquement et devient une bande d'animation.

Cartes

Un mini Tiled : on y dessine des tuiles de 8×8 (RGBA, la tuile 0 est le trou) et on les peint sur un monde aux bornes de la console (de 80×60 à 256×128 tuiles, 704 tuiles au plus). La carte est la source, éditable à volonté ; « Envoyer comme fond » l'aplatit en image et la dépose dans la bibliothèque comme asset de genre fond du même nom (le dépôt remplace). La chaîne des bundles est inchangée et retrouve d'elle-même les tuiles dessinées, puisqu'elles se répètent. Supprimer la carte ne supprime pas l'asset envoyé.

Au-dessus du 8×8, les tampons (16, 24, 32) : des grilles d'ids de tuiles de base, le modèle des métatuiles. Le monde reste une grille d'ids 8×8, toute la chaîne aval ignore les tampons. Un tampon se compose dans l'atelier en peignant sa grille avec un pinceau plus petit, posé au pas de 8 px (et rogné aux bords) ; le même moteur de peinture sert le monde, où le pinceau est une tuile ou un tampon de n'importe quel côté. La peinture au pixel est réservée au 8×8, la source de vérité : retoucher une tuile de base se répercute dans tous les tampons et toute la carte.

« Importer une planche » (_T.png, T ∈ {8, 16, 24, 32}) la décompose en tuiles de base dédupliquées, importer du 24 remplit aussi la barre 8×8, et en tampons ; un import qui déborderait les 704 est refusé avec le compte, avant d'écrire quoi que ce soit.

Chaque tuile porte un tag solide ; « Écrire <carte>.mask » génère le masque de collision dans un projet du compte, à côté du code qui fera phy.map("<carte>"). Une case du masque = une tuile (8×8) : la géométrie du masque est exactement celle du dessin. Une seule géométrie, dessinée une fois : le décor et le masque ne peuvent plus se contredire.

La recette d'un bundle

Un bundle se rouvre : l'éditeur retrouve ce qui a été gardé, les assets dans l'ordre, le nom vu par le jeu, le mode d'alpha (additif / translucide / tramé / seuil), le contour (aucun / fondu / sombre), « derrière le fond », et l'animation en trois états : auto (la mesure de l'App tranche, c'est le défaut), oui (une animation, une ligne), non (des sprites distincts, une ligne chacun). Le plan des rangées appartient au bundle.

« Calculer la palette » rejoue tout dans le navigateur, avec le moteur du simulateur. « Enregistrer » poste les pièces et la recette, et remplace le bundle sous le même nom : un bundle ne se renomme pas, un autre nom serait un autre bundle.

Un bundle attaché à des projets le dit, et les nomme : le recalculer change ce qu'ils publieront la prochaine fois, et il ne se supprime pas tant qu'il est attaché. Un asset employé par un bundle ne se supprime pas non plus.

La bannière « à recalculer »

Un bundle est un produit compilé : redéposer un asset dans la bibliothèque ne le recalcule pas. L'App signale un bundle en retard sur sa recette, et il le reste tant que vous ne l'avez pas recalculé.

Les fonds

Un fond est un asset de genre fond : le monde entier en une image RGBA, dimensions multiples de 8, 2048×1024 au plus (la carte de tuiles de la carte fait 256×128 tuiles) ; les pixels transparents sont le trou. Dans la recette d'un bundle il n'a pas de réglage : il est quantifié avec les sprites du groupe (une seule palette, c'est toute la raison de sa présence) puis tuilé : tuiles 8×8 distinctes par fréquence décroissante, la tuile 0 = le trou, 704 au plus ; au-delà, regroupement par similarité (k-moyennes en couleur, moyenne de groupe reprojetée sur les index employés) : une image continue devient une mosaïque douce au lieu d'un remplacement brutal, et la perte est comptée. Hors atlas, hors pool.

Il produit deux pièces, rangées sous son nom court (grotte) : la carte texte et la planche des tuiles (PNG indexé, 32 tuiles par rangée). À la sortie elles prennent le préfixe du groupe : niveau1-grotte.map et niveau1-grotte-tiles.png dans une release (le nom de l'attache), caverne-… dans le zip du bundle (le nom propre du bundle), parce que gfx.bundle() rattache un fond à son groupe par ce préfixe. Le jeu écrit gfx.background("niveau1-grotte").

Les variantes

Une variante, <groupe>.<variante>.pal, c'est les mêmes index, d'autres couleurs : jour/nuit, flash ; aucune image, et gfx.palette("<groupe>.<nom>") bascule en temps réel.

Dans l'App, une variante est définie par ses réglages (teinte, saturation, luminosité appliqués à la palette du bundle) et le .pal dérivé ; la page redérive les couleurs à chaque « Calculer la palette », donc un recalcul du bundle ne désynchronise jamais ses variantes. Les modes de mélange restent ceux du bundle : une variante ne change jamais les rangées, c'est sa définition, et l'App le refuse. L'aperçu « sur la console » peut s'afficher dans une variante. À la sortie, le préfixe est celui du groupe : niveau1.nuit.pal dans la release, caverne.nuit.pal dans le zip du bundle.