Ultimate Ground Movement Analysis: Turbo Edition

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#1
All distances are measured in Melee-metres (Mm) and velocities in Melee-metres per frame (Mm/f).

A Melee-metre is just a name I gave to the unit the game measures distance, it would likely be around half a ft if you tried to compare it to the real world.

For reference,
PStadium is 175.5 Mm across.and it's platforms are 30 Mm.
Final Destination is 171.1314 Mm across.
Dreamland is 154.5426 Mm across and it's middle right platform is 31.3709 Mm, and it's middle left platform is 29.6675 Mm and it's top platform is 38.0352 Mm.
Battlefield is 136.8 Mm across and it's platforms are 37.6 Mm.
FoD is 126.85448 Mm across and it's platforms are 28.5 Mm.
Yoshis is 112.6327 Mm across and it's platforms are 31.5 Mm.
*Wavesurfing = Dash>Wavedash
*Boost Run = Reverse Moonwalk = "Charlie" = Moonwalk into Run Turnaround
*Extended Dash Dance = Hold forward for maximum dash frame before run is initiated, then releasing to neutral for the remainder of frames (like a foxtrot)


Code:
from sys import exit

print "\n> fox\n> falco\n> sheik\n> marth\n> jiggs\n> peach\n> falcon\n> ics\n> pikachu\n> doc\n> samus\n> ganon\n> luigi\n> mario\n> ylink\n> link\n> dk\n> yoshi\n> zelda\n> roy\n> mewtwo\n> gameandwatch\n> ness\n> bowser\n> pichu\n> kirby\n"

def charselect():
    prompt = raw_input("--Type quit to exit--\nType a character\n> ")
    if prompt == "fox":
    
        stats = [11, 21, 2.02, 2.2, 0.12, 0.08, 0.16, 1.6, 3, 33.6, 33.6, 33, 1.9]

    elif prompt == "falco":
    
        stats = [11, 21, 1.82, 1.5, 0.12, 0.08, 0.16, 1.4, 5, 38.5, 38.5, 33, 1.9]
    
    elif prompt == "sheik":
    
        stats = [7, 21, 1.8, 1.8, 0.12, 0.08, 0.16, 1.2, 3, 40.04565, 37.71997, 33, 1.7]
        dattack = [4.58236, 4.79176, 3.38642]
    
    elif prompt == "marth":
    
        stats = [15, 27, 1.56, 1.8, 0.06, 0.06, 0.12, 1.6, 4, 40.23051, 40.19798, 37, 1.5]

    elif prompt == "jiggs":
    
        stats = [12, 23, 1.31, 1.1, 0.085, 0.09, 0.18, 0.7, 5, 32.90277, 32.89497, 36, 1.4]

    elif prompt == "peach" :
    
        stats = [15, 21, 1.3, 1.3, 0.12, 0.1, 0.2, 0.85, 5, 30.31844, 29.52969, 33, 1.2]
    
    elif prompt == "falcon":

        stats = [15, 28, 2.16, 2.30, 0.16, 0.08, 0.16, 0.85, 4, 33.95093, 33.86285, 33, 2, 0.001875, 23]
    
    elif prompt == "ics":
    
        stats = [13, 21, 1.4, 1.4, 0.07, 0.035, 0.07, 0.95, 3, 34.49494, 34.5, 33, 1.4]
    
    elif prompt == "pikachu":
    
        stats = [13, 22, 1.8, 1.8, 0.1, 0.09, 0.18, 1.24, 3, 36.67236, 33.3, 33, 1.8]
    
    elif prompt == "doc" or prompt == "mario":
    
        stats = [10, 21, 1.5, 1.5, 0.08, 0.06, 0.12, 1.1, 4, 33.00137, 33, 33, 1.5, 0.00075, 23]

    elif prompt == "samus":
    
        stats = [8, 22, 1.8, 1.4, 0.12, 0.06, 0.12, 1.0, 3, 39.60114, 39.59885, 46, 1.86]
    
    elif prompt == "ganon":
    
        stats = [15, 28, 1.35, 1.35, 0.09, 0.07, 0.14, 0.73, 6, 37.80104, 37.70296, 33, 1.3]

    elif prompt == "luigi":

        stats = [10, 21, 1.34, 1.34, 0.08, 0.025, 0.05, 1.1, 4, 37.50156, 37.5, 33, 1.3]

    elif prompt == "ylink" :
    
        stats = [12, 30, 1.72, 1.6, 0.12, 0.08, 0.16, 1.2, 4, 28.84717, 28.8, 39, 1.8]

    elif prompt == "link" :
    
        stats = [12, 30, 1.3, 1.3, 0.12, 0.1, 0.2, 1.2, 6, 36.65994, 36.6, 39, 1.3]

    elif prompt == "dk" :
    
        stats = [15, 30, 1.6, 1.6, 0.07, 0.08, 0.16, 1.2, 5, 38.4725, 34.99518, 33, 1.6]

    elif prompt == "yoshi" :
    
        stats = [13, 26, 1.43, 1.6, 0.1, 0.06, 0.12, 1.15, 5, 31.31754, 31.31937, 39, 1.33]

    elif prompt == "zelda" :
    
        stats = [15, 22, 1.1, 1.1, 0.12, 0.1, 0.2, 0.7, 6, 33.21847, 32.34975, 33, 1.1]

    elif prompt == "roy" :

        stats = [15, 27, 1.47, 1.61, 0.07, 0.06, 0.12, 1.2, 5, 37.7817, 37.75116, 37, 1.4]

    elif prompt == "mewtwo" :

        stats = [18, 29, 1.4, 1.4, 0.1, 0.04, 0.08, 1, 5, 51.96725, 51.98896, 39, 1.4]

    elif prompt == "gameandwatch" :

        stats = [8, 17, 1.5, 1.5, 0.08, 0.06, 0.12, 1.1, 4, 28.56, 28.56, 37, 1.5]

    elif prompt == "ness" :

        stats = [13, 25, 1.36, 1.4, 0.06, 0.06, 0.12, 0.84, 4, 30.00653, 35.02735, 33, 1.3]

    elif prompt == "bowser" :

        stats = [13, 29, 1.06, 1.5, 0.06, 0.06, 0.12, 0.65, 8, 28.98, 26.27791, 41, 1]

    elif prompt == "pichu" :

        stats = [13, 22, 1.72, 1.72, 0.1, 0.1, 0.2, 1.24, 3, 40, 38, 33, 1.8]

    elif prompt == "kirby" :
    
        stats = [12, 23, 1.4, 1.4, 0.1, 0.08, 0.16, 0.85, 3, 32.20272, 32.19508, 33, 1.4]

    elif prompt == "quit" :
        exit(0)

    else :
        print "Invalid character name."
        charselect()

    return stats, prompt

def printwalkandmaxrun(d_maxv, maxwalk):
    print "\nMax Walk Speed: " , maxwalk
    print "\nAverage Run velocity: " ,d_maxv
def wavedashing(traction_low, traction_high, maxwalk, jumpsquat, prompt, filename):
    data = open(filename, 'a')
    data.write("WAVEDASH\n")
    #------WAVEDASH--------
    airdodgev1 = 2.79000
    airdodgev2 = 2.67039
    airdodgev3 = 1.97283

    #z = (w - tv) / th , rounded up, max 9+j
    #i = w - zth
  
    zw1_1 = round((airdodgev1 - maxwalk) / traction_high + 0.5)
    if zw1_1 > 9 :
        zw1_1 = 9
    zw1_2 = airdodgev1 - (zw1_1*traction_high)

    zw2_1 = round((airdodgev2 - maxwalk)/traction_high + 0.5)
    if zw2_1 > 9 + jumpsquat :
        zw2_1 = 9 + jumpsquat
    zw2_2 = airdodgev2 - (zw2_1*traction_high)

    zw3_1 = round((airdodgev3 - maxwalk)/traction_high + 0.5)
    if zw3_1 > 9 + jumpsquat :
        zw3_1 = 9 + jumpsquat
    zw3_2 = airdodgev3 - (zw3_1*traction_high)

    if prompt == "sheik" or prompt == "marth" or prompt == "link" or prompt == "dk" or prompt == "roy" or prompt == "bowser" :
        a = True
    else:
        a = False

    data.write("Perfect waveland\n")

    if zw1_1 >= 9:
        n = 0
        wavedash1 = 0
    
        while n <= zw1_1 :
            wavedash1 = wavedash1 + airdodgev1 - traction_high * n
            data.write(str(wavedash1) + "\n")
            n = n + 1
        
        
        wavedash1 = wavedash1 / 10
        print "\nAverage Perfect Waveland velocity:",wavedash1
    
    else:
        n = 0
        wavedash1_1 = 0
    
        while n <= zw1_1 :
            wavedash1_1 = wavedash1_1 + airdodgev1 - traction_high * n
            data.write(str(wavedash1_1) + "\n")
            n = n + 1

        m = 1
        wavedash1_2 = 0
    
        while m <= (9 - zw1_1) :  
            wavedash1_2 = wavedash1_2 + zw1_2 - traction_low * m
            data.write(str(wavedash1_1 + wavedash1_2) + "\n")
            m = m + 1
    
        wavedash1 = (wavedash1_1 + wavedash1_2)/ 10
        print "\nAverage Perfect Waveland velocity:" ,wavedash1

    data.write("Max angle\n")

    if zw2_1 >= 9 + jumpsquat:
        n = 0
        if a == True:
            wavedash2 = -0.5*airdodgev2
        else:
            wavedash2 = 0
    
        while n <= zw2_1 :
            wavedash2 = wavedash2 + airdodgev2 - traction_high * n
            data.write(str(wavedash2) + "\n")
            n = n + 1
    else:

        n = 0
        if a == True:
            wavedash2_1 = -0.5*airdodgev2
        else:
            wavedash2_1 = 0
    
        while n <= zw2_1 :
            wavedash2_1 = wavedash2_1 + airdodgev2 - traction_high * n
            data.write(str(wavedash2_1) + "\n")
            n = n + 1

        m = 1
        wavedash2_2 = 0
    
        while m <= (9 + jumpsquat - zw2_1) :  
            wavedash2_2 = wavedash2_2 + zw2_2 - traction_low * m
            data.write(str(wavedash2_1 + wavedash2_2) + "\n")
            m = m + 1
    
        wavedash2 = (wavedash2_1 + wavedash2_2)

    data.write("Diagonal notch\n")

    if zw3_1 >= 9 + jumpsquat:

        n = 0
        if a == True:
            wavedash3 = -0.5*airdodgev3
        else:
            wavedash3 = 0
    
        while n <= zw3_1 :
            wavedash3 = wavedash3 + airdodgev3 - traction_high * n
            data.write(str(wavedash3) + "\n")
            n = n + 1



    else:

        n = 0
        if a == True:
            wavedash3_1 = -0.5*airdodgev3
        else:
            wavedash3_1 = 0
    
        while n <= zw3_1 :
            wavedash3_1 = wavedash3_1 + airdodgev3 - traction_high * n
            data.write(str(wavedash3_1) + "\n")
            n = n + 1

        m = 1
        wavedash3_2 = 0
    
        while m <= (9 + jumpsquat - zw3_1) :  
            wavedash3_2 = wavedash3_2 + zw3_2 - traction_low * m
            data.write(str(wavedash3_1 + wavedash3_2) + "\n")
            m = m + 1
    
        wavedash3 = (wavedash3_1 + wavedash3_2)
    


    wavedash2 = wavedash2 / (10 + jumpsquat)
    wavedash3 = wavedash3 / (10 + jumpsquat)
    print "\nAverage Max angle Wavedash velocity:" ,wavedash2
    print "\nAverage Diagonal notch Wavedash velocity:" ,wavedash3
    #when z = 9+j ;
    #Wavedash/land = Sum[w - thn, {n, 0, z}] / (10+j)
    #
    #when z < 9+j ;
    #Wavedash/land = ( Sum[w - thn, {n, 0, z}] + Sum[i - tn, {n, 1,(9+j-z)}] ) / (10+j)

    return wavedash1, wavedash2, wavedash3

def dashing(d_x, d_initialv, d_maxv, d_acceleration, traction_low, filename):
    data = open(filename, 'a')
    data.write("DASH\n0\n")

    #------------DASHING----------------


    if d_initialv == d_maxv:
        dash = d_maxv
        i = 1
        while i < d_x:
            data.write(str(dash * i) + "\n")
            i += 1
        
        print "\nAverage Dash velocity: " ,dash
    
    
    elif d_initialv > d_maxv:
        zd = round((d_initialv - d_maxv)/traction_low - 0.5) #rounded down
        if zd > (d_x - 2):
            zd = (d_x - 2)
    
        dash = 0
        n = 0
    
        while n <= zd:
            dash = dash + (d_initialv - traction_low*n)
            data.write(str(dash) + "\n")
            n = n + 1
    
        #Dash = ( Sum[du - tn, {n, 0, z}] + dv(dx - z - 2) ) / (dx - 1)
        dash = (dash + d_maxv*(d_x - zd - 2))/(d_x - 1)
        print "\nAverage Dash velocity: " ,dash
    
    else:
        zd = round((d_maxv - d_initialv)/d_acceleration - 0.5) #rounded down
        if zd > (d_x - 2):
            zd = (d_x - 2)
    
        dash = 0
        n = 0
    
        while n <= zd:
            dash = dash + (d_initialv + d_acceleration*n)
            data.write(str(dash) + "\n")
            n = n + 1
        
        #Dash = ( Sum[du + dan, {n, 0, z}] + dv(dx - z - 2) ) / (dx - 1)
        dash = (dash + d_maxv * (d_x - zd - 2))/(d_x - 1)
        print "\nAverage Dash velocity: " ,dash

    return dash

def foxtrotting(d_x, d_y, d_initialv, d_maxv, d_acceleration, traction_low)    :
    #--------------FOXTROT--------------------
    data = open(filename, 'a')
    data.write("FOXTROT\n0\n")

    if d_initialv == d_maxv:
        i = 1
        while i < d_x:
            data.write(str(d_maxv * i) + "\n")
            i += 1
        n = 1
        foxtrot = 0
    
        while n <= (d_y - d_x) :
            foxtrot = foxtrot + d_maxv - traction_low * n
            data.write(str(foxtrot) + "\n")
            n = n + 1
    
        foxtrot = ( foxtrot + d_x * d_maxv - traction_low * (d_y - d_x) ) / d_y

        #Foxtrot = ( Sum[dv - tn, {n, 1, (dy-dx)}] + dxdv - t(dy - dx) ) / dy
        print "\nAverage Foxtrot velocity: " ,foxtrot
    
    elif d_initialv > d_maxv:
        zf = round((d_initialv - d_maxv) / traction_low - 0.5) #rounded down
        #print "zf is ", zf
    
        if zf < ( d_x - 2 ) :
    
            n = 0
            foxtrot1 = 0
        
            while n <= zf :
                foxtrot1 = foxtrot1 + d_initialv - traction_low * n
                data.write(str(foxtrot1) + "\n")
                n = n + 1
        
            m = 1
            foxtrot2 = 0
        
            while m <= (d_y - d_x) :
                foxtrot2 = foxtrot2 + d_maxv - traction_low * m
                data.write(str(foxtrot1 + foxtrot2) + "\n")
                m = m + 1
        
            foxtrot = (foxtrot1 + foxtrot2 + d_maxv*(d_x - zf - 2) + d_maxv - traction_low*(d_y - d_x)) / d_y
    
        else :
        
            n = 0
            foxtrot = 0
        
            while n <= (d_y - 2):
                foxtrot = foxtrot + d_initialv - traction_low * n
                data.write(str(foxtrot) + "\n")
                n = n + 1
            foxtrot = ( foxtrot + d_initialv - traction_low * ( d_y - 2 ) ) / d_y
    
        print "\nAverage Foxtrot velocity: " ,foxtrot
        #z = (du - dv) / t, rounded down
        #Foxtrot = ( Sum[du - tn, {n, 0, z}] + dv(dx - z - 2) + Sum[dv - tn, {n, 1, (dy-dx)}] + dv - t(dy - dx) ) / dy
    
    else:
        zf = round((d_maxv - d_initialv) / d_acceleration - 0.5) #rounded down
    
        n = 0
        foxtrot1 = 0
    
        while n <= zf :
            foxtrot1 = foxtrot1 + d_initialv + d_acceleration * n
            data.write(str(foxtrot1) + "\n")
            n = n + 1
    
        m = 1
        foxtrot2 = 0
    
        while m <= (d_y - d_x) :
            foxtrot2 = foxtrot2 + d_maxv - traction_low * m
            data.write(str(foxtrot1 + foxtrot2) + "\n")
            m = m + 1
    
        foxtrot = ( (foxtrot1 + foxtrot2 + d_maxv *(d_x - zf - 2) + d_maxv - traction_low * (d_y - d_x)) / d_y    )
    
        print "\nAverage Foxtrot velocity: " ,foxtrot

    #Foxtrot = ( Sum[du + dan, {n, 0, z}] + dv(dx - z - 2) + Sum[dv - tn, {n, 1, (dy-dx)}] + dv - t(dy - dx) ) / dy
    return foxtrot

def rolling(rollf, rollb, rollframes):    
    # ------------ROLLING-------------

    rollforward = rollf / rollframes
    rollbackward = rollb / rollframes

    print "\nAverage Roll forward velocity: ", rollforward
    print "\nAverage Roll backward velocity: ", rollbackward
    print "\n"

    return rollforward, rollbackward
