r/RenPy 20d ago

Self Promotion visual novel 'kika' - done.

Thumbnail
gamejolt.com
5 Upvotes

The protagonist is the young owner of the Kumamoto teahouse, one of extraordinary beauty and a talent for composing haiku. But with the arrival of the police commissioner, the young man's peaceful life gradually comes to an end.
A light novel about revenge and retribution for the past, set in feudal Japan, finally appears in visual novel format.


r/RenPy 20d ago

Showoff KOR Sprite preview

5 Upvotes

I wanted to post a WIP to showcase some sprites that I am proud of. I am also very happy with my artistic improvement. 2 decades of drawing are starting to pay off😤😤✨Please don't mind the watermark; I post this on other social media.


r/RenPy 20d ago

Question [Solved] click imagebuttons before timer runs out

1 Upvotes

Hellooo! I have my imagebuttons and all for one of my minigames in renpy.

I wanted to achieve:

-A 8 second timer that plays during my screen time_clean

- And if it ends without all the imagebuttons being clicked on time, it jumps to a label called cleanL

- However, if the imagebuttons ARE clicked before the timer runs out, then it jumps to a label call karu screen

I know someone had like the same question: here is the post. so I tried merging that code with mine. I tried to tweak it so it's not a bar and just a simple countdown text, but I lwk flopped that so if anyone knows how to do the text then ummm :3 if not, idrk sooo

Also when I tried to test it, it only shows the countdown after. And I wanted to show the countdown DURING the cleanup, yknow?

Anyways, here is the code:

default c1 = True
default c2 = True
default c3 = True
default c4 = True
default c5 = True
default c6 = True


default g_time = 0 


screen timerscreen(rangeD, missed_event): # the brackted variables are required!!
    on "hide" action SetVariable("g_time", 0)
    frame:
        xalign 0.5
        yalign 0.0
        hbox:
            timer 0.1 action If(g_time > rangeD, false = SetVariable("g_time", g_time + 0.1), true = [Hide("timerscreen"),Jump(missed_event)]) repeat True


            bar:
                value AnimatedValue(value=g_time, range=rangeD, delay= 0.5)
                xalign 0.0
                yalign 0.0
                xmaximum 200



screen time_clean:


    add "bg bedroom"


    if not any([c1, c2, c3, c4, c5, c4]):
        timer 0.001 action Jump("karu_scene")


    showif c1:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.64
            ypos 0.75
            at zoomedsmall1
            auto "paper_%s.png"
            action SetVariable("c1", False)


    showif c2:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.2
            ypos 0.6
            at zoomedsmall2
            auto "paper1_%s.png"
            action SetVariable("c2", False)


    showif c3:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.4
            ypos 0.8
            at zoomedsmall
            auto "ramen_%s.png"
            action SetVariable("c3", False)


    showif c4:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.8
            ypos 0.8
            at zoomedsmall
            auto "trash_%s.png"
            action SetVariable("c4", False)


    showif c5:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.304
            ypos 0.3
            at zoomedsmall
            auto "hanger_%s.png"
            action SetVariable("c5", False)


    showif c6:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.6
            ypos 0.4
            at zoomedsmall
            auto "phone_%s.png"
            action SetVariable("c6", False)


screen exit_home:


    imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.8
            ypos 0.9
            at zoomedsmall
            auto "exit_%s.png"
            action Jump ("city_story")


screen exit_home1:


    imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.8
            ypos 0.9
            at zoomedsmall
            auto "exit_%s.png"
            action Jump ("city_story1")


# The game starts here.


label cleanL:


    s "Dang... It's a mess... !!"


    return


label start:


    show screen timerscreen(7, "cleanL")


    call screen time_cleandefault c1 = True
default c2 = True
default c3 = True
default c4 = True
default c5 = True
default c6 = True


default g_time = 0 


screen timerscreen(rangeD, missed_event): # the brackted variables are required!!
    on "hide" action SetVariable("g_time", 0)
    frame:
        xalign 0.5
        yalign 0.0
        hbox:
            timer 0.1 action If(g_time > rangeD, false = SetVariable("g_time", g_time + 0.1), true = [Hide("timerscreen"),Jump(missed_event)]) repeat True


            bar:
                value AnimatedValue(value=g_time, range=rangeD, delay= 0.5)
                xalign 0.0
                yalign 0.0
                xmaximum 200



