>[!DANGER]
> Slop since v8.
Ren'Py is an [[MIT License]] licensed visual novel game engine implemented in [[Python]].
- [Website](https://www.renpy.org/)
- [Source](https://github.com/renpy/renpy)
> I use language models to develop Ren'Py, and have since Github copilot came out in beta in 2021.
\- `renpytom` primary developer[^1]
# Notability
Earlier versions were used for games like [[Slay the Princess]] as well as thousands others.
I was mostly interested in it from an [[Interactive Fiction Language]] standpoint.
# Philosophy
Built on top of Python, everything is actually embedded in a Python file with a DSL layer. As a result, text is not the primary environment, *code* is. This differs philosophically from [[Making Ink]] where the focus is on the writing **first**, with code secondary.
## Slop
Developer directly states that they have used [[Github Copilot]] since 2021[^1] and will continue to do so. They probably stated this publicly because they have started using it more heavily and obviously.[^2]
Developer claims that "it is not vibe coded" yet it is pretty clear that it is heading that way. And even if it wasn't, the technology is actively harmful.
# Features
- [Flags](https://www.renpy.org/doc/html/quickstart.html#supporting-flags-using-the-default-python-and-if-statements)
- [Tags](https://www.renpy.org/doc/html/text.html) for text formatting and control flow
## Tags
Tags are basically just short Python functions used for branching and markup.
- `a` - link
- label `jump`
- label `call` and `call_in_new_context`
- screen `show`
- display `showmenu` for game menu
- `alpha` - text opacity
- `alt` - alt text for images (intended for web browsers)
- `art` - alternate japanese ruby text
- `b` - bold
- `color` - color of text
- `cps` - characters per second
- `font` - font select
- `i` - italics
- `image` - images (intended for emoji and small icons on a line of text)
- `k` - text kerning/spacing
- `noalt` - disable text to speech for this section (use next to `alt` to provide different outputs depending on whether the user is doing text to speech or not)
- `rt` - japanese ruby text (superscript text over kanji)
- `s` - strikethrough
- `size` - text size
- `space` - horizontal space between words (like htab)
- `u` - underline
- `vspace` - vertical space between lines (like `<br>`)
- `#` - ignore string for display purposes, only use for translation
Additional text tags:
- `done` - hide remaining text, used with other tags to avoid text jumping around (seems like a workaround)
- `fast` - display text instantly, even in slow mode
- `nw` - no-wait dismisses a line of text as soon as it finishes displaying
- `p` - terminates the current paragraph, pause and wait for user input or timeout
- `w` - wait, pause and wait for user input or timeout (==I'm not clear on how that's different from `p`==)
- `clear` - ==some kind of pagination thing that I don't understand==
Example of how `nw`, `done`, and `fast` combine with an action like `show` to dramatically time events with text.
```
g "Looks like they're{nw}{done} playing with their trebuchet again."
show trebuchet
g "Looks like they're{fast} playing with their trebuchet again."
```
# References
[^1]: https://bsky.app/profile/renpytom.bsky.social/post/3mnuxkqt5ir2b
[^2]: https://github.com/renpy/renpy/pull/6939