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

5.00 star(s) 44 Votes

Johan_0000

Active Member
Apr 14, 2023
793
604
Overall, this would be a pretty low priority feature request, as there is a simple work around. It would have saved me the time (and embarrassment) of not realizing there was even a wildcard search, though :p .
lol none of that here. And, honestly I may be spouting nonsense but I prbbly only knew abt it thx to one of their ytb tutos.
Ig that after some time when you're bored you begin to explore the tool too lol.




THX
 

_user

Member
Jan 16, 2022
147
222
The side image isn't being scaled properly when using full textboxes.
You don't have permission to view the spoiler content. Log in or register now.
Looks like the game wants to use the side image as a transparent overlay instead of inserting it to the left of the textbox like URM does.
 

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,725
6,802
I tried my best to search if this had been requested before, but I can say with 100% certainty - the forum search is pretty awful :)

A quality of life improvement I think would make this great would be to treat an empty variable search query as a 'list all" type search. It is effectively the same as a full wildcard search with just "*", but it would be nice if this worked without having to enable wildcard search. IMO, it would make URM a complete replacement for needing developer mode (because this tool is freaking amazing).

I was considering making something similar because while the developer mode is great and all, it is as bare bones as can be. I am impressed with what you have built here, it is a fantastic addition to any game. Your mod blows what I had in mind out of the water, so I'm glad I didn't pursue mine (plus, python is one of my least favorite languages ;))
Thank you for your kind words.
I might change the behavior to have URM list all variables when you search an empty string.

A suggestion, it might be useful to exclude URM variables during search.
There shouldn't be much. Do you mean URM's settings?

The side image isn't being scaled properly when using full textboxes.
You don't have permission to view the spoiler content. Log in or register now.
Looks like the game wants to use the side image as a transparent overlay instead of inserting it to the left of the textbox like URM does.
This is some strang implementation of that game. Not something URM is going to support
 
  • Like
Reactions: Feyd

Ptroll

Newbie
Jan 22, 2021
28
36
Hello,
This is the Jessica O'Neil game, here there is a choice with a variable.
JessicaOn.jpg
Further on in the game, I want to change it but it can't be found in URM. Any ideas?
JessicaOn1.jpg
 

Tiur

Well-Known Member
Nov 13, 2021
1,276
3,508
Hello,
This is the Jessica O'Neil game, here there is a choice with a variable.
View attachment 4136365
Further on in the game, I want to change it but it can't be found in URM. Any ideas?
View attachment 4136369
The variable is "choices", and from the examples provided, I assume it is a list variable. The first example is adding that quoted value to the list. The second example is testing to see if that value is missing from the list.
 
  • Like
Reactions: 0x52 and theMickey_

Ptroll

Newbie
Jan 22, 2021
28
36
I've opened “choice” of the 2nd image of my post.
JessicaOn2.jpg
If I've understood correctly, it's a listed variable and can it be changed?
 

LucasG

Newbie
Jun 28, 2023
22
17
Just got an exception after tried to report an error during update.

OS: Devuan 5 (stable) on ext4 file system
Game: The Spinney 0.20
URM-Version: 2.3.1 (I'm lazy as f*** with manual updates)

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

The error before was Failed to extract update. 'module' object has no attribute 'O_BINARY' and it happens always if i try to use URM's update-function (never got to report that, mind was somewhere else :sneaky:). I should mention the game-folder has a new, unzippable 0x52_URM.rpa.tmp-file (MD5:658485c37404cb75f1347652e644c0d1) with r/w permissions and my user as owner.
 
Last edited:

LucasG

Newbie
Jun 28, 2023
22
17
Is there a way to fix the infinite loop problem I'm having???
There are quite a few ways how a loop is formed. Without further information, i can only say if the cause is an unmet condition, it can be quite easy to solve but if the developer made an error there could be more needed to work it out. But mostly one would need too look at the code to determine what went wrong...
 

nighthawk1275

Member
Feb 8, 2023
171
162
I played Slatford and when I tried to save the file after my selections in URM it gave me this error.

Code:
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "0x52-URM/classes/URMFiles.rpy", line 16, in saveDir
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'

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

Full traceback:
  File "ch2.rpyc", line 261, in script
  File "D:\NG\Slatford-0.02-pc\renpy\ast.py", line 2557, in execute
    Say.execute(self)
  File "D:\NG\Slatford-0.02-pc\renpy\ast.py", line 615, in execute
    renpy.exports.say(who, what, *args, **kwargs)
  File "D:\NG\Slatford-0.02-pc\renpy\exports.py", line 1493, in say
    who(what, *args, **kwargs)
  File "D:\NG\Slatford-0.02-pc\renpy\character.py", line 1394, in __call__
    self.do_display(who, what, cb_args=self.cb_args, dtt=dtt, **display_args)
  File "D:\NG\Slatford-0.02-pc\renpy\character.py", line 1045, in do_display
    display_say(who,
  File "D:\NG\Slatford-0.02-pc\renpy\character.py", line 741, in display_say
    rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
  File "D:\NG\Slatford-0.02-pc\renpy\ui.py", line 301, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "D:\NG\Slatford-0.02-pc\renpy\display\core.py", line 2165, 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 "D:\NG\Slatford-0.02-pc\renpy\display\core.py", line 2687, in interact_core
    root_widget.visit_all(lambda d : d.per_interact())
  File "D:\NG\Slatford-0.02-pc\renpy\display\displayable.py", line 431, in visit_all
    d.visit_all(callback, seen)
  File "D:\NG\Slatford-0.02-pc\renpy\display\displayable.py", line 431, in visit_all
    d.visit_all(callback, seen)
  File "D:\NG\Slatford-0.02-pc\renpy\display\displayable.py", line 431, in visit_all
    d.visit_all(callback, seen)
  File "D:\NG\Slatford-0.02-pc\renpy\display\screen.py", line 480, in visit_all
    callback(self)
  File "D:\NG\Slatford-0.02-pc\renpy\display\core.py", line 2687, in <lambda>
    root_widget.visit_all(lambda d : d.per_interact())
  File "D:\NG\Slatford-0.02-pc\renpy\display\screen.py", line 491, in per_interact
    self.update()
  File "D:\NG\Slatford-0.02-pc\renpy\display\screen.py", line 697, in update
    self.screen.function(**self.scope)
  File "0x52-URM/screens/vars.rpy.x52", line 343, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 343, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 356, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 31, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 31, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 41, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 49, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 53, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 83, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 87, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 88, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 356, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 367, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 371, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 371, in keywords
  File "0x52-URM/screens/vars.rpy.x52", line 371, in <module>
  File "0x52-URM/classes/URMFiles.rpy", line 16, in saveDir
  File "lib/python3.9/ntpath.py", line 117, in join
  File "lib/python3.9/genericpath.py", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'

Windows-10-10.0.19045 AMD64
Ren'Py 8.2.1.24030407
Slatford 0.02
Fri Oct 18 19:07:39 2024
 

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,725
6,802
I played Slatford and when I tried to save the file after my selections in URM it gave me this error.

Code:
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "0x52-URM/classes/URMFiles.rpy", line 16, in saveDir
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'

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

Full traceback:
  File "ch2.rpyc", line 261, in script
  File "D:\NG\Slatford-0.02-pc\renpy\ast.py", line 2557, in execute
    Say.execute(self)
  File "D:\NG\Slatford-0.02-pc\renpy\ast.py", line 615, in execute
    renpy.exports.say(who, what, *args, **kwargs)
  File "D:\NG\Slatford-0.02-pc\renpy\exports.py", line 1493, in say
    who(what, *args, **kwargs)
  File "D:\NG\Slatford-0.02-pc\renpy\character.py", line 1394, in __call__
    self.do_display(who, what, cb_args=self.cb_args, dtt=dtt, **display_args)
  File "D:\NG\Slatford-0.02-pc\renpy\character.py", line 1045, in do_display
    display_say(who,
  File "D:\NG\Slatford-0.02-pc\renpy\character.py", line 741, in display_say
    rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
  File "D:\NG\Slatford-0.02-pc\renpy\ui.py", line 301, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "D:\NG\Slatford-0.02-pc\renpy\display\core.py", line 2165, 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 "D:\NG\Slatford-0.02-pc\renpy\display\core.py", line 2687, in interact_core
    root_widget.visit_all(lambda d : d.per_interact())
  File "D:\NG\Slatford-0.02-pc\renpy\display\displayable.py", line 431, in visit_all
    d.visit_all(callback, seen)
  File "D:\NG\Slatford-0.02-pc\renpy\display\displayable.py", line 431, in visit_all
    d.visit_all(callback, seen)
  File "D:\NG\Slatford-0.02-pc\renpy\display\displayable.py", line 431, in visit_all
    d.visit_all(callback, seen)
  File "D:\NG\Slatford-0.02-pc\renpy\display\screen.py", line 480, in visit_all
    callback(self)
  File "D:\NG\Slatford-0.02-pc\renpy\display\core.py", line 2687, in <lambda>
    root_widget.visit_all(lambda d : d.per_interact())
  File "D:\NG\Slatford-0.02-pc\renpy\display\screen.py", line 491, in per_interact
    self.update()
  File "D:\NG\Slatford-0.02-pc\renpy\display\screen.py", line 697, in update
    self.screen.function(**self.scope)
  File "0x52-URM/screens/vars.rpy.x52", line 343, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 343, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 356, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 31, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 31, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 41, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 49, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 53, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 83, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 87, in execute
  File "0x52-URM/framework/screens/dialogs.rpy.x52", line 88, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 356, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 367, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 371, in execute
  File "0x52-URM/screens/vars.rpy.x52", line 371, in keywords
  File "0x52-URM/screens/vars.rpy.x52", line 371, in <module>
  File "0x52-URM/classes/URMFiles.rpy", line 16, in saveDir
  File "lib/python3.9/ntpath.py", line 117, in join
  File "lib/python3.9/genericpath.py", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'

Windows-10-10.0.19045 AMD64
Ren'Py 8.2.1.24030407
Slatford 0.02
Fri Oct 18 19:07:39 2024
Interesting. For some reason the dev removed the config.save_directory. This results in the game not having an alternative saves location (%appdata%\RenPy on Windows), meaning, when you remove the game's dir, you saves will also be gone.
URM assumes every game has this location :unsure:

I'm not going to fix this in URM, sorry.
 
  • Like
Reactions: Feyd

nighthawk1275

Member
Feb 8, 2023
171
162
Interesting. For some reason the dev removed the config.save_directory. This results in the game not having an alternative saves location (%appdata%\RenPy on Windows), meaning, when you remove the game's dir, you saves will also be gone.
URM assumes every game has this location :unsure:

I'm not going to fix this in URM, sorry.
That's okay. I posted to ask why they removed the renpy save. Maybe the dev will read it, but thanks for the reply.
 

cpt-jack

Newbie
Jul 14, 2023
18
14
A quality of life function I would love to have, would be to to have a choice/checkbox to exclude internal/standart Renpy variables from the search, but I'm not sure if that's even possible. Or an option to just list the newly defined variables. Anyway I'm loving this mod so much that I'm even adding it to games where I wouldn't even need it :ROFLMAO:
 

vayora5984

Newbie
May 26, 2023
27
43
Thank you for your kind words.
I might change the behavior to have URM list all variables when you search an empty string.
That would be awesome!

There shouldn't be much. Do you mean URM's settings?
I think when people are asking to filter out renpy / mod variables, they mean to "make it more like the developer mode variable viewer". I believe this is the logic they are looking for:

All the places where it skips variables for various reasons, would make it much like what they are expecting
 
  • Like
Reactions: 0x52

0x52

Ren'Py Magician
Modder
Donor
Game Developer
May 23, 2019
1,725
6,802
Just got an exception after tried to report an error during update.

OS: Devuan 5 (stable) on ext4 file system
Game: The Spinney 0.20
URM-Version: 2.3.1 (I'm lazy as f*** with manual updates)

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

The error before was Failed to extract update. 'module' object has no attribute 'O_BINARY' and it happens always if i try to use URM's update-function (never got to report that, mind was somewhere else :sneaky:). I should mention the game-folder has a new, unzippable 0x52_URM.rpa.tmp-file (MD5:658485c37404cb75f1347652e644c0d1) with r/w permissions and my user as owner.
Thanks. Will be fixed in the next update.
But you would have to update manually first :D

A quality of life function I would love to have, would be to to have a choice/checkbox to exclude internal/standart Renpy variables from the search, but I'm not sure if that's even possible. Or an option to just list the newly defined variables. Anyway I'm loving this mod so much that I'm even adding it to games where I wouldn't even need it :ROFLMAO:
It's on my todo list ;)
 
Feb 24, 2020
214
82
Just encountered a game that is unaffected by URM's renaming function. Game is [Breeze of Passion], and it might be something to do with the way dialogues are handed. There's a tl folder (translation) with a .json file inside to handle dialogues, but I am programming-illiterate and this is just my 2-cents worth of thought on why the renaming function does not work in this game.

Also, the variables listed in the game are all in Russian.
You don't have permission to view the spoiler content. Log in or register now.
 
Last edited:

latrop16

Member
May 12, 2018
347
899
I want to report an error in game MILF's Plaza version Steam_15a.
Searching for Values with Search in objects/list/dicts enabled throws error.
From what I can tell they upgraded their RenPy version, but you can see it in the log anyway.
I'm using URM v2.4.1 but have tried v2.3.1 as well.

Code:
I'm sorry, but an uncaught exception occurred.

While loading <renpy.display.im.Image object ('images/cg/igor_activities/None.png') at 0x0000000027e9b490>:
  File "renpy/common/000statements.rpy", line 671, in execute_call_screen
    store._return = renpy.call_screen(name, *args, **kwargs)
  File "renpy/common/00action_other.rpy", line 578, in __call__
    rv = self.callable(*self.args, **self.kwargs)
  File "0x52-URM/classes/search.rpy", line 386, in doSearch
  File "0x52-URM/classes/search.rpy", line 386, in matchVarValue
  File "0x52-URM/classes/search.rpy", line 386, in matchVarValue
  File "0x52-URM/classes/search.rpy", line 225, in _m1_search__matchStringValue
TypeError: a bytes-like object is required, not 'str'

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

Full traceback:
  File "events/ep1/ep1_3_mother.rpyc", line 187, in script call
  File "core/main_interface.rpyc", line 1381, in script
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\ast.py", line 1971, in execute
    self.call("execute")
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\ast.py", line 1950, in call
    return renpy.statements.call(method, parsed, *args, **kwargs)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\statements.py", line 374, in call
    return method(parsed, *args, **kwargs)
  File "renpy/common/000statements.rpy", line 671, in execute_call_screen
    store._return = renpy.call_screen(name, *args, **kwargs)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\exports\statementexports.py", line 345, in call_screen
    rv = renpy.ui.interact(mouse="screen", type="screen", roll_forward=roll_forward)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\ui.py", line 301, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\core.py", line 2201, 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 "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\core.py", line 3272, in interact_core
    rv = root_widget.event(ev, x, y, 0)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\screen.py", line 793, in event
    rv = self.child.event(ev, x, y, st)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\transform.py", line 1083, in event
    rv = d.event(ev, cx, cy, st)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1516, in event
    rv = super(Window, self).event(ev, x, y, st)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 281, in event
    rv = d.event(ev, x - xo, y - yo, st)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\layout.py", line 1287, in event
    rv = i.event(ev, x - xo, y - yo, cst)
  [Previous line repeated 3 more times]
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\behavior.py", line 1182, in event
    return handle_click(self.clicked)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\behavior.py", line 1103, in handle_click
    rv = run(action)
  File "M:\Play\MilfsPlaza-15a3_dlc-pc\renpy\display\behavior.py", line 401, in run
    return action(*args, **kwargs)
  File "renpy/common/00action_other.rpy", line 578, in __call__
    rv = self.callable(*self.args, **self.kwargs)
  File "0x52-URM/classes/search.rpy", line 386, in doSearch
  File "0x52-URM/classes/search.rpy", line 386, in matchVarValue
  File "0x52-URM/classes/search.rpy", line 386, in matchVarValue
  File "0x52-URM/classes/search.rpy", line 225, in _m1_search__matchStringValue
TypeError: a bytes-like object is required, not 'str'

Windows-10-10.0.22631-SP0 AMD64
Ren'Py 8.4.0.24101101+nightly
MilfsPlaza 15a3
Wed Oct 23 11:50:10 2024
 
5.00 star(s) 44 Votes