Tool Ren'Py Extended Variable Viewer 3.00.04 - For walkthrough authors, game authors and modders

5.00 star(s) 6 Votes

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
Some news :

I added most of what I talked previously, but I also had to make some changes in the configuration screen and my utility functions. Which imply that I have to perform some tests to unsure that it works fine whatever the version of Ren'py.
That's where I am actually and, well, it can take some times. As example, I just past 2 days making both the configuration screen and my utility functions works with the 6.15.7... Just to remember that anyway I already limited the variable viewer to the 6.17.0 :(
It taught me new things about Ren'py and how messy some games authors can be (seriously, who overwrite store.Transform ????) but it didn't helped to advance this project.
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
So, what have I done :

1) The export capability is here.
You can choose what you'll export (all, favorites, changed, last search, this letter), and you can export either in plain text, CVS or XML. This on a new file, at the end of the actual file or in place of the content of the actual file.

2) The so waited possibility to copy to the console is here.
But well it's not a real copy, it just put the name of the variable inside the console history. So, on the console you'll need to press the 'up arrow' key to find it ; well in the same time it mean that you can copy more than one variable name.
To copy the name, right click on it.

3) It's implied above, I changed all the mouse actions.
Now that I have three things done by a click, I can't keep the previous scheme. So now its :
  • Left click on the name : Favorites list. One click put it in, the second remove it ;
  • Right click on the name : Copy to the console as said above ;
  • Left click on the value : Object inspection, one click to open, the second to close.

4) A quick reminder on the viewer screen.
The click have changed, and now there's even a file somewhere where you can export the variables. So, I added a small reminder directly on the viewer screen, to prevent you to be completely lost.

5) A better (at least I tried) help.
I moved the help directly on the configuration screen and rewrote it. It should be more understandable and in the same time give a summary of what you can do with this tool and how to do it.

6) The 'previous value' thing have changed.
It was responsible of most part of the slowness when too many variables was displayed at the same time. So, now the tool will disable it automatically if the number of variable is higher than the given (configurable) limit. And the feature can be enabled/disabled at anytime from the viewer's screen itself.
So, now the unavoidable issues with the slowness should have a really limited impact.

7) I made many change on the configuration interface.
It was too confuse, now everything should be easier to understand.

8) Fixed some minor issues.

9) Finally rewrote OP.
More clear, and with new screenshots.


And... well, what I haven't done :

1) The possibility to customize the style.
Part of the rewriting of the configuration interface is due to this capability, but I'm still facing an obstacle: I must offer a way to have a direct look at what the change imply.
You'll not increase the font size by one, then open the viewer's screen to control that it haven't messed with everything ; right ? So I need to find a way to have a reliable preview ; and I still haven't found it.
And, no, I can't simply use a stylesheet or let you completely define your style. Both the configuration interface and the variable viewer are intend to works with whatever games. They both handle 640x480 screen as well as 1920x1200 like they had the same size. It's the text size, buttons size and even windows size which dynamically change according to the screen size. And this isn't really possible if I let you the possibility to change whatever you want.
Plus, both the viewer and configuration interface also works with version from 6.17.0 to the actual 7.1.0. This mean that the property you love so much is perhaps not available on all the version and can break everything.

2) The better object handling.
I still haven't found the right way to do it. I know that I'll have to make deep change on the core of the tool for this, so I want to be sure before starting.

Hope you'll enjoy this version.
 

Palanto

Active Member
Game Developer
Oct 4, 2017
964
1,835
Wow that are quite nice features you implemented there :) Thanks so much for your hard work :)

About the style, what do you have in mind? :) Wouldn't it be possible to lets say click on a button "Change Font Size" which then opens the variable viewer and a popup with + - and "done" which sets the size i.e. +5 pixels and then calls renpy.restart_interaction() ? Which would refresh the variable viewer right away and a click on "Done" would save the setting?
 
  • Like
Reactions: anne O'nymous

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
Thanks so much for your hard work :)
Honestly, it a bit annoying, a bit frustrating, but also a lot of fun. I'll not do this every days, but when I works on it, despite all the rage I sometimes feel, in the end it was a pleasure. And I learn so many things about Ren'py, which isn't a bad deal ;)


Wouldn't it be possible to lets say click on a button "Change Font Size" which then opens the variable viewer and a popup with + - and "done" which sets the size i.e. +5 pixels and then calls renpy.restart_interaction() ? Which would refresh the variable viewer right away and a click on "Done" would save the setting?
The idea isn't bad, but there's a problem. Either I open the screen as empty, and you'll not see what it do for the name/value ; and like the future object handling will probably involve some styling, you can mess without knowing it. Or I open it "as it", then you can have to deal with the fact that there's too many variables and Ren'py become slow ; this without guaranty that you'll have an object or a list of objects on the screen to validate the effect on them.
But there's perhaps a possibility to open it with a couple of faked variables/values.

I'll keep this on my notes, but... well don't expect it in a near future. I have some mods in mind, few tools I want to finish, oh... and I want to see if I can make a game so I surely also need to find some times for it :D
 
  • Like
Reactions: Palanto

Davox

Well-Known Member
Jul 15, 2017
1,517
2,269
Whats the benefit of being able to copy the console? I play round with cheats in ren'py a lot and I'm wondering if there is something I've been missing. I'm not having a go just interested :)


Is it just the same functionality you get in the normal console i.e. pushing up cycles through the last entries or is it something else like copy to clipboard. That would be useful for helping people on here with console commands, i'm always worried that I'll misspell a command.
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
Whats the benefit of being able to copy the console?
You don't copy the console, but "to the console". So the benefit is just that you don't stuggle when the names are some weird things and/or deep inside an object.
Let's say that you play to Second Happiness and want to change the value of "ShantSleepSiski", or "volley_win_siski_jenny". You no longer need to write all these letters.
  • Open the extended variable viewer ;
  • Filter by "S" or "v", which will make the variable easy to find ;
  • Right click on the variable name ;
  • Return to the game ;
  • Open the console ;
  • Press the "up arrow" key ;
  • Add the "= 5" you wanted to assign ;
  • Enjoy.

So, it's both useless and useful, it depend of how complex the name of the variables are and how good you are to remember them all and type them on the right order with the right case.
 
  • Like
Reactions: Palanto

Palanto

Active Member
Game Developer
Oct 4, 2017
964
1,835
Honestly, it a bit annoying, a bit frustrating, but also a lot of fun. I'll not do this every days, but when I works on it, despite all the rage I sometimes feel, in the end it was a pleasure. And I learn so many things about Ren'py, which isn't a bad deal ;)




The idea isn't bad, but there's a problem. Either I open the screen as empty, and you'll not see what it do for the name/value ; and like the future object handling will probably involve some styling, you can mess without knowing it. Or I open it "as it", then you can have to deal with the fact that there's too many variables and Ren'py become slow ; this without guaranty that you'll have an object or a list of objects on the screen to validate the effect on them.
But there's perhaps a possibility to open it with a couple of faked variables/values.

I'll keep this on my notes, but... well don't expect it in a near future. I have some mods in mind, few tools I want to finish, oh... and I want to see if I can make a game so I surely also need to find some times for it :D
I can imagine that... the annoying and frustrating part :D I'm currently pretty frustrated with a main menu I want to do ;) But yeah that's another story :D

Yeah fake variables would be useful so that you can see all "kinds" of variables (classes and so on) and see the result right away without the "too many variables" delay :) But yeah, it's nothing really important, I wouldn't need it personally. Just wanted to give you an idea that might help you with the task :D
 
  • Like
Reactions: anne O'nymous

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
I can imagine that... the annoying and frustrating part :D
Take your imagination and multiply by 10... :oops: Remember, I need to have solutions compatible with older versions :perservingface:
Now that I have my utilities behind it's good, I worked around most of the issues. But the first time I worked on it, it was something like : "yeah, after trying two days, I finally can do it", followed by, "alright, stay calm, it's now broke with the [whatever] version, but you'll find a way, right ?"
That's why I need to write it in Python equivalent, because there's no way to write something like "if this statement don't exist yet, use this one" in pure Ren'py.


