Ren'Py Variables changes gone?[SOLVED]

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
Ok... this is kind of a wtf problem for me:

Every time I call a label all variables are reset to their default values, I'm not sure if it is also happening when using jump.
I have setup a key combination to call a stats screen Shift+F6; and when I bring up the stats screen inside a new label all variables are reset to default.

How do i fix that? Am I supposed to import the current variables value into each label?

Forgot to mention that once I return to the main game label all variables are back to normal; with changes and all.
 
Last edited:

the66

beware, the germans are cumming
Modder
Donor
Respected User
Jan 27, 2017
7,668
23,783
don't know, how you've implemented it, but this here should work.

Python:
default var = 33

init python:

    def stats_screen():
        if renpy.context()._menu:
            return
        ToggleScreen("stats")()

    config.underlay.append(renpy.Keymap(stats = stats_screen))
    config.keymap['stats'] = ['shift_K_F6',]

screen wait():
    pass

screen stats():
    zorder 1
    text "[var]" align (.5, .5)

label start:
    $ var = 66
    call screen wait
    return
 
  • Like
Reactions: 9thCrux

Saki_Sliz

Well-Known Member
May 3, 2018
1,403
1,005
now I don't do much of python so I don't know if this is the case, but it could be an issue with scope
if you create your variables in the label or function, then it will just reset the variables, if your variable is outside the label such as the example above, then the label will only modify the data, no recreate it every time.
 
  • Thinking Face
Reactions: 9thCrux

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
don't know, how you've implemented it, but this here should work.

Python:
default var = 33

init python:

    def stats_screen():
        if renpy.context()._menu:
            return
        ToggleScreen("stats")()

    config.underlay.append(renpy.Keymap(stats = stats_screen))
    config.keymap['stats'] = ['shift_K_F6',]

screen wait():
    pass

screen stats():
    zorder 1
    text "[var]" align (.5, .5)

label start:
    $ var = 66
    call screen wait
    return
Thanks, I'm going to try that.
 

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
I think is important to mention that I had problems declaring variables and maybe that is part of the problem.

I used default to set the default value for my variables:
Python:
# Variables.

init :
    default Tif = 0
    default Smi = 0
    default Joa = 0
    default Dar = 0
    default Lau = 0
    
label start:
    init python:
        config.keymap['stat'] = "shift_K_F6" #This is the code to call the stats screen.

    show screen keymap
The stats screen is defined in the "screens" file:

Python:
#Status screen.

screen stats:
    add "gui/stats-wip.png"
    modal True
    zorder 100
    vbox:
        grid 3 4:
            vbox xpos 355 ypos 100:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}     Tiffany{/font}{/color}{/b}"
                text "{size=22} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Tif2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Tif]{/font}{/b}{/color}"

            vbox xpos 790 ypos 95:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}     Daria{/font}{/color}{/b}"
                text "{size=26} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Dar2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Dar]{/font}{/b}{/color}"

            vbox xpos 1220 ypos 97:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}   Emerald{/font}{/color}{/b}"
                text "{size=24} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Eme2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Eme]{/font}{/b}{/color}"

            vbox xpos 355 ypos 175:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}  Mrs. Smith{/font}{/color}{/b}"
                text "{size=22} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Smi2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Smi]{/font}{/b}{/color}"

            vbox xpos 790 ypos 170:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}     Laura{/font}{/color}{/b}"
                text "{size=26} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Lau2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Lau]{/font}{/b}{/color}"

            vbox xpos 1220 ypos 173:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}   Melanie{/font}{/color}{/b}"
                text "{size=24} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Mel2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Mel]{/font}{/b}{/color}"

            vbox xpos 355 ypos 245:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}      Joan{/font}{/color}{/b}"
                text "{size=24} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Joa2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Joa]{/font}{/b}{/color}"

            vbox xpos 790 ypos 245:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}    Marjory{/font}{/color}{/b}"
                text "{size=26} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Mar2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Mar]{/font}{/b}{/color}"

            vbox xpos 1220 ypos 248:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf} Miss Evans{/font}{/color}{/b}"
                text "{size=24} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Eva2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Eva]{/font}{/b}{/color}"

            vbox xpos 355 ypos 320:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}      Alice{/font}{/color}{/b}"
                text "{size=24} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Ali2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Ali]{/font}{/b}{/color}"

            vbox xpos 790 ypos 320:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}      Amy{/font}{/color}{/b}"
                text "{size=26} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Amy2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Amy]{/font}{/b}{/color}"

            vbox xpos 1220 ypos 323:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}       ???{/font}{/color}{/b}"
                text "{size=24} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}???{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}???{/font}{/b}{/color}"


    textbutton "CLOSE" action Hide( "stats" ) xpos 1746 ypos 14
    text "{size=100}{b}{color=#38dec5}?{/color}{/b}{/size}" xpos 1370 ypos 885
    text "{size=40}{b}{color=#38dec5}{font=Roboto-Light.ttf}Relationships{/font}{/color}{/b}{/size}" xpos 820 ypos 15

