• 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!

Completed Everyone Can Firefox v1.0

UnclePunch

Smash Ace
Joined
Nov 9, 2014
Messages
673

Forgot to upload this one. Here's a rewrite of the Firefox code so all characters can use it. Uses 4 faux action states to mimic FirefoxHold, FirefoxLaunch, FirefoxEject, and FirefoxBound. Physics are tweaked at certain times to feel like Fox's weight, notably during Eject. Firefox moves down slightly near the end of FirefoxHold and grabs ledge, etc etc.

Code:
$Everyone Can Firefox v1.0 [UnclePunch]
040a96f4 38000001
040181e8 48000028
C216E7D8 00000004
38600003 3DC08006
61CE737C 7DC903A6
4E800421 3860001F
60000000 00000000
C20D6A28 00000003
3D80804D 618CEC30
7D8903A6 4E800421
60000000 00000000
C20966B4 00000003
3D80804D 618CEC30
7D8903A6 4E800421
60000000 00000000
C24DEC30 00000129
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
4800000D 7D8802A6
4800090C 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
C0229840 C0429848
FC600890 7FE3FB78
38800020 38A00000
38C00000 3D808006
618C93AC 7D8903A6
4E800421 480006A5
7C6802A6 907E219C
480000D5 7C6802A6
907E21A0 480002FD
7C6802A6 907E21A4
4800036D 7C6802A6
907E21A8 4800005D
7C6802A6 907E03EC
38000000 901E2340
901E0084 C03E0080
48000039 7C8802A6
C0040000 EC010024
D01E0080 3C60800E
6063719C 907E21BC
38600078 3D80801C
618C53EC 7D8903A6
4E800421 4800004C
4E800021 3FA00000
4E800021 D0000003
AC004028 0800000F
08000014 0C000007
2C000002 08340000
07D00000 230A0010
140400A3 04000001
40000000 04000001
10000000 00000000
800100FC 7C0803A6
BA810008 38210100
4E800020 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
807E2340 38630001
907E2340 2C03002A
408201F4 38600000
907E2340 C15E0624
FD005210 C13E0620
FCE04A10 480001A1
7FA802A6 EC27402A
C0029898 FC010040
41820048 C03D0000
FC070840 40810018
7FC3F378 3D808007
618CD9FC 7D8903A6
4E800421 FC205090
C01E002C EC400272
3D808002 618C2C30
7D8903A6 4E800421
D03E2344 4800000C
C00298BC D01E2344
C0229840 C0429848
FC600890 7FE3FB78
3880005B 38A00000
38C00000 3D808006
618C93AC 7D8903A6
4E800421 480004ED
7C6802A6 907E219C
48000245 7C6802A6
907E21A0 480002E9
7C6802A6 907E21A4
480003A1 7C6802A6
907E21A8 480000F5
7C6802A6 907E03EC
C03E2344 3D808032
618C6240 7D8903A6
4E800421 C01E002C
C05D0004 EC000072
EC2000B2 D03E0080
C03E2344 3D808032
618C63D4 7D8903A6
4E800421 C05D0004
EC2100B2 D03E0084
C03E00B4 C05D000C
EC21102A D03E00B4
C03D0008 C01E2344
EC210028 7FC3F378
38800000 3D808007
618C592C 7D8903A6
4E800421 3C60800E
60637100 907E21BC
807E010C 8063004C
80830000 7FC3F378
3D808008 618C89F4
7D8903A6 4E800421
386000EE 3D80801C
618C53EC 7D8903A6
4E800421 38000002
981E1968 3C608007
6063F76C 907E21F8
4800003C 4E800021
3E000000 40733333
3FC90FF9 40800000
4E800021 AC01A000
2C00140E 04000000
00000000 280F0013
1E041523 0800000E
00000000 800100FC
7C0803A6 BA810008
38210100 4E800020
4E800021 9421FF00
BE810008 7C0802A6
900100FC 7C7F1B78
83DF002C 48000041
7FA802A6 7FC3F378
C03D0004 3D808007
618CCE94 7D8903A6
4E800421 807E2340
2C03000F 41800024
C03E0084 C05D0000
EC211028 D03E0084
48000010 4E800021
3C23D70A 3CA3D70A
800100FC 7C0803A6
BA810008 38210100
4E800020 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
C0029898 807F002C
C023002C FC010040
4080000C 3880FFFF
48000008 38800001
7FE3FB78 3D808008
618C22A4 7D8903A6
4E800421 7FE3FB78
3D808008 618C1298
7D8903A6 4E800421
800100FC 7C0803A6
BA810008 38210100
4E800020 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
807E2340 38630001
907E2340 2C03001E
40820070 C0229840
C0429848 FC600890
7FE3FB78 38800026
38A00000 38C00000
3D808006 618C93AC
7D8903A6 4E800421
48000241 7C6802A6
907E219C 480002A9
7C6802A6 907E21A0
4800039D 7C6802A6
907E21A4 480002FD
7C6802A6 907E21A8
48000010 4E800021
3ECCCCCD 41900000
800100FC 7C0803A6
BA810008 38210100
4E800020 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
3C004330 807E2340
C84298A8 6C638000
900100F0 906100F4
C82100F0 EC211028
48000069 7FA802A6
C05D0000 FC011040
41800064 C03E2344
3D808032 618C6240
7D8903A6 4E800421
C01D0004 C05E002C
EC210032 C01E0080
EC02007C D01E0080
C03E2344 3D808032
618C63D4 7D8903A6
4E800421 C05D0004
C01E0084 EC02007C
D01E0084 48000010
4E800021 40C00000
3DCCCCCD 800100FC
7C0803A6 BA810008
38210100 4E800020
4E800021 9421FF00
BE810008 7C0802A6
900100FC 7C7F1B78
83DF002C 38800000
7FE3FB78 3D808008
618C22A4 7D8903A6
4E800421 2C030000
418200C8 7FE3FB78
3D808009 618CA134
7D8903A6 4E800421
2C030000 408200AC
C0229840 C0429848
FC600890 7FE3FB78
388000BF 38A00000
38C00000 3D808006
618C93AC 7D8903A6
4E800421 480000AD
7C6802A6 907E21A0
3C60800E 60638200
907E21A4 3C60800E
6063824C 907E21A8
C03E0080 4800004D
7C8802A6 C0040000
EC010032 D01E0080
38600000 907E06A4
907E06A8 38600406
7FE4FB78 38BE00B0
38C100F0 38000000
90060000 3D808005
618CFDDC 7D8903A6
4E800421 48000020
4E800021 3F4CCCCD
7FE3FB78 3D808008
618C1298 7D8903A6
4E800421 800100FC
7C0803A6 BA810008
38210100 4E800020
4E800021 4E800020
4E800021 9421FF00
BE810008 7C0802A6
900100FC 7C7F1B78
83DF002C C03E03E8
FC20081E D82100F0
806100F4 2C03000E
41800028 7FE3FB78
4BFFFDB5 7C8802A6
C0240000 C0440004
3D808009 618C6900
7D8903A6 4E800421
800100FC 7C0803A6
BA810008 38210100
4E800020 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
C03E03E8 FC20081E
D82100F0 806100F4
2C030014 41800028
7FE3FB78 4BFFFD49
7C8802A6 C0240000
C0440004 3D808009
618C6900 7D8903A6
4E800421 800100FC
7C0803A6 BA810008
38210100 4E800020
4E800021 9421FF00
BE810008 7C0802A6
900100FC 7C7F1B78
83DF002C 38800000
7FE3FB78 3D808008
618C22A4 7D8903A6
4E800421 2C030000
41820034 7FE3FB78
38800000 48000021
7CA802A6 C0250000
3D80800D 618C5CB0
7D8903A6 4E800421
48000020 4E800021
40E00000 7FE3FB78
3D808008 618C1298
7D8903A6 4E800421
800100FC 7C0803A6
BA810008 38210100
4E800020 4E800021
9421FF00 BE810008
7C0802A6 900100FC
7C7F1B78 83DF002C
7FC3F378 4800006D
7C8802A6 C0240000
C05E0170 3D808007
618CD494 7D8903A6
4E800421 7FC3F378
3D808007 618CD528
7D8903A6 4E800421
881E221A 5400EFFF
41820018 7FC3F378
3D808007 618CD4E4
7D8903A6 4E800421
7FC3F378 3D808007
618CD268 7D8903A6
4E800421 4800000C
4E800021 3E6B851F
800100FC 7C0803A6
BA810008 38210100
4E800020 800100FC
7C0803A6 BA810008
38210100 4E800020
60000000 00000000
Code:
.macro branchl reg, address
lis \reg, \address @h
ori \reg,\reg,\address @l
mtctr \reg
bctrl
.endm

.macro branch reg, address
lis \reg, \address @h
ori \reg,\reg,\address @l
mtctr \reg
bctr
.endm

.macro backup
stwu    r1,-0x100(r1)    # make space for 12 registers
stmw    r20,8(r1)    # push r20-r31 onto the stack
mflr r0
stw r0,0xFC(sp)
mr    player,r3
lwz    playerdata,0x2c(player)
.endm

.macro restore
lwz r0,0xFC(sp)
mtlr r0
lmw    r20,8(r1)    # pop r20-r31 off the stack
addi    r1,r1,0x100    # release the space
.endm

.set entity,31
.set playerdata,30
.set player,31

.set JoyX,9
.set AbsJoyX,7
.set JoyY,10
.set AbsJoyY,8











######################
# Original Injection #
######################

backup

bl    AS_FirefoxStart
mflr    r12
b    Original_Exit













#########################
# FireFox Action State ##
#########################

AS_FirefoxStart:
blrl

backup

#Enter AerialFall
lfs    f1, -0x67C0 (rtoc)
lfs    f2, -0x67B8 (rtoc)
fmr    f3, f1
mr    r3,player
li    r4,0x20
li    r5,0x0
li    r6,0x0
branchl    r12,0x800693ac

#Replace Interrupts
bl        Interrupt_Firefox
mflr    r3
stw        r3,0x219C(playerdata)

