• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

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

Fox's Functions

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
Gonna use this post as sort of a scratchpad when I get time to do stuff. That way, people cause also look into it and contribute as they see fit.

Action State Table: 803C7788

Code:
Flags:
0x340111 - Grounded Special N 127 & 129
0x3C0111 - Grounded Special N 128
0x340511 - Aerial Special N 12A & 12C
0x3C0511 - Aerial Special N 12B

0x340212 - Grounded Special S 12D, 12E, 12F
0x340612 - Aerial Special S 130, 131, 131

Yes, there's two instances of 135.
0x340213 - ? 133, 135, 136
0x340613 - ? 134, 135, 137, 138

0x72 for Smash Taunt
Code:
Flag meanings:
ABCDEF
A - 3 indicates an attack possibly. It's 7 for Fox's Taunt stuff.
B - 2 for taunt, 4 for attack start/stop states and C for intermediate.
C - 0 for 127 - 138, 1 for 13A - 13E.
D - 1 for grounded, 5 for aerial Special N. 0, 2, 4, 6 for other states.
E - 1 for all but the Taunt?
F - Increments 1 - 4. Probably Special Direction. N, S, D, U ordering, I think

800E5F28 - Does quite a bit, calls 8000B1CC (Load Article, seen in several characters with projectiles), loads the projectile itself. Called every frame the gun is drawn, so seems to be the "major" function.

800E608C - Grounded, Loads ActionState, printfs a "ftToSpecialNFox::Caution!!!\n" message if r3 = 0
800E61A8 - Aerial, Loads ActionState, printfs a "ftToSpecialNFox::Caution!!!\n" message if r3 = 0
There's refs to these function in some type of address table at 803C15FC, 803C1650, 803C1680, and 803C16D4.

800E62A4 - 800E65BC - Fox's Action State 127-129 & 12D, grounded SpecialN, refs 800E5F28
800E667C - 800E69BC - Action State 12A - 12C & 12E, Aerial SpecialN, refs 800E5F28


800E5CB0 - 800E5E38 - All related to firing the projectile
800E5E90 handles holstering the gun.
800E5EBC handles despawning the gun if you die with it out (Seen when falling and hitting the blastzone.)

Only triggers when you do the spin, kneel with Smash Taunt.
Action States 141 - 146 have it as the next Action State function pointer.

