diff options
author | Evan <eroelke@gmail.com> | 2019-11-27 07:14:33 -0700 |
---|---|---|
committer | Evan <eroelke@gmail.com> | 2019-11-27 07:14:33 -0700 |
commit | cba5ebbd5af599736f84a8ef0142382f5a96f4af (patch) | |
tree | 6402283990a4a2e4ff03f58fa612801cffa5212b | |
parent | 4b33546727007829bb80121790ff377f4e9739b9 (diff) |
remove pokeball.s
-rw-r--r-- | asm/pokeball.s | 2896 | ||||
-rw-r--r-- | include/pokeball.h | 4 | ||||
-rw-r--r-- | include/task.h | 14 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/pokeball.c | 1300 |
5 files changed, 1306 insertions, 2910 deletions
diff --git a/asm/pokeball.s b/asm/pokeball.s deleted file mode 100644 index ed9eea832..000000000 --- a/asm/pokeball.s +++ /dev/null @@ -1,2896 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start DoPokeballSendOutAnimation -DoPokeballSendOutAnimation: @ 804A938 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _0804A98C @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldr r0, _0804A990 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r6, _0804A994 @ =gActiveBattler - ldrb r1, [r6] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0] - ldr r0, _0804A998 @ =sub_804A9A0 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0804A99C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - strh r5, [r1, 0xC] - ldrb r0, [r6] - strh r0, [r1, 0xE] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0804A98C: .4byte gDoingBattleAnim -_0804A990: .4byte gBattleSpritesDataPtr -_0804A994: .4byte gActiveBattler -_0804A998: .4byte sub_804A9A0 -_0804A99C: .4byte gTasks - thumb_func_end DoPokeballSendOutAnimation - - thumb_func_start sub_804A9A0 -sub_804A9A0: @ 804A9A0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - ldr r1, _0804A9D4 @ =gTasks - ldr r2, [sp] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0804A9D8 - adds r0, r2, 0x1 - strh r0, [r1, 0x8] - b _0804ABB8 - .align 2, 0 -_0804A9D4: .4byte gTasks -_0804A9D8: - ldrh r0, [r1, 0xC] - mov r9, r0 - ldrb r6, [r1, 0xE] - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0804AA04 - ldr r1, _0804A9FC @ =gBattlerPartyIndexes - lsls r0, r6, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0804AA00 @ =gEnemyParty - b _0804AA12 - .align 2, 0 -_0804A9FC: .4byte gBattlerPartyIndexes -_0804AA00: .4byte gEnemyParty -_0804AA04: - ldr r1, _0804AA50 @ =gBattlerPartyIndexes - lsls r0, r6, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0804AA54 @ =gPlayerParty -_0804AA12: - adds r0, r1 - movs r1, 0x26 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl ItemIdToBallId - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl LoadBallGfx - ldr r0, _0804AA58 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0804AA60 - ldr r4, _0804AA5C @ =gLinkPlayers - adds r0, r6, 0 - bl GetBattlerMultiplayerId - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r1, [r1, 0x13] - mov r10, r1 - b _0804AA68 - .align 2, 0 -_0804AA50: .4byte gBattlerPartyIndexes -_0804AA54: .4byte gPlayerParty -_0804AA58: .4byte gBattleTypeFlags -_0804AA5C: .4byte gLinkPlayers -_0804AA60: - ldr r0, _0804AAB8 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - mov r10, r0 -_0804AA68: - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 3 - ldr r1, _0804AABC @ =gUnknown_82606F4 - adds r0, r1 - movs r1, 0x20 - movs r2, 0x50 - movs r3, 0x1D - bl CreateSprite - lsls r0, 24 - lsrs r7, r0, 24 - lsls r5, r7, 4 - adds r0, r5, r7 - lsls r0, 2 - mov r8, r0 - ldr r4, _0804AAC0 @ =gSprites - add r4, r8 - movs r0, 0x80 - strh r0, [r4, 0x2E] - movs r1, 0 - strh r1, [r4, 0x30] - mov r2, r9 - strh r2, [r4, 0x3C] - mov r3, r9 - cmp r3, 0xFE - beq _0804AAF8 - cmp r3, 0xFF - bne _0804AB38 - ldr r0, _0804AAC4 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 9 - ands r0, r1 - cmp r0, 0 - beq _0804AAC8 - movs r5, 0x20 - movs r4, 0x40 - b _0804AACE - .align 2, 0 -_0804AAB8: .4byte gSaveBlock2Ptr -_0804AABC: .4byte gUnknown_82606F4 -_0804AAC0: .4byte gSprites -_0804AAC4: .4byte gBattleTypeFlags -_0804AAC8: - mov r0, r10 - movs r5, 0x30 - movs r4, 0x46 -_0804AACE: - ldr r0, _0804AAEC @ =gBattlerTarget - strb r6, [r0] - ldr r2, _0804AAF0 @ =gSprites - lsls r3, r7, 4 - adds r1, r3, r7 - lsls r1, 2 - adds r0, r1, r2 - strh r5, [r0, 0x20] - strh r4, [r0, 0x22] - adds r2, 0x1C - adds r1, r2 - ldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1 - str r0, [r1] - b _0804AB48 - .align 2, 0 -_0804AAEC: .4byte gBattlerTarget -_0804AAF0: .4byte gSprites -_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1 -_0804AAF8: - adds r0, r6, 0 - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - adds r0, r6, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x18 - strh r0, [r4, 0x22] - ldr r0, _0804AB2C @ =gBattlerTarget - strb r6, [r0] - movs r1, 0 - strh r1, [r4, 0x2E] - ldr r0, _0804AB30 @ =gSprites - adds r0, 0x1C - add r0, r8 - ldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut - str r1, [r0] - b _0804AB46 - .align 2, 0 -_0804AB2C: .4byte gBattlerTarget -_0804AB30: .4byte gSprites -_0804AB34: .4byte SpriteCB_OpponentMonSendOut -_0804AB38: - movs r0, 0x1 - bl GetBattlerAtPosition - ldr r1, _0804AB64 @ =gBattlerTarget - strb r0, [r1] - movs r2, 0x1 - str r2, [sp, 0x4] -_0804AB46: - adds r3, r5, 0 -_0804AB48: - ldr r0, _0804AB68 @ =gSprites - adds r1, r3, r7 - lsls r1, 2 - adds r4, r1, r0 - ldr r5, _0804AB64 @ =gBattlerTarget - ldrb r0, [r5] - strh r0, [r4, 0x3A] - ldr r3, [sp, 0x4] - cmp r3, 0 - bne _0804AB6C - ldr r0, [sp] - bl DestroyTask - b _0804ABB8 - .align 2, 0 -_0804AB64: .4byte gBattlerTarget -_0804AB68: .4byte gSprites -_0804AB6C: - movs r0, 0x22 - strh r0, [r4, 0x2E] - ldrb r0, [r5] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x10 - strh r0, [r4, 0x36] - ldr r0, _0804ABC8 @ =0x0000ffd8 - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimArcTranslation - mov r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x6] - ldr r1, _0804ABCC @ =gTasks - ldr r2, [sp] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldrb r1, [r5] - strh r1, [r0, 0x10] - ldr r1, _0804ABD0 @ =TaskDummy - str r1, [r0] - movs r0, 0x36 - bl PlaySE -_0804ABB8: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804ABC8: .4byte 0x0000ffd8 -_0804ABCC: .4byte gTasks -_0804ABD0: .4byte TaskDummy - thumb_func_end sub_804A9A0 - - thumb_func_start SpriteCB_TestBallThrow -SpriteCB_TestBallThrow: @ 804ABD4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r7, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _0804AC74 - ldrb r6, [r7, 0x6] - ldr r1, _0804AC80 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldrb r5, [r0, 0x10] - ldrb r0, [r0, 0xC] - mov r8, r0 - adds r0, r7, 0 - movs r1, 0x1 - bl StartSpriteAnim - adds r2, r7, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldrh r0, [r7, 0x24] - ldrh r1, [r7, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r7, 0x20] - ldrh r0, [r7, 0x26] - ldrh r2, [r7, 0x22] - adds r0, r2 - strh r0, [r7, 0x22] - strh r1, [r7, 0x24] - strh r1, [r7, 0x26] - strh r1, [r7, 0x38] - adds r0, r5, 0 - bl GetBankPokeballItemId - lsls r0, 16 - lsrs r0, 16 - bl ItemIdToBallId - adds r4, r0, 0 - ldrh r0, [r7, 0x20] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r7, 0x22] - subs r1, 0x5 - lsls r1, 24 - lsrs r1, 24 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp] - movs r2, 0x1 - movs r3, 0x1C - bl LaunchBallStarsTask - movs r0, 0 - adds r1, r5, 0 - movs r2, 0xE - adds r3, r4, 0 - bl LaunchBallFadeMonTask - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7, 0x2E] - strh r5, [r7, 0x3A] - mov r0, r8 - strh r0, [r7, 0x3C] - adds r0, r6, 0 - bl DestroyTask - ldr r0, _0804AC84 @ =sub_804AC88 - str r0, [r7, 0x1C] -_0804AC74: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804AC80: .4byte gTasks -_0804AC84: .4byte sub_804AC88 - thumb_func_end SpriteCB_TestBallThrow - - thumb_func_start sub_804AC88 -sub_804AC88: @ 804AC88 - ldr r1, _0804AC90 @ =sub_804AC94 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0804AC90: .4byte sub_804AC94 - thumb_func_end sub_804AC88 - - thumb_func_start sub_804AC94 -sub_804AC94: @ 804AC94 - push {r4-r7,lr} - adds r6, r0, 0 - ldrh r0, [r6, 0x38] - adds r0, 0x1 - movs r7, 0 - strh r0, [r6, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _0804ACEE - strh r7, [r6, 0x38] - ldr r0, _0804ACF4 @ =sub_804AD00 - str r0, [r6, 0x1C] - ldr r5, _0804ACF8 @ =gBattlerSpriteIds - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0804ACFC @ =gSprites - adds r0, r4 - movs r1, 0x2 - bl StartSpriteAffineAnim - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl AnimateSprite - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x30] -_0804ACEE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804ACF4: .4byte sub_804AD00 -_0804ACF8: .4byte gBattlerSpriteIds -_0804ACFC: .4byte gSprites - thumb_func_end sub_804AC94 - - thumb_func_start sub_804AD00 -sub_804AD00: @ 804AD00 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xB - bne _0804AD18 - movs r0, 0x35 - bl PlaySE -_0804AD18: - ldr r6, _0804AD64 @ =gSprites - ldr r5, _0804AD68 @ =gBattlerSpriteIds - movs r1, 0x3A - ldrsh r0, [r4, r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r6 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _0804AD70 - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - movs r2, 0x3A - ldrsh r0, [r4, r2] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - movs r0, 0 - strh r0, [r4, 0x38] - ldr r0, _0804AD6C @ =sub_804AD98 - str r0, [r4, 0x1C] - b _0804AD90 - .align 2, 0 -_0804AD64: .4byte gSprites -_0804AD68: .4byte gBattlerSpriteIds -_0804AD6C: .4byte sub_804AD98 -_0804AD70: - ldrh r0, [r1, 0x30] - adds r0, 0x60 - strh r0, [r1, 0x30] - movs r1, 0x3A - ldrsh r0, [r4, r1] - adds r0, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r2, 0x30 - ldrsh r0, [r1, r2] - negs r0, r0 - asrs r0, 8 - strh r0, [r1, 0x26] -_0804AD90: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_804AD00 - - thumb_func_start sub_804AD98 -sub_804AD98: @ 804AD98 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804ADE0 - ldrh r0, [r4, 0x38] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _0804ADE0 - strh r1, [r4, 0x34] - movs r0, 0x20 - strh r0, [r4, 0x36] - strh r1, [r4, 0x38] - movs r0, 0 - movs r1, 0x20 - bl Cos - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - movs r0, 0x36 - ldrsh r1, [r4, r0] - movs r0, 0 - bl Cos - negs r0, r0 - strh r0, [r4, 0x26] - ldr r0, _0804ADE8 @ =sub_804ADEC - str r0, [r4, 0x1C] -_0804ADE0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804ADE8: .4byte sub_804ADEC - thumb_func_end sub_804AD98 - - thumb_func_start sub_804ADEC -sub_804ADEC: @ 804ADEC - push {r4,r5,lr} - adds r4, r0, 0 - movs r5, 0 - ldrh r0, [r4, 0x34] - movs r1, 0xFF - ands r1, r0 - cmp r1, 0 - beq _0804AE02 - cmp r1, 0x1 - beq _0804AE76 - b _0804AEA2 -_0804AE02: - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl Cos - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r1, [r4, 0x38] - adds r1, 0x4 - ldrh r2, [r4, 0x34] - lsls r0, r2, 16 - asrs r0, 24 - adds r1, r0 - strh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x3F - ble _0804AEA2 - ldrh r0, [r4, 0x36] - subs r0, 0xA - strh r0, [r4, 0x36] - ldr r1, _0804AE4C @ =0x00000101 - adds r0, r2, r1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 24 - cmp r0, 0x4 - bne _0804AE3E - movs r5, 0x1 -_0804AE3E: - cmp r0, 0x2 - beq _0804AE5E - cmp r0, 0x2 - bgt _0804AE50 - cmp r0, 0x1 - beq _0804AE56 - b _0804AE6E - .align 2, 0 -_0804AE4C: .4byte 0x00000101 -_0804AE50: - cmp r0, 0x3 - beq _0804AE66 - b _0804AE6E -_0804AE56: - movs r0, 0x31 - bl PlaySE - b _0804AEA2 -_0804AE5E: - movs r0, 0x32 - bl PlaySE - b _0804AEA2 -_0804AE66: - movs r0, 0x33 - bl PlaySE - b _0804AEA2 -_0804AE6E: - movs r0, 0x34 - bl PlaySE - b _0804AEA2 -_0804AE76: - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl Cos - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r1, [r4, 0x38] - subs r1, 0x4 - ldrh r2, [r4, 0x34] - lsls r0, r2, 16 - asrs r0, 24 - subs r1, r0 - strh r1, [r4, 0x38] - lsls r1, 16 - cmp r1, 0 - bgt _0804AEA2 - strh r5, [r4, 0x38] - ldr r0, _0804AEC8 @ =0xffffff00 - ands r0, r2 - strh r0, [r4, 0x34] -_0804AEA2: - cmp r5, 0 - beq _0804AEDA - movs r5, 0 - strh r5, [r4, 0x34] - movs r0, 0x40 - movs r1, 0x20 - bl Cos - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - strh r5, [r4, 0x26] - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0804AED0 - ldr r0, _0804AECC @ =sub_804B268 - str r0, [r4, 0x1C] - b _0804AEDA - .align 2, 0 -_0804AEC8: .4byte 0xffffff00 -_0804AECC: .4byte sub_804B268 -_0804AED0: - ldr r0, _0804AEE0 @ =sub_804AEE4 - str r0, [r4, 0x1C] - movs r0, 0x1 - strh r0, [r4, 0x36] - strh r5, [r4, 0x38] -_0804AEDA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804AEE0: .4byte sub_804AEE4 - thumb_func_end sub_804ADEC - - thumb_func_start sub_804AEE4 -sub_804AEE4: @ 804AEE4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _0804AF18 - movs r0, 0 - strh r0, [r4, 0x34] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _0804AF20 @ =sub_804AF24 - str r0, [r4, 0x1C] - movs r0, 0x17 - bl PlaySE -_0804AF18: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804AF20: .4byte sub_804AF24 - thumb_func_end sub_804AEE4 - - thumb_func_start sub_804AF24 -sub_804AF24: @ 804AF24 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x34] - movs r1, 0xFF - ands r1, r0 - cmp r1, 0x4 - bhi _0804B024 - lsls r0, r1, 2 - ldr r1, _0804AF3C @ =_0804AF40 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804AF3C: .4byte _0804AF40 - .align 2, 0 -_0804AF40: - .4byte _0804AF54 - .4byte _0804AF86 - .4byte _0804AF54 - .4byte _0804AFDA - .4byte _0804B024 -_0804AF54: - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x24] - adds r1, r0, r2 - strh r1, [r4, 0x24] - ldrh r1, [r4, 0x38] - adds r0, r1 - strh r0, [r4, 0x38] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldrh r0, [r4, 0x38] - adds r0, 0x3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x6 - bls _0804B06A - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - movs r0, 0 - strh r0, [r4, 0x38] - b _0804B06A -_0804AF86: - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _0804AFCC - movs r0, 0 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x36] - negs r0, r0 - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r0, 0 - bge _0804AFC2 - adds r0, r4, 0 - movs r1, 0x2 - bl ChangeSpriteAffineAnim - b _0804B06A -_0804AFC2: - adds r0, r4, 0 - movs r1, 0x1 - bl ChangeSpriteAffineAnim - b _0804B06A -_0804AFCC: - adds r0, r4, 0 - adds r0, 0x2C - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] - b _0804B06A -_0804AFDA: - movs r1, 0x80 - lsls r1, 1 - adds r0, r1, 0 - ldrh r2, [r4, 0x34] - adds r0, r2 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 24 - movs r2, 0x3C - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _0804AFFC - ldr r0, _0804AFF8 @ =sub_804B268 - str r0, [r4, 0x1C] - b _0804B06A - .align 2, 0 -_0804AFF8: .4byte sub_804B268 -_0804AFFC: - cmp r1, 0x4 - bne _0804B010 - cmp r0, 0x3 - bne _0804B010 - ldr r0, _0804B00C @ =sub_804B484 - str r0, [r4, 0x1C] - b _0804B016 - .align 2, 0 -_0804B00C: .4byte sub_804B484 -_0804B010: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] -_0804B016: - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - b _0804B06A -_0804B024: - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _0804B06A - movs r0, 0 - strh r0, [r4, 0x38] - ldrh r1, [r4, 0x34] - ldr r0, _0804B058 @ =0xffffff00 - ands r0, r1 - strh r0, [r4, 0x34] - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAffineAnim - movs r1, 0x36 - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _0804B05C - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - b _0804B064 - .align 2, 0 -_0804B058: .4byte 0xffffff00 -_0804B05C: - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim -_0804B064: - movs r0, 0x17 - bl PlaySE -_0804B06A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804AF24 - - thumb_func_start Task_PlayCryWhenReleasedFromBall -Task_PlayCryWhenReleasedFromBall: @ 804B070 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _0804B0A4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r2 - ldrb r7, [r0, 0xC] - ldrb r5, [r0, 0xA] - ldrh r6, [r0, 0x8] - movs r3, 0xE - ldrsh r1, [r0, r3] - lsls r3, r1, 16 - ldrh r1, [r0, 0x10] - orrs r3, r1 - movs r1, 0x26 - ldrsh r0, [r0, r1] - cmp r0, 0x20 - bhi _0804B130 - lsls r0, 2 - ldr r1, _0804B0A8 @ =_0804B0AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804B0A4: .4byte gTasks -_0804B0A8: .4byte _0804B0AC - .align 2, 0 -_0804B0AC: - .4byte _0804B130 - .4byte _0804B14E - .4byte _0804B174 - .4byte _0804B1CE - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B190 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B130 - .4byte _0804B1E0 - .4byte _0804B1F8 - .4byte _0804B220 -_0804B130: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r2 - ldrh r2, [r1, 0x18] - movs r3, 0x18 - ldrsh r0, [r1, r3] - cmp r0, 0x2 - bgt _0804B148 - adds r0, r2, 0x1 - strh r0, [r1, 0x18] - b _0804B262 -_0804B148: - adds r0, r7, 0x1 - strh r0, [r1, 0x26] - b _0804B262 -_0804B14E: - adds r0, r3, 0 - bl ShouldPlayNormalPokeCry - cmp r0, 0x1 - bne _0804B166 - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0 - bl PlayCry3 - b _0804B1C6 -_0804B166: - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0xB - bl PlayCry3 - b _0804B1C6 -_0804B174: - bl StopCryAndClearCrySongs - ldr r1, _0804B18C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0x3 - strh r1, [r0, 0x1C] - movs r1, 0x14 - strh r1, [r0, 0x26] - b _0804B262 - .align 2, 0 -_0804B18C: .4byte gTasks -_0804B190: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r2 - ldrh r2, [r1, 0x1C] - movs r7, 0x1C - ldrsh r0, [r1, r7] - cmp r0, 0 - bne _0804B232 - adds r0, r3, 0 - bl ShouldPlayNormalPokeCry - cmp r0, 0x1 - bne _0804B1BA - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0x1 - bl PlayCry4 - b _0804B1C6 -_0804B1BA: - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0xC - bl PlayCry4 -_0804B1C6: - adds r0, r4, 0 - bl DestroyTask - b _0804B262 -_0804B1CE: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r2 - movs r1, 0x6 - strh r1, [r0, 0x1C] - movs r1, 0x1E - strh r1, [r0, 0x26] - b _0804B262 -_0804B1E0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r2 - ldrh r2, [r1, 0x1C] - movs r3, 0x1C - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0804B232 - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] -_0804B1F8: - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - bne _0804B262 - bl StopCryAndClearCrySongs - ldr r0, _0804B21C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0x3 - strh r0, [r1, 0x1C] - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _0804B262 - .align 2, 0 -_0804B21C: .4byte gTasks -_0804B220: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r2 - ldrh r2, [r1, 0x1C] - movs r7, 0x1C - ldrsh r0, [r1, r7] - cmp r0, 0 - beq _0804B238 -_0804B232: - subs r0, r2, 0x1 - strh r0, [r1, 0x1C] - b _0804B262 -_0804B238: - adds r0, r3, 0 - bl ShouldPlayNormalPokeCry - cmp r0, 0x1 - bne _0804B250 - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0 - bl PlayCry4 - b _0804B25C -_0804B250: - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0xB - bl PlayCry4 -_0804B25C: - adds r0, r4, 0 - bl DestroyTask -_0804B262: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end Task_PlayCryWhenReleasedFromBall - - thumb_func_start sub_804B268 -sub_804B268: @ 804B268 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r6, r0, 0 - ldrh r0, [r6, 0x3A] - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r6, 0 - movs r1, 0x1 - bl StartSpriteAnim - adds r0, r5, 0 - bl GetBankPokeballItemId - lsls r0, 16 - lsrs r0, 16 - bl ItemIdToBallId - adds r4, r0, 0 - ldrh r0, [r6, 0x20] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x22] - subs r1, 0x5 - lsls r1, 24 - lsrs r1, 24 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp] - movs r2, 0x1 - movs r3, 0x1C - bl LaunchBallStarsTask - ldrh r1, [r6, 0x3A] - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1 - movs r2, 0xE - adds r3, r4, 0 - bl LaunchBallFadeMonTask - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x2E] - ldr r0, _0804B2FC @ =HandleBallAnimEnd - str r0, [r6, 0x1C] - ldr r0, _0804B300 @ =gMain - ldr r1, _0804B304 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0804B2DA - b _0804B420 -_0804B2DA: - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0804B310 - ldr r1, _0804B308 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _0804B30C @ =gEnemyParty - adds r7, r1, r0 - movs r3, 0x19 - mov r9, r3 - b _0804B324 - .align 2, 0 -_0804B2FC: .4byte HandleBallAnimEnd -_0804B300: .4byte gMain -_0804B304: .4byte 0x00000439 -_0804B308: .4byte gBattlerPartyIndexes -_0804B30C: .4byte gEnemyParty -_0804B310: - ldr r1, _0804B388 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _0804B38C @ =gPlayerParty - adds r7, r1, r0 - movs r0, 0xE7 - mov r9, r0 -_0804B324: - adds r0, r7, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - beq _0804B34E - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - bne _0804B3A6 -_0804B34E: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0804B3A6 - ldr r0, _0804B390 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x8] - ldrb r1, [r0, 0x9] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0804B3A6 - ldr r0, _0804B394 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0804B39C - bl IsBGMPlaying - lsls r0, 24 - cmp r0, 0 - beq _0804B3A6 - ldr r0, _0804B398 @ =gMPlayInfo_BGM - bl m4aMPlayStop - b _0804B3A6 - .align 2, 0 -_0804B388: .4byte gBattlerPartyIndexes -_0804B38C: .4byte gPlayerParty -_0804B390: .4byte gBattleSpritesDataPtr -_0804B394: .4byte gBattleTypeFlags -_0804B398: .4byte gMPlayInfo_BGM -_0804B39C: - ldr r0, _0804B3C4 @ =gMPlayInfo_BGM - ldr r1, _0804B3C8 @ =0x0000ffff - movs r2, 0x80 - bl m4aMPlayVolumeControl -_0804B3A6: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0804B3C0 - ldr r0, _0804B3CC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x8] - ldrb r1, [r0, 0x9] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0804B3D0 -_0804B3C0: - movs r4, 0 - b _0804B3F2 - .align 2, 0 -_0804B3C4: .4byte gMPlayInfo_BGM -_0804B3C8: .4byte 0x0000ffff -_0804B3CC: .4byte gBattleSpritesDataPtr -_0804B3D0: - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - beq _0804B3EC - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - bne _0804B3F0 -_0804B3EC: - movs r4, 0x1 - b _0804B3F2 -_0804B3F0: - movs r4, 0x2 -_0804B3F2: - ldr r0, _0804B474 @ =Task_PlayCryWhenReleasedFromBall - movs r1, 0x3 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0804B478 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - mov r3, r8 - strh r3, [r1, 0x8] - mov r3, r9 - lsls r0, r3, 24 - asrs r0, 24 - strh r0, [r1, 0xA] - strh r4, [r1, 0xC] - lsrs r0, r7, 16 - strh r0, [r1, 0xE] - strh r7, [r1, 0x10] - strh r2, [r1, 0x26] -_0804B420: - ldr r5, _0804B47C @ =gBattlerSpriteIds - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0804B480 @ =gSprites - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAffineAnim - movs r3, 0x3A - ldrsh r0, [r6, r3] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl AnimateSprite - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x80 - lsls r1, 5 - strh r1, [r0, 0x30] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804B474: .4byte Task_PlayCryWhenReleasedFromBall -_0804B478: .4byte gTasks -_0804B47C: .4byte gBattlerSpriteIds -_0804B480: .4byte gSprites - thumb_func_end sub_804B268 - - thumb_func_start sub_804B484 -sub_804B484: @ 804B484 - adds r3, r0, 0 - adds r3, 0x2C - ldrb r1, [r3] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r3] - ldr r1, _0804B4A0 @ =sub_804B5C8 - str r1, [r0, 0x1C] - movs r1, 0 - strh r1, [r0, 0x34] - strh r1, [r0, 0x36] - strh r1, [r0, 0x38] - bx lr - .align 2, 0 -_0804B4A0: .4byte sub_804B5C8 - thumb_func_end sub_804B484 - - thumb_func_start HandleBallAnimEnd -HandleBallAnimEnd: @ 804B4A4 - push {r4-r7,lr} - adds r5, r0, 0 - movs r7, 0 - ldrh r0, [r5, 0x3A] - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _0804B508 @ =gSprites - ldr r0, _0804B50C @ =gBattlerSpriteIds - adds r3, r6, r0 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804B4E6 - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0804B4E6: - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _0804B510 - adds r0, r1, 0 - movs r1, 0 - bl StartSpriteAffineAnim - movs r7, 0x1 - b _0804B52C - .align 2, 0 -_0804B508: .4byte gSprites -_0804B50C: .4byte gBattlerSpriteIds -_0804B510: - ldr r2, _0804B5B4 @ =0xfffffee0 - adds r0, r2, 0 - ldrh r2, [r1, 0x30] - adds r0, r2 - strh r0, [r1, 0x30] - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 24 - strh r0, [r1, 0x26] -_0804B52C: - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804B5AE - cmp r7, 0 - beq _0804B5AE - ldr r2, _0804B5B8 @ =gSprites - ldr r0, _0804B5BC @ =gBattlerSpriteIds - adds r0, r6, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r2, 0 - movs r1, 0 - strh r1, [r0, 0x26] - ldr r0, _0804B5C0 @ =gDoingBattleAnim - strb r2, [r0] - ldr r4, _0804B5C4 @ =gBattleSpritesDataPtr - ldr r0, [r4] - ldr r0, [r0, 0x4] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 2 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - adds r0, r5, 0 - bl FreeSpriteOamMatrix - adds r0, r5, 0 - bl DestroySprite - movs r3, 0 - ldr r0, [r4] - ldr r2, [r0, 0x4] - movs r5, 0x8 - movs r4, 0x3 -_0804B586: - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _0804B592 - adds r3, 0x1 -_0804B592: - adds r2, 0xC - subs r4, 0x1 - cmp r4, 0 - bge _0804B586 - cmp r3, 0x4 - bne _0804B5AE - movs r4, 0 -_0804B5A0: - lsls r0, r4, 24 - lsrs r0, 24 - bl FreeBallGfx - adds r4, 0x1 - cmp r4, 0xB - ble _0804B5A0 -_0804B5AE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804B5B4: .4byte 0xfffffee0 -_0804B5B8: .4byte gSprites -_0804B5BC: .4byte gBattlerSpriteIds -_0804B5C0: .4byte gDoingBattleAnim -_0804B5C4: .4byte gBattleSpritesDataPtr - thumb_func_end HandleBallAnimEnd - - thumb_func_start sub_804B5C8 -sub_804B5C8: @ 804B5C8 - push {r4-r7,lr} - adds r6, r0, 0 - ldrh r0, [r6, 0x3A] - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r6, 0x36] - adds r0, 0x1 - strh r0, [r6, 0x36] - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0x28 - beq _0804B666 - cmp r1, 0x5F - bne _0804B600 - ldr r0, _0804B5F8 @ =gDoingBattleAnim - movs r1, 0 - strb r1, [r0] - bl m4aMPlayAllStop - ldr r0, _0804B5FC @ =0x0000013f - bl PlaySE - b _0804B666 - .align 2, 0 -_0804B5F8: .4byte gDoingBattleAnim -_0804B5FC: .4byte 0x0000013f -_0804B600: - ldr r0, _0804B66C @ =0x0000013b - cmp r1, r0 - bne _0804B666 - ldr r5, _0804B670 @ =gSprites - ldr r4, _0804B674 @ =gBattlerSpriteIds - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - movs r1, 0x3A - ldrsh r0, [r6, r1] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - adds r0, r6, 0 - bl DestroySpriteAndFreeResources - ldr r0, _0804B678 @ =gMain - ldr r1, _0804B67C @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0804B666 - ldr r0, _0804B680 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x4] - lsls r1, r7, 1 - adds r1, r7 - lsls r1, 2 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - ands r0, r2 - strb r0, [r1] -_0804B666: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804B66C: .4byte 0x0000013b -_0804B670: .4byte gSprites -_0804B674: .4byte gBattlerSpriteIds -_0804B678: .4byte gMain -_0804B67C: .4byte 0x00000439 -_0804B680: .4byte gBattleSpritesDataPtr - thumb_func_end sub_804B5C8 - - thumb_func_start SpriteCB_PlayerMonSendOut_1 -SpriteCB_PlayerMonSendOut_1: @ 804B684 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x19 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x18 - strh r0, [r4, 0x36] - ldr r0, _0804B6CC @ =0x0000ffe2 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3A] - strh r0, [r4, 0x6] - adds r0, r4, 0 - bl InitAnimArcTranslation - ldr r0, _0804B6D0 @ =SpriteCB_PlayerMonSendOut_2 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804B6CC: .4byte 0x0000ffe2 -_0804B6D0: .4byte SpriteCB_PlayerMonSendOut_2 - thumb_func_end SpriteCB_PlayerMonSendOut_1 - - thumb_func_start SpriteCB_PlayerMonSendOut_2 -SpriteCB_PlayerMonSendOut_2: @ 804B6D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldrh r0, [r5, 0x3C] - movs r1, 0xFF - mov r8, r1 - lsrs r0, 8 - subs r0, 0x23 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2C - bhi _0804B7C8 - ldrh r1, [r5, 0x6] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - bne _0804B736 - ldrh r0, [r5, 0x30] - movs r1, 0x1 - adds r6, r1, 0 - ands r6, r0 - ldrh r0, [r5, 0x32] - adds r7, r1, 0 - ands r7, r0 - movs r2, 0x30 - ldrsh r0, [r5, r2] - movs r1, 0x3 - bl __divsi3 - movs r1, 0x2 - negs r1, r1 - adds r4, r1, 0 - ands r0, r4 - orrs r6, r0 - strh r6, [r5, 0x30] - movs r2, 0x32 - ldrsh r0, [r5, r2] - movs r1, 0x3 - bl __divsi3 - ands r0, r4 - orrs r7, r0 - strh r7, [r5, 0x32] - adds r0, r5, 0 - movs r1, 0x4 - bl StartSpriteAffineAnim -_0804B736: - ldrh r4, [r5, 0x2E] - adds r0, r5, 0 - bl AnimTranslateLinear - movs r1, 0x3A - ldrsh r0, [r5, r1] - movs r1, 0x3 - bl __divsi3 - adds r1, r0, 0 - ldrh r0, [r5, 0x3C] - adds r0, r1 - strh r0, [r5, 0x3C] - lsls r0, 16 - asrs r0, 24 - mov r2, r8 - ands r0, r2 - movs r2, 0x38 - ldrsh r1, [r5, r2] - bl Sin - ldrh r1, [r5, 0x26] - adds r0, r1 - strh r0, [r5, 0x26] - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - ldrh r1, [r5, 0x6] - adds r0, r1 - strh r0, [r5, 0x6] - lsls r0, 16 - lsrs r0, 24 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - beq _0804B786 - strh r4, [r5, 0x2E] - b _0804B78E -_0804B786: - lsls r0, r4, 16 - asrs r0, 16 - subs r0, 0x1 - strh r0, [r5, 0x2E] -_0804B78E: - ldrh r0, [r5, 0x3C] - lsrs r0, 8 - cmp r0, 0x4F - ble _0804B834 - ldrh r0, [r5, 0x30] - movs r1, 0x1 - adds r6, r1, 0 - ands r6, r0 - ldrh r0, [r5, 0x32] - adds r7, r1, 0 - ands r7, r0 - movs r2, 0x30 - ldrsh r1, [r5, r2] - lsls r0, r1, 1 - adds r0, r1 - movs r1, 0x2 - negs r1, r1 - adds r2, r1, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r5, 0x30] - movs r0, 0x32 - ldrsh r1, [r5, r0] - lsls r0, r1, 1 - adds r0, r1 - ands r0, r2 - orrs r0, r7 - strh r0, [r5, 0x32] - b _0804B834 -_0804B7C8: - adds r0, r5, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _0804B834 - ldrh r0, [r5, 0x24] - ldrh r1, [r5, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x26] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - strh r1, [r5, 0x26] - strh r1, [r5, 0x24] - ldrb r0, [r5, 0x6] - strh r0, [r5, 0x3A] - strh r1, [r5, 0x2E] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0804B828 - ldr r0, _0804B820 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x8] - ldrb r1, [r0, 0x9] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0804B828 - movs r0, 0x3A - ldrsh r4, [r5, r0] - movs r0, 0x2 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _0804B828 - ldr r0, _0804B824 @ =SpriteCB_ReleaseMon2FromBall - b _0804B82A - .align 2, 0 -_0804B820: .4byte gBattleSpritesDataPtr -_0804B824: .4byte SpriteCB_ReleaseMon2FromBall -_0804B828: - ldr r0, _0804B840 @ =sub_804B268 -_0804B82A: - str r0, [r5, 0x1C] - adds r0, r5, 0 - movs r1, 0 - bl StartSpriteAffineAnim -_0804B834: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804B840: .4byte sub_804B268 - thumb_func_end SpriteCB_PlayerMonSendOut_2 - - thumb_func_start SpriteCB_ReleaseMon2FromBall -SpriteCB_ReleaseMon2FromBall: @ 804B844 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - adds r1, r0, 0x1 - strh r1, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x18 - ble _0804B85E - movs r0, 0 - strh r0, [r2, 0x2E] - ldr r0, _0804B864 @ =sub_804B268 - str r0, [r2, 0x1C] -_0804B85E: - pop {r0} - bx r0 - .align 2, 0 -_0804B864: .4byte sub_804B268 - thumb_func_end SpriteCB_ReleaseMon2FromBall - - thumb_func_start SpriteCB_OpponentMonSendOut -SpriteCB_OpponentMonSendOut: @ 804B868 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _0804B8BC - movs r0, 0 - strh r0, [r5, 0x2E] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0804B8B8 - ldr r0, _0804B8B0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x8] - ldrb r1, [r0, 0x9] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0804B8B8 - movs r0, 0x3A - ldrsh r4, [r5, r0] - movs r0, 0x3 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _0804B8B8 - ldr r0, _0804B8B4 @ =SpriteCB_ReleaseMon2FromBall - b _0804B8BA - .align 2, 0 -_0804B8B0: .4byte gBattleSpritesDataPtr -_0804B8B4: .4byte SpriteCB_ReleaseMon2FromBall -_0804B8B8: - ldr r0, _0804B8C4 @ =sub_804B268 -_0804B8BA: - str r0, [r5, 0x1C] -_0804B8BC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804B8C4: .4byte sub_804B268 - thumb_func_end SpriteCB_OpponentMonSendOut - - thumb_func_start LaunchBallStarsTaskForPokeball -LaunchBallStarsTaskForPokeball: @ 804B8C8 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - movs r4, 0 - str r4, [sp] - bl LaunchBallStarsTask - lsls r0, 24 - lsrs r0, 24 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end LaunchBallStarsTaskForPokeball - - thumb_func_start LaunchBallFadeMonTaskForPokeball -LaunchBallFadeMonTaskForPokeball: @ 804B8F0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r3, 0 - bl LaunchBallFadeMonTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end LaunchBallFadeMonTaskForPokeball - - thumb_func_start CreatePokeballSpriteToReleaseMon -CreatePokeballSpriteToReleaseMon: @ 804B908 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r5, r0, 0 - mov r9, r2 - mov r10, r3 - ldr r6, [sp, 0x24] - ldr r4, [sp, 0x28] - ldr r0, [sp, 0x2C] - lsls r5, 24 - lsrs r5, 24 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - mov r1, r9 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - mov r2, r10 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _0804B9D4 @ =gUnknown_826056C - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _0804B9D8 @ =gUnknown_82605CC - bl LoadCompressedSpritePaletteUsingHeap - ldr r0, _0804B9DC @ =gUnknown_82606F4 - mov r1, r9 - mov r2, r10 - adds r3, r4, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0804B9E0 @ =gSprites - mov r8, r3 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r1, r4, r3 - strh r5, [r1, 0x2E] - lsls r2, r5, 4 - adds r2, r5 - lsls r2, 2 - add r2, r8 - ldrh r0, [r2, 0x20] - strh r0, [r1, 0x38] - ldrh r0, [r2, 0x22] - strh r0, [r1, 0x3A] - mov r0, r9 - strh r0, [r2, 0x20] - mov r3, r10 - strh r3, [r2, 0x22] - strh r7, [r1, 0x30] - mov r0, sp - ldrh r0, [r0] - strh r0, [r1, 0x32] - mov r3, sp - ldrh r3, [r3, 0x30] - strh r3, [r1, 0x34] - ldr r3, [sp, 0x30] - lsrs r0, r3, 16 - strh r0, [r1, 0x36] - movs r0, 0x3 - ands r6, r0 - lsls r6, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r6 - strb r0, [r1, 0x5] - movs r0, 0x1C - add r8, r0 - add r4, r8 - ldr r0, _0804B9E4 @ =sub_804B9E8 - str r0, [r4] - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804B9D4: .4byte gUnknown_826056C -_0804B9D8: .4byte gUnknown_82605CC -_0804B9DC: .4byte gUnknown_82606F4 -_0804B9E0: .4byte gSprites -_0804B9E4: .4byte sub_804B9E8 - thumb_func_end CreatePokeballSpriteToReleaseMon - - thumb_func_start sub_804B9E8 -sub_804B9E8: @ 804B9E8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldrh r1, [r6, 0x30] - movs r2, 0x30 - ldrsh r0, [r6, r2] - cmp r0, 0 - bne _0804BA94 - ldrh r0, [r6, 0x2E] - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r6, 0x32] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrh r4, [r6, 0x34] - ldrh r0, [r6, 0x36] - lsls r0, 16 - orrs r4, r0 - adds r0, r6, 0 - adds r0, 0x43 - ldrb r0, [r0] - cmp r0, 0 - beq _0804BA22 - subs r0, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - b _0804BA24 -_0804BA22: - movs r5, 0 -_0804BA24: - adds r0, r6, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldrh r0, [r6, 0x20] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x22] - subs r1, 0x5 - lsls r1, 24 - lsrs r1, 24 - ldrb r2, [r6, 0x5] - lsls r2, 28 - lsrs r2, 30 - adds r3, r5, 0 - bl LaunchBallStarsTaskForPokeball - movs r0, 0x1 - mov r1, r8 - adds r2, r4, 0 - bl LaunchBallFadeMonTaskForPokeball - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r6, 0x30] - ldr r0, _0804BA8C @ =sub_804BAA4 - str r0, [r6, 0x1C] - ldr r0, _0804BA90 @ =gSprites - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - adds r4, r0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - adds r0, r4, 0 - bl AnimateSprite - movs r0, 0x80 - lsls r0, 5 - strh r0, [r4, 0x30] - strh r5, [r6, 0x3C] - b _0804BA98 - .align 2, 0 -_0804BA8C: .4byte sub_804BAA4 -_0804BA90: .4byte gSprites -_0804BA94: - subs r0, r1, 0x1 - strh r0, [r6, 0x30] -_0804BA98: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804B9E8 - - thumb_func_start sub_804BAA4 -sub_804BAA4: @ 804BAA4 - push {r4-r7,lr} - adds r4, r0, 0 - movs r0, 0 - mov r12, r0 - movs r6, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804BACE - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0804BACE: - ldr r0, _0804BB5C @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r5, r1, r0 - adds r0, r5, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _0804BAF0 - adds r0, r5, 0 - movs r1, 0 - bl StartSpriteAffineAnim - movs r1, 0x1 - mov r12, r1 -_0804BAF0: - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r7, 0x20 - ldrsh r1, [r4, r7] - subs r0, r1 - movs r1, 0x3C - ldrsh r2, [r4, r1] - muls r0, r2 - cmp r0, 0 - bge _0804BB06 - adds r0, 0x7F -_0804BB06: - asrs r0, 7 - ldrh r7, [r4, 0x20] - adds r0, r7 - lsls r0, 16 - lsrs r3, r0, 16 - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r7, 0x22 - ldrsh r1, [r4, r7] - subs r0, r1 - muls r0, r2 - cmp r0, 0 - bge _0804BB22 - adds r0, 0x7F -_0804BB22: - asrs r0, 7 - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r3, [r5, 0x20] - strh r0, [r5, 0x22] - ldrh r2, [r4, 0x3C] - movs r7, 0x3C - ldrsh r0, [r4, r7] - cmp r0, 0x7F - bgt _0804BB64 - ldr r1, _0804BB60 @ =gSineTable - lsls r0, r2, 24 - lsrs r0, 23 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bge _0804BB48 - adds r0, 0x7 -_0804BB48: - asrs r0, 3 - negs r0, r0 - lsls r0, 16 - lsrs r0, 16 - adds r1, r2, 0x4 - strh r1, [r4, 0x3C] - strh r0, [r5, 0x24] - strh r0, [r5, 0x26] - b _0804BB72 - .align 2, 0 -_0804BB5C: .4byte gSprites -_0804BB60: .4byte gSineTable -_0804BB64: - ldrh r0, [r4, 0x38] - strh r0, [r5, 0x20] - ldrh r0, [r4, 0x3A] - strh r0, [r5, 0x22] - strh r6, [r5, 0x24] - strh r6, [r5, 0x26] - movs r6, 0x1 -_0804BB72: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804BB90 - mov r2, r12 - cmp r2, 0 - beq _0804BB90 - cmp r6, 0 - beq _0804BB90 - adds r0, r4, 0 - bl DestroySpriteAndFreeResources -_0804BB90: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804BAA4 - - thumb_func_start CreateTradePokeballSprite -CreateTradePokeballSprite: @ 804BB98 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r10, r0 - adds r6, r2, 0 - mov r8, r3 - ldr r5, [sp, 0x20] - ldr r4, [sp, 0x24] - ldr r0, [sp, 0x28] - mov r9, r0 - mov r0, r10 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r6, 24 - lsrs r6, 24 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - lsrs r4, 24 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _0804BC3C @ =gUnknown_826056C - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _0804BC40 @ =gUnknown_82605CC - bl LoadCompressedSpritePaletteUsingHeap - ldr r0, _0804BC44 @ =gUnknown_82606F4 - adds r1, r6, 0 - mov r2, r8 - adds r3, r4, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r6, _0804BC48 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r2, r3, r6 - mov r1, r10 - strh r1, [r2, 0x2E] - mov r4, r9 - strh r4, [r2, 0x30] - strh r7, [r2, 0x32] - mov r1, sp - ldrh r1, [r1, 0x2C] - strh r1, [r2, 0x34] - ldr r4, [sp, 0x2C] - lsrs r1, r4, 16 - strh r1, [r2, 0x36] - movs r1, 0x3 - ands r5, r1 - lsls r5, 2 - ldrb r4, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r4 - orrs r1, r5 - strb r1, [r2, 0x5] - adds r6, 0x1C - adds r3, r6 - ldr r1, _0804BC4C @ =sub_804BC50 - str r1, [r3] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0804BC3C: .4byte gUnknown_826056C -_0804BC40: .4byte gUnknown_82605CC -_0804BC44: .4byte gUnknown_82606F4 -_0804BC48: .4byte gSprites -_0804BC4C: .4byte sub_804BC50 - thumb_func_end CreateTradePokeballSprite - - thumb_func_start sub_804BC50 -sub_804BC50: @ 804BC50 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0804BCE8 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r4, 0x32] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrh r5, [r4, 0x34] - ldrh r0, [r4, 0x36] - lsls r0, 16 - orrs r5, r0 - adds r0, r4, 0 - adds r0, 0x43 - ldrb r0, [r0] - cmp r0, 0 - beq _0804BC8A - subs r0, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - b _0804BC8C -_0804BC8A: - movs r6, 0 -_0804BC8C: - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldrh r0, [r4, 0x20] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x22] - subs r1, 0x5 - lsls r1, 24 - lsrs r1, 24 - ldrb r2, [r4, 0x5] - lsls r2, 28 - lsrs r2, 30 - adds r3, r6, 0 - bl LaunchBallStarsTaskForPokeball - movs r0, 0x1 - mov r1, r8 - adds r2, r5, 0 - bl LaunchBallFadeMonTaskForPokeball - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r4, 0x30] - ldr r0, _0804BCE0 @ =sub_804BCF8 - str r0, [r4, 0x1C] - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - ldr r0, _0804BCE4 @ =gSprites - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - adds r0, r4, 0 - bl AnimateSprite - strh r5, [r4, 0x30] - b _0804BCEC - .align 2, 0 -_0804BCE0: .4byte sub_804BCF8 -_0804BCE4: .4byte gSprites -_0804BCE8: - subs r0, r1, 0x1 - strh r0, [r4, 0x30] -_0804BCEC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804BC50 - - thumb_func_start sub_804BCF8 -sub_804BCF8: @ 804BCF8 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x38] - adds r0, 0x1 - strh r0, [r5, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xB - bne _0804BD10 - movs r0, 0x35 - bl PlaySE -_0804BD10: - ldrh r1, [r5, 0x2E] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0804BD4C @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _0804BD54 - adds r0, r5, 0 - movs r1, 0x2 - bl StartSpriteAnim - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - movs r0, 0 - strh r0, [r5, 0x38] - ldr r0, _0804BD50 @ =sub_804BD6C - str r0, [r5, 0x1C] - b _0804BD64 - .align 2, 0 -_0804BD4C: .4byte gSprites -_0804BD50: .4byte sub_804BD6C -_0804BD54: - ldrh r0, [r4, 0x30] - adds r0, 0x60 - strh r0, [r4, 0x30] - movs r1, 0x30 - ldrsh r0, [r4, r1] - negs r0, r0 - asrs r0, 8 - strh r0, [r4, 0x26] -_0804BD64: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_804BCF8 - - thumb_func_start sub_804BD6C -sub_804BD6C: @ 804BD6C - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804BD80 - ldr r0, _0804BD84 @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_0804BD80: - pop {r0} - bx r0 - .align 2, 0 -_0804BD84: .4byte SpriteCallbackDummy - thumb_func_end sub_804BD6C - - thumb_func_start DestroySpriteAndFreeResources2 -DestroySpriteAndFreeResources2: @ 804BD88 - push {lr} - bl DestroySpriteAndFreeResources - pop {r0} - bx r0 - thumb_func_end DestroySpriteAndFreeResources2 - - thumb_func_start sub_804BD94 -sub_804BD94: @ 804BD94 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r0, _0804BE14 @ =gHealthboxSpriteIds - adds r0, r5, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r6, _0804BE18 @ =gSprites - adds r4, r0, r6 - movs r1, 0 - movs r0, 0x5 - strh r0, [r4, 0x2E] - strh r1, [r4, 0x30] - movs r0, 0x73 - strh r0, [r4, 0x24] - strh r1, [r4, 0x26] - ldr r0, _0804BE1C @ =sub_804BE48 - str r0, [r4, 0x1C] - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0804BDE2 - ldrh r0, [r4, 0x2E] - negs r0, r0 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x30] - negs r0, r0 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x24] - negs r0, r0 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x26] - negs r0, r0 - strh r0, [r4, 0x26] -_0804BDE2: - movs r0, 0x38 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r6, 0 - adds r1, 0x1C - adds r1, r0, r1 - adds r0, r6 - ldr r1, [r1] - bl _call_via_r1 - adds r0, r5, 0 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0804BE0C - ldr r0, _0804BE20 @ =sub_804BE24 - str r0, [r4, 0x1C] -_0804BE0C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804BE14: .4byte gHealthboxSpriteIds -_0804BE18: .4byte gSprites -_0804BE1C: .4byte sub_804BE48 -_0804BE20: .4byte sub_804BE24 - thumb_func_end sub_804BD94 - - thumb_func_start sub_804BE24 -sub_804BE24: @ 804BE24 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _0804BE3E - movs r0, 0 - strh r0, [r1, 0x30] - ldr r0, _0804BE44 @ =sub_804BE48 - str r0, [r1, 0x1C] -_0804BE3E: - pop {r0} - bx r0 - .align 2, 0 -_0804BE44: .4byte sub_804BE48 - thumb_func_end sub_804BE24 - - thumb_func_start sub_804BE48 -sub_804BE48: @ 804BE48 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x24] - ldrh r1, [r2, 0x2E] - subs r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x26] - ldrh r1, [r2, 0x30] - subs r0, r1 - strh r0, [r2, 0x26] - ldr r0, [r2, 0x24] - cmp r0, 0 - bne _0804BE66 - ldr r0, _0804BE6C @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_0804BE66: - pop {r0} - bx r0 - .align 2, 0 -_0804BE6C: .4byte SpriteCallbackDummy - thumb_func_end sub_804BE48 - - thumb_func_start DoHitAnimHealthboxEffect -DoHitAnimHealthboxEffect: @ 804BE70 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _0804BEA8 @ =SpriteCB_HitAnimHealthoxEffect - adds r0, r5, 0 - bl CreateInvisibleSpriteWithCallback - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0804BEAC @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r3, r1, r2 - movs r0, 0x1 - strh r0, [r3, 0x2E] - ldr r0, _0804BEB0 @ =gHealthboxSpriteIds - adds r4, r0 - ldrb r0, [r4] - strh r0, [r3, 0x30] - adds r2, 0x1C - adds r1, r2 - str r5, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804BEA8: .4byte SpriteCB_HitAnimHealthoxEffect -_0804BEAC: .4byte gSprites -_0804BEB0: .4byte gHealthboxSpriteIds - thumb_func_end DoHitAnimHealthboxEffect - - thumb_func_start SpriteCB_HitAnimHealthoxEffect -SpriteCB_HitAnimHealthoxEffect: @ 804BEB4 - push {lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0804BEF0 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - ldrh r0, [r3, 0x2E] - movs r2, 0 - strh r0, [r1, 0x26] - ldrh r0, [r3, 0x2E] - negs r0, r0 - strh r0, [r3, 0x2E] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _0804BEEC - strh r2, [r1, 0x24] - strh r2, [r1, 0x26] - adds r0, r3, 0 - bl DestroySprite -_0804BEEC: - pop {r0} - bx r0 - .align 2, 0 -_0804BEF0: .4byte gSprites - thumb_func_end SpriteCB_HitAnimHealthoxEffect - - thumb_func_start LoadBallGfx -LoadBallGfx: @ 804BEF4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0804BF50 @ =gUnknown_826056C - lsls r6, r4, 3 - adds r5, r6, r0 - ldrh r0, [r5, 0x6] - bl GetSpriteTileStartByTag - lsls r0, 16 - ldr r1, _0804BF54 @ =0xffff0000 - cmp r0, r1 - bne _0804BF1C - adds r0, r5, 0 - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _0804BF58 @ =gUnknown_82605CC - adds r0, r6, r0 - bl LoadCompressedSpritePaletteUsingHeap -_0804BF1C: - cmp r4, 0x6 - beq _0804BF48 - cmp r4, 0x6 - blt _0804BF2C - cmp r4, 0xB - bgt _0804BF2C - cmp r4, 0xA - bge _0804BF48 -_0804BF2C: - ldr r1, _0804BF50 @ =gUnknown_826056C - lsls r0, r4, 3 - adds r0, r1 - ldrh r0, [r0, 0x6] - bl GetSpriteTileStartByTag - adds r1, r0, 0 - lsls r1, 16 - ldr r0, _0804BF5C @ =gFile_graphics_interface_ball_Open_sheet - lsrs r1, 11 - ldr r2, _0804BF60 @ =0x06010100 - adds r1, r2 - bl LZDecompressVram -_0804BF48: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804BF50: .4byte gUnknown_826056C -_0804BF54: .4byte 0xffff0000 -_0804BF58: .4byte gUnknown_82605CC -_0804BF5C: .4byte gFile_graphics_interface_ball_Open_sheet -_0804BF60: .4byte 0x06010100 - thumb_func_end LoadBallGfx - - thumb_func_start FreeBallGfx -FreeBallGfx: @ 804BF64 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - ldr r0, _0804BF88 @ =gUnknown_826056C - lsrs r4, 21 - adds r0, r4, r0 - ldrh r0, [r0, 0x6] - bl FreeSpriteTilesByTag - ldr r0, _0804BF8C @ =gUnknown_82605CC - adds r4, r0 - ldrh r0, [r4, 0x4] - bl FreeSpritePaletteByTag - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804BF88: .4byte gUnknown_826056C -_0804BF8C: .4byte gUnknown_82605CC - thumb_func_end FreeBallGfx - - thumb_func_start GetBankPokeballItemId -GetBankPokeballItemId: @ 804BF90 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0804BFBC - ldr r1, _0804BFB4 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0804BFB8 @ =gEnemyParty - b _0804BFCA - .align 2, 0 -_0804BFB4: .4byte gBattlerPartyIndexes -_0804BFB8: .4byte gEnemyParty -_0804BFBC: - ldr r1, _0804BFDC @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0804BFE0 @ =gPlayerParty -_0804BFCA: - adds r0, r1 - movs r1, 0x26 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0804BFDC: .4byte gBattlerPartyIndexes -_0804BFE0: .4byte gPlayerParty - thumb_func_end GetBankPokeballItemId - - .align 2, 0 @ Don't pad with nop. diff --git a/include/pokeball.h b/include/pokeball.h index 884ded22e..263dc8742 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -24,6 +24,7 @@ enum #define POKEBALL_OPPONENT_SENDOUT 0xFE u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); +//void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species) void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); u8 CreateTradePokeballSprite(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); u8 sub_807671C(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h); @@ -33,4 +34,7 @@ void LoadBallGfx(u8 ballId); void FreeBallGfx(u8 ballId); void sub_804BD94(u8 battler); +//temp +void SpriteCB_TestBallThrow(struct Sprite *sprite); + #endif // GUARD_POKEBALL_H diff --git a/include/task.h b/include/task.h index 834bb5655..785dbe6d4 100644 --- a/include/task.h +++ b/include/task.h @@ -10,13 +10,13 @@ typedef void (*TaskFunc)(u8 taskId); struct Task { - TaskFunc func; - bool8 isActive; - u8 prev; - u8 next; - u8 priority; - s16 data[16]; -}; + /*0x00*/ TaskFunc func; + /*0x04*/ bool8 isActive; + /*0x05*/ u8 prev; + /*0x06*/ u8 next; + /*0x07*/ u8 priority; + /*0x08*/ s16 data[16]; //8, a, c, e, 10, 12, 14, 16, 18, 1a, 1c, 1e, 20, 22, 24, 26 +}; /*size = 0x28*/ extern struct Task gTasks[]; diff --git a/ld_script.txt b/ld_script.txt index cf7005555..c5dfe1797 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -83,7 +83,7 @@ SECTIONS { src/daycare.o(.text); asm/battle_interface.o(.text); asm/smokescreen.o(.text); - asm/pokeball.o(.text); + src/pokeball.o(.text); src/load_save.o(.text); src/trade.o(.text); src/trade_scene.o(.text); diff --git a/src/pokeball.c b/src/pokeball.c index e9d50599b..cbba77bb2 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1,13 +1,1301 @@ #include "global.h" -#include "pokeball.h" #include "battle.h" +#include "battle_anim.h" +#include "decompress.h" +#include "graphics.h" +#include "main.h" +#include "m4a.h" +#include "pokeball.h" +#include "pokemon.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "link.h" +#include "battle_gfx_sfx_util.h" +#include "constants/songs.h" +#include "constants/species.h" + +#define tFrames data[0] +#define tPan data[1] +#define tThrowId data[2] +#define tBattler data[3] +#define tOpponentBattler data[4] + +#define sBattler data[6] + +// Function Declarations +static void Task_DoPokeballSendOutAnim(u8 taskId); +//static void SpriteCB_TestBallThrow(struct Sprite *sprite); +static void sub_804AC88(struct Sprite *sprite); +static void sub_804AC94(struct Sprite *sprite); +static void sub_804AD00(struct Sprite *sprite); +static void sub_804AD98(struct Sprite *sprite); +static void sub_804ADEC(struct Sprite *sprite); +static void sub_804AEE4(struct Sprite *sprite); +static void sub_804AF24(struct Sprite *sprite); +static void Task_PlayCryWhenReleasedFromBall(u8 taskId); +static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite); +static void sub_804B484(struct Sprite *sprite); +static void HandleBallAnimEnd(struct Sprite *sprite); +static void sub_804B5C8(struct Sprite *sprite); +static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite); +static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite); +static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite); +static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite); +static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d); +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2); +static void sub_804B9E8(struct Sprite *sprite); +static void sub_804BAA4(struct Sprite *sprite); +static void sub_804BC50(struct Sprite *sprite); +static void sub_804BCF8(struct Sprite *sprite); +static void sub_804BD6C(struct Sprite *sprite); +static void DestroySpriteAndFreeResources2(struct Sprite *sprite); +static void sub_804BE24(struct Sprite *sprite); +static void sub_804BE48(struct Sprite *sprite); +static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite); +static u16 GetBattlerPokeballItemId(u8 battlerId); + +// Data +extern const struct SpriteTemplate gUnknown_82606F4[]; + +extern const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT]; +extern const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT]; + +// Functions +u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) +{ + u8 taskId; + + gDoingBattleAnim = TRUE; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1; + taskId = CreateTask(Task_DoPokeballSendOutAnim, 5); + gTasks[taskId].tPan = pan; + gTasks[taskId].tThrowId = kindOfThrow; + gTasks[taskId].tBattler = gActiveBattler; + return 0; +} + +#ifdef NONMATCHING +static void Task_DoPokeballSendOutAnim(u8 taskId) +{ + u16 throwCaseId; + u8 battlerId; + u16 itemId, ballId; + u8 ballSpriteId; + bool8 notSendOut = FALSE; + u8 gender; + + if (gTasks[taskId].tFrames == 0) + { + gTasks[taskId].tFrames++; + return; + } + + throwCaseId = gTasks[taskId].tThrowId; + battlerId = gTasks[taskId].tBattler; + + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + else + itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + + ballId = ItemIdToBallId(itemId); + LoadBallGfx(ballId); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender; + else + gender = gSaveBlock2Ptr->playerGender; + + ballSpriteId = CreateSprite(&gUnknown_82606F4[ballId], 32, 80, 29); + gSprites[ballSpriteId].data[0] = 0x80; + gSprites[ballSpriteId].data[1] = 0; + gSprites[ballSpriteId].data[7] = throwCaseId; + + switch (throwCaseId) + { + case POKEBALL_PLAYER_SENDOUT: + if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + gSprites[ballSpriteId].pos1.x = 32; + gSprites[ballSpriteId].pos1.y = 64; + } + else + { + gender == gender; + gSprites[ballSpriteId].pos1.x = 48; + gSprites[ballSpriteId].pos1.y = 70; + } + + gBattlerTarget = battlerId; + gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1; + break; + case POKEBALL_OPPONENT_SENDOUT: + gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X); + gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 24; + gBattlerTarget = battlerId; + gSprites[ballSpriteId].data[0] = 0; + gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut; + break; + default: + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + notSendOut = TRUE; + break; + } + gSprites[ballSpriteId].sBattler = gBattlerTarget; + if (!notSendOut) + { + DestroyTask(taskId); + return; + } -u8 DoPokeballSendOutAnimation(u16 a0, u8 a1) + // this will perform an unused ball throw animation + gSprites[ballSpriteId].data[0] = 0x22; + gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X); + gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16; + gSprites[ballSpriteId].data[5] = -40; + InitAnimArcTranslation(&gSprites[ballSpriteId]); + gSprites[ballSpriteId].oam.affineParam = taskId; + gTasks[taskId].tOpponentBattler = gBattlerTarget; + gTasks[taskId].func = TaskDummy; + PlaySE(SE_NAGERU); +} +#else +NAKED +static void Task_DoPokeballSendOutAnim(u8 taskId) { - gDoingBattleAnim = 1; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE; - CreateTask(sub_804A9A0, 5); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r1, _0804A9D4 @ =gTasks\n" + "\tldr r2, [sp]\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r1, r0, r1\n" + "\tldrh r2, [r1, 0x8]\n" + "\tmovs r3, 0x8\n" + "\tldrsh r0, [r1, r3]\n" + "\tcmp r0, 0\n" + "\tbne _0804A9D8\n" + "\tadds r0, r2, 0x1\n" + "\tstrh r0, [r1, 0x8]\n" + "\tb _0804ABB8\n" + "\t.align 2, 0\n" + "_0804A9D4: .4byte gTasks\n" + "_0804A9D8:\n" + "\tldrh r0, [r1, 0xC]\n" + "\tmov r9, r0\n" + "\tldrb r6, [r1, 0xE]\n" + "\tadds r0, r6, 0\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0804AA04\n" + "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r1\n" + "\tldr r1, _0804AA00 @ =gEnemyParty\n" + "\tb _0804AA12\n" + "\t.align 2, 0\n" + "_0804A9FC: .4byte gBattlerPartyIndexes\n" + "_0804AA00: .4byte gEnemyParty\n" + "_0804AA04:\n" + "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r1\n" + "\tldr r1, _0804AA54 @ =gPlayerParty\n" + "_0804AA12:\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x26\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl ItemIdToBallId\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tbl LoadBallGfx\n" + "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0804AA60\n" + "\tldr r4, _0804AA5C @ =gLinkPlayers\n" + "\tadds r0, r6, 0\n" + "\tbl GetBattlerMultiplayerId\n" + "\tlsls r1, r0, 3\n" + "\tsubs r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r4\n" + "\tldrb r1, [r1, 0x13]\n" + "\tmov r10, r1\n" + "\tb _0804AA68\n" + "\t.align 2, 0\n" + "_0804AA50: .4byte gBattlerPartyIndexes\n" + "_0804AA54: .4byte gPlayerParty\n" + "_0804AA58: .4byte gBattleTypeFlags\n" + "_0804AA5C: .4byte gLinkPlayers\n" + "_0804AA60:\n" + "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r0]\n" + "\tldrb r0, [r0, 0x8]\n" + "\tmov r10, r0\n" + "_0804AA68:\n" + "\tlsls r0, r5, 1\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tldr r1, _0804AABC @ =gUnknown_82606F4\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x20\n" + "\tmovs r2, 0x50\n" + "\tmovs r3, 0x1D\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r5, r7, 4\n" + "\tadds r0, r5, r7\n" + "\tlsls r0, 2\n" + "\tmov r8, r0\n" + "\tldr r4, _0804AAC0 @ =gSprites\n" + "\tadd r4, r8\n" + "\tmovs r0, 0x80\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r4, 0x30]\n" + "\tmov r2, r9\n" + "\tstrh r2, [r4, 0x3C]\n" + "\tmov r3, r9\n" + "\tcmp r3, 0xFE\n" + "\tbeq _0804AAF8\n" + "\tcmp r3, 0xFF\n" + "\tbne _0804AB38\n" + "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 9\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0804AAC8\n" + "\tmovs r5, 0x20\n" + "\tmovs r4, 0x40\n" + "\tb _0804AACE\n" + "\t.align 2, 0\n" + "_0804AAB8: .4byte gSaveBlock2Ptr\n" + "_0804AABC: .4byte gUnknown_82606F4\n" + "_0804AAC0: .4byte gSprites\n" + "_0804AAC4: .4byte gBattleTypeFlags\n" + "_0804AAC8:\n" + "\tmov r0, r10\n" + "\tmovs r5, 0x30\n" + "\tmovs r4, 0x46\n" + "_0804AACE:\n" + "\tldr r0, _0804AAEC @ =gBattlerTarget\n" + "\tstrb r6, [r0]\n" + "\tldr r2, _0804AAF0 @ =gSprites\n" + "\tlsls r3, r7, 4\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r0, r1, r2\n" + "\tstrh r5, [r0, 0x20]\n" + "\tstrh r4, [r0, 0x22]\n" + "\tadds r2, 0x1C\n" + "\tadds r1, r2\n" + "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n" + "\tstr r0, [r1]\n" + "\tb _0804AB48\n" + "\t.align 2, 0\n" + "_0804AAEC: .4byte gBattlerTarget\n" + "_0804AAF0: .4byte gSprites\n" + "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n" + "_0804AAF8:\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x20]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadds r0, 0x18\n" + "\tstrh r0, [r4, 0x22]\n" + "\tldr r0, _0804AB2C @ =gBattlerTarget\n" + "\tstrb r6, [r0]\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r4, 0x2E]\n" + "\tldr r0, _0804AB30 @ =gSprites\n" + "\tadds r0, 0x1C\n" + "\tadd r0, r8\n" + "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n" + "\tstr r1, [r0]\n" + "\tb _0804AB46\n" + "\t.align 2, 0\n" + "_0804AB2C: .4byte gBattlerTarget\n" + "_0804AB30: .4byte gSprites\n" + "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n" + "_0804AB38:\n" + "\tmovs r0, 0x1\n" + "\tbl GetBattlerAtPosition\n" + "\tldr r1, _0804AB64 @ =gBattlerTarget\n" + "\tstrb r0, [r1]\n" + "\tmovs r2, 0x1\n" + "\tstr r2, [sp, 0x4]\n" + "_0804AB46:\n" + "\tadds r3, r5, 0\n" + "_0804AB48:\n" + "\tldr r0, _0804AB68 @ =gSprites\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r4, r1, r0\n" + "\tldr r5, _0804AB64 @ =gBattlerTarget\n" + "\tldrb r0, [r5]\n" + "\tstrh r0, [r4, 0x3A]\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r3, 0\n" + "\tbne _0804AB6C\n" + "\tldr r0, [sp]\n" + "\tbl DestroyTask\n" + "\tb _0804ABB8\n" + "\t.align 2, 0\n" + "_0804AB64: .4byte gBattlerTarget\n" + "_0804AB68: .4byte gSprites\n" + "_0804AB6C:\n" + "\tmovs r0, 0x22\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tldrb r0, [r5]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrb r0, [r5]\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tsubs r0, 0x10\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldr r0, _0804ABC8 @ =0x0000ffd8\n" + "\tstrh r0, [r4, 0x38]\n" + "\tadds r0, r4, 0\n" + "\tbl InitAnimArcTranslation\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0x6]\n" + "\tldr r1, _0804ABCC @ =gTasks\n" + "\tldr r2, [sp]\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrb r1, [r5]\n" + "\tstrh r1, [r0, 0x10]\n" + "\tldr r1, _0804ABD0 @ =TaskDummy\n" + "\tstr r1, [r0]\n" + "\tmovs r0, 0x36\n" + "\tbl PlaySE\n" + "_0804ABB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804ABC8: .4byte 0x0000ffd8\n" + "_0804ABCC: .4byte gTasks\n" + "_0804ABD0: .4byte TaskDummy\n"); +} +#endif - return 0; +//static +void SpriteCB_TestBallThrow(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + u16 ballId; + u8 taskId = sprite->oam.affineParam; + u8 opponentBattler = gTasks[taskId].tOpponentBattler; + u8 noOfShakes = gTasks[taskId].tThrowId; + + StartSpriteAnim(sprite, 1); + sprite->affineAnimPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[5] = 0; + ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler)); + LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId); + sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId); + sprite->sBattler = opponentBattler; + sprite->data[7] = noOfShakes; + DestroyTask(taskId); + sprite->callback = sub_804AC88; + } } + +#undef tFrames +#undef tPan +#undef tThrowId +#undef tBattler +#undef tOpponentBattler + +static void sub_804AC88(struct Sprite *sprite) +{ + sprite->callback = sub_804AC94; +} + +static void sub_804AC94(struct Sprite *sprite) +{ + if (++sprite->data[5] == 10) + { + sprite->data[5] = 0; + sprite->callback = sub_804AD00; + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2); + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0; + } +} + +static void sub_804AD00(struct Sprite *sprite) +{ + sprite->data[5]++; + if (sprite->data[5] == 11) + PlaySE(SE_SUIKOMU); + if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded) + { + StartSpriteAnim(sprite, 2); + gSprites[gBattlerSpriteIds[sprite->sBattler]].invisible = TRUE; + sprite->data[5] = 0; + sprite->callback = sub_804AD98; + } + else + { + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] += 0x60; + gSprites[gBattlerSpriteIds[sprite->sBattler]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] >> 8; + } +} + +static void sub_804AD98(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sprite->data[5]++; + if (sprite->data[5] == 1) + { + sprite->data[3] = 0; + sprite->data[4] = 32; + sprite->data[5] = 0; + sprite->pos1.y += Cos(0, 32); + sprite->pos2.y = -Cos(0, sprite->data[4]); + sprite->callback = sub_804ADEC; + } + } +} + +static void sub_804ADEC(struct Sprite *sprite) +{ + bool8 r5 = FALSE; + + switch (sprite->data[3] & 0xFF) + { + case 0: + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] += 4 + (sprite->data[3] >> 8); + if (sprite->data[5] >= 64) + { + sprite->data[4] -= 10; + sprite->data[3] += 0x101; + if (sprite->data[3] >> 8 == 4) + r5 = TRUE; + switch (sprite->data[3] >> 8) + { + case 1: + PlaySE(SE_KON); + break; + case 2: + PlaySE(SE_KON2); + break; + case 3: + PlaySE(SE_KON3); + break; + default: + PlaySE(SE_KON4); + break; + } + } + break; + case 1: + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] -= 4 + (sprite->data[3] >> 8); + if (sprite->data[5] <= 0) + { + sprite->data[5] = 0; + sprite->data[3] &= 0xFF00; + } + break; + } + if (r5) + { + sprite->data[3] = 0; + sprite->pos1.y += Cos(64, 32); + sprite->pos2.y = 0; + if (sprite->data[7] == 0) + { + sprite->callback = SpriteCB_ReleaseMonFromBall; + } + else + { + sprite->callback = sub_804AEE4; + sprite->data[4] = 1; + sprite->data[5] = 0; + } + } +} + +static void sub_804AEE4(struct Sprite *sprite) +{ + sprite->data[3]++; + if (sprite->data[3] == 31) + { + sprite->data[3] = 0; + sprite->affineAnimPaused = TRUE; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_804AF24; + PlaySE(SE_BOWA); + } +} + +static void sub_804AF24(struct Sprite *sprite) +{ + switch (sprite->data[3] & 0xFF) + { + case 0: + case 2: + sprite->pos2.x += sprite->data[4]; + sprite->data[5] += sprite->data[4]; + sprite->affineAnimPaused = FALSE; + if (sprite->data[5] > 3 || sprite->data[5] < -3) + { + sprite->data[3]++; + sprite->data[5] = 0; + } + break; + case 1: + sprite->data[5]++; + if (sprite->data[5] == 1) + { + sprite->data[5] = 0; + sprite->data[4] = -sprite->data[4]; + sprite->data[3]++; + sprite->affineAnimPaused = FALSE; + if (sprite->data[4] < 0) + ChangeSpriteAffineAnim(sprite, 2); + else + ChangeSpriteAffineAnim(sprite, 1); + } + else + { + sprite->affineAnimPaused = TRUE; + } + break; + case 3: + sprite->data[3] += 0x100; + if (sprite->data[3] >> 8 == sprite->data[7]) + { + sprite->callback = SpriteCB_ReleaseMonFromBall; + } + else + { + if (sprite->data[7] == 4 && sprite->data[3] >> 8 == 3) + { + sprite->callback = sub_804B484; + sprite->affineAnimPaused = TRUE; + } + else + { + sprite->data[3]++; + sprite->affineAnimPaused = TRUE; + } + } + break; + case 4: + default: + sprite->data[5]++; + if (sprite->data[5] == 31) + { + sprite->data[5] = 0; + sprite->data[3] &= 0xFF00; + StartSpriteAffineAnim(sprite, 3); + if (sprite->data[4] < 0) + StartSpriteAffineAnim(sprite, 2); + else + StartSpriteAffineAnim(sprite, 1); + PlaySE(SE_BOWA); + } + break; + } +} + +#define tCryTaskSpecies data[0] +#define tCryTaskPan data[1] +#define tCryTaskWantedCry data[2] +#define tCryTaskBattler data[3] +#define tCryTaskMonSpriteId data[4] +#define tCryTaskMonPtr1 data[5] +#define tCryTaskMonPtr2 data[6] +#define tCryTaskFrames data[10] +#define tCryTaskState data[15] + +static void Task_PlayCryWhenReleasedFromBall(u8 taskId) +{ + u8 wantedCry = gTasks[taskId].tCryTaskWantedCry; + s8 pan = gTasks[taskId].tCryTaskPan; + u16 species = gTasks[taskId].tCryTaskSpecies; + u8 battlerId = gTasks[taskId].tCryTaskBattler; + u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId; + struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2)); + + switch (gTasks[taskId].tCryTaskState) + { + case 0: + default: + if (gSprites[monSpriteId].affineAnimEnded) + gTasks[taskId].tCryTaskState = wantedCry + 1; + break; + case 1: + if (ShouldPlayNormalPokeCry(mon) == TRUE) + PlayCry3(species, pan, 0); + else + PlayCry3(species, pan, 11); + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); + break; + case 2: + StopCryAndClearCrySongs(); + gTasks[taskId].tCryTaskFrames = 3; + gTasks[taskId].tCryTaskState = 20; + break; + case 20: + if (gTasks[taskId].tCryTaskFrames == 0) + { + if (ShouldPlayNormalPokeCry(mon) == TRUE) + PlayCry4(species, pan, 1); + else + PlayCry4(species, pan, 12); + + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); + } + else + { + gTasks[taskId].tCryTaskFrames--; + } + break; + case 3: + gTasks[taskId].tCryTaskFrames = 6; + gTasks[taskId].tCryTaskState = 30; + break; + case 30: + if (gTasks[taskId].tCryTaskFrames != 0) + { + gTasks[taskId].tCryTaskFrames--; + break; + } + gTasks[taskId].tCryTaskState++; + // fall through + case 31: + if (!IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + gTasks[taskId].tCryTaskFrames = 3; + gTasks[taskId].tCryTaskState++; + } + break; + case 32: + if (gTasks[taskId].tCryTaskFrames != 0) + { + gTasks[taskId].tCryTaskFrames--; + break; + } + if (ShouldPlayNormalPokeCry(mon) == TRUE) + PlayCry4(species, pan, 0); + else + PlayCry4(species, pan, 11); + + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); + break; + } +} + +static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) +{ + u8 battlerId = sprite->sBattler; + u32 ballId; + + StartSpriteAnim(sprite, 1); + ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); + LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId); + sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId); + sprite->callback = HandleBallAnimEnd; + + if (gMain.inBattle) + { + struct Pokemon *mon; + u16 species; + s8 pan; + u16 wantedCryCase; + u8 taskId; + + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + pan = 25; + } + else + { + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + pan = -25; + } + + species = GetMonData(mon, MON_DATA_SPECIES); + if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (IsBGMPlaying()) + m4aMPlayStop(&gMPlayInfo_BGM); + } + else + { + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + } + } + + if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1) + wantedCryCase = 0; + else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + wantedCryCase = 1; + else + wantedCryCase = 2; + + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1; + + taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3); + gTasks[taskId].tCryTaskSpecies = species; + gTasks[taskId].tCryTaskPan = pan; + gTasks[taskId].tCryTaskWantedCry = wantedCryCase; + gTasks[taskId].tCryTaskBattler = battlerId; + gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler]; + gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10; + gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon); + gTasks[taskId].tCryTaskState = 0; + } + + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1); + +/* + if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT) + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58; + else + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44; +*/ + + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; +} + +#undef tCryTaskSpecies +#undef tCryTaskPan +#undef tCryTaskWantedCry +#undef tCryTaskBattler +#undef tCryTaskMonSpriteId +#undef tCryTaskMonPtr1 +#undef tCryTaskMonPtr2 +#undef tCryTaskFrames +#undef tCryTaskState + +static void sub_804B484(struct Sprite *sprite) +{ + sprite->animPaused = TRUE; + sprite->callback = sub_804B5C8; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 0; +} + +static void HandleBallAnimEnd(struct Sprite *sprite) +{ + bool8 affineAnimEnded = FALSE; + u8 battlerId = sprite->sBattler; + + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; + if (sprite->animEnded) + sprite->invisible = TRUE; + if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); + affineAnimEnded = TRUE; + } + else + { + gSprites[gBattlerSpriteIds[battlerId]].data[1] -= 288; + gSprites[gBattlerSpriteIds[battlerId]].pos2.y = gSprites[gBattlerSpriteIds[battlerId]].data[1] >> 8; + } + if (sprite->animEnded && affineAnimEnded) + { + s32 i, doneBattlers; + + gSprites[gBattlerSpriteIds[battlerId]].pos2.y = 0; + gDoingBattleAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + + for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0) + doneBattlers++; + } + if (doneBattlers == MAX_BATTLERS_COUNT) + { + for (i = 0; i < POKEBALL_COUNT; i++) + FreeBallGfx(i); + } + } +} + +static void sub_804B5C8(struct Sprite *sprite) +{ + u8 battlerId = sprite->sBattler; + + sprite->data[4]++; + if (sprite->data[4] == 40) + { + return; + } + else if (sprite->data[4] == 95) + { + gDoingBattleAnim = FALSE; + m4aMPlayAllStop(); + PlaySE(MUS_FANFA5); + } + else if (sprite->data[4] == 315) + { + FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBattler]].oam.matrixNum); + DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + DestroySpriteAndFreeResources(sprite); + if (gMain.inBattle) + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + } +} + +static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite) +{ + sprite->data[0] = 25; + sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2); + sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24; + sprite->data[5] = -30; + sprite->oam.affineParam = sprite->sBattler; + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_PlayerMonSendOut_2; +} + +#define HIBYTE(x) (((x) >> 8) & 0xFF) + +static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) +{ + u32 r6; + u32 r7; + + if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80) + { + s16 r4; + + if ((sprite->oam.affineParam & 0xFF00) == 0) + { + r6 = sprite->data[1] & 1; + r7 = sprite->data[2] & 1; + sprite->data[1] = ((sprite->data[1] / 3) & ~1) | r6; + sprite->data[2] = ((sprite->data[2] / 3) & ~1) | r7; + StartSpriteAffineAnim(sprite, 4); + } + r4 = sprite->data[0]; + AnimTranslateLinear(sprite); + sprite->data[7] += sprite->sBattler / 3; + sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]); + sprite->oam.affineParam += 0x100; + if ((sprite->oam.affineParam >> 8) % 3 != 0) + sprite->data[0] = r4; + else + sprite->data[0] = r4 - 1; + if (HIBYTE(sprite->data[7]) >= 80) + { + r6 = sprite->data[1] & 1; + r7 = sprite->data[2] & 1; + sprite->data[1] = ((sprite->data[1] * 3) & ~1) | r6; + sprite->data[2] = ((sprite->data[2] * 3) & ~1) | r7; + } + } + else + { + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->sBattler = sprite->oam.affineParam & 0xFF; + sprite->data[0] = 0; + + if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 + && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) + sprite->callback = SpriteCB_ReleaseMon2FromBall; + else + sprite->callback = SpriteCB_ReleaseMonFromBall; + + StartSpriteAffineAnim(sprite, 0); + } + } +} + +static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite) +{ + if (sprite->data[0]++ > 24) + { + sprite->data[0] = 0; + sprite->callback = SpriteCB_ReleaseMonFromBall; + } +} + +static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 15) + { + sprite->data[0] = 0; + if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 + && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) + sprite->callback = SpriteCB_ReleaseMon2FromBall; + else + sprite->callback = SpriteCB_ReleaseMonFromBall; + } +} + +#undef sBattler + +static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d) +{ + return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE); +} + +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2) +{ + return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE); +} + +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h) +{ + u8 spriteId; + + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy); + + gSprites[spriteId].data[0] = monSpriteId; + gSprites[spriteId].data[5] = gSprites[monSpriteId].pos1.x; + gSprites[spriteId].data[6] = gSprites[monSpriteId].pos1.y; + + gSprites[monSpriteId].pos1.x = x; + gSprites[monSpriteId].pos1.y = y; + //gSprites[monSpriteId].data[7] = species; + + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = battlerId; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 0x10; + gSprites[spriteId].oam.priority = oamPriority; + gSprites[spriteId].callback = sub_804B9E8; + + gSprites[monSpriteId].invisible = TRUE; +} + +static void sub_804B9E8(struct Sprite *sprite) +{ + if (sprite->data[1] == 0) + { + u8 r5; + u8 r7 = sprite->data[0]; + u8 battlerId = sprite->data[2]; + u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); + + if (sprite->subpriority != 0) + r5 = sprite->subpriority - 1; + else + r5 = 0; + + StartSpriteAnim(sprite, 1); + LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4); + sprite->callback = sub_804BAA4; + gSprites[r7].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[r7], 1); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data[1] = 0x1000; + sprite->data[7] = 0; + } + else + { + sprite->data[1]--; + } +} + +static void sub_804BAA4(struct Sprite *sprite) +{ + bool8 r12 = FALSE; + bool8 r6 = FALSE; + u8 monSpriteId = sprite->data[0]; + u16 var1; + u16 var2; + + if (sprite->animEnded) + sprite->invisible = TRUE; + if (gSprites[monSpriteId].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[monSpriteId], 0); + r12 = TRUE; + } + var1 = (sprite->data[5] - sprite->pos1.x) * sprite->data[7] / 128 + sprite->pos1.x; + var2 = (sprite->data[6] - sprite->pos1.y) * sprite->data[7] / 128 + sprite->pos1.y; + gSprites[monSpriteId].pos1.x = var1; + gSprites[monSpriteId].pos1.y = var2; + if (sprite->data[7] < 128) + { + s16 sine = -(gSineTable[(u8)sprite->data[7]] / 8); + + sprite->data[7] += 4; + gSprites[monSpriteId].pos2.x = sine; + gSprites[monSpriteId].pos2.y = sine; + } + else + { + gSprites[monSpriteId].pos1.x = sprite->data[5]; + gSprites[monSpriteId].pos1.y = sprite->data[6]; + gSprites[monSpriteId].pos2.x = 0; + gSprites[monSpriteId].pos2.y = 0; + r6 = TRUE; + } + if (sprite->animEnded && r12 && r6) + { + if (gSprites[monSpriteId].data[7] == SPECIES_EGG) + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0); + else + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0); + + DestroySpriteAndFreeResources(sprite); + } +} + +u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) +{ + u8 spriteId; + + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subPriority); + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = b; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 16; + gSprites[spriteId].oam.priority = oamPriority; + gSprites[spriteId].callback = sub_804BC50; + return spriteId; +} + +static void sub_804BC50(struct Sprite *sprite) +{ + if (sprite->data[1] == 0) + { + u8 r6; + u8 r7 = sprite->data[0]; + u8 r8 = sprite->data[2]; + u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); + + if (sprite->subpriority != 0) + r6 = sprite->subpriority - 1; + else + r6 = 0; + + StartSpriteAnim(sprite, 1); + LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); + sprite->callback = sub_804BCF8; + StartSpriteAffineAnim(&gSprites[r7], 2); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data[1] = 0; + } + else + { + sprite->data[1]--; + } +} + +static void sub_804BCF8(struct Sprite *sprite) +{ + u8 r1; + + sprite->data[5]++; + if (sprite->data[5] == 11) + PlaySE(SE_SUIKOMU); + r1 = sprite->data[0]; + if (gSprites[r1].affineAnimEnded) + { + StartSpriteAnim(sprite, 2); + gSprites[r1].invisible = TRUE; + sprite->data[5] = 0; + sprite->callback = sub_804BD6C; + } + else + { + gSprites[r1].data[1] += 96; + gSprites[r1].pos2.y = -gSprites[r1].data[1] >> 8; + } +} + +static void sub_804BD6C(struct Sprite *sprite) +{ + if (sprite->animEnded) + sprite->callback = SpriteCallbackDummy; +} + +static void DestroySpriteAndFreeResources2(struct Sprite *sprite) +{ + DestroySpriteAndFreeResources(sprite); +} + +void sub_804BD94(u8 battlerId) +{ + struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]]; + + healthboxSprite->data[0] = 5; + healthboxSprite->data[1] = 0; + healthboxSprite->pos2.x = 0x73; + healthboxSprite->pos2.y = 0; + healthboxSprite->callback = sub_804BE48; + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + healthboxSprite->data[0] = -healthboxSprite->data[0]; + healthboxSprite->data[1] = -healthboxSprite->data[1]; + healthboxSprite->pos2.x = -healthboxSprite->pos2.x; + healthboxSprite->pos2.y = -healthboxSprite->pos2.y; + } + gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]); + if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT) + healthboxSprite->callback = sub_804BE24; +} + +static void sub_804BE24(struct Sprite *sprite) +{ + sprite->data[1]++; + if (sprite->data[1] == 20) + { + sprite->data[1] = 0; + sprite->callback = sub_804BE48; + } +} + +static void sub_804BE48(struct Sprite *sprite) +{ + sprite->pos2.x -= sprite->data[0]; + sprite->pos2.y -= sprite->data[1]; + if (sprite->pos2.x == 0 && sprite->pos2.y == 0) + sprite->callback = SpriteCallbackDummy; +} + +void DoHitAnimHealthboxEffect(u8 battlerId) +{ + u8 spriteId; + + spriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HitAnimHealthoxEffect); + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = gHealthboxSpriteIds[battlerId]; + gSprites[spriteId].callback = SpriteCB_HitAnimHealthoxEffect; +} + +static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite) +{ + u8 r1 = sprite->data[1]; + + gSprites[r1].pos2.y = sprite->data[0]; + sprite->data[0] = -sprite->data[0]; + sprite->data[2]++; + if (sprite->data[2] == 21) + { + gSprites[r1].pos2.x = 0; + gSprites[r1].pos2.y = 0; + DestroySprite(sprite); + } +} + +void LoadBallGfx(u8 ballId) +{ + u16 var; + + if (GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag) == 0xFFFF) + { + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]); + } + switch (ballId) + { + case BALL_DIVE: + case BALL_LUXURY: + case BALL_PREMIER: + break; + default: + var = GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag); + LZDecompressVram(gOpenPokeballGfx, (void *)(VRAM + 0x10100 + var * 32)); + break; + } +} + +void FreeBallGfx(u8 ballId) +{ + FreeSpriteTilesByTag(gBallSpriteSheets[ballId].tag); + FreeSpritePaletteByTag(gBallSpritePalettes[ballId].tag); +} + +static u16 GetBattlerPokeballItemId(u8 battlerId) +{ + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + else + return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); +} + |