1. home >
  2. Large Language Artefacts >
  3. yassine >
  4. smiley

November 22nd at 11:59am


smiley

Smiley sur Aseprite

Prompt: Crée un script Lua pour Aseprite qui génère un emoji kawaii en pixel art de 64x64 pixels, inspiré des emojis. Le script doit suivre strictement les consignes ci-dessous pour garantir un rendu précis et permettre des variations futures :

Vérification initiale et configuration : Vérifie si l'interface utilisateur d'Aseprite est active en utilisant app.isUIAvailable. Si elle n'est pas active, affiche une alerte claire et arrête le script. Configure le mode de couleur du sprite en ColorMode.RGB. Assure-toi que l'option soit bien définie au moment de la création du sprite, sans la modifier par la suite (Aseprite ne permet pas de changer le colorMode une fois défini). Crée un sprite de 64x64 pixels avec une seule image et accède à la cellule et à l'image correspondantes. Couleurs définies pour l’emoji : Jaune principal (visage) : #FFCC00 (RGBA: 255, 204, 0, 255). Highlight jaune clair (front) : #FFE680 (RGBA: 255, 230, 128, 255). Shading inférieur (ombrage) : #E0A310 (RGBA: 224, 163, 16, 255). Contour dégradé : Couleur en haut : #685200 (RGBA: 104, 82, 0, 255). Couleur en bas : #2F2500 (RGBA: 47, 37, 0, 255). Noir pour les détails (yeux, bouche) : #000000 (RGBA: 0, 0, 0, 255). Structure et proportions du visage : Dessine un ovale jaune, allongé verticalement, centré à (32, 32). Les dimensions de l’ovale doivent être définies avec un rayon horizontal de 30 pixels et un rayon vertical de 28 pixels. Ajoute un contour externe dégradé autour de l'ovale, d'une épaisseur de 1 pixel. Ce contour doit aller de la couleur #685200 (en haut) à #2F2500 (en bas), en utilisant une interpolation linéaire verticale pour obtenir un effet progressif et naturel. Highlight et shading du visage : Place un highlight (lumière) jaune clair sur le front. Ce highlight doit être centré légèrement au-dessus du milieu de l’ovale (par exemple autour de (32, 14)) et prendre la forme d’un petit ovale horizontal de 20 pixels de largeur et 5 pixels de hauteur. Assure-toi que ce highlight soit doux et reste intégré au visage. Ajoute un shading (ombrage) plus marqué sur la partie inférieure de l'ovale, en mélangeant la couleur jaune principale avec #E0A310. Le shading doit couvrir environ 40 % de la hauteur inférieure de l’ovale, avec une interpolation verticale douce et progressive. Détails des yeux : Les yeux doivent être deux cercles noirs centrés respectivement à (22, 22) pour l’œil gauche et (42, 22) pour l’œil droit. Chaque œil doit avoir un rayon de 6 pixels. À l’intérieur de chaque œil, ajoute un highlight kawaii sous la forme d’un petit cercle jaune clair (#FFE680) de 2 pixels de rayon, placé dans le coin supérieur gauche de chaque œil (décalé de 2 pixels vers le haut et la gauche par rapport au centre des yeux noirs). Bouche souriante : Dessine une bouche souriante en arc de cercle noir sous la forme d’un segment inférieur d’un cercle. Le centre de ce cercle doit être situé à (32, 38) et son rayon doit être de 12 pixels. La bouche ne doit inclure que les parties où dy > 0 (c'est-à-dire uniquement le bas de l’arc de cercle). Modifications et variations dynamiques : Le script doit inclure des fonctions ou des paramètres ajustables pour permettre des modifications futures des expressions faciales (par exemple : remplacer la bouche souriante par une bouche triste, changer la forme ou la taille des yeux, etc.). Ajoute un paramètre permettant de modifier la taille globale du sprite (par exemple, passer de 64x64 à une taille personnalisée) tout en recalculant proportionnellement les positions et dimensions des éléments (visage, yeux, bouche, etc.). Permets de changer les couleurs globales, notamment la couleur principale, les ombrages, le contour et les détails. Mise à jour et finalisation : Une fois le dessin terminé, appelle app.refresh() pour mettre à jour l’affichage dans Aseprite. Exigences supplémentaires :

Le script doit être structuré de manière modulaire pour permettre une extension facile. Par exemple, chaque section du dessin (visage, yeux, bouche) doit être dans une fonction distincte. Fournis des commentaires clairs et détaillés dans le code pour expliquer chaque étape. S’assure que le script est compatible avec la dernière version d’Aseprite. Une fois le script écrit, tu dois rester absolument fidèle au script de base et te baser sur ce script pour générer d’autres expressions faciales ou smileys.smileys

smileys

emoji_generator.lua

