Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV

Apprendre
RPG Maker

Guides
Tutoriels
Making-of

Dans le
Forum

Section Entraide

Jeux: Where the Moon Goes at Night / News: Un haricot dans la tete, des (...) / Jeux: Cure Seekers / Jeux: Princesse Emmentale / Interviews: Ccd-Tof / Chat

Bienvenue
visiteur !





Désactiver
la neige


publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

148 connectés actuellement

10847095 visiteurs
depuis l'ouverture

94 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Hellsoft

Planète Glutko

RPG Maker VX

RPG Maker Détente

Le Studio du Chat Vert

Level Up!

Alex d'Or

Tous nos partenaires

Devenir
partenaire



Ren'Py - Combiner les expressions faciales

L'image d'un personnage peut être composée de plusieurs couches (poses, vêtements, expressions faciales), ce qui permet de gérer toutes les combinaisons possibles.

Ecrit par Roi of the Suisse le 29/10/2020

Combiner expressions faciales

Souvent dans un Visual Novel, les personnages vont changer de pose, d'expression faciale, de vêtements.
Pour ne pas devoir préparer tous les combinaisons possibles entre ces divers éléments, RenPy offre la possibilité de construire l'image d'un personnage par couches.


Pour l'exemple, j'utiliserai ces quelques images :

bob_base.png
image

bob_content.png, bob_cool.png et bob_colere.png
image image image

bob_lunettes.png
image

Il est important que vos images n'aient pas d'espaces dans leur nom, sinon RenPy risque d'être confus à cause d'ambiguïtés. Préférez des tirets du bas (underscores) ! Si vous mettez des espaces dans vos noms d'images, vous allez avoir des bugs d'affichage sans comprendre d'où ils viennent.



Déclarer une image à couches

Pour déclarer une image à couches dans RenPy, nous n'allons pas utiliser le mot clé "image", comme pour les images plates, mais le mot clé "layeredimage".

Portion de code : Tout sélectionner

1
2
3
4
layeredimage bob:
    ...
 
define b = Character('Bob', color="#959500", image="bob")

Quand on définit juste après notre personnage "b", on mentionne la layeredimage en tant qu'image.

Je vais utiliser une couche pour la pose, une couche pour l'expression faciale, et une couche pour les accessoires. Chaque couche est déclarée avec le mot clé "group". Les couches sont déclarées dans l'ordre de superposition.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
layeredimage bob:
 
    group pose:
        ....
 
    group emotion:
        ....
 
    group accessoire:
        ....



Ensuite, je vais déclarer les différentes possibilités pour chaque couche avec le mot clé "attribute". Je vais donner un nom à chaque attribute, puis lier l'image qui correspond à cette variante.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
layeredimage bob:
 
    group pose:
        attribute debout default:
            "images/bob_base.png"
 
    group emotion:
        attribute content default:
            "images/bob_content.png"
        attribute cool:
            "images/bob_cool.png"
        attribute colere:
            "images/bob_colere.png"
 
    group accessoire:
        attribute lunettes:
            "images/bob_lunettes.png"


Notez le mot clé "default" apposé sur les attributes "debout" du group "pose" et "content" du group "emotion". Cela signifie que ce sont les variantes par défaut. Si on ne précise rien à RenPy, ce sont ces variantes qui seront utilisées.

Si les images de certaines couches (expressions faciales, accessoires...) sont beaucoup plus petites que l'image de base (pose), vous pouvez afficher le group avec un décalage (offset) en utilisant la commande pos(x,y) :

Portion de code : Tout sélectionner

1
2
3
4
5
6
    group emotion:
        pos (200, 100)
        attribute content default:
            "images/bob_content.png"
        attribute cool:
            "images/bob_cool.png"

Dans l'exemple ci-dessus, le coin haut-gauche des images d'expressions faciales seront décalées de 200 pixel vers la droite et de 100 pixels vers le bas.
Ne croyez pas que recadrer vos expressions faciales pour retirer la grande zone de vide tout autour sera d'une quelconque utilité. En réalité, Ren'Py optimise automatiquement les images contenant de la transparence, donc ça ne sert à rien de recadrer manuellement toutes vos images.



Utiliser l'image à couches dans le jeu

Voyons maintenant comment afficher notre image à couches lors du jeu.