def velocityorder(d_maxv, maxwalk, wavedash1, wavedash2, wavedash3, dash, foxtrot, rollforward, rollbackward, wavesurf):
    #---------------Ordered list----------------

    velocityList = [maxwalk, rollforward, rollbackward, foxtrot, wavedash1, wavedash2, wavedash3, dash, d_maxv, wavesurf]
    velocityList.sort()
    for a in velocityList:
        if a == maxwalk :
            print "> Maxwalk....................... ", a
        if rollforward == rollbackward :
            if a == rollforward :
                print "> Roll forward = Roll backward.. ", a
        else :
            if a == rollbackward :
                print "> Roll backward................. ", a
            if a == rollforward :
                print "> Roll forward.................. ", a
        if a == foxtrot :
            print "> Foxtrot....................... ", a
        if a == wavesurf :
            print "> Wavesurf...................... ", a
        if a == wavedash1 :
            print "> Perfect waveland.............. ", a
        if a == wavedash2 :
            print "> Max angle wavedash............ ", a
        if a == wavedash3 :
            print "> Diagonal notch wavedash....... ", a
        if dash == d_maxv :
            if a == dash :
                print "> Dash = Run.,,,................ ", a
        else :
            if a == d_maxv :
                print "> Run........................... ", a
            if a == dash :
                print "> Dash.......................... ", a

def dashdancing(d_x, d_initialv, d_maxv, d_acceleration, traction_low, d_trueinitialv):
    #------------DASHDANCING-----------------------
            
    if d_initialv == d_maxv :
        vz = d_maxv
        #print "1: vz is " ,vz
    elif d_initialv > d_maxv :
        vz = d_initialv - traction_low * (d_x - 2)
        vz = d_maxv
        #if vz > d_maxv :
        #    vz = d_maxv
        #    print "2-2: vz is " ,vz
        # i think even when vz is above d_max, vx will just use d_maxv and cannot go higher.
        #print "2:vz is " ,vz
    
    else :
        vz = d_initialv + d_acceleration * (d_x - 2)
        if vz > d_maxv :
            vz = d_maxv
        #print "3: vz is " ,vz

    vx = - 1 *(( vz / 4 ) - traction_low)
    if vx > 0:
        vx = 0
    #print "vx is " , vx

    if (vx + d_trueinitialv) > d_maxv :
        z = round(((vx + d_trueinitialv - d_maxv) / traction_low) - 0.5)
        if z > d_x - 1:
            z = d_x - 1
        #print "1: z is " , z
        vy = vx + d_trueinitialv - traction_low * (d_x - 1)
        vy = d_maxv
        #if vy < d_maxv:
        #    print "1-1: vy is ", vy
        #    vy = d_maxv
        #print "1: vy is " , vy
        dashdance = 0
        n = 1
    
        while n <= z :
            dashdance = dashdance + vx + d_trueinitialv - traction_low * n
            n = n + 1
    
        dashdance = dashdance + d_maxv * (d_x - z - 1) + 2 * ((vy / 4) - traction_low)
    
        print "\nDash dance distance: " ,dashdance

    elif (vx + d_trueinitialv) < d_maxv :
        #print "\ntest 1"
        z = round(((d_maxv - vx - d_trueinitialv) / d_acceleration) - 0.5)
        if z > d_x - 1:
            z = d_x - 1
        #print "2: z is " , z
        vy = vx + d_trueinitialv + d_acceleration * (d_x - 1)
        if vy > d_maxv:
            vy = d_maxv
        #print "2: vy is " , vy
        dashdance = 0
        n = 1
    
        while n <= z :
            dashdance = dashdance + vx + d_trueinitialv + d_acceleration * n
            n = n + 1
    
        dashdance = dashdance + d_maxv * (d_x - z - 1) + 2 * ((vy / 4) - traction_low)
    
        print "\nDash dance distance: " ,dashdance

    elif (vx + d_trueinitialv) == d_maxv :

        dashdance = d_maxv * (d_x - 1) + 2 * ((d_maxv / 4) - traction_low)
    
        print "\nDash dance distance: " ,dashdance

    dashdancevelocity = dashdance / (d_x + 1)

    print "\nAverage Dash dance velocity: " , dashdancevelocity

def extendeddashdancing(d_x, d_initialv, d_maxv, d_acceleration, traction_low, d_trueinitialv):
    #--------EXTENEDED DASHDANCE--------------

    if d_initialv == d_maxv :
        vframedx = d_maxv
        #print "1: vframedx is " ,vframedx
    elif d_initialv > d_maxv :
        vframedx = d_initialv - traction_low * (d_x - 2)
        if vframedx < d_maxv:
            vframedx = d_maxv
        #print "2: vframedx is" ,vframedx
    
    else :
        vframedx = d_initialv + d_acceleration * (d_x - 2)
        if vframedx > d_maxv :
            vframedx = d_maxv
        #print "3: vframedx is " ,vframedx

    vframe20 = vframedx - traction_low * (20 - d_x)
    #print "vframe20 is " , vframe20

    vframe21 = - 1 *(( vframe20 / 4 ) - traction_low)
    if vframe21 > 0:
        vframe21 = 0
    #print "vframe21 is " , vframe21

    if (vframe21 + d_trueinitialv) > d_maxv :
        #print "\nTesting>>>>>>>>>>>>>>"
        # z is how many frames of traction it takes to get from frame23 to dmaxv
        z = round(((vframe21 + d_trueinitialv - d_maxv) / traction_low) - 0.5)
        if z > d_x - 1:
            z = d_x - 1
        #print "1: z is " , z

        exdashdance = 0
        n = 1
    
        while n <= z :
            exdashdance = exdashdance + vframe21 + d_trueinitialv - traction_low * n
            n = n + 1
        if ( vframe21 + d_trueinitialv - traction_low*(z+1) ) > d_maxv :
            m = 1
    
            while m <= (20 - z) :
                exdashdance = exdashdance + vframe21 + d_trueinitialv - traction_low * (z + m)
                m = m + 1
        
            vframe41 = exdashdance + vframe21 + d_trueinitialv - traction_low * (z - m)
            #print "1-1:vframe41 is THIS NEEDS ATTENTION", vframe41
            exdashdance = exdashdance + 2 * ((vframe41/4) - traction_low)
        
        else :
            m = 1
            while m <= (20 - d_x) :
                exdashdance = exdashdance + d_maxv - traction_low * m
                m = m + 1
            #print "1: m is ",m
            vframe41 = d_maxv - traction_low * (m - 1)
            #print "1-2:vy is ", vframe41
            exdashdance = exdashdance + 2 * ((vframe41/4) - traction_low)
    
        exdashdance = exdashdance + d_maxv * ( d_x - z - 1)
        print "\n20 frame Extended Dash dance distance: " ,exdashdance

    elif (vframe21 + d_trueinitialv) < d_maxv :
        #print "\ntest 1"
        # z is how many frames of acceleration it takes to get from frame23 to dmaxv
        z = round(((d_maxv - vframe21 - d_trueinitialv) / d_acceleration) - 0.5)
        if z > d_x - 1:
            z = d_x - 1
        #print "z is " , z

        exdashdance = 0
        n = 1
    
        while n <= z :
            exdashdance = exdashdance + vframe21 + d_trueinitialv + d_acceleration * n
            n = n + 1
            #print "exdashdance1 : " , exdashdance
        if ( vframe21 + d_trueinitialv + d_acceleration*(z+1) ) > d_maxv :
            m = 1
    
            if z == d_x - 1 :
                vframe21plusdx = vframe21 + d_trueinitialv + d_acceleration * z
                while m <= (20 - d_x) :
                    exdashdance = exdashdance + vframe21plusdx - traction_low * m
                    m = m + 1
                vy = vframe21 + d_trueinitialv + d_acceleration * z - traction_low * (20 - d_x)
                exdashdance = exdashdance + 2 * ((vy/4) - traction_low)
                #print "1:vy is ", vy
            
            else :
                exdashdance = exdashdance  + d_maxv * (d_x - z - 1)
                while m <= (20 - d_x) :
                    exdashdance = exdashdance + d_maxv - traction_low * m
                    m = m + 1
                vy = d_maxv - traction_low * (20 - d_x)
                frame42 = ((vy/4) - traction_low)
                #print "frame 42 is ", frame42
                exdashdance = exdashdance + 2 * ((vy/4) - traction_low)
                #print "2:vy is ", vy
    
        else :
            m = 1
            while m <= (20 - d_x) :
                exdashdance = exdashdance + vframe21 + d_trueinitialv  + d_acceleration * z - traction_low * m
                m = m + 1
        
            vy = vframe21 + d_trueinitialv + d_acceleration * z - traction_low * m
            #print "3:vy is ", vy
            exdashdance = exdashdance + 2 * ((vy/4) - traction_low)
        
            
        #exdashdance = exdashdance + d_maxv * (d_x - z - 1) + 2 * ((vy / 4) - traction_low)
    
        print "\n20 frame Extended Dash dance distance: " ,exdashdance
    

    elif (vframe21 + d_trueinitialv) == d_maxv :
    
        exdashdance = 0
        m = 1
        while m <= (20 - d_x):
            exdashdance = exdashdance + traction_low * m
            m = m + 1
        vy = d_maxv - (20 - d_x) * traction_low
    
        exdashdance = exdashdance + d_maxv * (d_x - 1) + 2 * ((vy / 4) - traction_low)
    
        print "\20 frame Extended Dash dance distance: " ,exdashdance

    exdashdancevelocity = exdashdance / 21

    print "\nAverage Extended Dash dance velocity: " , exdashdancevelocity

def wavesurfing(d_initialv, d_maxv, d_acceleration, traction_low, traction_high, maxwalk, jumpsquat, prompt, wdtype, query):
    #------------------WAVESURFING--------------------------
    if wdtype == "pw":
        airdodgev2 = 2.79000
    elif wdtype == "ma":
        airdodgev2 = 2.67039
    elif wdtype == "dn":
        airdodgev2 = 1.97283
    i = round((airdodgev2 - maxwalk)/traction_high + 0.5)
    if i > 9 :
        i = 9
    j = airdodgev2 - (i*traction_high)

    if i >= 9:
        n = 0
        wavedash2noj = 0
    
        while n <= i :
            wavedash2noj = wavedash2noj + airdodgev2 - traction_high * n
            n = n + 1
        wavedashframe10 = airdodgev2 - traction_high * (n - 1)
        if query == True:
            return wavedashframe10
        #print "wavedash frame 10 is " ,wavedashframe10
        if prompt == "sheik" or prompt == "marth" or prompt == "link" or prompt == "dk" or prompt == "roy" or prompt == "bowser" :
            wavedash2noj = wavedash2noj - 0.5*airdodgev2
        #print "\nAverage Max angle Wavedash velocity: no jumpsquat" ,wavedash2noj

    else:

        n = 0
        wavedash2_1 = 0
    
        while n <= i :
            wavedash2_1 = wavedash2_1 + airdodgev2 - traction_high * n
            n = n + 1

        m = 1
        wavedash2_2 = 0
    
        while m <= (9 - i) :  
            wavedash2_2 = wavedash2_2 + j - traction_low * m
            m = m + 1
    
        wavedashframe10 = j - traction_low * (m - 1)
        if query == True:
            return wavedashframe10
        
        #print "wavedashframe10 is " ,wavedashframe10
        wavedash2noj = (wavedash2_1 + wavedash2_2)
        if prompt == "sheik" or prompt == "marth" or prompt == "link" or prompt == "dk" or prompt == "roy" or prompt == "bowser" :
            wavedash2noj = wavedash2noj - 0.5*airdodgev2
        #print "\nAverage Max angle Wavedash no jumpsquat:" ,wavedash2noj

    cactuarframes = 5
    print "Wavesurf dash frames: " , cactuarframes
    
    if d_initialv == d_maxv :
        n = 1
        cactuarjumpsquat = 0
        cactuarjumpsquatv = d_maxv
        while n <= jumpsquat:
            if cactuarjumpsquatv <= maxwalk :
                n = n + 1
                cactuarjumpsquatv = cactuarjumpsquatv - traction_low
                cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
                #print "1: jumpsquat velocity ", cactuarjumpsquatv
                #print "1: jumpsquat distancw " ,cactuarjumpsquat
            else :
                n = n + 1
                cactuarjumpsquatv = cactuarjumpsquatv - traction_high
                cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
                #print "2: jumpsquat velocity ", cactuarjumpsquatv
                #print "2: jumpsquat distancw " ,cactuarjumpsquat
        #print "jumpsquat distance is " ,cactuarjumpsquat
        cactuardashvelocity = ( wavedash2noj + wavedashframe10 + (cactuarframes - 1) * d_maxv + cactuarjumpsquat)  / (10 + cactuarframes + jumpsquat)
        
        print "Cactuardash velocity: " ,cactuardashvelocity
        
    elif d_initialv > d_maxv :
    
        zd = round((d_initialv - d_maxv)/traction_low - 0.5) #rounded down
        #print " zd is " ,zd
        if zd > (cactuarframes - 2):
            zd = (cactuarframes - 2)
        #print " zd is ", zd
        dash = 0
        n = 0
    
        while n <= zd:
            dash = dash + (d_initialv - traction_low*n)
            n = n + 1
        if zd == cactuarframes - 2 :
            dashv = d_initialv - traction_low*zd
        else :
            dashv = d_maxv
        #print "dashv is ",dashv
        #print "dash is ",dash
        dash = (dash + d_maxv*(cactuarframes - 2 - zd))
        #print "dash is " ,dash
        n = 1
        cactuarjumpsquat = 0
        cactuarjumpsquatv = d_maxv
        while n <= jumpsquat:
            if cactuarjumpsquatv <= maxwalk :
                n = n + 1
                cactuarjumpsquatv = cactuarjumpsquatv - traction_low
                cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
                #print "1: jumpsquat velocity ", cactuarjumpsquatv
                #print "1: jumpsquat distancw " ,cactuarjumpsquat
            else :
                n = n + 1
                cactuarjumpsquatv = cactuarjumpsquatv - traction_high
                cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
                #print "2: jumpsquat velocity ", cactuarjumpsquatv
                #print "2: jumpsquat distancw " ,cactuarjumpsquat
        #print "jumpsquat distance is " ,cactuarjumpsquat    
        cactuardash = ( wavedash2noj + wavedashframe10 + dash + cactuarjumpsquat)
        cactuardashvelocity =  cactuardash / (10 + cactuarframes + jumpsquat)
        
        #print "Cactuardash distance: " ,cactuardash
        print "cactuardash velocity: " ,cactuardashvelocity

    elif d_maxv > d_initialv :
    
        zd = round((d_maxv - d_initialv)/d_acceleration - 0.5) #rounded down
        if zd > (cactuarframes - 2):
            zd = (cactuarframes - 2)
    
        dash = 0
        n = 0
    
        while n <= zd:
            dash = dash + (d_initialv + d_acceleration*n)
            n = n + 1
    
        if zd == cactuarframes - 2 :
            dashv = d_initialv + d_acceleration*zd
        else :
            dashv = d_maxv
    
        dash = (dash + d_maxv*(cactuarframes - 2 - zd))
        #print "dash is " , dash
        n = 1
        cactuarjumpsquat = 0
        cactuarjumpsquatv = dashv
        while n <= jumpsquat:
            if cactuarjumpsquatv <= maxwalk :
                n = n + 1
                cactuarjumpsquatv = cactuarjumpsquatv - traction_low
                cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
                #print "1: jumpsquat velocity ", cactuarjumpsquatv
                #print "1: jumpsquat distancw " ,cactuarjumpsquat
            else :
                n = n + 1
                cactuarjumpsquatv = cactuarjumpsquatv - traction_high
                cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
                #print "2: jumpsquat velocity ", cactuarjumpsquatv
                #print "2: jumpsquat distancw " ,cactuarjumpsquat
        #print "jumpsquat distance is " ,cactuarjumpsquat
        cactuardash = ( wavedash2noj + wavedashframe10 + dash + cactuarjumpsquat)
        cactuardashvelocity =  cactuardash / (10 + cactuarframes + jumpsquat)
        
        #print "Cactuardash distance: " ,cactuardash
        print "cactuardash velocity: " ,cactuardashvelocity
    return cactuardashvelocity

#--------------------------------------------

def wavedashdistance(traction_low, traction_high, maxwalk, prompt):
    #------WAVEDASH Distance--------
    airdodgev1 = 2.79000
    airdodgev2 = 2.67039
    airdodgev3 = 1.97283

    #z = (w - tv) / th , rounded up, max 9+j
    #i = w - zth
  
    zw1_1 = round((airdodgev1 - maxwalk) / traction_high + 0.5)

    zw1_2 = airdodgev1 - (zw1_1*traction_high)

    zw2_1 = round((airdodgev2 - maxwalk)/traction_high + 0.5)

    zw2_2 = airdodgev2 - (zw2_1*traction_high)

    zw3_1 = round((airdodgev3 - maxwalk)/traction_high + 0.5)

    zw3_2 = airdodgev3 - (zw3_1*traction_high)


    n = 0
    wavedash1_1 = 0
    
    while n <= zw1_1 :
        wavedash1_1 = wavedash1_1 + airdodgev1 - traction_high * n
        n = n + 1

    m = 1
    wavedash1_2 = 0
    
    while (zw1_2 - traction_low * m) > 0 :  
        wavedash1_2 = wavedash1_2 + zw1_2 - traction_low * m
        m = m + 1
    
    wavedash1 = (wavedash1_1 + wavedash1_2)
    print "\nPerfect Waveland distance:" ,wavedash1


    n = 0
    wavedash2_1 = 0

    while n <= zw2_1 :
        wavedash2_1 = wavedash2_1 + airdodgev2 - traction_high * n
        n = n + 1

    m = 1
    wavedash2_2 = 0
    
    while (zw2_2 - traction_low * m) > 0 :  
        wavedash2_2 = wavedash2_2 + zw2_2 - traction_low * m
        m = m + 1
    
    wavedash2 = (wavedash2_1 + wavedash2_2)
    print "\nMax Angle wavedash distance: ",wavedash2

    n = 0
    wavedash3_1 = 0

    while n <= zw3_1 :
        wavedash3_1 = wavedash3_1 + airdodgev3 - traction_high * n
        n = n + 1

    m = 1
    wavedash3_2 = 0
    
    while (zw3_2 - traction_low * m) > 0 :  
        wavedash3_2 = wavedash3_2 + zw3_2 - traction_low * m
        m = m + 1
    
    wavedash3 = (wavedash3_1 + wavedash3_2)
    print "\nDiagonal notch wavedash distance: " ,wavedash3
    

    
    if prompt == "sheik" or prompt == "marth" or prompt == "link" or prompt == "dk" or prompt == "roy" or prompt == "bowser" :

        wavedash2 = (wavedash2 - 0.5*airdodgev2)
        wavedash3 = (wavedash3 - 0.5*airdodgev3)
        print "\Corrected Max angle Wavedash distance: *" ,wavedash2
        print "\Corrected Diagonal notch Wavedash distance: *" ,wavedash3


