sby's loader imports (3 Viewers)

sby

Content Creator
Coder
Joined
Sep 11, 2012
so its not possible then? maybe it need another update?
i can try playing with it, but pretty sure it is gonna cause bugs


Possibly breaks _INSTANT lines containing ANIMTOOLS position changes because the trigger following the position change might be executed twice.
sounds like only 1 good way to test it, eventually release it as a beta and see what happens xD
 

Hekete

Content Creator
Joined
Apr 9, 2017
do what you can do sby cause if you are able to get it to work then i can go and make the site some lezbien poses positions :P
 

Pim_gd

Content Creator
Joined
Jan 25, 2013
Pim_gd / SDTDialogueActions / source / src / Main.as — Bitbucket

Here's what DialogueActions does - it calls g.dialogueControl.nextChar whilst the line isn't finished yet.
Code:
                   var queuedBuild:Number = g.dialogueControl.states["queued"]._buildLevel;
                    while (g.dialogueControl.sayingWord < wordsLength) {
                        g.dialogueControl.nextChar();
                    }
                    if (queuedBuild < g.dialogueControl.states["queued"]._buildLevel || queuedBuild == g.dialogueControl.states["queued"]._maxBuild) {
                        playQueuedLine();
                    }

This is g.dialogueControl.nextChar, courtesy of JPEXS free flash decompiler 10.0:
Code:
      public function nextChar_l() : String
      {
         var _loc1_:String = null;
         if(this.speaking)
         {
            if(this.sayingWord >= this.words.length)
            {
               this.stopSpeaking();
               return "";
            }
            _loc1_ = this.words[this.sayingWord].letter(this.sayingChar);
            if(this.sayingChar == 0 && this.words[this.sayingWord].actionWord)
            {
               this.checkWordAction();
               return "";
            }
            this.sayingChar++;
            if(this.sayingChar >= this.words[this.sayingWord].length && this.sayingWord < this.words.length - 1)
            {
               this.sayingSpace = true;
            }
            if(this.sayingChar >= this.words[this.sayingWord].length)
            {
               this.nextWord();
            }
            return _loc1_;
         }
         return "";
      }

Basically, at the end of the word, "this.nextWord()" is called. If the word is a trigger, then at the start of the word, "this.checkWordAction()" is called.

checkWordAction is a long section of code dealing with the various built-in triggers...

Code:
      public function checkWordAction_l() : void
      {
         var /*UnknownSlot*/:* = null;
         /*UnknownSlot*/ = null;
         /*UnknownSlot*/ = uint(0);
         switch(this.words[this.sayingWord].action)
         {
            case "SWALLOW":
               /*UnknownSlot*/ = function():*
               {
                  g.her.swallow(0,false);
               };
               break;
            case "DROOL":
               /*UnknownSlot*/ = function():*
               {
                  g.her.startDroolingCum(true);
               };
               break;
            case "COUGH":
               /*UnknownSlot*/ = g.her.cough;
//.....
         if(/*UnknownSlot*/ != null)
         {
            this.pauseSpeakingForAction(/*UnknownSlot*/);
            this.nextWord();
            /*UnknownSlot*/();
         }
         else
         {
            /*UnknownSlot*/ = this.words[this.sayingWord].action;
            this.queuedPhrase = /*UnknownSlot*/;
            this.states[QUEUED].maxBuild();
            this.nextWord();
         }
      }

But the point is, look at the ending. ... the if statement is weird though - but some looking at the byte code reveals that

Code:
            case "DROOL":
               /*UnknownSlot*/ = function():*
               {
                  g.her.startDroolingCum(true);
               };

That "/*UnknownSlot*/" and the one if the if-statement below AND the one in

Code:
            /*UnknownSlot*/();

are all the same (the decompiler should have seen this as _loc1_).

More to the point: both the true case of the if statement and the false case contain "this.nextWord();".

What this means is that since DialogueActions calls nextChar repeatedly, and the line consists of only triggers because DialogueActions validates this before instantly executing the line, DialogueActions is in effect calling both checkWordAction, which reads the trigger and executes it if it has a meaning (and else, sets the next line attribute - the next line to play, that's how stuff like [intro2] works - the "this.queuedPhrase" bit), and, through checkWordAction, calls nextWord.

So what does nextWord do?

Code:
      public function nextWord_l() : void
      {
         this.sayingChar = 0;
         this.sayingWord++;
      }

Hmm.

Relevant is this section from nextChar:

Code:
            if(this.sayingWord >= this.words.length)
            {
               this.stopSpeaking();
               return "";
            }
            _loc1_ = this.words[this.sayingWord].letter(this.sayingChar);
            if(this.sayingChar == 0 && this.words[this.sayingWord].actionWord)
            {
               this.checkWordAction();
               return "";
            }

"this.sayingWord" is used to check whether the line has ended, and "this.sayingChar" is used to determine whether the current word needs to be checked for trigger - it's also used to print characters of course but that's not very interesting atm.

When you go through "startSpeakingPhrase", which is what SDT's "playLine" function is, it sets sayingWord and sayingChar back to 0. It then waits a single frame, and then calls "nextChar" to start saying the line.

What this means is that if Animtools now works by proxying the nextWord function, then it shouldn't work if the trigger for animtools is at the start of the line.

This because nextWord would trigger after the first word has been said, at which point, with a post proxy, the "sayingWord" would be at 1 and this wouldn't be the word that contained the Animtools trigger.

In the dialogue line 'intro:"[ANIMTOOLS_banana]Testing testing one two three"', the words array works like this:

"[ANIMTOOLS_banana]" is word 0
"Testing" is word 1
"testing" is word 2
"one" is word 3
"two" is word 4
"three" is word 5.

So when you have a post proxy that listens for nextWord, you can check if the next word that is going to be played is an animtools trigger. Except you can't check the first word that way ( word 0) because nextWord doesn't get called.

What this boils down to is that you should just look at the way DialogueActions proxies triggers:

Pim_gd / SDTDialogueActions / source / src / Main.as — Bitbucket
Code:
           var onTriggerProxy:Object = lProxy.createProxy(g.dialogueControl, "checkWordAction");
            onTriggerProxy.addPre(onTrigger, persist);

We proxy checkWordAction with a pre trigger - this is what allows intercepting triggers to be played.

Pim_gd / SDTDialogueActions / source / src / Main.as — Bitbucket
Code:
       public function onTrigger():* {
            var x:Boolean = triggerManager.trigger();
            if (x) {
                //displayMessageGreen("onTrigger - Success");
                return x;
            } else {
                //displayMessageWhite("onTrigger - Non DA trigger");
            }
        }

Some commented out debug code here but basically, if the triggerManager says the trigger was recognized, return a value to stop the proxy from calling the base SDT function. Otherwise, don't return a value and let lProxy continue calling the SDT function, which will check the standard triggers, and, failing any matches there, eventually set the next line to be played.

(By the way, "x" is a terrible name for the variable here, boo Pim)

Also important:

Pim_gd / SDTDialogueActions / source / src / TriggerManager.as — Bitbucket
Code:
       public function triggerFromString(triggerName:String):Boolean {
            //dialogueLog("Trigger found: = " + triggerName);
            triggerName = triggerName.substring(1, triggerName.length - 1);
            var triggerWithArguments:Array = triggerName.split("_");
            var result:Boolean = triggerWithArray(triggerWithArguments);
            if (result) {
                g.dialogueControl.nextWord();
            }
            return result;
        }

if you find your trigger, you'll have to call g.dialogueControl.nextWord by yourself, because that's what checkWordAction used to do - identify the trigger and play the nextWord.

Now for the other reason you shouldn't proxy nextWord with something that may call nextWord.

The more local variables you use, the smaller your callstack may be. If you go past this limit, ActionScript will block execution and thus crash the dialogue (and SDT, but it might get silently swallowed).

See this stackoverflow question for an approximation as to how large your callstack is allowed to get. Is the stack limit of 5287 in AS3 variable or predefined?

If we thus imagine a long line with about 200 position changes in a row, this might be enough to crash the dialogue.

This is one of the reasons why DialogueActions's _INSTANT line playing system is not actually instant. Let's go all the way back to that snippet:

Pim_gd / SDTDialogueActions / source / src / Main.as — Bitbucket
Code:
           } else if (StringFunctions.stringEndsWith(currentLine, "_INSTANT")) {
                var allTriggers:Boolean = true;
                for (var i:uint = 0; i < wordsLength && allTriggers; i++) {
                    allTriggers = words[i].actionWord;
                }
                if (allTriggers) {
                    var queuedBuild:Number = g.dialogueControl.states["queued"]._buildLevel;
                    while (g.dialogueControl.sayingWord < wordsLength) {
                        g.dialogueControl.nextChar();
                    }
                    if (queuedBuild < g.dialogueControl.states["queued"]._buildLevel || queuedBuild == g.dialogueControl.states["queued"]._maxBuild) {
                        playQueuedLine();
                    }
                }
            }

DialogueActions loops through the words in a line, checks if they're all triggers, and if so, constantly calls nextChar so that all the triggers may resolve. Then, once it's done, it checks if there's a new line queued up. If so, it "plays" this queued line:

Pim_gd / SDTDialogueActions / source / src / Main.as — Bitbucket
Code:
       private function playQueuedLine():void {
            g.dialogueControl.states["queued"].clearBuild();
            g.dialogueControl.stopSpeaking();
            g.dialogueControl.sayRandomPhrase(g.dialogueControl.queuedPhrase);
        }

But the line isn't actually played directly. g.dialogueControl.sayRandomPhrase will look up a random phrase, and then pass it to startSpeakingPhrase, which will set sayingWord to 0 and sayingChar to 0 (and a whole bunch of other things) - but it DOESN'T play the actual line. That happens 1 frame later.

This one frame is important.

It's what keeps the game from choking on an infinite loop. You can build an infinite loop with _INSTANT lines and the only thing you'll break is dialogue. It's also what keeps the callstack small, and thus prevents the game from getting cut off by ActionScript's call stack limits.

Anyway, that's why I'd recommend to proxy checkWordAction instead.

I hope you find my explanation useful.
 

sby

Content Creator
Coder
Joined
Sep 11, 2012
lol, not sure why you would look at decompiled code when you got the source xD
anyway, if you are fine with animtools also proxy'ing checkwordaction, that is great. i was looking for a place to sneak in in an attempt to break dialog actions the least xD
 

aztlan

Casual Client
Joined
Sep 14, 2013
Can I ask what some of the Animtools v18 settings and triggers do?
atv_inbody - is the the same as inbody? Has it been renamed to atv_inbody?
atv_inbodycontactloose - is the the same as bodycontactloose? Has it been renamed to atv_inbodycontactloose?

Hmmm - never mind - this seems to be a variable that returns 1 when he is in her or he is in her and she is loose (or a 0 if not), and not a replacement for the old line types and that the settings (time) for inbody and bodycontactloose determine how long is needed in order to get a value of 1.
 
Last edited:
R

rando_comando

hello, long time lurker. I'd just like to thank you so much sby for all the work you have done.

I have one quick Q, it's a detail. When doing a custom position on the animtools editmode if its "vaginal" the girl moans if you move the characters around, but when loading the position in the actual game, she doesn't. Any idea how to fix this?
 

iwantdoggystyle

Potential Patron
Joined
May 24, 2017
hi I just downloaded your loader noob pack XD, but I have problems opening animtools file because I don't have standalone flash player 11.
there is a flash player file but goes blank and is malfunctioning, do I have to download standalone's one on the internet?
 

stuntcock

Content Creator
Joined
Jun 5, 2012
I don't have standalone flash player 11.
Yes, you do. It's included in the Loader pack. The filename is flashplayer_11_sa.exe.

You don't even need to use that file directly. sby included shortcuts in his Loader pack for users' convenience.
play SDT loader.lnk - double click on this to play the game
play animtools editmode.lnk - double click on this to edit sexual position files

there is a flash player file but goes blank and is malfunctioning
If you suspect that there's a technical error or incompatibility, then it's a good idea to take a screenshot. A written description of a problem is sometimes sufficient for us to identify and resolve it, but we usually need to see what's going wrong.

do I have to download standalone's one on the internet?
You can download Flash Player projector files from the Adobe website. But you shouldn't need to do so, because sby already provided you with the necessary files.
 

iwantdoggystyle

Potential Patron
Joined
May 24, 2017
Yes, you do. It's included in the Loader pack. The filename is flashplayer_11_sa.exe.

You don't even need to use that file directly. sby included shortcuts in his Loader pack for users' convenience.
play SDT loader.lnk - double click on this to play the game
play animtools editmode.lnk - double click on this to edit sexual position files

If you suspect that there's a technical error or incompatibility, then it's a good idea to take a screenshot. A written description of a problem is sometimes sufficient for us to identify and resolve it, but we usually need to see what's going wrong.

You can download Flash Player projector files from the Adobe website. But you shouldn't need to do so, because sby already provided you with the necessary files.
I tried to play sdt loader.lnk and then a blank window opens for half a second and afterwards disappears...and nothing happens after, I don't know what's going on
 

stuntcock

Content Creator
Joined
Jun 5, 2012
I tried to play sdt loader.lnk and then a blank window opens for half a second and afterwards disappears...and nothing happens after, I don't know what's going on
Please provide some information about your PC. Processor architecture, operating system, account type (user / admin), and so on.

If you're using Windows and you know how to review event logs then I would encourage you to do so.

If you're extracted the game files into a special location (such as c:\Program Files\Porn Games\SDT) then I would encourage you to move it to a more mundane location (such as c:\Business Stuff\Boring Tax Receipts\Totally Not Porn At All\SDT) to reduce the likelihood of file-access restrictions.

If you haven't yet extracted the game files (i.e. you double-clicked on the sby_loader_pack_8_545d.zip file and then double-clicked on the shortcut inside it) then it's not going to work. Please extract the files to a folder somewhere on your local disk; you should then be able to use the shortcuts within that folder.

Also: your previous post mentioned a malfunctioning Flash Player. Could you please provide a screenshot? It might help us to understand what's going wrong.
 

sby

Content Creator
Coder
Joined
Sep 11, 2012
hello, long time lurker. I'd just like to thank you so much sby for all the work you have done.

I have one quick Q, it's a detail. When doing a custom position on the animtools editmode if its "vaginal" the girl moans if you move the characters around, but when loading the position in the actual game, she doesn't. Any idea how to fix this?
probably an animtools setting, enable the hunnie pop sounds

I tried to play sdt loader.lnk and then a blank window opens for half a second and afterwards disappears...and nothing happens after, I don't know what's going on
probably on a mac, i don't include the mac's standalone flash player xD
 

sby

Content Creator
Coder
Joined
Sep 11, 2012
little sidenote, going to be throwing up a bunch of stuff on the forum downloads intermittently here and there. i will list the new stuff after i am done because i imagine all the people subscribed to me gonna be like "i be getting all these notifications for stuff i already have!!"

i am going to have all the latest versions of the individual mods available on the forum downloads, and i will keep the loaderpack as a separate offsite download.
 

Sass

Content Creator
Joined
May 16, 2016
Found a bug with breastexpansion 2.7.

When a position changes, her stomach briefly goes through the four different skin tones for a fraction of a second. You can't see it if you have the fade to black transitions enabled in animtools settings (transition covers it up), but her stomach looks like a strobe light if that option isn't enabled.
 

sby

Content Creator
Coder
Joined
Sep 11, 2012
Found a bug with breastexpansion 2.7.

When a position changes, her stomach briefly goes through the four different skin tones for a fraction of a second. You can't see it if you have the fade to black transitions enabled in animtools settings (transition covers it up), but her stomach looks like a strobe light if that option isn't enabled.
probably will be fixed in next version. sort of went down a rabbit hole when i was making some changes to stuff.
i am hoping to have breastexpansion, superbelly, and superbreast all work together, so that way superbreast and superbelly could be $init mods without worry and both controlled with menu sliders
 

Rudgar

Content Creator
Joined
Nov 18, 2016
Ahoy!
Maybe I'm just terribly stupid but I still didn't get the point of how to use this DeepThroatActions mod.
Is it really just installing it and editing its settings.txt? Will this alone make things change somehow?
Or are there - as I suspsect somehow- any yet undocumented line types or Triggers to use in dialogues?
Thanks in advance!

Respectfully,
Rudgar
 

sby

Content Creator
Coder
Joined
Sep 11, 2012
Ahoy!
Maybe I'm just terribly stupid but I still didn't get the point of how to use this DeepThroatActions mod.
Is it really just installing it and editing its settings.txt? Will this alone make things change somehow?
Or are there - as I suspsect somehow- any yet undocumented line types or Triggers to use in dialogues?
Thanks in advance!

Respectfully,
Rudgar
this does nothing with dialog stuff, this is all about doing additional things when she enters or is in these states
on-deepthroat
in-deepthroat
on-hilt
in-hilt

example is that you can have a splat sound played when the penis enters her throat
 

Users who are viewing this thread

Top


Are you 18 or older?

This website requires you to be 18 years of age or older. Please verify your age to view the content, or click Exit to leave.