Graphic Calculator

Chocobo

White-Flower
Reaction score
409
When I looked this I was saying to myself "is this even possible on that?"

[YOUTUBE]ryHYO7HP9p8[/YOUTUBE]


After looking the script that is used it seems to use sort of checkpoints in 2 lists so it can determinate a parametric equation of degree n (from 2 to 7) which seems to be very flexible (at degree 2 it is very flexible).

And it seems you can achieve weird effects such as using "MILIEU" to something else while using degree 0 (which is degree 2 in fact).


source script : http://fsnc.21.forumer.com/viewtopic.php?p=1988#1988

Code:
Prog="LETTRES"

Cls
GridOff
AxesOff
LabelOff
S-WindMan
ViewWindow -0.5,11.5,1,-1,4,1,0,1,1/32
"DRAW"?->O
If Not O
Then "DEGRE (2~7,0)"?→L
L≠0┼L≠2┼L≠3┼L≠4┼L≠5┼L≠6┼L≠7┼2→L
"PRECISION (-10~10)"?→P
(38-4L+P)→Tpitch
L=0┼"MILIEU (0.5)"?→N
IfEnd
{1,1/3,3/2,7/3,11/5,7/4,3/2,3/2,6/5,1/3,2/3,6/5,9/5,11/4}→List 1
{3,7/3,2,5/2,13/5,5/2,2,5/4,2/5,0,3/4,2/5,1/5,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{14/3,7/2,13/4,4,9/2,14/3,9/2,14/3,19/4}→List 1
{3/2,5/4,1/4,0,1/2,3/2,1/2,1/6,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{21/4,26/5,28/5,6,20/3,27/4,20/3,27/4,34/5}→List 1
{3/2,3/4,0,1/6,3/4,3/2,3/4,1/3,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{179/24,173/24,22/3,15/2,8,17/2,44/5}→List 1
{3/2,0,4/5,1,6/5,7/5,3/2}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{32/3,19/2,37/4,10,21/2,32/3,21/2,32/3,43/4}→List 1
{3/2,5/4,1/4,0,1/2,3/2,1/2,1/6,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd

Code:
Prog="LETTRE P"

For 1→Z To Dim List 1-1
For 0→N To 3
PlotOn √((1-0.25N)List 1[Z]²+0.25NList 1[Z+1]²),√((1-0.25N)List 2[Z]²+0.25NList 2[Z+1]²)
Next
Next

Code:
Prog="LETTRE G"

For 1→Z To Dim List 1
PlotOn List 1[Z],List 2[Z]
Next
For 1→Z To Dim List 1-L
If L=2
Then 2(List 1[Z]-2List 1[Z+1]+List 1[Z+2])→A
-3List 1[Z]+4List 1[Z+1]-List 1[Z+2]→B
List 1[Z]→C
2(List 2[Z]-2List 2[Z+1]+List 2[Z+2])→D
-3List 2[Z]+4List 2[Z+1]-List 2[Z+2]→E
List 2[Z]→F
Graph(X,Y)=(AT²+BT+C,DT²+ET+F)
Else If L=3
Then (-9/2)(List 1[Z]-3List 1[Z+1]+3List 1[Z+2]-List 1[Z+3])→A
(9/2)(2List 1[Z]-5List 1[Z+1]+4List 1[Z+2]-List 1[Z+3])→B
(-1/2)(11List 1[Z]-18List 1[Z+1]+9List 1[Z+2]-2List 1[Z+3])→C
List 1[Z]→D
(-9/2)(List 2[Z]-3List 2[Z+1]+3List 2[Z+2]-List 2[Z+3])→E
(9/2)(2List 2[Z]-5List 2[Z+1]+4List 2[Z+2]-List 2[Z+3])→F
(-1/2)(11List 2[Z]-18List 2[Z+1]+9List 2[Z+2]-2List 2[Z+3]→G
List 2[Z]→H
Graph(X,Y)=(AT^3+BT²+CT+D,ET^3+FT²+GT+H)
Else If L=4
Then (32/3)(List 1[Z]-4List 1[Z+1]+6List 1[Z+2]-4List 1[Z+3]+List 1[Z+4])→A
(-16/3)(5List 1[Z]-18List 1[Z+1]+24List 1[Z+2]-14List 1[Z+3]+3List 1[Z+4])→B
(2/3)(35List 1[Z]-104List 1[Z+1]+114List 1[Z+2]-56List 1[Z+3]+11List 1[Z+4])→C
(-1/3)(25List 1[Z]-48List 1[Z+1]+36List 1[Z+2]-16List 1[Z+3]+3List 1[Z+4])→D
List 1[Z]→E
(32/3)(List 2[Z]-4List 2[Z+1]+6List 2[Z+2]-4List 2[Z+3]+List 2[Z+4])→F
(-16/3)(5List 2[Z]-18List 2[Z+1]+24List 2[Z+2]-14List 2[Z+3]+3List 2[Z+4])→G
(2/3)(35List 2[Z]-104List 2[Z+1]+114List 2[Z+2]-56List 2[Z+3]+11List 2[Z+4])→H
(-1/3)(25List 2[Z]-48List 2[Z+1]+36List 2[Z+2]-16List 2[Z+3]+3List 2[Z+4])→I
List 2[Z]→J
Graph(X,Y)=(AT^4+BT^3+CT²+DT+E,FT^4+GT^3+HT²+IT+J)
Else If L=5
Then (-625/24)(List 1[Z]-5List 1[Z+1]+10List 1[Z+2]-10List 1[Z+3]+5List 1[Z+4]-List 1[Z+5])→A
(625/24)(3List 1[Z]-14List 1[Z+1]+26List 1[Z+2]-24List 1[Z+3]+11List 1[Z+4]-2List 1[Z+5])→B
(-125/24)(17List 1[Z]-71List 1[Z+1]+118List 1[Z+2]-98List 1[Z+3]+41List 1[Z+4]-7List 1[Z+5])→C
(25/24)(45List 1[Z]-154List 1[Z+1]+214List 1[Z+2]-156List 1[Z+3]+61List 1[Z+4]-10List 1[Z+5])→D
(-1/12)(137List 1[Z]-300List 1[Z+1]+300List 1[Z+2]-200List 1[Z+3]+75List 1[Z+4]-12List 1[Z+5])→E
List 1[Z]→F
(-625/24)(List 2[Z]-5List 2[Z+1]+10List 2[Z+2]-10List 2[Z+3]+5List 2[Z+4]-List 2[Z+5])→G
(625/24)(3List 2[Z]-14List 2[Z+1]+26List 2[Z+2]-24List 2[Z+3]+11List 2[Z+4]-2List 2[Z+5])→H
(-125/24)(17List 2[Z]-71List 2[Z+1]+118List 2[Z+2]-98List 2[Z+3]+41List 2[Z+4]-7List 2[Z+5])→I
(25/24)(45List 2[Z]-154List 2[Z+1]+214List 2[Z+2]-156List 2[Z+3]+61List 2[Z+4]-10List 2[Z+5])→J
(-1/12)(137List 2[Z]-300List 2[Z+1]+300List 2[Z+2]-200List 2[Z+3]+75List 2[Z+4]-12List 2[Z+5])→K
List 2[Z]→M
Graph(X,Y)=(AT^5+BT^4+CT^3+DT²+ET+F,GT^5+HT^4+IT^3+JT²+KT+M)
Else If L=6
Then (324/5)(List 1[Z]-6List 1[Z+1]+15List 1[Z+2]-20List 1[Z+3]+15List 1[Z+4]-6List 1[Z+5]+List 1[Z+6])→A
(-162/5)(7List 1[Z]-40List 1[Z+1]+95List 1[Z+2]-120List 1[Z+3]+85List 1[Z+4]-32List 1[Z+5]+5List 1[Z+6])→B
9(35List 1[Z]-186List 1[Z+1]+411List 1[Z+2]-484List 1[Z+3]+321List 1[Z+4]-114List 1[Z+5]+17List 1[Z+6])→C
(-9/2)(49List 1[Z]-232List 1[Z+1]+461List 1[Z+2]-496List 1[Z+3]+307List 1[Z+4]-104List 1[Z+5]+15List 1[Z+6])→D
(1/10)(812List 1[Z]-3132List 1[Z+1]+5265List 1[Z+2]-5080List 1[Z+3]+2970List 1[Z+4]-972List 1[Z+5]+137List 1[Z+6])→E
(-1/10)(147List 1[Z]-360List 1[Z+1]+450List 1[Z+2]-400List 1[Z+3]+225List 1[Z+4]-72List 1[Z+5]+10List 1[Z+6])→F
List 1[Z]→G
(324/5)(List 2[Z]-6List 2[Z+1]+15List 2[Z+2]-20List 2[Z+3]+15List 2[Z+4]-6List 2[Z+5]+List 2[Z+6])→H
(-162/5)(7List 2[Z]-40List 2[Z+1]+95List 2[Z+2]-120List 2[Z+3]+85List 2[Z+4]-32List 2[Z+5]+5List 2[Z+6])→I
9(35List 2[Z]-186List 2[Z+1]+411List 2[Z+2]-484List 2[Z+3]+321List 2[Z+4]-114List 2[Z+5]+17List 2[Z+6])→J
(-9/2)(49List 2[Z]-232List 2[Z+1]+461List 2[Z+2]-496List 2[Z+3]+307List 2[Z+4]-104List 2[Z+5]+15List 2[Z+6])→K
(1/10)(812List 2[Z]-3132List 2[Z+1]+5265List 2[Z+2]-5080List 2[Z+3]+2970List 2[Z+4]-972List 2[Z+5]+137List 2[Z+6])→M
(-1/10)(147List 2[Z]-360List 2[Z+1]+450List 2[Z+2]-400List 2[Z+3]+225List 2[Z+4]-72List 2[Z+5]+10List 2[Z+6])→N
List 2[Z]→P
Graph(X,Y)=(AT^6+BT^5+CT^4+DT^3+ET²+FT+G,HT^6+IT^5+JT^4+KT^3+MT²+NT+P)
Else If L=7
Then (-117649/720)(List 1[Z]-7List 1[Z+1]+21List 1[Z+2]-35List 1[Z+3]+35List 1[Z+4]-21List 1[Z+5]+7List 1[Z+6]-List 1[Z+7])→A
(117649/720)(4List 1[Z]-27List 1[Z+1]+78List 1[Z+2]-125List 1[Z+3]+120List 1[Z+4]-69List 1[Z+5]+22List 1[Z+6]-3List 1[Z+7])→B
(-16807/720)(46List 1[Z]-295List 1[Z+1]+810List 1[Z+2]-1235List 1[Z+3]+1130List 1[Z+4]-621List 1[Z+5]+190List 1[Z+6]-25List 1[Z+7])→C
(2401/144)(56List 1[Z]-333List 1[Z+1]+852List 1[Z+2]-1219List 1[Z+3]+1056List 1[Z+4]-555List 1[Z+5]+164List 1[Z+6]-21List 1[Z+7])→D
(-343/720)(967List 1[Z]-5104List 1[Z+1]+11787List 1[Z+2]-15560List 1[Z+3]+12725List 1[Z+4]-6432List 1[Z+5]+1849List 1[Z+6]-232List 1[Z+7])→E
(49/360)(938List 1[Z]-4014List 1[Z+1]+7911List 1[Z+2]-9490List 1[Z+3]+7380List 1[Z+4]-3618List 1[Z+5]+1019List 1[Z+6]-126List 1[Z+7])→F
(-1/60)(1089List 1[Z]-2940List 1[Z+1]+4410List 1[Z+2]-4900List 1[Z+3]+3675List 1[Z+4]-1764List 1[Z+5]+490List 1[Z+6]-60List 1[Z+7])→G
List 1[Z]→H
(-117649/720)(List 2[Z]-7List 2[Z+1]+21List 2[Z+2]-35List 2[Z+3]+35List 2[Z+4]-21List 2[Z+5]+7List 2[Z+6]-List 2[Z+7])→I
(117649/720)(4List 2[Z]-27List 2[Z+1]+78List 2[Z+2]-125List 2[Z+3]+120List 2[Z+4]-69List 2[Z+5]+22List 2[Z+6]-3List 2[Z+7])→J
(-16807/720)(46List 2[Z]-295List 2[Z+1]+810List 2[Z+2]-1235List 2[Z+3]+1130List 2[Z+4]-621List 2[Z+5]+190List 2[Z+6]-25List 2[Z+7])→K
(2401/144)(56List 2[Z]-333List 2[Z+1]+852List 2[Z+2]-1219List 2[Z+3]+1056List 2[Z+4]-555List 2[Z+5]+164List 2[Z+6]-21List 2[Z+7])→M
(-343/720)(967List 2[Z]-5104List 2[Z+1]+11787List 2[Z+2]-15560List 2[Z+3]+12725List 2[Z+4]-6432List 2[Z+5]+1849List 2[Z+6]-232List 2[Z+7])→N
(49/360)(938List 2[Z]-4014List 2[Z+1]+7911List 2[Z+2]-9490List 2[Z+3]+7380List 2[Z+4]-3618List 2[Z+5]+1019List 2[Z+6]-126List 2[Z+7])→P
(-1/60)(1089List 2[Z]-2940List 2[Z+1]+4410List 2[Z+2]-4900List 2[Z+3]+3675List 2[Z+4]-1764List 2[Z+5]+490List 2[Z+6]-60List 2[Z+7])→Q
List 2[Z]→R
Graph(X,Y)=(AT^7+BT^6+CT^5+DT^4+ET^3+FT²+GT+H,IT^7+JT^6+KT^5+MT^4+NT^3+PT²+QT+R)
Else (N(List 1[Z]-List 1[Z+2])-List 1[Z]+List 1[Z+1])/(N(N-1))→A
(-(N²List 1[Z]-N²List 1[Z+2]-List 1[Z]+List 1[Z+1]))/(N²-N)→B
List 1[Z]→C
(N(List 2[Z]-List 2[Z+2])-List 2[Z]+List 2[Z+1])/(N(N-1))→D
(-(N²List 2[Z]-N²List 2[Z+2]-List 2[Z]+List 2[Z+1]))/(N²-N)→E
List 2[Z]→F
Graph(X,Y)=(AT²+BT+C,DT²+ET+F)
Z+2=Dim List 1┼Return
IfEnd
IfEnd
IfEnd
IfEnd
IfEnd
IfEnd
Next

the script names/strings are in french :
"lettre" = "letter"
"degre" = "degree"
"precision" = "precision"
"milieu" = "center"


I even made a JASS script on 5 hours (for warcraft 3 of course) for anyone that is interested :

JASS:
globals
    // User-defined
    real array              udg_List1
    real array              udg_List2
    real array              udg_List3
    real array              udg_List4
    integer                 udg_DimList
    integer                 udg_degree
    real                    udg_duration
    real array              udg_List5
    real array              udg_List6
    lightning array         udg_Lightnings
    integer                 udg_Lightning
    real array              udg_RD
    string                  udg_LightSFX
    real                    udg_Precision
endglobals

function CreateLightning takes nothing returns lightning
    return AddLightningEx(udg_LightSFX, true, udg_RD[1], udg_RD[2], udg_RD[3], udg_RD[4], udg_RD[5], udg_RD[6])
endfunction

function CollectData takes real T, real Tmax, integer i returns nothing
    if udg_degree == 2 then
        //degree 2 parametric : at^2 + bt + c
        set udg_RD[1] = udg_List4[1]*T*T + udg_List4[2]*T + udg_List4[3]
        set udg_RD[2] = udg_List5[1]*T*T + udg_List5[2]*T + udg_List5[3]
        set udg_RD[3] = udg_List6[1]*T*T + udg_List6[2]*T + udg_List6[3]
        set udg_RD[4] = udg_List4[1]*Tmax*Tmax + udg_List4[2]*Tmax + udg_List4[3]
        set udg_RD[5] = udg_List5[1]*Tmax*Tmax + udg_List5[2]*Tmax + udg_List5[3]
        set udg_RD[6] = udg_List6[1]*Tmax*Tmax + udg_List6[2]*Tmax + udg_List6[3]
        set udg_Lightnings<i> = CreateLightning()
    endif
    if udg_degree == 3 then
        //degree 3 parametric : at^3 + bt^2 + ct + d
        set udg_RD[1] = udg_List4[1]*T*T*T + udg_List4[2]*T*T + udg_List4[3]*T + udg_List4[4]
        set udg_RD[2] = udg_List5[1]*T*T*T + udg_List5[2]*T*T + udg_List5[3]*T + udg_List5[4]
        set udg_RD[3] = udg_List6[1]*T*T*T + udg_List6[2]*T*T + udg_List6[3]*T + udg_List6[4]
        set udg_RD[4] = udg_List4[1]*Tmax*Tmax*Tmax + udg_List4[2]*Tmax*Tmax + udg_List4[3]*Tmax + udg_List4[4]
        set udg_RD[5] = udg_List5[1]*Tmax*Tmax*Tmax + udg_List5[2]*Tmax*Tmax + udg_List5[3]*Tmax + udg_List5[4]
        set udg_RD[6] = udg_List6[1]*Tmax*Tmax*Tmax + udg_List6[2]*Tmax*Tmax + udg_List6[3]*Tmax + udg_List6[4]
        set udg_Lightnings<i> = CreateLightning()
    endif
    if udg_degree == 4 then
        //degree 4 parametric : at^4 + bt^3 + ct^2 + dt + e
        set udg_RD[1] = udg_List4[1]*T*T*T*T + udg_List4[2]*T*T*T + udg_List4[3]*T*T + udg_List4[4]*T + udg_List4[5]
        set udg_RD[2] = udg_List5[1]*T*T*T*T + udg_List5[2]*T*T*T + udg_List5[3]*T*T + udg_List5[4]*T + udg_List5[5]
        set udg_RD[3] = udg_List6[1]*T*T*T*T + udg_List6[2]*T*T*T + udg_List6[3]*T*T + udg_List6[4]*T + udg_List6[5]
        set udg_RD[4] = udg_List4[1]*Tmax*Tmax*Tmax*Tmax + udg_List4[2]*Tmax*Tmax*Tmax + udg_List4[3]*Tmax*Tmax + udg_List4[4]*Tmax + udg_List4[5]
        set udg_RD[5] = udg_List5[1]*Tmax*Tmax*Tmax*Tmax + udg_List5[2]*Tmax*Tmax*Tmax + udg_List5[3]*Tmax*Tmax + udg_List5[4]*Tmax + udg_List5[5]
        set udg_RD[6] = udg_List6[1]*Tmax*Tmax*Tmax*Tmax + udg_List6[2]*Tmax*Tmax*Tmax + udg_List6[3]*Tmax*Tmax + udg_List6[4]*Tmax + udg_List6[5]
        set udg_Lightnings<i> = CreateLightning()
    endif
    if udg_degree == 5 then
        //degree 5 parametric : at^5 + bt^4 + ct^3 + dt^2 + et + f, a bit long xd
        set udg_RD[1] = udg_List4[1]*T*T*T*T*T + udg_List4[2]*T*T*T*T + udg_List4[3]*T*T*T + udg_List4[4]*T*T + udg_List4[5]*T + udg_List4[6]
        set udg_RD[2] = udg_List5[1]*T*T*T*T*T + udg_List5[2]*T*T*T*T + udg_List5[3]*T*T*T + udg_List5[4]*T*T + udg_List5[5]*T + udg_List5[6]
        set udg_RD[3] = udg_List6[1]*T*T*T*T*T + udg_List6[2]*T*T*T*T + udg_List6[3]*T*T*T + udg_List6[4]*T*T + udg_List6[5]*T + udg_List6[6]
        set udg_RD[4] = udg_List4[1]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List4[2]*Tmax*Tmax*Tmax*Tmax + udg_List4[3]*Tmax*Tmax*Tmax + udg_List4[4]*Tmax*Tmax + udg_List4[5]*Tmax + udg_List4[6]
        set udg_RD[5] = udg_List5[1]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List5[2]*Tmax*Tmax*Tmax*Tmax + udg_List5[3]*Tmax*Tmax*Tmax + udg_List5[4]*Tmax*Tmax + udg_List5[5]*Tmax + udg_List5[6]
        set udg_RD[6] = udg_List6[1]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List6[2]*Tmax*Tmax*Tmax*Tmax + udg_List6[3]*Tmax*Tmax*Tmax + udg_List6[4]*Tmax*Tmax + udg_List6[5]*Tmax + udg_List6[6]
        set udg_Lightnings<i> = CreateLightning()
    endif
    if udg_degree == 6 then
        //degree 6 parametric : at^6 + bt^5 + ct^4 + dt^3 + et^2 + ft + g, that&#039;s long <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite8" alt=":D" title="Big Grin    :D" loading="lazy" data-shortname=":D" />
        set udg_RD[1] = udg_List4[1]*T*T*T*T*T*T + udg_List4[2]*T*T*T*T*T + udg_List4[3]*T*T*T*T + udg_List4[4]*T*T*T + udg_List4[5]*T*T + udg_List4[6]*T + udg_List4[7]
        set udg_RD[2] = udg_List5[1]*T*T*T*T*T*T + udg_List5[2]*T*T*T*T*T + udg_List5[3]*T*T*T*T + udg_List5[4]*T*T*T + udg_List5[5]*T*T + udg_List5[6]*T + udg_List5[7]
        set udg_RD[3] = udg_List6[1]*T*T*T*T*T*T + udg_List6[2]*T*T*T*T*T + udg_List6[3]*T*T*T*T + udg_List6[4]*T*T*T + udg_List6[5]*T*T + udg_List6[6]*T + udg_List6[7]
        set udg_RD[4] = udg_List4[1]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List4[2]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List4[3]*Tmax*Tmax*Tmax*Tmax + udg_List4[4]*Tmax*Tmax*Tmax + udg_List4[5]*Tmax*Tmax + udg_List4[6]*Tmax + udg_List4[7]
        set udg_RD[5] = udg_List5[1]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List5[2]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List5[3]*Tmax*Tmax*Tmax*Tmax + udg_List5[4]*Tmax*Tmax*Tmax + udg_List5[5]*Tmax*Tmax + udg_List5[6]*Tmax + udg_List5[7]
        set udg_RD[6] = udg_List6[1]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List6[2]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List6[3]*Tmax*Tmax*Tmax*Tmax + udg_List6[4]*Tmax*Tmax*Tmax + udg_List6[5]*Tmax*Tmax + udg_List6[6]*Tmax + udg_List6[7]
        set udg_Lightnings<i> = CreateLightning()
    endif
    if udg_degree == 7 then
        //degree 7 parametric : at^7 + bt^6 + ct^5 + dt^4 + et^3 + ft^2 + gt + h, who would calculate this anyway??
        set udg_RD[1] = udg_List4[1]*T*T*T*T*T*T*T + udg_List4[2]*T*T*T*T*T*T + udg_List4[3]*T*T*T*T*T + udg_List4[4]*T*T*T*T + udg_List4[5]*T*T*T + udg_List4[6]*T*T + udg_List4[7]*T + udg_List4[8]
        set udg_RD[2] = udg_List5[1]*T*T*T*T*T*T*T + udg_List5[2]*T*T*T*T*T*T + udg_List5[3]*T*T*T*T*T + udg_List5[4]*T*T*T*T + udg_List5[5]*T*T*T + udg_List5[6]*T*T + udg_List5[7]*T + udg_List5[8]
        set udg_RD[3] = udg_List6[1]*T*T*T*T*T*T*T + udg_List6[2]*T*T*T*T*T*T + udg_List6[3]*T*T*T*T*T + udg_List6[4]*T*T*T*T + udg_List6[5]*T*T*T + udg_List6[6]*T*T + udg_List6[7]*T + udg_List6[8]
        set udg_RD[4] = udg_List4[1]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List4[2]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List4[3]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List4[4]*Tmax*Tmax*Tmax*Tmax + udg_List4[5]*Tmax*Tmax*Tmax + udg_List4[6]*Tmax*Tmax + udg_List4[7]*Tmax + udg_List4[8]
        set udg_RD[5] = udg_List5[1]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List5[2]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List5[3]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List5[4]*Tmax*Tmax*Tmax*Tmax + udg_List5[5]*Tmax*Tmax*Tmax + udg_List5[6]*Tmax*Tmax + udg_List5[7]*Tmax + udg_List5[8]
        set udg_RD[6] = udg_List6[1]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List6[2]*Tmax*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List6[3]*Tmax*Tmax*Tmax*Tmax*Tmax + udg_List6[4]*Tmax*Tmax*Tmax*Tmax + udg_List6[5]*Tmax*Tmax*Tmax + udg_List6[6]*Tmax*Tmax + udg_List6[7]*Tmax + udg_List6[8]
        set udg_Lightnings<i> = CreateLightning()
    endif
endfunction

function GraphB takes nothing returns nothing
    local real Tpitch = 1./udg_Precision
    local real T = -Tpitch
    local real Tmax = 0
    local integer i = udg_Lightning
    local integer Ex = udg_Lightning
    loop
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if Tmax &gt; 1 then
            set Tmax = 1
        endif
        if T &gt; 1 then
            set T = 1
        endif
        exitwhen T &gt;= 1
        call CollectData(T, Tmax, i)
    endloop
    set udg_Lightning = i
    call TriggerSleepAction(udg_duration)
    loop
        exitwhen Ex == 0
        call DestroyLightning(udg_Lightnings<i>)
        set udg_Lightnings<i> = null
        set i = i - 1
    endloop
endfunction

function GraphN takes nothing returns nothing
    local real Tpitch = 1./udg_Precision
    local real T = -Tpitch
    local real Tmax = 0
    local integer i = udg_Lightning
    local integer Ex = udg_Lightning
    loop
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if Tmax &gt; 1 then
            set Tmax = 1
        endif
        if T &gt; 1 then
            set T = 1
        endif
        exitwhen T &gt;= 1
        call CollectData(T, Tmax, i)
    endloop
    set udg_Lightning = i
    call TriggerSleepAction(udg_duration)
    loop
        exitwhen i == Ex
        call DestroyLightning(udg_Lightnings<i>)
        set udg_Lightnings<i> = null
        set i = i - 1
    endloop
endfunction

function LightningList takes string s returns string
    //blue category
    //Chain Lightning - Primary - &quot;big blue&quot; - &quot;CLPB&quot; - not much laggy
    //Lightning Attack - &quot;medium blue&quot; - &quot;CHIM&quot; - not much laggy
    //Chain Lightning - Secondary, &quot;small blue 1&quot; - &quot;CLSB&quot; - not much laggy
    //Mana Drain - &quot;small blue 2&quot; - &quot;DRAM&quot; - not much laggy
    //
    //green category
    //Mana Burn - &quot;big green&quot; - &quot;MBUR&quot; - laggy
    //Mana Flare - &quot;medium green&quot; - &quot;MFPB&quot; - not much laggy
    //Drain - &quot;small green 1&quot; - &quot;DRAB&quot; - laggy
    //Life Drain - &quot;small green 2&quot; - &quot;DRAL&quot; - laggy
    //
    //yellow category
    //Healing Wave - Primary - &quot;yellow&quot; - &quot;HWPB&quot; - laggy
    //Healing Wave - Secondary - &quot;small yellow&quot; - &quot;HWSB&quot; - not much laggy
    //
    //red category
    //Finger of Death - &quot;red&quot; - &quot;AFOD&quot; - laggy
    //Magic Leash - &quot;small red&quot; - &quot;LEAS&quot; - not much laggy
    //
    //others
    //Forked Lightning - &quot;purple&quot; - &quot;FORK&quot; - not much laggy
    //Spirit Link - &quot;orange&quot; - &quot;SPLK&quot; - not much laggy
    //
    //check if entry is already correct
    if s==&quot;CLPB&quot; or s==&quot;CHIM&quot; or s==&quot;CLSB&quot; or s==&quot;DRAM&quot; or s==&quot;MBUR&quot; or s==&quot;MFPB&quot; or s==&quot;DRAB&quot; or s==&quot;DRAL&quot; or s==&quot;HWPB&quot; or s==&quot;HWSB&quot; or s==&quot;AFOD&quot; or s==&quot;LEAS&quot; or s==&quot;FORK&quot; or s==&quot;SPLK&quot; then
        return s
    endif
    //blue category
    if s==&quot;big blue&quot; then
        return &quot;CLPB&quot; //Chain Lightning - Primary
    endif
    if s==&quot;medium blue&quot; then
        return &quot;CHIM&quot; //Lightning Attack
    endif
    if s==&quot;small blue 1&quot; then
        return &quot;CLSB&quot; //Chain Lightning - Secondary
    endif
    if s==&quot;small blue 2&quot; then
        return &quot;DRAM&quot; //Mana Drain
    endif
    if s==&quot;big green&quot; then
        return &quot;MBUR&quot; //Mana Burn
    endif
    if s==&quot;medium green&quot; then
        return &quot;MFPB&quot; //Mana Flare
    endif
    if s==&quot;small green 1&quot; then
        return &quot;DRAB&quot; //Drain
    endif
    if s==&quot;small green 2&quot; then
        return &quot;DRAL&quot; //Life Drain
    endif
    if s==&quot;yellow&quot; then
        return &quot;HWPB&quot; //Healing Wave - Primary
    endif
    if s==&quot;small yellow&quot; then
        return &quot;HWSB&quot; //Healing Wave - Secondary
    endif
    if s==&quot;red&quot; then
        return &quot;AFOD&quot; //Finger of Death
    endif
    if s==&quot;small red&quot; then
        return &quot;LEAS&quot; //Magic Leash
    endif
    if s==&quot;purple&quot; then
        return &quot;FORK&quot; //Forked Lightning
    endif
    if s==&quot;orange&quot; then
        return &quot;SPLK&quot; //Spirit Link
    endif
    return &quot;DRAM&quot; //returns Mana Drain if it founds nothing
endfunction

function Calculate takes integer degree, real duration, integer which, real delay, string s, integer precision, boolean additive returns nothing
    local integer Z = 0
    set udg_degree = degree
    set udg_duration = duration
    if not additive then
        set udg_Lightning = 1
    endif
    set udg_LightSFX = LightningList(s)
    set udg_Precision = 2.+2.*udg_degree+precision
    if degree != 2 and degree != 3 and degree != 4 and degree != 5 and (degree != 6 and which == 2) and (degree != 7 and which == 2) then
        set degree = 2
        set which = 1
    endif
    if udg_duration &lt;= 0.0 then
        set duration = 3.0
    endif
    if udg_Precision &lt;= 0.0 or udg_Precision != 2.+2.*udg_degree+precision then
        set udg_Precision = 2.+2.*udg_degree
    endif
    loop
        set Z = Z + 1
        if degree == 2 then //degree 2 data collect
            if which == 1 then //normal graph
                //degree 2 data : 2(n1-2*n2+n3)*t^2 + (-3*n1+4*n2-n3)*t + n3
                set udg_List4[1] = 2*(udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2])
                set udg_List4[2] = -3*udg_List1[Z]+4*udg_List1[Z+1]-udg_List1[Z+2]
                set udg_List4[3] = udg_List1[Z]
                set udg_List5[1] = 2*(udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2])
                set udg_List5[2] = -3*udg_List2[Z]+4*udg_List2[Z+1]-udg_List2[Z+2]
                set udg_List5[3] = udg_List2[Z]
                set udg_List6[1] = 2*(udg_List3[Z]-2*udg_List3[Z+1]+udg_List3[Z+2])
                set udg_List6[2] = -3*udg_List3[Z]+4*udg_List3[Z+1]-udg_List3[Z+2]
                set udg_List6[3] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphN&quot;)
            else //bezier graph
                //degree 2 data : (n1-2*n2+n3)*t^2 + (-2*n1-2*n2)*t + n3
                set udg_List4[1] = udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2]
                set udg_List4[2] = -2*udg_List1[Z]+2*udg_List1[Z+1]
                set udg_List4[3] = udg_List1[Z]
                set udg_List5[1] = udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2]
                set udg_List5[2] = -2*udg_List2[Z]+2*udg_List2[Z+1]
                set udg_List5[3] = udg_List2[Z]
                set udg_List6[1] = udg_List3[Z]-2*udg_List3[Z+1]+udg_List3[Z+2]
                set udg_List6[2] = -2*udg_List3[Z]+2*udg_List3[Z+1]
                set udg_List6[3] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphB&quot;)
            endif
        endif
        if degree == 3 then //degree 3 data collect
            if which == 1 then //normal graph
                //degree 3 data : (-9/2)(n1-3*n2+3*n3-n4)*t^3 + (9/2)(2*n1-5*n2+4*n3-n4)*t^2 + (-1/2)(11*n1-18*n2+9*n3-2*n4)*t + n1
                set udg_List4[1] = (-9./2.)*(udg_List1[Z]-3*udg_List1[Z+1]+3*udg_List1[Z+2]-udg_List1[Z+3])
                set udg_List4[2] = (9./2.)*(2*udg_List1[Z]-5*udg_List1[Z+1]+4*udg_List1[Z+2]-udg_List1[Z+3])
                set udg_List4[3] = (-1./2.)*(11*udg_List1[Z]-18*udg_List1[Z+1]+9*udg_List1[Z+2]-2*udg_List1[Z+3])
                set udg_List4[4] = udg_List1[Z]
                set udg_List5[1] = (-9./2.)*(udg_List2[Z]-3*udg_List2[Z+1]+3*udg_List2[Z+2]-udg_List2[Z+3])
                set udg_List5[2] = (9./2.)*(2*udg_List2[Z]-5*udg_List2[Z+1]+4*udg_List2[Z+2]-udg_List2[Z+3])
                set udg_List5[3] = (-1./2.)*(11*udg_List2[Z]-18*udg_List2[Z+1]+9*udg_List2[Z+2]-2*udg_List2[Z+3])
                set udg_List5[4] = udg_List2[Z]
                set udg_List6[1] = (-9./2.)*(udg_List3[Z]-3*udg_List3[Z+1]+3*udg_List3[Z+2]-udg_List3[Z+3])
                set udg_List6[2] = (9./2.)*(2*udg_List3[Z]-5*udg_List3[Z+1]+4*udg_List3[Z+2]-udg_List3[Z+3])
                set udg_List6[3] = (-1./2.)*(11*udg_List3[Z]-18*udg_List3[Z+1]+9*udg_List3[Z+2]-2*udg_List3[Z+3])
                set udg_List6[4] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphN&quot;)
            else //bezier graph
                //degree 3 data : (-n1+3*n2-3*n3+n4)*t^3 + (3*n1-6*n2+3*n3)*t^2 + (-3*n1+3*n2)*t + n1
                set udg_List4[1] = -udg_List1[Z]+3*udg_List1[Z+1]-3*udg_List1[Z+2]+udg_List1[Z+3]
                set udg_List4[2] = 3*udg_List1[Z]-6*udg_List1[Z+1]+3*udg_List1[Z+2]
                set udg_List4[3] = -3*udg_List1[Z]+3*udg_List1[Z+1]
                set udg_List4[4] = udg_List1[Z]
                set udg_List5[1] = -udg_List2[Z]+3*udg_List2[Z+1]-3*udg_List2[Z+2]+udg_List2[Z+3]
                set udg_List5[2] = 3*udg_List2[Z]-6*udg_List2[Z+1]+3*udg_List2[Z+2]
                set udg_List5[3] = -3*udg_List2[Z]+3*udg_List2[Z+1]
                set udg_List5[4] = udg_List2[Z]
                set udg_List6[1] = -udg_List3[Z]+3*udg_List3[Z+1]-3*udg_List3[Z+2]+udg_List3[Z+3]
                set udg_List6[2] = 3*udg_List3[Z]-6*udg_List3[Z+1]+3*udg_List3[Z+2]
                set udg_List6[3] = -3*udg_List3[Z]+3*udg_List3[Z+1]
                set udg_List6[4] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphB&quot;)
            endif
        endif
        if degree == 4 then //degree 4 data collect
            if which == 1 then //normal graph
                //degree 4 data : so long I won&#039;t put anymore the full function
                set udg_List4[1] = (32./3.)*(udg_List1[Z]-4*udg_List1[Z+1]+6*udg_List1[Z+2]-4*udg_List1[Z+3]+udg_List1[Z+4])
                set udg_List4[2] = (-16./3.)*(5*udg_List1[Z]-18*udg_List1[Z+1]+24*udg_List1[Z+2]-14*udg_List1[Z+3]+3*udg_List1[Z+4])
                set udg_List4[3] = (2./3.)*(35*udg_List1[Z]-104*udg_List1[Z+1]+114*udg_List1[Z+2]-56*udg_List1[Z+3]+11*udg_List1[Z+4])
                set udg_List4[4] = (-1./3.)*(25*udg_List1[Z]-48*udg_List1[Z+1]+36*udg_List1[Z+2]-16*udg_List1[Z+3]+3*udg_List1[Z+4])
                set udg_List4[5] = udg_List1[Z]
                set udg_List5[1] = (32./3.)*(udg_List2[Z]-4*udg_List2[Z+1]+6*udg_List2[Z+2]-4*udg_List2[Z+3]+udg_List2[Z+4])
                set udg_List5[2] = (-16./3.)*(5*udg_List2[Z]-18*udg_List2[Z+1]+24*udg_List2[Z+2]-14*udg_List2[Z+3]+3*udg_List2[Z+4])
                set udg_List5[3] = (2./3.)*(35*udg_List2[Z]-104*udg_List2[Z+1]+114*udg_List2[Z+2]-56*udg_List2[Z+3]+11*udg_List2[Z+4])
                set udg_List5[4] = (-1./3.)*(25*udg_List2[Z]-48*udg_List2[Z+1]+36*udg_List2[Z+2]-16*udg_List2[Z+3]+3*udg_List2[Z+4])
                set udg_List5[5] = udg_List2[Z]
                set udg_List6[1] = (32./3.)*(udg_List3[Z]-4*udg_List3[Z+1]+6*udg_List3[Z+2]-4*udg_List3[Z+3]+udg_List3[Z+4])
                set udg_List6[2] = (-16./3.)*(5*udg_List3[Z]-18*udg_List3[Z+1]+24*udg_List3[Z+2]-14*udg_List3[Z+3]+3*udg_List3[Z+4])
                set udg_List6[3] = (2./3.)*(35*udg_List3[Z]-104*udg_List3[Z+1]+114*udg_List3[Z+2]-56*udg_List3[Z+3]+11*udg_List3[Z+4])
                set udg_List6[4] = (-1./3.)*(25*udg_List3[Z]-48*udg_List3[Z+1]+36*udg_List3[Z+2]-16*udg_List3[Z+3]+3*udg_List3[Z+4])
                set udg_List6[5] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphN&quot;)
            else //bezier graph
                //degree 4 data : too long...
                set udg_List4[1] = udg_List1[Z]-4*udg_List1[Z+1]+6*udg_List1[Z+2]-4*udg_List1[Z+3]+udg_List1[Z+4]
                set udg_List4[2] = -4*udg_List1[Z]+12*udg_List1[Z+1]-12*udg_List1[Z+2]+4*udg_List1[Z+3]
                set udg_List4[3] = 6*udg_List1[Z]-12*udg_List1[Z+1]+6*udg_List1[Z+2]
                set udg_List4[4] = -4*udg_List1[Z]+4*udg_List1[Z+1]
                set udg_List4[5] = udg_List1[Z]
                set udg_List5[1] = udg_List2[Z]-4*udg_List2[Z+1]+6*udg_List2[Z+2]-4*udg_List2[Z+3]+udg_List2[Z+4]
                set udg_List5[2] = -4*udg_List2[Z]+12*udg_List2[Z+1]-12*udg_List2[Z+2]+4*udg_List2[Z+3]
                set udg_List5[3] = 6*udg_List2[Z]-12*udg_List2[Z+1]+6*udg_List2[Z+2]
                set udg_List5[4] = -4*udg_List2[Z]+4*udg_List2[Z+1]
                set udg_List5[5] = udg_List2[Z]
                set udg_List6[1] = udg_List3[Z]-4*udg_List3[Z+1]+6*udg_List3[Z+2]-4*udg_List3[Z+3]+udg_List3[Z+4]
                set udg_List6[2] = -4*udg_List3[Z]+12*udg_List3[Z+1]-12*udg_List3[Z+2]+4*udg_List3[Z+3]
                set udg_List6[3] = 6*udg_List3[Z]-12*udg_List3[Z+1]+6*udg_List3[Z+2]
                set udg_List6[4] = -4*udg_List3[Z]+4*udg_List3[Z+1]
                set udg_List6[5] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphB&quot;)
            endif
        endif
        if degree == 5 then //degree 5 data collect
            if which == 1 then //normal graph
                //degree 5 data : too long....
                set udg_List4[1] = (-625./24.)*(udg_List1[Z]-5*udg_List1[Z+1]+10*udg_List1[Z+2]-10*udg_List1[Z+3]+5*udg_List1[Z+4]-udg_List1[Z+5])
                set udg_List4[2] = (625./24.)*(3*udg_List1[Z]-14*udg_List1[Z+1]+26*udg_List1[Z+2]-24*udg_List1[Z+3]+11*udg_List1[Z+4]-2*udg_List1[Z+5])
                set udg_List4[3] = (-125./24.)*(17*udg_List1[Z]-71*udg_List1[Z+1]+118*udg_List1[Z+2]-98*udg_List1[Z+3]+41*udg_List1[Z+4]-7*udg_List1[Z+5])
                set udg_List4[4] = (25./24.)*(45*udg_List1[Z]-154*udg_List1[Z+1]+214*udg_List1[Z+2]-156*udg_List1[Z+3]+61*udg_List1[Z+4]-10*udg_List1[Z+5])
                set udg_List4[5] = (-1./12.)*(137*udg_List1[Z]-300*udg_List1[Z+1]+300*udg_List1[Z+2]-200*udg_List1[Z+3]+75*udg_List1[Z+4]-12*udg_List1[Z+5])
                set udg_List4[6] = udg_List1[Z]
                set udg_List5[1] = (-625./24.)*(udg_List2[Z]-5*udg_List2[Z+1]+10*udg_List2[Z+2]-10*udg_List2[Z+3]+5*udg_List2[Z+4]-udg_List2[Z+5])
                set udg_List5[2] = (625./24.)*(3*udg_List2[Z]-14*udg_List2[Z+1]+26*udg_List2[Z+2]-24*udg_List2[Z+3]+11*udg_List2[Z+4]-2*udg_List2[Z+5])
                set udg_List5[3] = (-125./24.)*(17*udg_List2[Z]-71*udg_List2[Z+1]+118*udg_List2[Z+2]-98*udg_List2[Z+3]+41*udg_List2[Z+4]-7*udg_List2[Z+5])
                set udg_List5[4] = (25./24.)*(45*udg_List2[Z]-154*udg_List2[Z+1]+214*udg_List2[Z+2]-156*udg_List2[Z+3]+61*udg_List2[Z+4]-10*udg_List2[Z+5])
                set udg_List5[5] = (-1./12.)*(137*udg_List2[Z]-300*udg_List2[Z+1]+300*udg_List2[Z+2]-200*udg_List2[Z+3]+75*udg_List2[Z+4]-12*udg_List2[Z+5])
                set udg_List5[6] = udg_List2[Z]
                set udg_List6[1] = (-625./24.)*(udg_List3[Z]-5*udg_List3[Z+1]+10*udg_List3[Z+2]-10*udg_List3[Z+3]+5*udg_List3[Z+4]-udg_List3[Z+5])
                set udg_List6[2] = (625./24.)*(3*udg_List3[Z]-14*udg_List3[Z+1]+26*udg_List3[Z+2]-24*udg_List3[Z+3]+11*udg_List3[Z+4]-2*udg_List3[Z+5])
                set udg_List6[3] = (-125./24.)*(17*udg_List3[Z]-71*udg_List3[Z+1]+118*udg_List3[Z+2]-98*udg_List3[Z+3]+41*udg_List3[Z+4]-7*udg_List3[Z+5])
                set udg_List6[4] = (25./24.)*(45*udg_List3[Z]-154*udg_List3[Z+1]+214*udg_List3[Z+2]-156*udg_List3[Z+3]+61*udg_List3[Z+4]-10*udg_List3[Z+5])
                set udg_List6[5] = (-1./12.)*(137*udg_List3[Z]-300*udg_List3[Z+1]+300*udg_List3[Z+2]-200*udg_List3[Z+3]+75*udg_List3[Z+4]-12*udg_List3[Z+5])
                set udg_List6[6] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphN&quot;)
            else //bezier graph
                //degree 5 data : too long.....
                set udg_List4[1] = -udg_List1[Z]+5*udg_List1[Z+1]-10*udg_List1[Z+2]+10*udg_List1[Z+3]-5*udg_List1[Z+4]+udg_List1[Z+5]
                set udg_List4[2] = 5*udg_List1[Z]-20*udg_List1[Z+1]+30*udg_List1[Z+2]-20*udg_List1[Z+3]+5*udg_List1[Z+4]
                set udg_List4[3] = -10*udg_List1[Z]+30*udg_List1[Z+1]-30*udg_List1[Z+2]+10*udg_List1[Z+3]
                set udg_List4[4] = 10*udg_List1[Z]-20*udg_List1[Z+1]+10*udg_List1[Z+2]
                set udg_List4[5] = -5*udg_List1[Z]+5*udg_List1[Z+1]
                set udg_List4[6] = udg_List1[Z]
                set udg_List5[1] = -udg_List2[Z]+5*udg_List2[Z+1]-10*udg_List2[Z+2]+10*udg_List2[Z+3]-5*udg_List2[Z+4]+udg_List2[Z+5]
                set udg_List5[2] = 5*udg_List2[Z]-20*udg_List2[Z+1]+30*udg_List2[Z+2]-20*udg_List2[Z+3]+5*udg_List2[Z+4]
                set udg_List5[3] = -10*udg_List2[Z]+30*udg_List2[Z+1]-30*udg_List2[Z+2]+10*udg_List2[Z+3]
                set udg_List5[4] = 10*udg_List2[Z]-20*udg_List2[Z+1]+10*udg_List2[Z+2]
                set udg_List5[5] = -5*udg_List2[Z]+5*udg_List2[Z+1]
                set udg_List5[6] = udg_List2[Z]
                set udg_List6[1] = -udg_List3[Z]+5*udg_List3[Z+1]-10*udg_List3[Z+2]+10*udg_List3[Z+3]-5*udg_List3[Z+4]+udg_List3[Z+5]
                set udg_List6[2] = 5*udg_List3[Z]-20*udg_List3[Z+1]+30*udg_List3[Z+2]-20*udg_List3[Z+3]+5*udg_List3[Z+4]
                set udg_List6[3] = -10*udg_List3[Z]+30*udg_List3[Z+1]-30*udg_List3[Z+2]+10*udg_List3[Z+3]
                set udg_List6[4] = 10*udg_List3[Z]-20*udg_List3[Z+1]+10*udg_List3[Z+2]
                set udg_List6[5] = -5*udg_List3[Z]+5*udg_List3[Z+1]
                set udg_List6[6] = udg_List3[Z]
                call ExecuteFunc(&quot;GraphB&quot;)
            endif
        endif
        if degree == 6 then //degree 6 data collect
            //normal graph, didn&#039;t add data for Bezier, I think degree 5 Bezier is enough but degree 5 Normal is not
            //degree 6 data : too long........
            set udg_List4[1] = (324./5.)*(udg_List1[Z]-6*udg_List1[Z+1]+15*udg_List1[Z+2]-20*udg_List1[Z+3]+15*udg_List1[Z+4]-6*udg_List1[Z+5]+udg_List1[Z+6])
            set udg_List4[2] = (-162./5.)*(7*udg_List1[Z]-40*udg_List1[Z+1]+95*udg_List1[Z+2]-120*udg_List1[Z+3]+85*udg_List1[Z+4]-32*udg_List1[Z+5]+5*udg_List1[Z+6])
            set udg_List4[3] = 9.*(35*udg_List1[Z]-186*udg_List1[Z+1]+411*udg_List1[Z+2]-484*udg_List1[Z+3]+321*udg_List1[Z+4]-114*udg_List1[Z+5]+17*udg_List1[Z+6])
            set udg_List4[4] = (-9./2.)*(49*udg_List1[Z]-232*udg_List1[Z+1]+461*udg_List1[Z+2]-496*udg_List1[Z+3]+307*udg_List1[Z+4]-104*udg_List1[Z+5]+15*udg_List1[Z+6])
            set udg_List4[5] = (1./10.)*(812*udg_List1[Z]-3132*udg_List1[Z+1]+5265*udg_List1[Z+2]-5080*udg_List1[Z+3]+2970*udg_List1[Z+4]-972*udg_List1[Z+5]+137*udg_List1[Z+6])
            set udg_List4[6] = (-1./10.)*(147*udg_List1[Z]-360*udg_List1[Z+1]+450*udg_List1[Z+2]-400*udg_List1[Z+3]+225*udg_List1[Z+4]-72*udg_List1[Z+5]+10*udg_List1[Z+6])
            set udg_List4[7] = udg_List1[Z]
            set udg_List5[1] = (324./5.)*(udg_List2[Z]-6*udg_List2[Z+1]+15*udg_List2[Z+2]-20*udg_List2[Z+3]+15*udg_List2[Z+4]-6*udg_List2[Z+5]+udg_List2[Z+6])
            set udg_List5[2] = (-162./5.)*(7*udg_List2[Z]-40*udg_List2[Z+1]+95*udg_List2[Z+2]-120*udg_List2[Z+3]+85*udg_List2[Z+4]-32*udg_List2[Z+5]+5*udg_List2[Z+6])
            set udg_List5[3] = 9.*(35*udg_List2[Z]-186*udg_List2[Z+1]+411*udg_List2[Z+2]-484*udg_List2[Z+3]+321*udg_List2[Z+4]-114*udg_List2[Z+5]+17*udg_List2[Z+6])
            set udg_List5[4] = (-9./2.)*(49*udg_List2[Z]-232*udg_List2[Z+1]+461*udg_List2[Z+2]-496*udg_List2[Z+3]+307*udg_List2[Z+4]-104*udg_List2[Z+5]+15*udg_List2[Z+6])
            set udg_List5[5] = (1./10.)*(812*udg_List2[Z]-3132*udg_List2[Z+1]+5265*udg_List2[Z+2]-5080*udg_List2[Z+3]+2970*udg_List2[Z+4]-972*udg_List2[Z+5]+137*udg_List2[Z+6])
            set udg_List5[6] = (-1./10.)*(147*udg_List2[Z]-360*udg_List2[Z+1]+450*udg_List2[Z+2]-400*udg_List2[Z+3]+225*udg_List2[Z+4]-72*udg_List2[Z+5]+10*udg_List2[Z+6])
            set udg_List5[7] = udg_List2[Z]
            set udg_List6[1] = (324./5.)*(udg_List3[Z]-6*udg_List3[Z+1]+15*udg_List3[Z+2]-20*udg_List3[Z+3]+15*udg_List3[Z+4]-6*udg_List3[Z+5]+udg_List3[Z+6])
            set udg_List6[2] = (-162./5.)*(7*udg_List3[Z]-40*udg_List3[Z+1]+95*udg_List3[Z+2]-120*udg_List3[Z+3]+85*udg_List3[Z+4]-32*udg_List3[Z+5]+5*udg_List3[Z+6])
            set udg_List6[3] = 9.*(35*udg_List3[Z]-186*udg_List3[Z+1]+411*udg_List3[Z+2]-484*udg_List3[Z+3]+321*udg_List3[Z+4]-114*udg_List3[Z+5]+17*udg_List3[Z+6])
            set udg_List6[4] = (-9./2.)*(49*udg_List3[Z]-232*udg_List3[Z+1]+461*udg_List3[Z+2]-496*udg_List3[Z+3]+307*udg_List3[Z+4]-104*udg_List3[Z+5]+15*udg_List3[Z+6])
            set udg_List6[5] = (1./10.)*(812*udg_List3[Z]-3132*udg_List3[Z+1]+5265*udg_List3[Z+2]-5080*udg_List3[Z+3]+2970*udg_List3[Z+4]-972*udg_List3[Z+5]+137*udg_List3[Z+6])
            set udg_List6[6] = (-1./10.)*(147*udg_List3[Z]-360*udg_List3[Z+1]+450*udg_List3[Z+2]-400*udg_List3[Z+3]+225*udg_List3[Z+4]-72*udg_List3[Z+5]+10*udg_List3[Z+6])
            set udg_List6[7] = udg_List3[Z]
            call ExecuteFunc(&quot;GraphN&quot;)
        endif
        if degree == 7 then //degree 7 data collect
            //normal graph, degree 6 was not enough for my uses, but I stop at degree 7 through
            //degree 7 data : too long!!!!
            set udg_List4[1] = (-117649./720.)*(udg_List1[Z]-7*udg_List1[Z+1]+21*udg_List1[Z+2]-35*udg_List1[Z+3]+35*udg_List1[Z+4]-21*udg_List1[Z+5]+7*udg_List1[Z+6]-udg_List1[Z+7])
            set udg_List4[2] = (117649./720.)*(4*udg_List1[Z]-27*udg_List1[Z+1]+78*udg_List1[Z+2]-125*udg_List1[Z+3]+120*udg_List1[Z+4]-69*udg_List1[Z+5]+22*udg_List1[Z+6]-3*udg_List1[Z+7])
            set udg_List4[3] = (-16807./720.)*(46*udg_List1[Z]-295*udg_List1[Z+1]+810*udg_List1[Z+2]-1235*udg_List1[Z+3]+1130*udg_List1[Z+4]-621*udg_List1[Z+5]+190*udg_List1[Z+6]-25*udg_List1[Z+7])
            set udg_List4[4] = (2401./144.)*(56*udg_List1[Z]-333*udg_List1[Z+1]+852*udg_List1[Z+2]-1219*udg_List1[Z+3]+1056*udg_List1[Z+4]-555*udg_List1[Z+5]+164*udg_List1[Z+6]-21*udg_List1[Z+7])
            set udg_List4[5] = (-343./720.)*(967*udg_List1[Z]-5104*udg_List1[Z+1]+11787*udg_List1[Z+2]-15560*udg_List1[Z+3]+12725*udg_List1[Z+4]-6432*udg_List1[Z+5]+1849*udg_List1[Z+6]-232*udg_List1[Z+7])
            set udg_List4[6] = (49./360.)*(938*udg_List1[Z]-4014*udg_List1[Z+1]+7911*udg_List1[Z+2]-9490*udg_List1[Z+3]+7380*udg_List1[Z+4]-3618*udg_List1[Z+5]+1019*udg_List1[Z+6]-126*udg_List1[Z+7])
            set udg_List4[7] = (-1./60.)*(1089*udg_List1[Z]-2940*udg_List1[Z+1]+4410*udg_List1[Z+2]-4900*udg_List1[Z+3]+3675*udg_List1[Z+4]-1764*udg_List1[Z+5]+490*udg_List1[Z+6]-60*udg_List1[Z+7])
            set udg_List4[8] = udg_List1[Z]
            set udg_List5[1] = (-117649./720.)*(udg_List2[Z]-7*udg_List2[Z+1]+21*udg_List2[Z+2]-35*udg_List2[Z+3]+35*udg_List2[Z+4]-21*udg_List2[Z+5]+7*udg_List2[Z+6]-udg_List2[Z+7])
            set udg_List5[2] = (117649./720.)*(4*udg_List2[Z]-27*udg_List2[Z+1]+78*udg_List2[Z+2]-125*udg_List2[Z+3]+120*udg_List2[Z+4]-69*udg_List2[Z+5]+22*udg_List2[Z+6]-3*udg_List2[Z+7])
            set udg_List5[3] = (-16807./720.)*(46*udg_List2[Z]-295*udg_List2[Z+1]+810*udg_List2[Z+2]-1235*udg_List2[Z+3]+1130*udg_List2[Z+4]-621*udg_List2[Z+5]+190*udg_List2[Z+6]-25*udg_List2[Z+7])
            set udg_List5[4] = (2401./144.)*(56*udg_List2[Z]-333*udg_List2[Z+1]+852*udg_List2[Z+2]-1219*udg_List2[Z+3]+1056*udg_List2[Z+4]-555*udg_List2[Z+5]+164*udg_List2[Z+6]-21*udg_List2[Z+7])
            set udg_List5[5] = (-343./720.)*(967*udg_List2[Z]-5104*udg_List2[Z+1]+11787*udg_List2[Z+2]-15560*udg_List2[Z+3]+12725*udg_List2[Z+4]-6432*udg_List2[Z+5]+1849*udg_List2[Z+6]-232*udg_List2[Z+7])
            set udg_List5[6] = (49./360.)*(938*udg_List2[Z]-4014*udg_List2[Z+1]+7911*udg_List2[Z+2]-9490*udg_List2[Z+3]+7380*udg_List2[Z+4]-3618*udg_List2[Z+5]+1019*udg_List2[Z+6]-126*udg_List2[Z+7])
            set udg_List5[7] = (-1./60.)*(1089*udg_List2[Z]-2940*udg_List2[Z+1]+4410*udg_List2[Z+2]-4900*udg_List2[Z+3]+3675*udg_List2[Z+4]-1764*udg_List2[Z+5]+490*udg_List2[Z+6]-60*udg_List2[Z+7])
            set udg_List5[8] = udg_List2[Z]
            set udg_List6[1] = (-117649./720.)*(udg_List3[Z]-7*udg_List3[Z+1]+21*udg_List3[Z+2]-35*udg_List3[Z+3]+35*udg_List3[Z+4]-21*udg_List3[Z+5]+7*udg_List3[Z+6]-udg_List3[Z+7])
            set udg_List6[2] = (117649./720.)*(4*udg_List3[Z]-27*udg_List3[Z+1]+78*udg_List3[Z+2]-125*udg_List3[Z+3]+120*udg_List3[Z+4]-69*udg_List3[Z+5]+22*udg_List3[Z+6]-3*udg_List3[Z+7])
            set udg_List6[3] = (-16807./720.)*(46*udg_List3[Z]-295*udg_List3[Z+1]+810*udg_List3[Z+2]-1235*udg_List3[Z+3]+1130*udg_List3[Z+4]-621*udg_List3[Z+5]+190*udg_List3[Z+6]-25*udg_List3[Z+7])
            set udg_List6[4] = (2401./144.)*(56*udg_List3[Z]-333*udg_List3[Z+1]+852*udg_List3[Z+2]-1219*udg_List3[Z+3]+1056*udg_List3[Z+4]-555*udg_List3[Z+5]+164*udg_List3[Z+6]-21*udg_List3[Z+7])
            set udg_List6[5] = (-343./720.)*(967*udg_List3[Z]-5104*udg_List3[Z+1]+11787*udg_List3[Z+2]-15560*udg_List3[Z+3]+12725*udg_List3[Z+4]-6432*udg_List3[Z+5]+1849*udg_List3[Z+6]-232*udg_List3[Z+7])
            set udg_List6[6] = (49./360.)*(938*udg_List3[Z]-4014*udg_List3[Z+1]+7911*udg_List3[Z+2]-9490*udg_List3[Z+3]+7380*udg_List3[Z+4]-3618*udg_List3[Z+5]+1019*udg_List3[Z+6]-126*udg_List3[Z+7])
            set udg_List6[7] = (-1./60.)*(1089*udg_List3[Z]-2940*udg_List3[Z+1]+4410*udg_List3[Z+2]-4900*udg_List3[Z+3]+3675*udg_List3[Z+4]-1764*udg_List3[Z+5]+490*udg_List3[Z+6]-60*udg_List3[Z+7])
            set udg_List6[8] = udg_List3[Z]
            call ExecuteFunc(&quot;GraphN&quot;)
        endif
        exitwhen Z == udg_DimList - degree
        if delay == 0 then
            call PolledWait(-1)
        else
            call TriggerSleepAction(delay)
        endif
    endloop