screen keymap:
    key "stat" action Show( "stats" )
The labels sometimes modify values:

Python:
label now:
    
    hide image intr15
    show image intr17 #Second floor kitchen view to bedroom.
    with dissolve
    $ Tif += 5 #Tif variable changed.

    mc "The door is open. I wonder if she's in there..."
The variables are declared at init level outside any label, labels modify the variables but they don't display the current values when I bring up the stats screen.

I had no option but to use an init block to define variables; I was running into a weird bug that wouldn't let me define variables other way. The bug is described in this thread:

https://f95zone.to/threads/problems-using-default-to-declare-variables.39170/

Maybe the way I implemented variables and the stats screen can be a factor when trying to display the variables inside labels.
 

79flavors

Well-Known Member
Respected User
Jun 14, 2018
1,581
2,219
Okay. Not sure if it's an issue... but I wouldn't expect to see default in an init: block.

Though in theory, default can be pretty much anywhere... so maybe it's not the problem. Maybe try moving those lines elsewhere and see if it makes a difference.

Still reading... might see something else shortly...

Edit: Nope. Nothing else jumps out at me.
I have a vague idea that you need to add store. to the variable names in an init: block... though it's highly likely I'm mixing that up with something else (init python: perhaps?).

My impression is that RenPy scans through all source files when starting up looking for specific commands. default is one, define is another. It doesn't matter where you put them... RenPy will process them before the game starts 0 even if they're in the middle of your code.
But init: blocks are special... and it's that 'special' that has me wondering if that's the cause somehow.

I honestly don't see why... except perhaps that it's getting it's knickers in a twist about local and global variables.

As a way of testing... you can open the console (shift+O) and use the command watch Tif, then exit. That will add your Tif variable to RenPy watch list... so you can keep track of specific variables while the game is running (Remove it again using unwatch Tif).

Only other thing that comes to mind is that you've misspelled "Tif" as "tif" somewhere (or "TiF" or some other variation). Variable names are case sensitive. So Tif and tif would be two completely different variables. And that you've spelt it correctly when recreating your example here. Not likely... but worth thinking about, just in case.
 
Last edited:

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
Okay. Not sure if it's an issue... but I wouldn't expect to see default in an init: block.

Though in theory, default can be pretty much anywhere... so maybe it's not the problem. Maybe try moving those lines elsewhere and see if it makes a difference.

Still reading... might see something else shortly...

Edit: Nope. Nothing else jumps out at me.
I have a vague idea that you need to add store. to the variable names in an init: block... though it's highly likely I'm mixing that up with something else (init python: perhaps?).

My impression is that RenPy scans through all source files when starting up looking for specific commands. default is one, define is another. It doesn't matter where you put them... RenPy will process them before the game starts 0 even if they're in the middle of your code.
But init: blocks are special... and it's that 'special' that has me wondering if that's the cause somehow.

I honestly don't see why... except perhaps that it's getting it's knickers in a twist about local and global variables.

As a way of testing... you can open the console (shift+O) and use the command watch Tif, then exit. That will add your Tif variable to RenPy watch list... so you can keep track of specific variables while the game is running (Remove it again using unwatch Tif).

Only other thing that comes to mind is that you've misspelled "Tif" as "tif" somewhere (or "TiF" or some other variation). Variable names are case sensitive. So Tif and tif would be two completely different variables. And that you've spelt it correctly when recreating your example here. Not likely... but worth thinking about, just in case.
I was reviewing the problem and I noticed that only one label was giving me issues...
Every other label was displaying stats as intended.