def start():
    sts, prompt = charselect()

    print "Stats: ", sts
    print "Character: ", prompt
    print "Tasks:\n> maxwalkandrun\n> wavedash\n> dash\n> foxtrot\n> rolling\n> dashdance\n> wavesurf\n> stats\n> all (can make ordered list with all)\n> smashturn"
    task = raw_input("Type a task:\n> ")
    if task == "maxwalkandrun":
        printwalkandmaxrun(sts[3], sts[7])
    elif task == "wavedash":
        wavedash1, wavedash2, wavedash3 = wavedashing(sts[5], sts[6], sts[7], sts[8], prompt, "test.txt")
        wavedashdistance(sts[5], sts[6], sts[7], prompt)
    elif task == "dash":
        dash = dashing(sts[0], sts[2], sts[3], sts[4], sts[5], "test.txt")
    elif task == "foxtrot":
        foxtrot = foxtrotting(sts[0], sts[1], sts[2], sts[3], sts[4], sts[5])
    elif task == "rolling":
        rollforward, rollbackward = rolling(sts[9], sts[10], sts[11])
    elif task == "dashdance":
        dashdancing(sts[0], sts[2], sts[3], sts[4], sts[5], sts[12])
        extendeddashdancing(sts[0], sts[2], sts[3], sts[4], sts[5], sts[12])
    elif task == "wavesurf":
        prompt2 = raw_input("Type of wavedash?\n> Perfect waveland (pw)\n> Max Angle wavedash (ma)\n> Diagonal notch wavedash (dn)\n\n> ")
        if prompt2 == "pw":
            wavesurf = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "pw", False)
        elif prompt2 == "ma":
            wavesurf = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "ma", False)
        elif prompt2 == "dn":
            wavesurf = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "dn", False)
    elif task == "stats":
        print "\nDash frames: ", sts[0]
        print "\nInitial Dash velocity: ", sts[2]
        print "\nDash acceleration: ", sts[4]
        print "\nMaximum dash velocity: ", sts[3]
        print "\nVelocity when high traction is in affect: >", sts[7]
        print "\nHigh traction: ", sts[6]
        print "\nLow traction: ", sts[5]
    elif task == "all":
        printwalkandmaxrun(sts[3], sts[7])
        wavedash1, wavedash2, wavedash3 = wavedashing(sts[5], sts[6], sts[7], sts[8], prompt)
        wavedashdistance(sts[5], sts[6], sts[7], prompt)
        dash = dashing(sts[0], sts[2], sts[3], sts[4], sts[5])
        foxtrot = foxtrotting(sts[0], sts[1], sts[2], sts[3], sts[4], sts[5])
        rollforward, rollbackward = rolling(sts[9], sts[10], sts[11])
        dashdancing(sts[0], sts[2], sts[3], sts[4], sts[5], sts[12])
        extendeddashdancing(sts[0], sts[2], sts[3], sts[4], sts[5], sts[12])
        wavesurf = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "ma", False)
        print "\nDash frames: ", sts[0]
        print "\nInitial Dash velocity: ", sts[2]
        print "\nDash acceleration: ", sts[4]
        print "\nMaximum dash velocity: ", sts[3]
        print "\nVelocity when high traction is in affect: >", sts[7]
        print "\nHigh traction: ", sts[6]
        print "\nLow traction: ", sts[5]
        prompt2 = raw_input("\nWould you like an ordered list of velocities? (Y/N)\n> ")
        if prompt2 == "Y" or prompt2 == "y":
            velocityorder(sts[3], sts[7], wavedash1, wavedash2, wavedash3, dash, foxtrot, rollforward, rollbackward, wavesurf)
        else:
            print "I'll take that as a no.\n"
    elif task == "smashturn":
        filename = "turns.txt"
        prompt2 = raw_input("From what state?\n> walk\n> wavedash\n> dash\n> all\n\n> ")
        if prompt2 == "walk":
            walksmashturn(sts[5], sts[7], filename)
        elif prompt2 == "wavedash":
            prompt3 = raw_input("What kind of wavedash?\n> perfect waveland (pw)\n> max angle (ma)\n> diagonal notch (dn)\n\n")
            if prompt3 == "pw":
                wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "pw", True)
                wdsmashturn(sts[5], sts[6], sts[7], "pw", wdf10, filename)
            elif prompt3 == "ma":
                wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "ma", True)
                wdsmashturn(sts[5], sts[6], sts[7], "ma", wdf10, filename)
            elif prompt3 == "dn":
                wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "dn", True)
                wdsmashturn(sts[5], sts[6], sts[7], "dn", wdf10, filename)
        elif prompt2 == "dash":
            dashsmashturnempty(sts[0], sts[2], sts[3], sts[4], sts[5], filename)
            dashsmashturnfull(sts[0], sts[2], sts[3], sts[4], sts[5], filename)
        elif prompt2 == "all":
            walksmashturn(sts[5], sts[7], prompt, filename)
            wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "pw", True)
            wdsmashturn(sts[5], sts[6], sts[7], "pw", wdf10, filename)
            wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "ma", True)
            wdsmashturn(sts[5], sts[6], sts[7], "ma", wdf10, filename)
            wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "dn", True)
            wdsmashturn(sts[5], sts[6], sts[7], "dn", wdf10, filename)
            dashsmashturnempty(sts[0], sts[2], sts[3], sts[4], sts[5], filename)
            dashsmashturnfull(sts[0], sts[2], sts[3], sts[4], sts[5], filename)
        
    elif task == "moonwalk":
        prompt2 = raw_input("\nWhat kind of moonwalk?\n> stationary\n> wavedash\n> walk\n\n> ")
        if prompt2 == "stationary":
            moonwalk(sts[1], sts[3], sts[4], sts[5], sts[6], sts[7], sts[12], sts[13], sts[14], 0)
        elif prompt2 == "wavedash":
            prompt3 = raw_input("\nWhat kind of wavedash?\n> perfect waveland (pw)\n> max angle wavedash (ma)\n> diagonal notch wavedash (dn)\n\n> ")
            if prompt3 == "pw" or prompt3 == "perfect waveland":
                wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "pw", True)
                moonwalk(sts[1], sts[3], sts[4], sts[5], sts[6], sts[7], sts[12], sts[13], sts[14], wdf10)
            elif prompt3 == "ma" or prompt3 == "max angle":
                wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "ma", True)
                moonwalk(sts[1], sts[3], sts[4], sts[5], sts[6], sts[7], sts[12], sts[13], sts[14], wdf10)
            elif prompt3 == "dn" or prompt3 == "diagonal notch":
                wdf10 = wavesurfing(sts[2], sts[3], sts[4], sts[5], sts[6], sts[7], sts[8], prompt, "dn", True)
                moonwalk(sts[1], sts[3], sts[4], sts[5], sts[6], sts[7], sts[12], sts[13], sts[14], wdf10)
        elif prompt2 == "walk":
            moonwalk(sts[1], sts[3], sts[4], sts[5], sts[6], sts[7], sts[12], sts[13], sts[14], sts[7])
    #elif task == "boostgrab":
        #boostgrab(da)
    else:
        print "Invalid task."
        start()


    start()
def wdsmashturn(traction_low, traction_high, maxwalk, wdtype, wdf10, filename):
    data = open(filename, 'a')
    data.write("-----WAVEDASH TURN-----\n")
    if wdtype == "pw":
        data.write("~~~~~PERFECT WAVELAND~~~~~\n\n")
    elif wdtype == "ma":
        data.write("~~~~~MAX ANGLE~~~~~\n\n")
    elif wdtype == "dn":
        data.write("~~~~~DIAGONAL NOTCH~~~~~\n\n")

    wdnextf = wdf10
    newv = wdf10
    i = 0
    while i < 5:
        smashturn = 0
        print "\nStarting velocity: ", newv
        data.write("Starting velocity: " + str(newv) + "\n")
        if newv > maxwalk:
            newv -= traction_high
        else:
            newv -= traction_low
        turn1 = newv
        print "From actionable frame %s\nFull distance: %s" % (i + 1, newv*2)
        data.write("From actionable frame " + str(i + 1) + "\nFull turn distance: " + str(newv*2) + " | From Turn 1 : " + str(newv) + "\n")
    
    
        while newv > 0:
            if newv > maxwalk:
                newv -= traction_high
            else:
                newv -= traction_low
                if newv < 0:
                    newv = 0
            smashturn += newv
        print "Empty distance:", (smashturn + turn1)
        data.write("Empty turn distance: " + str(smashturn + turn1) + " | From Turn 1: " + str(smashturn) + "\n\n")
    
        if wdnextf > maxwalk:
            wdnextf -= traction_high
        else:
            wdnextf -= traction_low
        newv = wdnextf
        i += 1
    data.write("\n")

def walksmashturn(traction_low, maxwalk, prompt, filename):
    data = open(filename, 'a')
    data.write("----------[[[[[[[[[" + prompt + "]]]]]]]]]---------\n")
    data.write("-----WALK TURN-----\n")

    print "\nMaxwalk Speed:", maxwalk
    data.write("Maxwalk Speed: " + str(maxwalk) + "\n")
    newv = maxwalk - traction_low
    print "Full distance: ", newv*2
    data.write("Full turn distance: " + str(newv * 2) + " | From Turn 1: " + str(newv) + "\n")
    smashturn = newv
    turn1 = newv
    while newv > 0:
        newv -= traction_low
        if newv < 0:
            newv = 0
        smashturn += newv
    print "Empty distance: ", smashturn
    data.write("Empty turn distance: " + str(smashturn) + " | From Turn 1: " + str(smashturn - turn1) + "\n")
    data.write("\n")
    
    
def dashsmashturnfull(d_x, d_initialv, d_maxv, d_acceleration, traction_low, filename):
    data = open(filename, 'a')
    data.write("-----DASH SMASH TURN (Full)-----\n")
    #previousvelocity*0.25 - traction = newvelocity :min 0
    if d_initialv == d_maxv:
        smashturn = (d_maxv * 0.25 - traction_low) * 2
        if smashturn < 0:
            smashturn = 0
        print "\nFrom any frame, smash turn (full) distance: " ,smashturn
        data.write("From any frame, smash turn (full) distance: " + str(smashturn) + " | From Turn 1: " + str(smashturn / 2) + "\n")
    
    elif d_initialv > d_maxv:
        print "\nSmash Turn Full from dash (Dash back):\nFrom Dash Frame | Distance\n---------------------------"
        data.write("Smash Turn Full from dash (Dash back):\nFrom Dash Frame | Distance | From Turn 1\n---------------------------\n")
        i = 0
        while i <= d_x:
            previousvelocity = d_initialv - (i * traction_low)
            if previousvelocity < d_maxv :
                previousvelocity = d_maxv
            smashturn = (previousvelocity * 0.25 - traction_low) * 2
            print "> %s | %s" % ((i + 1) , smashturn)
            data.write("> " + str(i + 1) + " | " + str(smashturn) + " | " + str(smashturn / 2) + "\n")
            i += 1
    
    else:
        print "\nSmash Turn Full from dash (Dash back):\nFrom Dash Frame | Distance\n---------------------------"
        data.write("Smash Turn Full from dash (Dash back):\nFrom Dash Frame | Distance | From Turn 1\n---------------------------\n")
        i = 0
        while i <= d_x:
            previousvelocity = d_initialv + (i * d_acceleration)
            if previousvelocity > d_maxv :
                previousvelocity = d_maxv
            smashturn = (previousvelocity * 0.25 - traction_low) * 2
            print "> %s | %s" % ((i + 1), smashturn)
            data.write("> " + str(i + 1) + " | " + str(smashturn) + " | " + str(smashturn / 2) + "\n")
            i += 1
    data.write("\n")

def dashsmashturnempty(d_x, d_initialv, d_maxv, d_acceleration, traction_low, filename):
    data = open(filename, 'a')
    data.write("-----DASH SMASH TURN (Empty)-----\n")
    if d_initialv == d_maxv:
        velocity = d_maxv * 0.25 - traction_low
        turn1 = velocity
        if velocity < 0:
            velocity = 0
        smashturn = 0
        while velocity > 0:
            smashturn = smashturn + velocity
            velocity = velocity - traction_low
        print "\nFrom any frame, smash turn (empty) distance: " ,smashturn
        data.write("From any frame, smash turn (empty) distance: " + str(smashturn) + " | " + str(smashturn - turn1) + "\n")
    
    elif d_initialv > d_maxv:
        print "\nSmash Turn Empty from dash (Empty pivot):\nFrom Dash Frame | Distance\n---------------------------"
        data.write("Smash Turn Empty from dash (Empty pivot):\nFrom Dash Frame | Distance | From Turn 1\n---------------------------\n")
        i = 0
        while i <= d_x:
            previousvelocity = d_initialv - (i * traction_low)
            if previousvelocity < d_maxv :
                previousvelocity = d_maxv
            velocity = previousvelocity * 0.25 - traction_low
            turn1 = velocity
            if velocity < 0:
                velocity = 0
            smashturn = 0
            while velocity > 0:
                smashturn = smashturn + velocity
                velocity = velocity - traction_low
            print "> %s | %s" % ((i + 1), smashturn)
            data.write("> " + str(i + 1) + " | " + str(smashturn) + " | " + str(smashturn - turn1) + "\n")
            i += 1
    
    else:
        print "\nSmash Turn Empty from dash (Empty pivot):\nFrom Dash Frame | Distance\n---------------------------"
        data.write("Smash Turn Empty from dash (Empty pivot):\nFrom Dash Frame | Distance | From Turn 1\n---------------------------\n")
        i = 0
        while i <= d_x:
            previousvelocity = d_initialv + (i * d_acceleration)
            if previousvelocity > d_maxv :
                previousvelocity = d_maxv
            velocity = previousvelocity * 0.25 - traction_low
            turn1 = velocity
            if velocity < 0:
                velocity = 0
            smashturn = 0
            while velocity > 0:
                smashturn = smashturn + velocity
                velocity = velocity - traction_low
            print "> %s | %s" % ((i + 1), smashturn)
            data.write("> " + str(i + 1) + " | " + str(smashturn) + " | " + str(smashturn - turn1) + "\n")
            i += 1
    data.write("\n")    

def moonwalk(d_y, d_maxv, d_acceleration, traction_low, traction_high, maxwalk, d_trueinitialv, damulti, turnrun, originalv):
    ang = 0.7
    angle = (1 - ang) / 0.0125
    danew = d_acceleration - (angle * damulti)
    newv = originalv
    newvtest = 0
    a = False
    b = 0
    j = 1
    while b != 2 and j != 11:
        moonwalk = 0
        newv2 = newv - d_trueinitialv
        if newv2 > 0:
            newv2 = newv2 - traction_low
            if newv2 < 0:
                newv2 = 0
        
        else:
            newv2 = newv2 + traction_low
            if newv2 > 0:
                newv2 = 0

        moonwalk = newv
        moonwalk += newv2    

        if j == 1:
            newv = - d_trueinitialv
            moonwalk = newv + traction_low

        moonwalk += (newv2*2 + danew*3)
        newv = newv2 + (danew * 2)

        i = 5
        while i <= d_y:
            newv = newv + d_acceleration
            if newv > d_maxv:
                newv = d_maxv
                a = True
            moonwalk = moonwalk + newv
            if i == d_y - 1:
                boostrunv = newv
            i += 1
        print "\nNo.%s moonwalk distance: %s" % (j, moonwalk)
        print "No.%s moonwalk avg velocity: %s" % (j, (moonwalk / d_y))
        boostrun = boostrunv
        # plus run1
    
        k = 0
        l = False
        while k <= turnrun:
            if boostrunv + d_acceleration < d_maxv:
                boostrunv += d_acceleration
            else :
                if l == False:
                    boostrunv = d_maxv
                    l = True
                else :
                    boostrunv += (d_acceleration - traction_low)
            boostrun += boostrunv
            k += 1
        print "~ Boostrun distance: %s" % boostrun
        print "~ Boostrun velocity: %s" % (boostrun / turnrun)
        print "~ Boostrun peak velocity: %s" % boostrunv
        print "~ Boostrun with moonwalk distance: %s" % (boostrun + moonwalk - newv)
        print "~ Boostrun with moonwalk velocity: %s" % ((boostrun + moonwalk - newv) / (d_y + turnrun))
    
        newv2 = newv
        i = 0
        while newv2 > 0:
            if newv2 > maxwalk:
                newv2 = newv2 - traction_high
            else:
                newv2 = newv2 - traction_low
            moonwalk = moonwalk + newv2
            i += 1
        moonwalk = moonwalk - newv2
        print "\nNo.%s moonwalk distance with drift: %s" % (j, moonwalk)
        print "No.%s moonwalk avg velocity with drift: %s" % (j, (moonwalk / (d_y + i)))
        print "No.%s moonwalk with drift, total frames: %s" % (j, (i + d_y))
        print "\n", "-" * 8, "+", "-" * 8
        if a == True:
            b += 1
            a = False
        j += 1
        if newvtest == newv:
            break
        newvtest = newv
    
    if j < 11:
        print "Chained moonwalk No.%s is the maximum, and all following moonwalks will have equal stats." % (j - 1)
    else :
        print "Chained moonwalks will gain less distance each time, or increase very slowly."

#def boostgrab():
    # dash 4 frames
    #

start()
Key
dx = maximum dash frames when holding forward before run is initiated
dy = maximum dash frames
du = initial dash velocity
dv = maximum dash velocity
da = dash acceleration