endfunction

function SignumPos takes integer i returns real
    if i &lt;= 0 then
        return 0.0
    endif
    return I2R(i)
endfunction

function GetTime takes integer degree, real duration, real delay, integer DimList, real notadditive returns real
    //notadditive = 0.0 -&gt; additive = true
    //notadditive = 1.0 -&gt; additive = false
    return SignumPos(DimList-degree-1)*delay + duration*notadditive
endfunction


function Resize takes real r, real x, real y, real z returns nothing
    local integer i = 0
    loop
        set i = i + 1
        set udg_List1<i> = udg_List1<i> * r + x
        set udg_List2<i> = udg_List2<i> * r + y
        set udg_List3<i> = udg_List3<i> * r + z
        exitwhen i == udg_DimList
    endloop
endfunction

function Letter_r takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 11./24. + delx
    set udg_List2[1] = 3./2. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 5./24. + delx
    set udg_List2[2] = 0.0 + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 1./3. + delx
    set udg_List2[3] = 4./5. + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 1./2. + delx
    set udg_List2[4] = 1. + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 1. + delx
    set udg_List2[5] = 6./5. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 3./2. + delx
    set udg_List2[6] = 7./5. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 9./5. + delx
    set udg_List2[7] = 3./2. + dely
    set udg_List3[7] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 7