I went to check the label again and it was a syntax error; I had:

Python:
label tennis:
 
    $ Tif =+ 5 #Here is the error, it should be +=
    scene black
    hide image ep2088
    $ renpy.pause(2, hard=True)
    show image ep30x0
    with dissolve
    mc "Tennis?"
    ...
 
return
I was using =+ instead of +=...

That was the whole problem, is working fine now.
Thanks for all your help, I'm going to take a couple of seconds to go slap myself now. :LOL:
 
  • Like
Reactions: 79flavors

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
I may need to kill you.


Please slap yourself once for each pause (,hard=True)
It won't help your game, but it'll make me feel better :devilish:
Why!?

Hard pauses are a need.
I'm adding more hard pauses for the upcoming lewd animations P:
 

Porcus Dev

Engaged Member
Game Developer
Oct 12, 2017
2,582
4,692
Why!?

Hard pauses are a need.
I'm adding more hard pauses for the upcoming lewd animations P:
"hard pauses" don't seem to be well received by players, I received some (few) complaints about that.
But I know that some players tend to click the mouse very easily, and as a creator I don't like them to miss any good image (to which I have dedicated time and love, lol), and that's why I think that, at certain times, it's not bad to use "hard pauses"... just make sure you don't abuse of it, that you don't make them too long and, above all, that they aren't in scenes that can be repeated :p
 
  • Like
Reactions: 9thCrux

79flavors

Well-Known Member
Respected User
Jun 14, 2018
1,581
2,219
Personal preference I guess.

Hard pauses are a need.
Strongly disagree :p

I'm adding more hard pauses for the upcoming lewd animations P:
In all seriousness though... Hard pauses FORCE the player to wait.
In my opinion, it's too intrusive a design decision.

Plus, I can't really see any situation where a soft pause won't work equally as well as a hard pause.

For example. You have a 6 second animation. You display the animation using scene and then either code with Pause(6) or pause 6. Then display the next line of dialogue or the next scene.

If you're worried the player may click past the image and not see your cool animation... you could code 2 or 3 lines of dialogue after the animation rather than going straight into a new scene. Chances are, unless the player is intent on not reading and not looking at the pictures... they'll see the animation in full.

But either way, the player still retains the choice of whether to watch the animation in full or not.
By putting a hard pause in there, you remove that choice from the player. Some players won't like that.

Personally, I think my opinion comes from periods of testing games... Where I'm loading saved games and quickly advancing through dialogue I've already tested in order to pick different choices... or test different paths through the code. I can do that... because skip will let me advance at lightning speed through the game... right up until the point I hit a hard pause.

I will add that I also prefer it when pauses are about 1 to 2 seconds shorter than the animation they are showing. You see the animation and a fraction before it finishes... the game continues and lets the player know something new is happening.

But it's your game... You do you. I'm only raising a semi-serious point in what I hope is a semi-humorous way. Your game... your rules.
 
Last edited:
  • Thinking Face
Reactions: 9thCrux

Penfold Mole

Engaged Member
Respected User
May 22, 2017
2,989
6,998
Hard pauses are bad, extremely bad. One of the worst possible things you can find in games.
I'm saying this as a player and a coder.

As a coder, you should always think about such things. You should put yourself in place of the player and in this case ask yourself: Do I want to look at the same damn fucking animation again, when I have seen it already twice..., three times..., ten times? Twenty times?!
The answer usually is: NO FUCKING WAY!

If you want to make your game re-playable, then avoid hard pauses like a plague!

Even when some (fortunately not many) devs create opening titles for their games with hard pauses, it becomes an annoyance if you are forced to look at them every time you start the game, after you have seen the same thing plenty of times already. It becomes "The FBI warning" before the movie starts - everyone will hate it. You would hate it yourself if you were forced to look at it more than five or ten times!

Think about it.
Think about it very hard.
Think about it as a player.
Always.

BTW, when I find some hard pauses in a game to become an annoyance, I usually will just replace those damn buggers with normal pauses, so they are not as annoying to me as they are to players who don't know how to do that. So thinking about it I can only imagine how pissed they can get at them. At the game. At the dev of that game.

As a coder, I would never use hard pauses anywhere where it's not essentially required for some peculiar reason I can't imagine right now.

