Different auto modes (1 Viewer)

sby

Content Creator
Coder
Joined
Sep 11, 2012
MG said:
As for you sby, let me know if you're going to pick this up.
If not I'll finish it and then the usual.

i don't want to make you feel like waiting on me or anything xD
i have been working on next moreclothing (which is probably the mod i used the most, so it takes priority)

if you feel like completing it, feel free to. i will send you a message or something if i end up doing stuff with it.




wands said:
I would give my left...arm...to earn the right to be a part of that conversation! So then, and if, SBY tell me I can help? Lots of time and motivation on my end! LOL

If just a beta tester, anything I can do to help!
it is not like this is a restricted development area, anybody can do stuff. we just try to not overlap work
 
D

Doomknight

@MG;

1) Would there be a way to allow the numerical variables to be edited by the user in a text file?

2) Would there be a way to simplify the order of actions in the code down to a few lines of text? ie EnterSlow, ExitSlow, EnterFast, ExitFast, EnterStay50%, ExitWait100%? Where EnterSlow means the penis enters at a "relatively" slow speed, ExitSlow means the penis leaves the mouth slowly, EnterStay50% means Penis enters and stays until she reaches 50% oxygen then exits, and ExitWait100% means that the Penis exits and doesn't enter again until her oxygen reaches 100%... or is that just making things more complicated?

3) Would a graphical abstraction work here, such as a "speed slider", where moving it up or down (or right or left) increases or decreases the speed based on which direction you pushed it? (Hope that makes any sense)
 

wands

Potential Patron
Joined
Jan 16, 2014
I thought along those lines as well when I looked at...

Code:
this.standardModes = new Array();
this.softModes = new Array();
this.hardModes = new Array();
this.selfModes = new Array();
this.singleActions = new Array();
this.normalEjacModes = new Array();

And the like, all of these seemingly parents have children that have a numbered value and can be defined, then timed to each action before moving on to the next given the code MG just posted

An auto mode to command the script to "go to" a .txt file in settings rather than just soft\hard and then use a pre defined recorded menu, of sorts to play out how you want both him and her to behave?
So from a user view "this command, for this time, move to this command" Pre defined auto mode "time, speed, depth (and like dialogue even position?)" with the built character. (program their own fap time?) I think they would like that! LOL

P.S. a "speed slider" not only makes sense but is a fantastic idea! LOL but how would it work when you transition to the "next move" AKA real fast when deep to next move let her breathe and soft? You would have to keep up with the slider in real time! LMAO Auto kind of goes out the window! LMAO
 

wands

Potential Patron
Joined
Jan 16, 2014
So let's say just useing the given,

this.standardModes[6] = this.shallowSlow;
30secs
this.standardModes[8] = this.shallowFast;
30secs
this.standardModes[10] = this.tipToDeepMedium;
60secs

and so on, kind of user .txt ability?

I just logged back in...Sorry to do this here but to MG after I changed my handle from wands to Polarcat in siberia I have been locked out? cannot post and user does not exist? For an hour or two no probs and then WHAM? I had to log in under old user but new password? WTF?
 

ModGuy

Content Creator
Joined
Feb 17, 2011
It has already been worked on.
I believe what you're asking is: "Is there a user friendly, flexible solution?"
Nope, not yet.

EDIT:

You know what?
zalord should totally do this.
Given that he's going to enter the Modder group this would be a great starting point.

EDIT2:
Assuming my example was no good or unworkable, here's a simplified version of the same thing.
This loads numbered Recorder files for playback and you can cycle between them with keys.
Add switching for arbitrary conditions and you're done:

Code:
package flash
{
	import flash.utils.Dictionary;
	import flash.display.MovieClip;
	import flash.geom.Point;
	public dynamic class Main extends MovieClip
	{
		public var modDataLoader:Class;
		public var modSettingsLoader:Class;
		public var cData:String;

		private var scripts:Array = new Array();
		private var current:int = 1;

		private var loader;

		private var mdl;
		private var msl;

		var gfx;

		public function initl(l):void
		{
			loader = l;
			loadAuto();
			gfx = l.loadedSWF.uiLayer.graphics
			l.addEnterFramePersist(drawAutoMouse);
			l.unloadMod();
		}
		public function loadAuto():void
		{
			mdl = new modDataLoader ("Rec/" + current + ".txt",cData, dataLoaded);
			mdl.addEventListener("dataNotFound",noDataFound);
		}
		public function loadPrev():void
		{
			loader.playRec = true;
			current = (current > 0) ? --current : scripts.length-1;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function loadNext():void
		{
			loader.playRec = true;
			current = (current < scripts.length -1) ? ++current : 0;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function noDataFound(e):void
		{
			if(current != 1)
				msl = new modSettingsLoader("AutoScript", settingsLoaded);
			current = -1;
		}
		public function settingsLoaded(e):void
		{
			var dict:Dictionary = e.settings;

			if (dict["NextKey"] != null)
				loader.registerFunctionPersist(loadNext, dict["NextKey"]);
			if (dict["PrevKey"] != null)
				loader.registerFunctionPersist(loadPrev, dict["PrevKey"]);
		}
		public function dataLoaded(e):void
		{
			mdl.removeEventListener("dataNotFound",noDataFound);
			scripts.push(e.binData.toString());
			current++;
			loadAuto();
		}
		public function stringToAuto(s:String):void
		{
			loader.store = new Array();
			loader.recInd = 0;
			var dat = loader.standardLines(s);
			for (var ind:int = 0; ind < dat.length; ind++)
			{
				var line = dat[ind];
				if (line.length > 0)
					loader.store.push(new Point(line.split(";")[0], line.split(";")[1]));
			}

		}

		function drawAutoMouse(l){
			var len = l.store.length;
			var xPos = 600;
			var wid = 700-xPos;

			gfx.clear();
			gfx.beginFill(0,5/10);
			gfx.drawRect(xPos,296,wid,8);
			gfx.endFill();
			gfx.moveTo(xPos, -10);
			gfx.lineStyle(4, 0);
			for(var j = 0; j < len; j++){
				var i = (j + l.recInd+len/2)%len;
				gfx.lineTo(xPos+l.store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
			gfx.moveTo(xPos, -10);
			gfx.lineStyle(2, 0xFFFFFF);
			for(var j = 0; j < len; j++){
				var i = (j + l.recInd+len/2)%len;
				gfx.lineTo(xPos+l.store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
		}
	}
}


EDIT3:

AutoScript.jpg

Code:
package flash
{
	import flash.utils.Dictionary;
	import flash.display.MovieClip;
	import flash.geom.Point;
	public dynamic class Main extends MovieClip
	{
		public var modDataLoader:Class;
		public var modSettingsLoader:Class;
		public var cData:String;

		private var scripts:Array = new Array();
		private var current:int = 1;

		private var loader;

		private var mdl;
		private var msl;

		var gfx;

		public function initl(l):void
		{
			loader = l;
			loadAuto();
			gfx = l.loadedSWF.uiLayer.graphics
			l.addEnterFramePersist(drawAutoMouse);
			l.unloadMod();
		}
		public function loadAuto():void
		{
			mdl = new modDataLoader ("Rec/" + current + ".txt",cData, dataLoaded);
			mdl.addEventListener("dataNotFound",noDataFound);
		}
		public function loadPrev():void
		{
			loader.playRec = true;
			current = (current > 0) ? --current : scripts.length-1;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function loadNext():void
		{
			loader.playRec = true;
			current = (current < scripts.length -1) ? ++current : 0;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function noDataFound(e):void
		{
			if(current != 1)
				msl = new modSettingsLoader("AutoScript", settingsLoaded);
			current = -1;
		}
		public function settingsLoaded(e):void
		{
			var dict:Dictionary = e.settings;

			if (dict["NextKey"] != null)
				loader.registerFunctionPersist(loadNext, dict["NextKey"]);
			if (dict["PrevKey"] != null)
				loader.registerFunctionPersist(loadPrev, dict["PrevKey"]);
		}
		public function dataLoaded(e):void
		{
			mdl.removeEventListener("dataNotFound",noDataFound);
			scripts.push(e.binData.toString());
			current++;
			loadAuto();
		}
		public function stringToAuto(s:String):void
		{
			loader.store = new Array();
			loader.recInd = 0;
			var dat = loader.standardLines(s);
			for (var ind:int = 0; ind < dat.length; ind++)
			{
				var line = dat[ind];
				if (line.length > 0)
					loader.store.push(new Point(line.split(";")[0], line.split(";")[1]));
			}

		}

		function drawAutoMouse(l){
			var len = l.store.length;
			var xPos = 600;
			var wid = 700-xPos;

			gfx.clear();
			gfx.beginFill(0,5/10);
			gfx.drawRect(xPos,296,wid,8);
			gfx.endFill();
			var startX = (l.store.length > 0) ? xPos + l.store[0].x*wid/700 : xPos+wid/2;
			gfx.moveTo(startX, -30);
			gfx.lineStyle(4, 0);
			for(var j = 0; j < len; j++){
				var i = (j + l.recInd+len/2)%len;
				gfx.lineTo(xPos+l.store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
			gfx.moveTo(startX, -30);
			gfx.lineStyle(2, 0xFFFFFF);
			for(var j = 0; j < len; j++){
				var i = (j + l.recInd+len/2)%len;
				gfx.lineTo(xPos+l.store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
		}
	}
}


EDIT4:
Interpolation for movement, consts for some values and other small improvements.
Code:
package flash
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.utils.Dictionary;

	public dynamic class Main extends MovieClip
	{
		public var modDataLoader:Class;
		public var modSettingsLoader:Class;
		public var cData:String;

		private var scripts:Array = new Array();
		private var current:int = 1;
		private var store:Array = new Array();
		private var recInd:Number = 0;
		private var playRec:Boolean = false;
		private var tickVal:Number = 1;

		private const minSpeed:Number = 0;
		private const maxSpeed:Number = 3;
		private const tickSpeed:Number = 1/10;

		private var loader;

		private var mdl;
		private var msl;

		var gfx;

		public function initl(l):void
		{
			loader = l;
			loadAuto();
			gfx = l.loadedSWF.uiLayer.graphics
			l.addEnterFramePersist(tick);
			l.unloadMod();
		}
		public function loadAuto():void
		{
			mdl = new modDataLoader ("Rec/" + current + ".txt",cData, dataLoaded);
			mdl.addEventListener("dataNotFound",noDataFound);
		}
		public function loadPrev():void
		{
			playRec = true;
			current = (current > 0) ? --current : scripts.length-1;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function loadNext():void
		{
			playRec = true;
			current = (current < scripts.length -1) ? ++current : 0;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function toggleAuto():void
		{
			playRec = !playRec;
			loader.updateStatus("Toggle: " + (playRec ? "enabled" : "disabled"));
		}
		public function speedDown():void
		{
			tickVal = Math.max(minSpeed, tickVal - tickSpeed);	
			loader.updateStatus("Speed: " + roundTo(tickVal,2));
		}
		public function speedUp():void
		{
			tickVal = Math.min(maxSpeed, tickVal + tickSpeed);
			loader.updateStatus("Speed: " + roundTo(tickVal,2));
		}
		public function noDataFound(e):void
		{
			if(current != 1)
				msl = new modSettingsLoader("AutoScript", settingsLoaded, cData);
			current = -1;
		}
		public function settingsLoaded(e):void
		{
			var dict:Dictionary = e.settings;
			if (dict["NextKey"] != null)
				loader.registerFunctionPersist(loadNext, dict["NextKey"]);
			if (dict["PrevKey"] != null)
				loader.registerFunctionPersist(loadPrev, dict["PrevKey"]);
			if (dict["SpeedDown"] != null)
				loader.registerFunctionPersist(speedDown, dict["SpeedDown"]);
			if (dict["SpeedUp"] != null)
				loader.registerFunctionPersist(speedUp, dict["SpeedUp"]);
			if (dict["Toggle"] != null)
				loader.registerFunctionPersist(toggleAuto, dict["Toggle"] );

			loader.loadedSWF.removeEventListener(MouseEvent.MOUSE_MOVE, loader.mouseMoveHook);
			//loader.loadedSWF.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHook);
		}
		public function roundTo(n:Number, p:int):Number
		{
			var pow = Math.pow(10,p);
			return int(n*pow)/pow;
		}
		public function tick(l):void
		{
			if (playRec && store.length > 0 && ! loader.g.gamePaused)
			{
				recInd = (recInd + tickVal) % store.length;
				var cInd:int = int(recInd);
				var cDiff:Number = recInd - cInd;
				var nInd:int = Math.ceil(recInd) % store.length;


				var pX:Number = store[cInd].x;
				var pY:Number = store[cInd].y;

				if(cDiff < 1)	//Interpolate the point if speed < 1.
				{
					var pX2:Number = store[nInd].x;
					var pY2:Number = store[nInd].y;
					
					pX = (pX2 - pX)*cDiff + pX;
					pY = (pY2 - pY)*cDiff + pY;
				}

				if(loader.g.shiftDown || loader.g.controlLocked || loader.g.gamePaused) return;
				if (loader.him.handOpen)
					loader.loadedSWF.currentMousePos = new Point(loader.g.mirrored?700:0,pY);
				else
					loader.loadedSWF.currentMousePos = new Point(loader.g.mirrored?(700-pX):pX, pY);
				drawAutoMouse(l);
			}
			else
			{
				loader.mouseMoveHook(new MouseEvent(MouseEvent.MOUSE_MOVE, true, false, mouseX, mouseY));
			}
		}
		public function dataLoaded(e):void
		{
			mdl.removeEventListener("dataNotFound",noDataFound);
			scripts.push(e.binData.toString());
			current++;
			loadAuto();
		}
		public function stringToAuto(s:String):void
		{
			store = new Array();
			recInd = 0;
			var dat = loader.standardLines(s);
			for (var ind:int = 0; ind < dat.length; ind++)
			{
				var line = dat[ind];
				if (line.length > 0)
					store.push(new Point(line.split(";")[0], line.split(";")[1]));
			}

		}

		public function drawAutoMouse(l):void
		{
			var len = store.length;
			var xPos = 600;
			var wid = 700-xPos;

			gfx.clear();
			gfx.beginFill(0,5/10);
			gfx.drawRect(xPos,296,wid,8);
			gfx.endFill();
			var startX = (store.length > 0) ? xPos + store[0].x*wid/700 : xPos+wid/2;
			gfx.moveTo(startX, -30);
			gfx.lineStyle(4, 0);
			for(var j = 0; j < len; j++){
				var i = (j + recInd+len/2)%len;
				gfx.lineTo(xPos+store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
			gfx.moveTo(startX, -30);
			gfx.lineStyle(2, 0xFFFFFF);
			for(var j = 0; j < len; j++){
				var i = (j + recInd+len/2)%len;
				gfx.lineTo(xPos+store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
		}
	}
}

EDIT5, modPage + shift adjustment:
Code:
package flash
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.utils.Dictionary;

	public dynamic class Main extends MovieClip
	{
		public var cData:String;
		public var modDataLoader:Class;
		public var modSettingsLoader:Class;
		public var Label:Class;
		public var Spinner:Class;

		private var current:int = 1;
		private var playRec:Boolean = false;
		private var recInd:Number = 0;
		private var scripts:Array = new Array();
		private var store:Array = new Array();
		private var tickVal:Number = 1;

		private const maxSpeed:Number = 3;
		private const minSpeed:Number = 0;
		private const tickSpeed:Number = 1/10;

		private var loader;
		private var mdl;
		private var msl;
		private var spinnerControl;

		private var modPage:MovieClip;

		var gfx;

		public function initl(l):void
		{
			loader = l;
			loadAuto();
			gfx = l.loadedSWF.uiLayer.graphics;
			l.addEnterFramePersist(tick);
			l.unloadMod();
		}
		public function loadAuto():void
		{
			mdl = new modDataLoader ("Rec/" + current + ".txt",cData, dataLoaded);
			mdl.addEventListener("dataNotFound",noDataFound);
		}
		public function loadPrev():void
		{
			playRec = true;
			current = (current > 0) ? --current : scripts.length-1;
			stringToAuto(scripts[current]);

			loader.updateStatus("Rec: " + current);
		}
		public function loadNext():void
		{
			playRec = true;
			current = (current < scripts.length -1) ? ++current : 0;
			stringToAuto(scripts[current]);
			loader.updateStatus("Rec: " + current);
		}
		public function toggleAuto():void
		{
			playRec = !playRec;
			loader.updateStatus("Toggle: " + (playRec ? "enabled" : "disabled"));
		}
		public function speedDown():void
		{
			tickVal = Math.max(minSpeed, tickVal - tickSpeed);	
			loader.updateStatus("Speed: " + roundTo(tickVal,2));
		}
		public function speedUp():void
		{
			tickVal = Math.min(maxSpeed, tickVal + tickSpeed);
			loader.updateStatus("Speed: " + roundTo(tickVal,2));
		}
		public function noDataFound(e):void
		{
			if(current != 1)
				msl = new modSettingsLoader("AutoScript", settingsLoaded, cData);
			current = -1;
		}
		public function settingsLoaded(e):void
		{
			var dict:Dictionary = e.settings;
			if (dict["NextKey"] != null)
				loader.registerFunctionPersist(loadNext, dict["NextKey"]);
			if (dict["PrevKey"] != null)
				loader.registerFunctionPersist(loadPrev, dict["PrevKey"]);
			if (dict["SpeedDown"] != null)
				loader.registerFunctionPersist(speedDown, dict["SpeedDown"]);
			if (dict["SpeedUp"] != null)
				loader.registerFunctionPersist(speedUp, dict["SpeedUp"]);
			if (dict["Toggle"] != null)
				loader.registerFunctionPersist(toggleAuto, dict["Toggle"] );

			var l = new Label(300,70, "AutoScript.\nScripts Loaded: " + scripts.length);
			l.textFormatting().align = "left";
			l.updateFormatting();

			spinnerControl = new Spinner(300,60);
			spinnerControl.y = 70;
			spinnerControl.lowerBound = 0;
			spinnerControl.upperBound = scripts.length-1;
			spinnerControl.tickValue = 1;
			spinnerControl.addEventListener("spinnerChanged",
					function sc(ev){
						if(ev.alreadySelected && playRec) return;
						current = ev.object;
						playRec = true;
						stringToAuto(scripts[current]);
						loader.updateStatus("Rec: " + current);
						drawAutoMouse(loader);
					}
				);

			modPage = new MovieClip();
			modPage.addChild(l);
			modPage.addChild(spinnerControl);

			loader.addPage(modPage, true);	

			loader.loadedSWF.removeEventListener(MouseEvent.MOUSE_MOVE, loader.mouseMoveHook);
			//loader.loadedSWF.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHook);
		}
		public function roundTo(n:Number, p:int):Number
		{
			var pow = Math.pow(10,p);
			return int(n*pow)/pow;
		}
		public function tick(l):void
		{
			if (playRec && store.length > 0 && ! loader.g.gamePaused)
			{
				if(loader.g.shiftDown || loader.g.controlLocked || loader.g.gamePaused) return;
				recInd = (recInd + tickVal) % store.length;
				var cInd:int = int(recInd);
				var cDiff:Number = recInd - cInd;
				var nInd:int = Math.ceil(recInd) % store.length;


				var pX:Number = store[cInd].x;
				var pY:Number = store[cInd].y;

				if(cDiff < 1)	//Interpolate the point if speed < 1.
				{
					var pX2:Number = store[nInd].x;
					var pY2:Number = store[nInd].y;
					
					pX = (pX2 - pX)*cDiff + pX;
					pY = (pY2 - pY)*cDiff + pY;
				}

				if (loader.him.handOpen)
					loader.loadedSWF.currentMousePos = new Point(loader.g.mirrored?700:0,pY);
				else
					loader.loadedSWF.currentMousePos = new Point(loader.g.mirrored?(700-pX):pX, pY);
				drawAutoMouse(l);
			}
			else
			{
				loader.mouseMoveHook(new MouseEvent(MouseEvent.MOUSE_MOVE, true, false, mouseX, mouseY));
			}
		}
		public function dataLoaded(e):void
		{
			mdl.removeEventListener("dataNotFound", noDataFound);
			scripts.push(e.binData.toString());
			current++;
			loadAuto();
		}
		public function stringToAuto(s:String):void
		{
			store = new Array();
			recInd = 0;
			var dat = loader.standardLines(s);
			for (var ind:int = 0; ind < dat.length; ind++)
			{
				var line = dat[ind];
				if (line.length > 0)
					store.push(new Point(line.split(";")[0], line.split(";")[1]));
			}
			drawAutoMouse(loader);
		}

		public function drawAutoMouse(l):void
		{
			var len = store.length;
			var xPos = 600;
			var wid = 700-xPos;

			gfx.clear();
			gfx.beginFill(0,5/10);
			gfx.drawRect(xPos,296,wid,8);
			gfx.endFill();
			var startX = (store.length > 0) ? xPos + store[0].x*wid/700 : xPos+wid/2;
			gfx.moveTo(startX, -30);
			gfx.lineStyle(4, 0);
			for(var j = 0; j < len; j++){
				var i = (j + recInd+len/2)%len;
				gfx.lineTo(xPos+store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
			gfx.moveTo(startX, -30);
			gfx.lineStyle(2, 0xFFFFFF);
			for(var j = 0; j < len; j++){
				var i = (j + recInd+len/2)%len;
				gfx.lineTo(xPos+store[int(i)].x*wid/700, xPos/Math.max(1,len-1)*j);
			}
		}
	}
}
 

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.