endfunction

function Letter_u takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 1./4. + delx
    set udg_List2[1] = 3./2. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 1./5. + delx
    set udg_List2[2] = 3./4. + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 3./5. + delx
    set udg_List2[3] = 0.0 + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 1. + delx
    set udg_List2[4] = 1./6. + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 5./3. + delx
    set udg_List2[5] = 3./4. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 7./4. + delx
    set udg_List2[6] = 3./2. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 5./3. + delx
    set udg_List2[7] = 3./4. + dely
    set udg_List3[7] = 0.0 + delz
    set udg_List1[8] = 7./4. + delx
    set udg_List2[8] = 1./3. + dely
    set udg_List3[8] = 0.0 + delz
    set udg_List1[9] = 9./5. + delx
    set udg_List2[9] = 0.0 + dely
    set udg_List3[9] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 9
endfunction

function Letter_a takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 5./3. + delx
    set udg_List2[1] = 3./2. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 1./2. + delx
    set udg_List2[2] = 5./4. + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 1./4. + delx
    set udg_List2[3] = 1./4. + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 1. + delx
    set udg_List2[4] = 0.0 + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 3./2. + delx
    set udg_List2[5] = 1./2. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 5./3. + delx
    set udg_List2[6] = 3./2. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 3./2. + delx
    set udg_List2[7] = 1./2. + dely
    set udg_List3[7] = 0.0 + delz
    set udg_List1[8] = 5./3. + delx
    set udg_List2[8] = 1./6. + dely
    set udg_List3[8] = 0.0 + delz
    set udg_List1[9] = 7./4. + delx
    set udg_List2[9] = 0.0 + dely
    set udg_List3[9] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 9