If you really want to make sure that the player looks at something at least once, you can use hard pauses the first time and use normal pauses after that. It's what persistent variables are for. Use them.
 
Last edited:

Saki_Sliz

Well-Known Member
May 3, 2018
1,403
1,005
If you want to make your game re-playable, then avoid hard pauses like a plague!
this

also, i don't know about others but i'll auto click and speed read at first to find a reason for me to care about the game, and then I restart to properly read.
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,369
15,284
The problem is solved, but there's still things to say about your code, mostly to help you have way less works to do :


Python:
label start:
    init python:
        config.keymap['stat'] = "shift_K_F6" #This is the code to call the stats screen.

    show screen keymap
This is wrong, really wrong. It's more or less the same thing that what 79flavors already said regarding the default. init is something totally independent and have no reason to be in a label.

Actually you are breaking the flow of the game, creating an empty label named "start", followed by an anonymous piece of code starting by show screen keymap. Ren'py is strong enough to know how to works with this kind of errors, but yet it's something you should avoid. Therefore, what you need to write is :
Code:
init python:
        config.keymap['stat'] = "shift_K_F6" #This is the code to call the stats screen.

label start:
    show screen keymap

Python:
screen stats:
    add "gui/stats-wip.png"
    modal True
    zorder 100
    vbox:
        grid 3 4:
            vbox xpos 355 ypos 100:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}     Tiffany{/font}{/color}{/b}"
                text "{size=22} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Tif2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Tif]{/font}{/b}{/color}"

            vbox xpos 790 ypos 95:
                text "{size=30}{b}{color=#38dec5}{font=Roboto-Light.ttf}     Daria{/font}{/color}{/b}"
                text "{size=26} "
                text "{color=#f8d443}{b}{font=Roboto-Light.ttf}[Dar2]{/font}{/b}{/color}"
                text "{size=26} "
                text "{color=#dc0808}{b}{font=Roboto-Light.ttf}[Dar]{/font}{/b}{/color}"
[...]
is a statement designed specifically to position the content for you. Therefore, either you don't need to position the vbox, or you don't need the grid (potentially replacing it by a frame).

You also don't need all those color and font tags, you can use style instead. And there's no need for the text "{size=26} " lines, Ren'py have a screen statement for this.

Code:
style statsBase:
    font "Roboto-Light.ttf"
    bold True

style statsName is statsBase:
    size 30
    color "#38dec5"

style statsValue1 is statsBase:
    color "#f8d443"

style statsValue2 is statsBase:
    color "#dc0808"

screen stats:
    [...]
            vbox xpos 355 ypos 100:
                text " Tiffany" style "statsName"
                null height 22
                text "[Tif2]" style "statsValue1"
                null height 26
                text "[Tif]" style "statsValue2"

            vbox xpos 790 ypos 95:
                text "     Daria" style "statsName"
                null height 26
                text "[Dar2]" style "statsValue1"
                null height 26
                text "[Dar]" style "statsValue2"
[...]

I had no option but to use an init block to define variables; I was running into a weird bug that wouldn't let me define variables other way.
No you don't have. I just launched your game after removing the init and putting back the default at 0 indentation, and it worked fine. Like I said at this time, the line pointed clearly wasn't the one at fault, which happen time to time with Ren'py ; and visibly you solved the effective problem without noticing it.


Also, since I had to take a look at your code, please, please, get ride of all your
define intr00 = "0.01a/intro/intr00.jpg" lines. It's surely something painful for you to write, and it's totally useless (in addition to not be how you should have done it).

Ren'py have its own mechanism to automatically declare of all the images. It's automatic, you've nothing to do, during its init process Ren'py will declare a variable for each unique name of your images.
So, the image "0.01a/intro/intr00.jpg" can be directly addressed in Ren'py with "intr00". Instead of your :
Code:
define intr00 = "0.01a/intro/intr00.jpg"
[...]
    show image intr00
[...]
You can just have :
Code:
    show intr00
And this apply for the 533 images you defined. As much lines that you hadn't to write, as much image that you don't have to write after all the show statements.