dtu = true initial dash velocity (for dashdancing only)

w = initial velocity on first frame of airdodge, universal values
- perfect waveland - w = 2.79000
- max angle - w = 2.67039
- diagonal notch angle - w = 1.97283

t = traction low
th = traction high (only for wavedashing) = traction low * 2
tv = velocity (and above) when th occurs (only for wavedashing) = max walk speed
j = jumpsquat frames

Wavedash / Waveland

z = (w - tv) / th , rounded up, max 9+j
i = w - zth

when z = 9+j ;
Wavedash/land = Sum[w - thn, {n, 0, z}] / (10+j)

when z < 9+j ;
Wavedash/land = ( Sum[w - thn, {n, 0, z}] + Sum[i - tn, {n, 1,(9+j-z)}] ) / (10+j)

Walk
Everyone has a set max walk speed. I can't think of a good way to compare it's acceleration with other movement options, so for now I will just compare the maximum.

Run
This is dv for all characters.

Dash

Most characters this will just be dv, but some characters do not start with their maximum velocity.

For those:

if dv > du ;
z = (dv - du) / da , rounded down max (dx - 2)
Dash = ( Sum[du + dan, {n, 0, z}] + dv(dx - z - 2) ) / (dx - 1)

if du > dv ;
z = (du - dv) / t , rounded down max (dx - 2)
Dash = ( Sum[du - tn, {n, 0, z}] + dv(dx - z - 2) ) / (dx - 1)


Foxtrot
If du = dv;
Foxtrot = ( Sum[dv - tn, {n, 1, (dy-dx)}] + dxdv - t(dy - dx) ) / dy

If dv > du;
z = (dv - du) / da, rounded down
Foxtrot = ( Sum[du + dan, {n, 0, z}] + dv(dx - z - 2) + Sum[dv - tn, {n, 1, (dy-dx)}] + dv - t(dy - dx) ) / dy

If du > dv;
z = (du - dv) / t, rounded down
If z < (dx - 2)
> Foxtrot = ( Sum[du - tn, {n, 0, z}] + dv(dx - z - 2) + Sum[dv - tn, {n, 1, (dy-dx)}] + dv - t(dy - dx) ) / dy
If z >= (dx - 2)
> Foxtrot = ( Sum[du - tn, {n, 0, (dy - 2)}] + du - t(dy - 2) ) / dy

Moonwalk
work in progress
Initial moonwalk
from wavedash back
z = w - 9t
i = (2dv - z) / da rounded down
Initial moonwalk = ( Sum[z - dv + dan, {n, 1, i}] + dv(dy - i - 1) + z ) / dy

Chained moonwalks
This only works for characters who reach their maximum dash velocity within the moonwalk, if they didn't they would slow down or speedup each moonwalk and there wouldn't be a good way to get an average velocity. For ones that speed up, I calculate their speed when at the maximum.

i = dv/da rounded down
Chained moonwalks = ( Sum[dan, {n, 1, i}] + dv(dy - i) ) / dy

Rolling
I just calculated distance/time, there doesn't seem to be any pattern in velocity values each frame.


Dash Dancing

If du = dv
=> vz = dv
If du > dv
=> vz = du - t(dx - 1) ; max dv
If dv > du
=> vz = du + da(dx - 1) ; min dv
vx = (vz/4) - t
vy = vx + dtu - tz ; max dv
if vx + dtu > dv
=> z = (vx + dtu - dv) / t ; rounded down, max dx - 1
=> vy = vx + dtu - t(dx - 1) ; min dv
=> Dash dance distance = Sum[vx + dtu - tn, {n, 1, z}] + dv(dx - z - 1) + 2((vy/4) - t)
if vx + dtu < dv
=> z = (dv - vx - dtu) / da ; rounded down, max dx - 1
=> vy = vx + dtu + da(dx - 1) ; max dv
=> Dash dance distance = Sum[vx + dtu + dan, {n, 1, z}] + dv(dx - z - 1) + 2((vy/4) - t)
if vx + dtu = dv
=> Dash dance distance = dv(dx - 1) + 2((dv/4) - t)
Dash dance average velocity = Dash dance distance / (dx + 1)

Extended dash dance (total 20 frames):

I made the equations straight into python
Code:
#--------EXTENEDED DASHDANCE--------------

if d_initialv == d_maxv :
    vframedx = d_maxv
    #print "1: vframedx is " ,vframedx
elif d_initialv > d_maxv :
    vframedx = d_initialv - traction_low * (d_x - 2)
    if vframedx < d_maxv:
        vframedx = d_maxv
    #print "2: vframedx is" ,vframedx

else :
    vframedx = d_initialv + d_acceleration * (d_x - 2)
    if vframedx > d_maxv :
        vframedx = d_maxv
    #print "3: vframedx is " ,vframedx

vframe20 = vframedx - traction_low * (20 - d_x)
#print "vframe20 is " , vframe20

vframe21 = - 1 *(( vframe20 / 4 ) - traction_low)
if vframe21 > 0:
    vframe21 = 0
#print "vframe21 is " , vframe21

if (vframe21 + d_trueinitialv) > d_maxv :
    #print "\nTesting>>>>>>>>>>>>>>"
    # z is how many frames of traction it takes to get from frame23 to dmaxv
    z = round(((vframe21 + d_trueinitialv - d_maxv) / traction_low) - 0.5)
    if z > d_x - 1:
        z = d_x - 1
    #print "1: z is " , z

    exdashdance = 0
    n = 1

    while n <= z :
        exdashdance = exdashdance + vframe21 + d_trueinitialv - traction_low * n
        n = n + 1
    if ( vframe21 + d_trueinitialv - traction_low*(z+1) ) > d_maxv :
        m = 1

        while m <= (20 - z) :
            exdashdance = exdashdance + vframe21 + d_trueinitialv - traction_low * (z + m)
            m = m + 1

        vframe41 = exdashdance + vframe21 + d_trueinitialv - traction_low * (z - m)
        #print "1-1:vframe41 is THIS NEEDS ATTENTION", vframe41
        exdashdance = exdashdance + 2 * ((vframe41/4) - traction_low)

    else :
        m = 1
        while m <= (20 - d_x) :
            exdashdance = exdashdance + d_maxv - traction_low * m
            m = m + 1
        #print "1: m is ",m
        vframe41 = d_maxv - traction_low * (m - 1)
        #print "1-2:vy is ", vframe41
        exdashdance = exdashdance + 2 * ((vframe41/4) - traction_low)

    exdashdance = exdashdance + d_maxv * ( d_x - z - 1)
    print "\n20 frame Extended Dash dance distance: " ,exdashdance

elif (vframe21 + d_trueinitialv) < d_maxv :
    #print "\ntest 1"
    # z is how many frames of acceleration it takes to get from frame23 to dmaxv
    z = round(((d_maxv - vframe21 - d_trueinitialv) / d_acceleration) - 0.5)
    if z > d_x - 1:
        z = d_x - 1
    #print "z is " , z

    exdashdance = 0
    n = 1

    while n <= z :
        exdashdance = exdashdance + vframe21 + d_trueinitialv + d_acceleration * n
        n = n + 1
        #print "exdashdance1 : " , exdashdance
    if ( vframe21 + d_trueinitialv + d_acceleration*(z+1) ) > d_maxv :
        m = 1

        if z == d_x - 1 :
            vframe21plusdx = vframe21 + d_trueinitialv + d_acceleration * z
            while m <= (20 - d_x) :
                exdashdance = exdashdance + vframe21plusdx - traction_low * m
                m = m + 1
            vy = vframe21 + d_trueinitialv + d_acceleration * z - traction_low * (20 - d_x)
            exdashdance = exdashdance + 2 * ((vy/4) - traction_low)
            #print "1:vy is ", vy

        else :
            exdashdance = exdashdance  + d_maxv * (d_x - z - 1)
            while m <= (20 - d_x) :
                exdashdance = exdashdance + d_maxv - traction_low * m
                m = m + 1
            vy = d_maxv - traction_low * (20 - d_x)
            frame42 = ((vy/4) - traction_low)
            #print "frame 42 is ", frame42
            exdashdance = exdashdance + 2 * ((vy/4) - traction_low)
            #print "2:vy is ", vy

    else :
        m = 1
        while m <= (20 - d_x) :
            exdashdance = exdashdance + vframe21 + d_trueinitialv  + d_acceleration * z - traction_low * m
            m = m + 1

        vy = vframe21 + d_trueinitialv + d_acceleration * z - traction_low * m
        #print "3:vy is ", vy
        exdashdance = exdashdance + 2 * ((vy/4) - traction_low)


    #exdashdance = exdashdance + d_maxv * (d_x - z - 1) + 2 * ((vy / 4) - traction_low)

    print "\n20 frame Extended Dash dance distance: " ,exdashdance


elif (vframe21 + d_trueinitialv) == d_maxv :

    exdashdance = 0
    m = 1
    while m <= (20 - d_x):
        exdashdance = exdashdance + traction_low * m
        m = m + 1
    vy = d_maxv - (20 - d_x) * traction_low

    exdashdance = exdashdance + d_maxv * (d_x - 1) + 2 * ((vy / 4) - traction_low)

    print "\20 frame Extended Dash dance distance: " ,exdashdance

exdashdancevelocity = exdashdance / 21

print "\nAverage Extended Dash dance velocity: " , exdashdancevelocity

Wavesurfing:

Same as above
Code:
#------------------WAVESURFING--------------------------

i = round((airdodgev2 - maxwalk)/traction_high + 0.5)
if i > 9 :
    i = 9
j = airdodgev2 - (i*traction_high)

if i >= 9:
    n = 0
    wavedash2noj = 0

    while n <= i :
        wavedash2noj = wavedash2noj + airdodgev2 - traction_high * n
        n = n + 1
    wavedashframe10 = airdodgev2 - traction_high * (n - 1)
    #print "wavedash frame 10 is " ,wavedashframe10
    if prompt == "sheik" or prompt == "marth" or prompt == "link" or prompt == "dk" or prompt == "roy" or prompt == "bowser" :
        wavedash2noj = wavedash2noj - 0.5*airdodgev2
    #print "\nAverage Max angle Wavedash velocity: no jumpsquat" ,wavedash2noj

else:

    n = 0
    wavedash2_1 = 0

    while n <= i :
        wavedash2_1 = wavedash2_1 + airdodgev2 - traction_high * n
        n = n + 1

    m = 1
    wavedash2_2 = 0

    while m <= (9 - i) :
        wavedash2_2 = wavedash2_2 + j - traction_low * m
        m = m + 1

    wavedashframe10 = j - traction_low * (m - 1)
    #print "wavedashframe10 is " ,wavedashframe10
    wavedash2noj = (wavedash2_1 + wavedash2_2)
    if prompt == "sheik" or prompt == "marth" or prompt == "link" or prompt == "dk" or prompt == "roy" or prompt == "bowser" :
        wavedash2noj = wavedash2noj - 0.5*airdodgev2
    #print "\nAverage Max angle Wavedash no jumpsquat:" ,wavedash2noj

cactuarframes = 5
print "Cactuardash dash frames: " , cactuarframes

if d_initialv == d_maxv :
    n = 1
    cactuarjumpsquat = 0
    cactuarjumpsquatv = d_maxv
    while n <= jumpsquat:
        if cactuarjumpsquatv <= maxwalk :
            n = n + 1
            cactuarjumpsquatv = cactuarjumpsquatv - traction_low
            cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
            #print "1: jumpsquat velocity ", cactuarjumpsquatv
            #print "1: jumpsquat distancw " ,cactuarjumpsquat
        else :
            n = n + 1
            cactuarjumpsquatv = cactuarjumpsquatv - traction_high
            cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
            #print "2: jumpsquat velocity ", cactuarjumpsquatv
            #print "2: jumpsquat distancw " ,cactuarjumpsquat
    #print "jumpsquat distance is " ,cactuarjumpsquat
    cactuardash = ( wavedash2noj + wavedashframe10 + (cactuarframes - 1) * d_maxv + cactuarjumpsquat)  / (10 + cactuarframes + jumpsquat)

    print "Cactuardash velocity: " ,cactuardash

elif d_initialv > d_maxv :

    zd = round((d_initialv - d_maxv)/traction_low - 0.5) #rounded down
    #print " zd is " ,zd
    if zd > (cactuarframes - 2):
        zd = (cactuarframes - 2)
    #print " zd is ", zd
    dash = 0
    n = 0

    while n <= zd:
        dash = dash + (d_initialv - traction_low*n)
        n = n + 1
    if zd == cactuarframes - 2 :
        dashv = d_initialv - traction_low*zd
    else :
        dashv = d_maxv
    #print "dashv is ",dashv
    #print "dash is ",dash
    dash = (dash + d_maxv*(cactuarframes - 2 - zd))
    #print "dash is " ,dash
    n = 1
    cactuarjumpsquat = 0
    cactuarjumpsquatv = d_maxv
    while n <= jumpsquat:
        if cactuarjumpsquatv <= maxwalk :
            n = n + 1
            cactuarjumpsquatv = cactuarjumpsquatv - traction_low
            cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
            #print "1: jumpsquat velocity ", cactuarjumpsquatv
            #print "1: jumpsquat distancw " ,cactuarjumpsquat
        else :
            n = n + 1
            cactuarjumpsquatv = cactuarjumpsquatv - traction_high
            cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
            #print "2: jumpsquat velocity ", cactuarjumpsquatv
            #print "2: jumpsquat distancw " ,cactuarjumpsquat
    #print "jumpsquat distance is " ,cactuarjumpsquat
    cactuardash = ( wavedash2noj + wavedashframe10 + dash + cactuarjumpsquat)
    cactuardashvelocity =  cactuardash / (10 + cactuarframes + jumpsquat)

    #print "Cactuardash distance: " ,cactuardash
    print "cactuardash velocity: " ,cactuardashvelocity

elif d_maxv > d_initialv :

    zd = round((d_maxv - d_initialv)/d_acceleration - 0.5) #rounded down
    if zd > (cactuarframes - 2):
        zd = (cactuarframes - 2)

    dash = 0
    n = 0

    while n <= zd:
        dash = dash + (d_initialv + d_acceleration*n)
        n = n + 1

    if zd == cactuarframes - 2 :
        dashv = d_initialv + d_acceleration*zd
    else :
        dashv = d_maxv

    dash = (dash + d_maxv*(cactuarframes - 2 - zd))
    #print "dash is " , dash
    n = 1
    cactuarjumpsquat = 0
    cactuarjumpsquatv = dashv
    while n <= jumpsquat:
        if cactuarjumpsquatv <= maxwalk :
            n = n + 1
            cactuarjumpsquatv = cactuarjumpsquatv - traction_low
            cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
            #print "1: jumpsquat velocity ", cactuarjumpsquatv
            #print "1: jumpsquat distancw " ,cactuarjumpsquat
        else :
            n = n + 1
            cactuarjumpsquatv = cactuarjumpsquatv - traction_high
            cactuarjumpsquat = cactuarjumpsquat + cactuarjumpsquatv
            #print "2: jumpsquat velocity ", cactuarjumpsquatv
            #print "2: jumpsquat distancw " ,cactuarjumpsquat
    #print "jumpsquat distance is " ,cactuarjumpsquat
    cactuardash = ( wavedash2noj + wavedashframe10 + dash + cactuarjumpsquat)
    cactuardashvelocity =  cactuardash / (10 + cactuarframes + jumpsquat)

    #print "Cactuardash distance: " ,cactuardash
    print "cactuardash velocity: " ,cactuardashvelocity

All movements
1. Jiggs: Rollout-Max charge......... 4.20:denzel:
2. Samus: Super wavedash............. 3.64000
3. Falcon: Boost Run................. 3.13901
4. Yoshi: Egg Roll Max velocity...... 3.00000
5. Fox: Boost Run.................... 2.57807
6. Luigi: Perfect waveland........... 2.56500
7. Pikachu: Edgecancel Quick Attack.. 2.48328
8. ICs: Perfect Waveland............. 2.47500
9. Mewtwo: Boost Run................. 2.44895
10.Mewtwo: Perfect waveland.......... 2.43000

11.Luigi: Max angle wavedash......... 2.34539
12.Fox: Edgecancel Illusion.......... 2.31564
13.Falco: Edgecancel Phantasm........ 2.30189

14.Falcon: Run....................... 2.30000 (that's so damn fast)
Dash dance length:
1. Falcon... 31.6100
2. Mewtwo... 24.0900
3. DK....... 22.4600
4. Marth.... 22.3500
5. Pikachu.. 21.8400
6. Roy...... 21.3175
7. Pichu.... 21.1000
8. Fox...... 20.8400
9. Ganon.... 19.0225
10.Peach.... 18.3600
11.Yoshi.... 18.3200
12.Y.Link... 18.2400
13.ICs...... 16.8700
14.Ness..... 16.3000
15.Kirby.... 15.7000
16.Zelda.... 15.6950
17.Falco.... 15.6150
18.Link..... 14.6450
19.Doc...... 13.6650
19.Mario.... 13.6650
21.Bowser... 13.4825
22.Jiggs.... 12.4950
23.Luigi.... 12.0000
24.Sheik.... 10.8500
25.Mr.G&W... 10.6650
26.Samus.... 10.5400


Dash dance velocity:
1. Falcon... 1.97563
2. Fox...... 1.73667
3. Pikachu.. 1.56000
4. Pichu.... 1.50714
5. DK....... 1.40375
6. Y.Link... 1.40308
7. Marth.... 1.39688
8. Sheik.... 1.35625
9. Roy...... 1.33234
10.Yoshi.... 1.30857
11.Falco.... 1.30125
12.Mewtwo... 1.26789
13.Doc...... 1.24227
13.Mario.... 1.24227
15.Kirby.... 1.20769
16.ICs...... 1.20500
17.Ganon.... 1.18891
18.Mr.G&W... 1.18500
19.Samus.... 1.17111
20.Ness..... 1.16429
21.Peach.... 1.14750
22.Link..... 1.12654
23.Luigi.... 1.09818
24.Zelda.... 0.98094
25.Bowser... 0.96304
26.Jiggs.... 0.96115


Dash frames before run:
1. Mewtwo... 18
2. Marth.... 15
2. Peach.... 15
2. Falcon... 15
2. Ganon.... 15
2. DK....... 15
2. Zelda.... 15
2. Roy...... 15
9. ICs...... 13
9. Pikachu.. 13
9. Yoshi.... 13
9. Ness..... 13
9. Bowser... 13
9. Pichu.... 13
15.Jiggs.... 12
15.Y.Link... 12
15.Link..... 12
15.Kirby.... 12
19.Fox...... 11
19.Falco.... 11
21.Doc...... 10
21.Luigi.... 10
21.Mario.... 10
24.Samus.... 8
24.Mr.G&W... 8
26.Sheik.... 7
Extended Dash dance length | Average velocity:
1. Falcon.... 42.11000 | 2.00524
2. Fox....... 37.62000 | 1.79143
3. Pikachu... 31.98000 | 1.52286
4. Marth..... 31.08000 | 1.48000
5. Pichu..... 30.19000 | 1.43762
6. DK........ 29.40000 | 1.40000
7. Roy....... 28.83000 | 1.37286
8. Yoshi..... 28.16500 | 1.34119
9. Y.Link.... 27.84000 | 1.32571
10.Sheik..... 27.05000 | 1.28810
11.Mewtwo.... 26.78000 | 1.27524
12.ICs....... 25.78625 | 1.22792
13.Falco..... 25.50500 | 1.21452
14.Doc....... 25.44000 | 1.21143
14.Mario..... 25.44000 | 1.21143
16.Ganon..... 24.77000 | 1.17952
17.Ness...... 24.75000 | 1.17857
18.Luigi..... 24.19750 | 1.15226
19.Kirby..... 23.93000 | 1.13952
20.Bowser.... 23.39000 | 1.11381
21.Peach..... 23.32000 | 1.11048
22.Samus..... 22.94000 | 1.09238
23.Link...... 21.15000 | 1.00714
24.Mr.G&W.... 20.22000 | 0.96286
25.Zelda..... 19.50000 | 0.92857
26.Jiggs..... 18.01500 | 0.85786
Initial Dash Velocity:
1. Falcon.... 2.16
2. Fox....... 2.02
3. Falco..... 1.82
4. Sheik..... 1.80
4. Pikachu... 1.80
4. Samus..... 1.80
7. Y.Link.... 1.72
7. Pichu..... 1.72
9. DK........ 1.60
10.Marth..... 1.56
11.Doc....... 1.50
11.Mario..... 1.50
11.Mr.G&W.... 1.50
14.Roy....... 1.47
15.Yoshi..... 1.43
16.ICs....... 1.40
16.Mewtwo.... 1.40
16.Kirby..... 1.40
19.Ness...... 1.36
20.Ganon..... 1.35
21.Luigi..... 1.34
22.Jiggs..... 1.31
23.Peach..... 1.30
23.Link...... 1.30
25.Zelda..... 1.10
26.Bowser.... 1.06
Max Dash Velocity (Run velocity):
1. Falcon.... 2.30
2. Fox....... 2.20
3. Sheik..... 1.80
3. Marth..... 1.80
3. Pikachu... 1.80
6. Pichu..... 1.72
7. Roy....... 1.61
8. Y.Link.... 1.60
8. DK........ 1.60
8. Yoshi..... 1.60
11.Falco..... 1.50
11.Doc....... 1.50
11.Mario..... 1.50
11.Mr.G&W.... 1.50
11.Bowser.... 1.50
16.ICs....... 1.40
16.Samus..... 1.40
16.Mewtwo.... 1.40
16.Ness...... 1.40
16.Kirby..... 1.40
21.Ganon..... 1.35
22.Luigi..... 1.34
23.Peach..... 1.30
23.Link...... 1.30
25.Jiggs..... 1.10
25.Zelda..... 1.10
Dash acceleration:
1. Falcon.... 0.16
2. Fox....... 0.12
2. Falco..... 0.12
2. Sheik..... 0.12
2. Peach..... 0.12
2. Samus..... 0.12
2. Y.Link.... 0.12
2. Link...... 0.12
2. Zelda..... 0.12
10. Pikachu... 0.10
10. Yoshi..... 0.10
10. Mewtwo.... 0.10
10. Pichu..... 0.10
10. Kirby..... 0.10
15.Ganon..... 0.09
16.Jiggs..... 0.085
17.Doc....... 0.08
17.Luigi..... 0.08
17.Mario..... 0.08
17.Mr.G&W.... 0.08
21.ICs....... 0.07
21.DK........ 0.07
21.Roy....... 0.07
24.Marth..... 0.06
24.Ness...... 0.06
24.Bowser.... 0.06
Max Angle Wavedash:
1. Luigi..... 2.34539
2. ICs....... 2.25039
3. Mewtwo.... 2.11039
4. Samus..... 1.95039
5. Doc....... 1.89039
5. Mario..... 1.89039
5. Mr.G&W.... 1.89039
5. Ness...... 1.89039
9. Marth..... 1.83788
10.Yoshi..... 1.83439
11.Fox....... 1.80270
12.Roy....... 1.74538
13.Kirby..... 1.71039
14.Y.Link.... 1.66468
15.Falco..... 1.66239
16.Pikachu... 1.65962
17.Falcon.... 1.63610
18.Sheik..... 1.62614
19.Ganon..... 1.62477
20.Bowser.... 1.57621
21.Pichu..... 1.54731
22.DK........ 1.51471
23.Jiggs..... 1.44639
24.Peach..... 1.33706
25.Zelda..... 1.26414
26.Link...... 1.26194
Perfect Waveland:
1. Luigi..... 2.565
2. ICs....... 2.475
3. Mewtwo.... 2.430
4. Marth..... 2.250
4. Doc....... 2.250
4. Samus..... 2.250
4. Mario..... 2.250
4. Yoshi..... 2.250
4. Roy....... 2.250
4. Mr.G&W.... 2.250
4. Ness...... 2.250
4. Bowser.... 2.250
13.Ganon..... 2.160
14.Fox....... 2.078
15.Falco..... 2.070
15.Sheik..... 2.070
15.Falcon.... 2.070
15.Y.Link.... 2.070
15.DK........ 2.070
15.Kirby..... 2.070
21.Jiggs..... 1.980
21.Pikachu... 1.980
23.Link...... 1.900
23.Pichu..... 1.900
25.Peach..... 1.890
25.Zelda..... 1.890


with jumpsquat
1. Luigi..... 2.46500
2. ICs....... 2.37000
3. Mewtwo.... 2.23000
4. Samus..... 2.07000
5. Marth..... 2.03571
6. Doc....... 2.01000
6. Mario..... 2.01000
6. Mr.G&W.... 2.01000
6. Ness...... 2.01000
10.Roy....... 1.95000
10.Yoshi..... 1.95000
12.Fox....... 1.89154
13.Sheik..... 1.84846
14.Kirby..... 1.83000
15.Y.Link.... 1.78429
16.Bowser.... 1.77000
17.Pikachu... 1.75154
18.Falco..... 1.75000
18.Falcon.... 1.75000
20.Ganon..... 1.74000
21.DK........ 1.72333
22.Pichu..... 1.66692
23.Jiggs..... 1.54800
24.Link...... 1.46500
25.Peach..... 1.45666
26.Zelda..... 1.35250
Traction:
1. Luigi..... 0.025
2. ICs....... 0.035
3. Mewtwo.... 0.04
4. Marth..... 0.06
4. Doc....... 0.06
4. Samus..... 0.06
4. Mario..... 0.06
4. Yoshi..... 0.06
4. Roy....... 0.06
4. Mr.G&W.... 0.06
4. Ness...... 0.06
4. Bowser.... 0.06
13.Ganon..... 0.07
14.Fox....... 0.08
14.Falco..... 0.08
14.Sheik..... 0.08
14.Falcon.... 0.08
14.Y.Link.... 0.08
14.DK........ 0.08
14.Kirby..... 0.08
21.Jiggs..... 0.09
21.Pikachu... 0.09
23.Peach..... 0.10
23.Link...... 0.10
23.Zelda..... 0.10
23.Pichu..... 0.10
Jumpsquat:
1. Fox....... 3
1. Sheik..... 3
1. ICs....... 3
1. Pikachu... 3
1. Samus..... 3
1. Pichu..... 3
1. Kirby..... 3
8. Marth..... 4
8. Falcon.... 4
8. Doc....... 4
8. Luigi..... 4
8. Mario..... 4
8. Y.Link.... 4
8. Mr.G&W.... 4
8. Ness...... 4
16.Falco..... 5
16.Jiggs..... 5
16.Peach..... 5
16.DK........ 5
16.Yoshi..... 5
16.Roy....... 5
16.Mewtwo.... 5
23.Ganon..... 6
23.Link...... 6
23.Zelda..... 6
26.Bowser.... 8
Velocity (and above when High traction is in effect (Also Max Walk Speed):
1. Fox....... 1.60
1. Marth..... 1.60
3. Falco..... 1.40
4. Pikachu... 1.24
4. Pichu..... 1.24
6. Sheik..... 1.20
6. Y.Link.... 1.20
6. Link...... 1.20
6. DK........ 1.20
6. Roy....... 1.20
11.Yoshi..... 1.15
12.Doc....... 1.10
12.Luigi..... 1.10
12.Mario..... 1.10
12.Mr.G&W.... 1.10
16.Samus..... 1.00
16.Mewtwo.... 1.00
18.ICs....... 0.95
19.Peach..... 0.85
19.Falcon.... 0.85
19.Kirby..... 0.85
22.Ness...... 0.84
23.Ganon..... 0.73
24.Jiggs..... 0.70
24.Zelda..... 0.70
26.Bowser.... 0.65
Perfect Waveland Total Distance:
1. Luigi..... 91.12
2. ICs....... 62.785
3. Mewtwo.... 55.69
4. Marth..... 44.37
5. Yoshi..... 38.97
5. Roy....... 38.97
7. Doc....... 37.92
7. Samus..... 37.92
7. Mario..... 37.92
7. Mr.G&W.... 37.92
11.Ness...... 36.18
12.Bowser.... 35.49
13.Fox....... 32.85
14.Falco..... 31.42
15.Sheik..... 30.15
15.Y.Link.... 30.15
15.DK........ 30.15
18.Ganon..... 30.90
19.Falcon.... 27.30
19.Kirby..... 27.30
21.Pikachu... 26.82
22.Link...... 24.40
22.Pichu..... 24.40
24.Jiggs..... 24.12
25.Peach..... 22.42
26.Zelda..... 21.73
Max Angle Wavedash Total Distance:
1. Luigi..... 84.10425
2. ICs....... 58.32528
3. Mewtwo.... 52.03794
4. Marth..... 40.25885
5. Yoshi..... 36.19248
6. Doc....... 35.14209
6. Samus..... 35.14209
6. Mario..... 35.14209
6. Mr.G&W.... 35.14209
10.Roy....... 34.85729
11.Ness...... 33.40131
12.Bowser.... 31.37573
13.Fox....... 31.14053
14.Falco..... 29.67014
15.Ganon..... 28.60975
16.Y.Link.... 27.20936
17.Sheik..... 25.87417
17.DK........ 25.87417
19.Falcon.... 25.38858
19.Pikachu... 25.38858
19.Kirby..... 25.38858
22.Jiggs..... 22.47741
23.Pichu..... 22.03741
24.Link...... 20.70222
25.Peach..... 20.29663
25.Zelda..... 20.29663
Diagonal Notch Wavedash Total Distance:
1. Luigi..... 51.41763
2. ICs....... 34.87386
3. Mewtwo.... 30.75471
4. Marth..... 25.50566
5. Yoshi..... 22.55358
6. Roy....... 21.56717
7. Doc....... 21.48075
7. Mario..... 21.48075
7. Mr.G&W.... 21.48075
10.Samus..... 20.52792
11.Fox....... 20.12226
12.Ness...... 19.69509
13.Falco..... 18.70943
14.Y.Link.... 17.45660
15.Bowser.... 17.40302
16.Ganon..... 16.70660
17.Sheik..... 16.47019
17.DK........ 16.47019
19.Pikachu... 14.99811
19.Falcon.... 14.65811
19.Kirby..... 14.65811
22.Pichu..... 14.16528
23.Link...... 13.17887
24.Jiggs..... 12.58962
25.Peach..... 12.21962
26.Zelda..... 11.54679
Character | 1st | 2nd | 3rd
Falcon | 6 | 1 | 0
Luigi | 3 | 0 | 0
Fox | 2 | 5 | 0
ICs | 1 | 3 | 0
Samus | 1 | 2 | 0
Sheik | 1 | 1 | 1
Marth | 1 | 1 | 1
Mewtwo | 1 | 1 | 3
Pikachu | 1 | 0 | 3
Jiggs | 1 | 0 | 0
Pichu | 1 | 0 | 0
Kirby | 1 | 0 | 0
Peach | 0 | 2 | 0
Zelda | 0 | 2 | 0
DK | 0 | 1 | 1
Ganon | 0 | 1 | 0
Y.Link | 0 | 1 | 0
Falco | 0 | 1 | 0
Link | 0 | 1 | 0
Roy | 0 | 1 | 0
Yoshi | 0 | 0 | 1

Fox

Average speeds:

Buffer rolling............ 1.01818
Diagonal notch Wavedash... 1.28975
Max Walk Speed............ 1.60000
Max angle Wavedash........ 1.80270
Foxtrot................... 1.94095
Wavesurfing............... 1.96302
Perfect Waveland.......... 2.07800
Dash...................... 2.17600
Run....................... 2.20000


Specials:
Edgecancel Illusion....... 2.31564

Dashdancing:
Dash dance length: 20.84
Average dash dance velocity: 1.73667
Dash frames before run: 11


Extended Dash dance (total 20 frames):
Extended Dash dance length: 37.62
Average extended dash dance velocity: 1.79143


Dashing:
Initial Dash velocity: 2.02
Dash acceleration: +0.12 per frame
Maximum Dash velocity: 2.20


Wavedashing:
Velocity when High Traction is in affect: >1.60
High traction: -0.16 per frame
Low traction: -0.08 per frame


Perfect waveland total distance: 32.85
Max angle wavedash total distance: 31.14053
Diagonal notch wavedash total distance: 20.12226

dx = 11
dy = 21
du = 2.02
dv = 2.2
da = 0.12

dtu = 1.9

t = 0.08
th = 0.16
tv = maxwalk = 1.6
j = 3

rollf = 33.6
rollb = 33.6
rollframes = 31 + 2 = 33
Falco

Average speeds:
Diagonal notch wavedash... 1.14616
Buffer rolling............ 1.16667
Foxtrot................... 1.29048
Max Walk speed............ 1.40000
Run....................... 1.50000

Dash...................... 1.58000
Max angle wavedash........ 1.66239
Wavesurfing............... 1.67971

Perfect waveland.......... 2.07000


Specials:
Edgecancel Phantasm....... 2.30189

Dashdancing:
Dash dance length: 15.615
Average dash dance velocity: 1.30125
Dash frames before run: 11


Extended Dash dance (total 20 frames):
Extended Dash dance length: 25.505
Average extended dash dance velocity: 1.21452


Dashing:
Initial Dash velocity: 1.82
Dash acceleration: +0.12 per frame
Low traction: -0.08 per frame
Maximum Dash velocity: 1.50*


*A higher initial dash velocity will result in traction slowing the character down, until the maximum velocity is reached.

Wavedashing:
Velocity when High Traction is in affect: >1.40
High traction: -0.16 per frame
Low traction: -0.08 per frame


Perfect waveland total distance: 31.42
Max angle wavedash total distance: 29.67014
Diagonal notch wavedash total distance: 18.70943

dx = 11
dy = 21
du = 1.82
dv = 1.5
da = 0.12

dtu = 1.9

t = 0.08
th = 0.16
tv = maxwalk = 1.4
j = 5

rollf = 38.5
rollb = 38.5
rollframes = 31 + 2 = 33
Sheik

Average speeds:
Diagonal notch wavedash... 1.09260
Roll backward............. 1.14303
Max Walk speed............ 1.20000
Roll forward.............. 1.21350
Foxtrot................... 1.34667
Max angle Wavedash........ 1.62614
Wavesurfing............... 1.72439
= Run..................... 1.80000
= Dash.................... 1.80000

Perfect Waveland.......... 2.07000


Dashdancing:
Dash dance length: 10.85
Average dash dance velocity: 1.35625
Dash frames before run: 7


Extended Dash dance (total 20 frames):
Extended Dash dance length: 27.05
Average extended dash dance velocity: 1.28810


Dashing:
Initial Dash velocity: 1.80
Dash acceleration: +0.12 per frame
Maximum Dash velocity: 1.80


Wavedashing:
Velocity when High Traction is in affect: >1.20
High traction: -0.16 per frame
Low traction: -0.08 per frame

Perfect waveland total distance: 30.15
Max angle wavedash total distance: 25.87417
Diagonal notch wavedash total distance: 16.47019

dx = 7
dy = 21
du = 1.8
dv = 1.8
da = 0.12

dtu = 1.7

t = 0.08
th = 0.16
tv = maxwalk = 1.2
j = 3

rollf = 40.04565
rollb = 37.71997
rollframes = 31 + 2 = 33
Marth

Average speeds:
Roll backward............. 1.08643
Roll forward.............. 1.08731

Diagonal notch Wavedash... 1.31523
Foxtrot................... 1.57778
Max Walk Speed............ 1.60000
Dash...................... 1.75714
Run....................... 1.80000
Wavesurfing............... 1.79469
Max angle Wavedash........ 1.83788

Perfect Waveland.......... 2.25000


Dashdancing:
Dash dance length: 22.35
Average dash dance velocity: 1.39688
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 31.08
Average extended dash dance velocity: 1.48


Dashing:
Initial Dash velocity: 1.56
Dash acceleration: +0.06 per frame
Maximum Dash velocity: 1.80


Wavedashing:
Velocity when High Traction is in affect: >1.60
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 44.37
Max angle wavedash total distance: 40.258845
Diagonal notch wavedash total distance: 25.50566

dx = 15
dy = 27
du = 1.56
dv = 1.8
da = 0.06

dtu = 1.5

t = 0.06
th = 0.12
tv = maxwalk = 1.6
j = 4

rollf = 40.23051
rollb = 40.19798
rollframes = 35 + 2 = 37
Jiggs

Average speeds:
Max walk speed............ 0.70000
Foxtrot................... 0.81435
Diagonal notch wavedash... 0.83883
Roll backward............. 0.91375
Roll forward.............. 0.91397
Run....................... 1.10000

Dash...................... 1.13273
Wavesurfing............... 1.37421

Max angle wavedash........ 1.44639
Perfect waveland.......... 1.98000


Specials:
Rollout:
- Minimum velocity: 0.30
- Maximum velocity: 4.20
- Each frame of charge: +0.09


(When charging, Jiggs has a velocity of 0.0001. It takes 6.33 hours to move across battlefield.)

Dashdancing:
Dash dance length: 12.495
Average dash dance velocity: 0.96115
Dash frames before run: 12

Extended Dash dance (total 20 frames):
Extended Dash dance length: 18.015
Average extended dash dance velocity: 0.85786

Dashing:
Initial Dash velocity: 1.31
Dash acceleration: +0.085 per frame
Low traction: -0.09 per frame
Maximum Dash velocity: 1.10*


*A higher initial dash velocity will result in traction slowing the character down, until the maximum velocity is reached.

Wavedashing:
Velocity when High Traction is in affect: >0.70
High traction: -0.18 per frame
Low traction: -0.09 per frame


Perfect waveland total distance: 24.12
Max angle wavedash total distance: 22.47741
Diagonal notch wavedash total distance: 12.58962

dx = 12
dy = 23
du = 1.31
dv = 1.1
da = 0.085

dtu = 1.4

t = 0.09
th = 0.18
tv = maxwalk = 0.7
j = 5

rollf = 32.90277
rollb = 32.89497
rollframes = 34 + 2 = 36
Peach

Average speeds:
Diagonal notch wavedash... 0.81283
Max Walk speed............ 0.85000
Roll backward............. 0.89484
Roll forward.............. 0.91874

Foxtrot................... 1.17143
=Dash..................... 1.30000

=Run...................... 1.30000
Max angle wavedash........ 1.33706
Wavesurfing............... 1.37871

Perfect waveland.......... 1.89000


Specials:
Floating:
- Maximum velocity: 1.10
- Acceleration: 0.07 per frame


Dashdancing:
Dash dance length: 18.36
Average dash dance velocity: 1.1475
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 23.32
Average extended dash dance velocity: 1.11048


Dashing:
Initial Dash velocity: 1.30
Dash acceleration: +0.12 per frame
Maximum Dash velocity: 1.30


Wavedashing:
Velocity when High Traction is in affect: >0.85
High traction: -0.20 per frame
Low traction: -0.10 per frame


Perfect waveland total distance: 22.42
Max angle wavedash total distance: 20.29663
Diagonal notch wavedash total distance: 12.21962

dx = 15
dy = 21
du = 1.3
dv = 1.3
da = 0.12

dtu = 1.2

t = 0.1
th = 0.2
tv = maxwalk = 0.85
j = 5

rollf = 30.31844
rollb = 29.52969
rollframes = 31 + 2 = 33
Falcon

Average speeds:
Max Walk speed............ 0.85000
Diagonal notch wavedash... 1.01854
Roll backward............. 1.02615
Roll forward.............. 1.02882

Max angle wavedash........ 1.63610
Wavesurfing............... 1.96812
Foxtrot................... 1.99786
Perfect waveland.......... 2.07000
Dash...................... 2.29000
Run....................... 2.30000


Specials:
Chained moonwalks......... 1.88857
Boost Run "Charlie"....... 3.13901


Dashdancing:
Dash dance length: 31.61
Average dash dance velocity: 1.97563
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 42.11
Average extended dash dance velocity: 2.00524


Dashing:
Initial Dash velocity: 2.16
Dash acceleration: +0.16 per frame
Maximum Dash velocity: 2.30


Wavedashing:
Velocity when High Traction is in affect: >0.85
High traction: -0.16 per frame
Low traction: -0.08 per frame


Perfect waveland total distance: 27.3
Max angle wavedash total distance: 25.38858
Diagonal notch wavedash total distance: 14.65811

dx = 15
dy = 28
du = 2.16
dv = 2.30
da = 0.16

dtu = 2

t = 0.08
th = 0.16
tv = maxwalk = 0.85
j = 4

rollf = 33.95093
rollb = 33.86285
rollframes = 31 + 2 = 33
ICs

Average speeds:
Max walk speed............ 0.95000
Roll forward.............. 1.04530
Roll backward............. 1.04545

Foxtrot................... 1.32667
=Dash..................... 1.40000
=Run...................... 1.40000
Diagonal notch wavedash... 1.55283
Wavesurfing............... 1.94302
Max angle wavedash........ 2.25039
Perfect waveland.......... 2.47500


Dashdancing:
Dash dance length: 16.87
Average dash dance velocity: 1.205
Dash frames before run: 13


Extended Dash dance (total 20 frames):
Extended Dash dance length: 25.78625
Average extended dash dance velocity: 1.22792


Dashing:
Initial Dash velocity: 1.40
Dash acceleration: +0.07 per frame
Maximum Dash velocity: 1.40


Wavedashing:
Velocity when High Traction is in affect: >0.95
High traction: -0.07 per frame
Low traction: -0.035 per frame


Perfect waveland total distance: 62.785
Max angle wavedash total distance: 58.32528
Diagonal notch wavedash total distance: 34.87386

dx = 13
dy = 21
du = 1.4
dv = 1.4
da = 0.07

dtu = 1.4

t = 0.035
th = 0.07
tv = maxwalk = 0.95
j = 3

rollf = 34.49494
rollb = 34.5
rollframes = 31 + 2 = 33
Pikachu

Average speeds:
Roll backward............. 1.00909
Diagonal notch wavedash... 1.08668
Roll forward.............. 1.11128
Max walk speed............ 1.24000
Foxtrot................... 1.57909

Max angle wavedash........ 1.65962
Wavesurfing............... 1.74191

=Dash..................... 1.80000
=Run...................... 1.80000

Perfect waveland.......... 1.98000


Specials:
Edgecancel Quick attack... 2.48328

Dashdancing:
Dash dance length: 21.84
Average dash dance velocity: 1.56
Dash frames before run: 13


Extended Dash dance (total 20 frames):
Extended Dash dance length: 31.98
Average extended dash dance velocity: 1.52286


Dashing:
Initial Dash velocity: 1.80
Dash acceleration: +0.10 per frame
Maximum Dash velocity: 1.80


Wavedashing:
Velocity when High Traction is in affect: >1.24
High traction: -0.18 per frame
Low traction: -0.09 per frame


Perfect waveland total distance: 26.82
Max angle wavedash total distance: 25.35858
Diagonal notch wavedash total distance: 14.99811

dx = 13
dy = 22
du = 1.8
dv = 1.8
da = 0.1

dtu = 1.8

t = 0.09
th = 0.18
tv = maxwalk = 1.24
j = 3

rollf = 36.67236
rollb = 33.3
rollframes = 31 + 2 = 33
Doc/Mario

Average speeds:
Chained moonwalks......... 0.86571
Roll backward............. 1.00000
Roll forward.............. 1.00004

Initial moonwalk.......... 1.04524
Max Walk Speed............ 1.10000
Diagonal notch Wavedash... 1.25712
Foxtrot................... 1.28000
= Run..................... 1.50000
= Dash.................... 1.50000
Wavesurfing............... 1.77384

Max angle Wavedash........ 1.89039
Perfect Waveland.......... 2.25000


Dashdancing:
Dash dance length: 13.665
Average dash dance velocity: 1.24227
Dash frames before run: 10


Extended Dash dance (total 20 frames):
Extended Dash dance length: 25.44
Average extended dash dance velocity: 1.21143


Dashing:
Initial Dash velocity: 1.50
Dash acceleration: +0.08 per frame
Maximum Dash velocity: 1.50


Wavedashing:
Velocity when High Traction is in affect: >1.10
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 37.92
Max angle wavedash total distance: 35.14209
Diagonal notch wavedash total distance: 21.48075

dx = 10
dy = 21
du = 1.5
dv = 1.5
da = 0.08

dtu = 1.5

t = 0.06
th = 0.12
tv = maxwalk = 1.1
j = 4

rollf = 33.00137
rollb = 33
rollframes = 31 + 2 = 33
Samus

Average speeds:
Roll backward............. 0.86084
Roll forward.............. 0.86094

Max walk speed............ 1.00000
Foxtrot................... 1.17273
Diagonal notch wavedash... 1.28052
Run....................... 1.40000

Dash...................... 1.62000
Wavesurfing............... 1.84524

Max angle wavedash........ 1.95039
Perfect waveland.......... 2.25000


Specials:
Super wavedash............ 3.64000
- Including startup....... 1.71641

*across battlefield

Dashdancing:
Dash dance length: 10.54
Average dash dance velocity: 1.17111
Dash frames before run: 8


Extended Dash dance (total 20 frames):
Extended Dash dance length: 22.94
Average extended dash dance velocity: 1.09238


Dashing:
Initial Dash velocity: 1.80
Dash acceleration: +0.12 per frame
Low traction: -0.06 per frame
Maximum Dash velocity: 1.40*

*A higher initial dash velocity will result in traction slowing the character down, until the maximum velocity is reached.

Wavedashing:
Velocity when High Traction is in affect: >1.00
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 37.92
Max angle wavedash total distance: 35.14209
Diagonal notch wavedash total distance: 20.52792


dx = 8
dy = 22
du = 1.8
dv = 1.4
da = 0.12

dtu = 1.86

t = 0.06
th = 0.12
tv = maxwalk = 1.0
j = 3

rollf = 39.60114
rollb = 39.59885
rollframes = 46
Ganon

Average speeds:
Max walk speed............ 0.73000
Diagonal notch wavedash... 1.01471
Foxtrot................... 1.09000
Roll backward............. 1.14251
Roll forward.............. 1.14549
=Dash..................... 1.35000

=Run...................... 1.35000
Wavesurfing............... 1.54497
Max angle wavedash........ 1.62477
Perfect waveland.......... 2.16000


Dashdancing:
Dash dance length: 19.0225
Average dash dance velocity: 1.18891
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 24.77
Average extended dash dance velocity: 1.17952


Dashing:
Initial Dash velocity: 1.35
Dash acceleration: +0.09 per frame
Maximum Dash velocity: 1.35


Wavedashing:
Velocity when High Traction is in affect: >0.73
High traction: -0.14 per frame
Low traction: -0.07 per frame


Perfect waveland total distance: 30.9
Max angle wavedash total distance: 28.60975
Diagonal notch wavedash total distance: 16.7066

dx = 15
dy = 28
du = 1.35
dv = 1.35
da = 0.09

dtu = 1.3

t = 0.07
th = 0.14
tv = maxwalk = 0.73
j = 6

rollf = 37.80104
rollb = 37.70296
rollframes = 31 + 2 = 33
Luigi

Average speeds:
Max Walk speed............ 1.10000
Roll backward............. 1.13636
Roll forward.............. 1.13641

Foxtrot................... 1.24833
=Dash..................... 1.34000
=Run...................... 1.34000
Diagonal notch wavedash... 1.64783

Wavesurfing............... 1.94180
Max angle wavedash........ 2.34539
Perfect waveland.......... 2.56500


Specials:
Cyclone................... 1.12835
- Maximum velocity: 2.35
- Acceleration: 0.2 per frame


Dashdancing:
Dash dance length: 12.0
Average dash dance velocity: 1.09818
Dash frames before run: 10


Extended Dash dance (total 20 frames):
Extended Dash dance length: 24.1975
Average extended dash dance velocity: 1.15226


Dashing:
Initial Dash velocity: 1.34
Dash acceleration: +0.08 per frame
Maximum Dash velocity: 1.34


Wavedashing:
Velocity when High Traction is in affect: >1.10
High traction: -0.05 per frame
Low traction: -0.025 per frame


Perfect waveland total distance: 91.12
Max angle wavedash total distance: 84.10425
Diagonal notch wavedash total distance: 51.41763

dx = 10
dy = 21
du = 1.34
dv = 1.34
da = 0.08

dtu = 1.3

t = 0.025
th = 0.05
tv = maxwalk = 1.1
j = 4

rollf = 37.50156
rollb = 37.5
rollframes = 31 + 2 = 33
Young Link

Average speeds:
Roll backward............. 0.73846
Roll forward.............. 0.73967

Foxtrot................... 1.10133
Diagonal notch wavedash... 1.13854
Maxwalk speed............. 1.20000
Run....................... 1.60000

Dash...................... 1.61455
Max angle wavedash........ 1.66468
Wavesurfing............... 1.69338
Perfect waveland.......... 2.07000


Specials:
Chained moonwalks......... 1.18000

Dashdancing:
Dash dance length: 18.24
Average dash dance velocity: 1.40308
Dash frames before run: 12


Extended Dash dance (total 20 frames):
Extended Dash dance length: 27.84
Average extended dash dance velocity: 1.32571


Dashing:
Initial Dash velocity: 1.72
Dash acceleration: +0.12 per frame
Low traction: -0.08 per frame
Maximum Dash velocity: 1.60*

*A higher initial dash velocity will result in traction slowing the character down, until the maximum velocity is reached.

Wavedashing:
Velocity when High Traction is in affect: >1.20
High traction: -0.16 per frame
Low traction: -0.08 per frame


Perfect waveland total distance: 30.15
Max angle wavedash total distance: 27.20936
Diagonal notch wavedash total distance: 17.4566

dx = 12
dy = 30
du = 1.72
dv = 1.6
da = 0.12

dtu = 1.8

t = 0.08
th = 0.16
tv = maxwalk = 1.2
j = 4

rollf = 28.84717
rollb = 28.8
rollframes = 37 + 2 = 39
Link

Average speeds:
Foxtrot................... 0.67000
Diagonal notch wavedash... 0.82368
Roll backward............. 0.93846
Roll forward.............. 0.94000

Maxwalk................... 1.20000
Max angle wavedash........ 1.26194

=Dash..................... 1.30000
=Run...................... 1.30000
Wavesurfing............... 1.32091
Perfect waveland.......... 1.90000


Specials:
Chained moonwalks......... 1.08667

Dashdancing:
Dash dance length: 14.645
Average dash dance velocity: 1.12654
Dash frames before run: 12


Extended Dash dance (total 20 frames):
Extended Dash dance length: 21.15
Average extended dash dance velocity: 1.00714


Dashing:
Initial Dash velocity: 1.3
Dash acceleration: +0.12 per frame
Maximum Dash velocity: 1.3


Wavedashing:
Velocity when High Traction is in affect: >1.20
High traction: -0.2 per frame
Low traction: -0.1 per frame


Perfect waveland total distance: 24.4
Max angle wavedash total distance: 20.70222
Diagonal notch wavedash total distance: 13.17887

dx = 12
dy = 30
du = 1.3
dv = 1.3
da = 0.12

dtu = 1.3

t = 0.1
th = 0.2
tv = maxwalk = 1.2
j = 6

rollf = 36.65994
rollb = 36.6
rollframes = 37 + 2 = 39
DK

Average speeds:
Diagonal notch wavedash... 1.02707
Roll backward............. 1.06046
Roll forward.............. 1.16583

Maxwalk speed............. 1.20000
Foxtrot................... 1.24000
Max angle wavedash........ 1.51471

Wavesurfing............... 1.58195
=Dash..................... 1.60000
=Run...................... 1.60000

Perfect waveland.......... 2.07000


Dashdancing:
Dash dance length: 22.46
Average dash dance velocity: 1.40375
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 29.4
Average extended dash dance velocity: 1.4


Dashing:
Initial Dash velocity: 1.6
Dash acceleration: +0.07 per frame
Maximum Dash velocity: 1.6


Wavedashing:
Velocity when High Traction is in affect: >1.20
High traction: -0.16 per frame
Low traction: -0.08 per frame


Perfect waveland total distance: 30.15
Max angle wavedash total distance: 25.87417
Diagonal notch wavedash total distance: 16.47019

dx = 15
dy = 30
du = 1.6
dv = 1.6
da = 0.07

dtu = 1.6

t = 0.08
th = 0.16
tv = maxwalk = 1.2
j = 5

rollf = 38.4725
rollb = 34.99518
rollframes = 31 + 2 = 33
Yoshi

Average speeds:
Roll forward.............. 0.80301
Roll backward............. 0.80306

Maxwalk................... 1.15000
Diagonal notch wavedash... 1.24483
Foxtrot................... 1.35077
Dash...................... 1.58000

Run....................... 1.60000
Wavesurfing............... 1.76571
Max angle wavedash........ 1.83439
Perfect waveland.......... 2.25000


Specials:
Egg roll:
- Maximum velocity: 3.00
- Acceleration: 0.15 per frame when < 2.1
- ............. 0.10 per frame when > 2.1


Dashdancing:
Dash dance length: 18.32
Average dash dance velocity: 1.30857
Dash frames before run: 13


Extended Dash dance (total 20 frames):
Extended Dash dance length: 28.165
Average extended dash dance velocity: 1.34119


Dashing:
Initial Dash velocity: 1.43
Dash acceleration: +0.1 per frame
Maximum Dash velocity: 1.6


Wavedashing:
Velocity when High Traction is in affect: >1.15
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 38.97
Max angle wavedash total distance: 36.19248
Diagonal notch wavedash total distance: 22.55358

dx = 13
dy = 26
du = 1.43
dv = 1.6
da = 0.1

dtu = 1.33

t = 0.06
th = 0.12
tv = maxwalk = 1.15
j = 5

rollf = 31.31754
rollb = 31.31937
rollframes = 37 + 2 = 39
Zelda

Average speeds:
Diagonal notch wavedash... 0.69783
Maxwalk speed............. 0.70000
Roll backward............. 0.94091
Roll forward.............. 1.00662

=Dash..................... 1.10000
=Run...................... 1.10000
Wavesurfing............... 1.23687
Max angle wavedash........ 1.26414
Perfect waveland.......... 1.89000


Specials:
Edgecancel Farore's Wind.. 1.55931

Dashdancing:
Dash dance length: 15.695
Average dash dance velocity: 0.98094
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 19.5
Average extended dash dance velocity: 0.92857


Dashing:
Initial Dash velocity: 1.1
Dash acceleration: +0.12 per frame
Maximum Dash velocity: 1.1


Wavedashing:
Velocity when High Traction is in affect: >0.70
High traction: -0.2 per frame
Low traction: -0.1 per frame


Perfect waveland total distance: 21.73
Max angle wavedash total distance: 20.29663
Diagonal notch wavedash total distance: 11.54679

dx = 15
dy = 22
du = 1.1
dv = 1.1
da = 0.12

dtu = 1.1

t = 0.1
th = 0.2
tv = maxwalk = 0.7
j = 6

rollf = 33.21847
rollb = 32.34975
rollframes = 31 + 2 = 33
Roy

Average speeds:
Roll backward............. 1.02030
Roll forward.............. 1.02113

Diagonal notch wavedash... 1.17907
Maxwalk speed............. 1.20000
Foxtrot................... 1.40222
Dash...................... 1.59500

Run....................... 1.61000
Wavesurfing............... 1.70495
Max angle wavedash........ 1.74538
Perfect waveland.......... 2.25000


Dashdancing:
Dash dance length: 21.3175
Average dash dance velocity: 1.33234
Dash frames before run: 15


Extended Dash dance (total 20 frames):
Extended Dash dance length: 28.83
Average extended dash dance velocity: 1.37286


Dashing:
Initial Dash velocity: 1.47
Dash acceleration: +0.07 per frame
Maximum Dash velocity: 1.61


Wavedashing:
Velocity when High Traction is in affect: >1.20
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 38.97
Max angle wavedash total distance: 34.85729
Diagonal notch wavedash total distance: 21.56717

dx = 15
dy = 27
du = 1.47
dv = 1.61
da = 0.07

dtu = 1.4

t = 0.06
th = 0.12
tv = maxwalk = 1.2
j = 5

rollf = 37.7817
rollb = 37.75116
rollframes = 35 + 2 = 37
Mewtwo

Average speeds:
Maxwalk................... 1.00000
Foxtrot................... 1.29379
Roll forward.............. 1.33249
Roll backward............. 1.33305

=Dash..................... 1.40000
=Run...................... 1.40000
Diagonal notch wavedash... 1.41550

Wavesurfing............... 1.82271
Max angle wavedash........ 2.11039
Perfect waveland.......... 2.43000


Specials:
Aerial Teleport........... 1.89454

Dashdancing:
Dash dance length: 24.09
Average dash dance velocity: 1.26789
Dash frames before run: 18


Extended Dash dance (total 20 frames):
Extended Dash dance length: 26.78
Average extended dash dance velocity: 1.27524


Dashing:
Initial Dash velocity: 1.4
Dash acceleration: +0.1 per frame
Maximum Dash velocity: 1.4


Wavedashing:
Velocity when High Traction is in affect: >1.00
High traction: -0.08 per frame
Low traction: -0.04 per frame


Perfect waveland total distance: 55.69
Max angle wavedash total distance: 52.03794
Diagonal notch wavedash total distance: 30.75471

dx = 18
dy = 29
du = 1.4
dv = 1.4
da = 0.1

dtu = 1.4

t = 0.04
th = 0.08
tv = maxwalk = 1
j = 5

rollf = 51.96725
rollb = 51.98896
rollframes = 37 + 2 = 39
Mr.G&W

Average speeds:
Buffer rolling............ 0.77189
Max Walk speed............ 1.10000
Diagonal notch wavedash... 1.25712
Foxtrot................... 1.30941
=Dash..................... 1.50000

=Run...................... 1.50000
Wavesurfing............... 1.77338
Max angle wavedash........ 1.89039
Perfect waveland.......... 2.25000


Dashdancing:
Dash dance length: 10.665
Average dash dance velocity: 1.185
Dash frames before run: 8


Extended Dash dance (total 20 frames):
Extended Dash dance length: 20.22
Average extended dash dance velocity: 0.96286


Dashing:
Initial Dash velocity: 1.5
Dash acceleration: +0.08 per frame
Maximum Dash velocity: 1.5


Wavedashing:
Velocity when High Traction is in affect: >1.10
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 37.92
Max angle wavedash total distance: 35.14209
Diagonal notch wavedash total distance: 21.48075

dx = 8
dy = 17
du = 1.5
dv = 1.5
da = 0.08

dtu = 1.5

t = 0.06
th = 0.12
tv = maxwalk = 1.1
j = 4

rollf = 28.56
rollb = 28.56
rollframes = 35 + 2 = 37
Ness

Average speeds:
Max Walk speed............ 0.84000
Roll forward.............. 0.90929
Roll backward............. 1.06143
Foxtrot................... 1.18240
Diagonal notch wavedash... 1.21854

Dash...................... 1.39667

Run....................... 1.40000
Wavesurfing............... 1.72917
Max angle wavedash........ 1.89039
Perfect waveland.......... 2.25000


Dashdancing:
Dash dance length: 16.3
Average dash dance velocity: 1.16429
Dash frames before run: 13


Extended Dash dance (total 20 frames):
Extended Dash dance length: 24.75
Average extended dash dance velocity: 1.17857


Dashing:
Initial Dash velocity: 1.36
Dash acceleration: +0.06 per frame
Maximum Dash velocity: 1.4


Wavedashing:
Velocity when High Traction is in affect: >0.84
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 36.18
Max angle wavedash total distance: 33.40131
Diagonal notch wavedash total distance: 19.69509

dx = 13
dy = 25
du = 1.36
dv = 1.4
da = 0.06

dtu = 1.3

t = 0.06
th = 0.12
tv = maxwalk = 0.84
j = 4

rollf = 30.00653
rollb = 35.02735
rollframes = 31 + 2 = 33
Bowser

Average speeds:
Roll backward............. 0.64092
Max Walk speed............ 0.65000
Roll forward.............. 0.70683
Diagonal notch wavedash... 0.94803
Foxtrot................... 1.12207

Dash...................... 1.34667
Wavesurfing............... 1.39648
Run....................... 1.50000
Max angle wavedash........ 1.57621

Perfect waveland.......... 2.25000


Specials:
Whirling fortress......... 0.95051
- Maximum velocity: 1.5
- Acceleration: 0.15 per frame


Dashdancing:
Dash dance length: 13.4825
Average dash dance velocity: 0.96304
Dash frames before run: 13


Extended Dash dance (total 20 frames):
Extended Dash dance length: 23.39
Average extended dash dance velocity: 1.11381


Dashing:
Initial Dash velocity: 1.06
Dash acceleration: +0.06 per frame
Maximum Dash velocity: 1.5


Wavedashing:
Velocity when High Traction is in affect: >0.65
High traction: -0.12 per frame
Low traction: -0.06 per frame


Perfect waveland total distance: 35.49
Max angle wavedash total distance: 31.37573
Diagonal notch wavedash total distance: 17.40302

dx = 13
dy = 29
du = 1.06
dv = 1.5
da = 0.06

dtu = 1

t = 0.06
th = 0.12
tv = maxwalk = 0.65
j = 8

rollf = 28.98
rollb = 26.27791
rollframes = 39 + 2 = 41
Pichu

Average speeds:
Buffer rolling............ 1.00000
Diagonal notch wavedash... 1.04975
Max Walk speed............ 1.24000
Foxtrot................... 1.47455
Max angle wavedash........ 1.54731

Wavesurfing............... 1.64525
=Dash..................... 1.72000
=Run...................... 1.72000

Perfect waveland.......... 1.90000


Specials:
Agility slide............. 1.65232
Edgecancel Agility........ 1.64450


Dashdancing:
Dash dance length: 21.1
Average dash dance velocity: 1.50714
Dash frames before run: 13


Extended Dash dance (total 20 frames):
Extended Dash dance length: 30.19
Average extended dash dance velocity: 1.43762


Dashing:
Initial Dash velocity: 1.72
Dash acceleration: +0.1 per frame
Maximum Dash velocity: 1.72


Wavedashing:
Velocity when High Traction is in affect: >1.24
High traction: -0.2 per frame
Low traction: -0.1 per frame


Perfect waveland total distance: 24.4
Max angle wavedash total distance: 22.03741
Diagonal notch wavedash total distance: 14.16528

dx = 13
dy = 22
du = 1.72
dv = 1.72
da = 0.1

dtu = 1.8

t = 0.1
th = 0.2
tv = maxwalk = 1.24
j = 3

rollf = 40
rollb = 38
rollframes = 31 + 2 = 33
Kirby

Average speeds:
Max walk speed............ 0.85000
Roll backward............. 0.97561
Roll forward.............. 0.97584

Diagonal notch wavedash... 1.07437
Foxtrot................... 1.13217
=Dash..................... 1.40000

=Run...................... 1.40000
Wavesurfing............... 1.64302
Max angle wavedash........ 1.71039
Perfect waveland.......... 2.07000


Dashdancing:
Dash dance length: 15.7
Average dash dance velocity: 1.20769
Dash frames before run: 12


Extended Dash dance (total 20 frames):
Extended Dash dance length: 23.93
Average extended dash dance velocity: 1.13952


Dashing:
Initial Dash velocity: 1.4
Dash acceleration: +0.1 per frame
Maximum Dash velocity: 1.4


Wavedashing:
Velocity when High Traction is in affect: >0.85
High traction: -0.16 per frame
Low traction: -0.08 per frame


Perfect waveland total distance: 27.3
Max angle wavedash total distance: 25.38858
Diagonal notch wavedash total distance: 14.65811

dx = 12
dy = 23
du = 1.4
dv = 1.4
da = 0.1

dtu = 1.4

t = 0.08
th = 0.16
tv = maxwalk = 0.85
j = 3

rollf = 32.20272
rollb = 32.19508
rollframes = 31 + 2 = 33
 
Last edited:
Joined
Apr 10, 2014
Messages
621
Location
Chicago, IL
3DS FC
2019-9854-8378
NNID
Shado_Chimera
#2
Are you doing every character? (Can you please do every character?)

Which roll is the one you used in these and are they any different in length?

Is anyone faster when using running jumps or special moves (like Jiggs or Falco)? I know it says ground movement speed but I'm asking anyway.
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#3
Are you doing every character? (Can you please do every character?)
Eventually yes. Once I complete the universal equations, I won't take long to do everyone. I just need to tweak some stuff for character's with a faster initial dash velocity (falco). I'm also working on a dash dance velocity and distance equation, and I'll finish the moonwalk one eventually. I just wanted to post something last night before I slept, I didn't anticipate so many variables.

Which roll is the one you used in these and are they any different in length?
If you are asking left/right/forwards/backwards, then they are all the same.

edit: apparently some are different lol. I will mention ones that have different values.

Is anyone faster when using running jumps or special moves (like Jiggs or Falco)? I know it says ground movement speed but I'm asking anyway.
Well I do want to eventually bring air movement into it, but I want to finish up the ground first. I was curious though and tested Falco for you. He actually can move faster by dash shff then by running, but only a little bit.
 
Last edited:

anikom15

Smash Apprentice
Joined
Jun 16, 2014
Messages
180
Location
Southern California
#7
FWIW, you could calculate measurements in feet and meters by calibrating the scale with the home run contest.

I didn't realize Yoshi's was smaller than FoD O_o
 
Last edited:

Bones0

Smash Legend
Joined
Aug 31, 2005
Messages
11,148
Location
Jarrettsville, MD
#8
Run....................... 1.50000
Dash...................... 1.58000
Max angle wavedash........ 1.66239
Based on these values, can I assume it's faster to dash->WD across a stage than it is to run? Or have you simply calculated the speed of the actual WD movement and not the overall speed including time spent in jumpsquat? I see jumpsquat in the calculation, but I'm not sure if that's removing time spent in js or accounting for it.

Also, it'd be neat if you could do Falco's Phantasm because I've heard it's his fastest movement even counting the startup/cooldown, but idk how true that is. Either way, thanks for all this info.
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#10
Based on these values, can I assume it's faster to dash->WD across a stage than it is to run? Or have you simply calculated the speed of the actual WD movement and not the overall speed including time spent in jumpsquat? I see jumpsquat in the calculation, but I'm not sure if that's removing time spent in js or accounting for it.

Also, it'd be neat if you could do Falco's Phantasm because I've heard it's his fastest movement even counting the startup/cooldown, but idk how true that is. Either way, thanks for all this info.
I calculated wavedash speed including jumpsquat frames as if they were doing a 2nd wavedash. So they have leftover velocity during their jumpsquats. I felt like that was the fairest way to do it. There is a little more to cactuardashing. You need to consider the velocity at which you start a jump. This is especially true for Falco, because he has a faster initial dash velocity then his maximum, so I could make a whole bunch of different cactuardashing speeds from starting a wavedash at various points of the dash. I think I'll make an equation that finds the best possible frame to start the wavedash and find it's average speed. I can tell you that cactuardashing will definitely be faster then just running, falco has all the good tools for that, I'll get back to you on how much faster it is. I'll make the cactuardash equation after I've done the dashdance speed/length one.

Phantasm............ 2.30189

A little rough, but it'll do. I used a phantasm on the second airborne from a jump so it had good velocity during startup, and 2 frames of landing lag, before it was edgecancelled.
 

Bones0

Smash Legend
Joined
Aug 31, 2005
Messages
11,148
Location
Jarrettsville, MD
#11
I calculated wavedash speed including jumpsquat frames as if they were doing a 2nd wavedash. So they have leftover velocity during their jumpsquats. I felt like that was the fairest way to do it. There is a little more to cactuardashing. You need to consider the velocity at which you start a jump. This is especially true for Falco, because he has a faster initial dash velocity then his maximum, so I could make a whole bunch of different cactuardashing speeds from starting a wavedash at various points of the dash. I think I'll make an equation that finds the best possible frame to start the wavedash and find it's average speed. I can tell you that cactuardashing will definitely be faster then just running, falco has all the good tools for that, I'll get back to you on how much faster it is. I'll make the cactuardash equation after I've done the dashdance speed/length one.

Phantasm............ 2.30189

A little rough, but it'll do. I used a phantasm on the second airborne from a jump so it had good velocity during startup, and 2 frames of landing lag, before it was edgecancelled.
By Cactuar dashing, I'm assuming you mean dash->WD? Calculating it as if it were two consecutive WDs seems the most intuitive. I actually didn't mean a ledge-cancelled Phantasm, just one where you jump slightly and get the full landing lag, but that's still interesting, thanks.
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#12
By Cactuar dashing, I'm assuming you mean dash->WD? Calculating it as if it were two consecutive WDs seems the most intuitive. I actually didn't mean a ledge-cancelled Phantasm, just one where you jump slightly and get the full landing lag, but that's still interesting, thanks.
Yeah people normally call it that nowadays.
Actually I think in almost every case, if wavedash is faster then run/dash, cactuardashing will be faster. Because most have a high enough traction to where the first actionable frame out of a wavedash will always be below the max dash velocity. Even if they didn't their speed would be too high for it to matter. This is hurting my head, I've save it for the equation.

Slow AF Phantasm...... 1.43906
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#16
It'll probs be finished by tonight or tomorrow. Finished all the code last night. So now I just gotta manually get all the lower tier chars stats, plug them in and copy them over. Then I'm gunna add a Specials for each character I think would benefit and have stuff like edge cancelled illusion and super wavedash or whatever.
 
Joined
Aug 20, 2006
Messages
800
Location
Brooklyn, NY
#17
@ schmooblidon schmooblidon i love u plz marry me

also cactuardashing often is used to refer to run -> crouch -> walk -> run in the opposite direction. so that's a bit confusing. also extended dash dance = long fox trot?
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#18
@ schmooblidon schmooblidon i love u plz marry me

also cactuardashing often is used to refer to run -> crouch -> walk -> run in the opposite direction. so that's a bit confusing. also extended dash dance = long fox trot?
oh dude i got my terms mixed up. cactuardashing is supposed to be dash>wavedash. i think people call it wavesurfing sometimes, dno why i thought it was cactuardash.

well i refer to a foxtrot as waiting out the entire dash animation, which you would need to do if you were to move in the same direction. the extended dash dance is a foxtrot, but for all characters is only 20 frames of dash. everyone except g&w have a longer animation. is that too confusing? i could change it to something else.
 

1MachGO

Smash Ace
Joined
Mar 18, 2013
Messages
808
#19
So is speed indicative of length when it comes to wavedashing? While I can buy that Marth's wd isn't as fast as Docs or Samus's, his still feels longer and seems to have more "actionable drift" than those characters. Is this the case or is it simply a visual effect related to Marth's larger character model?
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#20
So is speed indicative of length when it comes to wavedashing? While I can buy that Marth's wd isn't as fast as Docs or Samus's, his still feels longer and seems to have more "actionable drift" than those characters. Is this the case or is it simply a visual effect related to Marth's larger character model?
The wavedash/land velocities are an average from the start of jumpsquat(except wavelands) to the end of landing lag. So it is not an average of wavedashing till you eventually stop, and will not accurately represent the total distance you can gain.

Marth v Doc is a good example of two things. As you can see they have the same jumpsquat frames and the same traction values, so it makes sense they have the same perfect waveland speed. But you are defnitely right about Marth having a longer wavedash, and this is because of his Max Walk Speed. When in wavedashes landing lag (I think all speciallandlag) and jumpsquat, you will be affected by High traction (double the normal) only when your velocity is higher then your Max Walk Speed. So because marth has a faster walk speed, he is affected by high traction for less time then doc is, and so will move a further distance. This doesn't affect the perfect waveland velocity as neither manage to drop below their max walk speeds before being actionable.

Now it then seems odd that Marth has a slower Max angle wavedash velocity. But this is because marth one of the few who has a cursed wavedash (totally calling it that now). Where he only gains half the distance he should on the first frame.

I think I'll do a wavedash total distance comparison, that won't take long, i can get that out in a hour or so.
 

1MachGO

Smash Ace
Joined
Mar 18, 2013
Messages
808
#21
Now it then seems odd that Marth has a slower Max angle wavedash velocity. But this is because marth one of the few who has a cursed wavedash (totally calling it that now). Where he only gains half the distance he should on the first frame.
Lmao, oh Sakurai.

And thanks for all your work, man. Looking forward to anything and everything you add to this thread.
 
Joined
Aug 20, 2006
Messages
800
Location
Brooklyn, NY
#22
oh dude i got my terms mixed up. cactuardashing is supposed to be dash>wavedash. i think people call it wavesurfing sometimes, dno why i thought it was cactuardash.

well i refer to a foxtrot as waiting out the entire dash animation, which you would need to do if you were to move in the same direction. the extended dash dance is a foxtrot, but for all characters is only 20 frames of dash. everyone except g&w have a longer animation. is that too confusing? i could change it to something else.
i like wavesurfing and extended DD for those. maybe just add in a terminology explanation at the start :)


(a lot of people call the extended DD a fox trot, fwiw, even though thats not exactly correct)
 
Last edited:

EddyBearr

Smash Lord
Joined
Jun 14, 2013
Messages
1,202
Location
Minneapolis, Minnesota
#23
@ schmooblidon schmooblidon I'm curious about sliding distance during jump-cancels (EX: jump cancel grabs or upsmashes) (holding hard left or right). Would you be willing to find this out? Also, would jc distances be affected by things like initial dash velocity vs maximum run velocity?
 
Last edited:

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#24
@ schmooblidon schmooblidon I'm curious about sliding distance during jump-cancels (EX: jump cancel grabs or upsmashes) (holding hard left or right). Would you be willing to find this out? Also, would jc distances be affected by things like initial dash velocity vs maximum run velocity?
Jumpsquat works like LandingFallSpecial and is affected by high traction.

This means that when you are moving at a higher velocity to your maximum walk speed, you experience double traction. So the higher the max walk speed and the lower the traction, the further you will slide. Of course, starting the jumpsquat at a high velocity will also help.

Oh and holding a direction during jumpsquat will have no effect.
 
Last edited:
Joined
May 25, 2013
Messages
704
Location
Ottawa, Ontario
#25
What is the relation (if any) between the Melee-metre and hitbox size? For example, Master Hand tells me that Jigglypuff's Bair has 3 hitboxes with sizes 1000, 1000 and 1100 respectively. Is there a way to convert this into Mm?
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#26
What is the relation (if any) between the Melee-metre and hitbox size? For example, Master Hand tells me that Jigglypuff's Bair has 3 hitboxes with sizes 1000, 1000 and 1100 respectively. Is there a way to convert this into Mm?
The game is telling me they have a radius of (ID 0 | 3.9060 Mm), (ID 1 | 3.9060 Mm), (ID 2 | 4.2966 Mm). Which would translate to Every Master Hand 100 | 0.3906 Mm, or if you wonna say diameter then 0.7812.
 

King Mob

Smash Cadet
Joined
Oct 4, 2014
Messages
39
Location
Des Plaines, IL
#27
Have you figured out anything about moonwalking or boost running yet? Measuring that type of thing seems pretty weird, so I'd be pretty interested in any progress you've made.
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#28
Have you figured out anything about moonwalking or boost running yet? Measuring that type of thing seems pretty weird, so I'd be pretty interested in any progress you've made.
Frame perfect moonwalks are pretty simple to calculate. Frame 1 is previous velocity, frame 2 is previous velocity - true initial dash velocity + dash acceleration, then each frame after that is + dash acceleration. And the maximum speed you go backwards is just your maximum dash velocity.

If you do the half circle method, it becomes very ambiguous and depends on the position of the stick on each frame. If you imagine the full left x-value to be -1.0 and right to be 1.0, you can just times your dash acceleration value with whatever the x-value is at each frame to calculate your velocity. I could maybe decide on a set of human-like x-values and give an answer for each character. The only thing I worry about is when they do not reach their maximum velocity by the end of the moonwalk, because then you cannot give a consistent chained moonwalk velocity.

What is boost running? Do you mean boost grabbing?
 

Strong Bad

行くぜ!
Moderator
Premium
Joined
Feb 27, 2008
Messages
24,310
Location
Oakland, CA
#29
What is the relation (if any) between the Melee-metre and hitbox size? For example, Master Hand tells me that Jigglypuff's Bair has 3 hitboxes with sizes 1000, 1000 and 1100 respectively. Is there a way to convert this into Mm?
The game is telling me they have a radius of (ID 0 | 3.9060 Mm), (ID 1 | 3.9060 Mm), (ID 2 | 4.2966 Mm). Which would translate to Every Master Hand 100 | 0.3906 Mm, or if you wonna say diameter then 0.7812.
You answered his question for that example, but didn't explain the formula to convert into in-game units, which is MasterHand value / 256. Dunno how I feel about using the term Melee-meters since the measurement system is shared with Brawl (and most likely Smash 4 as well) but *shrug*

Neat work overall, I remember making spreadsheets to calculate wavedash distances and frame-by-frame location charts for various actions. Quite a great deal of effort, so I can appreciate this kind of thing.
 

King Mob

Smash Cadet
Joined
Oct 4, 2014
Messages
39
Location
Des Plaines, IL
#30
Frame perfect moonwalks are pretty simple to calculate. Frame 1 is previous velocity, frame 2 is previous velocity - true initial dash velocity + dash acceleration, then each frame after that is + dash acceleration. And the maximum speed you go backwards is just your maximum dash velocity.

If you do the half circle method, it becomes very ambiguous and depends on the position of the stick on each frame. If you imagine the full left x-value to be -1.0 and right to be 1.0, you can just times your dash acceleration value with whatever the x-value is at each frame to calculate your velocity. I could maybe decide on a set of human-like x-values and give an answer for each character. The only thing I worry about is when they do not reach their maximum velocity by the end of the moonwalk, because then you cannot give a consistent chained moonwalk velocity.

What is boost running? Do you mean boost grabbing?
Yeah, that's what I figured. I should have specified human moonwalking lol. And boost running is when you dash out of your moonwalk or sticky walk (I don't know exactly how it's done) and run really fast. I see Falcons do it sometimes. I think Westballz called it that anyway.
 
Last edited:

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#31
If they are dashing forward they would have to wait till the end of the moonwalk, dashing backwards could be done at any point during the moonwalk but you would have to move the stick to neutral first.

Dashing from a stickywalk probably means crouching for 8 frames (1 RunBrake, 7 Crouch), before dashing.

Either way, you won't move any faster then a regular dash. Depending on your velocity in the opposite direction, you might go slower then a normal dash.
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#32
Yeah, that's what I figured. I should have specified human moonwalking lol. And boost running is when you dash out of your moonwalk or sticky walk (I don't know exactly how it's done) and run really fast. I see Falcons do it sometimes. I think Westballz called it that anyway.
Ok so I found out all about this tech in the past few hours. What happens is, you do a moonwalk, then before it ends you press forward to enter run (like a stickywalk), then you hit back again to do a Run Turnaround.

Run Turnaround has some really interesting properties that I'm not sure I even fully understand just yet. When you start the turnaround, you will have your previous backwards velocity + dash acceleration, and will keep accelerating until you hit your maximum dash velocity. But then something cool happens, if you have a higher acceleration value then your traction value, you will start accelerating even further at (dash acceleration - traction) each frame. Falcon can reach a velocity of 4.06 if he does this perfectly, which is insanely fast. Once the turnaround animation finishes and you enter run, you immediately go back to your maxmimum dash/run velocity.

This is really weird because it's like the turnaround both has a limit and doesn't at the same time. Falcon for example has a max dash/run velocity of 2.30 and an acceleration of 0.16, if on whatever frame of turnaround you have a velocity of 2.13, the next frame you will have velocity 2.29, and then the next will be 2.30. This makes it seem like it is conforming to the dash/run limit, but then on the next frame will move to 2.38 and increase by 0.08 from then on.

Mewtwo is a really great visual example of this phenomenom, as he has a really long turnaround animation, so if you perform it well, you will clearly see him accelerate way beyond his normal dash/run limit.

You can also dash right after the turnaround animation as long as you are not holding forward on the last frame, and so can perform multiple continuously.

I added falcon, fox and mewtwo's average boost run velocity to the OP because they break the top 10 movements. When I get around to doing moonwalks properly, this will be an easy addition to add for those it works for.

Apologies for not giving you the answer you wanted before, but saying "dash" out of moonwalk threw me off.
 
Last edited:

King Mob

Smash Cadet
Joined
Oct 4, 2014
Messages
39
Location
Des Plaines, IL
#33
Ok so I found out all about this tech in the past few hours. What happens is, you do a moonwalk, then before it ends you press forward to enter run (like a stickywalk), then you hit back again to do a Run Turnaround.

Run Turnaround has some really interesting properties that I'm not sure I even fully understand just yet. When you start the turnaround, you will have your previous backwards velocity + dash acceleration, and will keep accelerating until you hit your maximum dash velocity. But then something cool happens, if you have a higher acceleration value then your traction value, you will start accelerating even further at (dash acceleration - traction) each frame. Falcon can reach a velocity of 4.06 if he does this perfectly, which is insanely fast. Once the turnaround animation finishes and you enter run, you immediately go back to your maxmimum dash/run velocity.

This is really weird because it's like the turnaround both has a limit and doesn't at the same time. Falcon for example has a max dash/run velocity of 2.30 and an acceleration of 0.16, if on whatever frame of turnaround you have a velocity of 2.13, the next frame you will have velocity 2.29, and then the next will be 2.30. This makes it seem like it is conforming to the dash/run limit, but then on the next frame will move to 2.38 and increase by 0.08 from then on.

Mewtwo is a really great visual example of this phenomenom, as he has a really long turnaround animation, so if you perform it well, you will clearly see him accelerate way beyond his normal dash/run limit.

You can also dash right after the turnaround animation as long as you are not holding forward on the last frame, and so can perform multiple continuously.

I added falcon, fox and mewtwo's average boost run velocity to the OP because they break the top 10 movements. When I get around to doing moonwalks properly, this will be an easy addition to add for those it works for.

Apologies for not giving you the answer you wanted before, but saying "dash" out of Dude, no tme off.
Thanks ma
Ok so I found out all about this tech in the past few hours. What happens is, you do a moonwalk, then before it ends you press forward to enter run (like a stickywalk), then you hit back again to do a Run Turnaround.

Run Turnaround has some really interesting properties that I'm not sure I even fully understand just yet. When you start the turnaround, you will have your previous backwards velocity + dash acceleration, and will keep accelerating until you hit your maximum dash velocity. But then something cool happens, if you have a higher acceleration value then your traction value, you will start accelerating even further at (dash acceleration - traction) each frame. Falcon can reach a velocity of 4.06 if he does this perfectly, which is insanely fast. Once the turnaround animation finishes and you enter run, you immediately go back to your maxmimum dash/run velocity.

This is really weird because it's like the turnaround both has a limit and doesn't at the same time. Falcon for example has a max dash/run velocity of 2.30 and an acceleration of 0.16, if on whatever frame of turnaround you have a velocity of 2.13, the next frame you will have velocity 2.29, and then the next will be 2.30. This makes it seem like it is conforming to the dash/run limit, but then on the next frame will move to 2.38 and increase by 0.08 from then on.

Mewtwo is a really great visual example of this phenomenom, as he has a really long turnaround animation, so if you perform it well, you will clearly see him accelerate way beyond his normal dash/run limit.

You can also dash right after the turnaround animation as long as you are not holding forward on the last frame, and so can perform multiple continuously.

I added falcon, fox and mewtwo's average boost run velocity to the OP because they break the top 10 movements. When I get around to doing moonwalks properly, this will be an easy addition to add for those it works for.

Apologies for not giving you the answer you wanted before, but saying "dash" out of moonwalk threw me off.
No problem dude. Thanks for looking into it too. You the homie.
 

Awstintacious

Smash Apprentice
Joined
Mar 17, 2011
Messages
122
Location
Atlanta, Georgia
#34
You're my hero dude. I've been asking for this for so long. Do you think you could get other people to add GIFs of characters doing max Dash-Wavedashes or like how far apart the BF notches on the floor are in MM? Seriously ILU
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#35
You're my hero dude. I've been asking for this for so long. Do you think you could get other people to add GIFs of characters doing max Dash-Wavedashes or like how far apart the BF notches on the floor are in MM? Seriously ILU
If anyone wanted to contribute I would have no objection.

I am working on something though. The python script is like 10x better now and I have added smashturn distances for pivots and pc drops, and done most of moonwalk (there is just 1 thing i need to figure out). I'm modifying the script so I can get the velocity on each frame of each movement, so I can plot it on a distance/time graph. The graph will have battlefield or something on the X-axis and will be scaled properly. There will be additional info on each movement line, like when you become actionable for wavedashes, a total distance with drift etc.
 

ECHOnce

Smash Lord
Joined
Feb 22, 2014
Messages
1,191
Location
Peachtree City, GA
#37
I realize this is quite a necro, but this is a really useful thread and it looks like the forums update ****ed up the OP's formatting. It's much more of a hassle to find the desired information now.
Afaik this could mostly/all be fixed up by changing the collapse tags. [collapse ] tags stopped after the update, so they've gotta be changed to [spoiler ]. Ctrl+F says there's around 50 pairs of them in the OP, so it shouldn't take more than a few min. schmooblidon schmooblidon in case he didn't notice; might've not been aware that the tags would be affected by the update.

Never heard of Wavesurfing before lol. Is there a term for the reverse? Wavedash --> Dash? The forwards/backwards momentum has a pretty noticeable influence on the dash acceleration for characters like Marth, who have a long wavedash and dash. I'd be interested in having data on whether characters with a long dash could still squeeze some more distance out from a short wavedash --> dash in the same direction, or if a long wavedash can still boost a short dash enough together anything out of it. Also might be the wrong place to ask, but tree grab vs. wavedash back-->dash back-->JC/boost grab vs. wavedash forwards-->turnaround JC/boost grab comparisons in distance/timing could be interesting.
 
Last edited:

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#38
Afaik this could mostly/all be fixed up by changing the collapse tags. [collapse ] tags stopped after the update, so they've gotta be changed to [spoiler ]. Ctrl+F says there's around 50 pairs of them in the OP, so it shouldn't take more than a few min. schmooblidon schmooblidon in case he didn't notice; might've not been aware that the tags would be affected by the update.

Never heard of Wavesurfing before lol. Is there a term for the reverse? Wavedash --> Dash? The forwards/backwards momentum has a pretty noticeable influence on the dash acceleration for characters like Marth, who have a long wavedash and dash. I'd be interested in having data on whether characters with a long dash could still squeeze some more distance out from a short wavedash --> dash in the same direction, or if a long wavedash can still boost a short dash enough together anything out of it. Also might be the wrong place to ask, but tree grab vs. wavedash back-->dash back-->JC/boost grab vs. wavedash forwards-->turnaround JC/boost grab comparisons in distance/timing could be interesting.
They said they were gunna add a collapse tag back in. I dont know of any terminology to describe that myself.

I don't really have the time to make those kind of comparisons nowadays, but the data and equations (gunna put the newer python script in now) in this thread give anyone the tools to work out such things (except boost grabs, because each char's dash attack has a set velocity on each frame), I can also answer any questions about any of the info.
 

