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

5.00 star(s) 51 Votes

Samhill

Active Member
Nov 2, 2020
758
1,470
335
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,775
618
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
124
447
225
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,775
618
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
7,064
8,468
829
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,775
618
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,680
449
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,323
5,346
688
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)
 

ARB582

Active Member
Jan 6, 2018
585
345
233
I tried using URM with Rogue Like Evolution but got this error

You don't have permission to view the spoiler content. Log in or register now.

Is there something I can do to make it work with the game ?
 

Tiur

Well-Known Member
Nov 13, 2021
1,317
3,680
449
I tried using URM with Rogue Like Evolution but got this error

You don't have permission to view the spoiler content. Log in or register now.

Is there something I can do to make it work with the game ?
You? No. That's something the dev would have to do, because this is very self-explanatory:
Code:
Exception: 0x52: This mod (x52URM) does not support Ren'Py version 6.99.13.2919. Lowest supported version is 6.99.14
I don't expect that dev to do so, either, since they have console commands and instructions on enabling the console right in the spoilers of the OP.
 

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,777
7,395
712
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 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)
So what you're saying it that currently when you ignore bonus the full if futabalust15 == True and bonus == True will be ignored by URM?

I tried using URM with Rogue Like Evolution but got this error

You don't have permission to view the spoiler content. Log in or register now.

Is there something I can do to make it work with the game ?
See:
When you get the exception "0x52: Incompatible Ren'Py engine version" when starting a game it means that the Ren'Py version used by that game isn't supported by URM.

Workaround
There's a workaround for this where you upgrade the Ren'Py version used by the game yourself. But this is not guaranteed to work.
  1. Download the Ren'Py SDK (I would recommend and use the "Download SDK zip" below the buttons)
  2. From the game's folder, remove the folders lib and renpy. Also remove the .exe, .py and .sh files
  3. From the downloaded SDK, put the folders lib and renpy and the files renpy.exe, renpy.py and renpy.sh into the game's folder
  4. Now run the game by starting renpy.exe (on Windows) or renpy.sh (on Linux)
 
5.00 star(s) 51 Votes