I'm currently pretty frustrated with a main menu I want to do ;)
What I learned is that the straight solution isn't always the better one. If you can't do it with the expected Ren'py feature, try to recreate the said feature.
By example, Veqvil once asked me about an interruptible video, just in case. But one that stop only at the end of the video, to stay right with the following picture. Well, instead of fighting with the video capabilities (they can't do that), I used a screen.
You put the video inside, use a timer set on the movie length, and add a fully transparent imagebutton covering the whole screen. This way, when you click on the screen, wherever you do it, you raise a flag, and the timer will force a return from the screen if it's raised. Else it will just go for another loop of the video.


Just wanted to give you an idea that might help you with the task :D
And it's a good and helpful, thanks.
 
  • Like
Reactions: Palanto

Palanto

Active Member
Game Developer
Oct 4, 2017
964
1,835
Take your imagination and multiply by 10... :oops: Remember, I need to have solutions compatible with older versions :perservingface:
Now that I have my utilities behind it's good, I worked around most of the issues. But the first time I worked on it, it was something like : "yeah, after trying two days, I finally can do it", followed by, "alright, stay calm, it's now broke with the [whatever] version, but you'll find a way, right ?"
That's why I need to write it in Python equivalent, because there's no way to write something like "if this statement don't exist yet, use this one" in pure Ren'py.

What I learned is that the straight solution isn't always the better one. If you can't do it with the expected Ren'py feature, try to recreate the said feature.
By example, Veqvil once asked me about an interruptible video, just in case. But one that stop only at the end of the video, to stay right with the following picture. Well, instead of fighting with the video capabilities (they can't do that), I used a screen.
You put the video inside, use a timer set on the movie length, and add a fully transparent imagebutton covering the whole screen. This way, when you click on the screen, wherever you do it, you raise a flag, and the timer will force a return from the screen if it's raised. Else it will just go for another loop of the video.

And it's a good and helpful, thanks.
Hell yeah, making something compatible for all ren'py versions is pretty impossible with renpy included features :D Since they changed sooo damn much :)

Yup, the straight solution won't work here either, I'll probably have to create a whole new main menu structure myself. The video thing is funny, I got it to work once now it doesn't anymore... with the standard "movie" channel it did work, but when I used my own channel it stopped working, what I'm trying to do in the main menu are things like:
Play a background movie at the main menu screen itself, "pause" this movies "audio" when you click on a button (i.e. preferences) and play another movie displayable in the new screen, when that gets closed "stop" that movie and play the audio and video from the main menu again. Also I want the new screen (again i.e. preferences) to slide in slowly from the left side... weeellll the movie thing did work once.. now it stops the audio and when you get back to the main menu it resumes the audio but the movie itself is stopped and doesn't move anymore :-\
The slide in doesn't work with "ShowMenu" since it doesn't take a transition (I'd either have to rewrite ren'py code for that which I don't really want to or I'd have to do them all as seperate screens and Show them instead of ShowMenu which replaces the main menu one) so I'm rather conflicted right now, I'm trying to bend ren'pys standard main menu to get it to work, but I guess it's hopeless and I'll have to do my own menu all together :D But like I said that's all another story ;)


p.S.: You're welcome ;)
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
The slide in doesn't work with "ShowMenu" since it doesn't take a transition
In the fly I would say that the answer probably look like this :
Code:
default slideX = config.screen_width

screen slideIn():
    timer 0.01:
        repeat True
        action If( slideX != 0, SetVariable( "slideX", slideX - 10 ), Hide( "slideIn" ) )

screen slideOut( target ):
    timer 0.01:
        repeat True
        action If( slideX != config.screen_width, SetVariable( "slideX", slideX + 10 ), Hide( "slideOut" ) )

    #  The calling on "hide" probably already removed the screen, 
    # you need to display it again if you want to see the slide.
    frame:
       xpos slideX
       use target

screen preferences():

    on "show" action Show( "slideIn" )
    on "hide" action Show( "slideOut", "realPreferences" )

    frame:
       xpos slideX
       use realPreferences

screen realPreferences():
   [what is actually the 'preferences' screen]
Still this will happen each time you open the preferences menu, so if you want it to slide only from the main menu, put the two on statements behind a condition. Something like :
Code:
screen preferences:
    if not renpy.get_screen( "main_menu" ) is None:
        on "show" action Show( "slideIn" )
        on "hide" action Show( "slideOut", "realPreferences" )
    else:
        # Be sure that it's on the screen
        on "show" action SetVariable( "slideX", 0 )
        # Don't break the slide.
        on "hide" action SetVariable( "slideX", config.screen_width )

   [...]

[...]ShowMenu which replaces the main menu one)
As far as I remember, it's not ShowMenu the cause here. It just set few variables because Ren'py use another context for the menus. It's because of the "tag menu" that one screen replace the other.
So, get ride of the tag in the preferences screen, add a 'zorder' to make it be displayed on top of the main menu, and you should have both at the same time.
 
  • Like
Reactions: Palanto

Palanto

Active Member
Game Developer
Oct 4, 2017
964
1,835
In the fly I would say that the answer probably look like this :
Code:
default slideX = config.screen_width

screen slideIn():
    timer 0.01:
        repeat True
        action If( slideX != 0, SetVariable( "slideX", slideX - 10 ), Hide( "slideIn" ) )

screen slideOut( target ):
    timer 0.01:
        repeat True
        action If( slideX != config.screen_width, SetVariable( "slideX", slideX + 10 ), Hide( "slideOut" ) )

    #  The calling on "hide" probably already removed the screen,
    # you need to display it again if you want to see the slide.
    frame:
       xpos slideX
       use target

screen preferences():

    on "show" action Show( "slideIn" )
    on "hide" action Show( "slideOut", "realPreferences" )

    frame:
       xpos slideX
       use realPreferences

screen realPreferences():
   [what is actually the 'preferences' screen]
Still this will happen each time you open the preferences menu, so if you want it to slide only from the main menu, put the two on statements behind a condition. Something like :
Code:
screen preferences:
    if not renpy.get_screen( "main_menu" ) is None:
        on "show" action Show( "slideIn" )
        on "hide" action Show( "slideOut", "realPreferences" )
    else:
        # Be sure that it's on the screen
        on "show" action SetVariable( "slideX", 0 )
        # Don't break the slide.
        on "hide" action SetVariable( "slideX", config.screen_width )

   [...]



As far as I remember, it's not ShowMenu the cause here. It just set few variables because Ren'py use another context for the menus. It's because of the "tag menu" that one screen replace the other.
So, get ride of the tag in the preferences screen, add a 'zorder' to make it be displayed on top of the main menu, and you should have both at the same time.
Awesome, that should be a nice workaround :D I'll try it tomorrow (g2g to work in a bit) also yes it's the "tag menu" that replaces the previously as "menu" tagged screen. But the ShowMenu can be rewritten to take a transition argument, but I like your idea more ;) So I'll test it tomorrow as I said :D Thank you so much even though I didn't really come here for help it's very much appreciated :D
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
Download link is broken
It's weird, since it's the exact same link that the one right below, in the "attached" box. But you were right, one worked and the other not. I fixed it.
 
Aug 7, 2018
329
1,500
Recently got into writing walkthroughs and the 'watch / compare' + filter options are exactly what i was looking for.
I can't overstate the sheer QoL improvement and how much time this saves. Thanks for the great work anne O'nymous!

One small issue I had is that the bottom ~60% of the Previous Value line is cut off by the variable list. Since you've already considered adding a font size option in the future, this problem would be solved as well.

Love this tool, keep up the great work!
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
One small issue I had is that the bottom ~60% of the Previous Value line is cut off by the variable list. Since you've already considered adding a font size option in the future, this problem would be solved as well.
Normally it shouldn't happen... well, being honest, it's more that I made my best for it to not happen. Working with any possible game also mean that I need to handle so many screen ratio and style. But still, shouldn't happen, sigh. What game did that to you ? I'll take a look later.

This said, I know that it's already 2 months and that there's no sign of the possibility to change the style. I haven't forget it, but I want to give a try to the game dev career. So, I'm actually working on the base of a game mechanism and, alas, can't really stop mid works. But, once I reach a point where I can stop, I'll go back to this tool.
 
  • Like
Reactions: Palanto
Aug 7, 2018
329
1,500
Normally it shouldn't happen... well, being honest, it's more that I made my best for it to not happen. Working with any possible game also mean that I need to handle so many screen ratio and style. But still, shouldn't happen, sigh. What game did that to you ? I'll take a look later.
Happens on every game I've tried, so it's more likely a problem on my end, rather than with specific games. Tried playing around with several different resolutions (default is 1920 x 1080) but it didn't change anything. If you can think of an easy solution I'd much appreciate it, but no worries if not. Integers are still mostly readable anyway.

