The official guide on PSA
This will be a (somewhat) huge guide that will cover all subject regarding the program PSA, made by Phantom Wings. Currently the Guide is still small, because the program is only out for about 2 days. I will do my best to keep the guide up-to-date and in the end make it as complete as possible.
(Currently I’m still in the USA, lacking access to a Wii, so progress might be slowed)
This is the link to a subsection of brawlplus.net which has all those (or will have) all those nice tricks that wouldn't fit in the actual guide.
You can dump all your own tricks there too!
-Terms and abbreviations
-Installation and first time startup
Ok, before we actually get started with PSA, you need to understand some things. Brawl, like most games, use hexadecimal to count. (For those who already know hex, just skip this paragraph.) So in order to use PSA, you need to be able to convert between hexadecimal and decimal. The easiest way to do this is using MS calculator (sorry Mac users). When you have MS calc open, go to View -> Scientific. Now the widow will expand with a couple buttons.
To convert from decimal to hex (I will refer to it as hex from now), check in the upper-left corner if “Dec” is selected. type in a number and click “Hex” in the upper-left. voíla.
To convert the other way round, just select Hex, type the number (you can now also type in letters) and click Dec.
Except Hex numbers, PSA sometimes uses a special number type called Floating Point (FP). When it does I will mention it. To convert between Decimal and FP, go to this link:
To convert from Decimal to FP, go to the first of the links it shows up. In the box where it asks to type a number, type the number you want converted, and click “not rounded”. Scroll down to “32-bit floating point representation” and the 8-digit number is the FP.
To convert from FP to Decimal, go to the second link it shows. Type in the FP, and click calculate, scroll to where it shows the decimal representation.
Terms and Abbreviations
Those who know the most terms used in PSA can skip this.
Hex – hexadecimal, the counting system used by Brawl.
FP – Floating Point, a way to represent rational numbers
IASA – Interruptible As Soon As. Some attacks can be prematurely interrupted. See “Allow Interrupt” in the command section.
Hitbox – an offensive, invisible bubble that represents attacks (for more on hitboxes, see my post at Brawlplus.net). PSA uses the name “(offensive) collision bubble” for this.
This list is currently very incomplete, but I don’t want to put every single term in here, please tell me which I should put up here.
Installation and first time startup
First you will need the actual program:
download and extract the files to a place you can remember.
download and extract this to the "data" folder in side PSA. This contains the actuall data
files of the characters.
with that out of the way, double click the .exe file and you should be good.
The interface of PSA looks like this:
go to File -> Open, as you are used to. locate the .pac file where you left it. (should be in the data folder if you did as told in the installation). Keep in mind that you need to use files without a number, so “FitMario.pac” would be correct, while “FitMario01.pac” would not.
Saving is under File -> Save. IMPORTANT don’t overwrite the original .pac files, since these are your base for everything. IF you managed to overwrite is anyway, redownload it.
To properly save a new file, choose File -> Save As, and pick a descriptive name like “FitMarioTest.pac”.
On the lower side of the screen you will find a couple buttons.
Will add a “nop” command on the end of the command list. Note that adding commands is not advised since it can cause memory errors.
Allows you to modify the currently selected line, both the type of command and the parameters can be edited. To specifically edit the type of command, click Modify and then “change” in the upper right corner.
Will delete the currently selected line(s).
Up and Down arrows
moves the currently selected line(s) in the desired direction.
copies the currently selected line(s) to clipboard.
Will paste the line(s) on clipboard to the end of the page.
The interface is divided in a couple (sub)sections, each given each own entry below.
This tab allows you to modify certain values tied to a character, such a weight, dash speed and jump height. These values are often referred to as the characters physics, since they determine how a character will move on the screen.
Note that (almost) all values are in FP.
To modify a value, click it’s line and type in the desired value in the upper box. Easy as that.
There isn’t much else to say about Attributes, since this is a very intuitive part of the program.
This part of the program allows you to redefine how moves work, specials are constructed and more.
This tab is subdivided in another 3 tabs; Specials, Sub Actions and Sub Routines.
Here you can change how the structure of a special move is built up. the things you do here don’t actually do anything (that is for the Sub Actions), but tell Brawl how a certain special is built up. This mean it decides when a charging move releases, checks requirements for an action etc. etc.
You might wonder why this section is called specials, and not “actions” or “moves”. This is because the structure of all normal moves is defined for every character to be the same, and messing with it on a character by character basis would mess things up badly.
These are the action IDs and what they stand for:
112 Neutral Special
113 Side Special
114 Up Special
115 Down Special
116 Final Smash
The numbers after 116 differ for each character, but usually are follow-ups for the mentioned actions. For example, 112 could be the startup for a move and 117 the actual release of it (and 118 the cooldown).
You can view which Sub Action IDs are tied to the action by looking to what Sub Action ID is being switched in the commands.
For now I advise not to mess too much with this section, mostly because I don’t know too much about it yet.
The full command list can be found under The Commands.
Sub Actions define what actually happens with your character (everything that happens is tied to your character, including hitboxes). Here you can create hitboxes, get those cool graphics and of course turn the screen purple (no serious).
Each Sub Action has a lot of properties. (I have said that a couple times now I think)
Sub Action ___
The ID of the Sub Action. This will be your point of reference. I will call this SubID from now on.
This is the name of the animation that will be played during execution of the sub Action.
unless you want to switch animations (see below), leave this alone.
Full list will come!
|Originally Posted by Segab |
Wait1, Wait2, Wait3: standing animations
JumpSquat: preparing to jump
JumpF: jump forward
JumpB: jump backward
JumpAerialF: double jump forward
JumpAerialB: double jump backward
WalkSlow: walk slow
WalkMiddle: walk middle
WalkFast: walk fast
WalkBrake: brake while walking
Dash: initial dash
RunBrake: brake while running
TurnRun: turn while runnning
TurnRunBrake: turn and brake while running
Normal Attack animations
Attack11, Attack12, Attack13 : neutral A combo (ie. punch-punch-kick)
AttackDash : dash attack
AttackS3: Forward tilt if theres no angled (F-tilt)
AttackS3Hi : up Forward tilt (up F-tilt)
AttackS3S : middle Forward tilt (middle F-tilt)
AttackS3Lw : down Forward tilt (down F-tilt)
AttackHi3 : Up tilt (U-tilt)
AttackLw3 : Down tilt (D-tilt)
AttackS4Start : Initate Forward smash
AttackS4S : Forward smash
AttackS4Hold : charge Forward smash
AttackHi4Start : Initate Up smash
AttackHi4 : Up smash
AttackHi4Hold : charge Up smash
AttackLw4Start : Initate Down smash
AttackLw4 : Down smash
AttackLw4Hold : charge Down smash
AttackAirN : Neutral aerial (N-air)
AttackAirF : Forward aerial (F-air)
AttackAirB : Back aerial (B-air)
AttackAirHi : Up aerial (U-air)
AttackAirLw : Down aerial (D-air)
LandingAirN: landing from N-air
LandingAirF: landing from F-air
LandingAirB: landing from B-air
LandingAirHi: landing from U-air
LandingAirLw: landing from D-air
AttackDash: dash attack
CliffAttackQuick : Ledge Attack below 100%
CliffClimbQuick : getting Up without attacking form the ledge below 100%
CliffEscapeQuick : Pressing R/L/shield button to roll from the ledge below 100%
CliffJumpQuick1/2/3... : Jumping up form the ledge below 100%
CliffAttackSlow : Attacking from the ledge above 100%
CliffClimbSlow : getting Up without attacking form the ledge above 100%
CliffEscapeSlow : Pressing R/L/shield button to roll from the ledge above 100%
CliffJumpSlow1/2/3... : Jumping up form the ledge above 100%
Special Attack animations
Special: their name change depending on the character, but they are all B attacks
N: neutral B (ie. SpecialN)
Hi: up B (ie. SpecialHi)
S: side B (ie. SpecialS)
Lw: down B (ie. SpecialLw)
Air: any B attack in the air (ie. SpecialAirS = side B in the air)
depending on the character, there will be something after "Special" and it's direction. "SpecialAirNShoot" would be neutral B while in the air and shooting
Final: using a final smash
FinalAir: using a final smash in the air
some characters will have extra stuff after "Final"
GuardOn: start shield
GuardOff: stop shield
EscapeN: spot dodge
EscapeF: dodge forward
EscapeB: dodge backward
EscapeAir: air dodge
Catch/CatchDash/CatchTurn : standing, running, and turn-around grabs
ThrowF: forward throw
ThrowB: backward throw
ThrowLw: down throw
ThrowHi: up throw
AppealHi : Up Taunt
AppealS : Side taunt (there's 2 of them)
AppealLwR : Down taunt (facing right)
AppealLwL : Down taunt (facing left)
Win1: victory pose 1
Win1Wait: victory pose 1 standby
Win2: victory pose 2
Win2Wait: victory pose 2 standby
Win3: victory pose 3
Win3Wait: victory pose 3 standby
Lose: lose pose
This sets a couple “flags” or settings for the animation. I don’t know too much about it yet except you might best leave it alone for now.
This is the physical address this particular Sub Action is in memory. You can’t change it, but it is sometimes used by the “Goto” command. Also see The Commands section for more about the Goto command.
Event List ___
Each Sub Action is divided in 4 parts; Main, GFX, SFX and Other. Main handles the physical properties (hitboxes, body status), GFX handles graphical effects (fire under Mario’s feet?), SFX handles sound effect (YES!) and Other handles some unknown things.
Since I had no clue where else to put this:
Graphics effect IDs
|1 Generic Hit 1|
2 Generic Hit 2
3 Fire Hit
4 Lightning Hit
5 Slash Hit
6 Slash Wave Hit
7 Heavy Landing
8 Light Landing
15 Small Dust
29 large dust blast
30 Lucario like aura effect
31 Light Line
32 Bright Yellow Orb
34 Cool vortex Circle Thing
35 Circular Flash
36 Stars (healing visuals)
37 Kirby Star (the effect when you destroy star box in dreamland stage)
38 Pokeball effect (the effect when they are about to come out the ball)
39 Rockslide effect?
3A fire Explosion
3B Better fire explosion
4B Dust Smoke Cloud things
4C Bright Blue Effect
4D Bomb-omb explosion
4E Water splash
50 Water splash
51 Purple Burst
52 Dark Orb
53 Fire Sun
54 Flame Orb
55 Stars (permanent)
56 Blue wave Flash
57 Huge coin
58 Green Laser
59 Green thruster
5A More Stars
5B Kirby Warp star
As mentioned above, you can switch what animations are played when. Now let us turn Bowser’s second jab into his Up Smash. For the sake of brevity I will call the second jab “X” and the Up Smash “Y”. First, locate the subID of both X and Y. Write down or copy the exact Animation name in Y, and also note the Animation Flags down. Go to X, and paste the Animation name and Animation Flags. Go Back to Y, select and copy everything in Main. Again, Paste the copied data in X (you might need to remove what was already there first). Repeat for GFX, SFX and Other.
Now when you Bowser’s second jab he will instead launch an Usmash.
Onto Sub Routines.
Sub Routines are snippets of commands, that are called (triggered) by Sub Actions. Right now I honestly don’t know much about it, but PW might be able to tell me more about them.
The add/modify/remove buttons are disabled, but you can modify the commands by double-clicking them. You can however not add any new ones.
To cal up a Sub Routine, look up the offset in a Sub Action that refers to it. It will look like “Sub Routine 0x________” where the ___ is the offset you want. Write it down/remember it/copy it and type it in the box next to offset, click “Go”.
I wish I had more to say on Sub Routines but I don’t so let’s move on.
This will be a listing with all commands. I will list the commands in the order you find them under “change”. Some commands will be listed multiple times, each having a slightly different parameter set than the other.
Nop [No parameters]
This command does nothing. I’m serious it literally does nothing. The name means “No Operation”, and in the context of PSA I can’t really think of any other use than to keep references working (like you remove one command, but other SubIDs refer to commands after the removed, so in order to keep the offset the same you place a Nop on the place where you removed the command).
Timer [Interval (scalar)]
This pauses the current execution of commands for a number of clock cycles. Animation keeps running, so this command is used to adjust timing of commands in relation to trhe animation. Think about frame data, hitbox timing etc.
While I’m not yet 100% sure, 30000 seems to be 1 one frame.
Set Loop [Parameter 0 (value)]
Sets a loop for a number of cycles. This the beginning of a loop, used to execute a certain (group) of command(s) multiple times. Set the number of cycles to “FFFFFFFF” for infinite looping. Also see “Loop Rest” and “Execute Loop”.
Execute Loop [No Parameters]
This returns the command execution back to the “Set Loop” command. Marks the end of a loop. Also see “Set Loop”.
Sub Routine [Offset (Pointer)]
Executes the Sub Routine found at specified address. Not much known yet about Sub Routines.
Return [No Parameters]
Return from a Sub Routine. Actually barely a clue what this does, since I don’t see it after the “Sub routine” command, nor at the end of a Sub Routine.
Goto [Offset (pointer)]
Goes to the address specified. Can be used in combination with an “If” to prematurely go to another SubID if certain conditions are met. Or you can skip a certain part of the Sub Action when conditions are met.
If [Requirement (Requirement)]
Marks the start of an If block that only executes if conditions are returned true. This version only checks if the state referred to comes up as “true”.
This is one of the basic tools to control the flow of commands.
The structure is: If, [commands], Else, [commands], EndIf (the Else can be omitted).
Also see the other “If” commands, and “Else” and “EndIf” commands
If [Requirement (Requirement), Variable (Variable)]
First command with multiple parameters, so pay attention (lol). This version checks if the Requirement equals the specified variable. I personally think this version is a lot less common than the other 2. Also see the other 2 “If” commands and “Else” and “EndIf” commands.
If [Requirement (Requirement), Variable (Variable), Comparison Method (Value), Variable (Variable)]
This particular version of the If command will compare if a value is equal, not equal, greater than etc. compared to another value. See the other 2 “If” commands and “Else” and “EndIf” commands.
Else [No Parameters]
If the conditional check (the If command) fails, the part after Else will instead be executed.
Also see the 3 “If” commands.
EndIf [No Parameters]
This marks the end of the If/Else/EndIf block. Not much else to say about it.
Also see the 3 “If” commands.
Switch [Parameter 0 (Value), Paramter 1 (Variable)]
An interesting alternative to the If command. Use this if you want to execute blocks of commands depending on what a value is, where you have a lot of different "Cases" in which a specific block of commands must be activated. I'm not sure on the first parameter, but the second is the variable that must be compared against.
Also see the "Case", "Default Case" and "End Switch" commands.
Case [Parameter 0 (Value)]
This Case will be executed if the variable specified in the Swithc command equals the value specified here. Also see the "Switch" command.
Default Case [No parameters]
The Case that will be executed if no others turn up as True. Also see the "Switch" command.
End Switch [No Parameters]
Marks the end of a Switch block. Also see the "Switch" command
Loop Rest [No parameters]
Although I’m not really sure what this command DOES, the description says that you MUST place this command just before the “Execute Loop” when then Set Loop is set to “Infinite”. Also see “Set Loop” and “Execute Loop”.
Change Action [Undefined (Value), Action (value), Requirement (Requirement)]
Changes the current Action to the Specified one. In this case Action refers to the actionID (like 112 = Neutral Special). It is used in the Special section to control the flow of actions, with the Requirement often being is often “animation End” meaning that it will not change the action unless the animation has actually finished. What the Undefined value does is unknown.
Also see the other 3 “Change Action” commands.
Change Action [Action (value), Requirement (Requirement)]
Works exactly the same as the previous Change Action, with the absence of the unknown value. Also see the other 3 “Change Action” commands.
Change Action [Action (value), Requirement (Requirement), Variable (Variable)]
Compares the Requirement with the specified variable before changing of the specified action. Also see the other 3 “Change Action” commands.
The rest of the commands will be filled in ASAP. Also, because I’m lazy I will just quote the commands from the previous guide I haven’t mentioned yet
Also, since some of what I just quote is incorrect, here is Magus with some of his awesome posts:
|Body Collision: |
This sets how the character's own hitboxes act. 00 = normal, 01 = invincible, 02 = intangible.
(some more but those are variations of 02)
-normal is how the character normally acts, meaning taking a hit when someone hits him
-invincible is not actual invincible, you take hits as normal, but recieve 0 damage.
-intangible is true invincibility, no taking hits nor damage.
keep in mind that the character will stay in the specified state until explicitly set to
another, so don't forget to reset afterward.
(Special) Offensive collision:
This creates a hitbox (collision bubble) with specified parameters, the difference between
normal and Special is still unknown. The parameters are:
-bone: what part of the characters body the relative position of the hitbox should be tied
to. If for example you tied the hitbox to a sword, it woudl follow it's track during it's
-ID: this is which ID number the actual hitbox is referred to, it need to be unique at any
point for each character. in practise you can just leave these numbers.
-Damage: Kind of straightforward, how much this hitbox does upon connection.
-Trajectory: This is in other places referred to as angle. It determines at which
trajectory/angle the hit will send the opponent.
-Base Knockback. the base amount of knockback the hitbox gives.
-Knockback Growth. By how much the knockback scales with damage.
-Size. How large the hitbox bubble is.
-Z offset. how the hitbox is moved in the Z plane compared to the bone the bubble it is set to.
This is however not relevant since Brawl is played in the 2D plane.
-Y offset. see Z offset, in this case the Y plane, or vertical.
-X offset. See Z offset, in this case the X plane, or horizontal.
-Z, Y, X rotation. The reason I listed all these together since they are all useless. They
rotate the hitbox bubbles, but since there are perferct circles they don't do anything.
-Flags. These set specific effects such as hit effects and others.
I haven't indexed the hit effects yet, be a bit patient. (or mess with flag values yourself)
(yay for too much parameters)
No parameters needed. This removes all created hitboxes tied to this character. Important to
not forget this command.
Basically is IASA. as soon as this command is triggered, you can interrupt the current action
with any other
|Nononono. The hitbox element flag is only the last 2 digits. Changing it to that entire thing droughboi listed will change |
lots of properties of the hitbox to whatever the original move was that flag set was copy/pasted from.
The 2nd to last digit is SHARED with some other flag (possibly part of the SFX flag?), so the 1st digit will be combined with
this other flag's digit. This other flag seems to always either be 0, 4, or 8
This other flag could look something like this:
(Part of SFX?):
So considering both of them, it could look like this:
...with Z being the combined value of the 1st digit of the element and the last digit of that other flag. If the last 2 digits on the original
flags are ------45, and the original element of the hitbox is Fire (05), then to make that instead have Darkness (13) the end of the flag would
now be ------53, Normal Hit (00) would be ------40, Aura (15) ------55, etc. If it was originally Fire and the last 2 flag digits were ------85,
Darkness would be ------93, Normal Hit ------80, Aura ------95.
This is an old elements list, but it seems to match what's used here as well for the one's I've seen:
0F ? (gives hitstun to some moves that don't normally have any)
11 Slash 2
12 Hit 2
16 Impale 2
18 No Flinch
Again, don't overwrite the 2nd to last digit with the element's 1st digit. The 0 or 1 in the element is combined with the 2nd to last flag digit
which is also shared with a different flag.
"Special Offensive Collision:" is what's used to make KBs not reversible like CF's sweetspot knee, Peach's f-air, Sheik's b-air, Zelda's neutral-B,
etc. I was able to make Peach's f-air have reverse hits by changing it to a normal "Offensive Collision:". It erases all the values on it when you
change its type though so you need to re-enter them when you do.
Weight-Dependent Set KB
It would seem that the 1st 4 digits on KBG (mislabeled as BKB in PSA) are used when creating set KB that is affected by weight (how moves naturally have set KB), as opposed to the known way to create set KB through 0 KBG and all into BKB which ends up ignoring weight due to the way BKB works.
Let's take a look at some of the full KBG values on natural set KB moves:
XXXX - Value for KBG-based set KB
YYYY - Value for KBG, and modifier for KBG-based set KB
D-Smash (1st Hit):
00960064 - (150 Weight-Dependant SetKB; 100/1.00 modifier?)
00780064 - (120 Weight-Dependant SetKB; 100/1.00 modifier?)
00500064 - (80 Weight-Dependant SetKB; 100/1.00 modifier?)
F-Smash (1st Hit):
0028006E - (40 Weight-Dependant SetKB; 110/1.10 modifier?)
001E006E - (30 Weight-Dependant SetKB; 110/1.10 modifier?)
Jab 1 (All 3 Hitboxes):
00140064 - (20 Weight-Dependant SetKB; 100/1.00 modifier?)
00B40064 - (180 Weight-Dependant SetKB; 100/1.00 modifier?)
I don't know exactly what the normal KBG value does (usually 100), but it seems to scale the previously hidden value.
I'm going to take a guess and say that the 100 KBG 0 BKB often found on "hardcoded" set KB attacks probably ends up resulting in 100%/1.00x of the KB power specified by this newly uncovered value when included.
Shield Damage Modifier? (untested =P)
I think I figured out what the mystery hidden values on certain moves' BKB could be for...
XXXX - Value for Shield Damage modifier?
YYYY - Value for BKB, and possibly a modifier for Shield Damage property?
Marth's neutral-B has a very high value there under BKB (all hits):
The vast majority of attacks have 0.
D-Throw begins at Sub Action 72. The 1st line there should be the throw's stats:
Parameter 2: Damage
Parameter 3: Angle
Parameter 4: KBG
Parameter 6: BKB
Parameter 7: Element
SDI Potency Modifier
This is labeled as "x rotate" in PSA on hitboxes. It has nothing to do with hitbox rotation however, and changes the size/length you get when you
SDI the move. The default/average value is 60000. Zelda's kicks and Marth's f-smash tip have this as 0, and because of it you can not SDI them
at all. Sheik's F-tilt has 30000, and has small SDI length, Zelda's linking hits of u-smash are 6000 (SDI is only really able to be seen here with
frame advance because it's so small), and her f-smash is 30000.
Hitlag and Shield Hitlag Differential Modifier
This is labeled as "y rotate" in PSA on hitboxes. Again though, it has nothing to do with hitbox rotation. The default/average here is 60000.
Zelda's kicks and Marth's tipped f-smash have 90000, TLink's 2nd hit of f-smash has 120000, and Wolf's f-tilt 180000 as some examples. This
is what can result in what people refer to as "cinematic hitlag", but it's really just the hitlag being multiplied.
I believe it also would be the cause of shield hitlag differential (difference in hitlag of the attacker/defender when it hits a shield).
Sheik's f-tilt is 30000 (half of the default) so Sheik goes into half the normal hitlag when it connects. The shield however, uses the default
value of 60000 so the defender is in hitlag for 2x as long as Sheik when blocking. The opposite is true for things like Marth's tipper hits
which have a value well above 60000 and has him be in hitlag longer than the opponent when blocked.
Tripping Rate Modifier
This one is labeled as "z rotate" in PSA on hitboxes. The default/average is 0. Most of the main trip moves are in the 12000 to 24000 range.
For a trip to occur, they need to not leave the ground from the KB, not be put into tumble, and get the random tripping chance to happen.
I think moves that use a 0 or lower angle get some sort of bonus to this rate by default. I believe it can happen with any angle as long as
the conditions are met.
169 Angle aka 'Sakurai Angle'
This angle is comparable to a 40° angle on stronger KBs, but it seems to either not allow them to lift off the ground from a non-tumble hit
or starts at a low angle and increases towards 40° as the KB increases. Either way, the angle allows them to remain grounded while a normal 30°-40°
angle would lift them off the ground with the same amount of KB.