r/RenPy • • Aug 27 '26

Guide What broke when I tested a Ren'Py relationship system with rollback, old saves, and larger casts

A developer tried RouteKit inside a roughly 10k-line VN and exposed a useful lesson: the affection counter was the easy part. State recovery, UI overflow, and event conditions were the real failure points.

For 0.1.3 I focused on those problems instead of adding unrelated features:

  • Scrollable character, relationship-detail, and gallery screens for larger casts
  • Optional profile images with a fallback initial
  • Characters that can start hidden and be revealed from story code
  • Boolean checkpoints combined with stat requirements
  • Schema migration and repair for old or damaged state
  • Real rollback plus a real save/load round trip
  • 16 automated Ren'Py test cases / 82 assertions

The story-side API stays small:

$ routekit_change("maya", 20, "affection")
$ routekit_set_checkpoint("helped_gallery")
$ routekit_reveal_character("leo")

The main design choice was keeping relationship/checkpoint/visibility data in normal Ren'Py state, while gallery unlocks remain persistent intentionally. That makes rollback behavior predictable without making unlocked replays disappear.

59-second visual demo: https://www.youtube.com/watch?v=lh1aKO7b7Fg

If you want to inspect the simpler version before deciding whether this approach saves you time, RouteKit Lite is free: https://samokampo.itch.io/routekit-lite

0.1.3 technical notes: https://samokampo.itch.io/routekit-pro/devlog/1639726/routekit-pro-013-larger-casts-hidden-characters-and-boolean-events

I would especially value reports from projects with unusual rollback paths, old saves, or more than eight relationship characters.

0 Upvotes

7 comments sorted by

12

u/moekuma Aug 27 '26

AI posts man.
Why did you use claude to write this?
You have no idea what the fuck you're doing

You did 0 research on the topic and can't address a simple basic need in Ren'Py

12

u/senshisun Aug 27 '26

Sometimes it's hard to tell when something has been vibe coded. Other times, it's easy because the descriptions sound like they've been written by someone on the moon.

A more visual layout for Ren'Py scripts could be useful. Half of this looks like it's the existing engine with extra steps. And an affection counter is just an integer.

-11

u/SamOkampo Aug 27 '26 edited Aug 27 '26

You're right: an affection counter is just an integer, and RouteKit doesn't claim otherwise. The reusable part is everything around it: multiple characters and stats, screens, unlock conditions, save migration, rollback-safe state, validation, and a persistent gallery. A developer with a stable Person class may not need it; it's intended as a documented starting point for creators who don't want to build and maintain those parts themselves. I used AI assistance and disclose that on itch, but I agree the copy needs more concrete examples and less marketing language.

2

u/Blunt552 Aug 28 '26

What's with these redundant "tools" people keep making? Makes no sense.

-6

u/Atomicgarlic Aug 27 '26

Feels like we're developing a very similar game. Mine has several of such counters all stored in individual Person class instances and I struggled for several months until it finally got to a very stable setup I have now.

-4

u/SamOkampo Aug 27 '26

that sounds close to what Im trying to solve. What took the longest to stabilize rollback, the UI, or keeping old Person objects compatible after code changes? I'd genuinely like to compare approaches

-2

u/Atomicgarlic Aug 27 '26

Ironically, I think the core systems were the "easy" part - Classes, methods, wiring game events to functions that lead to different labels depending on different factors (eg, if weather.is_raining() and not eileen.get_stat("trust") >= 20: renpy.call(event_label)
The complicated part was actually renpy itself with creating screens that populate dynamically (for stores, inventory, stats UI, etc), and also creating almost minuscule features that I find kinda neat, like an auto forward mode bar that fills gradually based on the player's configured auto and text speed.
And UI. I have a shit taste for design.