Tutoriel Ren’Py

Le but de ce tutoriel est de permettre à un débutant de créer des jeux simples avec Ren’Py. Il ne s’agit pas d’une documentation exhaustive, et beaucoup de possibilités disponibles ne seront pas abordées. Il s’agit seulement de montrer à quel point il est simple de créer un jeu avec Ren’Py à partir de rien.

Le lanceur Ren’Py

Avant de faire un jeu, vous devriez d’abord prendre le temps d’apprendre comment fonctionne le lanceur Ren’Py. Le lanceur vous permet de créer, de gérer et de lancer vos projets Ren’Py.

Pour commencer Pour commencer, vous voudrez sans doute télécharger Ren’Py.

Une fois le téléchargement de Ren’Py terminé, il faudra extraire le contenu de l’archive. Cela se fait généralement en double-cliquant dessus, ou en faisant un clic droit et en choisissant l’option « extraire ici » ou bien « Ouvrir ». Suivez ensuite les instructions.

Launcher

Une fois que Ren’Py est décompressé, il ne vous reste qu’à le lancer.

  • Sur GNU-Linux, lancer le via le fichier renpy.sh.
  • Sur Windows, lancer Ren’Py via le fichier renpy ou renpy.exe.
  • Sur Mac OS X, lancer le via le fichier renpy.

Une fois cela fait, le lanceur Ren’Py devrait tourner.

Choisir et lancer un projet. Vous devriez d’abord regarder à quoi ressemble le jeu La Question. Pour faire cela, démarrer le lanceur Ren’Py et choisissez « La Question » sur la gauche. Puis « Lancer le projet » pour le lancer.

Vous pouvez voir la démo de Ren’Py en faisant la même chose, mais en choisissant « Tutoriel » au lieu de « La Question ».

Créer un nouveau projet. Pour créer un projet, choisissez « Créer un nouveau projet » depuis le lanceur. Le lanceur vous demandera alors de choisir un nom pour le projet. Puisque « the_question » est déjà pris, vous allez devoir choisir autre chose, par exemple « Ma Question ». La lanceur va ensuite vous demande de choisir un thème de couleur pour le projet. Peu importe ce que vous choisissez à cet endroit, prenez quelque chose qui vous plaît. Vous serez redirigé-e à l’accueil du lanceur, avec votre nouveau projet sélectionné.

Un jeu simple

label start:
    "Je vais lui demander..."

    "Moi" "Hum... est-ce que..."
    "Moi" "Est-ce que tu accepterais de m'aider à faire un Visual Novel ?"

    "Silence."
    "Elle est stupéfaite, puis..."

    "Sylvie" "Bien sûr, mais c'est quoi un \"Visual Novel\" ?"

Ceci est peut-être l’un des jeux Ren’Py les plus simples. Il ne contient aucune image ni rien de ce genre, mais montre une conversation entre les deux personnages.

Pour essayer cela, aller dans le lanceur et choisissez votre projet « Ma Question », et choisissez « script.rpy » sous « Éditer le fichier ». Ren’Py devrait vous demander de choisir un éditeur de texte, après quoi il téléchargera l’éditeur que vous aurez choisis. Quand cela sera fait, script.rpy s’ouvrira dans votre éditeur. Supprimez tout ce qui se trouve dans script.rpy, puisque nous allons tout faire à partir de rien, et vous n’avez donc pas besoin de ce qu’il y a là. Copiez l’exemple ci-dessus dans script.rpy, et sauvegardez le fichier.

Vous êtes maintenant prêt à lancer cet exemple. Retournez au lanceur, et choisissez « Lancer le projet ». Ren’Py va le démarrer. Remarquez comment, sans aucun travail supplémentaire de votre part, Ren’Py a ajouté des menus qui permet de charger et sauvegarder le jeu, et de changer des préférences multiples. Quand vous êtes prêt, cliquer sur « Lancer le projet », et jouer avec ce petit jeu d’exemple.

Cet exemple montre certaines des instructions les plus utilisées dans Ren’Py.

La première ligne est une instruction de label. Cette instruction est utilisée pour nommer un endroit dans le programme. Dans le cas présent, nous avons créé un label nommé start. Le label start est particulier, car c’est là où les scripts Ren’Py commencent à tourner lorsque l’utilisateur clique sur « Démarrer le Jeu » depuis le menu principal.

