GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Webteases are great, but what if you're in the mood for a slightly more immersive experience? Chat about Tease AI and other offline tease software.

Moderator: 1885

User avatar
PlayfulGuy
Experimentor
Experimentor
Posts: 1068
Joined: Sat Jul 07, 2012 10:08 pm
Gender: Male
Sexual Orientation: Bisexual/Bi-Curious
I am a: Switch
Dom/me(s): No domme
Sub/Slave(s): No sub
Location: British Columbia, Canada

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by PlayfulGuy »

Yo_Boy_123 wrote: Tue Oct 12, 2021 6:28 am Hello,

I have a technical question about the GuideMe software as it relates to a specific tease. I have been having problems loading images while play playing "Gotta Edge Em All" by Baron Hardpenis. I have changed many of the folders to models of my choosing and have experienced some technical hiccups. I have been able to run this tease in both GuideMe 3.4 and 4.4, in both cases with identical (to my knowledge) problems. Other than problems listed below, I have found everything else to be in excellent working order.

Most images will load just fine (even some with a very large resolution), but other will refuse to load, and show only "body content" in the top left corner, where the image would've begun. This seems to be PNGs and possibly other unsupported formats, but I am also positive that JPGs have also done this at some. Other folders will instead only have one functional image the folders contain multiple JPGs of reasonable size) while all others in the folder will never be displayed.

Is there some sort of memory limit inherent to the tease and/or program that prevents it from loading all images? Currently the most vexing problem is the folders that only have one usable image, with regards to the "body content" problem, I can go through easily enough and find PNGs or other unsupported formats and convert/repair/delete those images.

There have also been rarer problems where I have had the program completely freeze, with everything including the real-time clock in the application freeze. The only option is to close the application completely and restart it. I do not know the exact triggers for this, but it does occur when an image is due to switch.
If you can, upload a zip of the tease (include the xml and the full media directory you are using) and I will run some tests as time and energy permits.

Or, at least post a link to the tease you downloaded. A few years ago I made a modification to that tease for another user, so I know there are at least two versions of it out there.

Guideme does support PNG files. When you get an empty page with "body content" in the top left corner it means something went wrong. This is often caused by a very high resolution file failing to load, or when a wildcard image reference does not match any images in the folder.

Another thing that can cause it is when the folder contains a mix of image and non-image files (like videos or text files or whatever), and a wildcard image spec matches a non-image file. The GuideMe log file will show exactly what files were considered as matches, and which file was chosen.

The symptoms you are describing, in my experience are usually related to images of very high resolution. Sometimes they work, sometimes they cause the issues you are seeing. There's no particular memory limit that I'm aware of other than the memory installed in your system, and virtual memory (which again depends on your system).

I always resize all images so that the largest dimension is 2000px or less. That seems to fix most issues. I use the Windows 10 Image Resizer Powertoy. You can do an entire folder in one shot. I make a copy of the original folder to keep the original high res images, and make a lower res copy for use with GuideMe.
Yo_Boy_123 wrote: Tue Oct 12, 2021 6:28 am Finally, the tease includes flavour text that flashes up on screen alongside the image/controls. This is by far the least pressing issue, but it only works about 30% of the time. The rest of the time, it displays what I interpret to be the variable name, something like "p_StrokeText". I would like to know if this is emblematic of some larger issue or just a minor oversight.
When that happens it means the named variable does not have a value assigned, which would likely indicate something broken in the code of the tease. The jscript and guideme log files would provide clues.
Yo_Boy_123 wrote: Tue Oct 12, 2021 6:28 am Unfortunately, this tease doesn't display the name of the file being displayed (though in fairness this would ruin the tease, so it is very difficult for me to track down specifically which images may be causing problems. Any assistance with these issues would be greatly appreciated.

Thank you
To get Guideme to display the image name etc go to File/Application Preferences and turn on the Debug option. Make sure you scroll down and click save to update the options.

Hope that helps

PG
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

So, I just discovered that if you try to feed resetTimer a time with a fraction (say, 1.2), it gets confused and starts firing off repeatedly with no dealy whatsoever. In fact, the function that parameter gets fed to only returns integers...

I find this less than ideal. Is there a way to have something happen periodically with a period that isn't a whole number of seconds?
Auto: Replaces selected instances of the word "not" with the word "definitely".
User avatar
bobhill
Explorer At Heart
Explorer At Heart
Posts: 164
Joined: Tue Mar 15, 2016 8:49 pm
Gender: Male
Sexual Orientation: Straight
I am a: None of the above

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by bobhill »

RemiHiyama wrote: Mon Nov 15, 2021 7:35 am So, I just discovered that if you try to feed resetTimer a time with a fraction (say, 1.2), it gets confused and starts firing off repeatedly with no dealy whatsoever. In fact, the function that parameter gets fed to only returns integers...

I find this less than ideal. Is there a way to have something happen periodically with a period that isn't a whole number of seconds?
I've never used resetTimer, but it's my understanding that all times in GM are whole seconds (integers). From using the timers in my code, I don't think it would really be reliable for 0.1 second increments. Perhaps 0.5 would be useful increments, but I think it would require a modification from @eroticdevelopment.
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

bobhill wrote: Wed Nov 17, 2021 1:20 amI've never used resetTimer, but it's my understanding that all times in GM are whole seconds (integers). From using the timers in my code, I don't think it would really be reliable for 0.1 second increments. Perhaps 0.5 would be useful increments, but I think it would require a modification from @eroticdevelopment.
Yeah, I've looked in the code, and the strings get fed into a function that returns an integer number of seconds, and doesn't understand decimal points at all.

I don't need super-precise timing really, close enough would be fine for some things... and I don't want certain other things to obviously be happening in synch all the time.
Auto: Replaces selected instances of the word "not" with the word "definitely".
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

I believe I've found a solution.

https://gist.githubusercontent.com/ryan ... 7/timer.js

It has what appears to be a small error with clearInterval, but the timing functions themselves do seem to work properly, at least within the scope of a page. (I'm assuming it all goes away when leaving a page, but for my purposes I'm entirely fine with that.)
Auto: Replaces selected instances of the word "not" with the word "definitely".
User avatar
PlayfulGuy
Experimentor
Experimentor
Posts: 1068
Joined: Sat Jul 07, 2012 10:08 pm
Gender: Male
Sexual Orientation: Bisexual/Bi-Curious
I am a: Switch
Dom/me(s): No domme
Sub/Slave(s): No sub
Location: British Columbia, Canada

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by PlayfulGuy »

RemiHiyama wrote: Thu Nov 18, 2021 11:15 am I believe I've found a solution.

https://gist.githubusercontent.com/ryan ... 7/timer.js

It has what appears to be a small error with clearInterval, but the timing functions themselves do seem to work properly, at least within the scope of a page. (I'm assuming it all goes away when leaving a page, but for my purposes I'm entirely fine with that.)
Can you elaborate a bit on how that code provides a solution? Maybe with some actual Guideme code showing how you used it?

EOS supports fractional delays like this and that's an issue in my new tease downloader that I didn't think there was a solution to unless GuideMe got updated to support them. If there is a workaround I could implement in the downloader that would be awesome.

PG
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

Well, I though it was pretty straightforward, but... maybe it isn't, as I've found some weird gotchas that I apparently bypassed by luck in my original tests.

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Tease scriptVersion="v0.1">
  <Title>Timer test</Title>
  <Author>
    <Name>RemiHiyama</Name>
  </Author>
  <MediaDirectory>Futa-Snakes-and-Ladder-3</MediaDirectory>
  <Settings>
    <AutoSetPageWhenSeen>false</AutoSetPageWhenSeen>
    <ForceStartPage>true</ForceStartPage>
  </Settings>
  <Include file="timer.js" />
  <Pages>
    <Page id="start">
			<Button target="test">Test</Button>
    </Page>
    <Page id="test">
    <Timer seconds="0.1"  onTriggered="doNothing()"/>
      <Image id="*" />
		  <javascript><![CDATA[
			function oTimer() {
				guide.setLeftBody("<img src='" + comonFunctions.GetRandomFile("*.*", "", true) + "'/>", "");
			}
			
			function doNothing() {}
			
			var foo = timer.setTimeout(oTimer, 1000);
			
			]]></javascript>
			<Button target="exit">Exit</Button>
    </Page>
    <Page id="exit">
    </Page>
  </Pages>
