1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 225,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

  3. Get the Smash Controller on sale this holiday for $26.99 on Amazon! Get the Smash GameCube Controller now!

  4. Use the Smashboards Store to get awesome Smash stuff and support the site, like a Nintendo Controller or the Wii U - Gamecube adaptor ! Check out the inventory in our store and support Smashboards with your purchase today!

Ultimate Ground Movement Analysis: Turbo Edition

Discussion in 'Melee Discussion' started by schmooblidon, Feb 22, 2015.

  1. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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
     
    #1 schmooblidon, Feb 22, 2015
    Last edited: Dec 30, 2015
    Popertop, Synnett, Geranimo and 44 others like this.
  2. Shadó Chimera / シャドーキメラ

    Smash Ace

    Joined:
    Apr 10, 2014
    Messages:
    621
    Location:
    Chicago, IL
    3DS FC:
    2019-9854-8378
    NNID:
    Shado_Chimera
    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.
     
  3. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.

    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.

    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.
     
    #3 schmooblidon, Feb 23, 2015
    Last edited: Feb 23, 2015
  4. flwns

    flwns
    Expand Collapse
    Smash Cadet

    Joined:
    Jun 29, 2014
    Messages:
    34
    Location:
    Las Vegas, Nevada
    thank you magus and schmooblidon
     
    TerryJ likes this.
  5. Stratocaster

    Stratocaster
    Expand Collapse
    Smash Ace

    Joined:
    Oct 6, 2007
    Messages:
    668
    Location:
    Knoxville, TN
    I love this kind of analytical work, can't wait to see all of your results.
     
    TerryJ likes this.
  6. Shadó Chimera / シャドーキメラ

    Smash Ace

    Joined:
    Apr 10, 2014
    Messages:
    621
    Location:
    Chicago, IL
    3DS FC:
    2019-9854-8378
    NNID:
    Shado_Chimera
    I'm excited to see it's completion. Thank you for this.
     
  7. anikom15

    anikom15
    Expand Collapse
    Smash Apprentice

    Joined:
    Jun 16, 2014
    Messages:
    180
    Location:
    Southern California
    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
     
    #7 anikom15, Feb 23, 2015
    Last edited: Feb 23, 2015
  8. Bones0

    Bones0
    Expand Collapse
    Smash Legend

    Joined:
    Aug 31, 2005
    Messages:
    10,955
    Location:
    Jarrettsville, MD
    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.
     
  9. PerhapsMan

    PerhapsMan
    Expand Collapse
    Smash Ace

    Joined:
    May 25, 2013
    Messages:
    704
    Location:
    Ottawa, Ontario
    Thank you for consistently being awesome, Schmooblidon.
     
  10. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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 likes this.
  11. Bones0

    Bones0
    Expand Collapse
    Smash Legend

    Joined:
    Aug 31, 2005
    Messages:
    10,955
    Location:
    Jarrettsville, MD
    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.
     
  12. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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
     
    Bones0 likes this.
  13. Bones0

    Bones0
    Expand Collapse
    Smash Legend

    Joined:
    Aug 31, 2005
    Messages:
    10,955
    Location:
    Jarrettsville, MD
    Good to know I've been using side-Bs to get across the stage and it's barely even faster than walking. :facepalm:
     
  14. King Mob

    King Mob
    Expand Collapse
    Smash Cadet

    Joined:
    Oct 4, 2014
    Messages:
    39
    Location:
    Des Plaines, IL
    Oh man, this is too sexy. I didn't know smashboards allowed nsfw.
     
  15. 1MachGO

    1MachGO
    Expand Collapse
    Smash Ace

    Joined:
    Mar 18, 2013
    Messages:
    808
    This thread needs more love

    Didn't expect Pikachu's dash dance length to be so long.
     
  16. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
  17. hectohertz

    hectohertz
    Expand Collapse
    Smash Ace

    Joined:
    Aug 20, 2006
    Messages:
    800
    Location:
    Brooklyn, NY
    @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?
     
  18. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
  19. 1MachGO

    1MachGO
    Expand Collapse
    Smash Ace

    Joined:
    Mar 18, 2013
    Messages:
    808
    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?
     
  20. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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 likes this.
  21. 1MachGO

    1MachGO
    Expand Collapse
    Smash Ace

    Joined:
    Mar 18, 2013
    Messages:
    808
    Lmao, oh Sakurai.

    And thanks for all your work, man. Looking forward to anything and everything you add to this thread.
     
  22. hectohertz

    hectohertz
    Expand Collapse
    Smash Ace

    Joined:
    Aug 20, 2006
    Messages:
    800
    Location:
    Brooklyn, NY
    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)
     
    #22 hectohertz, Mar 6, 2015
    Last edited: Mar 6, 2015
  23. EddyBearr

    EddyBearr
    Expand Collapse
    Smash Lord

    Joined:
    Jun 14, 2013
    Messages:
    1,202
    Location:
    Minneapolis, Minnesota
    @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?
     
    #23 EddyBearr, Mar 10, 2015
    Last edited: Mar 10, 2015
  24. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
    #24 schmooblidon, Mar 10, 2015
    Last edited: Mar 10, 2015
  25. PerhapsMan

    PerhapsMan
    Expand Collapse
    Smash Ace

    Joined:
    May 25, 2013
    Messages:
    704
    Location:
    Ottawa, Ontario
    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?
     
  26. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
    Sieghart, Melee Mewtwo and PerhapsMan like this.
  27. King Mob

    King Mob
    Expand Collapse
    Smash Cadet

    Joined:
    Oct 4, 2014
    Messages:
    39
    Location:
    Des Plaines, IL
    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.
     
  28. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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?
     
  29. Strong Bad

    Strong Bad
    Expand Collapse
     

    • Moderator
    • Premium
    • Back Roomer
    Joined:
    Feb 27, 2008
    Messages:
    24,055
    Location:
    Dallas, TX

    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.
     
    TerryJ, schmooblidon and PerhapsMan like this.
  30. King Mob

    King Mob
    Expand Collapse
    Smash Cadet

    Joined:
    Oct 4, 2014
    Messages:
    39
    Location:
    Des Plaines, IL
    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.
     
    #30 King Mob, Mar 15, 2015
    Last edited: Mar 15, 2015
  31. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
  32. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
    #32 schmooblidon, Mar 18, 2015
    Last edited: Mar 18, 2015
    TerryJ, tm and PerhapsMan like this.
  33. King Mob

    King Mob
    Expand Collapse
    Smash Cadet

    Joined:
    Oct 4, 2014
    Messages:
    39
    Location:
    Des Plaines, IL
    Thanks ma
    No problem dude. Thanks for looking into it too. You the homie.
     
  34. Awstintacious

    Awstintacious
    Expand Collapse
    Smash Apprentice

    Joined:
    Mar 17, 2011
    Messages:
    121
    Location:
    Atlanta, Georgia
    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
     
  35. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
  36. Melee Mewtwo

    Melee Mewtwo
    Expand Collapse
    Smash Ace

    Joined:
    Jul 24, 2012
    Messages:
    541
    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.
     
  37. ECHOnce

    ECHOnce
    Expand Collapse
    Smash Lord

    Joined:
    Feb 22, 2014
    Messages:
    1,191
    Location:
    Bellevue, WA
    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 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.
     
    #37 ECHOnce, Oct 7, 2015
    Last edited: Oct 7, 2015
  38. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
    ECHOnce likes this.
  39. Army805

    Army805
    Expand Collapse
    Smash Cadet

    Joined:
    Aug 7, 2015
    Messages:
    52
    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.
     
  40. schmooblidon

    schmooblidon
    Expand Collapse
    Smash Journeyman

    Joined:
    Feb 18, 2014
    Messages:
    480
    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.
     
    Pauer likes this.

Share This Page

Users Viewing Thread (Users: 0, Guests: 0)

We know you don't like ads
Why not buy Premium?