return { face = { size = 64, -- Taille globale de l'emoji radius = {30, 28}, -- Rayon horizontal et vertical du visage color = {255, 102, 0}, -- Visage orange vif highlight = {255, 153, 51}, -- Highlight lumineux pour un effet festif shade = {204, 85, 0}, -- Ombres plus sombres pour donner de la profondeur gradientTop = {255, 51, 51}, -- Contour haut rouge vif gradientBottom = {153, 0, 0} -- Contour bas sombre pour un effet énergique }, eyes = { positions = {20, 44, 22}, -- Positions des yeux (gauche, droite, hauteur) radius = 8, -- Taille des yeux plus grande pour un effet expressif color = {0, 0, 0}, -- Noir profond pour les yeux highlight = {255, 255, 255} -- Blanc éclatant pour des reflets intenses }, mouth = { position = {32, 46}, -- Position de la bouche (centre X, centre Y) radius = 14, -- Taille plus grande pour une bouche exagérée color = {255, 0, 102} -- Rose éclatant pour un effet fun et dynamique } }

-- Emoji Generator with Lua Configuration -- Auteur : ChatGPT

-- Vérification de l'interface utilisateur if not app.isUIAvailable then app.alert("L'interface utilisateur n'est pas disponible. Le script s'arrête.") return end

-- Charger le fichier de configuration Lua local configPath = app.fs.joinPath(app.fs.userConfigPath, "emoji_config.lua") local config = dofile(configPath) if not config then app.alert("Erreur : Impossible de charger la configuration depuis emoji_config.lua.") return end

-- Récupération des paramètres local spriteSize = config.face.size local faceRadiusX, faceRadiusY = table.unpack(config.face.radius) local colors = { face = Color{r=config.face.color[1], g=config.face.color[2], b=config.face.color[3], a=255}, highlight = Color{r=config.face.highlight[1], g=config.face.highlight[2], b=config.face.highlight[3], a=255}, shade = Color{r=config.face.shade[1], g=config.face.shade[2], b=config.face.shade[3], a=255}, gradientTop = Color{r=config.face.gradientTop[1], g=config.face.gradientTop[2], b=config.face.gradientTop[3], a=255}, gradientBottom = Color{r=config.face.gradientBottom[1], g=config.face.gradientBottom[2], b=config.face.gradientBottom[3], a=255}, eyes = Color{r=config.eyes.color[1], g=config.eyes.color[2], b=config.eyes.color[3], a=255}, eyeHighlight = Color{r=config.eyes.highlight[1], g=config.eyes.highlight[2], b=config.eyes.highlight[3], a=255}, mouth = Color{r=config.mouth.color[1], g=config.mouth.color[2], b=config.mouth.color[3], a=255}, }

emoji_config.lua

local eyePositions = config.eyes.positions local eyeRadius = config.eyes.radius local mouthPosition = config.mouth.position local mouthRadius = config.mouth.radius

-- Création du sprite local sprite = Sprite(spriteSize, spriteSize, ColorMode.RGB) local image = sprite.cels[1].image

-- Fonctions de dessin local function drawOval(image, centerX, centerY, radiusX, radiusY, color) for y = -radiusY, radiusY do for x = -radiusX, radiusX do if ((x x) / (radiusX radiusX) + (y y) / (radiusY radiusY)) <= 1 then image:drawPixel(centerX + x, centerY + y, color) end end end end

local function drawGradientOutline(image, centerX, centerY, radiusX, radiusY, topColor, bottomColor) for y = -radiusY-1, radiusY+1 do for x = -radiusX-1, radiusX+1 do local distance = ((x x) / (radiusX radiusX) + (y y) / (radiusY radiusY)) if distance > 1 and distance <= 1.1 then local t = (y + radiusY + 1) / (2 radiusY + 2) local gradientColor = Color{ r = math.floor(topColor.red (1-t) + bottomColor.red t), g = math.floor(topColor.green (1-t) + bottomColor.green t), b = math.floor(topColor.blue (1-t) + bottomColor.blue * t), a = 255 } image:drawPixel(centerX + x, centerY + y, gradientColor) end end end end

local function drawEyes(image, leftX, rightX, centerY, radius, eyeColor, highlightColor) local highlightOffset = 2 drawOval(image, leftX, centerY, radius, radius, eyeColor) drawOval(image, rightX, centerY, radius, radius, eyeColor) drawOval(image, leftX - highlightOffset, centerY - highlightOffset, 2, 2, highlightColor) drawOval(image, rightX - highlightOffset, centerY - highlightOffset, 2, 2, highlightColor) end

local function drawSmile(image, centerX, centerY, radius, color) for y = 0, radius do for x = -radius, radius do if (x x + y y) <= (radius * radius) then image:drawPixel(centerX + x, centerY + y, color) end end end end

local function drawFace() drawOval(image, spriteSize // 2, spriteSize // 2, faceRadiusX, faceRadiusY, colors.face) drawGradientOutline(image, spriteSize // 2, spriteSize // 2, faceRadiusX, faceRadiusY, colors.gradientTop, colors.gradientBottom) drawOval(image, spriteSize // 2, spriteSize // 2 - 18, 20, 5, colors.highlight) drawEyes(image, eyePositions[1], eyePositions[2], eyePositions[3], eyeRadius, colors.eyes, colors.eyeHighlight) drawSmile(image, mouthPosition[1], mouthPosition[2], mouthRadius, colors.mouth) end

drawFace() app.refresh()


Liste des références associées au projet