Posted May 23, 2025 by Patchmonk
#Release announcement.
Hey folks, PatchMonk here!
Just dropping a quick update on what I’ve been building into the 1.5 experimental release of my Ren'Py Inventory System. This release focuses on a highly requested but simple-yet-powerful feature: an easy-to-use item check function that opens up huge gameplay potential. The experimental version is available on GitHub. After completing beta testing and resolving all the bugs, it will be released soon.
has_item()
– Small Function, Massive PossibilitiesI’ve had quite a few requests for this, and it’s finally here. The new has_item()
method is lightweight but super capable when it comes to branching logic, gameplay mechanics, and dynamic storytelling:
def has_item(self, item, quantity=1): total = 0 for slot in self.slots: if item in slot: total += slot[item] return total >= quantity
It simply returns a boolean if the inventory has quantity
or more of the item
. That’s it. But that boolean can now power so much more.
Let me show you exactly how this can be used to trigger real gameplay behavior and story actions.
Reward players who pick the right gifts:
if inventory.has_item("rose"): affection += 10 renpy.jump("romance_path")
Create weird fun checks:
if inventory.has_item("lego_boots"): renpy.jump("lego_level") else: renpy.jump("ouch_scene")
Control flow based on collected items:
if inventory.has_item("ancient_scroll", 3): renpy.jump("unlock_spell") else: # You can use the default renpy notifications like this: renpy.notify("You need 3 scrolls to continue.") $ pm_notify("You need 3 scrolls to continue.", "default" ) # This is our custom notification integrated with the inventory With custom background image and sound.
Give weight to inventory choices:
if inventory.has_item("cursed_idol"): sanity -= 20 renpy.jump("hallucination_sequence")
As a bonus, I’ve added a light ATL screen shake to the error-type notifications—just an experiment, really—to see what kind of UX we can bring into the Ren'Py space. Here's a quick look:
def shake(): renpy.with_statement(vpunch) def pm_notify(message, sound_type="default"): ... if sound_type == "error": shake()
This is not the full rewrite, just a little step forward. The real overhaul will come after 1.5 and will feature a queue-based notification system, built entirely based on user feedback.
📦 The 1.5 experimental branch is live on GitHub. Feel free to download, test, and break it. I’m doing all the final checks myself, so bug reports and feedback are gold right now.
🧪 Final version will release as soon as all major bugs are squashed and feature compatibility is locked in.
Thanks for sticking with the project and tossing me feedback; it does guide development. Once the final 1.5 is out, all eyes are on the next-gen notification system and further inventory expansion.
Keep your wits sharp and your software sharper, PatchMonk!