Home Gallery Resources The Team Rules chat Login Register
  Show Topics
Pages:  1 2 3 [4] 5 6 7
46  Help & Tutorials / A/A Tutorials / [Advanced] How to Make a Pseudo Extreme Speed on: November 23, 2015, 02:26:26 PM
Based on like almost a week or so of testing an troubleshooting, I'll now reveal this tutorial.

What's this for, you ask? Well it's simple. This tutorial will show you how to make a pseudo Extreme Speed.

Warning/Notice: This tutorial is only recommended for those who know what they're doing and know their way around PSA/Moveset Editing. If you don't know most/any of the terms I use in the tutorial, then it's likely you're not ready for something so advanced yet (if you have questions, you can still ask though). These combinations of commands also take up a lot of file size (around 14 KB), so make sure your FitChar.pac file has enough room.

If you're going to be using BrawlBox, then make sure your character can be edited without their file breaking. If you can't, then use PSA.

Requirements:
-5 Animations. Start, StartAir, Move, End, and EndAir.
-5 Open Sub Actions.
-3 Actions.
-*4 LA-Floats.
-*1 LA-Bit.
-At least 14KB of space available in your FitChar.pac

*Check this guide to know which variables you can use. http://forums.kc-mm.com/index.php?topic=74266.0
Also check this page to see which Variables are already used by the game. http://tinyurl.com/p4ojsod

This tutorial will be broken down into 3 sections: Start, Move, and End with each section of coding being explained.

Now without further adieu, let's begin.

Part 1: Start.

-Actions-
For the Start part of this move, you'll be editing one Action between Actions 274 (Dec)/112 (Hex) through 277 (Dec)/115 (Hex), based on which Special you want this coding to be used for.

Action 274 (Dec)/112 (Hex): Neutral Special
Action 275 (Dec)/113 (Hex): Side Special
Action 276 (Dec)/114 (Hex): Up Special
Action 277 (Dec)/115 (Hex): Down Special

In the Action you chose, insert the following coding:
X = Action you want your current Action to direct to once the current Action ends.
Y = Ground Sub Action.
Z = Air Sub Action.

Change Action action=X, requirement=Animation End
Set Loop Infinite
   If On Ground:
      Set Air/Ground: On Ground*
      Set Edge Slide: Can't drop off side of stage
      If Bit is Set: RA-Bit[16]
         Change Subaction: sub action=Y, pass frame=true
      Else
         Change Subaction: sub action=Y
         Bit Variable Set: RA-Bit[16] = true
      End If
      Additional Subaction Change Requirement: In Air
   Else
      Set Air/Ground: Undefined(17)*
      Set Edge Slide: In Air; Can leave stage vertically
      If Bit is Set: RA-Bit[16]
         Change Subaction: sub action=Z, pass frame=true
      Else
         Change Subaction: sub action=Z
         Bit Variable Set: RA-Bit[16] = true
      End If
      Additional Subaction Change Requirement: On Ground
   End If
   Loop Rest
Execute Loop

*On Ground is 6. and Unknown (17) is 17 (Dec)/11 (Hex).

Once you're done with your Action coding, it's time for your Sub Actions.

-Sub Actions-
In the Ground version of your Sub Action (it can be air, though ground just for consistency, as you're just going to be using a GoTo command anyway), insert the following coding. This is where you'll be setting your Floats.

A = Float to use for Horizontal Momentum. (For this tutorial, it's set to 3.5 forward and -3.5 backward, but you can adjust this to your liking).
F = Float to use for Vertical Momentum. (For this tutorial, it's set to 3.5 upward and -3.5 downward, but you can adjust this to your liking).
C = Float to use for the move's timer. (For this tutorial, it's set to 30, but you can adjust this to your liking).
D = Float to use for setting the Frame of the *Move Action.
E = Bit. I will explain this later.

*For this example, the animation for the Move Action is 120 Frames long, and has the character rotating 360 degrees. LA-Float [D] is used to set which Frame the Move Action will start on.

Float Variable Set: LA-Float[A] = 0
Float Variable Set: LA-Float[F] = 3.5
Float Variable Set: LA-Float[C] = 30
Float Variable Set: LA-Float[D] = 0
Bit Variable Clear: LA-Bit[E] = false
Set/Add Momentum: Horizontal=0, Vertical=0, Add/Set Horiz=1, Add/Set Vert=1
Set Loop Infinite
   If Compare: IC-Basic[1012] >= IC-Basic[3149]
   And Compare: IC-Basic[1018] >= IC-Basic[3186]
      Float Variable Set: LA-Float[A] = -3.5
      Float Variable Set: LA-Float[F] = 3.5
      Float Variable Set: LA-Float[D] = 105
   End If
   If Compare: IC-Basic[1012] >= IC-Basic[3149]
   And Compare: IC-Basic[1020] >= IC-Basic[3186]
      If On Ground:
         Float Variable Set: LA-Float[A] = -3.5
         Float Variable Set: LA-Float[F] = 0
         Float Variable Set: LA-Float[D] = 90
      Else
         Float Variable Set: LA-Float[A] = -3.5
         Float Variable Set: LA-Float[F] = -3.5
         Float Variable Set: LA-Float[D] = 75
      End If
   End If
   If Compare: IC-Basic[1012] >= IC-Basic[3149]
   And Not Compare: IC-Basic[1018] >= IC-Basic[3186]
   And Not Compare: IC-Basic[1020] >= IC-Basic[3186]
      Float Variable Set: LA-Float[A] = -3.5
      Float Variable Set: LA-Float[F] = 0
      Float Variable Set: LA-Float[D] = 90
   End If
   If Compare: IC-Basic[1011] >= IC-Basic[3149]
   And Compare: IC-Basic[1018] >= IC-Basic[3186]
      Float Variable Set: LA-Float[A] = 3.5
      Float Variable Set: LA-Float[F] = 3.5
      Float Variable Set: LA-Float[D] = 15
   End If
   If Compare: IC-Basic[1011] >= IC-Basic[3149]
   And Compare: IC-Basic[1020] >= IC-Basic[3186]
      If On Ground:
         Float Variable Set: LA-Float[A] = 3.5
         Float Variable Set: LA-Float[F] = 0
         Float Variable Set: LA-Float[D] = 30
      Else
         Float Variable Set: LA-Float[A] = 3.5
         Float Variable Set: LA-Float[F] = -3.5
         Float Variable Set: LA-Float[D] = 45
      End If
   End If
   If Compare: IC-Basic[1011] >= IC-Basic[3149]
   And Not Compare: IC-Basic[1018] >= IC-Basic[3186]
   And Not Compare: IC-Basic[1020] >= IC-Basic[3186]
      Float Variable Set: LA-Float[A] = 3.5
      Float Variable Set: LA-Float[F] = 0
      Float Variable Set: LA-Float[D] = 30
   End If
   If Compare: IC-Basic[1020] >= IC-Basic[3186]
   And Not Compare: IC-Basic[1012] >= IC-Basic[3149]
   And Not Compare: IC-Basic[1011] >= IC-Basic[3149]
      If On Ground:
         Float Variable Set: LA-Float[A] = 3.5
         Float Variable Set: LA-Float[F] = 0
         Float Variable Set: LA-Float[D] = 30
      Else
         Float Variable Set: LA-Float[A] = 0
         Float Variable Set: LA-Float[F] = -3.5
         Float Variable Set: LA-Float[D] = 59
      End If
   End If
   If Compare: IC-Basic[1018] >= IC-Basic[3186]
   And Not Compare: IC-Basic[1012] >= IC-Basic[3149]
   And Not Compare: IC-Basic[1011] >= IC-Basic[3149]
      Float Variable Set: LA-Float[A] = 0
      Float Variable Set: LA-Float[F] = 3.5
      Float Variable Set: LA-Float[D] = 0
   End If
   If Not Compare: IC-Basic[1018] >= IC-Basic[3186]
   And Not Compare: IC-Basic[1020] >= IC-Basic[3186]
   And Not Compare: IC-Basic[1012] >= IC-Basic[3149]
   And Not Compare: IC-Basic[1011] >= IC-Basic[3149]
      Float Variable Set: LA-Float[A] = 0
      Float Variable Set: LA-Float[F] = 3.5
      Float Variable Set: LA-Float[D] = 0
   End If
   Synchronous Timer: frames=1
Execute Loop

What this will do is during the Start Action, the coding will infinitely check to see which direction on the control stick is pressed, and if the character is on the ground, then holding down will automatically direct to if the player was holding forward on the control stick. If the control stick isn't pressed at all, then it will direct to if the player was holding up.

For a breakdown of the If Compare commands, here's the 4 main control stick directions.

If Compare: IC-Basic[1012] >= IC-Basic[3149]: Backwards.

If Compare: IC-Basic[1011] >= IC-Basic[3149]: Forward.

If Compare: IC-Basic[1018] >= IC-Basic[3186]: Upward.

If Compare: IC-Basic[1020] >= IC-Basic[3186]: Downward.

In the Air version of the Sub Action, just insert a GoTo command that references the Ground Sub Action.

Hopefully everything's currently able to be understood. Let's get onto the most difficult part of the tutorial...

Part 2: Move.
Prepare yourself, as this is the most difficult and most confusing part of the tutorial.

-Actions-
In the Action you set X to in Part one, insert the following coding.

X = Action to go to once Float C (from Part 1) is equal to or less than 0.
Y = Sub Action to go to.

Change Action action=X, requirement=Compare: LA-Float[C] <= 0
Set Air/Ground: Undefined(17)
Set Edge Slide: In Air; Can leave stage vertically
Change Subaction: sub action=Y

-Sub Action-
This part will be separated into 4 parts, each for their own tab.

2a.) Main tab.
Insert the following coding into the Main Tab.

X = Frame Speed Modifier setting. The higher the FSM, the faster the frame movement.
Y = Synch Timer setting. Default is 1. Though you can set it higher or lower, depending on how tight you want the movement. Lower = tighter.

Frame Speed Modifier: Multiplier=X
Set Loop Infinite
   Set Animation Frame: LA-Float[D]
   Synchronous Timer: frames=Y
   If Compare: LA-Float[D] < 0
      Float Variable Add: LA-Float[D] += 1
   End If
   If Compare: LA-Float[D] > 119
      Float Variable Subtract: LA-Float[D] -= 1
   End If
   If Compare: IC-Basic[1012] >= IC-Basic[3149]
      If Compare: LA-Float[D] <= 0
         Float Variable Set: LA-Float[D] = 119
      End If
      If Touching a Floor, Wall, or Ceiling: 2
      Or Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[D] >= 90
         And Compare: LA-Float[D] < 119
            Float Variable Add: LA-Float[D] += 1
         End If
         If Compare: LA-Float[D] < 90
         And Compare: LA-Float[D] > 59
            Float Variable Subtract: LA-Float[D] -= 1
         End If
      Else
         If Compare: LA-Float[D] > 90
         Or Compare: LA-Float[D] <= 30
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] > 30
         And Compare: LA-Float[D] < 90
            Float Variable Add: LA-Float[D] += 1
         End If
      End If
      If Compare: IC-Basic[1018] >= IC-Basic[3186]
         If Compare: LA-Float[D] > 105
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] < 105
            Float Variable Add: LA-Float[D] += 1
         End If
      End If
      If Compare: IC-Basic[1020] >= IC-Basic[3186]
         If On Ground:
            If Compare: LA-Float[D] > 90
            Or Compare: LA-Float[D] <= 30
               Float Variable Subtract: LA-Float[D] -= 1
            End If
            If Compare: LA-Float[D] > 30
            And Compare: LA-Float[D] < 90
               Float Variable Add: LA-Float[D] += 1
            End If
         Else
            If Compare: LA-Float[D] > 75
               Float Variable Subtract: LA-Float[D] -= 1
            End If
            If Compare: LA-Float[D] < 75
               Float Variable Add: LA-Float[D] += 1
            End If
         End If
      End If
   End If
   If Compare: IC-Basic[1011] >= IC-Basic[3149]
      If Compare: LA-Float[D] >= 119
         Float Variable Set: LA-Float[D] = 0
      End If
      If Touching a Floor, Wall, or Ceiling: 2
      Or Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[D] <= 30
         And Compare: LA-Float[D] > 0
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] > 30
         And Compare: LA-Float[D] < 59
            Float Variable Add: LA-Float[D] += 1
         End If
      Else
         If Compare: LA-Float[D] < 30
         Or Compare: LA-Float[D] >= 90
            Float Variable Add: LA-Float[D] += 1
         End If
         If Compare: LA-Float[D] > 30
         And Compare: LA-Float[D] < 90
            Float Variable Subtract: LA-Float[D] -= 1
         End If
      End If
      If Compare: IC-Basic[1018] >= IC-Basic[3186]
         If Compare: LA-Float[D] > 15
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] < 15
            Float Variable Add: LA-Float[D] += 1
         End If
      End If
      If Compare: IC-Basic[1020] >= IC-Basic[3186]
         If On Ground:
            If Compare: LA-Float[D] < 30
            Or Compare: LA-Float[D] >= 90
               Float Variable Add: LA-Float[D] += 1
            End If
            If Compare: LA-Float[D] > 30
            And Compare: LA-Float[D] < 90
               Float Variable Subtract: LA-Float[D] -= 1
            End If
         Else
            If Compare: LA-Float[D] > 45
               Float Variable Subtract: LA-Float[D] -= 1
            End If
            If Compare: LA-Float[D] < 45
               Float Variable Add: LA-Float[D] += 1
            End If
         End If
      End If
   End If
   If Compare: IC-Basic[1020] >= IC-Basic[3186]
      If On Ground:
         If Compare: LA-Float[D] < 30
         Or Compare: LA-Float[D] < 90
            Float Variable Add: LA-Float[D] += 1
         End If
         If Compare: LA-Float[D] > 30
         And Compare: LA-Float[D] < 90
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] >= 45
         And Not Compare: LA-Float[D] == 30
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] >= 75
         And Not Compare: LA-Float[D] == 90
            Float Variable Add: LA-Float[D] += 1
         End If
      Else
         If Compare: LA-Float[D] > 59
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] < 59
            Float Variable Add: LA-Float[D] += 1
         End If
      End If
   End If
   If Compare: IC-Basic[1018] >= IC-Basic[3186]
      If Touching a Floor, Wall, or Ceiling: 3
      And Not Touching a Floor, Wall, or Ceiling: 2
      And Not Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[D] >= 0
         And Compare: LA-Float[D] < 15
            Float Variable Add: LA-Float[D] += 1
         End If
         If Compare: LA-Float[D] <= 119
         And Compare: LA-Float[D] > 105
            Float Variable Subtract: LA-Float[D] -= 1
         End If
      Else
         If Compare: LA-Float[D] > 0
         And Compare: LA-Float[D] <= 59
            Float Variable Subtract: LA-Float[D] -= 1
         End If
         If Compare: LA-Float[D] < 119
         And Compare: LA-Float[D] >= 59
            Float Variable Add: LA-Float[D] += 1
         End If
      End If
   End If