All the best with your game dev career!
 
  • Like
Reactions: Palanto

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Respected User
Donor
Jun 10, 2017
10,111
14,798
If you can think of an easy solution I'd much appreciate it, but no worries if not. Integers are still mostly readable anyway.
The size of this part of the screen is hardcoded, so the only thing you can do is change the size of the text. On the console, first look at the actual size :
Code:
style.AONvve_text.size
then change it to something smaller ; I used 25 as example, it can be another value :
Code:
style.AONvve_text.size = 25

All the best with your game dev career!
Actually it's more a, "but what crossed my mind when I decided this", but thanks ;) This said, I learn a lot more about Ren'py, so even if I fail it will worth it.
 

DragonWrath

Member
Donor
Jun 17, 2017
244
233
Having a weird issue here. In pretty much every game I've tried (Superpowered, Corruption, Brothel King, Life by Fasder, Second Happiness, and more). They all seem to have the same or extremely similar errors and I have no idea what I'm doing wrong. The command to bring up the "main menu" for mods (shift+home or shift+*) works fine and brings up the appropriate menu, but the moment I attempt to use this particular tool (command default being alt+E) results in the following error log. No idea why either, as everything else by you works fine for me, just not this specific one and unless I'm missing a file or doing something wrong without realizing it. I downloaded this some time ago and have yet to been able to successfully use it in any form.

I tried to follow the instructions as best as I can but from what I understand, everything you extract from the archive goes into the subfolder called "game" but there's nothing to put in the main folder with the exe except the rare file itself but that made 0 difference (and didn't expect it to either).

Any help to understand why I can't seem to make this work or what I'm doing wrong..... Or has this mod somehow quit working entirely by the time I got it for some unknown reason? o_O

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

DragonWrath

Member
Donor
Jun 17, 2017
244
233
Decided to add another error log for another example. I'm by no means new to ren'py or modding games (of all kinds) and such, but this just has me completely confused because it seems to be working for others (according to this thread) yet doesn't work for me whatsoever and yet this is one tool that I would find insanely useful for many games (from making personal walkthroughs, better details on which choices affect which things, dealing with overly grindy/stats loaded games with better understanding or knowing when/how certain triggers are activated, and so on).

Any help would be greatly appreciated. I would love nothing more than to understand why and what is going on with this.

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


Extra Details that may or may not matter: Attempting to rollback from those error screens have about a 50-50 chance of crashing or going back to the previous scene. Ignore *usually* works on getting out of it without crashing but not at 100%. the other buttons (reload, open traceback, copy to clipboard, and quit) all seem to work with 0 issues. There is an odd thing in that hitting reload tends to force the Mod Menu (shift+home/*) as well as this tool both quits working until I close and start the game again.
 
5.00 star(s) 6 Votes