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

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s