Create and Fuck your AI Slut -70% OFF
x

Mod Ren'Py Universal Ren'Py Mod / URM [2.6.2] (mod any Ren'Py game yourself)

5.00 star(s) 49 Votes
Nov 23, 2020
156
91
145
hi, Can you make the watchpanel more versatile? Being able to move, maybe also with mouse picking without go in panel, it even below or up to the screen like the Windows bar on the desktop would be excellent, in some scenes it can bother you on the sides and maybe you want to see more details anyway.. another point, you can add auto save for urm file? sometime you forgot to return in urm panel and you close game and lost all change you done it, gg however for excellent work
 

Samhill

Active Member
Nov 2, 2020
722
1,330
284
I wanted to check the mom's corruption level in Mirror Mine. So, I used ALT+M, and tried to do a variables search for "Mom", and I got:

Python:
While running game code:
  File "renpy/common/00action_data.rpy", line 178, in SetLocalVariable
    return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "day7.rpyc", line 71, in script
  File "[Redacted]\MirrorMine-0.20-pc/renpy/ast.py", line 715, in execute
    renpy.exports.say(who, what, *args, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/exports.py", line 1384, in say
    who(what, *args, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/character.py", line 1179, in __call__
    self.do_display(who, what, cb_args=self.cb_args, dtt=dtt, **display_args)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/character.py", line 851, in do_display
    **display_args)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/character.py", line 601, in display_say
    rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/ui.py", line 298, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 3007, in interact
    repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 3418, in interact_core
    root_widget.visit_all(lambda i : i.per_interact())
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 566, in visit_all
    d.visit_all(callback, seen)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 566, in visit_all
    d.visit_all(callback, seen)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 566, in visit_all
    d.visit_all(callback, seen)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/screen.py", line 432, in visit_all
    callback(self)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 3418, in <lambda>
    root_widget.visit_all(lambda i : i.per_interact())
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/screen.py", line 443, in per_interact
    self.update()
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/screen.py", line 631, in update
    self.screen.function(**self.scope)
  File "0x52-URM/screens/main.rpy.x52", line 76, in execute
  File "0x52-URM/screens/main.rpy.x52", line 76, in execute
  File "0x52-URM/screens/main.rpy.x52", line 86, in execute
  File "0x52-URM/screens/main.rpy.x52", line 118, in execute
  File "0x52-URM/screens/main.rpy.x52", line 147, in execute
  File "0x52-URM/screens/main.rpy.x52", line 162, in execute
  File "0x52-URM/screens/main.rpy.x52", line 165, in execute
  File "0x52-URM/screens/main.rpy.x52", line 166, in execute
  File "0x52-URM/screens/search.rpy.x52", line 5, in execute
  File "0x52-URM/screens/search.rpy.x52", line 5, in execute
  File "0x52-URM/screens/search.rpy.x52", line 17, in execute
  File "0x52-URM/screens/search.rpy.x52", line 81, in execute
  File "0x52-URM/screens/search.rpy.x52", line 91, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 67, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 67, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 68, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 71, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 74, in execute
  File "0x52-URM/screens/search.rpy.x52", line 91, in execute
  File "0x52-URM/screens/search.rpy.x52", line 92, in execute
  File "0x52-URM/screens/search.rpy.x52", line 93, in execute
  File "0x52-URM/screens/search.rpy.x52", line 95, in execute
  File "0x52-URM/screens/search.rpy.x52", line 98, in execute
  File "0x52-URM/screens/search.rpy.x52", line 98, in keywords
  File "0x52-URM/screens/search.rpy.x52", line 98, in <module>
  File "renpy/common/00action_data.rpy", line 178, in SetLocalVariable
    return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

Windows-10-10.0.26100
Ren'Py 7.4.2.1292
Mirror Mine 20.0
Sat May  3 06:15:16 2025
0x52 URM 2.6```
Every time after that, I press ALT+M I get the above, only with the day.rpyc changing. The game works fine, URM works for detecting choices, I just can't use ALT+M. I'm also running the game under Sandboxie, would that matter?
 

Boehser Onkel

Forum Fanatic
Modder
Feb 20, 2021
4,878
8,731
592
I wanted to check the mom's corruption level in Mirror Mine. So, I used ALT+M, and tried to do a variables search for "Mom", and I got:

Python:
While running game code:
  File "renpy/common/00action_data.rpy", line 178, in SetLocalVariable
    return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "day7.rpyc", line 71, in script
  File "[Redacted]\MirrorMine-0.20-pc/renpy/ast.py", line 715, in execute
    renpy.exports.say(who, what, *args, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/exports.py", line 1384, in say
    who(what, *args, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/character.py", line 1179, in __call__
    self.do_display(who, what, cb_args=self.cb_args, dtt=dtt, **display_args)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/character.py", line 851, in do_display
    **display_args)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/character.py", line 601, in display_say
    rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/ui.py", line 298, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 3007, in interact
    repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, **kwargs)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 3418, in interact_core
    root_widget.visit_all(lambda i : i.per_interact())
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 566, in visit_all
    d.visit_all(callback, seen)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 566, in visit_all
    d.visit_all(callback, seen)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 566, in visit_all
    d.visit_all(callback, seen)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/screen.py", line 432, in visit_all
    callback(self)
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/core.py", line 3418, in <lambda>
    root_widget.visit_all(lambda i : i.per_interact())
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/screen.py", line 443, in per_interact
    self.update()
  File "[Redacted]\MirrorMine-0.20-pc/renpy/display/screen.py", line 631, in update
    self.screen.function(**self.scope)
  File "0x52-URM/screens/main.rpy.x52", line 76, in execute
  File "0x52-URM/screens/main.rpy.x52", line 76, in execute
  File "0x52-URM/screens/main.rpy.x52", line 86, in execute
  File "0x52-URM/screens/main.rpy.x52", line 118, in execute
  File "0x52-URM/screens/main.rpy.x52", line 147, in execute
  File "0x52-URM/screens/main.rpy.x52", line 162, in execute
  File "0x52-URM/screens/main.rpy.x52", line 165, in execute
  File "0x52-URM/screens/main.rpy.x52", line 166, in execute
  File "0x52-URM/screens/search.rpy.x52", line 5, in execute
  File "0x52-URM/screens/search.rpy.x52", line 5, in execute
  File "0x52-URM/screens/search.rpy.x52", line 17, in execute
  File "0x52-URM/screens/search.rpy.x52", line 81, in execute
  File "0x52-URM/screens/search.rpy.x52", line 91, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 67, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 67, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 68, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 71, in execute
  File "0x52-URM/screens/utils.rpy.x52", line 74, in execute
  File "0x52-URM/screens/search.rpy.x52", line 91, in execute
  File "0x52-URM/screens/search.rpy.x52", line 92, in execute
  File "0x52-URM/screens/search.rpy.x52", line 93, in execute
  File "0x52-URM/screens/search.rpy.x52", line 95, in execute
  File "0x52-URM/screens/search.rpy.x52", line 98, in execute
  File "0x52-URM/screens/search.rpy.x52", line 98, in keywords
  File "0x52-URM/screens/search.rpy.x52", line 98, in <module>
  File "renpy/common/00action_data.rpy", line 178, in SetLocalVariable
    return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

Windows-10-10.0.26100
Ren'Py 7.4.2.1292
Mirror Mine 20.0
Sat May  3 06:15:16 2025
0x52 URM 2.6```
Every time after that, I press ALT+M I get the above, only with the day.rpyc changing. The game works fine, URM works for detecting choices, I just can't use ALT+M. I'm also running the game under Sandboxie, would that matter?
Screenshot_1.png
 
  • Like
Reactions: Samhill
Sep 30, 2020
113
343
174
I am unable to save URM files.
  • URM version 2.6.1
  • Game: Fetish Locator SM v0.7.11 (however, happens with all games as well).
  • Issue: occurs when trying to save URM file.
  • I noticed that the issue started after updating mac OS x from 14.7.4 to 14.7.5.
  • This occurs on all my games now with and without any mods.

Screenshot 2025-05-05 at 10.11.17 AM.jpg
 

Boehser Onkel

Forum Fanatic
Modder
Feb 20, 2021
4,878
8,731
592
Probably a permissions issue. (I'm not very familiair with MacOs)
When you press the "?" button it will show you the path it's trying to save to.
Ren'Py also creates a "log.txt" file. That file will contain a line starting with "0x52:" showing more details about the error.
I am unable to save URM files.
  • URM version 2.6.1
  • Game: Fetish Locator SM v0.7.11 (however, happens with all games as well).
  • Issue: occurs when trying to save URM file.
  • I noticed that the issue started after updating mac OS x from 14.7.4 to 14.7.5.
  • This occurs on all my games now with and without any mods.

View attachment 4809615
 
  • Heart
Reactions: 0x52

Havik79

Conversation Conqueror
Sep 5, 2019
6,981
8,364
778
Curious doesn't seem to work for the game Him. Usually, when there are paths/choices to make, it shows me info for each option, but for him, nothing pops up.
https://f95zone.to/threads/him-v0-2-3-kabuki.235471/

So, for example, in Isekai Paradise, I get this.
You don't have permission to view the spoiler content. Log in or register now.

Yet for the game Him, I have had several choices, and nothing shows up.
 

Boehser Onkel

Forum Fanatic
Modder
Feb 20, 2021
4,878
8,731
592
Curious doesn't seem to work for the game Him. Usually, when there are paths/choices to make, it shows me info for each option, but for him, nothing pops up.
https://f95zone.to/threads/him-v0-2-3-kabuki.235471/

So, for example, in Isekai Paradise, I get this.
You don't have permission to view the spoiler content. Log in or register now.

Yet for the game Him, I have had several choices, and nothing shows up.
that's because the choices are behind labels , not actual used variables (no if/else)

char1 "But more importantly, you're a hero! You bested the ogre that's plagued our city for a decade!"
scene 2_s5 with Dissolve(0.4)
mcn "I did?"
scene 2_s6 with Dissolve(0.4)
char1 "You defeated this monster, did you not?"
scene 2_s6_2 with Dissolve(0.4)
""
scene 2_s10 with dissolve
mcn "..."
call screen scene2_choice1 with dissolve

label scene2_choice1_truth:
$ mc_truth = True

scene 2_s8 with Dissolve(0.7)
mcn "Honestly, I didn't do a thing. A falling cage took the ogre out—pure luck, really."
$ mc_karma += 5
$ karma_more = True

(hope i am not wrong with it :ROFLMAO: )
 
Last edited:
  • Like
Reactions: 0x52

Tiur

Well-Known Member
Nov 13, 2021
1,317
3,669
398
that's because the choices are behind labels , not actual used variables (no if/else)

char1 "But more importantly, you're a hero! You bested the ogre that's plagued our city for a decade!"
scene 2_s5 with Dissolve(0.4)
mcn "I did?"
scene 2_s6 with Dissolve(0.4)
char1 "You defeated this monster, did you not?"
scene 2_s6_2 with Dissolve(0.4)
""
scene 2_s10 with dissolve
mcn "..."
call screen scene2_choice1 with dissolve

label scene2_choice1_truth:
$ mc_truth = True

scene 2_s8 with Dissolve(0.7)
mcn "Honestly, I didn't do a thing. A falling cage took the ogre out—pure luck, really."
$ mc_karma += 5
$ karma_more = True

(hope i am not wrong with it :ROFLMAO: )
Nope, you're right. But it's not because they're behind labels, it's because they use custom choice screens instead of the Ren'Py choice system. See this line instead for the smoking gun:
Code:
    call screen scene2_choice1 with dissolve
That's why. Custom choice screens are completely non-standardized, so there's no possible way URM can extract the choices from them.
 

shmurfer

Engaged Member
Dec 29, 2019
3,079
4,729
387
I'm not exactly sure how this request would be implemented, but can you make a soft and hard ignore for variables and path detection? Or improve the current implementation?

The example I'm bringing up is Lessons in Love. The first two chapters of the game have a SFW toggle for every sexual reference in the game, hidden behind the "bonus" variable being false for the SFW version. Ignoring bonus would save someone playing the game with URM so much time, like several hours if they would otherwise read both sets of dialogue.

There are some occasions where both another variable and bonus are evaluated at the same time e.g
if futabalust15 == True and bonus == True,
but since bonus is on the ignore list, it's not shown to me and I don't realise there was a meaningful split there until I go back over it in the code, or notice there really should have been a decision split.

I'm not sure if making a soft and hard ignore is the way to go, or just making it so I see the rest of the decision tree with the rest of the variables that aren't ignored (So in this case I still get a prompt for "if futabalust15 == True" if I have bonus ignored and the first quote is evaluated)
 
5.00 star(s) 49 Votes