Game : A Very Full House / W10.You mean the "Freeze" and "Monitor" headers are red in the "Variables" tab? (stating it failed to initialize)
Which games? which OS?
Aah... those are properties of variables and cannot be frozen (might be possible in the future).Game : A Very Full House / W10.
Most of the variable can't be frozen.
Maybe I'm doing it wrong. Also this is not gamebreaking to me as the tool works flawlessly. Just a little bit inconvenience after some time I had to input the value manually.
View attachment 2611093
thx for the update~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: 2023-05-10
Game/Creator: Any Ren'Py game using Ren'Py engine 6.99.14 or newer
Modder: 0x52 -You must be registered to see the links
Mod Version: 1.14.1
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 meYou must be registered to see the linksorYou must be registered to see the links.
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 View attachment 2477575
You don't have permission to view the spoiler content. Log in or register now.
Download:
You must be registered to see the linksor Attachment below
New videos? The last is from December, the first from March 2020Wow!
How long have these new videos been there?![]()
New videos? The last is from December, the first from March 2020![]()
For wildcard searches, is there a specific reason why you made it so thatThis is the expected behavior.
Without wildcard search it searches whatever containslinda
. If you wanted the same result with wildcard search you would have to search for*linda*
. (if you want everything that ends with linda you would search*linda
)
In other words; wildcard search searches for exact matches, unless you use a wildcard of course.
*<term>*
is necessary for searching for variables that contain <term>? From the source code, you're using regex on the query and restricting it by surrounding the query with ^
and $
to denote start and end of string. I think it would probably be better to use the query as-is for wildcard search since it is more intuitive and more flexible.*
and ?
for wildcard/regex characters limits advanced searches (e.g. most variables that start with __
in python are implementation details that are irrelevant when modding). Full regex in the query would make it easy to get all variables and exlude those that start with __
, just use the query: ^(?!__).*$
.__
) excluded by default from the results (e.g. __name__
, __package__
, etc). Maybe you can have an additional search option to show/hide them? You could probably expand this to python's built in types/functions (str
, xrange
, python_set.__doc__
, etc.) so that URM excludes them by default and makes it easier to find relevant variables.Haven't had a chance to look into how you currently handle frozen variables, but there's a simple way to freeze variables that will work regardless of whether the variable is in a class, dict, or inAah... those are properties of variables and cannot be frozen (might be possible in the future).
globals()
via destructors and a helper class. int
, you could easily adapt this to float, str, bool
, etc.Long story short. You would like to have a regexp search option? That's already on my todo list (see here)0x52, this is a great tool, thanks for sharing it!
I had a couple of suggestions after using it and taking a look at the source code.
For wildcard searches, is there a specific reason why you made it so that*<term>*
is necessary for searching for variables that contain <term>? From the source code, you're using regex on the query and restricting it by surrounding the query with^
and$
to denote start and end of string. I think it would probably be better to use the query as-is for wildcard search since it is more intuitive and more flexible.
Also, restricting support to only*
and?
for wildcard/regex characters limits advanced searches (e.g. most variables that start with__
in python are implementation details that are irrelevant when modding). Full regex in the query would make it easy to get all variables and exlude those that start with__
, just use the query:^(?!__).*$
.
On that note, it would be good to have such variables (those that start with__
) excluded by default from the results (e.g.__name__
,__package__
, etc). Maybe you can have an additional search option to show/hide them? You could probably expand this to python's built in types/functions (str
,xrange
,python_set.__doc__
, etc.) so that URM excludes them by default and makes it easier to find relevant variables.
One final suggestion that would be nice to have is sorting the results alphabetically - this would make it easier to jump between pages when there are multiple pages of results (e.g. when searching for all variables).
Just wanted to bring up some thoughts I had while using the tool and hopefully help make this even better. Not sure what your policy is on having others contribute but I could probably attempt updating the code to address some of this stuff if it helps.
Please don't take this as complaining or saying the tool is bad because it is really awesome! Makes it very easy to mod a lot of games![]()
Unfortunately this approach will break saves. And I think it might cause even more issues aside from that.Haven't had a chance to look into how you currently handle frozen variables, but there's a simple way to freeze variables that will work regardless of whether the variable is in a class, dict, or inglobals()
via destructors and a helper class.
Basic idea is to replace current value with a wrapper class. Whenever the value is changed, the wrapper class is destroyed. During class destruction, call into a helper class which will check whether the variable should still be frozen, and if so, it just re-assigns the old value wrapped by a new wrapper class.
I made a POC forint
, you could easily adapt this tofloat, str, bool
, etc.
See code pasteYou must be registered to see the links. Password:You don't have permission to view the spoiler content. Log in or register now.
Thanks. But the renaming still works exactly the same right? It's only a new design?as the videos are mentioned :
some ppl asked me for an updated "rename" video
as its from the very beginning of the tool
...so if you got time
edit :
i made an attempt - see if its good enough 0x52
What OS are we talking about? Is it with all games? Please check the "reporting an issue" section in this post.Hi, I got a weird error whilst trying to save a urm file so that i don't have to constantly manually search the variables, and I got this.
While running game code:
File "game/script.rpy", line 23147, in script call
call outcastto
File "game/script.rpy", line 23860, in script
ym "Since you don't have the necessary {color=#ff696999}100{/color} Arkhe to acquire a new house, you were forced to wander the colony..."
File "renpy/common/00nvl_mode.rpy", line 383, in do_display
**display_args)
File "game/0x52/classes/loader.rpy", line 20, in saveDir
TypeError: object of type 'NoneType' has no len()
-- Full Traceback ------------------------------------------------------------
Full traceback:
File "game/script.rpy", line 23147, in script call
call outcastto
File "game/script.rpy", line 23860, in script
ym "Since you don't have the necessary {color=#ff696999}100{/color} Arkhe to acquire a new house, you were forced to wander the colony..."
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/common/00nvl_mode.rpy", line 383, 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/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/vars.rpy.x52", line 270, in execute
File "0x52/screens/vars.rpy.x52", line 270, in execute
File "0x52/screens/vars.rpy.x52", line 283, in execute
File "0x52/screens/main.rpy.x52", line 278, in execute
File "0x52/screens/main.rpy.x52", line 278, in execute
File "0x52/screens/main.rpy.x52", line 288, in execute
File "0x52/screens/main.rpy.x52", line 296, in execute
File "0x52/screens/main.rpy.x52", line 301, in execute
File "0x52/screens/main.rpy.x52", line 312, in execute
File "0x52/screens/main.rpy.x52", line 313, in execute
File "0x52/screens/vars.rpy.x52", line 283, in execute
File "0x52/screens/vars.rpy.x52", line 295, in execute
File "0x52/screens/vars.rpy.x52", line 299, in execute
File "0x52/screens/vars.rpy.x52", line 299, in keywords
File "0x52/screens/vars.rpy.x52", line 299, in <module>
File "game/0x52/classes/loader.rpy", line 20, in saveDir
File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/ntpath.py", line 65, in join
File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/ntpath.py", line 115, in splitdrive
TypeError: object of type 'NoneType' has no len()
I *may* have taken that as a challengeUnfortunately this approach will break saves. And I think it might cause even more issues aside from that.
*
this significantly improves search performanceplayer.points
)*
with wildcard/regex enabled) and use exclude field to eliminate all results that start with "menu" or "zoom" by setting exclude to menu zoom
Thanks! This is useful to know for the future. Unfortunately, I don't see that option for 0x52, so they have likely disabled it.
Nope, you just have too few posts. The Start Conversation button isn't available on anyone's profile until you've made a few posts.Thanks! This is useful to know for the future. Unfortunately, I don't see that option for 0x52, so they have likely disabled it.
Yesdid a previous version worked?
are you running the game with admin rights?
have you tried a different drive to install the game?
(i recommend this , especially for steam)
did a previous version worked?
are you running the game with admin rights?
have you tried a different drive to install the game?
(i recommend this , especially for steam)
That one is mentioned under "unsupported games" in the second post of this thread.Mod Version: 1.14.1 error in
WickedParadise 0.19.7