bl        Animation_FirefoxStart
mflr    r3
stw        r3,0x21A0(playerdata)

bl    Physics_FirefoxStart
mflr    r3
stw        r3,0x21A4(playerdata)

bl    Collision_FirefoxStart
mflr    r3
stw        r3,0x21A8(playerdata)

#Replace Subaction Pointer
bl    AS_FirefoxStart_Subaction
mflr    r3
stw    r3,0x3EC(playerdata)

#Timer and Velocity and Was Touching Ground During Start Bool
li    r0,0x0
stw    r0,0x2340(playerdata)
stw    r0,0x84(playerdata)

lfs    f1,0x80(playerdata)
bl    AS_FirefoxStart_FloatValues
mflr    r4
lfs    f0,0x0(r4)
fdivs    f0,f1,f0
stfs    f0,0x80(playerdata)

#Graphic
load    r3,0x800e719c
stw    r3,0x21BC(playerdata)

#Play Fire SFX
li    r3,0x78
branchl    r12,0x801c53ec

b    AS_FirefoxStart_Exit



AS_FirefoxStart_FloatValues:
blrl
.long 0x3FA00000

AS_FirefoxStart_Subaction:
blrl
.long 0xD0000003 
.long 0xAC004028 
.long 0x0800000F 
.long 0x08000014 
.long 0x0C000007 
.long 0x2C000002 
.long 0x08340000 
.long 0x07D00000 
.long 0x230A0010 
.long 0x140400A3 
.long 0x04000001 
.long 0x40000000 
.long 0x04000001 
.long 0x10000000
.long 0x00000000

AS_FirefoxStart_Exit:
restore
blr
















################################
# Firefox Animation Interrupt ##
################################
Animation_FirefoxStart:
blrl