endfunction

function Letter_L takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 1. + delx
    set udg_List2[1] = 3. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 1./3. + delx
    set udg_List2[2] = 7./3. + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 3./2. + delx
    set udg_List2[3] = 2. + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 7./3. + delx
    set udg_List2[4] = 5./2. + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 11./5. + delx
    set udg_List2[5] = 13./5. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 7./4. + delx
    set udg_List2[6] = 5./2. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 3./2. + delx
    set udg_List2[7] = 2. + dely
    set udg_List3[7] = 0.0 + delz
    set udg_List1[8] = 3./2. + delx
    set udg_List2[8] = 5./4. + dely
    set udg_List3[8] = 0.0 + delz
    set udg_List1[9] = 6./5. + delx
    set udg_List2[9] = 2./5. + dely
    set udg_List3[9] = 0.0 + delz
    set udg_List1[10] = 1./3. + delx
    set udg_List2[10] = 0.0 + dely
    set udg_List3[10] = 0.0 + delz
    set udg_List1[11] = 2./3. + delx
    set udg_List2[11] = 3./4. + dely
    set udg_List3[11] = 0.0 + delz
    set udg_List1[12] = 6./5. + delx
    set udg_List2[12] = 2./4. + dely
    set udg_List3[12] = 0.0 + delz
    set udg_List1[13] = 9./5. + delx
    set udg_List2[13] = 1./5. + dely
    set udg_List3[13] = 0.0 + delz
    set udg_List1[14] = 11./4. + delx
    set udg_List2[14] = 0.0 + dely
    set udg_List3[14] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 14
endfunction

function Trig_System_Test_NEW_Actions takes nothing returns nothing
    call Letter_L(0, 0, 0)
    call Resize(1000., 0, 0, 0)
    //Chain Lightning - Primary - &quot;big blue&quot; - &quot;CLPB&quot;
    //Lightning Attack - &quot;medium blue&quot; - &quot;CHIM&quot;
    //Chain Lightning - Secondary, &quot;small blue 1&quot; - &quot;CLSB&quot;
    //Mana Drain - &quot;small blue 2&quot; - &quot;DRAM&quot;
    //Mana Burn - &quot;big green&quot; - &quot;MBUR&quot;
    //Mana Flare - &quot;medium green&quot; - &quot;MFPB&quot;
    //Drain - &quot;small green 1&quot; - &quot;DRAB&quot;
    //Life Drain - &quot;small green 2&quot; - &quot;DRAL&quot;
    //Healing Wave - Primary - &quot;yellow&quot; - &quot;HWPB&quot;
    //Healing Wave - Secondary - &quot;small yellow&quot; - &quot;HWSB&quot;
    //Finger of Death - &quot;red&quot; - &quot;AFOD&quot;
    //Magic Leash - &quot;small red&quot; - &quot;LEAS&quot;
    //Forked Lightning - &quot;purple&quot; - &quot;FORK&quot;
    //Spirit Link - &quot;orange&quot; - &quot;SPLK&quot;
    call TriggerSleepAction(2.0)
    //drawing a full &quot;Laura&quot; in small blue 1, degree 2, delay 0.2s, duration 36.0s
    call Letter_L(0.0, 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 12.0, 1, 0.1, &quot;small blue 1&quot;, 0, false) //not obliged to be true for the first one
    call TriggerSleepAction(GetTime(2, 12.0, 0.2, udg_DimList, 0.0))
    call Letter_a(3., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(2, 12.0, 0.1, 14, 0.0), 1, 0.1, &quot;small blue 1&quot;, 0, true) //must be true now
    call TriggerSleepAction(GetTime(2, 12.0, 0.1, udg_DimList, 0.0))
    call Letter_u(5., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(2, 12.0, 0.1, 14+9, 0.0), 1, 0.1, &quot;small blue 1&quot;, 0, true)
    call TriggerSleepAction(GetTime(2, 12.0, 0.1, udg_DimList, 0.0))
    call Letter_r(7., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(2, 12.0, 0.1, 14+9+9, 0.0), 1, 0.1, &quot;small blue 1&quot;, 0, true)
    call TriggerSleepAction(GetTime(2, 12.0, 0.1, udg_DimList, 0.0))
    call Letter_a(9., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(2, 12.0, 0.1, 14+9+9+7, 0.0), 1, 0.1, &quot;small blue 1&quot;, 0, true)
    call TriggerSleepAction(GetTime(2, 12.0, 0.1, udg_DimList, 0.0))
    call TriggerSleepAction(5.0)
    //writing 4 same letters together
    call Letter_L(0.0, 0.0, 0.0)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 30.0, 1, 0.2, &quot;small blue 1&quot;, 0, false)
    call TriggerSleepAction(GetTime(2, 30.0, 0.2, udg_DimList, 0.0))
    call Letter_L(0.0, 0.0, 0.5)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 30.0, 1, 0.2, &quot;small blue 1&quot;, 0, true)
    call TriggerSleepAction(GetTime(2, 30.0, 0.2, udg_DimList, 0.0))
    call Letter_L(0.0, 0.0, 1.0)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 30.0, 1, 0.2, &quot;small blue 1&quot;, 0, true)
    call TriggerSleepAction(GetTime(2, 30.0, 0.2, udg_DimList, 0.0))
    call Letter_L(0.0, 0.0, 1.5)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 30.0, 1, 0.2, &quot;small blue 1&quot;, 0, true)
    call TriggerSleepAction(GetTime(2, 30.0, 0.2, udg_DimList, 0.0))
endfunction</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>


I attached the map if you need it. (for warcraft 3 the frozen throne)
 

Attachments

  • Graphing2.w3x
    36.9 KB · Views: 229

UndeadDragon

Super Moderator
Reaction score
447
That's pretty cool. Nice job putting it into JASS format :thup:
 

Chocobo

White-Flower
Reaction score
409
well it's quite hard to reproduce that in warcraft 3, I can't even get it to do a multi instanceable graph using parametric equations.

the bigger problem is that i'm having too much parameters in input
and it starts to annoy me with all those new bugs that appears when I try to add more things to what i want
I attached a map where lightnings screw up without crashing the game (some lightnings do not disappear when I want them to)

<<posting a screenshot for warcraft 3 version

(this is from ListGraphing2)

laural.jpg
 

Attachments

  • Graphing4.w3x
    37.9 KB · Views: 207

DM Cross

You want to see a magic trick?
Reaction score
566
The scientific calculator part wasn't new to me. We did that in high school.
 

Chocobo

White-Flower
Reaction score
409
The scientific calculator part wasn't new to me. We did that in high school.

well, when I started to see this :

Code:
2(List 1[Z]-2List 1[Z+1]+List 1[Z+2])→A
-3List 1[Z]+4List 1[Z+1]-List 1[Z+2]→B
List 1[Z]→C
2(List 2[Z]-2List 2[Z+1]+List 2[Z+2])→D
-3List 2[Z]+4List 2[Z+1]-List 2[Z+2]→E
List 2[Z]→F

it was weird looking for me at start, as those "magic numbers" can't be found (yet for me).

after searching in the code I found out it's a degree 2 parametric curve (not a function, you can have twice the same x for multiple y values) ; involving the system {x=at²+bt+c,y=dt²+et+f}

and so on until {x=at^7+bt^6+ct^5+dt^4+et^3+ft²+g;y=at^7+bt^6+ct^5+dt^4+et^3+ft²+g}

I wouldn't think that someone would do this at degree 7 (LONG to write) :

Code:
{x = (-117649/720)(List 1[Z]-7List 1[Z+1]+21List 1[Z+2]-35List 1[Z+3]+35List 1[Z+4]-21List 1[Z+5]+7List 1[Z+6]-List 1[Z+7])*t^7 + 
(117649/720)(4List 1[Z]-27List 1[Z+1]+78List 1[Z+2]-125List 1[Z+3]+120List 1[Z+4]-69List 1[Z+5]+22List 1[Z+6]-3List 1[Z+7])*t^6 + 
(-16807/720)(46List 1[Z]-295List 1[Z+1]+810List 1[Z+2]-1235List 1[Z+3]+1130List 1[Z+4]-621List 1[Z+5]+190List 1[Z+6]-25List 1[Z+7])*t^5 + 
(2401/144)(56List 1[Z]-333List 1[Z+1]+852List 1[Z+2]-1219List 1[Z+3]+1056List 1[Z+4]-555List 1[Z+5]+164List 1[Z+6]-21List 1[Z+7])*t^4 + 
(-343/720)(967List 1[Z]-5104List 1[Z+1]+11787List 1[Z+2]-15560List 1[Z+3]+12725List 1[Z+4]-6432List 1[Z+5]+1849List 1[Z+6]-232List 1[Z+7])*t^3 + 
(49/360)(938List 1[Z]-4014List 1[Z+1]+7911List 1[Z+2]-9490List 1[Z+3]+7380List 1[Z+4]-3618List 1[Z+5]+1019List 1[Z+6]-126List 1[Z+7])*t² + 
(-1/60)(1089List 1[Z]-2940List 1[Z+1]+4410List 1[Z+2]-4900List 1[Z+3]+3675List 1[Z+4]-1764List 1[Z+5]+490List 1[Z+6]-60List 1[Z+7])*t + 
List 1[Z], y = 
(-117649/720)(List 2[Z]-7List 2[Z+1]+21List 2[Z+2]-35List 2[Z+3]+35List 2[Z+4]-21List 2[Z+5]+7List 2[Z+6]-List 2[Z+7])*t^7 + 
(117649/720)(4List 2[Z]-27List 2[Z+1]+78List 2[Z+2]-125List 2[Z+3]+120List 2[Z+4]-69List 2[Z+5]+22List 2[Z+6]-3List 2[Z+7])*t^6 + 
(-16807/720)(46List 2[Z]-295List 2[Z+1]+810List 2[Z+2]-1235List 2[Z+3]+1130List 2[Z+4]-621List 2[Z+5]+190List 2[Z+6]-25List 2[Z+7])*t^5 + 
(2401/144)(56List 2[Z]-333List 2[Z+1]+852List 2[Z+2]-1219List 2[Z+3]+1056List 2[Z+4]-555List 2[Z+5]+164List 2[Z+6]-21List 2[Z+7])*t^4 + 
(-343/720)(967List 2[Z]-5104List 2[Z+1]+11787List 2[Z+2]-15560List 2[Z+3]+12725List 2[Z+4]-6432List 2[Z+5]+1849List 2[Z+6]-232List 2[Z+7])*t^3 + 
(49/360)(938List 2[Z]-4014List 2[Z+1]+7911List 2[Z+2]-9490List 2[Z+3]+7380List 2[Z+4]-3618List 2[Z+5]+1019List 2[Z+6]-126List 2[Z+7])*t² + 
(-1/60)(1089List 2[Z]-2940List 2[Z+1]+4410List 2[Z+2]-4900List 2[Z+3]+3675List 2[Z+4]-1764List 2[Z+5]+490List 2[Z+6]-60List 2[Z+7])*t + 
List 2[Z]}

I still wonder where those "magic" numbers come from.


someone got more links for things like that?


edit

I fixed ListGraphing4, now you have the ability to do stack graphs as a certain limit (requires to be long enough through and to not to go over 8191 lightnings). Seems working very well. Map at bottom of the post for instant use.

please input the "CollectData" function from the post #1 as I can post more than 50000 characters in one post

JASS:
globals
    real array udg_List1
    real array udg_List2
    real array udg_List3
    real array udg_List4
    real array udg_List5
    real array udg_List6
    integer udg_DimList
    integer udg_degree
    real udg_duration
    boolean udg_delayed
    real udg_delay
    lightning array udg_Lightnings
    integer udg_Lightning
    real array udg_RD
    string udg_LightSFX
    integer udg_which
    real udg_Precision
    integer udg_Z
    timer udg_GraphTimer
    real udg_GetTime
endglobals

function CreateLightning takes nothing returns lightning
    return AddLightningEx(udg_LightSFX, true, udg_RD[1], udg_RD[2], udg_RD[3], udg_RD[4], udg_RD[5], udg_RD[6])
endfunction

//TO READ : please copy CollectData function from the post #1

function Graph takes nothing returns nothing
    local real Tpitch = 1./udg_Precision
    local real T = -Tpitch
    local real Tmax = 0
    local integer i = udg_Lightning
    local integer Ex = udg_Lightning
    loop
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if Tmax &gt; 1 then
            set Tmax = 1
        endif
        if T &gt; 1 then
            set T = 1
        endif
        exitwhen T &gt;= 1
        //call BJDebugMsg(R2S(T)+&quot;to&quot;+R2S(Tmax))
        call CollectData(T, Tmax, i)
    endloop
    set udg_Lightning = i
    //call BJDebugMsg(&quot;current lightning instance : &quot; + I2S(i))
    if udg_delayed then
        call TriggerSleepAction(udg_duration)
    else
        call TriggerSleepAction(udg_duration - udg_delay*I2R(udg_Z))
    endif
    //call BJDebugMsg(&quot;destroying &quot; + I2S(i) + &quot; lightnings (from instance &quot; + I2S(udg_Lightning) + &quot; to &quot; + I2S(Ex) +&quot; )&quot;)
    loop
        exitwhen Ex == i
        call DestroyLightning(udg_Lightnings<i>)
        set udg_Lightnings<i> = null
        set i = i - 1
    endloop
endfunction

function LightningList takes string s returns string
    //blue category
    //Chain Lightning - Primary - &quot;big blue&quot; - &quot;CLPB&quot; - not much laggy
    //Lightning Attack - &quot;medium blue&quot; - &quot;CHIM&quot; - not much laggy
    //Chain Lightning - Secondary, &quot;small blue 1&quot; - &quot;CLSB&quot; - not much laggy
    //Mana Drain - &quot;small blue 2&quot; - &quot;DRAM&quot; - not much laggy
    //
    //green category
    //Mana Burn - &quot;big green&quot; - &quot;MBUR&quot; - laggy
    //Mana Flare - &quot;medium green&quot; - &quot;MFPB&quot; - not much laggy
    //Drain - &quot;small green 1&quot; - &quot;DRAB&quot; - laggy
    //Life Drain - &quot;small green 2&quot; - &quot;DRAL&quot; - laggy
    //
    //yellow category
    //Healing Wave - Primary - &quot;yellow&quot; - &quot;HWPB&quot; - laggy
    //Healing Wave - Secondary - &quot;small yellow&quot; - &quot;HWSB&quot; - not much laggy
    //
    //red category
    //Finger of Death - &quot;red&quot; - &quot;AFOD&quot; - laggy
    //Magic Leash - &quot;small red&quot; - &quot;LEAS&quot; - not much laggy
    //
    //others
    //Forked Lightning - &quot;purple&quot; - &quot;FORK&quot; - not much laggy
    //Spirit Link - &quot;orange&quot; - &quot;SPLK&quot; - not much laggy
    //
    //check if entry is already correct
    if s==&quot;CLPB&quot; or s==&quot;CHIM&quot; or s==&quot;CLSB&quot; or s==&quot;DRAM&quot; or s==&quot;MBUR&quot; or s==&quot;MFPB&quot; or s==&quot;DRAB&quot; or s==&quot;DRAL&quot; or s==&quot;HWPB&quot; or s==&quot;HWSB&quot; or s==&quot;AFOD&quot; or s==&quot;LEAS&quot; or s==&quot;FORK&quot; or s==&quot;SPLK&quot; then
        return s
    endif
    //blue category
    if s==&quot;big blue&quot; then
        return &quot;CLPB&quot; //Chain Lightning - Primary
    endif
    if s==&quot;medium blue&quot; then
        return &quot;CHIM&quot; //Lightning Attack
    endif
    if s==&quot;small blue 1&quot; then
        return &quot;CLSB&quot; //Chain Lightning - Secondary
    endif
    if s==&quot;small blue 2&quot; then
        return &quot;DRAM&quot; //Mana Drain
    endif
    if s==&quot;big green&quot; then
        return &quot;MBUR&quot; //Mana Burn
    endif
    if s==&quot;medium green&quot; then
        return &quot;MFPB&quot; //Mana Flare
    endif
    if s==&quot;small green 1&quot; then
        return &quot;DRAB&quot; //Drain
    endif
    if s==&quot;small green 2&quot; then
        return &quot;DRAL&quot; //Life Drain
    endif
    if s==&quot;yellow&quot; then
        return &quot;HWPB&quot; //Healing Wave - Primary
    endif
    if s==&quot;small yellow&quot; then
        return &quot;HWSB&quot; //Healing Wave - Secondary
    endif
    if s==&quot;red&quot; then
        return &quot;AFOD&quot; //Finger of Death
    endif
    if s==&quot;small red&quot; then
        return &quot;LEAS&quot; //Magic Leash
    endif
    if s==&quot;purple&quot; then
        return &quot;FORK&quot; //Forked Lightning
    endif
    if s==&quot;orange&quot; then
        return &quot;SPLK&quot; //Spirit Link
    endif
    return &quot;DRAM&quot; //returns Mana Drain if it founds nothing
endfunction

//function CreateUnitZ takes real x, real y, real z, real duration returns nothing
    //local unit u = CreateUnit(Player(15), &#039;hfoo&#039;, x, y, 0.0)
    //call UnitApplyTimedLife(u, &#039;BTLF&#039;, duration)
    //call UnitAddAbility(u, &#039;Amrf&#039;)
    //call SetUnitFlyHeight(u, z, 0)
    //call UnitRemoveAbility(u, &#039;Amrf&#039;)
    //set u = null
//endfunction

function CalculateEx takes nothing returns nothing
    local integer Z = udg_Z //just to make things easier to be read
    if Z != udg_DimList - udg_degree then
        set Z = Z + 1
        set udg_Z = Z
        //call BJDebugMsg(I2S(Z))
        //dummy unit that can be removed if you don&#039;t need it
        //call CreateUnitZ(udg_List1[Z], udg_List2[Z], udg_List3[Z], duration)
        //debug data
        //call BJDebugMsg(&quot;x=&quot;+R2S(udg_List1[Z]))
        //call BJDebugMsg(&quot;y=&quot;+R2S(udg_List2[Z]))
        //call BJDebugMsg(&quot;z=&quot;+R2S(udg_List3[Z]))
        if udg_degree == 2 then //degree 2 data collect
            if udg_which == 1 then //normal graph
                //degree 2 data : 2(n1-2*n2+n3)*t^2 + (-3*n1+4*n2-n3)*t + n3
                set udg_List4[1] = 2*(udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2])
                set udg_List4[2] = -3*udg_List1[Z]+4*udg_List1[Z+1]-udg_List1[Z+2]
                set udg_List4[3] = udg_List1[Z]
                set udg_List5[1] = 2*(udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2])
                set udg_List5[2] = -3*udg_List2[Z]+4*udg_List2[Z+1]-udg_List2[Z+2]
                set udg_List5[3] = udg_List2[Z]
                set udg_List6[1] = 2*(udg_List3[Z]-2*udg_List3[Z+1]+udg_List3[Z+2])
                set udg_List6[2] = -3*udg_List3[Z]+4*udg_List3[Z+1]-udg_List3[Z+2]
                set udg_List6[3] = udg_List3[Z]
                //debug parametric func msg
                //call BJDebugMsg(&quot;Graph(t²*&quot;+R2S(udg_List4[1])+&quot;+t*&quot;+R2S(udg_List4[2])+&quot;+&quot;+R2S(udg_List4[3])+&quot;, t²*&quot;+R2S(udg_List5[1])+&quot;+t*&quot;+R2S(udg_List5[2])+&quot;+&quot;+R2S(udg_List5[3])+&quot;,&quot;+&quot;t²*&quot;+R2S(udg_List6[1])+&quot;+t*&quot;+R2S(udg_List6[2])+&quot;+&quot;+R2S(udg_List6[3])+&quot;)&quot;)
                call ExecuteFunc(&quot;Graph&quot;)
            else //bezier graph
                //degree 2 data : (n1-2*n2+n3)*t^2 + (-2*n1-2*n2)*t + n3
                set udg_List4[1] = udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2]
                set udg_List4[2] = -2*udg_List1[Z]+2*udg_List1[Z+1]
                set udg_List4[3] = udg_List1[Z]
                set udg_List5[1] = udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2]
                set udg_List5[2] = -2*udg_List2[Z]+2*udg_List2[Z+1]
                set udg_List5[3] = udg_List2[Z]
                set udg_List6[1] = udg_List3[Z]-2*udg_List3[Z+1]+udg_List3[Z+2]
                set udg_List6[2] = -2*udg_List3[Z]+2*udg_List3[Z+1]
                set udg_List6[3] = udg_List3[Z]
                //debug parametric func msg
                //call BJDebugMsg(&quot;Graph(t²*&quot;+R2S(udg_List4[1])+&quot;+t*&quot;+R2S(udg_List4[2])+&quot;+&quot;+R2S(udg_List4[3])+&quot;, t²*&quot;+R2S(udg_List5[1])+&quot;+t*&quot;+R2S(udg_List5[2])+&quot;+&quot;+R2S(udg_List5[3])+&quot;,&quot;+&quot;t²*&quot;+R2S(udg_List6[1])+&quot;+t*&quot;+R2S(udg_List6[2])+&quot;+&quot;+R2S(udg_List6[3])+&quot;)&quot;)
                call ExecuteFunc(&quot;Graph&quot;)
            endif
        endif
        if udg_degree == 3 then //degree 3 data collect
            if udg_which == 1 then //normal graph
                //degree 3 data : (-9/2)(n1-3*n2+3*n3-n4)*t^3 + (9/2)(2*n1-5*n2+4*n3-n4)*t^2 + (-1/2)(11*n1-18*n2+9*n3-2*n4)*t + n1
                set udg_List4[1] = (-9./2.)*(udg_List1[Z]-3*udg_List1[Z+1]+3*udg_List1[Z+2]-udg_List1[Z+3])
                set udg_List4[2] = (9./2.)*(2*udg_List1[Z]-5*udg_List1[Z+1]+4*udg_List1[Z+2]-udg_List1[Z+3])
                set udg_List4[3] = (-1./2.)*(11*udg_List1[Z]-18*udg_List1[Z+1]+9*udg_List1[Z+2]-2*udg_List1[Z+3])
                set udg_List4[4] = udg_List1[Z]
                set udg_List5[1] = (-9./2.)*(udg_List2[Z]-3*udg_List2[Z+1]+3*udg_List2[Z+2]-udg_List2[Z+3])
                set udg_List5[2] = (9./2.)*(2*udg_List2[Z]-5*udg_List2[Z+1]+4*udg_List2[Z+2]-udg_List2[Z+3])
                set udg_List5[3] = (-1./2.)*(11*udg_List2[Z]-18*udg_List2[Z+1]+9*udg_List2[Z+2]-2*udg_List2[Z+3])
                set udg_List5[4] = udg_List2[Z]
                set udg_List6[1] = (-9./2.)*(udg_List3[Z]-3*udg_List3[Z+1]+3*udg_List3[Z+2]-udg_List3[Z+3])
                set udg_List6[2] = (9./2.)*(2*udg_List3[Z]-5*udg_List3[Z+1]+4*udg_List3[Z+2]-udg_List3[Z+3])
                set udg_List6[3] = (-1./2.)*(11*udg_List3[Z]-18*udg_List3[Z+1]+9*udg_List3[Z+2]-2*udg_List3[Z+3])
                set udg_List6[4] = udg_List3[Z]
                call ExecuteFunc(&quot;Graph&quot;)
            else //bezier graph
                //degree 3 data : (-n1+3*n2-3*n3+n4)*t^3 + (3*n1-6*n2+3*n3)*t^2 + (-3*n1+3*n2)*t + n1
                set udg_List4[1] = -udg_List1[Z]+3*udg_List1[Z+1]-3*udg_List1[Z+2]+udg_List1[Z+3]
                set udg_List4[2] = 3*udg_List1[Z]-6*udg_List1[Z+1]+3*udg_List1[Z+2]
                set udg_List4[3] = -3*udg_List1[Z]+3*udg_List1[Z+1]
                set udg_List4[4] = udg_List1[Z]
                set udg_List5[1] = -udg_List2[Z]+3*udg_List2[Z+1]-3*udg_List2[Z+2]+udg_List2[Z+3]
                set udg_List5[2] = 3*udg_List2[Z]-6*udg_List2[Z+1]+3*udg_List2[Z+2]
                set udg_List5[3] = -3*udg_List2[Z]+3*udg_List2[Z+1]
                set udg_List5[4] = udg_List2[Z]
                set udg_List6[1] = -udg_List3[Z]+3*udg_List3[Z+1]-3*udg_List3[Z+2]+udg_List3[Z+3]
                set udg_List6[2] = 3*udg_List3[Z]-6*udg_List3[Z+1]+3*udg_List3[Z+2]
                set udg_List6[3] = -3*udg_List3[Z]+3*udg_List3[Z+1]
                set udg_List6[4] = udg_List3[Z]
                call ExecuteFunc(&quot;Graph&quot;)
            endif
        endif
        if udg_degree == 4 then //degree 4 data collect
            if udg_which == 1 then //normal graph
                //degree 4 data : so long I won&#039;t put anymore the full function
                set udg_List4[1] = (32./3.)*(udg_List1[Z]-4*udg_List1[Z+1]+6*udg_List1[Z+2]-4*udg_List1[Z+3]+udg_List1[Z+4])
                set udg_List4[2] = (-16./3.)*(5*udg_List1[Z]-18*udg_List1[Z+1]+24*udg_List1[Z+2]-14*udg_List1[Z+3]+3*udg_List1[Z+4])
                set udg_List4[3] = (2./3.)*(35*udg_List1[Z]-104*udg_List1[Z+1]+114*udg_List1[Z+2]-56*udg_List1[Z+3]+11*udg_List1[Z+4])
                set udg_List4[4] = (-1./3.)*(25*udg_List1[Z]-48*udg_List1[Z+1]+36*udg_List1[Z+2]-16*udg_List1[Z+3]+3*udg_List1[Z+4])
                set udg_List4[5] = udg_List1[Z]
                set udg_List5[1] = (32./3.)*(udg_List2[Z]-4*udg_List2[Z+1]+6*udg_List2[Z+2]-4*udg_List2[Z+3]+udg_List2[Z+4])
                set udg_List5[2] = (-16./3.)*(5*udg_List2[Z]-18*udg_List2[Z+1]+24*udg_List2[Z+2]-14*udg_List2[Z+3]+3*udg_List2[Z+4])
                set udg_List5[3] = (2./3.)*(35*udg_List2[Z]-104*udg_List2[Z+1]+114*udg_List2[Z+2]-56*udg_List2[Z+3]+11*udg_List2[Z+4])
                set udg_List5[4] = (-1./3.)*(25*udg_List2[Z]-48*udg_List2[Z+1]+36*udg_List2[Z+2]-16*udg_List2[Z+3]+3*udg_List2[Z+4])
                set udg_List5[5] = udg_List2[Z]
                set udg_List6[1] = (32./3.)*(udg_List3[Z]-4*udg_List3[Z+1]+6*udg_List3[Z+2]-4*udg_List3[Z+3]+udg_List3[Z+4])
                set udg_List6[2] = (-16./3.)*(5*udg_List3[Z]-18*udg_List3[Z+1]+24*udg_List3[Z+2]-14*udg_List3[Z+3]+3*udg_List3[Z+4])
                set udg_List6[3] = (2./3.)*(35*udg_List3[Z]-104*udg_List3[Z+1]+114*udg_List3[Z+2]-56*udg_List3[Z+3]+11*udg_List3[Z+4])
                set udg_List6[4] = (-1./3.)*(25*udg_List3[Z]-48*udg_List3[Z+1]+36*udg_List3[Z+2]-16*udg_List3[Z+3]+3*udg_List3[Z+4])
                set udg_List6[5] = udg_List3[Z]
                call ExecuteFunc(&quot;Graph&quot;)
            else //bezier graph
                //degree 4 data : too long...
                set udg_List4[1] = udg_List1[Z]-4*udg_List1[Z+1]+6*udg_List1[Z+2]-4*udg_List1[Z+3]+udg_List1[Z+4]
                set udg_List4[2] = -4*udg_List1[Z]+12*udg_List1[Z+1]-12*udg_List1[Z+2]+4*udg_List1[Z+3]
                set udg_List4[3] = 6*udg_List1[Z]-12*udg_List1[Z+1]+6*udg_List1[Z+2]
                set udg_List4[4] = -4*udg_List1[Z]+4*udg_List1[Z+1]
                set udg_List4[5] = udg_List1[Z]
                set udg_List5[1] = udg_List2[Z]-4*udg_List2[Z+1]+6*udg_List2[Z+2]-4*udg_List2[Z+3]+udg_List2[Z+4]
                set udg_List5[2] = -4*udg_List2[Z]+12*udg_List2[Z+1]-12*udg_List2[Z+2]+4*udg_List2[Z+3]
                set udg_List5[3] = 6*udg_List2[Z]-12*udg_List2[Z+1]+6*udg_List2[Z+2]
                set udg_List5[4] = -4*udg_List2[Z]+4*udg_List2[Z+1]
                set udg_List5[5] = udg_List2[Z]
                set udg_List6[1] = udg_List3[Z]-4*udg_List3[Z+1]+6*udg_List3[Z+2]-4*udg_List3[Z+3]+udg_List3[Z+4]
                set udg_List6[2] = -4*udg_List3[Z]+12*udg_List3[Z+1]-12*udg_List3[Z+2]+4*udg_List3[Z+3]
                set udg_List6[3] = 6*udg_List3[Z]-12*udg_List3[Z+1]+6*udg_List3[Z+2]
                set udg_List6[4] = -4*udg_List3[Z]+4*udg_List3[Z+1]
                set udg_List6[5] = udg_List3[Z]
                call ExecuteFunc(&quot;Graph&quot;)
            endif
        endif
        if udg_degree == 5 then //degree 5 data collect
            if udg_which == 1 then //normal graph
                //degree 5 data : too long....
                set udg_List4[1] = (-625./24.)*(udg_List1[Z]-5*udg_List1[Z+1]+10*udg_List1[Z+2]-10*udg_List1[Z+3]+5*udg_List1[Z+4]-udg_List1[Z+5])
                set udg_List4[2] = (625./24.)*(3*udg_List1[Z]-14*udg_List1[Z+1]+26*udg_List1[Z+2]-24*udg_List1[Z+3]+11*udg_List1[Z+4]-2*udg_List1[Z+5])
                set udg_List4[3] = (-125./24.)*(17*udg_List1[Z]-71*udg_List1[Z+1]+118*udg_List1[Z+2]-98*udg_List1[Z+3]+41*udg_List1[Z+4]-7*udg_List1[Z+5])
                set udg_List4[4] = (25./24.)*(45*udg_List1[Z]-154*udg_List1[Z+1]+214*udg_List1[Z+2]-156*udg_List1[Z+3]+61*udg_List1[Z+4]-10*udg_List1[Z+5])
                set udg_List4[5] = (-1./12.)*(137*udg_List1[Z]-300*udg_List1[Z+1]+300*udg_List1[Z+2]-200*udg_List1[Z+3]+75*udg_List1[Z+4]-12*udg_List1[Z+5])
                set udg_List4[6] = udg_List1[Z]
                set udg_List5[1] = (-625./24.)*(udg_List2[Z]-5*udg_List2[Z+1]+10*udg_List2[Z+2]-10*udg_List2[Z+3]+5*udg_List2[Z+4]-udg_List2[Z+5])
                set udg_List5[2] = (625./24.)*(3*udg_List2[Z]-14*udg_List2[Z+1]+26*udg_List2[Z+2]-24*udg_List2[Z+3]+11*udg_List2[Z+4]-2*udg_List2[Z+5])
                set udg_List5[3] = (-125./24.)*(17*udg_List2[Z]-71*udg_List2[Z+1]+118*udg_List2[Z+2]-98*udg_List2[Z+3]+41*udg_List2[Z+4]-7*udg_List2[Z+5])
                set udg_List5[4] = (25./24.)*(45*udg_List2[Z]-154*udg_List2[Z+1]+214*udg_List2[Z+2]-156*udg_List2[Z+3]+61*udg_List2[Z+4]-10*udg_List2[Z+5])
                set udg_List5[5] = (-1./12.)*(137*udg_List2[Z]-300*udg_List2[Z+1]+300*udg_List2[Z+2]-200*udg_List2[Z+3]+75*udg_List2[Z+4]-12*udg_List2[Z+5])
                set udg_List5[6] = udg_List2[Z]
                set udg_List6[1] = (-625./24.)*(udg_List3[Z]-5*udg_List3[Z+1]+10*udg_List3[Z+2]-10*udg_List3[Z+3]+5*udg_List3[Z+4]-udg_List3[Z+5])
                set udg_List6[2] = (625./24.)*(3*udg_List3[Z]-14*udg_List3[Z+1]+26*udg_List3[Z+2]-24*udg_List3[Z+3]+11*udg_List3[Z+4]-2*udg_List3[Z+5])
                set udg_List6[3] = (-125./24.)*(17*udg_List3[Z]-71*udg_List3[Z+1]+118*udg_List3[Z+2]-98*udg_List3[Z+3]+41*udg_List3[Z+4]-7*udg_List3[Z+5])
                set udg_List6[4] = (25./24.)*(45*udg_List3[Z]-154*udg_List3[Z+1]+214*udg_List3[Z+2]-156*udg_List3[Z+3]+61*udg_List3[Z+4]-10*udg_List3[Z+5])
                set udg_List6[5] = (-1./12.)*(137*udg_List3[Z]-300*udg_List3[Z+1]+300*udg_List3[Z+2]-200*udg_List3[Z+3]+75*udg_List3[Z+4]-12*udg_List3[Z+5])
                set udg_List6[6] = udg_List3[Z]
                call ExecuteFunc(&quot;Graph&quot;)
            else //bezier graph
                //degree 5 data : too long.....
                set udg_List4[1] = -udg_List1[Z]+5*udg_List1[Z+1]-10*udg_List1[Z+2]+10*udg_List1[Z+3]-5*udg_List1[Z+4]+udg_List1[Z+5]
                set udg_List4[2] = 5*udg_List1[Z]-20*udg_List1[Z+1]+30*udg_List1[Z+2]-20*udg_List1[Z+3]+5*udg_List1[Z+4]
                set udg_List4[3] = -10*udg_List1[Z]+30*udg_List1[Z+1]-30*udg_List1[Z+2]+10*udg_List1[Z+3]
                set udg_List4[4] = 10*udg_List1[Z]-20*udg_List1[Z+1]+10*udg_List1[Z+2]
                set udg_List4[5] = -5*udg_List1[Z]+5*udg_List1[Z+1]
                set udg_List4[6] = udg_List1[Z]
                set udg_List5[1] = -udg_List2[Z]+5*udg_List2[Z+1]-10*udg_List2[Z+2]+10*udg_List2[Z+3]-5*udg_List2[Z+4]+udg_List2[Z+5]
                set udg_List5[2] = 5*udg_List2[Z]-20*udg_List2[Z+1]+30*udg_List2[Z+2]-20*udg_List2[Z+3]+5*udg_List2[Z+4]
                set udg_List5[3] = -10*udg_List2[Z]+30*udg_List2[Z+1]-30*udg_List2[Z+2]+10*udg_List2[Z+3]
                set udg_List5[4] = 10*udg_List2[Z]-20*udg_List2[Z+1]+10*udg_List2[Z+2]
                set udg_List5[5] = -5*udg_List2[Z]+5*udg_List2[Z+1]
                set udg_List5[6] = udg_List2[Z]
                set udg_List6[1] = -udg_List3[Z]+5*udg_List3[Z+1]-10*udg_List3[Z+2]+10*udg_List3[Z+3]-5*udg_List3[Z+4]+udg_List3[Z+5]
                set udg_List6[2] = 5*udg_List3[Z]-20*udg_List3[Z+1]+30*udg_List3[Z+2]-20*udg_List3[Z+3]+5*udg_List3[Z+4]
                set udg_List6[3] = -10*udg_List3[Z]+30*udg_List3[Z+1]-30*udg_List3[Z+2]+10*udg_List3[Z+3]
                set udg_List6[4] = 10*udg_List3[Z]-20*udg_List3[Z+1]+10*udg_List3[Z+2]
                set udg_List6[5] = -5*udg_List3[Z]+5*udg_List3[Z+1]
                set udg_List6[6] = udg_List3[Z]
                call ExecuteFunc(&quot;Graph&quot;)
            endif
        endif
        if udg_degree == 6 then //degree 6 data collect
            //normal graph, didn&#039;t add data for Bezier, I think degree 5 Bezier is enough but degree 5 Normal is not
            //degree 6 data : too long........
            set udg_List4[1] = (324./5.)*(udg_List1[Z]-6*udg_List1[Z+1]+15*udg_List1[Z+2]-20*udg_List1[Z+3]+15*udg_List1[Z+4]-6*udg_List1[Z+5]+udg_List1[Z+6])
            set udg_List4[2] = (-162./5.)*(7*udg_List1[Z]-40*udg_List1[Z+1]+95*udg_List1[Z+2]-120*udg_List1[Z+3]+85*udg_List1[Z+4]-32*udg_List1[Z+5]+5*udg_List1[Z+6])
            set udg_List4[3] = 9.*(35*udg_List1[Z]-186*udg_List1[Z+1]+411*udg_List1[Z+2]-484*udg_List1[Z+3]+321*udg_List1[Z+4]-114*udg_List1[Z+5]+17*udg_List1[Z+6])
            set udg_List4[4] = (-9./2.)*(49*udg_List1[Z]-232*udg_List1[Z+1]+461*udg_List1[Z+2]-496*udg_List1[Z+3]+307*udg_List1[Z+4]-104*udg_List1[Z+5]+15*udg_List1[Z+6])
            set udg_List4[5] = (1./10.)*(812*udg_List1[Z]-3132*udg_List1[Z+1]+5265*udg_List1[Z+2]-5080*udg_List1[Z+3]+2970*udg_List1[Z+4]-972*udg_List1[Z+5]+137*udg_List1[Z+6])
            set udg_List4[6] = (-1./10.)*(147*udg_List1[Z]-360*udg_List1[Z+1]+450*udg_List1[Z+2]-400*udg_List1[Z+3]+225*udg_List1[Z+4]-72*udg_List1[Z+5]+10*udg_List1[Z+6])
            set udg_List4[7] = udg_List1[Z]
            set udg_List5[1] = (324./5.)*(udg_List2[Z]-6*udg_List2[Z+1]+15*udg_List2[Z+2]-20*udg_List2[Z+3]+15*udg_List2[Z+4]-6*udg_List2[Z+5]+udg_List2[Z+6])
            set udg_List5[2] = (-162./5.)*(7*udg_List2[Z]-40*udg_List2[Z+1]+95*udg_List2[Z+2]-120*udg_List2[Z+3]+85*udg_List2[Z+4]-32*udg_List2[Z+5]+5*udg_List2[Z+6])
            set udg_List5[3] = 9.*(35*udg_List2[Z]-186*udg_List2[Z+1]+411*udg_List2[Z+2]-484*udg_List2[Z+3]+321*udg_List2[Z+4]-114*udg_List2[Z+5]+17*udg_List2[Z+6])
            set udg_List5[4] = (-9./2.)*(49*udg_List2[Z]-232*udg_List2[Z+1]+461*udg_List2[Z+2]-496*udg_List2[Z+3]+307*udg_List2[Z+4]-104*udg_List2[Z+5]+15*udg_List2[Z+6])
            set udg_List5[5] = (1./10.)*(812*udg_List2[Z]-3132*udg_List2[Z+1]+5265*udg_List2[Z+2]-5080*udg_List2[Z+3]+2970*udg_List2[Z+4]-972*udg_List2[Z+5]+137*udg_List2[Z+6])
            set udg_List5[6] = (-1./10.)*(147*udg_List2[Z]-360*udg_List2[Z+1]+450*udg_List2[Z+2]-400*udg_List2[Z+3]+225*udg_List2[Z+4]-72*udg_List2[Z+5]+10*udg_List2[Z+6])
            set udg_List5[7] = udg_List2[Z]
            set udg_List6[1] = (324./5.)*(udg_List3[Z]-6*udg_List3[Z+1]+15*udg_List3[Z+2]-20*udg_List3[Z+3]+15*udg_List3[Z+4]-6*udg_List3[Z+5]+udg_List3[Z+6])
            set udg_List6[2] = (-162./5.)*(7*udg_List3[Z]-40*udg_List3[Z+1]+95*udg_List3[Z+2]-120*udg_List3[Z+3]+85*udg_List3[Z+4]-32*udg_List3[Z+5]+5*udg_List3[Z+6])
            set udg_List6[3] = 9.*(35*udg_List3[Z]-186*udg_List3[Z+1]+411*udg_List3[Z+2]-484*udg_List3[Z+3]+321*udg_List3[Z+4]-114*udg_List3[Z+5]+17*udg_List3[Z+6])
            set udg_List6[4] = (-9./2.)*(49*udg_List3[Z]-232*udg_List3[Z+1]+461*udg_List3[Z+2]-496*udg_List3[Z+3]+307*udg_List3[Z+4]-104*udg_List3[Z+5]+15*udg_List3[Z+6])
            set udg_List6[5] = (1./10.)*(812*udg_List3[Z]-3132*udg_List3[Z+1]+5265*udg_List3[Z+2]-5080*udg_List3[Z+3]+2970*udg_List3[Z+4]-972*udg_List3[Z+5]+137*udg_List3[Z+6])
            set udg_List6[6] = (-1./10.)*(147*udg_List3[Z]-360*udg_List3[Z+1]+450*udg_List3[Z+2]-400*udg_List3[Z+3]+225*udg_List3[Z+4]-72*udg_List3[Z+5]+10*udg_List3[Z+6])
            set udg_List6[7] = udg_List3[Z]
            call ExecuteFunc(&quot;Graph&quot;)
        endif
        if udg_degree == 7 then //degree 7 data collect
            //normal graph, degree 6 was not enough for my uses, but I stop at degree 7 through
            //degree 7 data : too long!!!!
            set udg_List4[1] = (-117649./720.)*(udg_List1[Z]-7*udg_List1[Z+1]+21*udg_List1[Z+2]-35*udg_List1[Z+3]+35*udg_List1[Z+4]-21*udg_List1[Z+5]+7*udg_List1[Z+6]-udg_List1[Z+7])
            set udg_List4[2] = (117649./720.)*(4*udg_List1[Z]-27*udg_List1[Z+1]+78*udg_List1[Z+2]-125*udg_List1[Z+3]+120*udg_List1[Z+4]-69*udg_List1[Z+5]+22*udg_List1[Z+6]-3*udg_List1[Z+7])
            set udg_List4[3] = (-16807./720.)*(46*udg_List1[Z]-295*udg_List1[Z+1]+810*udg_List1[Z+2]-1235*udg_List1[Z+3]+1130*udg_List1[Z+4]-621*udg_List1[Z+5]+190*udg_List1[Z+6]-25*udg_List1[Z+7])
            set udg_List4[4] = (2401./144.)*(56*udg_List1[Z]-333*udg_List1[Z+1]+852*udg_List1[Z+2]-1219*udg_List1[Z+3]+1056*udg_List1[Z+4]-555*udg_List1[Z+5]+164*udg_List1[Z+6]-21*udg_List1[Z+7])
            set udg_List4[5] = (-343./720.)*(967*udg_List1[Z]-5104*udg_List1[Z+1]+11787*udg_List1[Z+2]-15560*udg_List1[Z+3]+12725*udg_List1[Z+4]-6432*udg_List1[Z+5]+1849*udg_List1[Z+6]-232*udg_List1[Z+7])
            set udg_List4[6] = (49./360.)*(938*udg_List1[Z]-4014*udg_List1[Z+1]+7911*udg_List1[Z+2]-9490*udg_List1[Z+3]+7380*udg_List1[Z+4]-3618*udg_List1[Z+5]+1019*udg_List1[Z+6]-126*udg_List1[Z+7])
            set udg_List4[7] = (-1./60.)*(1089*udg_List1[Z]-2940*udg_List1[Z+1]+4410*udg_List1[Z+2]-4900*udg_List1[Z+3]+3675*udg_List1[Z+4]-1764*udg_List1[Z+5]+490*udg_List1[Z+6]-60*udg_List1[Z+7])
            set udg_List4[8] = udg_List1[Z]
            set udg_List5[1] = (-117649./720.)*(udg_List2[Z]-7*udg_List2[Z+1]+21*udg_List2[Z+2]-35*udg_List2[Z+3]+35*udg_List2[Z+4]-21*udg_List2[Z+5]+7*udg_List2[Z+6]-udg_List2[Z+7])
            set udg_List5[2] = (117649./720.)*(4*udg_List2[Z]-27*udg_List2[Z+1]+78*udg_List2[Z+2]-125*udg_List2[Z+3]+120*udg_List2[Z+4]-69*udg_List2[Z+5]+22*udg_List2[Z+6]-3*udg_List2[Z+7])
            set udg_List5[3] = (-16807./720.)*(46*udg_List2[Z]-295*udg_List2[Z+1]+810*udg_List2[Z+2]-1235*udg_List2[Z+3]+1130*udg_List2[Z+4]-621*udg_List2[Z+5]+190*udg_List2[Z+6]-25*udg_List2[Z+7])
            set udg_List5[4] = (2401./144.)*(56*udg_List2[Z]-333*udg_List2[Z+1]+852*udg_List2[Z+2]-1219*udg_List2[Z+3]+1056*udg_List2[Z+4]-555*udg_List2[Z+5]+164*udg_List2[Z+6]-21*udg_List2[Z+7])
            set udg_List5[5] = (-343./720.)*(967*udg_List2[Z]-5104*udg_List2[Z+1]+11787*udg_List2[Z+2]-15560*udg_List2[Z+3]+12725*udg_List2[Z+4]-6432*udg_List2[Z+5]+1849*udg_List2[Z+6]-232*udg_List2[Z+7])
            set udg_List5[6] = (49./360.)*(938*udg_List2[Z]-4014*udg_List2[Z+1]+7911*udg_List2[Z+2]-9490*udg_List2[Z+3]+7380*udg_List2[Z+4]-3618*udg_List2[Z+5]+1019*udg_List2[Z+6]-126*udg_List2[Z+7])
            set udg_List5[7] = (-1./60.)*(1089*udg_List2[Z]-2940*udg_List2[Z+1]+4410*udg_List2[Z+2]-4900*udg_List2[Z+3]+3675*udg_List2[Z+4]-1764*udg_List2[Z+5]+490*udg_List2[Z+6]-60*udg_List2[Z+7])
            set udg_List5[8] = udg_List2[Z]
            set udg_List6[1] = (-117649./720.)*(udg_List3[Z]-7*udg_List3[Z+1]+21*udg_List3[Z+2]-35*udg_List3[Z+3]+35*udg_List3[Z+4]-21*udg_List3[Z+5]+7*udg_List3[Z+6]-udg_List3[Z+7])
            set udg_List6[2] = (117649./720.)*(4*udg_List3[Z]-27*udg_List3[Z+1]+78*udg_List3[Z+2]-125*udg_List3[Z+3]+120*udg_List3[Z+4]-69*udg_List3[Z+5]+22*udg_List3[Z+6]-3*udg_List3[Z+7])
            set udg_List6[3] = (-16807./720.)*(46*udg_List3[Z]-295*udg_List3[Z+1]+810*udg_List3[Z+2]-1235*udg_List3[Z+3]+1130*udg_List3[Z+4]-621*udg_List3[Z+5]+190*udg_List3[Z+6]-25*udg_List3[Z+7])
            set udg_List6[4] = (2401./144.)*(56*udg_List3[Z]-333*udg_List3[Z+1]+852*udg_List3[Z+2]-1219*udg_List3[Z+3]+1056*udg_List3[Z+4]-555*udg_List3[Z+5]+164*udg_List3[Z+6]-21*udg_List3[Z+7])
            set udg_List6[5] = (-343./720.)*(967*udg_List3[Z]-5104*udg_List3[Z+1]+11787*udg_List3[Z+2]-15560*udg_List3[Z+3]+12725*udg_List3[Z+4]-6432*udg_List3[Z+5]+1849*udg_List3[Z+6]-232*udg_List3[Z+7])
            set udg_List6[6] = (49./360.)*(938*udg_List3[Z]-4014*udg_List3[Z+1]+7911*udg_List3[Z+2]-9490*udg_List3[Z+3]+7380*udg_List3[Z+4]-3618*udg_List3[Z+5]+1019*udg_List3[Z+6]-126*udg_List3[Z+7])
            set udg_List6[7] = (-1./60.)*(1089*udg_List3[Z]-2940*udg_List3[Z+1]+4410*udg_List3[Z+2]-4900*udg_List3[Z+3]+3675*udg_List3[Z+4]-1764*udg_List3[Z+5]+490*udg_List3[Z+6]-60*udg_List3[Z+7])
            set udg_List6[8] = udg_List3[Z]
            call ExecuteFunc(&quot;Graph&quot;)
        endif
    else
        call PauseTimer(udg_GraphTimer)
    endif
    //dummy unit that can be removed if you don&#039;t need it
    //set Z = udg_DimList + 1
    //loop
        //set Z = Z - 1
        //exitwhen Z == udg_DimList - degree
        //call CreateUnitZ(udg_List1[Z], udg_List2[Z], udg_List3[Z], duration)
    //endloop
