Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 8006B800 - mtlr for action state interrupt pointer
- bl get_data
- b start
- # Data
- # Whether a hit connected for each port
- # Set from hitstop set and ActionStateChange hooks
- .space 4
- # Put pointer to data in r4 using return address
- get_data:
- mflr r4
- addi r4, r4, 4
- blr
- start:
- # Check character
- lwz r3, 0x64(r30)
- cmpwi r3, 0x13 # Zelda
- beq zeldasheik
- cmpwi r3, 7 # Sheik
- beq zeldasheik
- b end
- zeldasheik:
- # Check AS ID
- lwz r3, 0x70(r30)
- # Aerials (including landing lag)
- check_aerials:
- cmpwi r3, 0x41
- blt check_tilt
- cmpwi r3, 0x4A
- bgt check_tilt
- b attacking
- # Tilts
- check_tilt:
- cmpwi r3, 0x35
- blt check_smash
- cmpwi r3, 0x39
- bgt check_smash
- b attacking
- # Smashes
- check_smash:
- cmpwi r3, 0x3C
- blt check_da
- cmpwi r3, 0x40
- bgt check_da
- b attacking
- # Dash attack
- check_da:
- cmpwi r3, 0x32
- beq attacking
- # Jabs
- cmpwi r3, 0x2C
- blt end
- cmpwi r3, 0x31
- bgt end
- attacking:
- # Get attack hit bool pointer for this port
- lbz r3, 0x6C(r30)
- add r4, r4, r3
- # Check if attack connected
- lbz r3, 0(r4)
- cmpwi r3, 0
- beq end
- # Back up r12 because it gets dicked down by Interrupt_DownB_Grounded
- stwu r1, -4(r1)
- stw r12, 0(r1)
- # Check if airborne
- lwz r3, 0x140(r30)
- cmpwi r3, 0
- beq grounded
- # Custom Interrupt_DownB_Air
- mr r3, r30
- lis r4, 0x803C
- addi r0, r4, 0x14F0
- lwz r5, 0x2C(r3)
- lwz r4, 4(r5)
- rlwinm r4, r4, 2, 0, 29
- add r4, r0, r4
- lwz r12, 0(r4)
- cmplwi r12, 0
- bne check_something
- li r3, 0
- b downb_air_end
- check_something:
- lbz r0, 0x687(r5)
- cmplwi r0, 0
- bne downb_air_no_interrupt
- mtlr r12
- blrl
- li r3, 1
- b downb_air_end
- downb_air_no_interrupt:
- downb_air_end:
- b downb_cleanup
- grounded:
- # Call Interrupt_DownB_Grounded
- mr r3, r30
- lis r0, 0x800D
- ori r0, r0, 0x68C0
- mtlr r0
- blrl
- downb_cleanup:
- # Restore r12
- lwz r12, 0(r1)
- addi r1, r1, 4
- cmpwi r3, 0
- beq end
- # Skip interrupt call
- lis r0, 0x8006
- ori r0, r0, 0xB80C
- mtlr r0
- blr
- end:
- # Overwritten instruction
- mtlr r12
- # 800693E4 - ActionStateChange+0x38
- # Aerials
- check_aerials:
- cmpwi r4, 0x41
- blt check_tilt
- cmpwi r4, 0x45
- bgt check_tilt
- b attacking
- # Tilts
- check_tilt:
- cmpwi r4, 0x35
- blt check_smash
- cmpwi r4, 0x39
- bgt check_smash
- b attacking
- # Smashes
- check_smash:
- cmpwi r4, 0x3C
- blt check_da
- cmpwi r4, 0x40
- bgt check_da
- b attacking
- # Dash attack
- check_da:
- cmpwi r4, 0x32
- beq attacking
- # Jab 1
- cmpwi r4, 0x2C
- bne end
- attacking:
- # Get address of AS interrupt mtlr patch
- lis r4, 0x8006
- ori r4, r4, 0xB800
- lwz r3, 0(r4)
- # Mask off 0x48 bl opcode
- lis r4, 0xFF
- ori r4, r4, 0xFFFF
- and r3, r3, r4
- # Add bl offset
- lis r4, 0x8006
- ori r4, r4, 0xB800
- add r3, r4, r3
- # Add offset to data
- addi r3, r3, 8
- # Add port offset
- lbz r4, 0x6C(r30)
- add r3, r3, r4
- # Reset hit flag
- li r4, 0
- stb r4, 0(r3)
- # Restore r3
- mr r3, r30
- end:
- # Overwritten instruction
- lwz r27, 0x28(r3)
- # 8006D708 - Storing hitstop
- # Get address of AS interrupt mtlr patch
- lis r4, 0x8006
- ori r4, r4, 0xB800
- lwz r3, 0(r4)
- # Mask off 0x48 bl opcode
- lis r4, 0xFF
- ori r4, r4, 0xFFFF
- and r3, r3, r4
- # Add bl offset
- lis r4, 0x8006
- ori r4, r4, 0xB800
- add r3, r4, r3
- # Add offset to data
- addi r3, r3, 8
- # Add port offset
- lbz r4, 0xC(r30)
- add r3, r3, r4
- # Update hit flag
- li r4, 1
- stb r4, 0(r3)
- # Overwritten instruction
- stfs f1, 0x195C(r30)
- # 80114190 - Sheik_AS_361_Transform_Grounded+0x30
- # Overwritten instruction
- mr r3, r31
- # Load 36/15 into f1 using the stack
- lis r0, 0x4019
- ori r0, r0, 0x999A
- stw r0, 8(r1)
- lfs f1, 8(r1)
- # Call FrameSpeedChange_Landing
- lis r0, 0x8006
- ori r0, r0, 0xF190
- mtlr r0
- blrl
- # Restore r3
- mr r3, r31
- # 8013AF10 - Zelda_AS_355_Transform_Grounded+0x30
- # Overwritten instruction
- mr r3, r31
- # Load 43/15 into f1 using the stack
- lis r0, 0x4037
- ori r0, r0, 0x7777
- stw r0, 8(r1)
- lfs f1, 8(r1)
- # Call FrameSpeedChange_Landing
- lis r0, 0x8006
- ori r0, r0, 0xF190
- mtlr r0
- blrl
- # Restore r3
- mr r3, r31
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement