Graphs (2)

Chocobo

White-Flower
Reaction score
409
<only for people who uses graphic calculators, since my script is using an "interface" almost like the ones in these calculators : Lists and variables>

Originally from there : http://www.thehelper.net/forums/showthread.php?t=125344

And here : http://www.thehelper.net/forums/showthread.php?t=124870 (very old thing I made 1 year ago through)


If you do not know what it does, here is a video showing what it can do :

(credits to LauraeLc2 who made the video for me)
[youtube]O0nd0fK2-JQ[/youtube]

this is what I try to reproduce :

[YOUTUBE]ryHYO7HP9p8[/YOUTUBE]



This is the (ugly) code I'm using for that :
(source code in second post)


Is there anyway to "shorten" the code or to make the code more efficient (or more readable at least)?


JASS:
function Calculate takes integer degree, real duration, integer which, real delay, string s, integer precision, boolean additive, boolean delayed, boolean last returns nothing


is the function that does almost everything : pick degree of the parametric functions, the duration, which graph you want (normal or bezier), the delay between lightnings, the lightning you want, the precision of lightnings (use more or less lightnings), if it's an "additive" (that doesn't reset lightning count), if it has to delay the lightning destroy (so they destroy all together when it's false), and if it's the last lightning you are doing (used for "GetTime").

I guess that's too long to explicit everything. Would there be a shorter way of doing what I'm trying to do?

Another question : How would I make it multi instanceable? (could not perform two graphs at same time, or "not able to draw a graph while another graph is being graphed") and without making it slow? (I start to have small problems when delay is set to 0.0, sometimes my computer freezes for 0.5s but I think it depends on the lightning effect I use, I wrote if it's "laggy" or not in the function "LightningList")
 

Chocobo

White-Flower
Reaction score
409
Source Code (was too big to be posted in the first post because it's really long and annoying) :

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

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 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]
                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]
                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></i></i></i></i></i></i>
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top