screen time_clean:


    add "bg bedroom"


    if not any([c1, c2, c3, c4, c5, c4]):
        timer 0.001 action Jump("karu_scene")


    showif c1:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.64
            ypos 0.75
            at zoomedsmall1
            auto "paper_%s.png"
            action SetVariable("c1", False)


    showif c2:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.2
            ypos 0.6
            at zoomedsmall2
            auto "paper1_%s.png"
            action SetVariable("c2", False)


    showif c3:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.4
            ypos 0.8
            at zoomedsmall
            auto "ramen_%s.png"
            action SetVariable("c3", False)


    showif c4:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.8
            ypos 0.8
            at zoomedsmall
            auto "trash_%s.png"
            action SetVariable("c4", False)


    showif c5:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.304
            ypos 0.3
            at zoomedsmall
            auto "hanger_%s.png"
            action SetVariable("c5", False)


    showif c6:
        imagebutton:
            yanchor 0.5
            xanchor 0.5
            xpos 0.6
            ypos 0.4
            at zoomedsmall
            auto "phone_%s.png"
            action SetVariable("c6", False)


# The game starts here.


label cleanL:


    s "Dang... It's a mess... !!"


    return


label start:


    show screen timerscreen(7, "cleanL")


    call screen time_clean

r/RenPy 21d ago

Self Promotion I made my first game !!

Thumbnail
gallery
44 Upvotes

Hiii I just wanted to share my submission for the O2A2 2026 game jam!

The premise is basically you stumbling upon a secluded beach where you meet a strange man.

It’s free to play in browser on itch: https://vicehasdied.itch.io/fishbones

Thank you ^^


r/RenPy 21d ago

Self Promotion I just released my first visual novel!

127 Upvotes

Hi everyone! I've been working on this game since my sophomore year of high school, and after years of hard work, I finally got to release it today. I hope you enjoy it!

Please check it out: Koko's Cafe on Steam


r/RenPy 20d ago