endfunction

function Calculate takes integer degree, real duration, integer which, real delay, string s, integer precision, boolean additive, boolean delayed, boolean last returns nothing
    //delayed assign
    set udg_delayed = delayed
    //not additive (lightnings) resets Lightning count
    if not additive then
        set udg_Lightning = 0
    endif
    //get lightning sfx type
    set udg_LightSFX = LightningList(s)
    //set precision
    set udg_Precision = 2.+2.*udg_degree+precision
    //degree
    set udg_degree = degree
    //which
    set udg_which = which
    //correct degree input
    //if degree!=N(2,7) or degree==6/which!=2 or degree==7/which!=2
    if (degree != 2 and degree != 3 and degree != 4 and degree != 5 and degree != 6 and degree != 7) or (degree == 6 and which == 2) or (degree == 7 and which == 2) then
        set degree = 2
        set which = 1
    endif
    //duration check
    set udg_duration = duration
    if udg_duration &lt;= 0.0 then
        set udg_duration = 3.0
    endif
    //delay check
    set udg_delay = delay
    if udg_delay &lt; 0.0 then
        set udg_delay = 0.0
    endif
    //precision check
    if udg_Precision &lt;= 0.0 or udg_Precision != 2.+2.*udg_degree+precision then
        set udg_Precision = 2.+2.*udg_degree
    endif
    //reset Z count
    set udg_Z = 0
    //gettime data
    if additive and not last then
        set udg_GetTime = 0.0
    else
        set udg_GetTime = udg_duration
    endif
    //start timer
    call TimerStart(udg_GraphTimer, udg_delay, true, function CalculateEx)