</Tease>
Note the timer calling the function that does nothing. Without that, it doesn't seem to function at all.

Timers done this way are contagious. setInterval will not stop periodically executing even if you go to a different page... or open a different tease. (So maybe using it is a bad idea.) Presumably the "different tease" also applies to setTimeout, but I haven't tested that, and at least it'll only fire once. Still, that means if something happens that means you don't want a timer to fire anymore, you need to clean up after yourself, it won't go away on it's own. (Which I find startling, tbh. What is this code doing that make it's functioning so pernicious even when a page transition normally gets rid of everything? And is there a way to make it not do that? I really don't think this is ever going to be desirable behavior.)
Last edited by RemiHiyama on Thu Nov 18, 2021 6:06 pm, edited 1 time in total.
Auto: Replaces selected instances of the word "not" with the word "definitely".
User avatar
PlayfulGuy
Experimentor
Experimentor
Posts: 1068
Joined: Sat Jul 07, 2012 10:08 pm
Gender: Male
Sexual Orientation: Bisexual/Bi-Curious
I am a: Switch
Dom/me(s): No domme
Sub/Slave(s): No sub
Location: British Columbia, Canada

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by PlayfulGuy »

RemiHiyama wrote: Thu Nov 18, 2021 4:11 pm Well, I though it was pretty straightforward, but... maybe it isn't, as I've found some weird gotchas that I apparently bypassed by luck in my original tests.

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Tease scriptVersion="v0.1">
  <Title>Timer test</Title>
  <Author>
    <Name>RemiHiyama</Name>
  </Author>
  <MediaDirectory>Futa-Snakes-and-Ladder-3</MediaDirectory>
  <Settings>
    <AutoSetPageWhenSeen>false</AutoSetPageWhenSeen>
    <ForceStartPage>true</ForceStartPage>
  </Settings>
  <Include file="timer.js" />
  <Pages>
    <Page id="start">
			<Button target="test">Test</Button>
    </Page>
    <Page id="test">
    <Timer seconds="0.1"  onTriggered="doNothing()"/>
      <Image id="*" />
		  <javascript><![CDATA[
		  function timer1() {
			function oTimer() {
				guide.setLeftBody("<img src='" + comonFunctions.GetRandomFile("*.*", "", true) + "'/>", "");
			}
			function doNothing() {}
			var foo = timer.setTimeout(oTimer, 1000);
			
			]]></javascript>
		<Button target="exit">Exit</Button>
    </Page>
    <Page id="exit">
    </Page>
  </Pages>
</Tease>
Note the timer calling the function that does nothing. Without that, it doesn't seem to function at all.

Timers done this way are contagious. setInterval will not stop periodically executing even if you go to a different page... or open a different tease. (So maybe using it is a bad idea.) Presumably the "different tease" also applies to setTimeout, but I haven't tested that, and at least it'll only fire once. Still, that means if something happens that means you don't want a timer to fire anymore, you need to clean up after yourself, it won't go away on it's own. (Which I find startling, tbh. What is this code doing that make it's functioning so pernicious even when a page transition normally gets rid of everything? And is there a way to make it not do that? I really don't think this is ever going to be desirable behavior.)
I don't have time to play with that today but I am curious to do so. At a quick glance it looks like you are missing a closing brace in your javascript. It seems the function oTimer() is inside function timer1 and the closing brace for timer1 is missing.

Also, since the GuideMe timer node does not support fractional times, your seconds="0.1" may be becoming 0 so it just immediately executes forever.

Lastly, I don't believe the guide.setLeftBody() will do anything in a timer function like that. There are quite a few functions that only have an effect when used in the pageLoad() function and when called from a timer like that they don't actually do anything.

What you typically have to do is use a <timer/> node to kick it off, then in the called function use addTimer() (I think it's overRide.addTimer() )to set the next timer and the things that it changes.

Also, It may work more reliably if those functions are placed in the globaljavascript node instead of in the page, and then the same functions can be used in multiple pages too.

PG
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

PlayfulGuy wrote: Thu Nov 18, 2021 5:56 pmI don't have time to play with that today but I am curious to do so. At a quick glance it looks like you are missing a closing brace in your javascript. It seems the function oTimer() is inside function timer1 and the closing brace for timer1 is missing.
Whoops, when I removed some code not required for the example I missed a spot. I've edited the post to correct that. I just pasted it into a new file and tested it, it works.
Also, since the GuideMe timer node does not support fractional times, your seconds="0.1" may be becoming 0 so it just immediately executes forever.
Immediately, yeah, but not forever, since nothing resets it. And it does nothing, so the precise timing doesn't seem to be that important... except, like I said, if I remove it then the rest doesn't work. (And the delay in setTimeout doesn't seem to start running until after the timer completes, which is odd.)
Lastly, I don't believe the guide.setLeftBody() will do anything in a timer function like that. There are quite a few functions that only have an effect when used in the pageLoad() function and when called from a timer like that they don't actually do anything.
It works. My understanding is that it's functions in override (including override.setLeftBody) that only work during the initial page load.
What you typically have to do is use a <timer/> node to kick it off, then in the called function use addTimer() (I think it's overRide.addTimer() )to set the next timer and the things that it changes.
Not sure why you're bringing that up? If those functions worked with fractions-of-seconds I wouldn't need to fool with this, after all...

Once the error in the gist I linked to is fixed, you use it just like the timing functions in window, just on a different object. (And don't use setInterval, see below.)
Also, It may work more reliably if those functions are placed in the globaljavascript node instead of in the page, and then the same functions can be used in multiple pages too.
Well, this *is* just test code, but timer-controlled behavior is only going to apply to the one page in the thing I'm planning to make anyway. And it's pretty reliable as is, just that it shouldn't keep doing it's thing after you load another tease.

Oh, and setInterval will apparently cause the java binary to hang in the background, and if you open another tease while one's running, it'll corrupt startup.state and prevent GuideMe from launching.

No, reliability isn't the problem here (even if the thing is quirky), it's side effects.
Auto: Replaces selected instances of the word "not" with the word "definitely".
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

Okay, figured out what part of the problem is. If there's a running timer (either with setInterval, or with a setTimeout that reapplies itself in a manner similar to GuideMe's resetTimer) when you close the window, it'll try to serialize it, be unable to do so, and then save the erroneous (and useless) result to startup.state anyway.

Using code that did not save things where it does would deal with this problem and several others, but it seems like that would lose the ability to persist timers made this way across pages... and I'm not sure it would actually work.
Auto: Replaces selected instances of the word "not" with the word "definitely".
User avatar
PlayfulGuy
Experimentor
Experimentor
Posts: 1068
Joined: Sat Jul 07, 2012 10:08 pm
Gender: Male
Sexual Orientation: Bisexual/Bi-Curious
I am a: Switch
Dom/me(s): No domme
Sub/Slave(s): No sub
Location: British Columbia, Canada

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by PlayfulGuy »

RemiHiyama wrote: Fri Nov 19, 2021 12:40 am Okay, figured out what part of the problem is. If there's a running timer (either with setInterval, or with a setTimeout that reapplies itself in a manner similar to GuideMe's resetTimer) when you close the window, it'll try to serialize it, be unable to do so, and then save the erroneous (and useless) result to startup.state anyway.

Using code that did not save things where it does would deal with this problem and several others, but it seems like that would lose the ability to persist timers made this way across pages... and I'm not sure it would actually work.
Interesting.

Keep us posted if you make any more progress. Like I said this could help with the conversion of EOS teases, but it really looks like we need @EroticDevelopment (or someone) to update Guideme to support fractional timers. If that's possible.

PG
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

PlayfulGuy wrote: Fri Nov 19, 2021 1:45 pmKeep us posted if you make any more progress. Like I said this could help with the conversion of EOS teases, but it really looks like we need @EroticDevelopment (or someone) to update Guideme to support fractional timers. If that's possible.
I don't think it'd be a huge amount of refactoring to add fractional timers to GuideMe. The function that actually checks timers, if I'm reading this correctly, runs ten times a second (which seems precise enough for most purposes), and most of the logic already works on objects that track time down to the millisecond. From there... I can see places that would be a bit fussy to convert to allow random ranges with decimals without changing existing behavior for whole numbers, but it doesn't look like it'd be all -that- difficult.

Sadly, the java.util.Timer approach may be a non-starter. Even putting the simplest necessary code in the page javascript still ends up "contagious". I think there are ways to ameliorate that, but I don't fancy releasing a tease that would cause GuideMe to refuse to start if the user closes the window while a timer is running, and I can't think of anything that would help with that part. And the version that uses java.util.concurrent.Executors.newScheduledThreadPool doesn't seem any better.
Auto: Replaces selected instances of the word "not" with the word "definitely".
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

Today I remembered something that I thought was a dead end, but someone else might know otherwise.

The first thing I found when I went looking for javascript timing alternatives was the normal setTimeout and setInterval functions. Which live on window, which doesn't exist inside GuideMe.

Or does it? Because I found a reference to window.event in CollapsibleList.js, from the ScriptTeases package. And it seems to work just fine. But that's actually loaded in the html being displayed in one of the panes in GuideMe, which apparently uses an entirely separate engine. But the example seemed to be display only, and I couldn't figure out any way to get a script event from one side to the other.

But is that really the case? It seems like being able to have javascript running in a pane send messages to the 'main' javascript would allow a lot of interesting things... and even though it'd be a roundabout way of doing the timing stuff, it should mean the bugs I've been seeing wouldn't be an issue because it wouldn't be trying to serialize the timers.
Auto: Replaces selected instances of the word "not" with the word "definitely".
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

And to answer my own question, apparently there is. EventStatusTextListener in MainShell.java will respond to changes in the status text (I believe of either pane) and if it's formatted correctly, do stuff. Thanks to the logging in there, I can tell that setting the status text works...

It's formatting it the way it wants that I'm having no luck with. :-|

Edit: Oh hey, philo mentioned this here. viewtopic.php?p=264057#p264057

But no example code...

Edit again: Figured it out after testing some of the code in an interactive shell. There's actually an extra parameter that's not mentioned in the comments.

Code: Select all

ButtonClick|Set|UnSet|scriptVar|target|javaScript
But there's a couple catches.

Because of the way the split function appears to work, if you don't have anything in 'javaScript', the array will be too short, and so it won't be processed. Adding another pipe on the end plus any string should work; the code won't use it for anything but it'll keep the array long enough.

But the big problem is... it will always try to go to the page in 'target', even if it's empty (which goes to a 404 error page). I can't find any way to prevent this, and think it would be considered an error, because most of the neat stuff I can imagine being done with this is going to involve -not- leaving the current page.
Auto: Replaces selected instances of the word "not" with the word "definitely".
RemiHiyama
Explorer At Heart
Explorer At Heart
Posts: 203
Joined: Thu Feb 28, 2019 3:30 pm
I am a: Switch

Re: GuideMe (TeaseMe v2.0) - Current Build 0.4.4

Post by RemiHiyama »

So, has anyone heard from EroticDevelopment lately?

I actually got a functioning build environment for this working, and think I understand enough of the coding side of things to start trying to fix some issues and add some features, but I don't really get git, so...

Ugh, I don't know what I'm trying to say. I mean, it's open source and so anyone can fork it at any time, but I don't want to step on any toes, you know?
Auto: Replaces selected instances of the word "not" with the word "definitely".
Post Reply