Code:
.text1:800E5B18                 mfspr   r0, LR          # Move from sprg,
.text1:800E5B1C                 stw       r0, arg_4(r1) # Store Word
.text1:800E5B20                 stwu      r1, -0x20(r1) # Store Word with Update
.text1:800E5B24                 stw       r31, 0x20+var_4(r1) # Store Word
.text1:800E5B28                 mr        r31, r3       # Move Register
.text1:800E5B2C                 stw       r30, 0x20+var_8(r1) # Store Word
.text1:800E5B30                 lwz       r30, 0x2C(r3) # Load Word and Zero
.text1:800E5B34                 lbz       r3, 0x2210(r30) # Load Byte and Zero
.text1:800E5B38                 extrwi.   r0, r3, 1,27  # Extract and Right Justify Immediate
.text1:800E5B3C                 beq       loc_800E5B54  # Branch if equal
.text1:800E5B40                 li        r0, 0         # Load Immediate
.text1:800E5B44                 insrwi    r3, r0, 1,27  # Insert from Right Immediate
.text1:800E5B48                 stb       r3, 0x2210(r30) # Store Byte
.text1:800E5B4C                 li        r0, 1         # Load Immediate
.text1:800E5B50                 b         loc_800E5B58  # Branch
.text1:800E5B54 # ---------------------------------------------------------------------------
.text1:800E5B54
.text1:800E5B54 loc_800E5B54:                           # CODE XREF: Char_Fox_141to146_Taunt+24j
.text1:800E5B54                 li        r0, 0         # Load Immediate
.text1:800E5B58
.text1:800E5B58 loc_800E5B58:                           # CODE XREF: Char_Fox_141to146_Taunt+38j
.text1:800E5B58                 cmpwi     r0, 0         # Compare Word Immediate
.text1:800E5B5C                 beq       loc_800E5BB0  # Branch if equal
.text1:800E5B60                 lwz       r0, 4(r30)    # Load Word and Zero
.text1:800E5B64                 cmpwi     r0, 0x16      # Compare Word Immediate
.text1:800E5B68                 beq       SmashTauntEasterEgg2 # Branch if equal
.text1:800E5B6C                 bge       loc_800E5BB0  # Branch if greater than or equal
.text1:800E5B70                 cmpwi     r0, 1         # Compare Word Immediate
.text1:800E5B74                 beq       SmashTauntEasterEgg # Branch if equal
.text1:800E5B78                 b         loc_800E5BB0  # Branch
.text1:800E5B7C # ---------------------------------------------------------------------------
.text1:800E5B7C
.text1:800E5B7C SmashTauntEasterEgg:                    # CODE XREF: Char_Fox_141to146_Taunt+5Cj
.text1:800E5B7C                 bl        Stage_Corneria_SmashTaunt1 # Branch to 801E2B80
.text1:800E5B80                 cmpwi     r3, 0         # Compare Word Immediate
.text1:800E5B84                 beq       loc_800E5BB0  # Branch if equal
.text1:800E5B88                 lis       r3, Char_Fox_SmashTaunt@h # Load Immediate Shifted
.text1:800E5B8C                 addi      r0, r3, Char_Fox_SmashTaunt@l # Add Immediate
.text1:800E5B90                 stw       r0, 0x21E0(r30) # Store Word
.text1:800E5B94                 b         loc_800E5BB0  # Branch
.text1:800E5B98 # ---------------------------------------------------------------------------
.text1:800E5B98
.text1:800E5B98 SmashTauntEasterEgg2:                   # CODE XREF: Char_Fox_141to146_Taunt+50j
.text1:800E5B98                 bl        Stage_Corneria_SmashTaunt2 # Branch to 801E2C34
.text1:800E5B9C                 cmpwi     r3, 0         # Compare Word Immediate
.text1:800E5BA0                 beq       loc_800E5BB0  # Branch if equal
.text1:800E5BA4                 lis       r3, Char_Fox_SmashTaunt@h # Load Immediate Shifted
.text1:800E5BA8                 addi      r0, r3, Char_Fox_SmashTaunt@l # Add Immediate
.text1:800E5BAC                 stw       r0, 0x21E0(r30) # Store Word
.text1:800E5BB0
.text1:800E5BB0 loc_800E5BB0:                           # CODE XREF: Char_Fox_141to146_Taunt+44j
.text1:800E5BB0                                         # Char_Fox_141to146_Taunt+54j ...
.text1:800E5BB0                 mr        r3, r31       # Move Register
.text1:800E5BB4                 bl        sub_8006F238  # Branch
.text1:800E5BB8                 cmpwi     r3, 0         # Compare Word Immediate
.text1:800E5BBC                 bne       loc_800E5C20  # Branch if not equal
.text1:800E5BC0                 lwz       r3, 0x2344(r30) # Load Word and Zero
.text1:800E5BC4                 addi      r0, r3, 1     # Add Immediate
.text1:800E5BC8                 stw       r0, 0x2344(r30) # Store Word
.text1:800E5BCC                 lwz       r5, 0x2344(r30) # Load Word and Zero
.text1:800E5BD0                 cmpwi     r5, 3         # Compare Word Immediate
.text1:800E5BD4                 blt       loc_800E5BE4  # Branch if less than
.text1:800E5BD8                 mr        r3, r31       # Move Register
.text1:800E5BDC                 bl        sub_8008A324  # Branch
.text1:800E5BE0                 b         loc_800E5C20  # Branch
.text1:800E5BE4 # ---------------------------------------------------------------------------
.text1:800E5BE4
.text1:800E5BE4 loc_800E5BE4:                           # CODE XREF: Char_Fox_141to146_Taunt+BCj
.text1:800E5BE4                 lwz       r4, 0x2340(r30) # Load Word and Zero
.text1:800E5BE8                 lis       r3, unk_803C7DD0@h # Load Immediate Shifted
.text1:800E5BEC                 lfs       f1, -0x6798(r2) # Load Floating-Point Single-Precision
.text1:800E5BF0                 addi      r0, r3, unk_803C7DD0@l # Add Immediate
.text1:800E5BF4                 mulli     r3, r4, 0xC   # Multiply Low Immediate
.text1:800E5BF8                 fmr       f3, f1        # Floating-Point Move Register
.text1:800E5BFC                 lfs       f2, -0x6794(r2) # Load Floating-Point Single-Precision
.text1:800E5C00                 add       r3, r0, r3    # Add
.text1:800E5C04                 slwi      r0, r5, 2     # Shift Left Immediate
.text1:800E5C08                 add       r3, r3, r0    # Add
.text1:800E5C0C                 lwz       r4, 0(r3)     # Load Word and Zero
.text1:800E5C10                 addi      r3, r31, 0    # Add Immediate
.text1:800E5C14                 li        r5, 0         # Load Immediate
.text1:800E5C18                 li        r6, 0         # Load Immediate
.text1:800E5C1C                 bl        Chars_ActionState_Load # Branch
.text1:800E5C20
.text1:800E5C20 loc_800E5C20:                           # CODE XREF: Char_Fox_141to146_Taunt+A4j
.text1:800E5C20                                         # Char_Fox_141to146_Taunt+C8j
.text1:800E5C20                 lwz       r0, 0x20+arg_4(r1) # Load Word and Zero
.text1:800E5C24                 lwz       r31, 0x20+var_4(r1) # Load Word and Zero
.text1:800E5C28                 lwz       r30, 0x20+var_8(r1) # Load Word and Zero
.text1:800E5C2C                 addi      r1, r1, 0x20  # Add Immediate
.text1:800E5C30                 mtspr   LR, r0          # Move to sprg,
.text1:800E5C34                 blr                     # Branch unconditionally

801E2B80 and 801E2C34 are related to grCorneria based on printfs.

Code:
.text1:800E5C7C                 mfspr   r0, LR          # Write LR to r0 for BLR
.text1:800E5C80                 stw       r0, 4(r1)     # Set r0 to LR+4 for addr after branch
.text1:800E5C84                 stwu      r1, -24(r1)   # Make room on the stack for 24 bytes
.text1:800E5C88                 stw       r31, 20(r1)   # Alloc 20 bytes on the stack for local var
.text1:800E5C8C                 lwz       r31, 44(r3)   # Move r3 (param) + 44 onto r31
.text1:800E5C90                 bl        Stage_Corneria_SmashTaunt_Major # Branch to 801E2AF4
.text1:800E5C94                 li        r0, 0         # Set r0 to 0
.text1:800E5C98                 stw       r0, 0x21E0(r31) # r31 = r0 + 0x21E0
.text1:800E5C9C                 lwz       r0, 28(r1)    # Pop 28 bytes into r0
.text1:800E5CA0                 lwz       r31, 20(r1)   # Pop 20 bytes into r31
.text1:800E5CA4                 addi      r1, r1, 24    # Add 24 bytes to free stack alloc
.text1:800E5CA8                 mtspr   LR, r0          # Puts r0 back in LR
.text1:800E5CAC                 blr                     # Branch unconditionally

Branches reference 800E5C7C, which calls 801E2AF4 (The function just above 801E2B80)
 
Last edited:

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
Reformatted the OP. Put my comments and the actual code in the post for Smash Taunt.

Will do the same for SpecialN later.
 
Top Bottom