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)
IMPORTANT LINK:
http://brawlplus.net/forum/project-s...es-and-guides/
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!
Contents
-Important Things
-Terms and abbreviations
-Installation and first time startup
-The interface
-Attributes
-Action events
-Specials
-Sub Actions
-Sub Routines
-The Commands
-Links
Important Things
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:
http://babbage.cs.qc.edu/IEEE-754/
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:
http://www.megaupload.com/?d=0U7SF2SJ
download and extract the files to a place you can remember.
http://www.mediafire.com/file/ttdzjrlj1rz
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
The interface of PSA looks like this:
Opening files:
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:
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”.
The Buttons
On the lower side of the screen you will find a couple buttons.
Add
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.
Modify
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.
Remove
Will delete the currently selected line(s).
Up and Down arrows
moves the currently selected line(s) in the desired direction.
Copy
copies the currently selected line(s) to clipboard.
Paste
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.
Attributes
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.
Action Events
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.
Specials
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
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.
Animation
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.
Animation names
Quote:
Originally Posted by Segab Movement/Jump animations 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 Run: run RunBrake: brake while running Turn: turn TurnRun: turn while runnning TurnRunBrake: turn and brake while running Squat: crouch 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" Shield/Dodge animations GuardOn: start shield Guard: shielding GuardOff: stop shield EscapeN: spot dodge EscapeF: dodge forward EscapeB: dodge backward EscapeAir: air dodge Grabs/Throws Catch/CatchDash/CatchTurn : standing, running, and turn-around grabs ThrowF: forward throw ThrowB: backward throw ThrowLw: down throw ThrowHi: up throw Other animations 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 |
Animation Flags.
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.
Offset
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
Quote:
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 9 Flash A Wind 10 Shine 13 Lightning 15 Small Dust 18 explosion 21 Dust 29 large dust blast 30 Lucario like aura effect 31 Light Line 32 Bright Yellow Orb 33 Smoke 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 4F Water 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
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.
The Commands
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
Quote:
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 swing. -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) Terminate Collisions: No parameters needed. This removes all created hitboxes tied to this character. Important to not forget this command. Allow Interrupt: Basically is IASA. as soon as this command is triggered, you can interrupt the current action with any other |
Quote:
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. Element: ------YY Important 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?): ------X- or -----XX- or ----XXX- So considering both of them, it could look like this: ------ZY or -----XZY or ----XXZY ...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: YY 00 Hit 01 ? 02 Slash 03 Electric 04 Ice 05 Flame 06 Coin 07 Cape 08 Slip 09 Sleep 0A ? 0B Impale 0C Stun 0E Flower 0F ? (gives hitstun to some moves that don't normally have any) 10 ? 11 Slash 2 12 Hit 2 13 Darkness 14 Stun 15 Aura 16 Impale 2 17 Down 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: XXXXYYYY XXXX - Value for KBG-based set KB YYYY - Value for KBG, and modifier for KBG-based set KB Toon Link 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?) Luigi Jab 1 (All 3 Hitboxes): 00140064 - (20 Weight-Dependant SetKB; 100/1.00 modifier?) D-Taunt: 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... XXXXYYYY 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): 00280032 Jiggs' side-B: 00140034 DK's side-B: 001E0014 The vast majority of attacks have 0. Throws 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. |