❤ 0 Lorsque plusieurs personnages sont affichés à l'écran, il est préférable pour la lisibilité de la scène de griser/assombrir les personnages qui ne parlent pas.
Nous aurons besoin du nom du personnage tel qu'il a été défini dans "script.rpy". Pour ne pas avoir à taper le nom complet du personnage à chaque fois qu'on écrit une ligne de dialogue, il s'agit souvent d'une simple initiale.
1
2
| # Définir les personnages (nom, couleur, image)
define c = Character('Carlo', color="#1bcd7f") |
Dans cet exemple, le personnage est Carlo, mais on lui assigne des lignes de dialogue avec l'initiale "c".
1
2
3
4
5
| show c
with dissolve
c "Je m'appelle Carlo. Je suis un calamar."
c "Bienvenue à Bikini Bottom." |
Dans la section "init python", déclarez une fonction "image_personnage_muet" qui prend en paramètre le nom de l'image et l'initiale du personnage.
1
2
3
4
5
6
7
8
9
| init python:
# --------------------------------------------------
# Fonction : griser les personnages muets
# --------------------------------------------------
def image_personnage_muet(nom, initiale):
matrice_muet = im.matrix.brightness(-0.25) * im.matrix.saturation(0.5)
return ConditionSwitch(
"_last_say_who == '"+initiale+"'", nom,
"not _last_say_who == '"+initiale+"'", im.MatrixColor(nom, matrice_muet) ) |
On commence ici par définir une matrice "matrice_muet" qui servira à griser les images des personnages qui ne parlent pas. Elle est le produit de deux matrices :
- baisse de la luminosité avec "im.matrix.brightness(-0.25)", qui prend un argument entre -1 (image toute noire) et 1 (image toute blanche. 0 signifie que l'image n'est ni obscurcie, ni éclaircie.
- baisse de la saturation avec "im.matrix.saturation(0.5)", qui prend un argument entre 0 (image en niveaux de gris, noir et blanc) et 1 (image aux couleurs inaltérées)
Ici l'image sera donc légèrement assombrie, et légèrement ternie. Vous pouvez jouer avec ces deux paramètres pour obtenir le grisement que vous voulez.
Le "ConditionSwitch" va retourner une image dynamique, qui s'adaptera automatiquement si le personnage parle ou ne parle pas ! Dans le cas où le "_last_say_who" (dernier interlocuteur) correspond à l'initiale, l'image inchangée sera utilisée. Au contraire, si le "_last_say_who" ne correspond pas à l'initiale, l'image grisée sera employée.
Vous pouvez maintenant utiliser cette fonction pour déclarer une image dynamique en même temps que vous déclarez le personnage :
1
2
3
| # Définir les personnages (nom, couleur, image)
define c = Character('Carlo', color="#1bcd7f")
image c = image_personnage("images/characters/Carlo.png", "c") |
les personnages qui ne parlent pas sont grisés
Pour aller plus loin avec les matrices de modification d'images, consultez la documentation de Ren'Py : https://www.renpy.org/doc/html/displayables.html
|