Les autres lignes sont des instructions de dialogue. La première est une chaîne de caractères (commençant par des guillemets doubles, contenant des caractères, et finissant par des guillemets doubles) sur une ligne avec rien d’autre, utilisée pour la narration, ou pour les pensées du personnage principal. La deuxième forme consiste en deux chaînes de caractères. Cela est utilisé pour les dialogues, la première chaîne étant le nom du personnage et la seconde, ce que le personnage dit.

Remarquez que toutes les instructions de dialogue sont indentées de quatre espaces. Ceci s’explique du fait qu’elles constituent un bloc de code pour l’instruction label. Dans Ren’Py, les blocs doivent être indentés par rapport aux lignes d’instructions auxquelles elles répondent, et toutes les lignes d’un même bloc doivent être indenté de la même manière.

Lorsque une chaîne de caractère contient des guillemets doubles, ces caractères doivent être précédés d’une barre oblique inversée (ou backslash (\)). C’est le cas à la dernière ligne de notre exemple.

Si ce jeu simple ne va pas très loin, c’est un exemple qui montre combien il est facile d’obtenir quelque chose dans Ren’Py. Nous allons bientôt ajouter les images, mais d’abord, regardons comment déclarer des personnages.

Personnages

Un problème que nous avons avec ce premier exemple, c’est qu’il nécessite que vous inscriviez de façon répétitive le nom de chaque personnage à chaque fois qu’il parle. Dans un jeu plein de dialogues, cela peut faire beaucoup à taper. Aussi, chaque nom de personne est afficher de la même manière, avec un texte blanc ennuyeux. Pour pallier cela, Ren’Py vous permet de définir des personnages au début du script. Cela vous permet d’associer un nom court au personnage, et de changer la couleur de son nom.

define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Moi', color="#c8c8ff")

label start:
    "Je vais lui demander..."

    m "Hum... est-ce que..."
    m "Est-ce que tu accepterais de m'aider à faire un Visual Novel ?"

    "Silence."
    "Elle est stupéfaite, puis..."

    s "Bien sûr, mais c'est quoi un \"Visual Novel\" ?"

Les deux premières lignes définissent des personnages. La première déclare un personnage avec un nom court « s », un nom long « Sylvie », avec un nom montré dans une couleur verdâtre. (Les couleurs sont encodée avec un triplet hexadécimal rouge-vert-bleu, comme c’est le cas sur les pages Web.)

Le seconde ligne déclare un personnage avec un nom court « m », un nom long « Moi », et un nom montré dans une couleur bleutée. D’autres personnages peuvent être définis en copiant l’une des deux lignes, et en changeant les noms court et longs et la couleur.

Nous avons aussi changer les instructions de dialogue pour utiliser les objets de type personnage au lieu des noms des personnages. Cela indique à Ren’Py d’utiliser les personnage que nous avons déclaré dans le bloc d’initiation.

Images

Un Visual Novel n’est pas un Visual Novel sans images ! Ajoutons quelques images à notre jeu.

image bg prairie = "prairie.jpg"
image bg fac = "fac.jpg"

image sylvie sourie = "sylvie_sourie.png"
image sylvie surprise = "sylvie_surprise.png"

define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Moi', color="#c8c8ff")

label start:
    scene bg prairie
    show sylvie sourie

    "Je vais lui demander..."

    m "Hum... est-ce que..."
    m "Est-ce que tu accepterais de m'aider à faire un Visual Novel ?"

    show sylvie surprise

    "Silence."
    "Elle est stupéfaite, puis..."

    show sylvie sourie

    s "Bien sûr, mais c'est quoi un \"Visual Novel\" ?"

La première chose dont nous avons besoin, c’est de déclarer les images. On utilise l’instruction image aux lignes 1, 2, 4 et 5, dans le bloc d’initiation. Ces instructions d’images donnent un nom à l’image, et le nom du fichier image correspondant.

Par exemple, la ligne 4 déclare une image nommée « sylvie sourie », trouvé dans le fichier « sylvie_sourie.png », avec l’étiquette « sylvie ».

Nous avons une instruction scene à la ligne 11. Cette instruction efface tout ce qu’il y a à l’écran, et montre l’image « bg prairie ». La ligne suivante est une instruction show, qui montre l’image « sylvie sourie » à l’écran.

La première partie du nom d’une image est son étiquette. Si une image est sur le point d’apparaître à l’écran, et qu’une autre image avec la même étiquette y est déjà, alors, l’image qui est déjà à l’écran est remplacée par la nouvelle. Cela arrive ligne 19, à la deuxième instruction show. Avant que la ligne 19 ne soit atteinte, l’image « sylvie sourie » est affichée à l’écran. Quand la ligne 19 est atteinte, cette image est remplacée par « sylvie surprise », puisque elles ont toutes les deux l’étiquette « sylvie ».

Pour que Ren’Py puisse trouver les fichiers images, ils doivent être placés dans le répertoire game du projet. Le répertoire game se trouve dans « Nom-du-projet/game/ », vous pouvez y accéder en cliquant sur « game » sous « Ouvrir le répertoire » dans le lanceur. Vous voudrez certainement copier les images depuis le répertoire « the_question/game/ » vers le répertoire « ma_question/game/ », pour alors pouvoir lancer cet exemple.

Ren’Py ne fait pas de distinction entre images et personnage ou de fond. En général, les images de personnages ont besoin de transparence, ce qui signifie qu’elles devraient être au format PNG. Les fonds peuvent être au format JPEG ou PNG. Par convention, les images de fond commencent avec l’étiquette « bg ».

Intruction hide Ren’Py fourni également une instruction hide, qui cache l’image indiquée.

label depart:

    s "Je vais aller droit au but !"

    hide sylvie

    "..."

    m "C'est pas ce que je voulais dire"

En fait c’est assez rare qu’il soit nécessaire d’utiliser l’instruction hide. On utilise show quand un personnage change d’émotion, et scene lorsque tous les personnages partent. Vous n’avez besoin d’utiliser hiden que lorsqu’un personnage quitte un scène qui reste la même.

Transitions

Voir les images apparaître et disparaître est un peu trop banal, alors Ren’Py implémente des transitions qui peuvent rendre les changement de scènes plus intéressants. Les transitions changent l’écran depuis ce à quoi il ressemblait à la fin de la dernière interaction (dialogue, menu ou transition), à ce qu’il doit être après une instruction scene, show ou hide.

label start:
    scene bg fac
    show sylvie sourie

    s "Oh, salut, je peux marcher avec toi ?"
    m "Oui..."
    "Ma voix était déjà en train de trembler."

    scene bg prairie
    with fade

    "Nous sommes arrivés aux prairies à l'entrée de notre village."
    "L'automne est si beau ici."
    "Quand on était enfants, nous jouions souvent ici."
    m "Hey... hummm..."

    show sylvie sourie
    with dissolve

    "Elle se tourna vers moi et me sourit."
    "Je vais lui demander..."
    m "Hum... est-ce que..."
    m "Est-ce que tu accepterais de m'aider à faire un Visual Novel ?"

L’instruction with doit être suivie du nom de la transition à utiliser. L’instruction la plus commune est dissolve qui dissous un écran vers le suivant. Une autre transition utile est fade, qui estompe l’écran jusqu’à ce qu’il devienne noir, et l’estompe à nouveau jusqu’à présenter le nouvel écran.

Lorsque une transition est placée après plusieurs instructions scene, show ou hide, elle s’applique à l’ensemble de ces instructions. Si vous écrivez :

    scene bg prairie
    show sylvie sourie
    with dissolve

Et « bg prairie » et « sylvie sourie » vont avoir un rendu fondu au même moment. Pour faire cela une photo à la fois, vous devez écrire deux instructions with:

    scene bg prairie
    with dissolve
    show sylvie sourie
    with dissolve

La première fait apparaître avec l’effet dissous « prairie » et ensuite, « sylvie ». Si vous vouliez afficher instantanément « prairie » puis montrer « sylvie », vous pouvez écrire :

    scene bg prairie
    with None
    show sylvie sourie
    with dissolve

Ici, « None » est utilisé pour indiquer une transition spéciale qui met à jour ce que Ren’Py devra afficher sans que rien ne soit encore affiché pour l’utilisateur.

Positionnements

Par défaut, les images sont centrées horizontalement, avec le bas de l’image aligné avec la bas de l’écran. Cela convient généralement pour les images de fond et les personnages seuls, mais lorsque l’on montre plus d’un personnage à l’écran, cela a du sens de changer le positionnement. Aussi, on pourrait vouloir choisir la position d’un personnage pour les besoins de l’histoire.

     show sylvie sourie at right

Pour effectuer ce positionnement, on ajoute un clause at à l’instruction show. La clause at est suivit d’une position. Ren’Py a déjà pré-définit plusieurs positions (en anglais) : left (gauche), right (droite), center (centre, position par défaut) et truecenter pour un centrage horizontal et vertical.

Il est possible de définir vos propres positions, et même des mouvements complexes, mais cela ne rentre pas dans le cadre de ce tutoriel.

Musique et son

La plupart des jeux ont une musique de fond. Dans Ren’Py, les fichiers musicaux sont joués en boucle automatiquement, jusqu’à ce qu’ils soient arrêtés. La musique est lancée via l’instruction play music.

    play music "illurock.ogg"

Lorsque vous changez de musique, vous pouvez ajouter une clause fadeout, pour une transition en fondu entre l’ancienne musique et la nouvelle.

    play music "illurock.ogg" fadeout 1.0

La musique peut être arrêtée avec l’instruction stop music, qui peut également prendre en option la clause fadeout.

    stop music

Les effets sonores peuvent être jouée via l’instruction play sound.

    play sound "effect.ogg"

Ren’Py supporte plusieurs formats audio, mais le format OGG Vorbis est conseillé. Tout comme les images, les fichiers audios doivent être placés dans le répertoire game.

Terminer le jeu

Vous pouvez terminer le jeu avec l’instruction return, sans aucun autre argument. Avant de faire cela, il est préférable d’afficher quelque chose dans le jeu qui indique que le jeu est fini, et peut être indiquer au joueur un numéro de fin ou un nom de fin.

    ".:. Happy End."

    return

C’est tout ce dont vous avez besoin pour créer une nouvelle animée. Maintenant, nous allons voir comment faire un jeu présentant des menus au joueur.

Menus, Labels et Sauts

L’instruction menu vous permet de présenter un choix au joueur

    s "Bien sûr, mais c'est quoi un \"Visual Novel\" ?"

menu:
    "C'est une histoire avec des images.":
         jump vn

    "C'est un jeu hentai.":
         jump hentai

label vn:
    m "C'est une histoire avec des images et de la musique."
    jump marry

label hentai:
    m "C'est un jeu coquin."
    jump marry

label marry:
    scene black
    with dissolve

    "--- des années plus tard ---"

Cet exemple montre comment les menus sont utilisés dans Ren’Py. L’instruction menu introduit un menu de jeu. Cette instruction est suivie d’un bloc de lignes, chacune de ces lignes consistent en une chaîne de caractères suivit de deux points. Ce sont les choix présentés au joueur. La choix doit être suivit d’un bloc d’une ou plusieurs instructions Ren’Py. Lorsque un choix est fait, les instructions le suivant sont parcourues.

Dans notre exemple, chaque choix du menu est suivit d’une instruction jump. L’instruction jump (saut) transfert le contrôle à un label défini par l’instruction label. Le code suivant ce label est alors parcouru.

Dans notre exemple au dessus, après la question de Sylvie, un menu contenant deux choix est présenté à l’utilisateur. Si l’utilisateur choisis « C’est une histoire avec des images. », la première instruction jump est parcourue, et le contrôle est transféré au label vn. Cela entraînera que la personnage « Moi » dira « C’est une histoire avec des images et de la musique. », après quoi le contrôle est transféré au label marry.

Les labels peuvent être définis dans n’importe quel fichier présent dans le répertoire game se terminant en .rpy. Peut importe le nom du fichier pour Ren’Py, seuls comptent les labels contenus dedans. Un label doit apparaître dans un seul fichier.

Python et instructions if

Alors que des jeux simple (et même assez complexes) peuvent être faits uniquement avec des menus et des sauts, au bout d’un moment il devient nécessaire de stocker les choix de l’utilisateur dans des variables pour y accéder plus tard. C’est ce à quoi sert le support de python dans Ren’Py.

On peut accéder au support de python via deux moyens. Une ligne commençant par un dollar ($) est une ligne simple d’instruction python, tandis que le mot clé « python: » est utilisé pour introduire un bloc d’instructions python.

Python permet de stocker facilement des drapeaux selon les choix du joueurs. Il vous suffit d’initialiser le drapeau au début du jeu :

label start:
    $ bl_game = False

Vous pouvez ensuite changer le drapeau dans le code choisis via les menus :

label hentai:

    $ bl_game = True

    m "C'est un jeu coquin."
    s "Tu veux dire, un jeu pour les garçons ?"
    s "J'ai toujours voulu en faire un."
    s "Je vais le faire tout de suite !"

    jump marry

Et vérifiez le plus tard:

"C'est ainsi que nous sommes devenus une équipe de création de Visual Novels"
"Nous avons fait des jeux et pris plein de plaisir à les faire."

if bl_game:
    "Enfin, à part pour pour le jeu pour garçon qu'elle a insisté qu'on fasse."

"Et un jour..."

Bien sûr, les variables pythons n’ont pas besoin d’être des simples True/False (Vrai/Faux). Elles peuvent être des valeurs pythons arbitraires. Elles peuvent être utilisées pour stocker le nom du joueur, un score, ou toute autre chose. Puisque Ren’Py inclus la possibilité d’utiliser l’ensemble du langage python, plein de choses sont possibles.

Distribuez votre jeu

Une fois que votre jeu est créé, il y a un certain nombre de choses que vous devriez faire avant de le distribuer :

Éditez options.rpy.
Le fichier options.rpy, créé lorsque vous créez un nouveau jeu, contient un certains nombre de paramètres que vous pourriez vouloir personnaliser. Certains, comme la hauteur et la largeur de l’écran, devraient probablement êtres établis avant la création du jeu. D’autres, comme le titre de la fenêtre, peuvent être établis n’importe quand.
Ajouter Ren’Py dans les remerciements.

Cette étape est totalement optionnelle, mais nous vous demandons si vous avez une page de remerciement dans votre jeu, de mentionner Ren’Py dedans. Nous suggérons quelque chose comme « Fait avec le moteur de Visual Novel Ren’Py », mais c’est juste une suggestion, et c’est à vous de choisir ce que vous écrivez.

Nous pensons que les jeux que font les gens sont la meilleure publicité pour Ren’Py, et nous espérons qu’en incluant ceci, vous aiderez d’avantage de gens à apprendre comment faire des Visual Novels avec Ren’Py.

Vérifier si une nouvelle version de Ren’Py est disponible.
De nouvelles version de Ren’Py sortent régulièrement, pour corriger les bogues et ajouter de nouvelles fonctionnalités. Vous devriez vérifier la page de télécharement pour voir si une nouvelle version est sortie. Vous pourriez aussi vouloir voir si des corrections de bogues sont disponibles sur cette page.
Vérifier le script.
Depuis le lanceur, choisissez « Vérifier le script (Lint) ». Cela va vérifier si vos jeux contiennent des erreurs qui peuvent toucher des utilisateurs. Ces erreurs peuvent toucher les utilisateurs de GNU-Linux ou Mac OS, il est donc important de les corriger toutes, même si vous ne les voyez pas sur votre ordinateur.
Construire les paquets.
Depuis la lanceur, choisissez « Contruire les paquets ». En se basant sur les informations contenues dans options.rpy, le lanceur va construire un ou plusieurs fichiers d’archives contenant votre jeu.
Tester.
Lint ne remplace pas le test minutieux. Il est de votre responsabilité de vérifier votre jeu avant de le distribuer. Songez à demander à vos amis de vous aider à tester votre jeu, souvent les testeurs trouvent des problèmes que vous ne pouvez pas trouver vous même.
Distribuez.

Vous devriez poster les fichiers générés (pour GNU-Linux, Windows et Mac OS) quelque part sur le Web, et dire aux gens de les télécharger depuis cet endroit. Félicitations, vous avez sorti votre jeu !

Merci aussi d’ajouter votre jeu à notre base de jeux, ainsi nous avons une idée des jeux Ren’Py créés.

Script de « The Question »

Vous pouvez voir le script complet de « The Question » ici.

Et maintenant ?

Ce démarrage rapide a montré une partie infime de ce que Ren’Py permet de faire. Afin de garder les choses simples, nous n’avons pas mentionner nombre de fonctionnalité présentes dans Ren’Py. Pour avoir une petite idée de ce que Ren’Py peut faire, nous suggérons de jouer à la démo, et de laisser Eileen vous montrer ces fonctionnalités.

Vous pourriez aussi vouloir lire le reste de la documentation, qui est le guide complet de Ren’Py.

Sur le site Web de Ren’Py, il y a une FAQ (en anglais) qui répond aux questions courantes, et un Livre de recettes (en anglais) donnant quelques bouts de code utiles. Si vous avez des questions, nous suggérons que vous les posiez sur les Forum. C’est le centre de la communauté francophone d’utilisateurs de Ren’Py, et nous y accueillons volontiers de nouveaux utilisateurs et leurs questions.

Merci d’avoir choisi le moteur de Visual Novels Ren’Py. Nous sommes impatients de voir ce que vous aller créer avec !