endfunction

function SignumPos takes integer i returns real
    if i &lt;= 0 then
        return 0.0
    endif
    return I2R(i)
endfunction

function GetTime takes integer DimList returns real
    //notadditive = 0.0 -&gt; additive = true
    //notadditive = 1.0 -&gt; additive = false
    return SignumPos(DimList-udg_degree)*udg_delay + udg_GetTime
endfunction

function GraphReset takes nothing returns nothing
    local integer i = 0
    set udg_Lightning = 0
    loop
        set i = i + 1
        set udg_List1<i> = 0.0
        set udg_List2<i> = 0.0
        set udg_List3<i> = 0.0
        exitwhen i &gt;= udg_DimList
    endloop
endfunction

function Resize takes real r, real x, real y, real z returns nothing
    local integer i = 0
    loop
        set i = i + 1
        set udg_List1<i> = udg_List1<i> * r + x
        set udg_List2<i> = udg_List2<i> * r + y
        set udg_List3<i> = udg_List3<i> * r + z
        exitwhen i == udg_DimList
    endloop
endfunction

function Letter_r takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 11./24. + delx
    set udg_List2[1] = 3./2. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 5./24. + delx
    set udg_List2[2] = 0.0 + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 1./3. + delx
    set udg_List2[3] = 4./5. + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 1./2. + delx
    set udg_List2[4] = 1. + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 1. + delx
    set udg_List2[5] = 6./5. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 3./2. + delx
    set udg_List2[6] = 7./5. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 9./5. + delx
    set udg_List2[7] = 3./2. + dely
    set udg_List3[7] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 7
endfunction

function Letter_u takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 1./4. + delx
    set udg_List2[1] = 3./2. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 1./5. + delx
    set udg_List2[2] = 3./4. + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 3./5. + delx
    set udg_List2[3] = 0.0 + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 1. + delx
    set udg_List2[4] = 1./6. + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 5./3. + delx
    set udg_List2[5] = 3./4. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 7./4. + delx
    set udg_List2[6] = 3./2. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 5./3. + delx
    set udg_List2[7] = 3./4. + dely
    set udg_List3[7] = 0.0 + delz
    set udg_List1[8] = 7./4. + delx
    set udg_List2[8] = 1./3. + dely
    set udg_List3[8] = 0.0 + delz
    set udg_List1[9] = 9./5. + delx
    set udg_List2[9] = 0.0 + dely
    set udg_List3[9] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 9
endfunction

function Letter_a takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 5./3. + delx
    set udg_List2[1] = 3./2. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 1./2. + delx
    set udg_List2[2] = 5./4. + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 1./4. + delx
    set udg_List2[3] = 1./4. + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 1. + delx
    set udg_List2[4] = 0.0 + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 3./2. + delx
    set udg_List2[5] = 1./2. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 5./3. + delx
    set udg_List2[6] = 3./2. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 3./2. + delx
    set udg_List2[7] = 1./2. + dely
    set udg_List3[7] = 0.0 + delz
    set udg_List1[8] = 5./3. + delx
    set udg_List2[8] = 1./6. + dely
    set udg_List3[8] = 0.0 + delz
    set udg_List1[9] = 7./4. + delx
    set udg_List2[9] = 0.0 + dely
    set udg_List3[9] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 9
endfunction

function Letter_L takes real delx, real dely, real delz returns nothing
    set udg_List1[1] = 1. + delx
    set udg_List2[1] = 3. + dely
    set udg_List3[1] = 0.0 + delz
    set udg_List1[2] = 1./3. + delx
    set udg_List2[2] = 7./3. + dely
    set udg_List3[2] = 0.0 + delz
    set udg_List1[3] = 3./2. + delx
    set udg_List2[3] = 2. + dely
    set udg_List3[3] = 0.0 + delz
    set udg_List1[4] = 7./3. + delx
    set udg_List2[4] = 5./2. + dely
    set udg_List3[4] = 0.0 + delz
    set udg_List1[5] = 11./5. + delx
    set udg_List2[5] = 13./5. + dely
    set udg_List3[5] = 0.0 + delz
    set udg_List1[6] = 7./4. + delx
    set udg_List2[6] = 5./2. + dely
    set udg_List3[6] = 0.0 + delz
    set udg_List1[7] = 3./2. + delx
    set udg_List2[7] = 2. + dely
    set udg_List3[7] = 0.0 + delz
    set udg_List1[8] = 3./2. + delx
    set udg_List2[8] = 5./4. + dely
    set udg_List3[8] = 0.0 + delz
    set udg_List1[9] = 6./5. + delx
    set udg_List2[9] = 2./5. + dely
    set udg_List3[9] = 0.0 + delz
    set udg_List1[10] = 1./3. + delx
    set udg_List2[10] = 0.0 + dely
    set udg_List3[10] = 0.0 + delz
    set udg_List1[11] = 2./3. + delx
    set udg_List2[11] = 3./4. + dely
    set udg_List3[11] = 0.0 + delz
    set udg_List1[12] = 6./5. + delx
    set udg_List2[12] = 2./4. + dely
    set udg_List3[12] = 0.0 + delz
    set udg_List1[13] = 9./5. + delx
    set udg_List2[13] = 1./5. + dely
    set udg_List3[13] = 0.0 + delz
    set udg_List1[14] = 11./4. + delx
    set udg_List2[14] = 0.0 + dely
    set udg_List3[14] = 0.0 + delz
    //don&#039;t forget to input udg_DimList
    set udg_DimList = 14
endfunction

function Setup takes nothing returns nothing
    call Letter_L(0, 0, 0)
    call Resize(1000., 0, 0, 0)
    //Chain Lightning - Primary - &quot;big blue&quot; - &quot;CLPB&quot;
    //Lightning Attack - &quot;medium blue&quot; - &quot;CHIM&quot;
    //Chain Lightning - Secondary, &quot;small blue 1&quot; - &quot;CLSB&quot;
    //Mana Drain - &quot;small blue 2&quot; - &quot;DRAM&quot;
    //Mana Burn - &quot;big green&quot; - &quot;MBUR&quot;
    //Mana Flare - &quot;medium green&quot; - &quot;MFPB&quot;
    //Drain - &quot;small green 1&quot; - &quot;DRAB&quot;
    //Life Drain - &quot;small green 2&quot; - &quot;DRAL&quot;
    //Healing Wave - Primary - &quot;yellow&quot; - &quot;HWPB&quot;
    //Healing Wave - Secondary - &quot;small yellow&quot; - &quot;HWSB&quot;
    //Finger of Death - &quot;red&quot; - &quot;AFOD&quot;
    //Magic Leash - &quot;small red&quot; - &quot;LEAS&quot;
    //Forked Lightning - &quot;purple&quot; - &quot;FORK&quot;
    //Spirit Link - &quot;orange&quot; - &quot;SPLK&quot;
    call TriggerSleepAction(2.0)
    //in case you do lightning per lightning after destroying them, you do not need to reset and make sure additive is false
    call Calculate(7, 3.0, 1, 0.2, &quot;big blue&quot;, 0, false, true, false) //Degree 7, dur 8s, Graph, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList)) //wait so it doesn&#039;t overlap
    call Calculate(6, 3.0, 1, 0.2, &quot;medium blue&quot;, 0, false, true, false) //Degree 6, dur 8s, Graph, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList)) //wait so it doesn&#039;t overlap
    call Calculate(5, 3.0, 1, 0.2, &quot;small blue 1&quot;, 0, false, true, false) //Degree 5, dur 8s, Graph, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList)) //wait so it doesn&#039;t overlap
    call Calculate(5, 3.0, 2, 0.2, &quot;small blue 2&quot;, 0, false, true, false) //Degree 5, dur 8s, Bezier, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList)) //wait so it doesn&#039;t overlap
    call Calculate(4, 3.0, 1, 0.2, &quot;big green&quot;, 0, false, true, false) //Degree 4, dur 8s, Graph, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList)) //wait so it doesn&#039;t overlap
    call Calculate(4, 3.0, 2, 0.2, &quot;medium green&quot;, 0, false, true, false) //Degree 4, dur 8s, Bezier, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList)) //wait so it doesn&#039;t overlap
    call Calculate(3, 3.0, 1, 0.2, &quot;small green 1&quot;, 0, false, true, false) //Degree 3, dur 8s, Graph, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(3, 3.0, 2, 0.2, &quot;small green 2&quot;, 0, false, true, false) //Degree 3, dur 8s, Bezier, 0.2s del)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 3.0, 1, 0.2, &quot;yellow&quot;, 0, false, true, false) //Degree 2, Graph)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 3.0, 2, 0.2, &quot;small yellow&quot;, 0, false, true, false) //Degree 2, Bezier)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 3.0, 1, 0.2, &quot;red&quot;, 0, false, true, false) //Degree 2, Graph)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 3.0, 1, 0.2, &quot;small red&quot;, 0, false, true, false) //Degree 2, Graph)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 3.0, 1, 0.2, &quot;purple&quot;, 0, false, true, false) //Degree 2, Graph)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 3.0, 1, 0.2, &quot;orange&quot;, 0, false, true, false) //Degree 2, Graph)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;big blue&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;medium blue&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList)) 
    call Calculate(2, 1.0, 1, 0, &quot;small blue 1&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 2, 0, &quot;small blue 2&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;big green&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 2, 0, &quot;medium green&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;small green 1&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 2, 0, &quot;small green 2&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;yellow&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 2, 0, &quot;small yellow&quot;, 0, false, true, false) //instant degree 2 bezier
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;red&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;small red&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;purple&quot;, 0, false, true, false) //instant degree 2 graph
    call TriggerSleepAction(GetTime(udg_DimList))
    call Calculate(2, 1.0, 1, 0, &quot;orange&quot;, 0, false, true, false) //instant degree 2 graph
    //drawing a full &quot;Laura&quot; in small blue 1, degree 2, delay 0.2s, duration 36.0s
    call Letter_L(0.0, 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 22.0, 1, 0.2, &quot;small blue 1&quot;, 0, true, true, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_a(3., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 22.0-GetTime(14), 1, 0.2, &quot;small blue 1&quot;, 0, true, true, false) //use GetTime(14) because it&#039;s additive &gt;&lt;
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_u(5., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 22.0-GetTime(14+9), 1, 0.2, &quot;small blue 1&quot;, 0, true, true, false) //use GetTime(14+9) because it&#039;s additive &gt;&lt;
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_r(7., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 22.0-GetTime(14+9+9), 1, 0.2, &quot;small blue 1&quot;, 0, true, true, false) //and so on because it&#039;s ADDITIVE
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_a(9., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 22.0-GetTime(14+9+9+7), 1, 0.2, &quot;small blue 1&quot;, 0, true, true, true) //LAST
    call TriggerSleepAction(GetTime(udg_DimList))
    call TriggerSleepAction(5.0)
    //writing 4 same letters together
    call GraphReset() //to put each time when you start a new lightning
    call Letter_L(0.0, 0.0, 0.0)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 12.0, 1, 0.2, &quot;small blue 1&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_L(0.0, 0.0, 0.5)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(14), 1, 0.2, &quot;small blue 1&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_L(0.0, 0.0, 1.0)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(28), 1, 0.2, &quot;small blue 1&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_L(0.0, 0.0, 1.5)
    call Resize(1000., 0, 0, 0)
    call Calculate(2, 12.0-GetTime(42), 1, 0.2, &quot;small blue 1&quot;, 0, true, false, true)
    call TriggerSleepAction(GetTime(udg_DimList))
    //degree, duration, whichgraph, lightning delay, lightningstring, precision, isadditive, isdelayed, islast
    //my graph 1
    call GraphReset() //to put each time when you start a new lightning
    call Letter_L(0.0, 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 7.0, 1, 0.1, &quot;purple&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_a(3., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14), 1, 0.1, &quot;big blue&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_u(5., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14+9), 1, 0.1, &quot;big green&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_r(7., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14+9+9), 1, 0.1, &quot;red&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_a(9., 0.0, 0.0)
    call Resize(300., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14+9+9+7), 1, 0.1, &quot;orange&quot;, 0, true, false, true)
    call TriggerSleepAction(GetTime(udg_DimList))
    call TriggerSleepAction(5.0)
    //my graph 2
    call GraphReset() //to put each time when you start a new lightning
    call Letter_L(0.0, 0.0, 0.0)
    call Resize(600., 0, 0, 0)
    call Calculate(2, 7.0, 1, 0.0, &quot;purple&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_a(0.0, 0.0, 0.5)
    call Resize(600., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14), 1, 0.0, &quot;big blue&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_u(0.0, 0.0, 1.0)
    call Resize(600., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14+9), 1, 0.0, &quot;big green&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_r(0.0, 0.0, 1.5)
    call Resize(600., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14+9+9), 1, 0.0, &quot;red&quot;, 0, true, false, false)
    call TriggerSleepAction(GetTime(udg_DimList))
    call Letter_a(0.0, 0.0, 2.0)
    call Resize(600., 0, 0, 0)
    call Calculate(2, 7.0-GetTime(14+9+9+7), 1, 0.0, &quot;orange&quot;, 0, true, false, true)
    call TriggerSleepAction(GetTime(udg_DimList))
    call TriggerSleepAction(5.0)
    //stop
endfunction</i></i></i></i></i></i></i></i></i></i></i>



he made a video on my ListGraphing4

[youtube]O0nd0fK2-JQ[/youtube]
 

Attachments

  • Graphing4.w3x
    41.1 KB · Views: 203
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top