Army805

Smash Cadet
Joined
Aug 7, 2015
Messages
52
#39
Jumpsquat works like LandingFallSpecial and is affected by high traction.

This means that when you are moving at a higher velocity to your maximum walk speed, you experience double traction. So the higher the max walk speed and the lower the traction, the further you will slide. Of course, starting the jumpsquat at a high velocity will also help.

Oh and holding a direction during jumpsquat will have no effect.
What do you mean by "this means that when you are moving at a higher velocity to your maximum walk speed"? I don't understand why having a higher max walk speed will make you slide further, lower traction makes sense though.
 

schmooblidon

Smash Journeyman
Joined
Feb 18, 2014
Messages
491
#40
What do you mean by "this means that when you are moving at a higher velocity to your maximum walk speed"? I don't understand why having a higher max walk speed will make you slide further, lower traction makes sense though.
I couldn't tell you why the maximum walk speed attribute was used, there may even be a calculation to create a maximum walk speed and the double traction threshold, and both happen to produce the exact same values. But it makes more sense that they hard coded maximum walk speed values, and then used those for the double traction threshold. Why they chose max walk speed I don't know. I guess it's a convenient mid-speed value that sort of depicts how slippery they are.

The reason having a higher max walk speed helps you slide, is because it means you are more likely to be moving slower than the max walk speed, and thus only receiving 1x traction.

Let's compare Falcon and Y.Link.

Both characters with a traction value of 0.08, and both have 4 frames of jumpsquat. So if you never knew about double traction, you'd probably assume they have the same wavedash.

Y.Link's maxwalk is 1.2, and Falcon's is 0.85.

So let's say they both do a wavedash with the exact same angle, and they both have a starting velocity of 1.5.

The second frame, both will experience double traction, and so will now have a velocity of 1.34. Then the next frame, they both experience double traction again, and have a velocity of 1.18. Now Y.Link is below his max walk speed, but Falcon isn't so on the next frame, Y.Link has a velocity of 1.10, but Falcon has a velocity of 1.02. Y.Link will only slow down by 1x traction until he stops, but Falcon must endure 2 more frames of 2x traction. Once Falcon moves onto 1x traction, he will have a lower velocity than Y.Link and so will grind to a halt faster.
 
Top