backup

#Increment Timer
lwz    r3,0x2340(playerdata)
addi    r3,r3,0x1
stw    r3,0x2340(playerdata)


#Check Timer For End
cmpwi    r3,42
bne    Animation_FirefoxStart_Exit

###################
### ANGLE STUFF ###
###################

#Initiate Launch Timer
li    r3,0x0
stw    r3,0x2340(playerdata)

#Get Absolute X and Y Stick Pos
lfs    JoyY, 0x0624 (playerdata)
fabs    AbsJoyY,JoyY
lfs    JoyX, 0x0620 (playerdata)
fabs    AbsJoyX,JoyX

#Get Constants
bl    Animation_FirefoxStart_FloatValues
mflr    r29

#Check if Stick is in Origin
fadds    f1,AbsJoyX,AbsJoyY
lfs    f0, -0x6768 (rtoc)
fcmpo    cr0,f1,f0
beq    Animation_FirefoxStart_StickInOrigin


#Check to Change Facing Direction

#Get Direction Change Threshold (0.125)
lfs    f1,0x0(r29)

#Compare AbsJoyX with Threshold
fcmpo    cr0,AbsJoyX,f1
ble    Animation_FirefoxStart_GetAtan2

#Change Direction Based On Joy Direction
mr    r3,playerdata
branchl    r12,0x8007d9fc

Animation_FirefoxStart_GetAtan2:
fmr    f1,JoyY

#Mult JoyX By Facing Direction
lfs    f0, 0x002C (playerdata)
fmuls    f2,f0,JoyX

#Branch to atan2
branchl    r12,0x80022c30
stfs    f1, 0x2344 (playerdata)
b    Animation_FirefoxStart_DirectionChangeEnd


Animation_FirefoxStart_StickInOrigin:
lfs    f0, -0x6744 (rtoc)
stfs    f0, 0x2344 (playerdata)


Animation_FirefoxStart_DirectionChangeEnd:

#Enter Firefox
lfs    f1, -0x67C0 (rtoc)
lfs    f2, -0x67B8 (rtoc)
fmr    f3, f1
mr    r3,player
li    r4,0x5B
li    r5,0x0
li    r6,0x0
branchl    r12,0x800693ac

#Replace Interrupts
bl        Interrupt_Firefox
mflr    r3
stw        r3,0x219C(playerdata)

bl        Animation_FirefoxLaunch
mflr    r3
stw        r3,0x21A0(playerdata)

bl    Physics_FirefoxLaunch
mflr    r3
stw        r3,0x21A4(playerdata)

bl    Collision_FirefoxLaunch
mflr    r3
stw        r3,0x21A8(playerdata)

#Replace Subaction Pointer
bl    Animation_FirefoxStart_LaunchSubaction
mflr    r3
stw    r3,0x3EC(playerdata)

#Store X Velocity
lfs    f1, 0x2344 (playerdata)
branchl    r12,0x80326240
lfs    f0,0x2c(playerdata)
lfs    f2,0x4(r29)
fmuls    f0,f0,f1
fmuls    f1,f0,f2
stfs    f1, 0x0080 (playerdata)

#Store Y Velocity
lfs    f1,0x2344 (playerdata)
branchl    r12,0x803263d4
lfs    f2,0x4(r29)
fmuls    f1,f1,f2
stfs    f1, 0x0084 (playerdata)

#Move Up Slightly
lfs    f1,0xB4(playerdata)
lfs    f2,0xC(r29)
fadds    f1,f1,f2
stfs    f1,0xB4(playerdata)

Animation_FirefoxStart_RotatePlayer:
lfs    f1,0x8(r29)
lfs    f0, 0x2344 (playerdata)
fsubs    f1,f1,f0
mr    r3,playerdata
li    r4,0
branchl    r12,0x8007592c

#Load Launch Graphic
load    r3,0x800e7100
stw    r3,0x21BC(playerdata)

#Play Smash Sound FX
lwz    r3,0x10C(playerdata)
lwz    r3,0x4C(r3)
lwz    r4, 0 (r3)
mr    r3,playerdata
branchl    r12,0x800889f4

#Play Explosion SFX
li    r3,0xEE
branchl    r12,0x801c53ec

#Remove Jumps
li    r0,0x2
stb    r0, 0x1968 (playerdata)

#On-Cape Function
load    r3,0x8007f76c
stw    r3,0x21F8(playerdata)

b    Animation_FirefoxStart_Exit



Animation_FirefoxStart_FloatValues:
blrl
#0x0
.long 0x3E000000        #Direction Change Threshold (0.125)

#0x4
.long 0x40733333        #Firefox Speed (3.8)

#0x8
.long 0x3FC90FF9        #Rotation Constant Right (1.5708)

#0xC
.long 0x40800000    #Amount to Move Upwards on Launch (4)

Animation_FirefoxStart_LaunchSubaction:
blrl
.long 0xAC01A000 
.long 0x2C00140E 
.long 0x04000000 
.long 0x00000000 
.long 0x280F0013 
.long 0x1E041523
.long 0x0800000E
.long 0x00000000

Animation_FirefoxStart_Exit:
restore
blr

















################################
# Firefox Physics   Interrupt ##
################################
Physics_FirefoxStart:
blrl

backup

#Get Variables
bl    Physics_FirefoxStartVelocityToDecrement
mflr    r29

#Slow Down
mr    r3,playerdata
lfs    f1,0x4(r29)
branchl    r12,0x8007ce94

#Check Timer
lwz    r3,0x2340(playerdata)
cmpwi    r3,15
blt    Physics_FirefoxStart_Exit

#Move Down Slightly
lfs    f1,0x84(playerdata)
lfs    f2,0x0(r29)
fsubs    f1,f1,f2
stfs    f1,0x84(playerdata)

b    Physics_FirefoxStart_Exit

Physics_FirefoxStartVelocityToDecrement:
blrl
.long 0x3C23D70A        #amount to move down each frame
.long 0x3CA3D70A  #amount to slow down each frame

Physics_FirefoxStart_Exit:
restore
blr




















################################
# Firefox Collision Interrupt ##
################################
Collision_FirefoxStart:
blrl

backup

#Environment Collision Check
lfs    f0, -0x6768 (rtoc)
lwz    r3, 0x002C (player)
lfs    f1, 0x002C (r3)
fcmpo    cr0,f1,f0
bge    Collision_FirefoxStart_Positive
Collision_FirefoxStart_Negative:
li    r4,-0x1
b    Collision_FirefoxStart_EnvCheck
Collision_FirefoxStart_Positive:
li    r4,0x1
Collision_FirefoxStart_EnvCheck:
mr    r3,player
branchl    r12,0x800822a4

Collision_FirefoxStart_CheckForLedgeGrab:
mr    r3,player
branchl    r12,0x80081298

Collision_FirefoxStart_Exit:
restore
blr

















################################
# Firefox Animation Interrupt ##
################################
Animation_FirefoxLaunch:
blrl

backup

#Increment Timer
lwz    r3,0x2340(playerdata)
addi    r3,r3,0x1
stw    r3,0x2340(playerdata)

#Check Timer For End
cmpwi    r3,30
bne    Animation_FirefoxLaunch_Exit

#Enter Firefox Eject
lfs    f1, -0x67C0 (rtoc)
lfs    f2, -0x67B8 (rtoc)
fmr    f3, f1
mr    r3,player
li    r4,0x26
li    r5,0x0
li    r6,0x0
branchl    r12,0x800693ac

#Replace Interrupts
bl        Interrupt_Firefox
mflr        r3
stw        r3,0x219C(playerdata)

bl        Animation_FirefoxEject
mflr        r3
stw        r3,0x21A0(playerdata)

bl        Physics_FirefoxEject
mflr        r3   
stw        r3,0x21A4(playerdata)

bl        Collision_FirefoxEject
mflr        r3
stw        r3,0x21A8(playerdata)


#Zero Y Velocity


b    Animation_FirefoxLaunch_Exit

Animation_FirefoxLaunch_LandingLagValues:
blrl
.long 0x3ecccccd
.long 0x41900000

Animation_FirefoxLaunch_Exit:
restore
blr

















################################
# Firefox Physics   Interrupt ##
################################
Physics_FirefoxLaunch:
blrl

backup

#Get Timer as Float
lis    r0, 0x4330
lwz    r3,0x2340(playerdata)
lfd    f2, -0x6758 (rtoc)
xoris    r3, r3, 0x8000
stw    r0,0xF0(sp)
stw    r3,0xF4(sp)
lfd    f1,0xF0(sp)
fsubs    f1,f1,f2

#Get 6fp
bl    Physics_FirefoxLaunch_FloatValues
mflr    r29
lfs    f2,0x0(r29)

#Run Only When Greater or Equal to Frame 6
fcmpo    cr0,f1,f2
blt    Physics_FirefoxLaunch_Exit

#Decrement Speed

#Decrement X
lfs    f1, 0x2344 (playerdata)
branchl    r12,0x80326240
lfs    f0,0x4(r29)
lfs    f2,0x2c(playerdata)
fmuls    f1,f1,f0
lfs    f0,0x80(playerdata)
fnmsubs    f0,f2,f1,f0
stfs    f0,0x80(playerdata)

#Decrement Y
lfs    f1, 0x2344 (playerdata)
branchl    r12,0x803263d4
lfs    f2,0x4(r29)
lfs    f0,0x84(playerdata)
fnmsubs    f0,f2,f1,f0
stfs    f0,0x84(playerdata)

b    Physics_FirefoxLaunch_Exit

Physics_FirefoxLaunch_FloatValues:
blrl
.long 0x40C00000        #Floating Point 6
.long 0x3DCCCCCD        #Decrement Amount

Physics_FirefoxLaunch_Exit:
restore
blr




















################################
# Firefox Collision Interrupt ##
################################
Collision_FirefoxLaunch:
blrl

backup

#Environment Collision Check
li    r4,0x0
mr    r3,player
branchl    r12,0x800822a4

cmpwi    r3,0x0
beq    Collision_FirefoxLaunch_CheckForLedgeGrab

#Determine if Touched Platform
mr    r3,player
branchl    r12,0x8009a134
cmpwi    r3,0x0
bne    Collision_FirefoxLaunch_CheckForLedgeGrab

Collision_FirefoxLaunch_HitGround:
#Enter HitGround AS
lfs    f1, -0x67C0 (rtoc)
lfs    f2, -0x67B8 (rtoc)
fmr    f3, f1
mr    r3,player
li    r4,0xBF
li    r5,0x0
li    r6,0x0
branchl    r12,0x800693ac

#Replace Animation and Physics and Collision
bl    Animation_FirefoxHitGround
mflr    r3
stw    r3,0x21A0(playerdata)

load    r3,0x800e8200
stw    r3,0x21A4(playerdata)

load    r3,0x800e824c
stw    r3,0x21A8(playerdata)

#Set Velocity
lfs    f1,0x80(playerdata)
bl    Collision_FirefoxLaunch_FloatValues
mflr    r4
lfs    f0,0x0(r4)
fmuls    f0,f1,f0
stfs    f0, 0x0080 (playerdata)

li    r3,0x0
stw    r3,0x6A4(playerdata)
stw    r3,0x6A8(playerdata)

#Graphic
li    r3,0x406
mr    r4,player
addi    r5,playerdata,176
addi    r6,sp,0xF0
li    r0,0
stw    r0,0x0(r6)
branchl    r12,0x8005fddc

b    Collision_FirefoxLaunch_Exit

Collision_FirefoxLaunch_FloatValues:
blrl
.long 0x3F4CCCCD

Collision_FirefoxLaunch_CheckForLedgeGrab:
mr    r3,player
branchl    r12,0x80081298

