Renpy – sms script for smartphone

J’ai réalisé un script fait maison pour simuler une conversation sms via téléphone.

Je vous met le code en libre disposition. Vous pouvez l’utiliser dans vos projets même commerciaux. Interdiction en revanche de « vendre » le script seul.

http://www.lucie-adult-game.com/lucie_renpy_sms_script.zip

Merci de citer la source en cas d’utilisation.

Je vous ai concocté une vidéo explicative.

Le script gére le SHIFT R en cas de modification.
Les images fonctionnent.
Les avatars aussi.
Tout est personnalisable, la scène de fond, le texte, la taille du texte, la couleur etc.

L’ascenseur est fonctionnel. C’était le plus dur.

Vous pouvez ajouter un son, faire des pauses, ajouter des destinataires assez simplement.

Bonne utilisation à tous.

Renpy : Liste des effets visuels, gameplay, leveldesign, astuce/tips

Renpy : Liste des effets visuels, gameplay, leveldesign, astuce/tips

Cet article accompagne la vidéo explicative suivante :

Retrouver ci dessous, le code de chaque tips/astuce de renpy ainsi que des liens pour appronfondir le sujet.

Faire clignoter les yeux de votre personnage :

image day6_evening_zoe_poker_anime:
    "images_part2/day6_evening_zoe_poker_accueil0_1.jpg" with Dissolve(0.2, alpha=True)
    pause 0.2
    "images_part2/day6_evening_zoe_poker_accueil0_2.jpg" with Dissolve(0.2, alpha=True)
    pause 0.1
    "images_part2/day6_evening_zoe_poker_accueil0_3.jpg" with Dissolve(0.2, alpha=True)
    pause 0.1
    "images_part2/day6_evening_zoe_poker_accueil0_2.jpg" with Dissolve(0.2, alpha=True)
    pause 0.1
    "images_part2/day6_evening_zoe_poker_accueil0_1.jpg" with Dissolve(0.2, alpha=True)
    pause 3
    repeat

 

Mettre une vidéo/logo/animation AVANT le menu du jeu au lancement :

 

label before_main_menu:
    $ renpy.movie_cutscene("gui/logo_movie.webm")
    call screen main_menu

 

 

Main Menu animé, superposition de layer + zoom :

 

Faire bouger l’écran de fond sur le menu, et switcher entre 2 background :

init:
    $ menu_office = ["gui/menu/_main_menu4.png", 1.03,"gui/menu/_main_menu1.png", 1.20,"gui/menu/namebox.png", 1.1]
    $ menu_meeting = ["gui/menu/_main_menu_office.png", 1.07, "gui/menu/_main_menu_claire2.png", 1.15,"gui/menu/_main_menu_cecilia.png", 1]
    $ menu_arr = [menu_office, menu_meeting]
    $ renpy.random.shuffle(menu_arr)

 

###############################################

# fonction zoom pour le menu qui bouge.

init 499 image spr_bg:
    menu_arr[0][0] with Dissolve(0.2, alpha=True)
    zoom 1.0
    xalign 0.0 yalign 0.0
    linear 10.0 zoom menu_arr[0][1]
    menu_arr[1][0] with Dissolve(0.2, alpha=True)
    zoom 1.0
    xalign 0.0 yalign 0.0
    linear 10.0 zoom menu_arr[0][1] 
    repeat
init 499 image spr_mid:
    menu_arr[0][2] with Dissolve(0.2, alpha=True)
    zoom 1.0
    xalign 0.0 yalign 0.0
    linear 10.0 zoom menu_arr[0][3]
    menu_arr[1][2] with Dissolve(0.2, alpha=True)
    zoom 1.0
    xalign 0.0 yalign 0.0
    linear 10.0 zoom menu_arr[1][3] 
    repeat
init 499 image spr_top:
    menu_arr[0][4] with Dissolve(0.2, alpha=True)
    zoom 1.0
    xalign 0.0 yalign 0.0
    linear 10.0 zoom menu_arr[0][5]
    menu_arr[1][4] with Dissolve(0.2, alpha=True)
    zoom 1.0
    xalign 0.0 yalign 0.0
    linear 10.0 zoom menu_arr[1][5] 
    repeat

 

Et dans le screen.rpy dans la fonction main_menu()

 

screen main_menu():
    ## This ensures that any other menu screen is replaced.
    tag menu
    style_prefix "main_menu"
    add gui.main_menu_background
    add "spr_bg"

    add "spr_mid"

    add "spr_top"

 

Corbeaux ou nuages qui défilent à l’écran :

http://traumendes-madchen.com/blogfr/?p=1330

image corbeaux = "images/corbeaux3.png"
image corbeaux_anime:
    contains:
    subpixel True
    xalign 1.0 # aligner à droite
    xoffset 1280 # décalage de l'image hors du plan de travail
    HBox("corbeaux")
    linear 8.0 xpos -1.0 # vitesse de deplacement + direction
    repeat

Puis afficher dans votre histoire :

scene corbeaux_anime

 

 

Zoom sur une image

(attention l’image doit être plus grande que les autres)

scene day1_lucie_enter0_zoom:
    xalign 0.0
    linear 5.0 yalign 0.5
    linear 1.0 yalign 0.1
    repeat 1

 

Choix limité du menu dans le temps :

https://www.renpy.org/wiki/renpy/doc/cookbook/Timed_menus

init:

   # variable pour les menus à choix limité
   $ timer_range = 0
   $ timer_jump = 0
   # time = the time the timer takes to count down to 0.
   # timer_range = a number matching time (bar only)
   # timer_jump = the label to jump to when time runs out

label menu1:
   $ time = 1.3
   $ timer_range = 1.3
   $ timer_jump = 'menu1_slow'
   show screen countdown
   menu:
      "Faire barage": # avec timer
         t "Je ne pense pas non"
         hide screen countdown
         jump menu1_end
      "Laisser passer":
         hide screen countdown
         jump menu1_end

label menu1_slow:
   t "You didn't choose anything."
   jump day8_afternoon_josh_come_part2

label menu1_end:
   t "Anyway, let's do something else."
   jump day8_afternoon_josh_come_part2

 

et dans screen.rpy :

transform alpha_dissolve:
alpha 0.0
linear 0.5 alpha 1.0
on hide:
   linear 0.5 alpha 0
# This is to fade the bar in and out, and is only required once in your script

screen countdown:
   text _("Choissisez vite !") xalign 0.03 yalign 0.55 size 20 color "#ff00ff" bold 1 outlines [ (absolute(2), "#000", absolute(1), absolute(1)) ]
   timer 0.01 repeat True action If(time > 0, true=SetVariable('time', time - 0.01), false=[Hide('countdown'), Jump(timer_jump)])
   bar value time range timer_range xalign 0 yalign 0.6 ysize 25 xmaximum 700 left_bar "#ff00ff" right_bar "#000000" at alpha_dissolve # This is the timer bar.

 

Griser un choix dans renpy / Disable a choice in menu but always visible

Dans options.rpy :

define config.menu_include_disabled = True

puis dans votre script :

menu:
   "La jouer calme":
      t ""
   "La jouer provoque" if agacementJosh >= 1:
      t ""

Texte entre 2 personnes qui défile vite, sans interruption sans pause :

   l "Pardon c’est encore moi !" (interact=False)
   pause 0.5
   t "{t}*Elle arrive !*{/t}" (interact=False)
   pause 0.5

Gérer le volume des sons ou de la musique :

   $ renpy.music.set_volume(0.3, 0, 'sound')

Interdire le retour en arrière :

$ renpy.block_rollback()

Capturer des touches du clavier :

timer pov_select_timer action [Hide('text'), Hide('pov_select_screen'), SetVariable("fightSelectDigit", 4),Jump("pov_select_label")]
key "K_UP" action (Hide('text'),Hide('pov_select_screen'),SetVariable("fightSelectDigit", 0), Jump("pov_select_label"))
key "K_RIGHT" action (Hide('text'),Hide('pov_select_screen'),SetVariable("fightSelectDigit", 1), Jump("pov_select_label"))
key "K_DOWN" action (Hide('text'),Hide('pov_select_screen'),SetVariable("fightSelectDigit", 2), Jump("pov_select_label"))
key "K_LEFT" action (Hide('text'),Hide('pov_select_screen'),SetVariable("fightSelectDigit", 3), Jump("pov_select_label"))

 

Notion de drag and drop :

https://nighten.fr/comment-creer-un-dressing-game-dans-renpy/

 

Position de la souris :

$ x = 0
$ y = 0
$ x = renpy.get_mouse_pos()[0] #getting the x when clicked.
$ y = renpy.get_mouse_pos()[1]

 

Générer un chiffre aléatoire :

$ jet_ordi = renpy.random.randint(5,6)
$ jet_joueur = renpy.random.randint(1,4)

 

Effet interrupteur dans une pièce :

Juste 3 images/calques + un screen dans renpy. Faut juste y penser.


Créateur Random#5416

https://www.patreon.com/user?u=13057974

 

Appuyer sur une zone de l’écran aléatoire avec compte à rebour.

l "J'ai oublié ma culotte !" (interact=False)
pause 0.5
t "{t}*Elle arrive !*{/t}" (interact=False)
pause 0.5
$ cont = 0 #continue variable 
call qte_setup(1, 1, 0.01, "alttab", renpy.random.randint(1, 9) * 0.1, renpy.random.randint(1, 9) * 0.1) 
if cont == 1:
      t "{t}Puréec'était juste. Mais j'ai réussi à cacher l'écran.*{/t}"

dans screen.rpy:

screen qte_button_alttab: # https://lemmasoft.renai.us/forums/viewtopic.php?t=50766
    #button press qte

    button:
        action Return(0) #miss
        align 0.5, 0.5
        background None
        #to add a click sensor *outside* of button (if player presses outside button area) and return false

    timer interval repeat True action If(time_start > 0.0, true=SetVariable('time_start', time_start - interval), false=[Return(0), Hide('qte_button')])

    vbox:
        xalign x_align yalign y_align spacing 25

        button:
            action Return(1)
            xalign 0.5
            xysize 150, 103
            background Animation("gui/day8_button_alttab_on.png", 0.5, "gui/day8_button_alttab_off.png", 0.5) #change to image, etc
            activate_sound "sound/library/correct-answer-bell-gliss-04.mp3"

        bar:
            value time_start
            range time_max
            xalign 0.5
            ysize 10
            xmaximum 180
            left_bar "#ff0080"
            if time_start < (time_max * 0.33):
                left_bar "#800080"

 

et un label quelque part :

#parameters are:

#    – amount of time given
#    – total amount of time (is usually the same as above)
#    – timer decreasing interval
#    – the key/keyboard input to hit in the quick time event
#    – the x alignment of the bar/box
#    – the y alignment of the bar/box
# »’

label qte_setup(time_start, time_max, interval, typebutton, x_align, y_align):

    $ time_start = time_start
    $ typebutton = typebutton
    $ time_max = time_max
    $ interval = interval
    $ trigger_key = []
    $ x_align = x_align
    $ y_align = y_align

    # $ arr_keys = ["a", "c", "e", "K_UP", "K_SPACE"] #list of keyboard inputs to be selected from. See https://www.pygame.org/docs/ref/key.html for more keys
    # $ trigger_key = renpy.random.choice(arr_keys)


    if typebutton == "alttab":
        call screen qte_button_alttab
    else:
        play sound "sound/library/correct-answer-marimba-02.mp3"
        call screen qte_button

    # can change to "call screen qte_button" to switch to button mode
    
    if _return == 1:
        $ cont += 1
    else:
        play sound "sound/library/wrong-answer-fall-03.mp3" # wrong-answer-trombone-02.mp3

    # 1 if key was hit in time, 0 if key not

    return

Changer une image en fonction de l’heure du jour :

https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=53252#p502367

label bedroom:

scene bedroom1
    $hour = datetime.datetime.now().hour        ## this will verify what time it currently is
    if hour in [6, 7, 8, 9, 10, 11]:    ### type here the hour you want the image to be displayed
        hide image "nightsky"         ### I'm not sure if that's necessary, but I chose to "hide" the previous image (before the morning it would be night image)
        show image "morningsky"
        $startTime= 6                      ### this code makes the image START at this time (not sure if this part is necessary)
        $endTime= 11                     ### this code makes the image END at this time (not sure if this part is necessary)
 
    if hour in [12, 13, 14, 15, 16]:
        hide image "morningsky"
        show image "afternoonsky"
        $startTime= 12
        $endTime= 16

 

Optimiser les images en webp

https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=45400#p463089
find . -name \*.png -print0 | parallel -0 –nice 19 cwebp {} -lossless -o {}.webp \;
find . -name \*.png.webp -exec rename -f ‘s/.png.webp$/.png/’ {} +;

Pour aller plus loin :

https://lemmasoft.renai.us/forums/viewtopic.php?t=34131

Accéder aux sources d’un jeu Renpy VN – Et traduire un jeu facilement ou tricher

—————– Comment traduire un jeu renpy en anglais en français ————————-

Une fois que vous avez téléchargé un jeu Renpy, il peut être intéressant d’accéder aux sources du jeu.

Pour accéder au texte et le traduire facilement, ou pour sortir une image du jeu.

Un outil a été créé pour cela UnRen.bat

https://f95zone.to/threads/unren-bat-v0-8-rpa-extractor-rpyc-decompiler-console-developer-menu-enabler.3083/
Toutes les instructions sont détaillées.

Il suffit d’installer python sur votre ordinateur https://www.python.org/downloads/windows/

Puis de mettre le fichier UnRen.bat dans le répertoire de votre jeu.

et de le lancer.

Appuyer sur 1 pour décompresser les .rpa

puis de nouveau sur 1 pour revenir au menu, puis sur l’option 2 pour décrypter les rpyc.

Vous accédez alors enfin au script.rpy

Vous pouvez chercher la phrase que vous voulez dans tous le répertoire avec Editplus ou notepad++ pour le copier coller dans Google Traduction : Ici pour la traduction du jeu babysitter en français :

A noter sur certain jeu, le décrypteur ne vas pas fonctionner correctement.

« TypeError: ‘RevertableDict’ object does not support item assignment »

Il faut prendre une ancienne version de unRen.bat et cela fonctionne enfin.

Je vous épargne des heures de recherche :

https://www.lucie-adult-game.com/zip/UnRen07.zip
Trouvé ici https://attachments.f95zone.to/2019/07/360734_UnRen0.7_kwazimod6.zip

Laissez un commentaire si vous voulez des explications sur un point en particulier.

—————– Comment tricher dans les jeux renpy ————————-

A noter, comme vous avez accès aux sources, vous pouvez également voir les choix de l’auteur et les variables qui bloquent pour accéder à une scène en particulier. C’est de la triche, vous vous gâcher un peu le jeu, mais parfois on veut juste voir une scène, et vous faites du mal à personne (contrairement à la triche ne multijoueur) à part vous vis à vis de l’histoire.

Téléchargez l’outil : https://f95zone.to/threads/renpy-save-editor-v1-6-1-last-moment.6456/
Renpy Save Editor.exe, et lancez le.

Sauvegarder le jeu ou vous en êtes, ouvrez Renpy save editor, aller prendre la sauvegarde et trouvez la variable qui vous intéresse :

Puis cherchez le ou les valeurs à modifier, puis apply changes.

et hop le choix est débloqué.

Il y a parfois des protections mais la plupart du temps cela marche.

Je n’ai pas évoqué la recompilation. La recompilation est utile en cas de :
– Création d’une traduction
– Modification du script.rpy (ou autre rpy).
Je n’ai pas eut besoin de le faire jusqu’à présent, mais d’après mon expérience, une fois dé compilé les fichiers RPA (et décrypté) on peut retirer tous les fichiers RPA (option qui est proposé dans le unren.bat d’ailleurs) et le jeu va « charger » les fichiers rpy modifiés.
Du coup, le fichier va chercher à ouvrir les fichiers non cryptés.
Si les 3 sont présents, RPA, rpy, et rpyc je ne sais pas ce que Renpy ouvre en premier, il faudrait tester.
Gardez bien une sauvegarde des rpa au cas ou.
Après si on veut recompiler, en créant un nouveau projet sous renpy et en copiant coller le tout, je pense que cela peut marcher.

c’est bien RENPY qui créé la compilation et le cryptage en fonction de ces options :

https://creerjeuvideoseul.wordpress.com/2019/09/20/finaliser-un-projet-renpy-visual-novel-francais/

 

 

Eric.

 

Méthodologie pour la création d’un jeu vidéo

Cela va faire maintenant 1 an et demi que j’ai commencé le  jeu.
Quelques chiffres : https://www.patreon.com/posts/actualite-du-jeu-36268414

Quand je travaille sur le jeu, j’y passe 1 à 2 heures par  jour facile. J’ai cependant fait des pauses sur l’année pour me consacrer à mon roman.

Voici la méthode de construction que j’ai mise au point et que je partage avec vous. Elle repose sur de nombreux aller-retours entre les différentes phases.

1 – Ecriture de l’histoire dans les très grandes lignes.

Choisir une situation puis des éléments perturbateurs. La plupart des histoires reposent sur ce genre de schéma : des choses vont bien puis mal etc. Voici un résumé :

ecriture_roman_histoire

N’oubliez pas des antagonistes, des personnages hauts en couleur, et le tout dans une cohérence par rapport à l’univers choisi. Il n’y a pas vraiment de secret pour écrire ou imaginer, juste pratiquer et ce laisser aller.

Éventuellement la seule astuce que je vois, c’est ce mettre devant une feuille de papier puis lâcher toutes les idées sans limites, quitte à faire le tri après. Mais limite il faut le faire tout le temps, dès que vous pensez à un truc vous l’écrivez sur votre téléphone dans la rubrique bloc-notes.

2 – Trouver des lieux, assets, personnages, vêtements

C’est un long travail, qu’il vaut mieux avoir fait au fil du temps. J’ai une librairie d’image de beaucoup d’asset de Daz Studio et je les parcours régulièrement pour stimuler l’imagination et les croisements d’idée. Il faut que cela soit rapide et simple.
A défaut on peut parcourir les rubriques de daz3D mais c’est assez long.
Une fois qu’on à les grandes idées on peut passer à la pré écriture.

selection daz

3 – Peaufiner les jours/chapitre/grandes parties de l’histoire 

Par exemple sur renpy, on peut pré créer les labels vides pour le moment.
Ou le faire simplement dans un document word, histoire de savoir ou on va grossièrement.

4 – Pré génération d’une ou plusieurs scènes sur daz studio.

C’est assez long, prendre le lieu, choisir les personnages, l’éclairage, les vêtements, l’ambiance etc. Le but est d’aider le cerveau à se projeter pour écrire les dialogues.

5 – Premier jet d’écriture des dialogues.

On lance de grandes lignes de dialogues entre les personnages sur Renpy, après avoir réfléchi à quel message on veut faire passer, à quoi sert le dialogue, etc.

La ou c’est difficile c’est que le caractère de chaque personnage doit être identifiable dans ses lignes de dialogues. Il faut donc changer sa méthode d’écriture à chaque ligne de dialogue et se mettre dans la peau du personnage.

6 – On retourne sur Daz, on fait les images qui colle au dialogue

Par exemple pour le bar autour d’une table, je mets les 3 personnages autour de la table, je place des verres, etc. J’optimise la scène avec scène optimizer, place l’éclairage, je fais des tests, etc. et je génère la première image. Si cela me convient, je vais chercher à faire 2 ou 3 expressions différentes par personnage : colère, joie, tristesse, étonnement. Avant même de savoir ce que je vais en faire. Cela me fait gagner du temps par la suite. Dans un dialogue il y a forcément à un moment donné ce genre d’expression et on n’a pas envie de perdre 45 min si on pense à une ligne de dialogue intéressante.

C’est plus compliqué pour les dialogues à 3 personnages, car les personnages doivent changer d’interlocuteur et cela multiplie les possibilités. Je fais au cas par cas.

7 – On repasse sur le dialogue sur Renpy, on place les images de Daz Studio

On ajoute des lignes, retire, ajoute de l’interaction, des choix, des menus, des blagues, on génère à la volée d’autre image sur Daz etc. Beaucoup d’allée retour à ce moment là.

8 – Orthographe avec Antidote et peaufinage des photos sur photoshop.

J’ai acheté, il y a longtemps une licence Antidote pour l’orthographe, ce n’est pas parfait, mais cela enlève pas mal d’erreur.
J’ai aussi une licence à vie de photoshop (mieux que leur merde de 360 avec abonnement actuel), je repasse aussi sur cette image qui ont des artefacts comme des « lucioles » ou firefly qui sont un problème récurrent sur Daz (point lumineux de réflexion) ou vêtement qui traverse de la peau etc. C’est plus facile à corriger sur photoshop, pareil pour remplir les « écrans » d’ordinateur et les téléphones.

9 – On test, on test, on test.

On test plusieurs fois toutes les possibilités, on fait tester à quelqu’un d’autre c’est toujours très enrichissant.
Les feedback et les commentaires constructifs sont toujours bons à prendre si on veut s’améliorer.

10 – Mise en ligne sur github avec winmerge, et on passe au prochain chapitre/jour/épisode.

On espérant vous avoir aider à trouver des axes d’amélioration pour la création d’un jeu vidéo 🙂
A cœur vaillant, rien d’impossible.

Merci à mes 4 premiers patreon qui croient en moi 🙂
https://www.patreon.com/lucie_adult_game

Si un sujet vous intéresse en particulier, dites le moi dans les commentaires, j’ajouterais un post en détail.

 

 

 

Finaliser un projet RENPY Visual novel français

J’arrive bientôt à la première version jouable de mon jeu.

Je voulais vous partager ici une TODO list des choses à ne pas oublier avant de proposer son jeu aux autres.

– Finaliser le jeu avec des musiques et sons libres de droit. Ajouter des with vpunch et hpunch pour faire vivre le jeu. Ajouter des {w} pour faire une pause aux endroits stratégique (après un  ‘…’ ).

– Pensez à ajouter un ICONE pour l’exe de votre jeu :
Création de l’icon avec icon converter : mettre le .ico dans /Lucie/icon.ico (et non pas /Lucie/game/icon.ico)

– Compresser vos fichiers en .rpa et exclure certain fichier du build (de la compilation) :
build.classify(‘game/images/old/**’, None) # Exclusion
build.classify(‘RenpyHotspotTool/’, None) # Exclusion
et les créations des archives pour rendre moins accessible les images :
build.archive(« scripts », « all »)
build.archive(« images », « all »)
build.archive(« sounds », « all »)

build.classify(« game/**.rpy », « scripts »)
build.classify(« game/**.rpyc », « scripts »)

# Put images into the images archive.
build.classify(« game/**.gif », « images »)
build.classify(« game/**.jpg », « images »)
build.classify(« game/**.png », « images »)

# Put mp3 into archive
build.classify(« game/sound/**.mp3 », « sounds »)
build.classify(« game/sound/**.wav », « sounds »)
même si cela reste « simple » a extraire avec UnRen.bat, ce n’est pas tout le monde qui le fera.

– Ajout d’une section PATREON sur votre menu de gauche :
Dans screens.rpy : screen about(): exemple de code :
text _(« Conçu avec {a=https://www.renpy.org/}Ren’Py{/a} [renpy.version_only] et Daz Studio.\n\n1 an de développement, seul et en autodidacte.\n400 images générées (2 heures de création/rendu par image !).\n4000 lignes de texte.\n\nLe jeu est gratuit grâce à vos dons ! 1€ ce n’est rien pour vous, et c’est un gros encouragement pour moi !\nSoutenez moi sur Patreon : {a=https://www.patreon.com/lucie_adult_game}Lucie Game{/a}! »)

– Et prévoir une section de fin temporaire invitant votre visiteur à se tenir informer de la suite des versions.
Source des options :
https://www.renpy.org/doc/html/build.html

Création d’un jeu RenPy / Daz Studio (visual novel)

Le jeu avance bien de mon côté. Mais je me rends compte d’un certain nombre de difficultés auxquelles j’ai été confrontées.

Je vais les partager ici si cela peut aider quelques personnes.

Vous allez avoir besoin de plusieurs compétences si vous voulez aller jusqu’au bout :

– Ecrire l’histoire dans les grandes lignes (Compétence : Scénariste / Ecrivain)
– Ecrire les dialogues en détail (Compétence : dialoguiste, souvent sous estimé)
– Installer et paramétrer Renpy (Compétence : programmation)
– Créer les images / décors (Compétence : Réalisateur, gestion des lumières, des expressions, des mises en scènes, des décors, le soucis du détail) (ou du dessin si vous dessinez au lieu d’utiliser Daz Studio)

Pour ma part j’ai des lacunes sur la notion de dialoguiste. Je n’arrive pas à parler pour ne rien dire ^^ ou ne pas aller à l’essentiel. Si vous avez des compétences, contactez moi !

Faire monter le désir dans le cas d’un jeu érotique visual novel pour adulte n’est pas chose aisé. Il faut montrer sans montrer, faire progresser les pensées de chaque personnage, immerger le joueur.

Typiquement, je me suis rendu compte qu’il était important de faire choisir le joueur sur les dialogues sans forcement créer d’autres branches de l’histoire. Finalement l’une ou l’autre réponse emmène au même point juste en dessous. Mais l’utilisateur a choisi et cela change tout.

Je suis loin d’être satisfait de mon jeu pour le moment, trop linéaire, pas assez de choix immersif.

Processus de développement conseil pour créer un visual novel :

Je pense qu’il faut commencer par l’histoire générale, puis découper cette histoire en « jour » / « épisode ». Puis en scène (matin, après midi, soir). Remplir les grandes lignes.

Puis écrire les dialogues avec une préproduction d’image pour avoir une idée du décors et des personnages.

Puis générer les images. Jusqu’à présent je commençais par les images et j’adaptais le texte dessus, mais cela manque de souplesse. Je ne peux pas placer le dialogue que je veux. D’ou mon conseil pour ordonner les tâches.

Les outils que j’utilise pour la production

Github deskstop : Pour le système de versionning, si un jour j’ai un coéquipier dans le projet et le système de sauvegarde.
Edit Plus : Pour l’éditeur de texte, niquel pour le python et le php
Daz Studio : Pour la génération de toutes les images
PhotoShop : Pour la retouche des images ou le montage photo post production.
Google Doc : Pour le travail collaboratif sur les idées/histoires/découpage/scénario du jeu.
Everything : Recherche très rapide dans les miliers de fichiers de Daz studio
https://voidtools.com/

J’essaye également pas mal d’autres jeux visual novel érotique afin de comprendre leur fonctionnement et j’effectue du reverse engineering pour comprendre comment ils font.

Vous pouvez les analyser avec des outils comme :
RPATool.exe
UnRen.bat
Et même pour les jeux Unrel : AssetBundleExtractor

Et pour finir quelques images du jeu :

Ressource diverse :

Tutoriel : Comment réaliser une animation de nuages avec RenPy
http://traumendes-madchen.com/blogfr/?p=1330

[Tuto Ren’Py] Comment faire des barres de relations ?
http://sekai.forumactif.org/t4473-tuto-ren-py-comment-faire-des-barres-de-relations

Base de son libre de droit :
https://freesound.org/

Ce que la création de visual novel m’a appris
http://traumendes-madchen.com/blogfr/?p=1101

Premier écran du jeu – Lucie (Visual novel)

Après avoir passé 2 semaines sur une première version du jeu, je suis reparti de zéro.

L’histoire que j’avais écrite sous forme de roman, ne permettait pas assez d’interaction. C’était une histoire « narrative » sans bifurcations possibles.

Je suis également repasser sur RenPy après mures réflexions. Même si mon premier système en php fonctionnait, j’ai du mal à gérer les IF multiples.

J’ai également trouvé un convertisseur Renpy => Html5 :
https://www.patreon.com/Beuc/overview
Je suis devenu d’ailleurs, un de ces patrons pour le soutenir. (https://renpy.beuc.net/)

Ça marche plutôt bien de ce que j’ai pu voir. Au pire, je pense que j’arriverais à recoder un translateur renpy python en php.

Car le problème de Renpy c’est que du coup, votre EXE peut finir dans la nature, et vous n’aurez aucune statistique concernant son utilisation, c’est toujours un peu triste.
Il peut également être pirater, modifier, copier, ouvert, analyser. On peut facilement sortir les images ou les scripts d’un jeu Renpy.
La gestion des versions est également un problème. Si quelqu’un a télécharger la version 0.2 de votre jeu, comment lui faire connaitre la v0.3 qui corrige plein de truc ?

Bref, j’ai mes premiers écrans :

Vous pouvez cliquer pour agrandir.

Du coup, Renpy permet d’être relativement rapide pour écrire les IF, les scènes etc.
J’ai beaucoup appris sur Daz studio, comment grouper les centaines d’assets pour s’y retrouver plus rapidement, comment enregistrer des personnages prêt à l’emploi.
Chaque scène demande 1 heure de travail minimum, puis 45 min de génération. C’est long et le PC souffre.

J’ai créé un fichier pour le scénario, un fichier pour les idées générales, un fichier pour chaque personnage et leur caractère. J’ai l’impression d’être un petit producteur, c’est intéressant. Il faut penser les choses dans les détails et ce n’est pas évident. La lumière, le sens des cheveux, des vêtements etc. Rendre une scène réaliste est assez complexe et long.

J’ai noté également que plus il y a de source lumineuse sur une scène plus c’est long à générer.

Il me reste encore a apprendre les petites animations, mais on parle de 20 images seconde !

J’écrirais un autre article avec une première version du jeu la prochaine fois.

day1_bedroom_test_nuisette2