Derniers sujets

[Tuto Ren'Py] Les dialogues avancés (**)

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Tuto Ren'Py] Les dialogues avancés (**)

Message par Ryouzanki le Jeu 10 Jan 2013 - 2:15

Bonsoir,

Commentaire
Bon, vous êtes assez nombreux à m'avoir posé ce genre de question en MP sur comment on demande le nom d'un joueur etc... Effectivement, y'a pas de tuto dessus parce que c'est assez complexe et assez rare dans les VN de donner un nom. Certains m'ont aussi demandé comment on gère le facteur aléatoire comme dans le pierre-feuille-ciseau de mon VN

Connaissances requises :
- Variables lvl 2 (**)
- Menu lvl 2 (**)

A quoi ça sert ?
Demander à l'utilisateur d'entrer des données. Gérer le facteur hasard. Embellir les dialogues.

A quoi ça ressemble ?
Désolé, j'ai assez la flemme de prendre des captures d'écran pour ça... J'ai décomposé mon jeu en plusieurs étapes :
-Le jeu va me demander mon nom.
-Ensuite, il va me demander sur quel forum j'ai trouvé ce tuto.
-Si je réponds faux, je meurs dans d'atroce souffrance et c'est le GAME OVER.
-Si je réponds juste, le jeu jette un dé et moi aussi.
-Si le jeu fais plus que moi, je meurs aussi dans d'atroce souffrance. Sinon, je gagne.
-Divers commandes HS qui embellissent le dialogue

Mais comment tu fais ça ?
Nous savons utiliser les variables et les menus. Il ne reste plus qu'à combiner les deux avec des fonctions spéciales.

D'abord, créons une variable qui demande son nom au joueur. En cherchant sur internet, on trouve la formule suivante :
Code:
$ name = renpy.input("What is your name?", "Joe User", length=20)
Lorsque celle-ci se lance, elle affichera dans la zone de texte "What is your name?" avec un nom déjà écrit par défaut "Joe User". Pour ne pas mettre de nom par défaut, ne mettez rien tout simplement. "length=20" indique que le joueur peut rentrer au maximum 20 lettres latines.

Pour ma part, ma version utilisée dans mon VN (route homme) est légèrement différente. Pour éviter les noms vides, j'ai la formule :
Code:
$ j = renpy.input("Il y avait bien mon prénom :", "Minato", length=15) or "Minato"
"j" étant le nom de la boite dans laquelle sera stocké le prénom.
"Il y avait bien mon prénom :" la phrase affichée à l'écran.
"Minato" le prénom écrit par défaut.
Dans ce cas là, c'est quoi le "or "Minato"" en plus de la première formule ? C'est pour attraper les petits malins qui ne mettent pas de nom. Si tu effaces tout et que tu appuies sur entrée, ça te mettra Minato comme prénom, tu peux essayer toi même Wink

Maintenant que le nom a été stocké, on peut l'utiliser comme une variable normale dans un nom, un dialogue... On peut aussi l'utiliser pour créer un personnage (voir le tuto de création de personnage, vous remplacez les guillemets
Code:
name "[name]"
"Ordinatueur" "Comment allez vous, [name] ?"
name "Je veux vivre, j'ai une famille avec 74 enfants à nourrir moi !"
"Ordinatueur" "Oh ? Où avez vous trouvé ce tuto ?"
La formule que je vous ai donné peut servir pour les noms mais à la base, elle sert juste pour les variables en général. On peut donc la réutiliser :
Code:
$ reponse = renpy.input("J'ai trouvé ce tuto sur :", length=10)
if reponse == "Sekai":
    pass
else:
    "Ordinatueur" "Mauvaise réponse. Je vous condamne à écouter PON PON PON jusqu'à ce que mort s'en suive et mort s'en suivra."
    name "AAAAAAAAAAAAAAAAAAAAAAAAAAAHHHHHH !!!!!"
    return
"Ordinatueur" "Bonne réponse."
"Ordinatueur" "Jouons à un jeu de dé."
$ jet_ordi = renpy.random.randint(5,6)
Voilà, l'ordinateur a jeté le dé. A notre tour :
Code:
$ jet_joueur = renpy.random.randint(1,4)
Donc voilà, on a aussi jeté le dé. On compare les résultats avec un "if jet_ordi > jet_joueur" mais là, ce ne sera pas la peine parce que si vous regardez attentivement le code des 2 dernières balises, vous comprendrez que comme dirait César : "Alea jacta est" (= "les dés sont jetés") XD

Sur ce, je m'en vais écouter du PON PON PON en boucle, sauvez moi D:

Bon, il reste deux choses à vous apprendre pour le dialogues, les deux dernières que je connais, courage ! Smile

Pour créer un personnage avec un nom qui change, on utilise :
Code:
$ moi = DynamicCharacter("mon_nom")
Attention avec cette commande ! Il faut que "mon_nom" soit une variable créée AVANT d'appeler cette commande ou Ren'Py vous dira qu'il n'arrive pas à trouver "mon_nom". (Ce qui est vrai)
Puis vous pouvez changer "mon_nom" à volonté. La commande utilisée dans le VN pour Elusia est par exemple :
Code:
$ e = DynamicCharacter("fille", color="#FF69B4", show_two_window=True)
Avec "fille" une variable contenant les mots "Jeune fille". Donc au début, quand elle parle, on voit écrit "Jeune fille" puis quand elle se présente, j'ai juste à faire :
Code:
$ fille = "Elusia"
Et *POUF*, elle change de nom !
L'option color sert à indiquer la couleur de son prénom et l'option suivante... Bah testez, c'est comme ça qu'on apprend Smile

La seconde et dernière chose, c'est comment mettre un avatar dans le dialogue. Flemme d'expliquer alors je vous donne à l'arrache celle utilisée dans mon VN :
Code:

$ m = DynamicCharacter("j",
                color="#58D3F7",
                window_left_padding=160,
                show_side_image=Image("minato.png", xalign=0.03, yalign=0.97), show_two_window=True)
Avec :
- "m", le nom de la variable du "personnage du joueur"
- "j", le nom du joueur
- "color", la couleur dans laquelle sera écrit son nom
- "left padding" le nombre de pixel séparant votre texte du bord gauche de la fenêtre. Mettez donc plus que la taille de votre image.
- "Side image" est l'image qui sera affichée à chaque fois que ce personnage parle.
- "two window" le titre est assez parlant mais testez comme je l'ai dit plus haut.

Sur ce, j'ai fini. je n'ai absolument plus rien à vous apprendre sur les dialogues et les menus ; vous avez atteint mon niveau. Amusez vous bien Wink

Voir aussi :
- Les tutos à venir.
avatar
Ryouzanki
Maître
Maître

Masculin Messages : 1008
Age : 26

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Dreamy le Jeu 10 Jan 2013 - 7:30

PONPON dashIte shImaeba II nO~~
ZENZEN sh'naI no tsumaranai deshO~~

Super tutoriel, comme d'habitude.
avatar
Dreamy
Artiste reconnu (e)
Artiste reconnu (e)

Féminin Messages : 804
Age : 23

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Rannime-V le Sam 12 Jan 2013 - 14:08

Nice Ryou, j'ai encore appris plein de chose intéressante Very Happy

Mais pourrais-tu expliquer la différence entre "Character" et "DynamicCharacter" ?
avatar
Rannime-V
Maître
Maître

Masculin Messages : 1319
Age : 23

http://rannime-v.deviantart.com/

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Chibi_Zaké le Dim 13 Jan 2013 - 0:11

Merci beaucoup pour le tuto ^^
Par contre j'ai la même question que Rannime-V, quelle est la différence entre un DynamicCharacter et un Character normal, parce que si on crée une fonction et qu'on l'utilise pour faire un Character de base, ça marche aussi et on peut le modifier en route.

Et j'ai une autre question, imaginons que je met une image à la fin du dialogue (ex, un coeur) mais que je veux que l'image change au fur et à mesure que les stats (ex, l'amour) montent ou descendent, comment fait-on ?
moi j'ai écris ça dans le bloc init :
Code:
 if amour_hikaru >= 0 and amour_hikaru <= 50:
    $ h = Character("Hikaru", color="#C60800", what_color="#C60800", 
        ctc=anim.Filmstrip("coeur vert.png", (20, 20), (2, 1), .30, xpos=655, ypos=577, xanchor=0, yanchor=0),
                            ctc_position="fixed")
 elif amour_hikaru == 100:
    $ h = Character("Hikaru", color="#C60800", what_color="#C60800", 
        ctc=anim.Filmstrip("coeur blanc.png", (20, 20), (2, 1), .30, xpos=655, ypos=577, xanchor=0, yanchor=0),
                            ctc_position="fixed")
 elif amour_hikaru >= 71 and amour_hikaru <= 99:
    $ h = Character("Hikaru", color="#C60800", what_color="#C60800", 
        ctc=anim.Filmstrip("coeur rouge.png", (20, 20), (2, 1), .30, xpos=655, ypos=577, xanchor=0, yanchor=0),
                            ctc_position="fixed")
 elif amour_hikaru >= 51 and amour_hikaru <= 70:
    $ h = Character("Hikaru", color="#C60800", what_color="#C60800", 
        ctc=anim.Filmstrip("coeur rose.png", (20, 20), (2, 1), .30, xpos=655, ypos=577, xanchor=0, yanchor=0),
                            ctc_position="fixed")
 else:
    $ h = Character("Hikaru", color="#C60800", what_color="#C60800", 
        ctc=anim.Filmstrip("coeur brisé.png", (20, 20), (2, 1), .30, xpos=655, ypos=577, xanchor=0, yanchor=0),
                            ctc_position="fixed")

Mais ça ne marche pas, même si l'amour est à 100, le coeur reste vert. J'ai testé d'autre méthode mais le résultat reste le même. Où ai-je fait un faute (et c'est possible de faire ça) ?
avatar
Chibi_Zaké
Gribouilleur
Gribouilleur

Féminin Messages : 113
Age : 20

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Ryouzanki le Dim 13 Jan 2013 - 1:28

Fu fu fu... Je vous défie donc de demander à un joueur d'entrer son nom et de créer un personnage avec. En effet, le nom entré par le joueur sera entré dans une variable MAIS la fonction classique "Character" ne peut pas prendre de variable comme paramètre. Alors que celle "DynamicCharacter" prend en charge les variables. Personnellement, ça reste discutable mais je l'utilise pour tous les personnages parce que "DynamicCharacter" actualise en permanence son contenu ce qui inclut que si on change la variable, ça la change aussi dans le personnage. Tu peux t'amuser à recréer un personnage à chaque fois si tu veux avec "Character" mais c'est assez crade nan ? XD

Vos questions me font plaisir parce qu'elles indiquent que vous ne vous contentez pas de simplement copier coller mon code. \o/

Pour ton problème Chibi_Zaké, je ne sais pas où t'es allée me pêcher "ctc" et "anim.Filmstrip" :
ctc=anim.Filmstrip("coeur vert.png", (20, 20), (2, 1), .30, xpos=655, ypos=577, xanchor=0, yanchor=0),
ctc_position="fixed")
Je ne sais absolument pas ce que ça fait cette commande. Ce que tu me demandes est quand même de haut niveau alors je n'expliquerais que succinctement mais d'après ton programme, tu déclares un personnage statique. Tu ne demandes au programme de vérifier qu'une seule et unique fois ta variable "amour_hikaru" dans le "init". Donc il regarde et créé un personnage avec un coeur vert. Ensuite vu que le personnage est dynamique, il ne revérifiera plus (d'où le personnage toujours avec un coeur vert). Il faut donc mettre la condition DANS le personnage et pas avant comme tu l'as fait. Comme ça, on va vérifier à chaque fois que le personnage est appelé.
Je te laisse utiliser le code de ton choix. Voici le code du programme complet dont je me suis servit pour vérifier que ce que j'ai dit fonctionne :
Code:
init:
    $ sentiment = 'normal'
    $ e = Character('Elusia',
          color="#FF69B4",
          window_left_padding=160,
          show_side_image=ConditionSwitch(
          "sentiment == 'normal'", "e_normal.png",
          "sentiment == 'amitie'", "e_amitie.png",
          "sentiment == 'amour'", "e_amour.png",
        )
    )

label start:
    e "Je suis normale."
    $ sentiment = 'amitie'
    "(Après un mois ensemble.)"
    e "Je suis ton amie."
    $ sentiment = 'amour'
    "(Après un an ensemble.)"
    e "Je suis ta petite amie."
    return
Tu as juste à adapter à tes besoin, have fun Wink
avatar
Ryouzanki
Maître
Maître

Masculin Messages : 1008
Age : 26

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Chibi_Zaké le Dim 13 Jan 2013 - 2:26

Merci pour les réponses ^^
Pour les codes je les ai pris sur le site de Ren'py (et surtout sur le tutoriel intégré dans le logiciel), je trouvais les effet sympa ^^ ça rajoute une petite image après la réplique d'un perso (ici en bas à droite de ma boîte de dialogue)
Le anime.Filmstrip indique une image qui bouge (dans mon cas, c'est comme si le coeur faisait boum boum) et le ctc c'est pour bloquer la position il me semble (sinon il le met juste après le dernier mot de la réplique)
avatar
Chibi_Zaké
Gribouilleur
Gribouilleur

Féminin Messages : 113
Age : 20

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Ryouzanki le Dim 13 Jan 2013 - 2:30

LOL. Le code que je t'ai donné est quasiment donné ainsi sur le site de Ren'Py. (cf : http://www.renpy.org/wiki/renpy/doc/cookbook/Conditional_Side_Images )
avatar
Ryouzanki
Maître
Maître

Masculin Messages : 1008
Age : 26

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les dialogues avancés (**)

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum