Sign in to follow this  
Followers 0
james3mg

_ControlMoveANI() function

12 posts in this topic

Just got inspired reading about Apple's new Core Animation feature in OSX...I'm often having to rewrite custom animation routines for my scripts over and over, so I thought I'd give a start at a UDF that could contain all that in one script...here's the first one (the easy one): animating the moving of controls.

It uses the built-in ControlMove() at its core, with a bit of math splashed in to determine the positions. The parameters are set to be compatible with any existing ControlMove() calls you may have in your script...you can just Find and Replace "ControlMove( with "_ControlMoveANI(" after including this function in your script, and nothing should break. The defaults for the animation parameters look fine, but you can always change them to suit your needs, of course. The next steps of this function would be actually squashing and stretching the control as part of the animation, and having the ability to move several controls at once in this manner. I'll post those functions whenever I figure them out! <_< In the meantime though, here you go!

BTW, heed the warning if you set $_CMminTime...your script will be unresponsive (like a sleep) for the number of milliseconds you specify in this parameter, since you're telling this function to take at least that many milliseconds to complete.

;;  _ControlMoveANI UDF function
;;
;;  Author:         james3mg
;;
;;  Description:    Animated version of ControlMove() - parameters are set so that you can "Find and Replace" ControlMove calls
;;                  with _ControlMoveAni calls in existing scripts without breaking anything - the default animation parameters
;;                  look fine with no further modification.
;;
;;  Parameters:
;;                  $_CMTitle       the title of the window with the control you want to move (same as ControlMove() )
;;                  $_CMText        text in the window that contains the control you want to move (same as ControlMove() )
;;                  $_CMCtrlID      The ID of the control you want to move (same as ControlMove() )
;;                  $_CMx           the x coordinate you want to move the control to (-1 means no change) (compatable with existing ControlMove() calls)
;;                  $_CMy           the y coordinate you want to move the control to (-1 means no change) (compatable with existing ControlMove() calls)
;;                  $_CMw           the width you want the control to be when the animation is done (optional) (-1 means no change [default]) (must be -1 or greater) (compatable with existing ControlMove() calls)
;;                  $_CMh           the height you want the control to be when the animation is done (optional) (-1 means no change [default]) (must be -1 or greater) (compatable with existing ControlMove() calls)
;;                  $_CMFrames      the number of frames (jumps) you want the control to take to arrive at the specified coordinates and size (optional, defaults to 25) (must be greater than 0)
;;                  $_CMFlag        the flag to determine the type of animation: (optional) (must be a number between 0 and 3) (no effect if $_CMSpeed is 1)
;;                                      -   0 means no speed change through the animation
;;                                      -   1 means start quicker and slow as it approaches the target
;;                                      -   2 means start slower and speed up as it approaches the target
;;                                      -   3 means start slow, accelerate in the middle, then slow as it's approaching the target (default)
;;                  $_CMSpeed       how dramatically the speed changes according to the $_CMFlag (no effect if $_CMFlag is 0) (default is 2.5) (must be 1 [constant speed] or greater)
;;                  $_CMminTime     the MINIMUM time the animation will last, in milleseconds.  SEE WARNING BELOW.  1 is as fast as possible (default).  There is no way to set a maximum time. (must be greater than 0)
;;
;;  Return Values:
;;                  On Success:     Returns 1
;;                  On Failure:     Returns 0 and sets errorlevel as follows:
;;                                  @error = 1  means control not found
;;                                  @error = 2  means error in parameter values
;;
;;  WARNING:        This function will completely freeze your script while it's running. This is especially important to keep in mind when setting a minimum time for the animation, as your script will be guarenteed frozen for the duration you specify.
;;                  This also means that you can't move more than one control at the same time, though I'm working on a separate function that would allow that to happen.

Func _ControlMoveANI($_CMTitle,$_CMText,$_CMCtrlID,$_CMx,$_CMy,$_CMw=-1,$_CMh=-1,$_CMFrames=25,$_CMFlag=3,$_CMSpeed=2.5,$_CMminTime=1)
    $_CMExistPos=ControlGetPos($_CMTitle,$_CMText,$_CMCtrlID)
    If @error Then Return(SetError(1,"",0))
    If $_CMw<-1 OR $_CMh<-1 OR $_CMFrames<1 OR $_CMFlag<0 OR $_CMSpeed<1 OR $_CMminTime<1 Then Return(SetError(2,"",0))
    If $_CMx=-1 Then $_CMx=$_CMExistPos[0]
    If $_CMy=-1 Then $_CMy=$_CMExistPos[1]
    If $_CMw=-1 Then $_CMw=$_CMExistPos[2]  
    If $_CMh=-1 Then $_CMh=$_CMExistPos[3]
    
    Local $_CMDiffX=$_CMx-$_CMExistPos[0],$_CMDirX=1
    If $_CMDiffX < 0 Then
        $_CMDiffX=Abs($_CMDiffX)
        $_CMDirX=-1
    EndIf
    Local $_CMDiffY=$_CMy-$_CMExistPos[1],$_CMDirY=1
    If $_CMDiffY < 0 Then
        $_CMDiffY=Abs($_CMDiffY)
        $_CMDirY=-1
    EndIf
    Local $_CMDiffW=$_CMw-$_CMExistPos[2],$_CMDirW=1
    If $_CMDiffW < 0 Then
        $_CMDiffW=Abs($_CMDiffW)
        $_CMDirW=-1
    EndIf
    Local $_CMDiffH=$_CMh-$_CMExistPos[3],$_CMDirH=1
    If $_CMDiffH < 0 Then
        $_CMDiffH=Abs($_CMDiffH)
        $_CMDirH=-1
    EndIf
    $_CMnewX=$_CMExistPos[0]
    $_CMnewY=$_CMExistPos[1]
    $_CMnewW=$_CMExistPos[2]
    $_CMnewH=$_CMExistPos[3]
    
    $_CMTimer=TimerInit()
    
    For $_CMi=1 To $_CMFrames;not actually checking the real bits in the flag to determine behavior - there's too few options to make that worthwhile, but it's structured so if another behavior (bit) was added (option 4), it wouldn't break scripts that already use this function, though a flag of 3 would have to be rethought...
        If $_CMFlag=0 Then
            If $_CMDiffX <> 0 Then $_CMnewX=$_CMExistPos[0]+$_CMDirX*(($_CMDiffX/$_CMFrames)*$_CMi)
            If $_CMDiffY <> 0 Then $_CMnewY=$_CMExistPos[1]+$_CMDirY*(($_CMDiffY/$_CMFrames)*$_CMi)
            If $_CMDiffW <> 0 Then $_CMnewW=$_CMExistPos[2]+$_CMDirW*(($_CMDiffW/$_CMFrames)*$_CMi)
            If $_CMDiffH <> 0 Then $_CMnewH=$_CMExistPos[3]+$_CMDirH*(($_CMDiffH/$_CMFrames)*$_CMi)
        EndIf
        
        If $_CMFlag=1 Then
            If $_CMDiffX <> 0 Then $_CMnewX=$_CMExistPos[0]+$_CMDirX*((($_CMi*$_CMDiffX)^(1/$_CMSpeed))*($_CMDiffX/(($_CMFrames*$_CMDiffX)^(1/$_CMSpeed))))
            If $_CMDiffY <> 0 Then $_CMnewY=$_CMExistPos[1]+$_CMDirY*((($_CMi*$_CMDiffY)^(1/$_CMSpeed))*($_CMDiffY/(($_CMFrames*$_CMDiffY)^(1/$_CMSpeed))))
            If $_CMDiffW <> 0 Then $_CMnewW=$_CMExistPos[2]+$_CMDirW*((($_CMi*$_CMDiffW)^(1/$_CMSpeed))*($_CMDiffW/(($_CMFrames*$_CMDiffW)^(1/$_CMSpeed))))
            If $_CMDiffH <> 0 Then $_CMnewH=$_CMExistPos[3]+$_CMDirH*((($_CMi*$_CMDiffH)^(1/$_CMSpeed))*($_CMDiffH/(($_CMFrames*$_CMDiffH)^(1/$_CMSpeed))))
        EndIf
        
        If $_CMFlag=2 Then
            If $_CMDiffX <> 0 Then $_CMnewX=$_CMExistPos[0]+$_CMDirX*((($_CMi*$_CMDiffX)^$_CMSpeed)*($_CMDiffX/(($_CMFrames*$_CMDiffX)^$_CMSpeed)))
            If $_CMDiffY <> 0 Then $_CMnewY=$_CMExistPos[1]+$_CMDirY*((($_CMi*$_CMDiffY)^$_CMSpeed)*($_CMDiffY/(($_CMFrames*$_CMDiffY)^$_CMSpeed)))
            If $_CMDiffW <> 0 Then $_CMnewW=$_CMExistPos[2]+$_CMDirW*((($_CMi*$_CMDiffW)^$_CMSpeed)*($_CMDiffW/(($_CMFrames*$_CMDiffW)^$_CMSpeed)))
            If $_CMDiffH <> 0 Then $_CMnewH=$_CMExistPos[3]+$_CMDirH*((($_CMi*$_CMDiffH)^$_CMSpeed)*($_CMDiffH/(($_CMFrames*$_CMDiffH)^$_CMSpeed)))
        EndIf
        
        If $_CMFlag=3 Then
            _ControlMoveANI($_CMTitle,$_CMText,$_CMCtrlID,$_CMExistPos[0]+($_CMx-$_CMExistPos[0])/2,$_CMExistPos[1]+($_CMy-$_CMExistPos[1])/2,$_CMExistPos[2]+($_CMw-$_CMExistPos[2])/2,$_CMExistPos[3]+($_CMh-$_CMExistPos[3])/2,Floor($_CMFrames/2),2,$_CMSpeed,Ceiling($_CMminTime/2))
            _ControlMoveANI($_CMTitle,$_CMText,$_CMCtrlID,$_CMx,$_CMy,$_CMw,$_CMh,Ceiling($_CMFrames/2),1,$_CMSpeed,Ceiling($_CMminTime/2))
            ExitLoop
        EndIf
                
        ControlMove($_CMTitle,$_CMText,$_CMCtrlID,$_CMnewX,$_CMnewY,$_CMnewW,$_CMnewH)
        If $_CMi = $_CMFrames Then ExitLoop
        Do
            ;nothing
        Until TimerDiff($_CMTimer) > ($_CMminTime/($_CMFrames-1))*$_CMi
    Next
    Return 1
EndFunc

"There are 10 types of people in this world - those who can read binary, and those who can't.""We've heard that a million monkeys at a million keyboards could produce the complete works of Shakespeare; now, thanks to the Internet, we know that is not true." ~Robert Wilensky0101101 1001010 1100001 1101101 1100101 1110011 0110011 1001101 10001110000101 0000111 0001000 0001110 0001101 0010010 1010110 0100001 1101110

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

WAY RAD!!!!

Oh and nice UDF setup

Edited by JohnBailey

A decision is a powerful thing

Share this post


Link to post
Share on other sites

Is there an example?? I'd really like one... <_<

;======================================================================
;                           Internal Example
;======================================================================
#include <GUIConstants.au3>

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("ControlAnimation Example", 450, 156, 193, 125)
$Button1 = GUICtrlCreateButton("Move", 319, 37, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Move", 317, 89, 75, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUISetOnEvent($GUI_EVENT_CLOSE,'_GUIEvents')

GUICtrlSetOnEvent($Button1,'Button1')
GUICtrlSetOnEvent($Button2,'Button2')
Global $nextEx = 0
While $nextEx = 0
    Sleep(100)
WEnd

Func Button1()
    Local $_control = "Button1"
    $_CMExistPos=ControlGetPos("","", $_control)
    If $_CMExistPos[0] <> 250 Then
        _ControlMoveANI("","", $_control,250,5)
    Else
        _ControlMoveANI("","", $_control,319,37)
    EndIf
EndFunc
Func Button2()
    Local $_control = "Button2"
    $_CMExistPos=ControlGetPos("","", $_control)
    If $_CMExistPos[0] <> 5 Then
        _ControlMoveANI("","", $_control,5,55)
    Else
        _ControlMoveANI("","", $_control,317,89)
    EndIf
EndFunc

Func _GUIEvents()
    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            Terminate()
    EndSelect
EndFunc ;==>_GUIEvents

Func OnAutoItExit()
    ConsoleWrite('CLOSED via Exit'&@CRLF)
EndFunc

Func Terminate()
    ConsoleWrite('CLOSED via Terminate'&@CRLF)
    $nextEx=1; use to goto next Example
;Exit
EndFunc


;======================================================================
;                           External Example
;======================================================================
Run('calc.exe')
Local $winTitle = "Calculator"
WinWait($winTitle)
Local  $_control = 'Button23'
_ControlMoveANI($winTitle,"", $_control,5,5)

Exit

;;  _ControlMoveANI UDF function
;;
;;  Author:      james3mg
;;
;;  Description:  Animated version of ControlMove() - parameters are set so that you can "Find and Replace" ControlMove calls
;;        with _ControlMoveAni calls in existing scripts without breaking anything - the default animation parameters
;;        look fine with no further modification.
;;
;;  Parameters:
;;        $_CMTitle  the title of the window with the control you want to move (same as ControlMove() )
;;        $_CMText  text in the window that contains the control you want to move (same as ControlMove() )
;;        $_CMCtrlID        The ID of the control you want to move (same as ControlMove() )
;;        $_CMx   the x coordinate you want to move the control to (-1 means no change) (compatable with existing ControlMove() calls)
;;        $_CMy   the y coordinate you want to move the control to (-1 means no change) (compatable with existing ControlMove() calls)
;;        $_CMw   the width you want the control to be when the animation is done (optional) (-1 means no change [default]) (must be -1 or greater) (compatable with existing ControlMove() calls)
;;        $_CMh   the height you want the control to be when the animation is done (optional) (-1 means no change [default]) (must be -1 or greater) (compatable with existing ControlMove() calls)
;;        $_CMFrames        the number of frames (jumps) you want the control to take to arrive at the specified coordinates and size (optional, defaults to 25) (must be greater than 0)
;;        $_CMFlag  the flag to determine the type of animation: (optional) (must be a number between 0 and 3) (no effect if $_CMSpeed is 1)
;;                  - 0 means no speed change through the animation
;;                  - 1 means start quicker and slow as it approaches the target
;;                  - 2 means start slower and speed up as it approaches the target
;;                  - 3 means start slow, accelerate in the middle, then slow as it's approaching the target (default)
;;        $_CMSpeed  how dramatically the speed changes according to the $_CMFlag (no effect if $_CMFlag is 0) (default is 2.5) (must be 1 [constant speed] or greater)
;;        $_CMminTime     the MINIMUM time the animation will last, in milleseconds.  SEE WARNING BELOW.  1 is as fast as possible (default).  There is no way to set a maximum time. (must be greater than 0)
;;
;;  Return Values:
;;        On Success:     Returns 1
;;        On Failure:     Returns 0 and sets errorlevel as follows:
;;                @error = 1    means control not found
;;                @error = 2    means error in parameter values
;;
;;  WARNING:    This function will completely freeze your script while it's running. This is especially important to keep in mind when setting a minimum time for the animation, as your script will be guarenteed frozen for the duration you specify.
;;        This also means that you can't move more than one control at the same time, though I'm working on a separate function that would allow that to happen.

Func _ControlMoveANI($_CMTitle,$_CMText,$_CMCtrlID,$_CMx,$_CMy,$_CMw=-1,$_CMh=-1,$_CMFrames=25,$_CMFlag=3,$_CMSpeed=2.5,$_CMminTime=1)
    $_CMExistPos=ControlGetPos($_CMTitle,$_CMText,$_CMCtrlID)
    If @error Then Return(SetError(1,"",0))
    If $_CMw<-1 OR $_CMh<-1 OR $_CMFrames<1 OR $_CMFlag<0 OR $_CMSpeed<1 OR $_CMminTime<1 Then Return(SetError(2,"",0))
    If $_CMx=-1 Then $_CMx=$_CMExistPos[0]
    If $_CMy=-1 Then $_CMy=$_CMExistPos[1]
    If $_CMw=-1 Then $_CMw=$_CMExistPos[2] 
    If $_CMh=-1 Then $_CMh=$_CMExistPos[3]
   
    Local $_CMDiffX=$_CMx-$_CMExistPos[0],$_CMDirX=1
    If $_CMDiffX < 0 Then
        $_CMDiffX=Abs($_CMDiffX)
        $_CMDirX=-1
    EndIf
    Local $_CMDiffY=$_CMy-$_CMExistPos[1],$_CMDirY=1
    If $_CMDiffY < 0 Then
        $_CMDiffY=Abs($_CMDiffY)
        $_CMDirY=-1
    EndIf
    Local $_CMDiffW=$_CMw-$_CMExistPos[2],$_CMDirW=1
    If $_CMDiffW < 0 Then
        $_CMDiffW=Abs($_CMDiffW)
        $_CMDirW=-1
    EndIf
    Local $_CMDiffH=$_CMh-$_CMExistPos[3],$_CMDirH=1
    If $_CMDiffH < 0 Then
        $_CMDiffH=Abs($_CMDiffH)
        $_CMDirH=-1
    EndIf
    $_CMnewX=$_CMExistPos[0]
    $_CMnewY=$_CMExistPos[1]
    $_CMnewW=$_CMExistPos[2]
    $_CMnewH=$_CMExistPos[3]
   
    $_CMTimer=TimerInit()
   
    For $_CMi=1 To $_CMFrames;not actually checking the real bits in the flag to determine behavior - there's too few options to make that worthwhile, but it's structured so if another behavior (bit) was added (option 4), it wouldn't break scripts that already use this function, though a flag of 3 would have to be rethought...
        If $_CMFlag=0 Then
            If $_CMDiffX <> 0 Then $_CMnewX=$_CMExistPos[0]+$_CMDirX*(($_CMDiffX/$_CMFrames)*$_CMi)
            If $_CMDiffY <> 0 Then $_CMnewY=$_CMExistPos[1]+$_CMDirY*(($_CMDiffY/$_CMFrames)*$_CMi)
            If $_CMDiffW <> 0 Then $_CMnewW=$_CMExistPos[2]+$_CMDirW*(($_CMDiffW/$_CMFrames)*$_CMi)
            If $_CMDiffH <> 0 Then $_CMnewH=$_CMExistPos[3]+$_CMDirH*(($_CMDiffH/$_CMFrames)*$_CMi)
        EndIf
       
        If $_CMFlag=1 Then
            If $_CMDiffX <> 0 Then $_CMnewX=$_CMExistPos[0]+$_CMDirX*((($_CMi*$_CMDiffX)^(1/$_CMSpeed))*($_CMDiffX/(($_CMFrames*$_CMDiffX)^(1/$_CMSpeed))))
            If $_CMDiffY <> 0 Then $_CMnewY=$_CMExistPos[1]+$_CMDirY*((($_CMi*$_CMDiffY)^(1/$_CMSpeed))*($_CMDiffY/(($_CMFrames*$_CMDiffY)^(1/$_CMSpeed))))
            If $_CMDiffW <> 0 Then $_CMnewW=$_CMExistPos[2]+$_CMDirW*((($_CMi*$_CMDiffW)^(1/$_CMSpeed))*($_CMDiffW/(($_CMFrames*$_CMDiffW)^(1/$_CMSpeed))))
            If $_CMDiffH <> 0 Then $_CMnewH=$_CMExistPos[3]+$_CMDirH*((($_CMi*$_CMDiffH)^(1/$_CMSpeed))*($_CMDiffH/(($_CMFrames*$_CMDiffH)^(1/$_CMSpeed))))
        EndIf
       
        If $_CMFlag=2 Then
            If $_CMDiffX <> 0 Then $_CMnewX=$_CMExistPos[0]+$_CMDirX*((($_CMi*$_CMDiffX)^$_CMSpeed)*($_CMDiffX/(($_CMFrames*$_CMDiffX)^$_CMSpeed)))
            If $_CMDiffY <> 0 Then $_CMnewY=$_CMExistPos[1]+$_CMDirY*((($_CMi*$_CMDiffY)^$_CMSpeed)*($_CMDiffY/(($_CMFrames*$_CMDiffY)^$_CMSpeed)))
            If $_CMDiffW <> 0 Then $_CMnewW=$_CMExistPos[2]+$_CMDirW*((($_CMi*$_CMDiffW)^$_CMSpeed)*($_CMDiffW/(($_CMFrames*$_CMDiffW)^$_CMSpeed)))
            If $_CMDiffH <> 0 Then $_CMnewH=$_CMExistPos[3]+$_CMDirH*((($_CMi*$_CMDiffH)^$_CMSpeed)*($_CMDiffH/(($_CMFrames*$_CMDiffH)^$_CMSpeed)))
        EndIf
       
        If $_CMFlag=3 Then
            _ControlMoveANI($_CMTitle,$_CMText,$_CMCtrlID,$_CMExistPos[0]+($_CMx-$_CMExistPos[0])/2,$_CMExistPos[1]+($_CMy-$_CMExistPos[1])/2,$_CMExistPos[2]+($_CMw-$_CMExistPos[2])/2,$_CMExistPos[3]+($_CMh-$_CMExistPos[3])/2,Floor($_CMFrames/2),2,$_CMSpeed,Ceiling($_CMminTime/2))
            _ControlMoveANI($_CMTitle,$_CMText,$_CMCtrlID,$_CMx,$_CMy,$_CMw,$_CMh,Ceiling($_CMFrames/2),1,$_CMSpeed,Ceiling($_CMminTime/2))
            ExitLoop
        EndIf
               
        ControlMove($_CMTitle,$_CMText,$_CMCtrlID,$_CMnewX,$_CMnewY,$_CMnewW,$_CMnewH)
        If $_CMi = $_CMFrames Then ExitLoop
        Do
           ;nothing
        Until TimerDiff($_CMTimer) > ($_CMminTime/($_CMFrames-1))*$_CMi
    Next
    Return 1
EndFunc

A decision is a powerful thing

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

or, with Notepad (english windows only - change the window title for other languages' versions of "Untitled - Notepad").

This example assumes you save the function into a file called _ControlMoveAni.au3:

#include <_ControlMoveAni.au3>
Run("Notepad.exe")
WinWaitActive("Untitled - Notepad")
WinSetState("Untitled - Notepad","",@SW_MAXIMIZE)
ControlMove("Untitled - Notepad","","[CLASSNN:Edit1]",0,0,100,100)

ToolTip("OK...see that edit box?  I'm going to move it using flag 3")
sleep(2000)
_ControlMoveAni("Untitled - Notepad","","[CLASSNN:Edit1]",640,100,100,100,350,3,3,2000)
ToolTip("Wow!  Now let's move it and resize using flag 1 (start fast, end slow)")
sleep(2000)
_ControlMoveAni("Untitled - Notepad","","[CLASSNN:Edit1]",640,640,200,100,350,1,3,2000)
ToolTip("Finally, we'll move it again, using flag 2 to start slow and end quickly")
sleep(2000)
_ControlMoveAni("Untitled - Notepad","","[CLASSNN:Edit1]",0,640,200,100,350,2,3,2000)
sleep(1000)
Send("all done :)")

@JohnBailey: thanks...twice <_<

Edited by james3mg

"There are 10 types of people in this world - those who can read binary, and those who can't.""We've heard that a million monkeys at a million keyboards could produce the complete works of Shakespeare; now, thanks to the Internet, we know that is not true." ~Robert Wilensky0101101 1001010 1100001 1101101 1100101 1110011 0110011 1001101 10001110000101 0000111 0001000 0001110 0001101 0010010 1010110 0100001 1101110

Share this post


Link to post
Share on other sites

Sweeeeet <_<

Share this post


Link to post
Share on other sites

or, with Notepad (english windows only - change the window title for other languages' versions of "Untitled - Notepad").

This example assumes you save the function into a file called _ControlMoveAni.au3:

;code above

@JohnBailey: thanks...twice :)

Good example!! I like how you used the ToolTip. haha Simple and helpful.

BTW: The "type of animation" (with flags) is a WONDERFUL touch to the whole udf! As a previous Actionscript scripter, this makes me really happy! <_<


A decision is a powerful thing

Share this post


Link to post
Share on other sites

Glad you all like it! <_<

I've got jury duty today, so I won't be working on scripting at all, but I've figured out how to do the 'squash-n-stretch' effect, selectable with bit 4 (or 100, depending on how you want to look at it), so I might be able to get that up by the weekend!

Have a good one, all!


"There are 10 types of people in this world - those who can read binary, and those who can't.""We've heard that a million monkeys at a million keyboards could produce the complete works of Shakespeare; now, thanks to the Internet, we know that is not true." ~Robert Wilensky0101101 1001010 1100001 1101101 1100101 1110011 0110011 1001101 10001110000101 0000111 0001000 0001110 0001101 0010010 1010110 0100001 1101110

Share this post


Link to post
Share on other sites

Glad you all like it! <_<

I've got jury duty today, so I won't be working on scripting at all, but I've figured out how to do the 'squash-n-stretch' effect, selectable with bit 4 (or 100, depending on how you want to look at it), so I might be able to get that up by the weekend!

Have a good one, all!

Look forward to the updates


A decision is a powerful thing

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0