Collision_FirefoxLaunch_Exit:
restore
blr



################################
# Firefox Input     Interrupt ##
################################
Interrupt_Firefox:
blrl

blr







################################
# FirefoxHitGround Animation  ##
################################
Animation_FirefoxHitGround:
blrl

backup

lfs    f1,0x3E8(playerdata)
fctiwz    f1,f1
stfd    f1,0xF0(sp)
lwz    r3,0xF4(sp)
cmpwi    r3,14
blt    Animation_FirefoxHitGround_Exit

Animation_FirefoxHitGround_StandUp:
#Enter SpecialFall
mr    r3,player
bl    Animation_FirefoxLaunch_LandingLagValues
mflr    r4
lfs    f1,0x0(r4)
lfs    f2,0x4(r4)
branchl    r12,0x80096900

Animation_FirefoxHitGround_Exit:
restore
blr










################################
# FirefoxEject     Animation  ##
################################
Animation_FirefoxEject:
blrl

backup

lfs    f1,0x3E8(playerdata)
fctiwz    f1,f1
stfd    f1,0xF0(sp)
lwz    r3,0xF4(sp)
cmpwi    r3,20
blt    Animation_FirefoxEject_Exit

#Enter SpecialFall
mr    r3,player
bl    Animation_FirefoxLaunch_LandingLagValues
mflr    r4
lfs    f1,0x0(r4)
lfs    f2,0x4(r4)
branchl    r12,0x80096900

Animation_FirefoxEject_Exit:
restore
blr












################################
# Firefox Collision Interrupt ##
################################
Collision_FirefoxEject:
blrl

backup

#Environment Collision Check
li    r4,0
mr    r3,player
branchl    r12,0x800822a4

cmpwi    r3,0x0
beq    Collision_FirefoxEject_CheckForLedgeGrab


Collision_FirefoxEject_HitGround:
#Enter into 20 Frames Landing Lag
mr    r3,player
li    r4,0x0
bl    Collision_FirefoxEject_FloatValues
mflr    r5
lfs    f1,0x0(r5)
branchl    r12,0x800d5cb0

b    Collision_FirefoxEject_Exit


Collision_FirefoxEject_FloatValues:
blrl
.long 0x40E00000


Collision_FirefoxEject_CheckForLedgeGrab:
mr    r3,player
branchl    r12,0x80081298

Collision_FirefoxEject_Exit:
restore
blr

















#################################
## Firefox Eject Physics       ##
#################################
Physics_FirefoxEject:
blrl

backup

#CheckForTerminalVelocity
mr    r3,playerdata
bl    Physics_FirefoxEject_FloatValues
mflr    r4
lfs    f1,0x0(r4)
lfs    f2, 0x170 (playerdata)
branchl    r12,0x8007d494

#Interrupt_Fastfall
mr    r3,playerdata
branchl    r12,0x8007d528

#Get FF Flag
lbz    r0, 0x221A (playerdata)
rlwinm.    r0, r0, 29, 31, 31
beq    Physics_FirefoxEject_VelocityX

#StoreFFVelocity
mr    r3,playerdata
branchl    r12,0x8007d4e4

#VelocityX Calc
Physics_FirefoxEject_VelocityX:
mr    r3,playerdata
branchl    r12,0x8007d268

b    Physics_FirefoxEject_Exit

Physics_FirefoxEject_FloatValues:
blrl
.long    0x3E6B851F        #Velocity to Subtract (0.23)

Physics_FirefoxEject_Exit:
restore
blr














Original_Exit:
restore
blr
 
Last edited:

Stormghetti

Smash Journeyman
Joined
Aug 23, 2015
Messages
400
Location
Europe
Slippi.gg
STRM#798
NNID
Stormghetti
I love these codes. I have a question for you...: do you think this and the float code could be used as toggleable features on the Custom Rules screen by pressing a button just like in your frame data display code but you press R instead? Or is that too much work?
 
Top Bottom