Creating a Custom Main Menu in Ren'Py with Screen Language and ATL
Step‑by‑step guide to replace Ren'Py's default main menu with a custom screen that includes a background image and animated buttons using ATL.
ReadMeFeed / Community knowledge
Real questions. Useful conversations. Find the people who know your stack.
Step‑by‑step guide to replace Ren'Py's default main menu with a custom screen that includes a background image and animated buttons using ATL.
Learn how to diagnose and fix frequent Ren'Py problems such as black screens, undefined variables, audio glitches, save corruption, and UI misalignment with a step‑by‑step guide.
Stop exporting hundreds of composite sprites. Learn how to use Ren'Py's LayeredImage system to manage character expressions and outfits dynamically through grouped attributes.
Create a Ren'Py menu that updates automatically based on the player’s inventory. Learn how to use screen language, Python logic, and dynamic visibility to keep your UI clean and responsive.
Learn how to use Ren'Py Screen Language to build reactive UIs. This guide covers the difference between show and call screens, using vbox/hbox containers, and managing state with Actions.
When a screen in a Ren'Py visual novel fails to appear or renders incorrectly, pinpointing the root cause can be tricky. This guide walks through common symptoms, diagnostic checks, fixes, and when to seek help—so you can get your UI back on track quickly.
The goal is to allow OS screen readers to announce text displayed by Ren'Py’s default renpy.text.Text displayable when Accessibility Mode is enabled. When renpy.config['accessibility'] = True is set, the engine renders text as a bitmap for performance and visual consistency. This rendering path prevents the underlying string from being exposed to assistive t
Cache Invalidation for Screen Language Animations Ren'Py 8.2 introduced a persistent image cache that stores screen language renderings across launches, using content hashes for deduplication in the cache directory structure. This cache invalidation depends on file modification timestamps and requires explicit renpy.cache.clear() calls to reset. The core iss
Ren'Py keeps persistent data alongside save data by default, and the engine exposes config.encrypted_persistent as an optional flag. The documented description does not make clear whether enabling that flag encrypts persistent values wherever they are written, or whether it only takes effect when persistent data is written to a dedicated persistent file. Tha