Execute Loop

Quite a lot of coding, isn't it.

Here's a tl;dr summary: This coding will change the Frame of the Move animation, based on control stick input. If moving downward on the ground, it will change to if the character's going forward. If moving upward on a ceiling, it will change to if the character's going up and diagonal. If moving sideways on a wall, it will change to if the character's going up.

2b.) GFX tab.
For this, you're going to need to make two Sub Routines.

Insert the following coding into the first Sub Routine you made:
If Compare: IC-Basic[1018] >= IC-Basic[3186]
   If Compare: LA-Float[F] < 3.5
      Float Variable Add: LA-Float[F] += 0.1
   End If
   If Compare: LA-Float[F] > 3.5
      Float Variable Subtract: LA-Float[F] -= 0.1
   End If
Else
   If Compare: IC-Basic[1020] >= IC-Basic[3186]
      If On Ground:
         If Compare: LA-Float[F] < 0
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > 0
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      Else
         If Compare: LA-Float[F] < -3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > -3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
   Else
      If Touching a Floor, Wall, or Ceiling: 2
      Or Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[F] < 3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > 3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      Else
         If Compare: LA-Float[F] < 0
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > 0
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
   End If
End If

Then insert the following coding into the second Sub Routine:
If Compare: IC-Basic[1012] >= IC-Basic[3149]
   If Touching a Floor, Wall, or Ceiling: 2
   Or Touching a Floor, Wall, or Ceiling: 4
      If Compare: LA-Float[A] > 0
         Float Variable Subtract: LA-Float[A] -= 0.1
      End If
      If Compare: LA-Float[A] < 0
         Float Variable Add: LA-Float[A] += 0.1
      End If
   Else
      If Compare: LA-Float[A] > -3.5
         Float Variable Subtract: LA-Float[A] -= 0.1
      End If
      If Compare: LA-Float[A] < -3.5
         Float Variable Add: LA-Float[A] += 0.1
      End If
   End If
Else
   If Compare: IC-Basic[1011] >= IC-Basic[3149]
      If Touching a Floor, Wall, or Ceiling: 2
      Or Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[A] > 0
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[23] < 0
            Float Variable Add: LA-Float[A] += 0.1
         End If
      Else
         If Compare: LA-Float[A] > 3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[23] < 3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
   Else
      If On Ground:
      Or Touching a Floor, Wall, or Ceiling: 3
         If Compare: LA-Float[A] > 3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      Else
         If Compare: LA-Float[A] > 0
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 0
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
   End If
End If

After that, insert the following coding into the GFX tab (make sure you note which Sub Routines you made):

Set Loop Infinite
   Set/Add Momentum: Horizontal=0, Vertical=0, Add/Set Horiz=1, Add/Set Vert=1
   Add/Subtract Character Momentum: Horizontal Speed=LA-Float[A], Vertical Speed=LA-Float[F]
   Synchronous Timer: frames=Y
   If Compare: IC-Basic[1012] >= IC-Basic[3149]
      If Touching a Floor, Wall, or Ceiling: 2
      Or Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[A] > 0
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 0
            Float Variable Add: LA-Float[A] += 0.1
         End If
      Else
         If Compare: LA-Float[A] > -3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < -3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
      Subroutine SubRoutine0 in the SubRoutines list
   End If
   If Compare: IC-Basic[1011] >= IC-Basic[3149]
      If Touching a Floor, Wall, or Ceiling: 2
      Or Touching a Floor, Wall, or Ceiling: 4
         If Compare: LA-Float[A] > 0
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 0
            Float Variable Add: LA-Float[A] += 0.1
         End If
      Else
         If Compare: LA-Float[A] > 3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
      Subroutine SubRoutine0 in the SubRoutines list
   End If
   If Compare: IC-Basic[1018] >= IC-Basic[3186]
      Subroutine SubRoutine1 in the SubRoutines list
      If Compare: LA-Float[F] < 3.5
         Float Variable Add: LA-Float[F] += 0.1
      End If
      If Compare: LA-Float[F] > 3.5
         Float Variable Subtract: LA-Float[F] -= 0.1
      End If
   End If
   If Compare: IC-Basic[1020] >= IC-Basic[3186]
      Subroutine SubRoutine1 in the SubRoutines list
      If On Ground:
         If Compare: LA-Float[F] < 0
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > 0
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      Else
         If Compare: LA-Float[F] < -3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > -3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
   End If
   Float Variable Subtract: LA-Float[C] -= 1
Execute Loop

tl;dr explanation: This coding does the same thing as the Main tab, except for momentum, rather than the current Frame.

2c.) SFX tab.
This is the simplest part of Part 2. Insert the following coding into the SFX tab.

Set Loop Infinite
   Synchronous Timer: frames=Y
   If Compare: LA-Float[D] <= 119
   And Compare: LA-Float[D] > 59
   And Compare: LA-Float[C] <= 1
   And Not Bit is Set: LA-Bit[E]
      Bit Variable Set: LA-Bit[E] = true
      Reverse Direction
   End If
Execute Loop

What this will do is if the current Frame is less than or equal to 120 and more than 60 while also checking to see if the timer is almost out and if the Bit isn't set. If these conditions are met, then the character will reverse their direction once the timer ends.

3d.) Other tab.
The final part of Part 2. Insert the following coding into the Other tab.

Set Loop Infinite
   Synchronous Timer: frames=Y
   If On Ground:
      If Compare: LA-Float[D] > 59
      And Compare: LA-Float[D] < 90
         Float Variable Add: LA-Float[D] += 1
         If Compare: LA-Float[A] > -3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < -3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
      If Compare: LA-Float[F] < 0
         Float Variable Add: LA-Float[F] += 0.1
      End If
      If Compare: LA-Float[F] > 0
         Float Variable Subtract: LA-Float[F] -= 0.1
      End If
      If Compare: LA-Float[D] <= 59
      And Compare: LA-Float[D] > 30
         Float Variable Subtract: LA-Float[D] -= 1
         If Compare: LA-Float[A] > 3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
   End If
   If Touching a Floor, Wall, or Ceiling: 3
   And Not Touching a Floor, Wall, or Ceiling: 2
   And Not Touching a Floor, Wall, or Ceiling: 4
      If Compare: LA-Float[D] >= 0
      And Compare: LA-Float[D] < 15
         Float Variable Add: LA-Float[D] += 1
         If Compare: LA-Float[A] > 3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < 3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
      If Compare: LA-Float[D] <= 119
      And Compare: LA-Float[D] > 105
         Float Variable Subtract: LA-Float[D] -= 1
         If Compare: LA-Float[A] > -3.5
            Float Variable Subtract: LA-Float[A] -= 0.1
         End If
         If Compare: LA-Float[A] < -3.5
            Float Variable Add: LA-Float[A] += 0.1
         End If
      End If
   End If
   If Touching a Floor, Wall, or Ceiling: 2
   Or Touching a Floor, Wall, or Ceiling: 4
      If Compare: LA-Float[A] > 0
         Float Variable Subtract: LA-Float[A] -= 0.1
      End If
      If Compare: LA-Float[A] < 0
         Float Variable Add: LA-Float[A] += 0.1
      End If
      If Compare: LA-Float[D] < 90
      And Compare: LA-Float[D] > 59
         Float Variable Subtract: LA-Float[D] -= 1
         If Compare: LA-Float[F] < -3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > -3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
      If Compare: LA-Float[D] >= 90
      And Compare: LA-Float[D] < 119
         Float Variable Add: LA-Float[D] += 1
         If Compare: LA-Float[F] < 3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > 3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
      If Compare: LA-Float[D] > 30
      And Compare: LA-Float[D] < 59
         Float Variable Add: LA-Float[D] += 1
         If Compare: LA-Float[F] < -3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > -3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
      If Compare: LA-Float[D] <= 30
      And Compare: LA-Float[D] > 0
         Float Variable Subtract: LA-Float[D] -= 1
         If Compare: LA-Float[F] < 3.5
            Float Variable Add: LA-Float[F] += 0.1
         End If
         If Compare: LA-Float[F] > 3.5
            Float Variable Subtract: LA-Float[F] -= 0.1
         End If
      End If
   End If
   If Not Has a Floor Below the Player:
      If Compare: LA-Float[D] < 85
      And Compare: LA-Float[D] > 35
         Edge Interaction 04: Boolean-false,
      End If
   End If
Execute Loop

tl;dr explanation: This coding does the same thing as the Main and GFX tabs, but does it automatically, so the character isn't stuck in place if not pressing the control stick. The character will also go through platform if facing downward and in the air.

The most difficult and longest part it out of the way, now let's finish this!

Part 3: End
-Actions-
Insert the following coding into the Action you set Part 2 to direct to when the timer hits 0.

X=Ground version.
Y= Air version.

Change Action action=0, requirement=Animation End
Additional Change Action Requirement On Ground
Change Action action=16 (Dec)/10 (Hex), requirement=Animation End
Additional Change Action Requirement In Air
Set Loop Infinite
   If On Ground:
      Set Air/Ground: On Ground
      Set Edge Slide: Can drop off side of stage
      If Bit is Set: RA-Bit[16]
         Change Subaction: sub action=X, pass frame=true
      Else
         Change Subaction: sub action=X
         Bit Variable Set: RA-Bit[16] = true
      End If
      Additional Subaction Change Requirement: In Air
   Else
      Set Air/Ground: Undefined(10)
      Set Edge Slide: In Air; Can leave stage vertically
      If Bit is Set: RA-Bit[16]
         Change Subaction: sub action=Y, pass frame=true
      Else
         Change Subaction: sub action=Y
         Bit Variable Set: RA-Bit[16] = true
      End If
      Additional Subaction Change Requirement: On Ground
   End If
   Loop Rest
Execute Loop

Once that's done, let's conclude this.

-Sub Actions-
In the Ground Sub Action, insert the following coding:

If In Air:
   Allow/Disallow Ledgegrab: Value-2,
End If
If Bit is Set: LA-Bit[E]
   Float Variable Divide: LA-Float[A] /= -2
   Float Variable Divide: LA-Float[F] /= 2
Else
   Float Variable Divide: LA-Float[A] /= 2
   Float Variable Divide: LA-Float[F] /= 2
End If
Set/Add Momentum: Horizontal=0, Vertical=0, Add/Set Horiz=1, Add/Set Vert=1
Add/Subtract Character Momentum: Horizontal Speed=LA-Float[A], Vertical Speed=LA-Float[F]

What this coding does is divide the current momentum by 2 before applying it for momentum preservition. To preserve more momentum, reduce the number. To preserve less momentum, increase the number.

In the Air version, just insert a GoTo command that references the Ground version.

Once you have everything done, save and test. If you come into any issues, make sure you inserted your coding correctly. If you made sure, then let me know the issue.

I hope this long wall of text and jibberish was worth it. :L

The finished result should look something like this: http://gfycat.com/BriefFlawlessAmericanlobster
47  Super Smash Bros. Brawl Hacking / Programming / Limited Specials, Independent Sub Routines, and On the Fly Attribute Switching on: November 01, 2015, 07:57:48 PM
From Brawl Minus comes entirely new PSA commands! This was all done from Mawootad from the Brawl Minus Dev Team.

These new commands allow you to limit aerial Specials, have a Sub Routine that lasts outside the Action it was activated in, and changing Character Attributes on the fly.

Code:
Limited Specials [Mawootad]
4A000000 8077f218
60000001 00000000
D2000000 00000017
2C040112 41A000A0
2C040115 41A10098
807F00D8 80630064
81830000 818C0018
3C801000 38840047
7D8903A6 4E800421
5460843E 2C002718
40A20054 80810010
3884FEEE 5484083C
20A40020 5C602FBF
40A20014 38A5FFF8
5C602FBF 41A20030
48000050 38A00001
7CA42030 3CA01000
38A50047 807F00D8
80630064 81830000
818C0030 7D8903A6
4E800421 819E0000
7FE5FB78 7FC3F378
80810010 818C0014
7D8903A6 4E800421
38600001 48000008
38600000 00000000
14000004 2C030001
14000008 41A201CC
4A000000 8077f3b4
62000000 00000000
14000008 41A20030
C283c814 0000000C
4E800421 807900D8
80630064 81830000
818C0018 3C801000
38840047 7D8903A6
4E800421 5460843E
2C002718 40A20030
5460C63E 5464002E
7C840378 807900D8
80630064 81830000
818C001C 3CA01000
38A50047 7D8903A6
4E800421 00000000

Setting LA-Basic[71] to the special format 2718XXYY limits repeated use of specials in the air. XX is the max specials in the binary format DDUUSSNN (set to zero to disable limiting of that special), YY is the current available number of specials.  Available refreshes to max on landing.  Refreshing on swimming/damage is implementer's responsibility.

Example: Basic Variable Set: LA-Basic [71]: 27189C9C
This would give you 2 Down Specials, 1 Up Special, 3 Side Specials, and unlimited Neutral Specials.

You would set this Variable in the Wait1 Sub Action and the Squat Sub Action (If making the Variable effect Down Special).

The max for any Special is 3. So if you wanted 3 Down Specials, 3 Up Specials, 3 Side Specials, and 3 Neutral Specials, you would set the Value to 2718FFFF

Code:
Independent Subroutines [Mawootad]
C277CFB4 00000021
2C000005 41A00014
2C000007 41820014
41810008 3803FFFB
2C000003 480000E8
3B600000 7FC3F378
38000000 7FC3F378
90010080 38810080
98010084 7F65DB78
819E0000 818C0020
7D8903A6 4E800421
2C030000 41820020
88810084 28040001
41820014 80610080
80030000 2C000000
41A2000C 38600001
4800007C 2C1B0001
41820010 3B7B0001
83830004 4BFFFF98
83630004 807D0020
7C7D1B78 81830000
818C0018 7D8903A6
4E800421 7C7F1B78
3BC00000 48000034
819D0010 387D0010
7FC4F378 818C0010
7D8903A6 4E800421
80030008 7C1C0000
40A2000C B363000C
48000010 3BDE0001
7C1EF800 4180FFCC
38600001 3D808078
398CD56C 7D8903A6
4E800420 00000000
C277d098 00000006
7C1F0378 819E0000
7FC3F378 818C0010
7D8903A6 4E800421
2C030005 41A0000C
57E006F7 48000008
57E0077B 00000000
C277d0cc 00000003
7C600774 2C000005
41A00008 3803FFFB
2C000000 00000000
0477cf8c 2C000008
C278250c 00000019
28040060 40A200B8
7F63DB78 38800000
3D808078 398C22E0
7D8903A6 4E800421
80030000 2C000000
41A2000C 38600001
4800007C 83A30004
807C00D8 8063006C
80630020 7C7B1B78
81830000 818C0018
7D8903A6 4E800421
7C7F1B78 3BC00000
48000040 819B0010
387B0010 7FC4F378
818C0010 7D8903A6
4E800421 80030008
7C1D0000 40A20018
80630000 8063000C
7C600034 5403D97E
48000014 3BDE0001
7C1EF800 4180FFC0
38600001 3D808078
398C54B4 7D8903A6
4E800420 2804004C
60000000 00000000

Adds the commands 0D050200, 0D060100, and 0D070200 -- Independent Subroutine, Terminate Independent Subroutine, and Set Thread Type, as well as the requirement 60 -- Thread is null.  Set Thread Type sets the type of a PSA thread to a given value.  0x4 denotes a concurrent infinite loop.  0x10 denotes an independent subroutine, which functions similarly to a normal subroutine but ignores frame speed modifiers and does not terminate when the current action or subaction changes.  Threads 8 and 7 are available and unused for all fighters. Threads 5 and 6 may be safe.

Example: If: Thread is Null (Custom): 8
Set Thread Type (Custom) (0D070200): (Thread 8 ): 10
Independent Subroutine (Custom) (0D050200): (Thread 8 ): *Offset*
End If

What this will do is check to see if a thread is in use. If a thread isn't being used, then it will set a thread before executing an Independent Sub Routine.

You can also use this for Concurrent Infinite Loops in case you already have a Concurrent Infinite Loop in progress and want to be able to easily modify the code that you're running.

Set Thread Type (Custom) (0D070200): (Thread 7): 4
Concurrent Infinite Loop: (Thread 7 ): *Offset*

Take note that it's not very safe to use Thread 9 outside of Specials, as the Fighter.pac might be using Thread 9 with various Concurrent Infinite Loops. So you can use that coding if you need to have a Concurrent Infinite Loop in a given Action/Sub Action.

Code:
On the Fly Attribute Modification (Item Crash Fix) [codes, Mawootad]
C27AD58C 00000019
28000020 418000B8
28000025 408000B0
1FA0000C 3BBDFE80
80FF00D8 3C6080B8
808368D8 806700C4
1C8401C8 38A00BB8
54A0103A 7C632214
7C630214 3B83D138
57DFA53E 57DE053E
48000005 7C0802A6
3BBD001C 7FBD0214
7FA903A6 57C0103A
7C1C042E 4E800420
7FFC052E 48000034
60000000 EC00F82A
7C1C052E 48000024
EC00F828 7C1C052E
48000018 EC0007F2
7C1C052E 4800000C
EC00F824 7C1C052E
3BDE0001 7C1EF800
4081FFB4 3D80807B
398CD5BC 7D8903A6
4E800420 3C6080AD
60000000 00000000
047ACE78 2C000025
C27ACEA0 00000005
28000025 4080001C
28000020 41A00014
3C60807B 3863D2A0
7C6903A6 4E800420
60000000 00000000

Adds the commands 12200200 - 12240200 -- set, add, subtract, multiply, and divide attribute range.  Commands take two inputs, the first is a variable or scalar, the second is a specially formatted variable.  The second command should be a variable (type is irrelevant) with a hexadecimal id of 0xBBBAAA.  AAA is first attribute to write to, as counted in the 0-indexed attribute value table.  BBB is the last attribute to write to.  If BBB is less than AAA, the single attribute referenced by AAA is modified.  The code does not check whether the given attribute is valid and specifying a value for AAA or BBB that is too large may result in crashes.  Attribute changes reset upon respawning.

Parameter 1 uses Scalar while Parameter 2 uses an IC-Basic Variable. These commands won't work with Integer Attributes though, so if you wanted to find a specific attribute, you would count down while skipping any Integer Attributes. The Attributes start at IC-Basic [ 0 ].

Example: Attribute Range Set (12200200): 152, IC-Basic [40] would change the Weight Attribute to 152 until the character dies or if the attribute is changed again.

This thread will be updated with more info, as Mawootad still needs to write down documentation on it (and I'm still asking him things).
48  Super Smash Bros. Brawl Hacking / Programming / Project M Codes Official Release Thread on: October 06, 2015, 04:37:56 PM
While this code doesn't seem like much, it will help moveset modders greatly by shaving off a little file size while getting rid of most of the difficulty of throwing a Trophy Stand in the SSE.

Disclaimer: These codes were created by standardtoaster and permission was given to me by standardtoaster to release these codes publicly.

Code:
Trophy Throws are Smash Throws [Standardtoaster]
04FB8980 00000105
04FB8990 0000010E
04FB89C0 00000106
04FB89D0 0000010F
04FB8A50 00000103
04FB8A60 0000010C
04FB8A70 00000104
04FB8A80 0000010D
04FB8B88 0000010C
04FB8B98 00000103
04FB8BD0 0000010C
04FB8BE0 00000103
04FB8BF0 0000010D
04FB8C00 00000104
04FB8C40 0000010E
04FB8C50 00000105
04FB8C60 0000010F
04FB8C70 00000106
04FB9830 00000107

Makes Pokeballs use the standard item limit of 8.
Code:
Pokeballs use Normal Item Limit [standardtoaster]
049B0AC0 60000000

Cannot be footstooled during the paralyzed state.
Code:
Disable Footstool During Paralyze [Dantarion, standardtoaster]
C283D134 00000004
83BC0014 A3BD005A
2C1D00A9 40A20008
38600001 981B0004
60000000 00000000

This post may update if any other PMDT give me permission to make their codes public, but it's not likely to happen anytime soon.
49  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: could someone please port this PSA for me? on: September 20, 2015, 08:01:09 PM
This topic has been moved to A/A Requests/Ideas.

http://forums.kc-mm.com/index.php?topic=75111.0
50  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Editing Ivysaur's leaf graphic on: September 10, 2015, 07:31:52 PM
This topic has been moved to A/A Help.

http://forums.kc-mm.com/index.php?topic=75051.0
51  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Yoshi Up Special or Recreation of Melee Air Dodge on: August 09, 2015, 11:06:00 AM
This topic has been moved to A/A Requests/Ideas.

http://forums.kc-mm.com/index.php?topic=74861.0
52  Help & Tutorials / Model Tutorials / Smash Wii U Model + Texture Ripping Guide on: June 29, 2015, 01:46:30 PM
Wondering how to get the models and textures from Smash Wii U? Well this tutorial will show you the basics.

Note: This tutorial will only cover the basics on how to import the Wii U models and textures to be view-able in BrawlBox. This tutorial will not show how to bake the normal maps over the material maps nor show you how to get your import working in-game, as both require extensive editing. There is however an existing tutorial on how to bake the normal maps over the material maps.

Credits: RandomTalkingBush. Without him, we wouldn't even be able to have the Wii U models and textures at our disposal.

Requirements:
-Smash Wii U model file (.nud file) + texture file (.nut file). All the characters, stages, and DLC can be found here.
-Noesis. Use the first mirror, as the second mirror is dead.
-QuickBMS.
-RTB's QuickBMS script (Right click then save as).
-TexConv2.
-Autodesk 3DS Max. I use 2014, but you can use other versions.
-RTB's 3DS Max script. There will be two version of the script. The second version of the script is used with 3DS Max versions 2012 or later. Use the first script for versions of 3DS Max that are 2011 or older.
-A version of BrawlBox that supports .dae importing (At least v0.71 is recommended. Or v0.76 to look at how your import will look in-game).

If you already have the programs and scripts listed above, then continue reading.

Extracting and Converting the Textures.
1.) Launch QuickBMS, open the script with it, then select your model.nut.
2.) Extract the .gtx textures into the Convert folder in the same directory you choose to extract TexConv2 to.
3.) In your TexConv2 folder, run convertGTX.bat. The .dds textures will be in the OutDDS folder. Move the .dds files to the same directory you have your model.nud in. You can then delete the .dds files that are in the OutDDS_less folder and the .gtx files that you placed in the Convert folder.
4.) Launch Noesis and find the directory you placed your .dds textures in and convert them all into .png by right clicking on the file in Noesis' interface and clicking on Convert. Select .png from the dropdown menu before clicking Export. There is unfortunately no quick way to do this, so you'll have to convert each texture one by one. You may close Noesis after you've finished converting the textures.

Importing the Model into 3DS Max.
1.) Launch 3DS Max and wait for it to open.
2.) Under the MAXScript pannel, click on Run Script and find the 3DS Max script you extracted. You can choose to enable Multiply Vertex Colors, though I was told you should have this enabled. Don't enable the PNG instead of DDS option, unless you decided to rename your png textures to match the name of the dds textures back during the Noesis step.
3.) Click on Import Model and find your character's model.nut file. Then wait as the model imports. It may take some time, based on how powerful your computer is.
4.) Your character should now be in the 3DS Max scene with all textures applied (aside from Normal maps and Alpha maps). The character will be on their back, but do not edit anything. Optional: Press "7" to view how many polys the character's model has.
5.) Feel free to save your Scene.

Exporting the Model from 3DS Max.
1.) Select all the character's bones. You can easily do this by pressing "h", making sure only Bones are shown, and pressing Ctrl + A.
2.) Go to the Tools panel and click on Rename Objects. Disable the Base Name option before enabling the Remove First X Digits option. Set the Remove First X Digits option to 6 before clicking on Rename.
3.) Click on the button in the upper left hand corner of the program before clicking on Export.
4.) Find the directory you want to save your .dae in. Give a name to your model and change the file type to .DAE in the bottom dropdown bar. Click on Save.
5.) In the FBX Export window, make sure the following options are enabled.
-Convert Deforming Dummies to Bones.
-Preserve Edge Orientation.
-Animation.
-Deformations.
-Skins.
-Morphs.
-Triangulate.
-Single Matrix.
Make sure the following options are disabled.
-Split per-vertex Normals. 3DS Max has this disabled by default, so I left this disabled.
-Remove Single Key.
-CAT Characters as HIK.
-Cameras.
-Lights.
6.) Under the Units section, make sure the Scale Factor is 1. If it's not 1, then disable Automatic and edit the "Scene units converted to" dropdown menu until the Scale Factor is 1.
7.) Under the Axis Conversion section, make sure the Up Axis is set to Z-Up.
8.) Click Ok and wait as the model is saved.

Importing into BrawlBox.
1.) Open BrawlBox and make a new brres.
2.) Import the png textures as you normally would. Make sure their names match their respective .dds textures.
3.) Import your exported .dae. Make sure the Model Type is set to Character and Colors are set to True. Also make sure the Tristripper is enabled. Wait for the model to import. If you get any errors, then make sure you did all the previous steps right.
4.) Save.

Note: This will not work in-game. This is only for BrawlBox viewing purposes. But you may toy around with materials and shaders with v0.76 for if you were to edit the model or skeleton to work in-game.

Note 2: With most of the characters, their left arm bones will be rotated. To fix this, export the model from BrawlBox, import into 3DS Max, then export again (in this instance, make sure the Up Axis is set to Y-Up). But take note that the character's normals will break when doing this, as BrawlBox preserves the normals upon export, but 3DS Max doesn't read it.
53  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Polygon visibility per attack? on: June 14, 2015, 03:21:57 PM
This topic has been moved to A/A Help.

http://forums.kc-mm.com/index.php?topic=74418.0
54  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: How to use Super Armor in attacks on: June 07, 2015, 04:35:12 PM
This topic has been moved to A/A Tutorials.

http://forums.kc-mm.com/index.php?topic=74392.0
55  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: How did I forcefully keep my character on the wall? on: May 27, 2015, 10:17:09 AM
This topic has been moved to A/A Help.

http://forums.kc-mm.com/index.php?topic=74296.0
56  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Shadow moveset question on: May 16, 2015, 10:08:19 AM
This topic has been moved to A/A Help.

http://forums.kc-mm.com/index.php?topic=74197.0
57  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Multiples of Characters? on: April 07, 2015, 11:13:50 AM
This topic has been moved to A/A Help.

http://forums.kc-mm.com/index.php?topic=73766.0
58  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Critiquing Animations on: March 28, 2015, 07:55:13 PM
This topic has been moved to A/A Discussion.

http://forums.kc-mm.com/index.php?topic=73658.0
59  Super Smash Bros. Brawl Hacking / Attacks and Animations / MOVED: Graphics we never knew about (External ID File #104) on: March 28, 2015, 02:16:51 PM
This topic has been moved to A/A Discussion.

http://forums.kc-mm.com/index.php?topic=73654.0
60  Super Smash Bros. Brawl Hacking / Music & SFX / Something Everyone Should Know When Inserting New Brstms into Their SD Cards. on: March 28, 2015, 10:37:20 AM
This may come as a shock, but I recently learned not to defragment your SD card if you experience issues with a brstm you're inserting. As in fact, defragmenting your SD card can actually wear it out more quickly.

A less consuming alternative is to format your SD card (do not use the quick format option), then re-insert your files.

Defragmenting a virtual SD card (for use with Dolphin Emulator) is fine though, as it's not an actual physical SD card.

Just posting this to let the community know, as I've seen multiple threads in which users say to defrag your SD card.
Pages:  1 2 3 [4] 5 6 7