On peut mentionner les attributes soit après la commande show, soit entre l'initiale du personnage et la ligne de dialogue.
J'ai préparé la scène suivante :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
label start:
    scene bikini bottom
 
    show bob
    b "Bonjour !"
    b colere "Je suis prêt..."
    b content lunettes "...pour aller pêcher la méduse !"



La commande suivante :

Portion de code : Tout sélectionner

1
show bob

va afficher "bob_base.png" (pose par défaut), "bob_content.png" (expression faciale par défaut) sans lunettes (aucun accessoire par défaut).
image

La commande suivante :

Portion de code : Tout sélectionner

1
b colere "Je suis prêt..."

va afficher "bob_base.png" (pose par défaut), "bob_colere.png" toujours sans lunettes.
image

La commande suivante :

Portion de code : Tout sélectionner

1
b content lunettes "...pour aller pêcher la méduse !"

va afficher "bob_base.png" (pose par défaut), "bob_content", et "bob_lunettes.png".
image


Remarquez que dès qu'un attribute est mentionné, cet attribut reste en place pour les lignes de dialogue suivantes, jusqu'à ce qu'un autre attribute du même group soit mentionné en remplacement.
Si vous ne souhaitez pas seulement remplacer un attribute par un autre attribute du même group, mais carrément l'effacer, c'est-à-dire que vous ne voulez plus afficher aucun attribute de ce group, c'est possible en plaçant un signe "-" devant l'attribute :

Portion de code : Tout sélectionner

1
b -lunettes "Je retire mes lunettes."




Petite subtilité :
Notez qu'on écrit

Portion de code : Tout sélectionner

1
show bob colere

mais

Portion de code : Tout sélectionner

1
b colere "Bonjour, grrr !"

parce que la commande "show" prend en paramètre une image (ici "bob") tandis que la ligne de dialogue nécessite un locuteur (ici "b").



Appliquer une transformation à une image à couches

Il est possible d'appliquer une transformation, par exemple un zoom ou une matrice colorimétrique, à une layeredimage avec le mot clé "at" :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
transform transformation_nuit:
    zoom 0.75
    matrixcolor TintMatrix("#7373bf")
 
layeredimage bob:
    group pose:
        ...
    group emotion:
        ...
    group accessoire:
        ...
    at transformation_nuit

Ici le "at" a été placé au même niveau que les groups, donc toute la LayeredImage sera teintée. Il est aussi possible de placer le "at" dans un group, au même niveau que les attributes, pour affecter uniquement une couche.

Remarque : les matrixcolors ne font leur apparition qu'à partir de la version 7.4 de RenPy.


Il est possible de faire la même chose de façon moins "RenPy" et plus "Python" avec la commande At() :

Portion de code : Tout sélectionner

1
2
3
4
5
transform transformation_nuit:
    zoom 0.75
    matrixcolor TintMatrix("#7373bf")
 
image bob_nuit = At(bob, transformation_nuit)

ou encore LayeredImageProxy() :

Portion de code : Tout sélectionner

1
image bob_nuit = LayeredImageProxy(bob, transformation_nuit)

Si vous bidouillez beaucoup votre Visual Novel en Python, ces commandes pourraient vous être utiles.

Consultez la documentation officielle de RenPy pour voir toutes les transformations que vous pouvez appliquer à une image : https://www.renpy.org/doc/html/atl.html



Pour aller plus loin avec les images à couches, consultez la documentation Ren'Py : https://www.renpy.org/doc/html/layeredimage.html


Gari - posté le 30/10/2020 à 09:43:09 (2814 messages postés) - staff -

❤ 1

gg RotS, tu as carrément pas capté à quel point les balises code en html étaient mortes :lol

Sinon c'est cool !

Sondage sur les concours d'Oniro : venez donner votre avis !


Nemau - posté le 04/11/2020 à 19:04:33 (43910 messages postés) - admin -

❤ 0

Hé hé! Tu vas te perdre dans Oniromancie. Hi hi! Bien fait!!

Merci RotS pour ce tuto. :3

Proposez vos news !TrombinoscopePolaris 03Planète Glutko • Doom Doom Doom Doom! I want you in my tomb!

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Articles perso | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Jeux complets | Tous les jeux | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers