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

5.00 star(s) 33 Votes

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,595
6,044
0x52 first of all thank you for the update, as usual URM has yet achieved another new feature and a very useful one and is proving to be more indispensible after each update. But there is some bug/error (I dont know how to word it:sick:). I played two games homelander and villains legacy with the new URM. I freezed the values and it worked fine but whenever after advancing and reloading a previous save the freezed values turn to "unknown". First I thought it was due to my mistake as I freezed a True/False variable but in the next game I faced the same error while freezing values. But when I exit from the game and reload that same save it works fine and the freezed values work like a charm. Again, sorry for pestering you with trifles and thank you very much for such a magic solution to us renpy players that we can play these games independantly without have to wait for any modders.
Another thing I've noticed is that if you have freeze variables in place and try to load the save, it will essentially delete the variable (set the variable to "unknown").
After some testing I figured out this only happens when a variable was created during gameplay and has no default value. It works fine for variables that have a default (hence I didn't notice this during development/testing). It's recommended to add a default value for variables in Ren'Py, but it's not required.
I'm working on a fix for this.

One minor thing is that the autoupdate doesn't actually seem to install anything. Instead, it just creates a .tmp file in the game folder that doesn't actually replace the original mod file. When the scripts reload, it asks to update again.
If I understand correctly. URM says the updated has finished and you need to apply it? After applying you still have the old version and a .tmp file in the game folder?
Do you have this on a/some specific game(s) or on all games? Which platform are you on?

Is there a way to group certain search results together? I mean like if you search stats for a character in a game, can you put them into an expandable group together? I have some games with 100+ variables saved and it'd be easier if I could group and collapse some together to make the list shorter to scroll through.
It's on the roadmap in the OP.
 
  • Red Heart
Reactions: Belzeebub$

endoscopic

Newbie
Oct 7, 2018
51
94
hey man, thanks for this awesome mod! its pretty awesome how the newer versions now are able to detect and track paths, its such a great feature being able to rollback and check out alternate paths with your mod.
however i've just updated to using the 1.13.1 version, with this version i seem to have issues with rollback, my game tends to crash when i tried to roll back to select the other detected paths. This occurs with all games ive used with this version.
I've tried using the 1.12 version and this issue does not occur. Wondering if anyone else has this issue?
 

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,595
6,044
Android use help please
Please be more specific. To use this on Android you could use JoiPlay or use an Android port supporting mods.

hey man, thanks for this awesome mod! its pretty awesome how the newer versions now are able to detect and track paths, its such a great feature being able to rollback and check out alternate paths with your mod.
however i've just updated to using the 1.13.1 version, with this version i seem to have issues with rollback, my game tends to crash when i tried to roll back to select the other detected paths. This occurs with all games ive used with this version.
I've tried using the 1.12 version and this issue does not occur. Wondering if anyone else has this issue?
What is the error you get? Could you maybe share the "traceback.txt" file?
 

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,595
6,044
Important fix

I've just published 1.13.2. This fixes an issue where frozen variables could be erased when loading a save.

In more detail:
This only happened when the frozen variable has no default value and you loaded the save after you've already loaded another save or started a new game.

Thanks Belzeebub and Kata for reporting.
 

Kata

Newbie
Feb 17, 2017
64
816
If I understand correctly. URM says the updated has finished and you need to apply it? After applying you still have the old version and a .tmp file in the game folder?
Do you have this on a/some specific game(s) or on all games? Which platform are you on?
Yep, it'll say it's finished updating and reload the game, but it'll ask to update again. It's not really a big issue as I can just download the file from here, but it seems like something is preventing it from updating.

Windows, and I think it's there for most games. Updates are periodic so it's hard to remember exactly which games I was playing when trying to update, but I'm pretty sure it's only worked for me one time. I'm trying to remember what game that was exactly (it might have been Hard to Love or the Roommate). For pretty much every other game, I get the update loop.
 

jasad

Active Member
Dec 14, 2021
775
597
View attachment 587373

Overview:
Easiest installation, open mod by pressing Alt+M

This mod is a great tool to cheat or debug Ren'Py games. See full Features list below for details.

Some features in short:
Find, change, freeze and monitor variables, detect hidden choices, detect paths, rename any character, find/save/replay scenes, watch variables, skip splashscreen

Updated: 2022-12-18
Game/Creator: Any Ren'Py game using Ren'Py engine 6.99.14 or newer
Modder: 0x52 -
Mod Version: 1.13.2

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

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

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

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

After developing Ren'Py mods for almost a year now. I thought is was time to create the mod of all mods.
So here is what I call URM (or Universal Ren'Py Mod). The goal of this mod is to enable anyone (even without any programming knowledge) to be able to quickly and easily mod any Ren'Py game.
Just drop the mod file into your favorite game's "game" directory and start modding!

Please let me know what you think. I really appreciate any feedback, so I know I'm not doing this for nothing.
Or maybe consider supporting me or .

WARNING!
You could break your game modifying any variable. Use at your own risk!
Breaking the game depends on the game's programming. You could create set of values the game doesn't expect. Which for example could prevent you to progress in the game or miss certain scenes. I would recommend saving before modifying. So you could always go back if something unexpected happens.


Screenshots:
View attachment 1083993 View attachment 2227883 View attachment 1083995 View attachment 1083998 View attachment 1556197 View attachment 1084000 View attachment 1781739


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

Download:
or Attachment below​
thx for the update~ ^_^
 

xtr3mx7

Member
Feb 10, 2019
293
302
Getting this error with the latest version 1.13.2:

Exception: Could not load image u'0x52/images/dialog.x52': error(u'Unsupported image format',)
 
Jan 21, 2021
156
177
found a bug in Rewind that makes the game throw an exception whenever you remember a variable and go to the variables tab. this happens for every single line of text, so clicking rollback or ignore has little to no effect

The following bug happened with the games first line of text after you click start

I'm sorry, but an uncaught exception occurred.

While running game code:
File "game/prologue.rpy", line 7, in script
r "Hey, I know you got things planned, but we need you to stay tonight. It's crunch."
File "renpy/common/00action_data.rpy", line 186, in SetLocalVariable
return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

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

Full traceback:
File "game/prologue.rpy", line 7, in script
r "Hey, I know you got things planned, but we need you to stay tonight. It's crunch."
File "renpy/ast.py", line 921, in execute
renpy.exports.say(who, what, *args, **kwargs)
File "renpy/exports.py", line 1373, in say
who(what, *args, **kwargs)
File "renpy/character.py", line 1266, in __call__
self.do_display(who, what, cb_args=self.cb_args, dtt=dtt, **display_args)
File "renpy/character.py", line 930, in do_display
**display_args)
File "renpy/character.py", line 666, in display_say
rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
File "renpy/ui.py", line 299, in interact
rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
File "renpy/display/core.py", line 3377, in interact
repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, pause_modal=pause_modal, **kwargs) # type: ignore
File "renpy/display/core.py", line 3810, in interact_core
root_widget.visit_all(lambda i : i.per_interact())
File "renpy/display/core.py", line 582, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 582, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 582, in visit_all
d.visit_all(callback, seen)
File "renpy/display/screen.py", line 451, in visit_all
callback(self)
File "renpy/display/core.py", line 3810, in <lambda>
root_widget.visit_all(lambda i : i.per_interact())
File "renpy/display/screen.py", line 462, in per_interact
self.update()
File "renpy/display/screen.py", line 653, in update
self.screen.function(**self.scope)
File "0x52/screens/main.rpy.x52", line 54, in execute
File "0x52/screens/main.rpy.x52", line 54, in execute
File "0x52/screens/main.rpy.x52", line 68, in execute
File "0x52/screens/main.rpy.x52", line 86, in execute
File "0x52/screens/main.rpy.x52", line 124, in execute
File "0x52/screens/main.rpy.x52", line 126, in execute
File "0x52/screens/main.rpy.x52", line 128, in execute
File "0x52/screens/main.rpy.x52", line 131, in execute
File "0x52/screens/vars.rpy.x52", line 5, in execute
File "0x52/screens/vars.rpy.x52", line 5, in execute
File "0x52/screens/vars.rpy.x52", line 19, in execute
File "0x52/screens/vars.rpy.x52", line 41, in execute
File "0x52/screens/vars.rpy.x52", line 51, in execute
File "0x52/screens/vars.rpy.x52", line 52, in execute
File "0x52/screens/vars.rpy.x52", line 53, in execute
File "0x52/screens/vars.rpy.x52", line 81, in execute
File "0x52/screens/vars.rpy.x52", line 84, in execute
File "0x52/screens/vars.rpy.x52", line 90, in execute
File "renpy/ast.py", line 342, in evaluate
value = renpy.python.py_eval(v, locals=scope)
File "renpy/python.py", line 1092, in py_eval
return py_eval_bytecode(code, globals, locals)
File "renpy/python.py", line 1085, in py_eval_bytecode
return eval(bytecode, globals, locals)
File "0x52/screens/vars.rpy.x52", line 90, in <module>
File "renpy/common/00action_data.rpy", line 186, in SetLocalVariable
return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

Windows-10-10.0.19041 AMD64
Ren'Py 7.5.3.22090809
Rewind v0.3.0.5
Mon Dec 19 20:16:11 2022
 
  • Sad
Reactions: Belzeebub$

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,595
6,044
Sorry. I'm unable to reproduce this. Do you maybe have some other mods installed?

Yep, it'll say it's finished updating and reload the game, but it'll ask to update again. It's not really a big issue as I can just download the file from here, but it seems like something is preventing it from updating.

Windows, and I think it's there for most games. Updates are periodic so it's hard to remember exactly which games I was playing when trying to update, but I'm pretty sure it's only worked for me one time. I'm trying to remember what game that was exactly (it might have been Hard to Love or the Roommate). For pretty much every other game, I get the update loop.
Quite strange. Could it be your antivirus software?

Getting this error with the latest version 1.13.2:

Exception: Could not load image u'0x52/images/dialog.x52': error(u'Unsupported image format',)
Seems like your "0x52_URM.rpa" file is corrupt.

found a bug in Rewind that makes the game throw an exception whenever you remember a variable and go to the variables tab. this happens for every single line of text, so clicking rollback or ignore has little to no effect

The following bug happened with the games first line of text after you click start

I'm sorry, but an uncaught exception occurred.

While running game code:
File "game/prologue.rpy", line 7, in script
r "Hey, I know you got things planned, but we need you to stay tonight. It's crunch."
File "renpy/common/00action_data.rpy", line 186, in SetLocalVariable
return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

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

Full traceback:
File "game/prologue.rpy", line 7, in script
r "Hey, I know you got things planned, but we need you to stay tonight. It's crunch."
File "renpy/ast.py", line 921, in execute
renpy.exports.say(who, what, *args, **kwargs)
File "renpy/exports.py", line 1373, in say
who(what, *args, **kwargs)
File "renpy/character.py", line 1266, in __call__
self.do_display(who, what, cb_args=self.cb_args, dtt=dtt, **display_args)
File "renpy/character.py", line 930, in do_display
**display_args)
File "renpy/character.py", line 666, in display_say
rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
File "renpy/ui.py", line 299, in interact
rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
File "renpy/display/core.py", line 3377, in interact
repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, pause_modal=pause_modal, **kwargs) # type: ignore
File "renpy/display/core.py", line 3810, in interact_core
root_widget.visit_all(lambda i : i.per_interact())
File "renpy/display/core.py", line 582, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 582, in visit_all
d.visit_all(callback, seen)
File "renpy/display/core.py", line 582, in visit_all
d.visit_all(callback, seen)
File "renpy/display/screen.py", line 451, in visit_all
callback(self)
File "renpy/display/core.py", line 3810, in <lambda>
root_widget.visit_all(lambda i : i.per_interact())
File "renpy/display/screen.py", line 462, in per_interact
self.update()
File "renpy/display/screen.py", line 653, in update
self.screen.function(**self.scope)
File "0x52/screens/main.rpy.x52", line 54, in execute
File "0x52/screens/main.rpy.x52", line 54, in execute
File "0x52/screens/main.rpy.x52", line 68, in execute
File "0x52/screens/main.rpy.x52", line 86, in execute
File "0x52/screens/main.rpy.x52", line 124, in execute
File "0x52/screens/main.rpy.x52", line 126, in execute
File "0x52/screens/main.rpy.x52", line 128, in execute
File "0x52/screens/main.rpy.x52", line 131, in execute
File "0x52/screens/vars.rpy.x52", line 5, in execute
File "0x52/screens/vars.rpy.x52", line 5, in execute
File "0x52/screens/vars.rpy.x52", line 19, in execute
File "0x52/screens/vars.rpy.x52", line 41, in execute
File "0x52/screens/vars.rpy.x52", line 51, in execute
File "0x52/screens/vars.rpy.x52", line 52, in execute
File "0x52/screens/vars.rpy.x52", line 53, in execute
File "0x52/screens/vars.rpy.x52", line 81, in execute
File "0x52/screens/vars.rpy.x52", line 84, in execute
File "0x52/screens/vars.rpy.x52", line 90, in execute
File "renpy/ast.py", line 342, in evaluate
value = renpy.python.py_eval(v, locals=scope)
File "renpy/python.py", line 1092, in py_eval
return py_eval_bytecode(code, globals, locals)
File "renpy/python.py", line 1085, in py_eval_bytecode
return eval(bytecode, globals, locals)
File "0x52/screens/vars.rpy.x52", line 90, in <module>
File "renpy/common/00action_data.rpy", line 186, in SetLocalVariable
return SetDict(sys._getframe(1).f_locals, name, value)
AttributeError: 'ADVCharacter' object has no attribute '_getframe'

Windows-10-10.0.19041 AMD64
Ren'Py 7.5.3.22090809
Rewind v0.3.0.5
Mon Dec 19 20:16:11 2022
See this:
Unfortunately this dev caused an issue within Ren'Py itself. I could only fix this by overruling Ren'Py's build-in function SetLocalVariable(), which I don't want to do.

I have a work-around for you:
  1. Open the file renpy/common/00action_data.rpy
  2. Find the line def SetLocalVariable(name, value): (line 161)
  3. Add a line bellow that one containing: import sys
You don't have permission to view the spoiler content. Log in or register now.

Details:
They assigned a character to the variable sys, which is a because it's use by Ren'Py internally.
Be doing this they broke a function inside Ren'Py that URM needs.
 

zerozip0

Member
May 23, 2018
380
617
I am experiencing several errors with renaming today. It happens both when trying to do it just after loading a save (CollegeBound), but I also get an error when starting fresh in a different vn where I wanted to change the mc's surname...
The issues seem to be different from each other:
You don't have permission to view the spoiler content. Log in or register now.
and
You don't have permission to view the spoiler content. Log in or register now.


Edit: I circumvented both by finding the variables I wanted to change manually.
 
Last edited:

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,595
6,044
It doesn't support the Suspicious game
Posting the error you're getting would be extremely helpful.
Anyhow... the error says "Incompatible Ren'Py version". You're not the first getting that, see this post about the same game:
From the traceback:
Code:
Exception: 0x52: Incompatible Ren'Py engine version
...
Ren'Py 6.99.13.2919
Suspicious 0.24

The game uses an old Ren'Py version that isn't supported by URM:
Here's a possible work-around:
I've did this on a few games and it worked without any problems.
You don't need to recompile. It's easier than that.
Download the renpy SDK zip ( )

Remove the game's 'lib' and 'renpy' directory.
Now unpack renpy sdk, and take the 'lib' and 'renpy' directory from there and put inside the game.
Also take the 'renpy.py', 'renpy.exe', 'renpy.sh' and put them there.

You can now start the game with the renpy.exe and URM should work.

If for some reason the game doesn't work, you could try using an earlier version of renpy.
Its rare but there are cases where renpy does some backwards incompatible changes.

Also, in case you want to rename renpy.exe to 'game_name.exe'.... you also need to rename the 'renpy.exe' inside the 'lib/windows' folder as it will try to find an .exe with the same name.
 
  • Like
Reactions: Belzeebub$

endoscopic

Newbie
Oct 7, 2018
51
94
Sorry. I'm unable to reproduce this. Do you maybe have some other mods installed?

nope, didnt use any other mods, happened in a few other games i tried as well but ive since switched to the 1.13.2 version and have not experienced it again so i guess whatever it was is now irrelevant :)

Thanks for your attention, just keep what you are doing, its awesome work dude! :love:
 
  • Like
Reactions: 0x52
May 21, 2022
219
527
Posting the error you're getting would be extremely helpful.
Anyhow... the error says "Incompatible Ren'Py version". You're not the first getting that, see this post about the same game:


Here's a possible work-around:
Posting the error you're getting would be extremely helpful.
Anyhow... the error says "Incompatible Ren'Py version". You're not the first getting that, see this post about the same game:


Here's a possible work-around:
Okay.I tried the fix nd it fifn't work.
 

TimHawk

Active Member
Dec 12, 2017
954
1,624
Hey 0x52 , would it be possible to add another variables tab and add a button to move variables between the 2 tabs, like 'move to tab A' and 'move to tab B' ? In big games it kinda becomes laggy when one exceeds all variables visible on 1 page. The optimal solution would be a browser like button but instead of "open a new tab" it would be "add another variables tab".

It would also make keeping track of variables much easier, especially given that most games take like 3-6 months for 1 update these days and whenever I play a new update, I've completely forgotten what any of those variables do, sorting them in different tabs ( maybe even allow for renaming the tabs ? ) sure would make it easier.

Awesome idea and execution, love URM !!!
 

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,595
6,044
Doesn't seem to work with Parasite Black
What exactly isn't working? Do you get an error?

Hey 0x52 , would it be possible to add another variables tab and add a button to move variables between the 2 tabs, like 'move to tab A' and 'move to tab B' ? In big games it kinda becomes laggy when one exceeds all variables visible on 1 page. The optimal solution would be a browser like button but instead of "open a new tab" it would be "add another variables tab".

It would also make keeping track of variables much easier, especially given that most games take like 3-6 months for 1 update these days and whenever I play a new update, I've completely forgotten what any of those variables do, sorting them in different tabs ( maybe even allow for renaming the tabs ? ) sure would make it easier.

Awesome idea and execution, love URM !!!
Creating variable groups is on the roadmap. I think that will help with this
 
5.00 star(s) 33 Votes