6 ms·
Ren'Py has at least 3 major problems: 1. It predates the fact that the "obvious" one-VM-to-rule-them-all is the web browser. Yes, it has a WASM version, but th
by o11c 2y ago
Ren'Py has at least 3 major problems:
1. It predates the fact that the "obvious" one-VM-to-rule-them-all is the web browser. Yes, it has a WASM version, but that's just several MB of overhead; these days it's just plain silly to target anything but HTML/JS-first (not necessarily only; an efficient native version isn't unreasonable if you plan for it) unless you explicitly need backward-compatibility. The fact that you get to write not-quite-Python rather than JS isn't enough to make up for this.
2. The code design is utterly atrocious. Global variables are everywhere in the implementation, and it is common for VNs to write to them from arbitrary places. Expect random breakage if you ever try to upgrade the embedded copy of Python or Ren'Py (either as the end user or as a VN author), even though this also means Ren'Py can't refactor its own code to be sane.
(note that I don't actually consider the mere fact of embedding to a problem per se; for once it's a reasonable decision for the target audience, even if it's a bad idea for most of the cases developers do it)
3. Ren'Py's home-grown scripting system tries to be "smart". In reality that just makes it fragile. The less said, the better.
4. It relies heavily on Pickle, so say hello to arbitrary code execution from data files! Granted, the backward-compatibility problem means you're probably downloading a random binary (plus assorted unsandboxed Python scripts) to execute in the first place ...
I invite everyone to try running the Ren'Py demos by installing them from Debian stable. Yes, Debian sucks for not updating things ... but this kind of error wouldn't even be possible with a sane design.
- Frotag 2y agoOn the bright side, its easy to mod. If you don't like whatever UI customizations or just want cheats, it's usually possible to drop in a simple .py script to fix it.
- aidenn0 2y agoI agree with everything except #1; sure you could run a visual novel on the browser, but I'm not convinced it gives a better experience for multimedia than something based on e.g. SDL or Godot.
- andrewflnr 2y agoI'll stick up for global variables in this context. Think of it as a DSL for stories. For a story, most state is inherently global. Story progress is global, history is global, much as it is for the actual globe. The current scene is global, because the inputs and display are global. It's not a coincidence that globals are also intuitive for relatively non-technical people who won't just go straight for Python, because that's the default mindset until you build something complicated enough for globals to bite you. Re Pickle, besides the counterpoint you already mentioned, people probably aren't downloading saved games off the Internet, so to exploit Pickle an attacker would already need to have disk write access. At that point, exploiting a VN would appear to be low-ROI. I haven't used it, but I don't love the script syntax. I think it wants to look like a screenplay, but it actually looks like the unholy lovechild of Python and assembly. I can easily believe it gets worse from there.
- 0cf8612b2e1e 2y agoFor #2, why wouldn’t you bundle Python? I believe it is already common to vendor game dependencies. Hoping for the best from the installed system Python seems like asking for trouble.
- Yossarrian22 2y agoI noticed on their github they don't have projects or discussions. Their pull requests have several instances along the lines of ugly but works for bug fixes, you seem familiar with the project, are they resistant to modern python standards(and CI/CD) or is it just house style and not knowing better?
- Flop7331 2y agoSo I wouldn't use Renpy to facilitate the backend for enterprise services at scale. In terms of visual novels on the desktop, it does just fine.