Day.png);">
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/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

News: Plein d'images cools créées par (...) / Sorties: Star Trek: Glorious Wolf - (...) / Jeux: Final Fantasy 2.0 / Sorties: Dread Mac Farlane - episode 2 / Sorties: Star Trek: Glorious Wolf / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

300 connectés actuellement

29106618 visiteurs
depuis l'ouverture

14315 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Eclipso

ConsoleFun

Leo-Games

Le Comptoir Du clickeur

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


❤ 0

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

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.
image 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."


<p class="margedix">

image 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.

image 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 (5899 messages postés) - honor

❤ 1

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

Sinon c'est cool !


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

❤ 0

The Inconstant Gardener

Merci RotS pour ce tuto. :3

Le matérialisme c'est quand tu as du matériel.

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 | 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/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | 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