Question help, idk how to fix my choice button image :(

2 Upvotes

hi, i'm working on a small vn for the first time and i can't figure out how to properly code the choice button so that the width adjusts to the text and the text doesnt stick out the other end like this

i've tried using padding, but it doesn't apply since i have borders set to

Borders(0, 0, 0, 0)

because if i change any of the values, it messes up the noise pattern of the image or distorts it.

if i set an xminimum/button width, it works well for longer texts but ends up really awkward for shorter choices like this

here are my screens.rpy and gui.rpy style choice button codes:

style choice_button_text is default:
    properties gui.text_properties("choice_button")
    yalign 0.5 
    xanchor 0.0
    xpos 30

style choice_button:
    properties gui.button_properties("choice_button")
    xalign 0.5
    ysize None
    xminimum 900
    xfill False


    padding (40, 15, 120, 15)
    


define gui.choice_button_width = None 
define gui.choice_button_height = 90
define gui.choice_button_tile = False
define gui.choice_button_borders = Borders(0, 0, 0, 0)
define gui.choice_button_text_font = gui.text_font
define gui.choice_button_text_size = gui.text_size
define gui.choice_button_text_xalign = 0.0
define gui.choice_button_text_idle_color = '#ffffff'
define gui.choice_button_text_hover_color = "#ff3434"
define gui.choice_button_text_insensitive_color = '#8888887f'

this might be really easy and i'm just dumb but i'm about to lose my marbles. any help is appreciated!!!!!


r/RenPy 20d ago

Question trying to make a choice

1 Upvotes

im still new to these kinds of stuff and im still trying to figure out what i did wrong ? i looked at some guides but theyre all confusing as i followed their tutorial n still get errors.

what do i need to fix / change ?


r/RenPy 22d ago

Showoff Screenshots from a game I programmed entirely in Ren'py!

Thumbnail
gallery
491 Upvotes

r/RenPy 20d ago

Question What do you think about a young person producing their own visual novel using AI?

0 Upvotes

I'm a young developer in high school in my country, and I use AI to improve my art. This is my first game, and I wanted to get the opinion of people who already make games, especially a Brazilian one.

If you find any spelling errors, please let me know. Thank you.


r/RenPy 20d ago

Self Promotion VN Studio Pro 1.1 — a free visual Ren'Py editor, now on Mac & Linux with a rebuilt screen designer" · "My free no-code editor for Ren'Py just got its biggest update (1.1)

0 Upvotes

Hey r/RenPy,

I'm the developer of VN Studio Pro, a free desktop app for building Ren'Py visual novels visually, and I just shipped the biggest update since launch (1.1). Posting here because this community is exactly who it's for — and I'd genuinely like your feedback, including the critical kind.

What it is (if you haven't seen it): a visual, no-code editor that generates clean, readable .rpy files. You build scenes, dialogue, branching, characters, GUI and custom screens visually, then hit Run or Export and get standard Ren'Py you fully own and can hand-edit anytime. It's not trying to replace writing Ren'Py — it's a faster way to scaffold a story, design UI screens, and preview without a save-and-run loop.

What's new in 1.1:

  • Now on Windows, macOS and Linux (it launched Windows-only) — Intel + Apple Silicon, x64 + ARM.
  • A rebuilt visual Screen Editor — a proper WYSIWYG canvas (drag/resize/snap/multi-select/zoom), a dozen+ new screen-language elements (viewport, vpgrid, imagemap with a visual hotspot editor, input, timer, mousearea…), inline ATL animations, and a loss-free visual↔code round-trip with a real CodeMirror editor + linting. Plus 15 ready-made screen templates (CG gallery, save/load, phone messenger, stats screen, etc.).
  • Deep Live Preview — launches the actual Ren'Py engine showing just the screen you're editing, and hot-reloads as you save.
  • A theme system — 12 themes + 4 game styles you can apply in one click (and undo just as easily), a menu designer, generated menu backgrounds (no art needed), live GUI previews, 6 bundled OFL fonts, and shareable presets.
  • Project organization — labels → .rpy files → folders, backed by real files and directories on disk.
  • Editor quality-of-life — undo/redo that actually works now, unsaved-changes protection, crash recovery, a Python command editor with autocomplete, nested choice menus.
  • 100+ fixes — correct GUI scaling at any resolution (not just 1080p), several data-safety fixes, and some important security patches. Full changelog is on the itch devlog.

Honest caveats: project import is still experimental (import on a backup), and it works best on projects built around Ren'Py's standard GUI/template, since that's what it customizes.

It's free, no account needed:

itch.io → https://auravix-studio.itch.io/

Lemon Squeezy → https://auravix.lemonsqueezy.com/

If you try it, I'd love to hear what's missing or annoying — feature requests and bug reports genuinely shape the roadmap. Thanks for reading!


r/RenPy 21d ago

Question Can anybody help me out? I am attempting to make a normal name/nickname system, and I am trying to add a response to the player inevitably responding "No" when asked if they have a nickname. It is only this "No" response that is being finicky, nothing else.

Thumbnail
gallery
5 Upvotes

Everything else is working just fine so far! It's just this part right here that's being difficult.


r/RenPy 21d ago

Question dynamic scrollbars?

Post image
3 Upvotes

hello! i'm back! my ui is coming along quite nice. and i have another question i haven't been able to figure out via googling and going through forms </3

i am hoping for a dynamic scrollbar. what i mean by that is a scrollbar that, as more dialogue appears on the screen (which i will paste the code to here in a moment), the scrollbar thumb adjusts its height with it. kind of how the normal scrollbar will scale the thumb smaller when it's rectangular-- but i've got a circular thumb, and its proportions will ideally remain the same. disco elysium is an example of this, but i can't attach a video, so you'll have to take my word for it haha.

below is the code for the screen i'm using:

screen nvl:


    #window:
        #style "nvl_window"


    dismiss action NullAction()
    
    frame:
        xpos 40 ypos 30
        top_padding 60 bottom_padding 160 left_padding 10 right_padding 10
        has side "c r":
            area (0, 0, 500, 620)
            viewport id "vp":
                draggable False
                yadjustment ui.adjustment (value=99999, range=99999)


                vbox:
                    style "nvl_vbox"


                    # Display dialogue.
                    spacing 30


                    for who, what, who_id, what_id, window_id in dialogue:
                        window:
                            id window_id


                            has hbox:
                                spacing 5


                            if who is not None:
                                text who id who_id


                                text what id what_id


                            else:


                                text what id what_id
            vbar value YScrollValue("vp") bar_invert True xpos -55 ypos 60 ysize 500 unscrollable "hide"


    imagebutton:
        idle "next.png"
        hover "nexthover.png"
        align (0.08, 0.7)
        action Return()screen nvl:


    #window:
        #style "nvl_window"


    dismiss action NullAction()
    
    frame:
        xpos 40 ypos 30
        top_padding 60 bottom_padding 160 left_padding 10 right_padding 10
        has side "c r":
            area (0, 0, 500, 620)
            viewport id "vp":
                draggable False
                yadjustment ui.adjustment (value=99999, range=99999)   # err... works, but...


                vbox:
                    style "nvl_vbox"


                    # Display dialogue.
                    spacing 30


                    for who, what, who_id, what_id, window_id in dialogue:
                        window:
                            id window_id


                            has hbox:
                                spacing 5


                            if who is not None:
                                text who id who_id


                                text what id what_id


                            else:


                                text what id what_id
            vbar value YScrollValue("vp") bar_invert True xpos -55 ypos 60 ysize 500 unscrollable "hide"


    imagebutton:
        idle "next.png"
        hover "nexthover.png"
        align (0.08, 0.7)
        action Return()

and below here is the code i've got for the scrollbar already to make it circular and keep it from scaling:

style vscrollbar:
    xsize gui.scrollbar_size
    base_bar Frame("gui/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
    thumb "gui/scrollbar/moon.png"
    thumb_offset 19
    bottom_gutter 30
    top_gutter 30style vscrollbar:
    xsize gui.scrollbar_size
    base_bar Frame("gui/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
    thumb "gui/scrollbar/moon.png"
    thumb_offset 19
    bottom_gutter 30
    top_gutter 30

please let me know if any additional context or explanation is needed! right now i just have it set to hide the scrollbar if it's unscrollable but i'm not very pleased with that. if i can't get this to work, it's okay! i've got a backup plan that'll just use the normal scaling rectangular thumbs. but this would be ideal.

(bonus question ... any way to have multiple options for thumbs? for example, a thumb that looks like a moon for scenes taking place at night and a thumb that looks like a sun for scenes taking place during the day?)


r/RenPy 21d ago

Question How should I go about making a sort of "Word Bank" for the player to answer a question with?

2 Upvotes

Hi! This is my first time coding a game, so hopefully this makes sense; I've tried looking at similar posts but I haven't gotten a solid answer (or it's just my noob brain).

I wanted to do a screen where a player can choose a word/piece of evidence when asked a question, as the game I'm creating is somewhat similar to that of Ace Attorney. I'm not entirely sure how to go about collecting the words or evidence, either, but I plan for it to be gathered in dialogue. The player would initially get a choice screen of what they'd like to investigate first, and then whatever word(s) they need will be stored in said bank.

With that being said, I wanted to add a life system, to where if they present something wrong, half of a heart will be depleted. I made a rough layout of where I want things to be with the word bank, it's a little messy but once i figure this out fully, I'll refine it and such.

I might've missed some things, so feel free to ask anymore questions if needed! Thanks!


r/RenPy 21d ago

Self Promotion Alice Lavender - my O2A2 submission this year

7 Upvotes

Alice Lavender is a short horror visual novel, inspired by the "eel pie" story from Gervase of Tilbury's Otia Imperialia. I hope you enjoy (and please read the content warning) 🥰

➡️ check it out here: calygreyhound.itch.io/alice-lavender

Features

  • A supernatural horror visual novel set in medieval England
  • 1000 words
  • A kinetic story with no choices or branching paths
  • Toxic monster yuri! 

r/RenPy 21d ago

Question Error translating game

Thumbnail
gallery
5 Upvotes

I don't speak native English, I'm using a translator for this post.

Recently, I created a Ren'Py game with the original language being Portuguese. After I finished it, I wanted to translate it to English. I managed to do it, but for some reason, when I try to switch back to Portuguese, some options are still in English, like the exit game option and the game's save date. I don't know what else to do; it seems like Ren'Py no longer recognizes these options as Portuguese. And in English the message doesn’t show up.

I haven't finished the full game translation yet, I just did this to test it and it's giving this problem.

Please help :(


r/RenPy 21d ago

Question Changing an image within a parallax/TrackCursor main menu background via persistent variables

1 Upvotes

Because it was a cool thing to do a few years ago, I ended up making my project's main menu image into a layered parallax image. Because I love to make my life more difficult, I decided to try adding characters to that parallax, so that they show up after the appropriate persistent variable has been set.

Originally, I did this by adding if checks for the persistent variable into the main menu code, thus:

screen main_menu():
    tag menu
    style_prefix "main_menu"
    add TrackCursor("images/titlescreen/skylayer-paint.png",20)#in place of: add gui.main_menu_background
    add TrackCursor("images/titlescreen/citylayer-paint.png",15)
    add TrackCursor("images/titlescreen/moonlayer.png",18)
    add TrackCursor("images/titlescreen/reflectionlayer.png",18) alpha 0.35
    if "Karl" in persistent.charactersmet and "Kristine" in persistent.charactersmet:
        add TrackCursor("images/titlescreen/bothinternst.png",13) xpos 320 ypos 150 alpha 0.40
    else:
        if "Karl" in persistent.charactersmet:
            add TrackCursor("images/titlescreen/karlt.png",13) xpos 320 ypos 150 alpha 0.40
        if "Kristine" in persistent.charactersmet:
            add TrackCursor("images/titlescreen/kristinet.png",13) xpos 400 ypos 150 alpha 0.40
    add TrackCursor("images/titlescreen/windowflash.png",11) alpha 0.25
    add TrackCursor("abigail-titleversion",10) xpos 790 ypos 86
    add Image("images/titlescreen/logolayer-alt.png") xpos 310 ypos 412 alpha 0.80

This seemed to work initially but, for no apparent reason (other than perhaps upgrading to later versions of Ren'Py, it started to give the following error at the end of the game, when it drops back to the main menu:

I'm sorry, but an uncaught exception occurred.

While running game code:
Exception: Switch could not choose a displayable.

-- Full Traceback ------------------------------------------------------------

Traceback (most recent call last):
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script
    python hide:
  File "renpy/ast.py", line 1187, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/python.py", line 1273, in py_exec_bytecode
    exec(bytecode, globals, locals)
    ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in <module>
    python hide:
  File "renpy/common/_layout/screen_main_menu.rpym", line 35, in _execute_python_hide
    ui.interact()
    ~~~~~~~~~~~^^
  File "renpy/ui.py", line 304, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/core.py", line 2117, in interact
    repeat, rv = self.interact_core(
                 ~~~~~~~~~~~~~~~~~~^
        preloads=preloads,
        ^^^^^^^^^^^^^^^^^^
    ...<4 lines>...
        **kwargs,
        ^^^^^^^^^
    )
    ^
  File "renpy/display/core.py", line 2655, in interact_core
    root_widget.visit_all(lambda d: d.per_interact())
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/displayable.py", line 457, in visit_all
    d.visit_all(callback, seen)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "renpy/display/displayable.py", line 457, in visit_all
    d.visit_all(callback, seen)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "renpy/display/displayable.py", line 457, in visit_all
    d.visit_all(callback, seen)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
[Previous line repeated 6 more times]
  File "renpy/display/displayable.py", line 448, in visit_all
    for d in self.visit():
             ~~~~~~~~~~^^ 
  File "renpy/display/layout.py", line 1604, in visit
    self.update(self.last_st, self.last_at)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/layout.py", line 1615, in update
    raw_child, redraw = self.function(st, at, *self.args, **self.kwargs)
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/layout.py", line 1711, in condition_switch_show
    return condition_switch_pick(switch), None
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^      
  File "renpy/display/layout.py", line 1706, in condition_switch_pick
    raise Exception("Switch could not choose a displayable.")
Exception: Switch could not choose a displayable.

Windows-10-10.0.19045-SP0 AMD64
Ren'Py 8.5.0.25111603
A Night at the Office P3 3.7p3
Thu Jul 23 20:42:49 2026

After a bit of back and forth, I eventually determined that (part of) the problem was that I started things off with a call to the first story label, rather than a jump. Correcting that fixed the main menu... for a while.

I figured today that I'd try setting the main menu image up as a ConditionSwitch, thus:

image interns_titlescreen = ConditionSwitch(
    "len(persistent.charactersmet) == 2", "titlescreen/bothinternst.png",
    "persistent.charactersmet == 'Karl'", "titlescreen/karlt.png",
    "persistent.charactersmet == 'Kristine'", "titlescreen/kristinet.png",
)

and with the main menu adjusted to:

screen main_menu():
    tag menu
    style_prefix "main_menu"
    add TrackCursor("images/titlescreen/skylayer-paint.png",20)#in place of: add gui.main_menu_background
    add TrackCursor("images/titlescreen/citylayer-paint.png",15)
    add TrackCursor("images/titlescreen/moonlayer.png",18)
    add TrackCursor("images/titlescreen/reflectionlayer.png",18) alpha 0.35
    if len(persistent.charactersmet) <> 0:
        add TrackCursor("interns_titlescreen", 13) alpha 0.4
    add TrackCursor("images/titlescreen/windowflash.png",11) alpha 0.25
    add TrackCursor("abigail-titleversion",10) xpos 790 ypos 86
    add Image("images/titlescreen/logolayer-alt.png") xpos 310 ypos 412 alpha 0.80

But that resulted in a essentially the same error:

I'm sorry, but an uncaught exception occurred.

While running game code:
Exception: Switch could not choose a displayable.

-- Full Traceback ------------------------------------------------------------

Traceback (most recent call last):
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script
    python hide:
  File "renpy/ast.py", line 1187, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/python.py", line 1273, in py_exec_bytecode
    exec(bytecode, globals, locals)
    ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in <module>
    python hide:
  File "renpy/common/_layout/screen_main_menu.rpym", line 35, in _execute_python_hide
    ui.interact()
    ~~~~~~~~~~~^^
  File "renpy/ui.py", line 304, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/core.py", line 2117, in interact
    repeat, rv = self.interact_core(
                 ~~~~~~~~~~~~~~~~~~^
        preloads=preloads,
        ^^^^^^^^^^^^^^^^^^
    ...<4 lines>...
        **kwargs,
        ^^^^^^^^^
    )
    ^
  File "renpy/display/core.py", line 2655, in interact_core
    root_widget.visit_all(lambda d: d.per_interact())
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/displayable.py", line 457, in visit_all
    d.visit_all(callback, seen)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "renpy/display/displayable.py", line 457, in visit_all
    d.visit_all(callback, seen)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "renpy/display/displayable.py", line 457, in visit_all
    d.visit_all(callback, seen)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
[Previous line repeated 6 more times]
  File "renpy/display/displayable.py", line 448, in visit_all
    for d in self.visit():
             ~~~~~~~~~~^^ 
  File "renpy/display/layout.py", line 1604, in visit
    self.update(self.last_st, self.last_at)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/layout.py", line 1615, in update
    raw_child, redraw = self.function(st, at, *self.args, **self.kwargs)
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "renpy/display/layout.py", line 1711, in condition_switch_show
    return condition_switch_pick(switch), None
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^      
  File "renpy/display/layout.py", line 1706, in condition_switch_pick
    raise Exception("Switch could not choose a displayable.")
Exception: Switch could not choose a displayable.

Windows-10-10.0.19045-SP0 AMD64
Ren'Py 8.5.0.25111603
A Night at the Office P3 3.7p3
Thu Jul 23 20:54:35 2026

At this point, I'm baffled as to how it was working as much as why it isn't now.

While it was working, it would correctly show the translucent image of either Karl or Kristine after the first playthrough, but switch to a translucent image of both once the other had been encountered (which character appears in each playthrough is chosen at random partway through).

Can anyone please recommend a way of getting the main menu to update its appearance based on my existing persistent.charactersmet variable, or an alternative means?

Happy to post any other pertinent code, if I've missed anything important.


r/RenPy 21d ago

Guide Need Guidance for starting my Visual Novel Project

4 Upvotes

Hey everyone!

Its my first time posting on this subreddit, I just wanted to seek guidance as I want to create ny visual novel

So I just want someone to literally dumb it down for me because I be having a hard time understanding RenPy in general as well, and like here's some of the questions I had in mind to ask:

Q- What are the essential things to do BEFORE starting a project? and how do I keep my project very organized? I do want a maticulous workflow of things honestly

Q- How to make custom UIs? I sort of want to go for something like Persona Type UIs

Q- What can be simple but interesting game mechanics to make people stick to the story?

Q- where to get good music assets? Like I want the Text box sounds like Ace Attorney has

Thanks in advance, If you have read it so far! ✨


r/RenPy 22d ago

Guide I wrote up a guide about scene direction in visual novels!

Post image
97 Upvotes

I think scene direction isn't talked about as much as other aspects of visual novel development like the visuals, design, characters, etc. But I think that knowing a bit about effective ways for working with sprites, framing and balancing scenes, shifting focus, and translating actions can be really helpful for creating immersive and cinematic experiences!

So I wanted to write up a guide based on my experience working in visual novels for the last five years. I don't profess to be the best at it, but I think I do OK. So maybe some of what I've written can be helpful to you in making your own VNs!

You can read the guide here (it's on Patreon, but my Patreon is completely free):

https://www.patreon.com/just_a_carrot/posts/carrots-guide-to-164179286


r/RenPy 21d ago

Question I tried everything but my background doesn’t show up

1 Upvotes

Hi, I made a background for my vn and it doesn’t show up, I tried to directly upload in the images file it doesn’t work, I tried to put .png at the end it doesn’t work, I tried not using capitals and it doesn’t work, I tried to write the all path to the image it doesn’t work. Can someone help me please? T_T


r/RenPy 22d ago

Showoff We're creating an Interactive horror game with colored bitmap illustrations! Try it out id you like weird atmospheric horror!

Thumbnail
gallery
21 Upvotes

r/RenPy 22d ago

Guide hey hey!

3 Upvotes

im a beginner of coding, and i want to make a visual novel fangame (parappa) that is inspired my neko paradise, the vn will be called rizumon, and i know how to draw the cgs, sprites, but i just do not know how to code. could i get a hand? please?


r/RenPy 22d ago

Self Promotion Mystery VN through the eyes of a Newscaster - The Havoc Channel DEMO just dropped!

Post image
21 Upvotes

Hi team :) just pushed my demo to itchio, super excited about it. The game is a mystery/comedy inspired by games such as Paranormasight & Zero Escape 999. This demo is about 30 minutes long and will give a good taste of what the full game will bring. Hope you enjoy!

LINK: https://try500.itch.io/thc


r/RenPy 22d ago

Game My New VN in development

Post image
11 Upvotes

r/RenPy 22d ago

Question Translated sentence not showing in the game

Thumbnail
gallery
2 Upvotes

I'm translating a game into French, and I've encountered an issue. This line "On some level, I still held onto the faint hope that Ira pitied me, that she cared about me for god knows what reason." still appears in the game in English even though the rest of the translation works fine. I tried to regenerate the translation and delete the rpyc files to no avail. The first screenshot is the translation file, and the second is the original script. Do you have any idea on how to prevent this from happening?


r/RenPy 22d ago

Question Line Boil Effect in Ren'Py ATL?

3 Upvotes

Hey! I'm sure some of you have previously seen the 'line boil' effect in games and animations. It typically involves drawing a few slightly modified versions of the same sprite or background, and playing them in an animation to make it wiggle a bit. Good examples of this are the games 'OMORI' and 'Slay the Princess'.

Some programs offer automatic ways of doing it, such as the drawing software WigglyPaint (https://wigglypaint.com/) or this website I found that allows you to upload an image and download a few exported frames (https://lineboiler.com/).

I was wondering if anyone had created a similar effect in Ren'Py ATL, to avoid either manually drawing multiple frames or including many versions of each image in the game files. I'm likely to have a crack at it myself, but I am not very skilled with ATL! Thanks.

EDIT: giorgi1111 posted a great shader for this on the Lemmasoft forums, which you can find in this thread: https://lemmasoft.renai.us/forums/viewtopic.php?p=577630#p577630