And if effectively you need to manually define an image (because two have the same name, by example), what you have to use is the statement :
Code:
image intr00 = "0.01a/intro/intr00.jpg"
[...]
    show intr00
 

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
This is wrong, really wrong. It's more or less the same thing that what @79flavors already said regarding the default. init is something totally independent and have no reason to be in a label.
The problem is explained here:
https://f95zone.to/threads/problems-using-default-to-declare-variables.39170/

The variables are not inside a label, they're at the very top of the script file.
It should be independent but if I don't define variables inside an init block I keep getting the same error:
File "game/script.rpy, line 8: expected statement.
Line 8 or whatever line follows after the variables.
I'm using Atom to code my game... maybe is a glitch with the word processor, I don't know.

EDIT: Tried again and removed the init, left the variables at the top of the script file and now is working. Haven't get an error so far.

Actually you are breaking the flow of the game, creating an empty label named "start", followed by an anonymous piece of code starting by show screen keymap. Ren'py is strong enough to know how to works with this kind of errors, but yet it's something you should avoid.
It is not an empty label, is the base label or the label that contains the main game code, maybe I should have added a "..." to imply that there was more code following after the example.
But I like the idea of defining the keymap at init level, I thought it needed to be inside the main label, I'll change that.

is a statement designed specifically to position the content for you. Therefore, either you don't need to position the vbox, or you don't need the grid (potentially replacing it by a frame).

You also don't need all those color and font tags, you can use style instead. And there's no need for the text "{size=26} " lines, Ren'py have a screen statement for this.
No, I do need to position the information inside the blocks, I need the fonts for customization, and I need the font size and spaces to properly align the names and variables.
The grid position them for me but the strings and values are different and they need to be position independently:

Untitled-1.jpg

The names and values need to be aligned with the background image, is a lot of extra work but the stats screen looks like I want it to look, is going to stay that way.

Appreciate the suggestions, and corrections though. Thanks.
 
Last edited:

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,369
15,284
It should be independent but if I don't define variables inside an init block I keep getting the same error:
File "game/script.rpy, line 8: expected statement.
Like I said, I took your game, commented the line 3 (the start of the init block), and to avoid the obvious "indentation mismatch" error line 39, I sent back those line at level 0 of indentation. Then when launching the game I had absolutely no error.
If on your side there's still the error, then you have a blank character somewhere at the end of the line 7 or 8. But I don't see why it should have disappeared on my computer.


I'm using Atom to code my game... maybe is a glitch with the word processor, I don't know.
It's the default editor promoted by PyTom and that he used for the devel of Ren'py. If there where a glitch, it would be known.


It is not an empty label,
Ren'py will stop to process the label once it will reach the init python: line, which is the line right after the definition of the label. Therefore it is an empty label, and every statements after that are put inside a anonymous label, that Ren'py will locate after the empty "start" label ; which is why the game still works despite this error.
Whatever if you believe it or not, it's what happen.


No, I do need to position the information inside the blocks,
Then you don't need the grid.


I need the fonts for customization, and I need the font size
You have them, it's what the are for. "The style properties associated with styles control how Displayables are shown." It's the very first line of the documentation page related to them.

Instead of forcing the font, size, color and all, in every single line you display, you define it once, then for each line you assign it the right style.


and spaces to properly align the names and variables.
The null description : "The null statement inserts an empty area on the screen. This can be used to space things out."
It needed less than one minute to follow the link I gave, read those two sentences, and understand that it will let you align everything like you want it.



The grid position them for me but the strings and values are different and they need to be position independently:
The description of starts with this : "This displays its children in a grid. Each child is given an area of the same size, the size of the largest child."

Actually, you are asking Ren'py to compute the size of each vbox, then use this to define by itself where they have to be placed. And finally, when it have done with all those computation, you're tell it that you don't care and want the vbox to be placed somewhere else.

Either do one, or do the other, but don't do both in the same time.


The names and values need to be aligned with the background image, is a lot of extra work but the stats screen looks like I want it to look, is going to stay that way.
There's also a background style property and a text_align one...
 

9thCrux

--Waifu maker--
Game Developer
Oct 22, 2017
844
3,221
Either do one, or do the other, but don't do both in the same time.
Or I could just do it in any way I want it... yup I'm going with that. :LOL:

You know, you're a very knowledgeable person and you're very helpful, but sometimes I can picture you like this:

Firefox_Screenshot_2020-02-14T22-01-20.730Z.png

:giggle:
 
Last edited: